Example #1
0
 /**
  * Загрузка подэкрана
  * load($this, 'manage','artists');
  *
  * @param a_handler $page_object можно использовать как a_handler, так и a_sub_handler (всё благодаря $this->handler)
  * @param str $path
  * @param str $sub_handler
  * @param bool $is_auto_process
  *
  * @return a_sub_handler
  */
 static function load($page_object, $path, $sub_handler, $is_auto_process = true)
 {
     global $o_global;
     $sub_handler_class_name = 's_' . $sub_handler;
     load_handler($path . '/' . $sub_handler_class_name);
     $sub_handler_object = new $sub_handler_class_name($page_object->handler);
     $page_object->handler->sub_handlers[$sub_handler_class_name] = $sub_handler_object;
     if ($is_auto_process) {
         $sub_handler_object->common_process();
         if ($o_global->is_ajax) {
             $sub_handler_object->ajax_process();
         } else {
             $sub_handler_object->process();
         }
     }
     return $sub_handler_object;
 }
Example #2
0
function run_site()
{
    global $o_global;
    /* Ищем обработчик для заданного пути
     * обработчики задаются в _site.xml
     *
     * Если для пути /one/two/three в _site.xml обработчик не задан, то ищется обработчик для /one/two,
     * если нет и для этого пути, то бурётся обработчик для /one. Иначе выводится 404
     *
     * */
    $url_params = $o_global->url_params;
    if ($url_params[0] == 'res') {
        //для ресурсов сразу отдаём 404
        header("HTTP/1.0 404 Not Found");
        /*$tmp=$o_global->site_root.implode('/',$url_params);
          echo file_get_contents($tmp);*/
        exit;
    }
    do {
        $cur_page = $o_global->get_page_by_screen($url_params);
        array_pop($url_params);
    } while ($cur_page === false && !empty($url_params));
    $o_global->curr_page = $cur_page;
    if ($o_global->curr_page === false) {
        //попробуем найти эту же страницу, но без учёта прав
        $url_params = $o_global->url_params;
        do {
            $cur_page_nr = $o_global->get_page_by_screen($url_params, $o_global->site_full_array['pages']);
            array_pop($url_params);
        } while ($cur_page_nr === false && !empty($url_params));
        if ($cur_page_nr === false) {
            //этой страницы нет вообще
            $o_global->curr_page = $o_global->get_page_by_screen('404');
            if ($o_global->curr_page === false) {
                header("HTTP/1.0 404 Not Found");
                echo '404';
                exit;
            }
        } else {
            //эта страница есть, значит для просмтора не хватает прав
            //перебросим на страницу логина
            if (!$o_global->is_ajax) {
                global $o_session;
                $o_session->set_session('login_from', '', $_SERVER['REQUEST_URI']);
                redirect_to('/login');
            } else {
                echo 'error';
                exit;
            }
        }
    }
    //если задан редирект
    if (isset($o_global->curr_page['redirect'])) {
        redirect_to($o_global->curr_page['redirect']['.']);
    }
    if ($o_global->curr_page['@ajax'] == 1) {
        $o_global->is_ajax = true;
    }
    $out_result = false;
    /*Begin проверим кеш*/
    if ($o_global->settings_array['enable_cache']['.'] == 1 && $o_global->curr_page['@cache_time'] > 0) {
        //кеш включён
        $o_cache = new c_cache($o_global->curr_page['@cache_time']);
        if (empty($_POST) && !$o_global->is_ajax) {
            $cache_key = make_cache_key();
            //если установлен, то кеш сохраним
            $out_result = $o_cache->get($cache_key);
        } else {
            //какие-то действия, значит надо очистить кеш
            $o_cache->remove(make_cache_key());
        }
    }
    /*End проверим кеш*/
    /*Begin из кеша не взяли*/
    if ($out_result === false) {
        $handlers = $o_global->curr_page['handlers'];
        if (is_array($handlers)) {
            if ($o_global->is_ajax) {
                $handler = $handlers['content']['.'];
                if (load_handler($handler)) {
                    $handler_class = get_handler_class($handler);
                    $o_handler = new $handler_class();
                    $o_handler->handler_info = $handlers['content'];
                    $out_result = $o_handler->run();
                }
            } else {
                $dta = array();
                foreach ($handlers as $part => $handler_arr) {
                    if (c_xml::is_system_key($part)) {
                        continue;
                    }
                    if (!isset($o_global->curr_page['handlers'][$part])) {
                        continue;
                    }
                    //в обработчик мог изменить количество обработчиков
                    $handler = $handler_arr['.'];
                    if (load_handler($handler)) {
                        $handler_class = get_handler_class($handler);
                        $o_handler = new $handler_class();
                        $o_handler->handler_info = $handler_arr;
                        $dta['parts'][$part] = $o_handler->run();
                    }
                }
                /*устанавливаем параметры из раздела <params></params> страницы*/
                if (is_array($o_global->curr_page['params'])) {
                    foreach ($o_global->curr_page['params'] as $k => $itm) {
                        if (c_xml::is_system_key($k)) {
                            continue;
                        }
                        $params[$k] = $itm['.'];
                    }
                }
                if (is_array($o_global->curr_page['title'])) {
                    $params['title'] = $o_global->curr_page['title']['.'];
                } else {
                    $params['title'] = $o_global->curr_page['title'];
                }
                if (is_array($o_global->curr_page['description'])) {
                    $params['description'] = $o_global->curr_page['description']['.'];
                } else {
                    $params['description'] = $o_global->curr_page['description'];
                }
                if (is_array($o_global->curr_page['keywords'])) {
                    $params['keywords'] = $o_global->curr_page['keywords']['.'];
                } else {
                    $params['keywords'] = $o_global->curr_page['keywords'];
                }
                if (is_array($o_global->curr_page['theme'])) {
                    $out_result = xsl_out($o_global->curr_page['theme']['.'], 'page', $dta, false, $params, false, false);
                } else {
                    $out_result = xsl_out($o_global->curr_page['theme'], 'page', $dta, false, $params, false, false);
                }
            }
        } else {
            //если обработчики не заданы, то просто выводим xsl
            $params['title'] = $o_global->curr_page['title']['.'];
            $params['description'] = $o_global->curr_page['description']['.'];
            $params['keywords'] = $o_global->curr_page['keywords']['.'];
            $out_result = xsl_out($o_global->curr_page['theme']['.'], 'page', array(), false, $params, false, false);
        }
        /*Begin сохраним кеш*/
        if (isset($cache_key)) {
            $o_cache->set($cache_key, $out_result);
        }
        /*End сохраним кеш*/
    }
    /*End из кеша не взяли*/
    echo $out_result;
}