Пример #1
0
 /**
  * construit un $FilterComponent sur une Propriete dynamique
  * TODO: Gerer les operateurs In et NotIn !!!!!!!!!!!!!!!!!
  *
  * @param string $attr nom de l'attribut sur lequel s'effectue le filtre
  * @param string $type le type de valeur de la propriété (ex: IntValue)
  *           cf. PropertyValue
  * @param string $op "Like" ou "Equal" ou "NotLike", ...:
  *           cf ds lib/filter tous les operateurs disponibles
  * @param string $value valeur du champs: facultatif
  * @static
  * @return object FilterComponent ou false
  */
 static function newFilterComponentOverDynamicProperty($attr, $type, $op, $value = '')
 {
     if (isset($_REQUEST[$attr]) && !empty($_REQUEST[$attr]) || isset($_SESSION[$attr]) && !empty($_SESSION[$attr]) || !empty($value)) {
         if (!empty($value)) {
             $value = is_string($value) ? strtoupper($value) : $value;
         } else {
             $value = -1;
             if (isset($_REQUEST[$attr])) {
                 $value = $_REQUEST[$attr];
             } elseif (isset($_SESSION[$attr])) {
                 $value = $_SESSION[$attr];
             }
         }
         $operator = SearchTools::getToSqlOperator($op);
         require_once 'SQLRequest.php';
         $ids = array();
         if (!is_array($value)) {
             $value = array($value);
         }
         if (in_array('##', $value)) {
             return false;
         }
         foreach ($value as $val) {
             $val = $op == 'Like' || $op == 'NotLike' ? str_replace('*', "%", $val) : $val;
             $result = request_DynamicProperties_Search($attr, $type, $operator, $val);
             if (false != $result) {
                 while (!$result->EOF) {
                     $ids[] = (int) $result->fields['_Product'];
                     $result->MoveNext();
                 }
             }
         }
         $comp = new FilterComponent();
         if (!empty($ids)) {
             $comp->setItem(new FilterRule('Id', FilterRule::OPERATOR_IN, $ids));
         } else {
             // un filtre vide
             $comp->setItem(new FilterRule('Id', FilterRule::OPERATOR_EQUALS, 0));
         }
         return $comp;
     }
     return false;
 }