/** * 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; }