Index: trunk/core/units/admin/admin_tag_processor.php =================================================================== diff -u -N -r8364 -r8397 --- trunk/core/units/admin/admin_tag_processor.php (.../admin_tag_processor.php) (revision 8364) +++ trunk/core/units/admin/admin_tag_processor.php (.../admin_tag_processor.php) (revision 8397) @@ -151,14 +151,26 @@ return $ret; } - $debug_mode = $this->Application->isDebugMode(); // caching for faster performance + $debug_mode = $this->Application->isDebugMode(); + $super_admin_mode = $this->Application->RecallVar('super_admin'); + ksort($section_data['children'], SORT_NUMERIC); foreach ($section_data['children'] as $section_name) { $section_data =& $sections_helper->getSectionData($section_name); - if (!$debug_mode && isset($section_data['debug_only']) && $section_data['debug_only']) { - // don't show section for debug mode only without debug mode turned on - continue; + + if (isset($section_data['show_mode']) && is_numeric($section_data['show_mode'])) { + $show_mode = $section_data['show_mode']; + // if super admin section -> show in super admin mode & debug mode + $show_section = (($show_mode & smSUPER_ADMIN) == smSUPER_ADMIN) && ($super_admin_mode || $debug_mode); + if (!$show_section) { + // if section is in debug mode only && debug mode -> show + $show_section = (($show_mode & smDEBUG) == smDEBUG) && $debug_mode; + } + if (!$show_section) { + continue; + } } + $params['section_name'] = $section_name; $ret .= $this->DrawTree($params); $deep_level--; @@ -275,7 +287,7 @@ $params['section_name'] = $section_name; $section_data =& $sections_helper->getSectionData($section_name); - if (isset($section_data['show_mode'])) { + if (isset($section_data['show_mode']) && is_numeric($section_data['show_mode'])) { $show_mode = $section_data['show_mode']; // if super admin section -> show in super admin mode & debug mode $show_section = (($show_mode & smSUPER_ADMIN) == smSUPER_ADMIN) && ($super_admin_mode || $debug_mode); @@ -717,23 +729,111 @@ */ function MainFrameLink($params) { - $last_template = $this->Application->RecallVar('last_template_popup'); // because of m_opener=s there + $persistent = isset($params['persistent']) && $params['persistent']; + if ($persistent) { + // check last_template in persistent session + $last_template = $this->Application->RecallPersistentVar('last_template_popup'); + } + else { + // check last_template in session + $last_template = $this->Application->RecallVar('last_template_popup'); // because of m_opener=s there + } + if (!$last_template) { - return false; + $params['persistent'] = 1; + return $persistent ? false : $this->MainFrameLink($params); } - list(, $env) = explode('|', $last_template); + list($index_file, $env) = explode('|', $last_template); $vars = $this->Application->HttpQuery->processQueryString($env, 'pass'); - if ($vars['t'] == 'login' || $vars['t'] == 'index') { + $recursion_templates = Array ('login', 'index'); + + if (isset($vars['admin']) && $vars['admin'] == 1) { + // index template doesn't begin recursion on front-end (in admin frame) + $vars['m_theme'] = ''; + + if (isset($params['m_opener']) && $params['m_opener'] == 'r') { + // front-end link for highlighting purposes + $vars['t'] = 'index'; + $vars['m_cat_id'] = $this->Application->findModule('Name', 'Proj-CMS', 'RootCat'); + } + + unset($recursion_templates[ array_search('index', $recursion_templates)]); + } + + if (in_array($vars['t'], $recursion_templates)) { // prevents redirect recursion OR old in-portal pages - return false; + $params['persistent'] = 1; + return $persistent ? false : $this->MainFrameLink($params); } $vars = array_merge_recursive2($vars, $params); $t = $vars['t']; unset($vars['t']); + + return $this->Application->HREF($t, '', $vars, $index_file); + } - return $this->Application->HREF($t, '', $vars); + + function AdminSkin($params) + { + static $style; + if (!isset($style)) { + $style = $this->Conn->GetRow('SELECT * FROM '.TABLE_PREFIX.'Skins WHERE IsPrimary = 1'); + } + + $css_path = WRITEABLE.'/user_files'; + $css_url = $this->Application->BaseURL(WRITEBALE_BASE).'user_files/'; + + if (isset($params['type']) && $params['type'] == 'logo') { + return $style['Logo'] ? $css_url.$style['Logo'] : ''; + } + + $last_compiled = $style['LastCompiled']; + + $style_name = strtolower( $style['Name'] ); + + if( file_exists($css_path.'/'.'admin-'.$style_name.'-'.$last_compiled.'.css') ) + { + $ret = $css_url.'admin-'.$style_name.'-'.$last_compiled.'.css'; + + } + else + { + // search for previously compiled stylesheet + $last_compiled = 0; + if( $dh = opendir($css_path) ) + { + while( ($file = readdir($dh)) !== false ) + { + if( preg_match('/admin-(.*)-([\d]+).css/', $file, $rets) ) + { + if( $rets[1] == $style_name && $rets[2] > $last_compiled ) $last_compiled = $rets[2]; + } + } + closedir($dh); + } + if ($last_compiled) { + // found + $ret = $css_url.'admin-'.$style_name.'-'.$last_compiled.'.css'; + } + else { + // not found (try to compile on the fly) + $object =& $this->Application->recallObject('skin.-item', null, Array ('skip_autoload' => true)); + /* @var $object kDBItem */ + + $skin_eh =& $this->Application->recallObject('skin_EventHandler'); + /* @var $skin_eh SkinEventHandler */ + + $object->Load(1, 'IsPrimary'); + $skin_eh->Compile($object); + $ret = $css_url.'admin-'.$style_name.'-'.adodb_mktime().'.css'; + } + } + + if (isset($params['file_only'])) return $ret; + + return ''; } }