private static function ajax_filter() { $segments = func_get_args(); $structure = FW4_Structure::get_object_structure(implode('/', $segments), false); if (!$structure || !isset($_POST['page']) || !isset($_POST['parentname']) || !isset($_POST['parentid'])) { die; } self::$parent_structure = FW4_Structure::get_object_structure($_POST['parentname'], false); self::$current_item = where('id = %d', $_POST['parentid'])->get_row($_POST['parentname']); $query = where($structure['parent_name'] . '_id = %d', self::$current_item->id)->page(intval($_POST['page'])); $_SESSION['filter_' . $structure['stack']] = array('page' => $_POST['page']); $searchable_fields = self::apply_ajax_filter($query, $structure, $structure, $_POST); if (isset($_POST['search']) && $_POST['search']) { $_SESSION['filter_' . $structure['stack']]['search'] = $_POST['search']; $search_where_strings = array(); foreach (explode(' ', $_POST['search']) as $keyword) { $search_where_strings[] = 'CONCAT(IFNULL(' . implode(',""),IFNULL(', $searchable_fields) . ',"")) LIKE ' . $query->escape('*' . $keyword . '*'); } $query->where(implode(' AND ', $search_where_strings)); } foreach ($structure->children() as $type => $subfield) { if ($type == 'recursive') { $query->where('parent_id IS NULL'); } } $pages = ceil($query->count_rows($structure['stack']) / 50); $data = $query->limit(50)->get($structure['stack']); $details = self::object_list_details($structure); echo json_encode(array('html' => view('object_filtered', array('data' => $data, 'field' => $structure, 'shownfields' => $details['shownfields'], 'delete_limits' => $details['delete_limits'], 'allow_edit' => false, 'object' => $structure)), 'pages' => $pages)); }