Commit 415dd333 authored by ayolo's avatar ayolo

c'est là que tout commence

parent 5f49ab0f
<?php
define("CACHE_DIR",$topdir."var/cache/contents/");
/**
* Permet de mettre le rendu HTML d'un stdcontents en cache.
*
* L'expiration des données mises en cache doit se faire par appel de expire().
*
*/
class cachedcontents extends stdcontents
{
protected $uid;
public function cachedcontents ( $uid )
{
$this->uid = $uid;
}
public function expire ( )
{
if ( $this->is_cached() )
unlink(CACHE_DIR.$this->uid);
}
public function is_cached()
{
return file_exists(CACHE_DIR.$this->uid) && !isset($_GET["__nocache"]);
}
public function is_cached_since($timestamp)
{
return file_exists(CACHE_DIR.$this->uid) && filemtime(CACHE_DIR.$this->uid) > $timestamp && !isset($_GET["__nocache"]);
}
public function get_cache()
{
if ( !$this->is_cached() )
return null;
$data = file_get_contents(CACHE_DIR.$this->uid);
$p1 = strpos($data,"\n");
$this->title = substr($data,0,$p1);
$this->buffer = substr($data,$p1+1);
unset($data);
return $this;
}
public function set_contents ( &$contents )
{
if ( !file_exists(CACHE_DIR) && is_writable(CACHE_DIR."../") )
mkdir(CACHE_DIR);
$this->title = $contents->title;
$this->buffer =
"<!-- C".date ("d/m/Y H:i:s")." -->".
preg_replace("/(pain au chocolat|petit pain)/i", "CHOCOLATINE",$contents->html_render());
if ( is_writable(CACHE_DIR) )
file_put_contents(CACHE_DIR.$this->uid,$this->title."\n".$this->buffer);
return $this;
}
/**
* Mise en cache automatique d'un stdcontent générant son code HTML uniquement
* lors de l'appel à html_render().
* C'est aussi un bon exemple de l'usage de cachedcontents.
* @param $uid Identifiant Unique du contenu
* @param $cts Contents
*/
public static function autocache ( $uid, $cts )
{
$cache = new cachedcontents($uid);
if ( $cache->is_cached() )
return $cache->get_cache();
$cache->set_contents($cts);
return $cache;
}
}
?>
This diff is collapsed.
<?php
/* Copyright 2004-2007
* - Julien Etelain < julien at pmad dot net >
*
* Ce fichier fait partie du site de l'Association des Étudiants de
* l'UTBM, http://ae.utbm.fr.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/**
* @file
*/
/** @defgroup bdbrights Droits d'accés
* @ingroup stdentity
* @{
*/
/** lecture */
define("DROIT_LECTURE",0x1);
/** ecriture */
define("DROIT_ECRITURE",0x2);
/** ajout sous catégorie */
define("DROIT_AJOUTCAT",0x4);
/** ajout élément */
define("DROIT_AJOUTITEM",0x8);
/**
* @}
*/
define("DROIT_MASKCAT",0xFFD);
define("DROIT_MASKITEM",0x331);
/**
* Gère un objet à droits d'accés et modéré
* @ingroup stdentity
* @author Julien Etelain
*/
abstract class basedb extends stdentity
{
/** Id du propriétaire */
var $id_utilisateur;
/** Id du groupe propriétaire */
var $id_groupe;
/** Id du groupe d'administration */
var $id_groupe_admin;
/** Droits d'accés
* Ces droits se combinent, et se repértissent sur 3x4 bits
* 0-4 : Tout le monde (0x0F)
* 5-8 : Groupe (0x0F0)
* 7-12 : Propriètaire (0xF00)
* @see bdbrights
*/
var $droits_acces;
/** Element modéré ou non */
var $modere;
/**
* Instancie un objet à droits d'accés.
* @param $db Accés à la base de donnés en lecture seule.
* @param $dbrw Accés à la base de donnés en lecture et ecriture.
*/
function basedb ( &$db )
{
$this->stdentity($db);
}
/**
* Détermine si l'utilisateur est administrateur de l'élément
* @param $user Instance de utilisateur
*/
function is_admin ( &$user )
{
if ( $user->is_in_group_id($this->id_groupe_admin) )
return true;
return false;
}
/**
* Détermine si l'utilisateur a le droit spécifié sur l'élément
* @param $user Instance de utilisateur
* @param $required Droit à tester
*/
function is_right ( &$user, $required )
{
if ( $this->is_admin($user))
return true;
if ( !is_null($this->id_utilisateur)
&& ($user->id == $this->id_utilisateur)
&& ($required & ($this->droits_acces >> 8)) == $required
)
return true;
if ( $this->modere == 0 )
return false;
if ( ($user->is_in_group_id($this->id_groupe))
&& ($required & ($this->droits_acces >> 4)) == $required
)
return true;
if ( ($required & ($this->droits_acces)) == $required )
return true;
return false;
}
/**
* Fait hériter les droits depuis un autre élément.
* Le propriètaire n'est pas héréditaire !
* @param $basedb Element servant de base
* @param $category Déprécié, detection via la fonction $this->is_category()
*/
function herit ( $basedb, $category=true )
{
$this->id_utilisateur = null;
$this->id_groupe = $basedb->id_groupe;
$this->id_groupe_admin = $basedb->id_groupe_admin;
$this->modere=false;
if ( $this->is_category() )
$this->droits_acces = $basedb->droits_acces & DROIT_MASKCAT;
else
$this->droits_acces = $basedb->droits_acces & DROIT_MASKITEM;
}
/**
* Définit les droits d'accés de l'élément (pensez ensuite à enregistrer l'objet)
* @param $user Instance de l'utilisateur qui fait la modification (sui deviendra propiètaire si aucun n'est défini)
* @param $rigths Droits
* @param $id_group Id du groupe propriétaire
* @param $id_group_admin Id du groupe administrateur (non pris en compte si l'utilisateur n'est pas administrateur)
*/
function set_rights ( $user, $rights, $id_group, $id_group_admin )
{
if ( $this->is_admin($user) && $id_group_admin )
$this->id_groupe_admin = $id_group_admin;
if ( !$this->id_utilisateur )
$this->id_utilisateur = $user->id;
$this->id_groupe = $id_group;
if ( $this->is_category() )
$this->droits_acces = $rights & DROIT_MASKCAT;
else
$this->droits_acces = $rights & DROIT_MASKITEM;
}
/** Determine si la classe décrit une catégorie
* Valeur static
* @return true is de type catégorie, sinon false
*/
function is_category()
{
return true;
}
}
?>
This diff is collapsed.
<?php
/* Copyright 2006,2007
* - Julien Etelain < julien at pmad dot net >
*
* Ce fichier fait partie du site de l'Association des Étudiants de
* l'UTBM, http://ae.utbm.fr.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
*/
/**
* @file
*/
require_once($topdir."include/entities/basedb.inc.php");
require_once($topdir."include/entities/wiki.inc.php");
/**
* Page editable du site.
*
* Essentiellement utilisé par articles.php
*
* Exploite en réalité une page du wiki, mais sans être encombré par toutes
* les spécificités du wiki.
*
* @see wiki
* @author Julien Etelain
*/
class page extends wiki
{
var $nom;
var $texte;
var $date;
var $titre;
var $section;
/**
* Transforme un nom de page en son nom wiki
* @param $name Nom de page
* @return le nom de la page dans le wiki
*/
function translate_pagename ( $name )
{
$name = preg_replace("/[^a-z0-9\-_:#]/","_",strtolower(utf8_enleve_accents($name)));
return "articles:".$name;
}
/**
* Charge une page par son nom
* @param $name Nom de la page
* @return true en cas de succès, false sinon
*/
function load_by_pagename ( $name )
{
return $this->load_by_fullpath($this->translate_pagename($name));
}
function _load ( $row )
{
parent::_load($row);
$this->nom = substr($this->fullpath,9);
$this->texte = $this->rev_contents;
$this->date = $this->rev_date;
$this->titre = $this->rev_title;
}
/**
* Récupère un stdcontents pour afficher la page
* @return une intsance de stdcontents
*/
function get_contents ( )
{
return $this->get_stdcontents();
}
/**
* Enregistre la page
* @param $user Utilisateur enregistrant la page
* @param $titre Titre de la page
* @param $texte Texte de la page
* @param $section Section où se trouve la page
*/
function save ( &$user, $titre, $texte, $section )
{
if ( $this->is_locked($user) )
return false;
$this->section = $section;
$this->update();
$this->revision ( $user->id, $titre, $texte, "Edité comme un article" );
return true;
}
/**
* Crée une page page
* @param $user Utilisateur enregistrant la page
* @param $nom Nom de la page
* @param $titre Titre de la page
* @param $texte Texte de la page
* @param $section Section où se trouve la page
* @return true en cas de succès, false sinon
*/
function add ( &$user, $nom, $titre, $texte, $section )
{
$path = $this->translate_pagename($nom);
$parent = new wiki($this->db,$this->dbrw);
$pagename = $parent->load_or_create_parent($path, $user, $this->droits_acces, $this->id_groupe, $this->id_groupe_admin);
if ( is_null($pagename) || !$parent->is_valid() || $this->load_by_name($parent,$pagename) )
return false;
$this->create ( $parent, null, $pagename, 0, $titre, $texte, "Créée comme un article", $section );
return true;
}
function is_admin ( &$user )
{
if ( $user->is_in_group("moderateur_site") ) return true;
return parent::is_admin($user);
}
}
?>
<?php
/* Copyright 2007
* - Julien Etelain < julien at pmad dot net >
*
* Ce fichier fait partie du site de l'Association des Étudiants de
* l'UTBM, http://ae.utbm.fr.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
*/
require_once($topdir."include/catalog.inc.php");
/**
* @defgroup stdentity stdentity : Base des entitées pour l'accès aux données
*/
/**
* Standart base class for database entities classes
* @ingroup stdentity
* @author Julien Etelain
*/
abstract class stdentity
{
/** Identifiant unique de l'objet */
var $id;
/** Lien à la base de données en lecture seule */
var $db;
/** Cache des tags de l'objet
* @private
*/
var $_tags;
/**
* Constructeur par défaut.
*
* Il n'est pas nécessaire de redéfinir un construteur pour les classes
* héritant de stdentity.
*
* Id est définit à null par défaut. is_valid() renverra faux.
*
* @param $db Lien à la base de données en lecture seule
* @param $id Si fourni, appelle load_by_id avec $id
*/
function stdentity ( &$db, $id = null )
{
$this->db = &$db;
$this->id = null;
$this->_tags = null;
if(!is_null($id) && method_exists($this, 'load_by_id'))
try{
$this->load_by_id($id);
}catch(Exception $e){}
}
/**
* Check if entity is valid
* @return true if valid, false otherwise
*/
function is_valid()
{
return !is_null($this->id) && ($this->id != -1);
}
/**
* Get display name of entity
* @return entity display name
*/
function get_display_name()
{
if ( !empty($this->nom) )
return $this->nom;
if ( !empty($this->titre) )
return $this->titre;
if ( !empty($this->num) )
return "n°".$this->num;
return "n°".$this->id;
}
/**
* Get an html link to the entity with an icon and entity display name
* @return an html link to the entity
*/
function get_html_link()
{
global $topdir,$wwwtopdir;
$class = get_class($this);
if ( !$this->is_valid() )
return "(aucun)";
else
return "<a href=\"".$wwwtopdir.$GLOBALS["entitiescatalog"][$class][3]."?".$GLOBALS["entitiescatalog"][$class][0]."=".$this->id."\">".
"<img src=\"".$wwwtopdir."images/icons/16/".$GLOBALS["entitiescatalog"][$class][2]."\" class=\"icon\" alt=\"\" /> ".
htmlentities($this->get_display_name(),ENT_COMPAT,"UTF-8")."</a>";
}
/**
* Détermine si l'entité associé à cet objet préfére être sélectionné par
* le biais d'une liste
* Par défaut, non.
*
* @return true si l'entité associé à cet objet préfére être sélectionné par
* le biais d'une liste, false sinon
*/
function prefer_list()
{
return false;
}
/**
* Charge l'objet depuis une ligne de la base de données
* @param $row Ligne issue d'un résultat
*/
abstract function _load ( $row );
/** Charge un objet en fonction de son id
* En cas d'erreur, l'id est défini à null
* @param $id id de l'objet
* @return true en cas de succès, false sinon
*/
abstract function load_by_id ( $id );
/**
* Determine si un utilisateur peut consulter cet objet.
* @param $user Utilisateur qui souhaite consulter cet objet
* (instance de utilisateur)
* @return true si l'utilisateur peut consulter, false sinon
* @see utilisateur
*/
function allow_user_consult ( $user )
{
return true;
}
/**
* Check if instance can provide a preview image.
*/
function can_preview()
{
return false;
}
/**
* Return instance preview image. Only require 'id' to be loaded.
*/
function get_preview()
{
return null;
}
/**
* Get extended informations on instance (minimalist). Require all instance informations loaded.
* @return html contents
*/
function get_html_extended_info()
{
return "<b>".htmlentities($this->get_display_name(),ENT_COMPAT,"UTF-8")."</b>";
}
/**
* Get root element for the class (can be of a different class)
* @return an instance or null
*/
function get_root_element()
{
return null;
}
/**
* Get parent element of instance (can be of a different class)
* @return an instance or null
*/
function get_parent()
{
return null;
}
/**
* Get childs of instance (can ba mix of differents class)
* @return an array of class instances or null
*/
function get_childs(&$user)
{
return null;
}
/**
* Generate the patrh to the element using html link to each parent
*/
function get_html_path()
{
$path = $this->get_html_link();
$parent = $this->get_parent();
while ( !is_null($parent) )
{
$path = $parent->get_html_link()." / ".$path;
$parent = $parent->get_parent();
}
return $path;
}
/**
* Check if class can describe an instance
*/
function can_describe()
{
return false;
}
/**
* Get description of instance
* @see can_describe
*/
function get_description()
{
return "";
}
}
?>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<?php
/** @file
*
* @brief Connexion à la base MySQL du BDS.
*
* Cette version du fichier est celle distribuée avec le code source :
* elle ne contient pas les mots de passe de connexion aux bases de
* données.
*
*/
/* Copyright 2004
* - Alexandre Belloni <alexandre POINT belloni CHEZ utbm POINT fr>
* - Thomas Petazzoni <thomas POINT petazzoni CHEZ enix POINT org>
*
* Ce fichier fait partie du site de l'Association des Étudiants de
* l'UTBM, http://ae.utbm.fr.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/** Classe permettant de se connecter à la base du bds.i */
class mysqlbds extends mysql
{
function mysqlbds ()
{
if ( ! $this->mysql('login_read_write', 'mdp_read_write', 'host', 'base'))
return false;
}
}
?>
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment