Пример #1
0
 private function setFilters(ormSelect $sel, $section_id, $class_name)
 {
     $is_filtered = false;
     if (empty($class_name) && $section_id != 'NULL') {
         $sel_tmp = new ormSelect();
         $sel_tmp->findInPages();
         $sel_tmp->where('parents', '=', $section_id);
         $class_name = $sel_tmp->getObjectsClass();
     }
     $fields = !empty($class_name) && ($class = ormClasses::get($class_name)) ? $class->loadFields() : array();
     $prefix = md5($class_name . $section_id);
     if (isset($_SESSION['filters'][$prefix])) {
         while (list($fname, $field) = each($fields)) {
             if ($field['f_filter'] && $field['f_type'] < 100) {
                 $this->checkFilterPost($fname, $field, $prefix);
                 // Устанавливаем уловия выборки в соотвествии с тем, что у нас лежит в сессии.
                 if (isset($_SESSION['filters'][$prefix][$fname])) {
                     if (isset($_SESSION['filters'][$prefix][$fname . '_2'])) {
                         $value2 = $_SESSION['filters'][$prefix][$fname . '_2'];
                     } else {
                         if (isset($value2)) {
                             unset($value2);
                         }
                     }
                     $value = $_SESSION['filters'][$prefix][$fname];
                     // Устанавливаем на основе сохраненных данных фильтры
                     if ($value !== '' || isset($value2) && $value2 !== '') {
                         if (is_array($value) && isset($value['val'])) {
                             // Фильтр по первым буквам
                             $sel->where($fname, 'LIKE', $value['val'] . '%');
                             $is_filtered = true;
                         } else {
                             if ($field['f_type'] == 50) {
                                 // Галочка
                                 if (!empty($value)) {
                                     $value = $value === 1 ? true : false;
                                     $sel->where($fname, '=', $value);
                                     $is_filtered = true;
                                 }
                             } else {
                                 if ($field['f_type'] > 69 && $field['f_type'] < 86) {
                                     // Файлы
                                     if ($value === 1) {
                                         $sel->where($fname, '<>', '');
                                         $is_filtered = true;
                                     } else {
                                         if ($value === 2) {
                                             $sel->where($fname, '=', '');
                                             $is_filtered = true;
                                         }
                                     }
                                 } else {
                                     if ($field['f_type'] == 90 || $field['f_type'] == 95) {
                                         // Справочники
                                         if (!empty($value)) {
                                             $sel->where($fname, '=', $value);
                                             $is_filtered = true;
                                         }
                                     } else {
                                         if ($field['f_type'] == 25 || $field['f_type'] == 30 || $field['f_type'] == 32) {
                                             // Фильтры по временным отрезкам
                                             if ($field['f_type'] == 25) {
                                                 // Дата
                                                 if (!empty($value)) {
                                                     $value = date('Y-m-d', strtotime($value));
                                                 }
                                                 if (!empty($value2)) {
                                                     $value2 = date('Y-m-d', strtotime($value2));
                                                 }
                                             } else {
                                                 if ($field['f_type'] == 30) {
                                                     // Время
                                                     if (!empty($value)) {
                                                         $value = date('H:i:s', strtotime($value));
                                                     }
                                                     if (!empty($value2)) {
                                                         $value2 = date('H:i:s', strtotime($value2));
                                                     }
                                                 } else {
                                                     if ($field['f_type'] == 32) {
                                                         // Дата и Время
                                                         if (!empty($value)) {
                                                             $value = date('Y-m-d H:i:s', strtotime($value));
                                                         }
                                                         if (!empty($value2)) {
                                                             $value2 = date('Y-m-d H:i:s', strtotime($value2));
                                                         }
                                                     }
                                                 }
                                             }
                                             if (isset($value2)) {
                                                 if ($value !== '' && $value2 === '') {
                                                     $sel->where($fname, '>=', $value);
                                                 } else {
                                                     if ($value === '' && $value2 !== '') {
                                                         $sel->where($fname, '<=', $value2);
                                                     } else {
                                                         if ($value !== '' && $value2 !== '') {
                                                             $sel->where($fname, 'BETWEEN', $value, $value2);
                                                         }
                                                     }
                                                 }
                                             } else {
                                                 $sel->where($fname, '=', $value);
                                             }
                                             $is_filtered = true;
                                         } else {
                                             if (is_numeric($value) || isset($value2) && is_numeric($value2)) {
                                                 // Числовые поля
                                                 if (isset($value2)) {
                                                     if ($value !== '' && $value2 === '') {
                                                         $sel->where($fname, '>=', $value);
                                                     } else {
                                                         if ($value === '' && $value2 !== '') {
                                                             $sel->where($fname, '<=', $value2);
                                                         } else {
                                                             if ($value !== '' && $value2 !== '') {
                                                                 $sel->where($fname, 'BETWEEN', $value, $value2);
                                                             }
                                                         }
                                                     }
                                                 } else {
                                                     $sel->where($fname, '=', $value);
                                                 }
                                                 $is_filtered = true;
                                             } else {
                                                 if (!empty($value)) {
                                                     // Текстовые поля
                                                     $sel->where($fname, 'LIKE', '%' . $value . '%');
                                                     $is_filtered = true;
                                                 }
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     //  print_R($_SESSION);
     return $is_filtered;
 }