/** * @param $pattern_string * @throws nc_routing_pattern_parser_exception * @return nc_routing_pattern_part[] */ public static function parse($pattern_string) { $result = array(); $raw_parts = self::split_pattern_string($pattern_string); foreach ($raw_parts as $raw_part) { // Simple route parts like "{format}" if (preg_match('/^\\{(\\w+)(?::(.+))?\\}$/', $raw_part, $matches)) { $matcher_class = "nc_routing_pattern_part_" . $matches[1]; if (class_exists($matcher_class)) { $args = nc_array_value($matches, 2); if ($args) { $result[] = new $matcher_class($args); } else { $result[] = new $matcher_class(); } } else { $error_message = sprintf(NETCAT_MODULE_ROUTING_ROUTE_PATTERN_NOT_RECOGNIZED, $raw_part); throw new nc_routing_pattern_parser_exception($error_message); } } else { if (preg_match('/^\\{=(\\w+)(?::(.+))?\\}$/', $raw_part, $matches)) { $result[] = new nc_routing_pattern_part_variable($matches[1], nc_array_value($matches, 2)); } else { $result[] = new nc_routing_pattern_part_string($raw_part); } } } return $result; }
function _edit_doc_link($row) { // global function inside a method... huh? if (!$row["Subdivision_ID"]) { return ""; } // oops $resolved_url_data = nc_resolve_url($row["Referrer_URL"]); $url = parse_url($row["Referrer_URL"]); $edit_link_params = array("sub" => nc_array_value($resolved_url_data, "folder_id"), "cc" => nc_array_value($resolved_url_data, "infoblock_id"), "message" => nc_array_value($resolved_url_data, "object_id")); $edit_link = $url['scheme'] . "://" . $url['host'] . nc_core("SUB_FOLDER") . nc_core("HTTP_ROOT_PATH") . ($resolved_url_data["resource_type"] == "object" ? "message.php" : "") . "?" . (isset($url["query"]) ? $url["query"] . "&" : "") . http_build_query($edit_link_params); return "<a href='" . htmlspecialchars($edit_link) . "' target='_blank'>" . NETCAT_MODULE_SEARCH_ADMIN_BROKEN_LINK_EDIT . "</a>"; }
$params = $route->get('resource_parameters'); // ТИП РЕСУРСА: РАЗДЕЛ $form->add_row(NETCAT_MODULE_ROUTING_ROUTE_FOLDER)->class_name('nc-routing-parameter nc-routing-folder')->string('folder[folder_id]', nc_array_value($params, 'folder_id'))->xlarge(); // ТИП РЕСУРСА: ИНФОБЛОК $form->add_row(NETCAT_MODULE_ROUTING_ROUTE_FOLDER)->class_name('nc-routing-parameter nc-routing-infoblock')->string('infoblock[folder_id]', nc_array_value($params, 'folder_id'))->xlarge(); $form->add_row(NETCAT_MODULE_ROUTING_RESOURCE_INFOBLOCK)->class_name('nc-routing-parameter nc-routing-infoblock')->string('infoblock[infoblock_id]', nc_array_value($params, 'infoblock_id'))->xlarge(); $form->add_row(NETCAT_MODULE_ROUTING_ROUTE_ACTION)->class_name('nc-routing-parameter nc-routing-infoblock')->select('infoblock[action]', array('' => NETCAT_MODULE_ROUTING_INFOBLOCK_ACTION_DEFAULT, 'index' => NETCAT_MODULE_ROUTING_INFOBLOCK_ACTION_INDEX, 'add' => NETCAT_MODULE_ROUTING_INFOBLOCK_ACTION_ADD, 'search' => NETCAT_MODULE_ROUTING_INFOBLOCK_ACTION_SEARCH, 'subscribe' => NETCAT_MODULE_ROUTING_INFOBLOCK_ACTION_SUBSCRIBE), nc_array_value($params, 'action', 'index')); $form->add_row(NETCAT_MODULE_ROUTING_ROUTE_FORMAT)->class_name('nc-routing-parameter nc-routing-infoblock')->select('infoblock[format]', array('html' => 'HTML', 'xml' => 'XML', 'rss' => 'RSS'), nc_array_value($params, 'format', 'html')); // ТИП РЕСУРСА: ОБЪЕКТ $form->add_row(NETCAT_MODULE_ROUTING_ROUTE_FOLDER)->class_name('nc-routing-parameter nc-routing-object')->string('object[folder_id]', nc_array_value($params, 'folder_id'))->xlarge(); $form->add_row(NETCAT_MODULE_ROUTING_RESOURCE_INFOBLOCK)->class_name('nc-routing-parameter nc-routing-object')->string('object[infoblock_id]', nc_array_value($params, 'infoblock_id'))->xlarge(); $form->add_row(NETCAT_MODULE_ROUTING_RESOURCE_OBJECT)->class_name('nc-routing-parameter nc-routing-object')->string('object[object_id]', nc_array_value($params, 'object_id'))->xlarge(); $form->add_row(NETCAT_MODULE_ROUTING_ROUTE_ACTION)->class_name('nc-routing-parameter nc-routing-object')->select('object[action]', array('full' => NETCAT_MODULE_ROUTING_OBJECT_ACTION_FULL, 'edit' => NETCAT_MODULE_ROUTING_OBJECT_ACTION_EDIT, 'delete' => NETCAT_MODULE_ROUTING_OBJECT_ACTION_DELETE, 'drop' => NETCAT_MODULE_ROUTING_OBJECT_ACTION_DROP, 'checked' => NETCAT_MODULE_ROUTING_OBJECT_ACTION_CHECKED, 'subscribe' => NETCAT_MODULE_ROUTING_OBJECT_ACTION_SUBSCRIBE), nc_array_value($params, 'action', 'full')); $form->add_row(NETCAT_MODULE_ROUTING_ROUTE_FORMAT)->class_name('nc-routing-parameter nc-routing-object')->select('object[format]', array('html' => 'HTML', 'xml' => 'XML', 'rss' => 'RSS'), nc_array_value($params, 'format', 'html')); // ТИП РЕСУРСА: СКРИПТ $form->add_row(NETCAT_MODULE_ROUTING_SCRIPT_PATH)->class_name('nc-routing-parameter nc-routing-script')->string('script[script_path]', nc_array_value($params, 'script_path'))->xlarge(); // --- Переменные --- $form->add_row(NETCAT_MODULE_ROUTING_ADDITIONAL_VARIABLES)->string('query_variables', $route->get('query_variables') ? http_build_query($route->get('query_variables'), null, '&') : '')->xlarge(); echo $form; ?> <script> (function() { var select = $nc('#nc_routing_resource_type'); function show_parameters() { $nc('.nc-routing-parameter').hide() .filter('.nc-routing-' + select.find('option:selected').val()).show(); } select.change(show_parameters); show_parameters(); })(); </script>
/** * @param $parameter * @return mixed */ public function get_resource_parameter($parameter) { return nc_array_value($this->parameters, $parameter); }
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 & with & then replace all & to & $url = nc_preg_replace(array("/&/", "/&/"), array("&", "&"), $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; }
/** * @return string */ public function get_path() { return nc_array_value($this->url_parts, 'path'); }
$cc_array[] = $row['Sub_Class_ID']; } } if (count($cc_array)) { $cc = $_db_cc = $cc_array[0]; } } else { $routing_result = nc_resolve_url($nc_core->url, $_SERVER['REQUEST_METHOD']); // принятие решения о необходимости переадресации или добавления канонического адреса // (только при включённом модуле маршрутизации) if (is_array($routing_result) && nc_module_check_by_keyword('routing')) { $routing_duplicate_route_action = nc_routing::get_setting('DuplicateRouteAction', $catalogue); if ($routing_duplicate_route_action != nc_routing::DUPLICATE_ROUTE_NO_ACTION) { // попробуем получить путь, соответствующий полученным параметрам $routing_canonical_request = $routing_result; $routing_result_variables = nc_array_value($routing_result, 'variables', array()); if ($routing_result_variables) { // подходящий маршрут должен содержать эти переменные в «дополнительных переменных» (query_variables) $routing_canonical_request['route_variables'] = $routing_result_variables; } // добавим GET-переменные, если они есть if ($nc_core->input->fetch_get()) { $routing_canonical_request['variables'] = array_merge((array) $nc_core->input->fetch_get(), $routing_result_variables); } unset($routing_canonical_request['variables']['REQUEST_URI']); if ($routing_canonical_request['resource_type'] == 'object') { // Для объектов в качестве основного пути могут использоваться пути без даты $routing_canonical_request['date_is_optional'] = true; // Для объектов проверить наличие и значение поля типа event/event_date if (!$routing_canonical_request['date']) { try {
} if (count($cc_array)) { $cc = $_db_cc = $cc_array[0]; } } else { $routing_result = nc_resolve_url($nc_core->url, $_SERVER['REQUEST_METHOD']); // принятие решения о необходимости переадресации или добавления канонического адреса // (только при включённом модуле маршрутизации) if (is_array($routing_result) && nc_module_check_by_keyword('routing')) { $routing_duplicate_route_action = nc_routing::get_setting('DuplicateRouteAction', $catalogue); if ($routing_duplicate_route_action != nc_routing::DUPLICATE_ROUTE_NO_ACTION) { // попробуем получить путь, соответствующий полученным параметрам $routing_canonical_request = $routing_result; // добавим GET-переменные, если они есть if ($nc_core->input->fetch_get()) { $routing_canonical_request['variables'] = array_merge((array) $nc_core->input->fetch_get(), nc_array_value($routing_canonical_request, 'variables', array())); } unset($routing_canonical_request['variables']['REQUEST_URI']); 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) { }