Source for file class.classes.php
Documentation is available at class.classes.php
* Logique des classes d'objets du système
* LODEL - Logiciel d'Edition ELectronique.
* Home page: http://www.lodel.org
* E-Mail: lodel@lodel.org
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
* @author Ghislain Picard
* @copyright 2001-2002, Ghislain Picard, Marin Dacos
* @copyright 2003, Ghislain Picard, Marin Dacos, Luc Santeramo, Nicolas Nutten, Anne Gentil-Beccot
* @copyright 2004, Ghislain Picard, Marin Dacos, Luc Santeramo, Anne Gentil-Beccot, Bruno Cénou
* @copyright 2005, Ghislain Picard, Marin Dacos, Luc Santeramo, Gautier Poupeau, Jean Lamy, Bruno Cénou
* @copyright 2006, Marin Dacos, Luc Santeramo, Bruno Cénou, Jean Lamy, Mikaël Cixous, Sophie Malafosse
* @copyright 2007, Marin Dacos, Bruno Cénou, Sophie Malafosse, Pierre-Alain Mignot
* @licence http://www.gnu.org/copyleft/gpl.html
* @since Fichier ajouté depuis la version 0.8
* @version CVS:$Id: class.classes.php 4006 2007-10-05 11:53:41Z malafosse $
* Classe de logique des classes du système - Fille de la classe Logic
* @author Ghislain Picard
* @copyright 2001-2002, Ghislain Picard, Marin Dacos
* @copyright 2003, Ghislain Picard, Marin Dacos, Luc Santeramo, Nicolas Nutten, Anne Gentil-Beccot
* @copyright 2004, Ghislain Picard, Marin Dacos, Luc Santeramo, Anne Gentil-Beccot, Bruno Cénou
* @copyright 2005, Ghislain Picard, Marin Dacos, Luc Santeramo, Gautier Poupeau, Jean Lamy, Bruno Cénou
* @copyright 2006, Marin Dacos, Luc Santeramo, Bruno Cénou, Jean Lamy, Mikaël Cixous, Sophie Malafosse
* @copyright 2007, Marin Dacos, Bruno Cénou, Sophie Malafosse, Pierre-Alain Mignot
* @licence http://www.gnu.org/copyleft/gpl.html
* @since Classe ajouté depuis la version 0.8
$this->Logic ('classes');
* Indique si un objet est protégé en suppression
* Cette méthode indique si un objet, identifié par son identifiant numérique et
* éventuellement son status, ne peut pas être supprimé. Dans le cas où un objet ne serait
* pas supprimable un message est retourné indiquant la cause. Sinon la méthode renvoit le
* @param integer $id identifiant de l'objet
* @param integer $status status de l'objet
* @return false si l'objet n'est pas protégé en suppression, un message sinon
$vo = $dao->getById ($id, 'classtype');
switch ($vo->classtype) {
$msg = 'cannot_delete_hasentities';
$msg = 'cannot_delete_hasentries';
$msg = 'cannot_delete_haspersons';
$count = $db->getOne (lq ("SELECT count(*) FROM #_TP_". $vo->classtype. " INNER JOIN #_TP_". $types. " ON idtype=#_TP_". $types. ".id INNER JOIN #_TP_classes ON #_TP_". $types. ".class=#_TP_classes.class WHERE #_TP_classes.id='$id' AND #_TP_". $vo->classtype. ".status>-64 AND #_TP_". $types. ".status>-64 AND #_TP_classes.status>-64"));
* Indique le nom de la table type associée avec le type de classe
* Return the type table associated with the classtype
* @param string $classtype le type de la classe
* @return une valeur parmis : type, entrytypes et persontypes
* Préparation de l'action Edit
* @param object $dao la DAO utilisée
* @param array &$context le context passé par référence
// gather information for the following
$this->oldvo = $dao->getById ($context['id']);
die ("ERROR: internal error in Classes::deleteAction");
* Implémenation de l'action d'ajout ou d'édition d'un objet.
* <p>Cette fonction crée un nouvel objet ou édite un objet existant. Dans un premier temps les
* données sont validées (suivant leur type) puis elles sont rentrées dans la base de données <em>via</em> la DAO associée à l'objet.
* Utilise _prepareEdit() pour effectuer des opérations de préparation avant l'édition de l'objet puis _populateContext() pour ajouter des informations supplémentaires au context. Et enfin _saveRelatedTables() pour sauver d'éventuelles informations dans des tables liées.
* @param array $context le tableau des données passé par référence.
* @param array $error le tableau des erreurs rencontrées passé par référence.
* @param boolean $clean false si on ne doit pas nettoyer les données (par défaut à false).
* @return string les différentes valeurs possibles de retour d'une action (_ok, _back, _error ou xxxx).
function editAction(&$context, &$error, $clean = false)
if ($clean != CLEAN) { // validate the forms data
require_once 'fieldfunc.php';
$error['class'] = 'reservedsql';
// get the dao for working with the object
$id = $context['id'] = intval($context['id']);
$dao->instantiateObject($vo);
$vo = $dao->createObject();
if ($dao->rights['protect']) {
$vo->protect = $context['protected'] ? 1 : 0;
if (!$dao->save($vo)) trigger_error("You don't have the rights to modify or create this object", E_USER_ERROR);
return $ret ? $ret : "_back";
* Sauve des données dans des tables liées éventuellement
* Appelé par editAction pour effectuer des opérations supplémentaires de sauvegarde.
* @param object $vo l'objet qui a été créé
* @param array $context le contexte
//----------------new, create the table
if (!$this->oldvo->class) {
$create = "identity INTEGER UNSIGNED UNIQUE, KEY index_identity (identity)";
$create = "identry INTEGER UNSIGNED UNIQUE, KEY index_identry (identry)";
$create = "idperson INTEGER UNSIGNED UNIQUE, KEY index_idperson (idperson)";
$db->execute (lq ("CREATE TABLE IF NOT EXISTS #_TP_entities_". $vo->class. " ( idrelation INTEGER UNSIGNED UNIQUE, KEY index_idrelation (idrelation) )")) or dberror ();
$db->execute(lq("CREATE TABLE IF NOT EXISTS #_TP_". $vo->class. " ( ". $create. " )")) or dberror ();
//---------------- change class name ?
} elseif ($this->oldvo->class!= $vo->class) {
$db->execute (lq ("RENAME TABLE #_TP_". $this->oldvo->class. " TO #_TP_". $vo->class)) or dberror ();
if ($vo->classtype== "persons") {
$db->execute (lq ("RENAME TABLE #_TP_entities_". $this->oldvo->class. " TO #_TP_entities_". $vo->class)) or dberror ();
$db->execute (lq ("UPDATE #_TP_tablefields SET class='entities_". $vo->class. "' WHERE class='entities_". $this->oldvo->class. "'")) or dberror ();
// update tablefields, objects and types
foreach (array ('objects',
$db->execute (lq ("UPDATE #_TP_". $table. " SET class='". $vo->class. "' WHERE class='". $this->oldvo->class. "'")) or dberror ();
if ($alter) { // update the CACHE ?
require_once 'cachefunc.php';
* Appelé avant l'action delete
* Cette méthode est appelée avant l'action delete pour effectuer des vérifications
* préliminaires à une suppression.
* @param object $dao la DAO utilisée
* @param array &$context le contexte passé par référénce
// gather information for the following
$this->vo = $dao->getById ($context['id']);
die ("ERROR: internal error in Classes::deleteAction");
* Suppression éventuelle dans des tables liées
* @param integer $id identifiant numérique de l'objet supprimé
if (!$this->vo) die ("ERROR: internal error in Classes::deleteAction");
$db->execute (lq ("DROP TABLE #_TP_". $this->vo->class)) or dberror ();
if ($this->vo->classtype== "persons") {
$db->execute(lq("DROP TABLE #_TP_entities_". $this->vo->class)) or dberror();
// delete associated types
// collect the type to delete
$types= $dao->findMany ("class='". $this->vo->class. "'", "id");
foreach ($types as $type) {
$localcontext['id']= $type->id;
$logic->deleteAction ($localcontext, $err);
// delete tablefields and tablefieldgroups
$criteria= "class='". $this->vo->class. "'";
if ($this->vo->classtype== "persons") {
$criteria.= " OR class='entities_". $this->vo->class. "'";
$dao->deleteObjects ($criteria);
$dao= &getDAO ("tablefieldgroups");
$dao->deleteObjects ($criteria);
// should be in the view....
require_once("cachefunc.php");
// begin{publicfields} automatic generation //
* Retourne la liste des champs publics
return array('class' => array('class', '+'),
'classtype' => array('text', '+'),
'title' => array('text', '+'),
'altertitle' => array('mltext', ''),
'icon' => array('image', ''),
'comment' => array('longtext', ''));
// end{publicfields} automatic generation //
// begin{uniquefields} automatic generation //
* Retourne la liste des champs uniques
return array(array('class'), );
// end{uniquefields} automatic generation //
/*-----------------------------------*/
|