Example #1
0
function _xfs($mod = false, $wdir = false, $warg = false)
{
    global $user, $core;
    if (!($rewrite = enable_rewrite())) {
        _fatal(499, '', '', 'Enable mod_rewrite on Apache.');
    }
    require_once XFS . 'core/modules.php';
    if ($mod === false) {
        $mod = request_var('module', '');
    }
    $mod = f($mod) ? $mod : 'home';
    $p_dir = false;
    $d_list = w('./ ' . XFS);
    foreach ($d_list as $row) {
        $mod_dir = $row . 'base/_' . $mod;
        if (!$p_dir) {
            $p_dir = $wdir === false && @file_exists($mod_dir) && is_dir($mod_dir) ? true : false;
        }
        if ($p_dir) {
            break;
        }
    }
    if (!$p_dir) {
        $found_mod = false;
        foreach ($d_list as $row) {
            $mod_dir = $row . 'base/_' . ($wdir !== false ? $wdir . '/_' : '') . $mod;
            $mod_path = $mod_dir . '.php';
            if (@file_exists($mod_path)) {
                $found_mod = true;
                break;
            }
        }
        if (!$found_mod) {
            if ($mod != 'home') {
                _fatal();
            }
            class __home extends xmd
            {
                public function home()
                {
                    return true;
                }
            }
        } else {
            require_once $mod_path;
        }
        $mod_class = '__' . $mod;
        if (!class_exists($mod_class)) {
            _fatal();
        }
        $module = new $mod_class();
    }
    if ($warg === false) {
        $warg = w();
        $arg = request_var('args');
        if (f($arg)) {
            foreach (explode('.', $arg) as $v) {
                $el = explode(':', $v);
                if (isset($el[0]) && isset($el[1]) && f($el[0])) {
                    $warg[$el[0]] = $el[1];
                }
            }
        }
        if (isset($_POST) && count($_POST)) {
            $_POST = _utf8($_POST);
            $warg = array_merge($warg, $_POST);
        }
    }
    if ($p_dir) {
        _xfs(isset($warg['x1']) ? $warg['x1'] : '', $mod, $warg);
    } else {
        _lib_define();
        $warg_x = 0;
        foreach ($warg as $warg_k => $warg_v) {
            if (preg_match('/x\\d+/i', $warg_k)) {
                $warg_x = str_replace('x', '', $warg_k);
            }
        }
        if ($wdir !== false) {
            for ($i = 0; $i < $warg_x; $i++) {
                $warg['x' . ($i + 1)] = isset($warg['x' + ($i + 2)]) ? $warg['x' + ($i + 2)] : '';
            }
        }
    }
    if (defined('MY_TIMEZONE') && !f(ini_get('date.timezone')) && function_exists('date_default_timezone_set')) {
        @ini_set('date.timezone', MY_TIMEZONE);
    }
    $module->xlevel($warg);
    if (!$p_dir && $module->auth() && (!$module->x(1) || !count($module->exclude) || !in_array($module->x(1), $module->exclude))) {
        _login();
    }
    if (!method_exists($module, $module->x(1))) {
        _fatal();
    }
    // Session start
    $user->start(true);
    $user->setup();
    $module->m($mod);
    if (!$module->auth_access() && $module->auth()) {
        _fatal();
    }
    if (@method_exists($module, 'install')) {
        $module->_install();
    }
    $module->navigation('home', '', '');
    $module->navigation($module->m(), '');
    if ($module->x(1) != 'home' && @method_exists($module, 'init')) {
        $module->init();
    }
    hook(array($module, $module->x(1)));
    if (!$module->_template()) {
        $module->_template($mod);
    }
    if (@file_exists('./base/tree')) {
        $menu = array_map('trim', @file('./base/tree'));
        $i = 0;
        foreach ($menu as $row) {
            if (substr($row, 0, 1) == '#') {
                continue;
            }
            preg_match('#^\\*{0,} (.*?) <(.*?)>$#i', $row, $row_key);
            $row_level = strripos($row, '*') + 1;
            $row_mod = array(dvar(array_key(explode('/', $row_key[2]), 1), 'home'));
            if ($row_level > 1) {
                $v_row_mod = array_key(explode(':', array_key(explode('.', array_key(explode('/', $row_key[2]), 2)), 0)), 1);
                if (f($v_row_mod)) {
                    $row_mod[] = $v_row_mod;
                }
            }
            if (!_auth_get(implode('_', $row_mod))) {
                continue;
            }
            if (!$i) {
                _style('tree');
            }
            _style('tree.row' . ($row_level > 1 ? '.sub' . ($row_level - 1) : ''), array('V_NAME' => trim(str_replace('*', '', $row_key[1])), 'V_LINK' => _link() . substr($row_key[2], 1)));
            $i++;
        }
    }
    //
    // Output template
    $page_smodule = 'CONTROL_' . $mod;
    if (is_lang($page_smodule)) {
        $module->page_title($page_smodule);
    }
    $browser_upgrade = false;
    if (!$core->v('skip_browser_detect') && ($list_browser = get_file('./base/need_browser'))) {
        $browser_list = w();
        foreach ($list_browser as $row) {
            $e = explode(' :: ', $row);
            $browser_list[$e[0]] = $e[1];
        }
        foreach ($browser_list as $browser => $version) {
            if (_browser($browser) && _browser($browser, $version)) {
                v_style(array('visual' => LIBD . 'visual'));
                $module->_template('browsers');
                $browser_upgrade = true;
            }
        }
    }
    $sv = array('MODE' => $module->x(1), 'MANAGE' => $module->x(2), 'NAVIGATION' => $module->get_navigation(), 'BROWSER_UPGRADE' => $browser_upgrade);
    _layout($module->_template(), $module->page_title(), $sv);
}
Example #2
0
    public function run($mod = false)
    {
        global $bio, $core, $file, $warning;
        if (!($rewrite = enable_rewrite())) {
            $warning->now('Enable mod_rewrite on Apache.');
        }
        require_once XFS . XCOR . 'modules.php';
        if ($mod === false) {
            $mod = request_var('module', '');
        }
        $mod = !empty($mod) ? $mod : 'home';
        if (!($_module = $core->cache->load('module_' . str_replace('/', '_', $mod)))) {
            $sql = 'SELECT *
				FROM _modules
				WHERE module_alias = ?';
            if (!($_module = $core->cache->store(sql_fieldrow(sql_filter($sql, $mod))))) {
                $warning->now('no_module');
            }
        }
        $_module->module_path = XFS . XMOD . $_module->module_path . $_module->module_basename;
        if (!@file_exists($_module->module_path)) {
            $warning->now('no_path: ' . $_module->module_path);
        }
        @(require_once $_module->module_path);
        $_object = '__' . $mod;
        if (!class_exists($_object)) {
            $warning->now();
        }
        $module = new $_object();
        $module->m($mod);
        if (@method_exists($module, 'install')) {
            $module->_install();
        }
        if (!defined('ULIB')) {
            define('ULIB', _link() . str_replace(w('../ ./'), '', LIB));
        }
        if (empty($this->input)) {
            $_input = array();
            if ($arg = request_var('args', '')) {
                foreach (explode('.', $arg) as $str_pair) {
                    $pair = explode(':', $str_pair);
                    if (isset($pair[0]) && isset($pair[1]) && !empty($pair[0])) {
                        $this->input[$pair[0]] = $pair[1];
                    }
                }
            }
            if (isset($_POST) && count($_POST)) {
                $_POST = _utf8($_POST);
                $this->input = array_merge($this->input, $_POST);
            }
        }
        $module->levels($this->input);
        if (!method_exists($module, $module->x(1))) {
            $warning->now();
        }
        if ($module->auth() && (!$module->x(1) || !in_array($module->x(1), $module->exclude))) {
            $module->signin();
        }
        //
        // All verifications passed, so start session for the request
        $bio->start(true);
        $bio->setup();
        if (!$module->auth_access() && $module->auth()) {
            $warning->now();
        }
        $module->navigation('home', '', '');
        $module->navigation($module->m(), '');
        if ($module->x(1) != 'home' && @method_exists($module, 'init')) {
            $module->init();
        }
        hook(array($module, $module->x(1)));
        if (!$module->_template()) {
            $module->_template($mod);
        }
        //
        // Output template
        $page_module = 'MODULE_' . $mod;
        if ($bio->is_lang($page_module)) {
            $module->page_title($page_module);
        }
        $browser_upgrade = false;
        if (!$core->v('skip_browser_detect') && ($list_browser = $file->read(XFS . XCOR . 'store/need_browser'))) {
            $browser_list = w();
            foreach ($list_browser as $row) {
                $e = explode(' :: ', $row);
                $browser_list[$e[0]] = $e[1];
            }
            foreach ($browser_list as $browser => $version) {
                if (_browser($browser) && _browser($browser, $version)) {
                    v_style(array('visual' => ULIB . LIB_VISUAL));
                    $module->_template('browsers');
                    $browser_upgrade = true;
                }
            }
        }
        $sv = array('X1' => $module->x(1), 'X2' => $module->x(2), 'NAVIGATION' => $module->get_navigation(), 'BROWSER_UPGRADE' => $browser_upgrade);
        _layout($module->_template(), $module->page_title(), $sv);
    }