Ejemplo n.º 1
0
function nc_browse_messages($cc_env, $range, $user_template = false)
{
    if ($user_template) {
        $browse_msg = $user_template;
    } else {
        global $browse_msg;
    }
    global $classPreview, $admin_mode, $inside_admin;
    $nc_core = nc_Core::get_object();
    if (isset($classPreview)) {
        $classPreview += 0;
    }
    if ($cc_env['cur_cc'] == $nc_core->input->fetch_get("cur_cc")) {
        $curPos = $cc_env['curPos'] + 0;
    } else {
        $curPos = 0;
    }
    $maxRows = $cc_env['maxRows'];
    $totRows = $cc_env['totRows'];
    if (!$maxRows || !$totRows) {
        return '';
    }
    if ($cc_env['cur_cc']) {
        $cur_cc = $cc_env['cur_cc'];
    }
    $page_count = ceil($totRows / $maxRows);
    $half_range = ceil($range / 2);
    $cur_page = ceil($curPos / $maxRows) + 1;
    if ($page_count < 2) {
        return '';
    }
    $maybe_from = $cur_page - $half_range;
    $maybe_to = $cur_page + $half_range - (is_even($range) ? 0 : 1);
    if ($maybe_from < 0) {
        $maybe_to = $maybe_to - $maybe_from;
        $maybe_from = 0;
        if ($maybe_to > $page_count) {
            $maybe_to = $page_count;
        }
    }
    if ($maybe_to > $page_count) {
        $maybe_from = $page_count - $range;
        $maybe_to = $page_count;
        if ($maybe_from < 0) {
            $maybe_from = 0;
        }
    }
    // формируем ссылку
    // const_url не меняется для каждой страницы
    $const_url = $cc_env['LocalQuery'];
    if ($const_url == '?') {
        $const_url = '';
    }
    //$const_url = rawurlencode ($const_url);
    // добавим get-парметры
    $_get_arr = $nc_core->input->fetch_get();
    $get_params = array();
    // добавим в ссылку cur_cc
    if (isset($cur_cc)) {
        $get_params['cur_cc'] = $cur_cc;
    }
    if (!empty($_get_arr)) {
        $ignore_arr = array('sid', 'ced', 'inside_admin', 'catalogue', 'sub', 'cc', 'curPos', 'cur_cc', 'REQUEST_URI', 'srchPat');
        if ($inside_admin || $admin_mode) {
            $ignore_arr[] = 'isNaked';
        }
        foreach ($_get_arr as $k => $v) {
            if (!in_array($k, $ignore_arr)) {
                $get_params[$k] = $nc_core->input->recursive_striptags_escape($v);
            }
        }
    }
    $const_url .= count($get_params) ? (strstr($const_url, "?") ? "&" : "?") . $nc_core->url->build_url($get_params) : "";
    if (!$admin_mode && nc_module_check_by_keyword('routing')) {
        $use_routing_module = true;
        $routing_parameters = nc_resolve_url($nc_core->url);
        $routing_parameters['variables'] = array_merge(nc_array_value($routing_parameters, 'variables', array()), $get_params, array('curPos' => null, 'nc_page' => null));
        $routing_parameters['page'] = null;
        $routing_resource_type = $routing_parameters['resource_type'];
        if ($routing_resource_type == 'folder' && $routing_parameters['infoblock_id']) {
            $routing_resource_type = 'infoblock';
        }
    } else {
        $use_routing_module = $routing_parameters = $routing_resource_type = false;
    }
    $array_result = array();
    for ($i = $maybe_from; $i < $maybe_to; $i++) {
        $page_number = $i + 1;
        $page_from = $i * $maxRows;
        $page_to = $page_from + $maxRows;
        if ($use_routing_module) {
            $routing_parameters['variables']['curPos'] = $page_from ? $page_from : null;
            $routing_parameters['page'] = $page_number > 1 ? $page_number : null;
            $url = nc_routing::get_resource_path($routing_resource_type, $routing_parameters);
        } elseif ($page_from && !$admin_mode) {
            // ссылка не на первую страницу
            $url = $nc_core->url->get_parsed_url('path') . $const_url . (strpos($const_url, "?") !== false ? "&" : "?") . "curPos=" . $page_from;
            $url = $nc_core->SUB_FOLDER . $url;
        } elseif ($page_from && $admin_mode) {
            $url = $const_url . (strpos($const_url, "?") !== false ? "&" : "?") . "curPos=" . $page_from;
        } else {
            // ссылка на первую страницу, curPos не нужен
            $url = $const_url ? $const_url : $nc_core->url->get_parsed_url('path');
        }
        // replace existing &amp; with & then replace all & to &amp;
        $url = nc_preg_replace(array("/&amp;/", "/&/"), array("&", "&amp;"), $url);
        if ($curPos == $page_from) {
            $array_result[$i] = $browse_msg['active'];
        } else {
            $array_result[$i] = $browse_msg['unactive'];
        }
        $array_result[$i] = str_replace("%URL", $url, $array_result[$i]);
        $array_result[$i] = str_replace("%PAGE", $page_number, $array_result[$i]);
        $array_result[$i] = str_replace("%FROM", $page_from + 1, $array_result[$i]);
        $array_result[$i] = str_replace("%TO", $page_to, $array_result[$i]);
    }
    $result = $browse_msg['prefix'];
    $result .= join($browse_msg['divider'], $array_result);
    $result .= $browse_msg['suffix'];
    return $result;
}
Ejemplo n.º 2
0
         if ($routing_canonical_request['resource_type'] == 'object') {
             // Для объектов в качестве основного пути могут использоваться пути без даты
             $routing_canonical_request['date_is_optional'] = true;
             // Для объектов проверить наличие и значение поля типа event/event_date
             if (!$routing_canonical_request['date']) {
                 try {
                     $routing_object_component_id = (int) $nc_core->sub_class->get_by_id($routing_canonical_request['infoblock_id'], 'Class_ID');
                     $routing_object_date_field = $nc_core->get_component($routing_object_component_id)->get_date_field();
                     if ($routing_object_date_field) {
                         $routing_canonical_request['date'] = $db->get_var("SELECT DATE_FORMAT(`{$routing_object_date_field}`, '%Y-%m-%d')\n                                   FROM `Message{$routing_object_component_id}`\n                                  WHERE `Message_ID` = " . (int) $routing_canonical_request['object_id']);
                     }
                 } catch (Exception $e) {
                 }
             }
         }
         $routing_canonical_path = (string) nc_routing::get_resource_path($routing_canonical_request['resource_type'], $routing_canonical_request);
         if (parse_url($routing_canonical_path, PHP_URL_PATH) != $nc_core->SUB_FOLDER . $nc_core->url->get_parsed_url('path')) {
             // найден альтернативный путь
             if ($_SERVER['REQUEST_METHOD'] == 'GET' && $routing_duplicate_route_action == nc_routing::DUPLICATE_ROUTE_REDIRECT) {
                 $routing_result['redirect_to_url'] = $routing_canonical_path;
             } else {
                 $nc_core->page->set_canonical_link($routing_canonical_path);
             }
         }
         unset($routing_canonical_path, $routing_canonical_request, $routing_duplicate_route_action, $routing_object_component_id, $routing_object_date_field);
     }
 }
 if ($routing_result === false) {
     // Страница не найдена
     $page_not_found = true;
 } else {