phpDocumentor lodel-logic
[ class tree: lodel-logic ] [ index: lodel-logic ] [ all elements ]

Source for file class.classes.php

Documentation is available at class.classes.php

  1. <?php
  2. /**    
  3.  * Logique des classes d'objets du système
  4.  *
  5.  * PHP versions 4 et 5
  6.  *
  7.  * LODEL - Logiciel d'Edition ELectronique.
  8.  *
  9.  * Home page: http://www.lodel.org
  10.  * E-Mail: lodel@lodel.org
  11.  *
  12.  * All Rights Reserved
  13.  *
  14.  * This program is free software; you can redistribute it and/or modify
  15.  * it under the terms of the GNU General Public License as published by
  16.  * the Free Software Foundation; either version 2 of the License, or
  17.  * (at your option) any later version.
  18.  *
  19.  * This program is distributed in the hope that it will be useful,
  20.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  21.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  22.  * GNU General Public License for more details.
  23.  *
  24.  * You should have received a copy of the GNU General Public License
  25.  * along with this program; if not, write to the Free Software
  26.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  27.  *
  28.  * @package lodel/logic
  29.  * @author Ghislain Picard
  30.  * @author Jean Lamy
  31.  * @copyright 2001-2002, Ghislain Picard, Marin Dacos
  32.  * @copyright 2003, Ghislain Picard, Marin Dacos, Luc Santeramo, Nicolas Nutten, Anne Gentil-Beccot
  33.  * @copyright 2004, Ghislain Picard, Marin Dacos, Luc Santeramo, Anne Gentil-Beccot, Bruno Cénou
  34.  * @copyright 2005, Ghislain Picard, Marin Dacos, Luc Santeramo, Gautier Poupeau, Jean Lamy, Bruno Cénou
  35.  * @copyright 2006, Marin Dacos, Luc Santeramo, Bruno Cénou, Jean Lamy, Mikaël Cixous, Sophie Malafosse
  36.  * @copyright 2007, Marin Dacos, Bruno Cénou, Sophie Malafosse, Pierre-Alain Mignot
  37.  * @licence http://www.gnu.org/copyleft/gpl.html
  38.  * @since Fichier ajouté depuis la version 0.8
  39.  * @version CVS:$Id: class.classes.php 4006 2007-10-05 11:53:41Z malafosse $
  40.  */
  41.  
  42. /**
  43.  * Classe de logique des classes du système - Fille de la classe Logic
  44.  * 
  45.  * @package lodel/logic
  46.  * @author Ghislain Picard
  47.  * @author Jean Lamy
  48.  * @copyright 2001-2002, Ghislain Picard, Marin Dacos
  49.  * @copyright 2003, Ghislain Picard, Marin Dacos, Luc Santeramo, Nicolas Nutten, Anne Gentil-Beccot
  50.  * @copyright 2004, Ghislain Picard, Marin Dacos, Luc Santeramo, Anne Gentil-Beccot, Bruno Cénou
  51.  * @copyright 2005, Ghislain Picard, Marin Dacos, Luc Santeramo, Gautier Poupeau, Jean Lamy, Bruno Cénou
  52.  * @copyright 2006, Marin Dacos, Luc Santeramo, Bruno Cénou, Jean Lamy, Mikaël Cixous, Sophie Malafosse
  53.  * @copyright 2007, Marin Dacos, Bruno Cénou, Sophie Malafosse, Pierre-Alain Mignot
  54.  * @licence http://www.gnu.org/copyleft/gpl.html
  55.  * @since Classe ajouté depuis la version 0.8
  56.  * @see logic.php
  57.  */
  58. class ClassesLogic extends Logic 
  59. {
  60.  
  61.     /**
  62.      * Constructeur
  63.      */
  64.     function ClassesLogic()
  65.     {
  66.         $this->Logic ('classes');
  67.     }
  68.  
  69.     /**
  70.      *  Indique si un objet est protégé en suppression
  71.      *
  72.      * Cette méthode indique si un objet, identifié par son identifiant numérique et
  73.      * éventuellement son status, ne peut pas être supprimé. Dans le cas où un objet ne serait
  74.      * pas supprimable un message est retourné indiquant la cause. Sinon la méthode renvoit le
  75.      * booleen false.
  76.      *
  77.      * @param integer $id identifiant de l'objet
  78.      * @param integer $status status de l'objet
  79.      * @return false si l'objet n'est pas protégé en suppression, un message sinon
  80.      */
  81.     function isdeletelocked($id$status 0)
  82.     {
  83.         global $db;
  84.         $dao $this->_getMainTableDAO ();
  85.         $vo  $dao->getById ($id'classtype');
  86.         $types ClassesLogic::typestable($vo->classtype);
  87.         switch ($vo->classtype{
  88.             case 'entities':
  89.                 $msg 'cannot_delete_hasentities';
  90.                 break;
  91.             case 'entries':
  92.                 $msg 'cannot_delete_hasentries';
  93.                 break;
  94.             case 'persons':
  95.                 $msg 'cannot_delete_haspersons';
  96.                 break;
  97.         }
  98.         $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='$idAND #_TP_"$vo->classtype".status>-64 AND #_TP_"$types".status>-64  AND #_TP_classes.status>-64"));
  99.         if ($db->errorno ()){
  100.             dberror ();
  101.         }
  102.         if ($count == 0{
  103.             return false;
  104.         else {
  105.             return sprintf (getlodeltextcontents ($msg'admin')$count);
  106.         }
  107.     }
  108.  
  109.     /**
  110.      * Indique le nom de la table type associée avec le type de classe
  111.      *
  112.      * Return the type table associated with the classtype
  113.      * @param string $classtype le type de la classe
  114.      * @return une valeur parmis : type, entrytypes et persontypes
  115.     */
  116.     function typestable ($classtype
  117.     {
  118.         switch ($classtype{
  119.         case 'entities':
  120.             return 'types';
  121.         case 'entries':
  122.             return 'entrytypes';
  123.         case 'persons' :
  124.             return 'persontypes';
  125.         }
  126.     }
  127.  
  128.     /**
  129.      * Préparation de l'action Edit
  130.      *
  131.      * @access private
  132.      * @param object $dao la DAO utilisée
  133.      * @param array &$context le context passé par référence
  134.      */
  135.     function _prepareEdit ($dao&$context)
  136.     {
  137.         // gather information for the following
  138.         if ($context['id']{
  139.             $this->oldvo $dao->getById ($context['id']);
  140.             if (!$this->oldvo{
  141.                 die ("ERROR: internal error in Classes::deleteAction");
  142.             }
  143.         }
  144.     }
  145.  
  146.     /**
  147.      * Implémenation de l'action d'ajout ou d'édition d'un objet.
  148.      *
  149.      * <p>Cette fonction crée un nouvel objet ou édite un objet existant. Dans un premier temps les
  150.      * 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.
  151.      * 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.
  152.      * </p>
  153.     
  154.      * add/edit Action
  155.      * @param array $context le tableau des données passé par référence.
  156.      * @param array $error le tableau des erreurs rencontrées passé par référence.
  157.      * @param boolean $clean false si on ne doit pas nettoyer les données (par défaut à false).
  158.      * @return string les différentes valeurs possibles de retour d'une action (_ok, _back, _error ou xxxx).
  159.      */
  160.     function editAction(&$context&$error$clean false)
  161.     {
  162.         if ($clean != CLEAN{      // validate the forms data
  163.             if (!$this->validateFields($context$error)) {
  164.                 return '_error';
  165.             }
  166.         }
  167.         require_once 'fieldfunc.php';
  168.         if(reservedByLodel($context['class'])) {
  169.             $error['class''reservedsql';
  170.             return '_error';
  171.         }
  172.         // get the dao for working with the object
  173.         $dao $this->_getMainTableDAO();
  174.         $id $context['id'intval($context['id']);
  175.         $this->_prepareEdit($dao$context);
  176.         // create or edit
  177.         if ($id{
  178.             $dao->instantiateObject($vo);
  179.             $vo->id $id;
  180.         else {
  181.             $vo $dao->createObject();
  182.         }
  183.         if ($dao->rights['protect']{
  184.             $vo->protect $context['protected'0;
  185.         }
  186.         // put the context into 
  187.         $this->_populateObject($vo$context);
  188.         if (!$dao->save($vo)) trigger_error("You don't have the rights to modify or create this object"E_USER_ERROR);
  189.         $ret $this->_saveRelatedTables($vo$context);
  190.         
  191.         require_once 'func.php';
  192.         update();
  193.         return $ret $ret "_back";
  194.     }
  195.     /**
  196.      * Sauve des données dans des tables liées éventuellement
  197.      *
  198.      * Appelé par editAction pour effectuer des opérations supplémentaires de sauvegarde.
  199.      *
  200.      * @param object $vo l'objet qui a été créé
  201.      * @param array $context le contexte
  202.      */
  203.     function _saveRelatedTables ($vo$context
  204.     {
  205.         global $db;
  206.         //----------------new, create the table
  207.         if (!$this->oldvo->class{
  208.             switch($vo->classtype{
  209.             case 'entities' :
  210.                 $create "identity    INTEGER UNSIGNED  UNIQUE, KEY index_identity (identity)";
  211.                 break;
  212.             case 'entries' :
  213.                 $create "identry    INTEGER UNSIGNED  UNIQUE, KEY index_identry (identry)";
  214.                 break;
  215.             case 'persons' :
  216.                 $create "idperson    INTEGER UNSIGNED  UNIQUE, KEY index_idperson (idperson)";
  217.                 $db->execute (lq ("CREATE TABLE IF NOT EXISTS #_TP_entities_"$vo->class." ( idrelation INTEGER UNSIGNED UNIQUE, KEY index_idrelation (idrelation) )")) or dberror ();
  218.                 break;
  219.             }
  220.             $db->execute(lq("CREATE TABLE IF NOT EXISTS #_TP_"$vo->class." ( "$create." )")) or dberror ();
  221.             $alter=true;
  222.             //---------------- change class name ?
  223.         elseif ($this->oldvo->class!=$vo->class{
  224.             // change table name 
  225.             $db->execute (lq ("RENAME TABLE #_TP_"$this->oldvo->class" TO #_TP_"$vo->class)) or dberror ();
  226.             if ($vo->classtype=="persons"{
  227.                 $db->execute (lq ("RENAME TABLE #_TP_entities_"$this->oldvo->class" TO #_TP_entities_"$vo->class)) or dberror ();
  228.                 $db->execute (lq ("UPDATE #_TP_tablefields SET class='entities_"$vo->class"' WHERE class='entities_"$this->oldvo->class."'")) or dberror ();
  229.             }
  230.             // update tablefields, objects and types
  231.             foreach (array ('objects',
  232.                     $this->typestable ($vo->classtype),
  233.                     'tablefields',
  234.                     'tablefieldgroups')
  235.                 as $table{
  236.                 $db->execute (lq ("UPDATE #_TP_"$table" SET class='"$vo->class"' WHERE class='"$this->oldvo->class."'")) or dberror ();
  237.             }
  238.             $alter true;
  239.         }
  240.         if ($alter{        // update the CACHE ?
  241.             require_once 'cachefunc.php';
  242.             clearcache();
  243.         }
  244.     }
  245.  
  246.     /**
  247.      * Appelé avant l'action delete
  248.      *
  249.      * Cette méthode est appelée avant l'action delete pour effectuer des vérifications
  250.      * préliminaires à une suppression.
  251.      *
  252.      * @param object $dao la DAO utilisée
  253.      * @param array &$context le contexte passé par référénce
  254.      */
  255.     function _prepareDelete ($dao&$context
  256.     {
  257.         // gather information for the following
  258.         $this->vo $dao->getById ($context['id']);
  259.         if (!$this->vo{
  260.             die ("ERROR: internal error in Classes::deleteAction");
  261.         }
  262.     }
  263.     /**
  264.      * Suppression éventuelle dans des tables liées
  265.      *
  266.      * @param integer $id identifiant numérique de l'objet supprimé
  267.      */
  268.     function _deleteRelatedTables ($id{
  269.         global $db,$home;
  270.         if (!$this->vodie ("ERROR: internal error in Classes::deleteAction");
  271.         $db->execute (lq ("DROP TABLE #_TP_".$this->vo->class)) or dberror ();
  272.         if ($this->vo->classtype=="persons"{
  273.             $db->execute(lq("DROP TABLE #_TP_entities_".$this->vo->class)) or dberror();
  274.         }
  275.         // delete associated types
  276.         // collect the type to delete
  277.         $dao=&getDAO (ClassesLogic::typestable ($this->vo->classtype));
  278.         $types=$dao->findMany ("class='"$this->vo->class"'""id");
  279.         $logic=&getLogic (ClassesLogic::typestable ($this->vo->classtype));
  280.         foreach ($types as $type{
  281.             $localcontext['id']=$type->id;
  282.             $logic->deleteAction ($localcontext$err);
  283.         }
  284.         // delete tablefields and tablefieldgroups
  285.         $criteria="class='".$this->vo->class."'";
  286.         if ($this->vo->classtype=="persons"{
  287.             $criteria.=" OR class='entities_".$this->vo->class."'";
  288.         }
  289.         $dao=&getDAO ("tablefields");
  290.         $dao->deleteObjects ($criteria);
  291.  
  292.         // delete tablefields
  293.         $dao=&getDAO ("tablefieldgroups");
  294.         $dao->deleteObjects ($criteria);
  295.         unset ($this->vo);
  296.  
  297.         // should be in the view....
  298.         require_once("cachefunc.php");
  299.         clearcache();
  300.         return "_back";
  301.     }
  302.  
  303.  
  304.     // begin{publicfields} automatic generation  //
  305.  
  306.     /**
  307.      * Retourne la liste des champs publics
  308.      * @access private
  309.      */
  310.     function _publicfields(
  311.     {
  312.         return array('class' => array('class''+'),
  313.                                     'classtype' => array('text''+'),
  314.                                     'title' => array('text''+'),
  315.                                     'altertitle' => array('mltext'''),
  316.                                     'icon' => array('image'''),
  317.                                     'comment' => array('longtext'''));
  318.     }
  319.     // end{publicfields} automatic generation  //
  320.  
  321.     // begin{uniquefields} automatic generation  //
  322.  
  323.     /**
  324.      * Retourne la liste des champs uniques
  325.      * @access private
  326.      */
  327.     function _uniqueFields(
  328.     
  329.         return array(array('class'));
  330.     }
  331.     // end{uniquefields} automatic generation  //
  332.  
  333. // class 
  334.  
  335. /*-----------------------------------*/
  336. /* loops                             */
  337. ?>

Documentation generated on Thu, 24 Jul 2008 05:07:20 +0200 by phpDocumentor 1.4.0a2