Source for file jDaoConditions.class.php

Documentation is available at jDaoConditions.class.php

  1. <?php
  2. /**
  3. @package    jelix
  4. @subpackage dao
  5. @author     Croes Gérald, Laurent Jouanneau
  6. @contributor Laurent Jouanneau, Julien Issler, Yannick Le Guédart
  7. @copyright  2001-2005 CopixTeam, 2005-2009 Laurent Jouanneau
  8. @copyright  2008 Julien Issler, 2009 Yannick Le Guédart
  9. *  This classes was get originally from the Copix project (CopixDAOSearchConditions, Copix 2.3dev20050901, http://www.copix.org)
  10. *  Some lines of code are copyrighted 2001-2005 CopixTeam (LGPL licence).
  11. *  Initial authors of this Copix classes are Gerald Croes and Laurent Jouanneau,
  12. *  and this classes was adapted for Jelix by Laurent Jouanneau
  13. *
  14. @link     http://jelix.org
  15. @licence  http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public Licence, see LICENCE file
  16. */
  17.  
  18. /**
  19.  * content a sub group of conditions
  20.  * @package  jelix
  21.  * @subpackage dao
  22.  */
  23. class jDaoCondition {
  24.  
  25.     /**
  26.     * the parent group if any
  27.     */
  28.     public $parent = null;
  29.  
  30.     /**
  31.     * the conditions in this group
  32.     */
  33.     public $conditions = array ();
  34.  
  35.     /**
  36.     * the sub groups
  37.     */
  38.     public $group = array ();
  39.  
  40.     /**
  41.     * the kind of group (AND/OR)
  42.     */
  43.     public $glueOp;
  44.  
  45.     function __construct ($glueOp='AND'$parent =null ){
  46.         $this->parent = $parent;
  47.         $this->glueOp = $glueOp;
  48.     }
  49.  
  50.     public function isEmpty(){
  51.         return empty($this->conditions&& empty($this->group);
  52.     }
  53. }
  54.  
  55. /**
  56.  * container for all criteria of a query
  57.  * @package  jelix
  58.  * @subpackage dao
  59. */
  60. class jDaoConditions {
  61.     /**
  62.     * @var jDaoCondition 
  63.     */
  64.     public $condition;
  65.  
  66.     /**
  67.     * the orders we wants the list to be
  68.     */
  69.     public $order = array ();
  70.  
  71.     /**
  72.     * the condition we actually are browsing
  73.     */
  74.     private $_currentCondition;
  75.  
  76.     /**
  77.      * @param string $glueOp the logical operator which links each conditions : AND or OR
  78.      */
  79.     function __construct ($glueOp 'AND'){
  80.         $this->condition = new jDaoCondition ($glueOp);
  81.         $this->_currentCondition $this->condition;
  82.     }
  83.  
  84.     /**
  85.      * add an order clause
  86.      * @param string $field_id   the property name used to order results
  87.      * @param string $way        the order type : asc or desc
  88.      */
  89.     function addItemOrder($field_id$way='ASC'){
  90.         $this->order[$field_id]=$way;
  91.     }
  92.  
  93.     /**
  94.     * says if there are no conditions nor order
  95.     * @return boolean  false if there isn't condition
  96.     */
  97.     function isEmpty (){
  98.         return (count ($this->condition->group== 0&&
  99.         (count ($this->condition->conditions== 0&&
  100.         (count ($this->order== 0;
  101.     }
  102.  
  103.     /**
  104.     * says if there are no conditions
  105.     * @return boolean  false if there isn't condition
  106.     * @since 1.0
  107.     */
  108.     function hasConditions (){
  109.         return (count ($this->condition->group|| count ($this->condition->conditions));
  110.     }
  111.  
  112.     /**
  113.     * starts a new condition group
  114.     * @param string $glueOp the logical operator which links each conditions in the group : AND or OR
  115.     */
  116.     function startGroup ($glueOp 'AND'){
  117.         $condnew jDaoCondition ($glueOp$this->_currentCondition);
  118.         $this->_currentCondition $cond;
  119.     }
  120.  
  121.     /**
  122.     * ends a condition group
  123.     */
  124.     function endGroup (){
  125.         if ($this->_currentCondition->parent !== null){
  126.             if(!$this->_currentCondition->isEmpty())
  127.                 $this->_currentCondition->parent->group[$this->_currentCondition;
  128.             $this->_currentCondition $this->_currentCondition->parent;
  129.         }
  130.     }
  131.  
  132.     /**
  133.     * adds a condition
  134.     * @param string $field_id  the property name on which the condition applies
  135.     * @param string $operator  the sql operator
  136.     * @param string $value     the value which is compared to the property
  137.     * @param boolean $foo      parameter for internal use : don't use it or set to false
  138.     */
  139.     function addCondition ($field_id$operator$value$foo false){
  140.         $operator trim(strtoupper($operator));
  141.         if(preg_match ('/^[^\w\d\s;\(\)]+$/'$operator||
  142.            in_array($operatorarray('LIKE''ILIKE''IN''NOT IN''IS''IS NOT''IS NULL',
  143.                     'IS NOT NULL''MATCH''REGEXP''NOT REGEXP''RLIKE''SOUNDS LIKE'))) {
  144.  
  145.             $this->_currentCondition->conditions[array (
  146.                'field_id'=>$field_id,
  147.                'value'=>$value,
  148.                'operator'=>$operator'isExpr'=>$foo);
  149.         }
  150.         else
  151.             throw new jException('jelix~dao.error.bad.operator'$operator);
  152.         
  153.     }
  154. }

Documentation generated on Wed, 07 Sep 2011 13:46:53 +0200 by phpDocumentor 1.4.3