Example #1
0
 public function get_filter_cond($filter, $table_alias)
 {
     $pass = null;
     $type = $filter['type'];
     $value = $filter[$type];
     $value = \System\Database::escape($value);
     $value_soft = \System\Database::escape_soft($filter[$type]);
     if (!empty($filter['self'])) {
         $value = $value_soft;
     }
     if ($filter['attr'] == 'id' && $this->assoc_with_model) {
         $model = $this->assoc_with_model;
         $filter['attr'] = $model::get_id_col();
     }
     switch ($type) {
         case 'in':
         case 'exact':
             if (is_array($value)) {
                 $value = implode(',', $value);
                 $pass = "******" . $filter['attr'] . "` IN (" . $value . ")";
             } else {
                 $pass = "******" . $filter['attr'] . "` = '" . $value . "'";
             }
             break;
         case 'is_null':
             def($filter['is_null'], true);
             $pass = '******' . $filter['attr'] . '` ' . ($filter['is_null'] ? 'IS' : 'IS NOT') . ' NULL';
             break;
         case 'iexact':
             $pass = "******" . $filter['attr'] . "`) = LOWER(" . $value . ")";
             break;
         case 'contains':
             $pass = "******" . $filter['attr'] . "` LIKE '%" . $value_soft . "%'";
             break;
         case 'icontains':
             $pass = "******" . $filter['attr'] . "`) LIKE LOWER('%" . $value_soft . "%')";
             break;
         case 'starts_with':
             $pass = "******" . $filter['attr'] . "` LIKE '" . $value_soft . "%'";
             break;
         case 'istarts_with':
             $pass = "******" . $filter['attr'] . "`) LIKE LOWER('" . $value_soft . "%')";
             break;
         case 'ends_with':
             $pass = "******" . $filter['attr'] . "` LIKE '%" . $value_soft . "'";
             break;
         case 'iends_with':
             $pass = "******" . $filter['attr'] . "`) LIKE LOWER('%" . $value_soft . "')";
             break;
         case 'gt':
         case 'gte':
         case 'lt':
         case 'lte':
             if ($type == 'gt') {
                 $pass = "******" . $filter['attr'] . "` > " . $value . "";
             } else {
                 if ($type == 'gte') {
                     $pass = "******" . $filter['attr'] . "` >= " . $value . "";
                 } else {
                     if ($type == 'lt') {
                         $pass = "******" . $filter['attr'] . "` < " . $value . "";
                     } else {
                         if ($type == 'lte') {
                             $pass = "******" . $filter['attr'] . "` <= " . $value . "";
                         }
                     }
                 }
             }
             break;
         default:
             throw new \System\Error\Argument('Unknown filter', $type);
     }
     return $pass;
 }