Exemplo n.º 1
0
 protected function processMmwExtJSFilters(array $requestParams, $q)
 {
     if (isset($requestParams['mmwExtJSFilters']) && ($filters = json_decode($requestParams['mmwExtJSFilters']))) {
         foreach ($filters as $filter) {
             // The obtained filter is a stdClass object. get_object_vars transforms it into an array.
             $filter = get_object_vars($filter);
             $fieldName = sfMmwExtjsUtil::getSfFieldNameFromExtjs($filter['field']);
             // Value validation
             switch ($filter['type']) {
                 case 'numeric':
                     $validator = new sfValidatorNumber();
                     break;
                 case 'boolean':
                     $validator = new sfValidatorBoolean();
                     break;
                 case 'date':
                     $validator = new sfValidatorDate();
                     break;
                 case 'string':
                     $validator = new sfValidatorString();
                     break;
                 case 'list':
                     $validator = new sfValidatorPass();
                     if (!is_array($filter['value']) || count($filter['value']) == 0) {
                         break 2;
                     }
                     break;
                 default:
                     $validator = new sfValidatorPass();
                     break;
             }
             try {
                 $value = $validator->clean($filter['value']);
             } catch (sfValidatorError $e) {
                 break;
             }
             $rootAlias = $q->getRootAlias();
             $query = $rootAlias . '.' . $fieldName;
             // Filter applying
             switch ($filter['type']) {
                 case 'numeric':
                 case 'date':
                     switch ($filter['comparison']) {
                         case 'lt':
                             $query .= ' < "' . $value . '"';
                             break;
                         case 'gt':
                             $query .= ' > "' . $value . '"';
                             break;
                         case 'eq':
                             $query .= ' = "' . $value . '"';
                             break;
                         default:
                             break 2;
                     }
                     break;
                 case 'boolean':
                     $query .= ' = ' . $value;
                     break;
                 case 'string':
                     $query .= ' LIKE "' . $value . '%"';
                     break;
                 case 'list':
                     $query .= ' IN (';
                     foreach ($value as $v) {
                         $query .= '"' . $v . '"';
                     }
                     $query .= ')';
                     break;
                 default:
                     $query .= ' = ' . $value;
                     break;
             }
             $q->addWhere($query);
         }
     }
 }