Registry::get('view')->assign('hide_show_all', true); } if ($total < PAGE_SHOW_ALL) { Registry::get('view')->assign('expand_all', true); } } else { // search page $items_per_page = Registry::get('settings.Appearance.admin_pages_per_page'); } $params['add_root'] = !empty($_REQUEST['root']) ? $_REQUEST['root'] : ''; $params['simple'] = true; list($pages, $params) = fn_get_pages($params, $items_per_page); Registry::get('view')->assign('pages_tree', $pages); Registry::get('view')->assign('search', $params); if (empty($params['full_search'])) { Registry::get('view')->assign('page_types', fn_get_page_type_filter($page_type)); } else { Registry::get('view')->assign('page_types', fn_get_page_object_by_type()); } Registry::get('view')->assign('is_exclusive_page_type', fn_is_exclusive_page_type($page_type)); if (!empty($_REQUEST['except_id'])) { Registry::get('view')->assign('except_id', $_REQUEST['except_id']); } if (fn_show_picker('pages', PAGE_THRESHOLD) == false) { $params = array('page_type' => fn_is_exclusive_page_type($page_type) ? $page_type : ''); Registry::get('view')->assign('parent_pages', fn_get_pages_plain_list($params)); } if ($mode == 'picker') { if (!empty($_REQUEST['combination_suffix'])) { Registry::get('view')->assign('combination_suffix', $_REQUEST['combination_suffix']); }
/** * Returns list of pages * <i>$params</i> - Array of various parameters used for element selection: * <ul> * <li>page_id - If defined and not zero, get data for the page with this id; otherwise get data for all pages</li> * <li>item_ids - A comma-delimited page identifiers list; if defined, get data for the pages with these ids; otherwise get data for all pages</li> * <li>except_id - Identifier of the page to be excluded from the result</li> * <li>parent_id - If defined and not zero, get data for the pages with this parent page id</li> * <li>active_page_id - Identifier of the page being currently shown</li> * <li>current_page_id - The same as <i>active_page_id</i></li> * * <li>add_root - If defined, additionally returns root element data</li> * <li>subpages - If defined, additionally returns subpages</li> * <li>get_tree - If defined, pages will be returned as tree; otherwise as list. Possible value: <i>plain</i></li> * <li>visible - For pages tree: show visible branch only</li> * * <li>page - Number of the current page for pagination</li> * * <li>pdescr - If defined, additionally returns descriptions. Possible value: <i>Y</i></li> * * <li>vendor_pages - If defined, try to return pages for the company defined by <i>company_id</i></li> * <li>company_id - If <i>vendor_pages</i> is defined: if defined, get data for the company with this id</li> * * <li>neighbours - If defined, try to return neighbor pages for the page with the id <i>neighbours_page_id</i></li> * <li>neighbours_page_id - If <i>neighbours</i> is defined: if defined, get neighbor pages for the page with this id</li> * * <li>limit - If defined, used to limit your MySQL query results by this value</li> * <li>sort_by - Table field to sort by, default is position</li> * <li>sort_order - Sorting direction, ascending or descending; Possible values: <i>asc</i> or <i>desc</i>, default is <i>asc</i></li> * * <li>status - If defined, returns pages only with this status. Can be comma delimited statuses list</li> * * <li>period - If defined, get pages by time period. Time period is generated by ::fn_create_periods</li> * <li>time_from - Returns pages created earlier than this time</li> * <li>time_to - Returns pages created later than this time</li> * * <li>parent_page_id - Deprecated, <i>parent_id</i> used instead</li> * <li>from_page_id - Deprecated, <i>parent_id</i> used instead</li> * </ul> * @param array $params Array of params * @param int $items_per_page Limit items per page * @param string $lang_code 2-letter language code * @return array List of pages, params */ function fn_get_pages($params = array(), $items_per_page = 0, $lang_code = CART_LANGUAGE) { /** * Changes params for selecting pages * * @param array $params Pages search params * @param int $items_per_page Items per page * @param string $lang_code Two-letter language code (e.g. 'en', 'ru', etc.) */ fn_set_hook('get_pages_pre', $params, $items_per_page, $lang_code); $view_type = 'pages'; if (!empty($params['page_type']) && fn_is_exclusive_page_type($params['page_type'])) { $view_type .= '_' . $params['page_type']; } // Init filter $params = LastView::instance()->update($view_type, $params); $default_params = array('page_id' => 0, 'page' => 1, 'visible' => false, 'get_tree' => '', 'pdescr' => '', 'subpages' => '', 'match' => '', 'page_type' => '', 'items_per_page' => $items_per_page); if (is_array($params)) { $params = array_merge($default_params, $params); } else { $params = $default_params; } if (empty($params['pname']) && empty($params['pdescr']) && empty($params['subpages'])) { $params['pname'] = 'Y'; } $fields = array('?:pages.*'); if (!empty($params['simple'])) { $fields[] = '?:page_descriptions.page'; } else { $fields[] = '?:page_descriptions.*'; } // Define sort fields $sortings = array('position' => array('?:pages.position', '?:page_descriptions.page'), 'name' => '?:page_descriptions.page', 'timestamp' => '?:pages.timestamp', 'type' => '?:pages.page_type', 'multi_level' => array('?:pages.parent_id', '?:pages.position', '?:page_descriptions.page')); $auth =& $_SESSION['auth']; $condition = '1'; $join = $limit = $group_by = ''; if (isset($params['q']) && fn_string_not_empty($params['q'])) { $params['q'] = trim($params['q']); if ($params['match'] == 'any') { $pieces = fn_explode(' ', $params['q']); $search_type = ' OR '; } elseif ($params['match'] == 'all') { $pieces = fn_explode(' ', $params['q']); $search_type = ' AND '; } else { $pieces = array($params['q']); $search_type = ''; } $_condition = array(); foreach ($pieces as $piece) { if (strlen($piece) == 0) { continue; } $tmp = array(); if (!empty($params['pname']) && $params['pname'] == 'Y') { $tmp[] = db_quote("?:page_descriptions.page LIKE ?l", "%{$piece}%"); // check search words } if ($params['pdescr'] == 'Y') { $tmp[] = db_quote("?:page_descriptions.description LIKE ?l", "%{$piece}%"); } if (!empty($tmp)) { $_condition[] = '(' . implode(' OR ', $tmp) . ')'; } } if (!empty($_condition)) { $condition .= ' AND (' . implode($search_type, $_condition) . ')'; } } $condition .= fn_get_company_condition('?:pages.company_id'); if (isset($params['parent_id']) && $params['parent_id'] !== '') { $p_ids = array(); if ($params['subpages'] == 'Y') { $p_ids = db_get_fields("SELECT a.page_id FROM ?:pages as a LEFT JOIN ?:pages as b ON b.page_id = ?i WHERE a.id_path LIKE CONCAT(b.id_path, '/%')", $params['parent_id']); } $p_ids[] = $params['parent_id']; $condition .= db_quote(" AND ?:pages.parent_id IN (?n)", $p_ids); } if (isset($params['parent_page_id'])) { // set parent id, that was set in block properties $params['from_page_id'] = $params['parent_page_id']; } if (!empty($params['from_page_id'])) { $from_id_path = db_get_field("SELECT id_path FROM ?:pages WHERE page_id = ?i", $params['from_page_id']); $condition .= db_quote(" AND ?:pages.id_path LIKE ?l", "{$from_id_path}/%"); } if (!empty($params['status'])) { $condition .= db_quote(" AND ?:pages.status IN (?a)", $params['status']); } if (!empty($params['vendor_pages']) && empty($params['company_id'])) { return array(array(), $params); } elseif (!empty($params['company_id'])) { $condition .= db_quote(" AND ?:pages.company_id = ?i", $params['company_id']); } if (empty($params['full_search'])) { $condition .= db_quote(" AND ?:pages.page_type IN (?a)", array_keys(fn_get_page_type_filter($params['page_type']))); } if (!empty($params['visible'])) { // for pages tree: show visible branch only $page_ids = array(); if (!empty($params['current_page_id'])) { $cur_id_path = db_get_field("SELECT id_path FROM ?:pages WHERE page_id = ?i", $params['current_page_id']); if (!empty($cur_id_path)) { $page_ids = explode('/', $cur_id_path); } } if (!empty($from_id_path)) { $_page_ids = explode('/', $from_id_path); $page_ids = array_merge($page_ids, $_page_ids); $page_ids = array_unique($page_ids); } $page_ids[] = $params['page_id']; $condition .= db_quote(" AND ?:pages.parent_id IN (?n)", $page_ids); } if (!empty($params['period']) && $params['period'] != 'A') { list($params['time_from'], $params['time_to']) = fn_create_periods($params); $condition .= db_quote(" AND (?:pages.timestamp >= ?i AND ?:pages.timestamp <= ?i)", $params['time_from'], $params['time_to']); } if (!empty($params['item_ids'])) { // get only defined pages $condition .= db_quote(" AND ?:pages.page_id IN (?n)", explode(',', $params['item_ids'])); } if (!empty($params['except_id']) && (empty($params['item_ids']) || !empty($params['item_ids']) && !in_array($params['except_id'], explode(',', $params['item_ids'])))) { $condition .= db_quote(' AND ?:pages.page_id != ?i AND ?:pages.parent_id != ?i', $params['except_id'], $params['except_id']); } if (AREA != 'A') { $condition .= " AND (" . fn_find_array_in_set($auth['usergroup_ids'], '?:pages.usergroup_ids', true) . ")"; $condition .= fn_get_localizations_condition('?:pages.localization', true); $condition .= db_quote(" AND (use_avail_period = ?s OR (use_avail_period = ?s AND avail_from_timestamp <= ?i AND avail_till_timestamp >= ?i))", 'N', 'Y', TIME, TIME); } $join = db_quote('LEFT JOIN ?:page_descriptions ON ?:pages.page_id = ?:page_descriptions.page_id AND ?:page_descriptions.lang_code = ?s', $lang_code); if (!empty($params['limit'])) { $limit = db_quote(" LIMIT 0, ?i", $params['limit']); } if (!empty($params['neighbours'])) { $parent_ids = array(); if (!empty($params['neighbours_page_id'])) { $id_path = db_get_field("SELECT id_path FROM ?:pages WHERE page_id = ?i", $params['neighbours_page_id']); $parent_ids = explode('/', $id_path); if (count($parent_ids) == 1) { array_unshift($parent_ids, 0); } $params['root_id'] = $parent_ids[0]; } else { $parent_ids[] = 0; } $condition .= db_quote(" AND ?:pages.parent_id IN (?n)", array_unique($parent_ids)); } fn_set_hook('get_pages', $params, $join, $condition, $fields, $group_by, $sortings, $lang_code); if (!empty($params['get_tree'])) { $params['sort_by'] = 'multi_level'; } $sorting = db_sort($params, $sortings, 'position', 'asc'); if (!empty($group_by)) { $group_by = ' GROUP BY ' . $group_by; } // Get search conditions if (!empty($params['get_conditions'])) { return array($fields, $join, $condition); } if (!empty($params['items_per_page'])) { $params['total_items'] = db_get_field("SELECT COUNT(DISTINCT(?:pages.page_id)) FROM ?:pages ?p WHERE ?p ?p ?p", $join, $condition, $group_by, $sorting); $limit = db_paginate($params['page'], $params['items_per_page'], $params['total_items']); } $pages = db_get_hash_array("SELECT " . implode(', ', $fields) . " FROM ?:pages ?p WHERE ?p ?p ?p ?p", 'page_id', $join, $condition, $group_by, $sorting, $limit); if (!empty($params['active_page_id']) && !empty($pages[$params['active_page_id']])) { $pages[$params['active_page_id']]['active'] = true; Registry::set('runtime.active_page_ids', explode('/', $pages[$params['active_page_id']]['id_path'])); } if (!empty($pages)) { foreach ($pages as $k => $v) { $pages[$k]['level'] = substr_count($v['id_path'], '/'); } if (!empty($params['get_tree'])) { $delete_keys = array(); foreach ($pages as $k => $v) { if (!empty($v['parent_id']) && !empty($pages[$v['parent_id']])) { $pages[$v['parent_id']]['subpages'][$v['page_id']] =& $pages[$k]; $delete_keys[] = $k; } if (!empty($v['parent_id']) && (!isset($params['root_id']) && empty($pages[$v['parent_id']]) || isset($params['root_id']) && $v['parent_id'] != $params['root_id']) && (empty($params['from_page_id']) || $params['from_page_id'] != $v['parent_id'])) { // delete pages that don't have parent. FIXME: should be done on database layer $delete_keys[] = $k; } } foreach ($delete_keys as $k) { unset($pages[$k]); } } elseif (!empty($params['item_ids'])) { $pages = fn_sort_by_ids($pages, explode(',', $params['item_ids']), 'page_id'); } if ($params['get_tree'] == 'plain') { $pages = fn_multi_level_to_plain($pages, 'subpages'); } if (!empty($params['get_children_count'])) { $where_condition = !empty($params['except_id']) ? db_quote(' AND page_id != ?i', $params['except_id']) : ''; if ($params['get_tree'] == 'plain') { $_page_ids = array(); foreach ($pages as $_p) { $_page_ids[] = $_p['page_id']; } } else { $_page_ids = array_keys($pages); } $children = db_get_hash_single_array("SELECT parent_id, COUNT(page_id) as children FROM ?:pages WHERE parent_id IN (?n) ?p GROUP BY parent_id", array('parent_id', 'children'), $_page_ids, $where_condition); if (!empty($children)) { if ($params['get_tree'] == 'plain') { foreach ($pages as $_id => $_p) { if (!empty($children[$_p['page_id']])) { $pages[$_id]['has_children'] = true; } } } else { foreach ($children as $k => $v) { $pages[$k]['has_children'] = !empty($v); } } } } } if (!empty($params['add_root'])) { array_unshift($pages, array('page_id' => '', 'page' => $params['add_root'])); } fn_dropdown_appearance_cut_second_third_levels($pages, 'subpages', $params); fn_set_hook('post_get_pages', $pages, $params, $lang_code); LastView::instance()->processResults($view_type, $pages, $params); return array($pages, $params); }
Tygh::$app['view']->assign('hide_show_all', true); } if ($total < PAGE_SHOW_ALL) { Tygh::$app['view']->assign('expand_all', true); } } else { // search page $items_per_page = Registry::get('settings.Appearance.admin_pages_per_page'); } $params['add_root'] = !empty($_REQUEST['root']) ? $_REQUEST['root'] : ''; $params['simple'] = true; list($pages, $params) = fn_get_pages($params, $items_per_page); Tygh::$app['view']->assign('pages_tree', $pages); Tygh::$app['view']->assign('search', $params); if (empty($params['full_search'])) { Tygh::$app['view']->assign('page_types', fn_get_page_type_filter($page_type)); } else { Tygh::$app['view']->assign('page_types', fn_get_page_object_by_type()); } Tygh::$app['view']->assign('is_exclusive_page_type', fn_is_exclusive_page_type($page_type)); if (!empty($_REQUEST['except_id'])) { Tygh::$app['view']->assign('except_id', $_REQUEST['except_id']); } if (fn_show_picker('pages', PAGE_THRESHOLD) == false) { $params = array('page_type' => fn_is_exclusive_page_type($page_type) ? $page_type : ''); Tygh::$app['view']->assign('parent_pages', fn_get_pages_plain_list($params)); } if ($mode == 'picker') { if (!empty($_REQUEST['combination_suffix'])) { Tygh::$app['view']->assign('combination_suffix', $_REQUEST['combination_suffix']); }