Exemplo n.º 1
0
 /**
  * @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;
 }
Exemplo n.º 2
0
 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>";
 }
Exemplo n.º 3
0
$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>
Exemplo n.º 4
0
 /**
  * @param $parameter
  * @return mixed
  */
 public function get_resource_parameter($parameter)
 {
     return nc_array_value($this->parameters, $parameter);
 }
Exemplo n.º 5
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;
}
Exemplo n.º 6
0
 /**
  * @return string
  */
 public function get_path()
 {
     return nc_array_value($this->url_parts, 'path');
 }
Exemplo n.º 7
0
            $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 {
Exemplo n.º 8
0
    }
    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) {
                    }