array()); return \gp\tool\Files::$last_modified; } public static function CheckArray($array,$update_data){ foreach($array as $addon => $addon_info){ $addon_id = false; if( isset($addon_info['id']) ){ $addon_id = $addon_info['id']; }elseif( isset($addon_info['addon_id']) ){ //for layouts $addon_id = $addon_info['addon_id']; } if( !$addon_id || !isset($update_data['packages'][$addon_id]) ){ continue; } $installed_version = 0; if( isset($addon_info['version']) ){ $installed_version = $addon_info['version']; } $new_addon_info = $update_data['packages'][$addon_id]; $new_addon_version = $new_addon_info['version']; if( version_compare($installed_version,$new_addon_version,'>=') ){ continue; } //new version found if( !isset($new_addon_info['name']) && isset($addon_info['name']) ){ $new_addon_info['name'] = $addon_info['name']; } self::$new_versions[$addon_id] = $new_addon_info; } } public static function AdminScripts(){ global $langmessage, $config; $scripts = array(); // Content $scripts['Admin/Menu'] = array( 'class' => '\\gp\\admin\\Menu', 'method' => 'RunScript', 'label' => $langmessage['file_manager'], 'group' => 'content', ); $scripts['Admin/Menu/Menus'] = array( 'class' => '\\gp\\admin\\Menu\\Menus', 'method' => 'RunScript', ); $scripts['Admin/Menu/Ajax'] = array( 'class' => '\\gp\\admin\\Menu\\Ajax', 'method' => 'RunScript', ); $scripts['Admin/Uploaded'] = array( 'class' => '\\gp\\admin\\Content\\Uploaded', 'method' => 'RunScript', 'label' => $langmessage['uploaded_files'], 'group' => 'content', ); $scripts['Admin/Extra'] = array( 'class' => '\\gp\\admin\\Content\\Extra', 'method' => 'RunScript', 'label' => $langmessage['theme_content'], 'group' => 'content', ); $scripts['Admin/Galleries'] = array( 'class' => '\\gp\\admin\\Content\\Galleries', 'label' => $langmessage['galleries'], 'group' => 'content', ); $scripts['Admin/Trash'] = array( 'class' => '\\gp\\admin\\Content\\Trash', 'label' => $langmessage['trash'], 'group' => 'content', ); // Appearance $scripts['Admin_Theme_Content'] = array( 'class' => '\\gp\\admin\\Layout', 'method' => 'RunScript', 'label' => $langmessage['Appearance'], 'group' => 'appearance', ); $scripts['Admin_Theme_Content/Edit'] = array( 'class' => '\\gp\\admin\\Layout\\Edit', 'method' => 'RunScript', 'label' => $langmessage['Appearance'], ); $scripts['Admin_Theme_Content/Available'] = array( 'class' => '\\gp\\admin\\Layout\\Available', 'method' => 'ShowAvailable', 'label' => $langmessage['Available'], ); $scripts['Admin_Theme_Content/Text'] = array( 'class' => '\\gp\\admin\\Layout\\Text', 'method' => 'RunScript', ); $scripts['Admin_Theme_Content/Image'] = array( 'class' => '\\gp\\admin\\Layout\\Image', 'method' => 'RunScript', ); if( gp_remote_themes ){ $scripts['Admin_Theme_Content/Remote'] = array( 'class' => '\\gp\\admin\\Layout', 'method' => 'RemoteBrowse', 'label' => $langmessage['Search'], ); } // Settings $scripts['Admin/Configuration'] = array( 'class' => '\\gp\\admin\\Configuration', 'method' => 'RunScript', 'label' => $langmessage['configuration'], 'group' => 'settings', ); $scripts['Admin/Configuration/CDN'] = array( 'class' => '\\gp\\admin\\Configuration\\CDN', 'method' => 'RunScript', 'label' => 'CDN', 'group' => 'settings', ); $scripts['Admin/Users'] = array( 'class' => '\\gp\\admin\\Settings\\Users', 'label' => $langmessage['user_permissions'], 'group' => 'settings', ); $scripts['Admin/CKEditor'] = array( 'class' => '\\gp\\admin\\Settings\\CKEditor', 'label' => 'CKEditor', 'group' => 'settings', ); $scripts['Admin/Classes'] = array( 'class' => '\\gp\\admin\\Settings\\Classes', 'label' => $langmessage['Manage Classes'], 'group' => 'settings', ); $scripts['Admin/Permalinks'] = array( 'class' => '\\gp\\admin\\Settings\\Permalinks', 'label' => $langmessage['permalinks'], 'group' => 'settings', ); $scripts['Admin/Missing'] = array( 'class' => '\\gp\\admin\\Settings\\Missing', 'method' => 'RunScript', 'label' => $langmessage['Link Errors'], 'group' => 'settings', ); if( isset($config['admin_links']) && is_array($config['admin_links']) ){ $scripts += $config['admin_links']; } // Tools $scripts['Admin/Port'] = array( 'class' => '\\gp\\admin\\Tools\\Port', 'label' => $langmessage['Export'], 'group' => 'tools', 'method' => 'RunScript' ); $scripts['Admin/Status'] = array( 'class' => '\\gp\\admin\\Tools\\Status', 'label' => $langmessage['Site Status'], 'group' => 'tools' ); $scripts['Admin/Uninstall'] = array( 'class' => '\\gp\\admin\\Tools\\Uninstall', 'label' => $langmessage['uninstall_prep'], 'group' => 'tools' ); $scripts['Admin/Cache'] = array( 'class' => '\\gp\\admin\\Tools\\Cache', 'label' => $langmessage['Resource Cache'], 'group' => 'tools' ); // Unlisted $scripts['Admin/Addons'] = array( 'class' => '\\gp\\admin\\Addons', 'method' => 'RunScript', 'label' => $langmessage['plugins'], ); $scripts['Admin/Addons/Available'] = array( 'class' => '\\gp\\admin\\Addons', 'method' => 'ShowAvailable', 'label' => $langmessage['Available'], ); if( gp_remote_plugins ){ $scripts['Admin/Addons/Remote'] = array( 'class' => '\\gp\\admin\\Addons', 'method' => 'RemoteBrowse', 'label' => $langmessage['Search'], ); } $scripts['Admin/Errors'] = array( 'class' => '\\gp\\admin\\Tools\\Errors', 'label' => 'Errors', ); $scripts['Admin/About'] = array( 'class' => '\\gp\\admin\\About', 'label' => 'About '.CMS_NAME, ); $scripts['Admin/Browser'] = array( 'class' => '\\gp\\admin\\Content\\Browser', 'permission' => 'Admin_Uploaded', ); $scripts['Admin/Preferences'] = array( 'class' => '\\gp\\admin\\Settings\\Preferences', 'label' => $langmessage['Preferences'], ); gpSettingsOverride('admin_scripts',$scripts); return $scripts; } /** * Determine if the current user has permissions for the $script * @static * @return bool */ public static function HasPermission($script){ global $gpAdmin; if( is_array($gpAdmin) ){ $gpAdmin += array('granted'=>''); return self::CheckPermission($gpAdmin['granted'],$script); } return false; } /** * Determine if a user has permissions for the $script * @static * @since 3.0b2 * @return bool */ public static function CheckPermission($granted,$script){ if( $granted == 'all' ){ return true; } $script = self::WhichPermission($script); $granted = ','.$granted.','; if( strpos($granted,','.$script.',') !== false ){ return true; } return false; } /** * Return the permission setting that should be checked against a list of grated permissions * Admin_Browser -> Admin_Uploaded * Admin_Theme_Content/Text -> Admin_Theme_Content * */ public static function WhichPermission($script){ // prepare list of permissions $scripts = self::AdminScripts(); $possible = array(); foreach($scripts as $pscript => $info){ $pscript = str_replace('/','_',$pscript); if( isset($info['permission']) ){ $possible[$pscript] = $info['permission']; }elseif( isset($info['label']) ){ $possible[$pscript] = $pscript; } } // find the relevant permission in the list of possible permissions $script = str_replace('/','_',$script); $parts = explode('_',$script); while($parts){ $check = implode('_',$parts); if( !isset($possible[$check]) ){ array_pop($parts); continue; } return $possible[$check]; } return $script; } /** * Determine if a user can edit a specific page * @static * @since 3.0b2 * @param string $index The data index of the page * @return bool */ public static function CanEdit($index){ global $gpAdmin; //pre 3.0 check if( !isset($gpAdmin['editing']) ){ return self::HasPermission('file_editing'); } if( $gpAdmin['editing'] == 'all' ){ return true; } if( strpos($gpAdmin['editing'],','.$index.',') !== false ){ return true; } return false; } /** * Used to update the basic 'file_editing' permission value to the new 'editing' value used in 3.0b2+ * @since 3.0b2 * @static */ public static function EditingValue(&$user_info){ if( isset($user_info['editing']) ){ return; } if( self::CheckPermission($user_info['granted'],'file_editing') ){ $user_info['editing'] = 'all'; return 'all'; } $user_info['editing'] = ''; } /** * Output the main admin toolbar * @static */ public static function GetAdminPanel(){ global $page, $gpAdmin; //don't send the panel when it's a gpreq=json request if( !self::$show_toolbar ){ return; } $reqtype = \gp\tool::RequestType(); if( $reqtype != 'template' && $reqtype != 'admin' ){ return; } $class = ''; $position = ''; if( \gp\tool::RequestType() != 'admin' ){ $position = ' style="top:'.max(-10,$gpAdmin['gpui_ty']).'px;left:'.max(-10,$gpAdmin['gpui_tx']).'px"'; if( isset($gpAdmin['gpui_cmpct']) && $gpAdmin['gpui_cmpct'] ){ $class = ' compact'; if( $gpAdmin['gpui_cmpct'] === 2 ){ $class = ' compact min'; }elseif( $gpAdmin['gpui_cmpct'] === 3 ){ $class = ' minb'; } } } $class = ' class="keep_viewable'.$class.'"'; echo "\n\n"; echo '
'; //toolbar echo '
'; echo ''; echo \gp\tool::Link('',''); echo \gp\tool::Link('Admin',''); echo \gp\tool::Link('special_gpsearch','','',array('data-cmd'=>'gpabox')); echo '
'; self::AdminPanelLinks(true); echo '
'; //end simplepanel echo "\n\n"; self::AdminToolbar(); } /** * Show Admin Toolbar * */ public static function AdminToolbar(){ global $page, $langmessage; if( !method_exists($page,'AdminLinks') ){ return; } if( isset($GLOBALS['GP_ARRANGE_CONTENT']) ){ return; } $links = $page->AdminLinks(); if( empty($links) ){ return; } echo '
'; echo ''; self::ToolbarEditLinks(); echo '
'; } /** * Toolbar edit links * */ public static function ToolbarEditLinks(){ global $page, $gp_titles, $langmessage; if( !\gp\admin\Tools::CanEdit($page->gp_index) ){ return; } echo ''; } public static function FormatAdminLinks($links){ foreach($links as $label => $link){ echo '
  • '; if( is_numeric($label) ){ if( is_array($link) ){ echo call_user_func_array(array('\\gp\\tool','Link'),$link); /* preferred */ }else{ echo $link; //just a text label } echo '
  • '; continue; } if( empty($link) ){ echo ''; echo $label; echo ''; }elseif( is_array($link) ){ echo ' '.$label.''; echo ''; }else{ echo ''; echo $label; echo ''; } echo '
  • '; } } /** * Output the link areas that are displayed in the main admin toolbar and admin_main * @param bool $in_panel Whether or not the links will be displayed in the toolbar * @static */ public static function AdminPanelLinks($in_panel=true){ global $langmessage, $page, $gpAdmin; //content $links = self::GetAdminGroup('content'); self::_AdminPanelLinks($in_panel, $links, 'Content', 'fa fa-file-text-o', 'con'); //appearance $links = self::GetAppearanceGroup($in_panel); self::_AdminPanelLinks($in_panel, $links, 'Appearance', 'fa fa-th', 'app'); //add-ons $addon_links = self::GetAddonLinks($in_panel); // now returns array( (string)links, (boolean)permissions ) $links = $addon_links[0]; $addon_permissions = $addon_links[1]; // msg("Any Addon Permisisons? " . pre($addon_permissions) ); if( $addon_permissions ){ self::_AdminPanelLinks($in_panel, $links, 'plugins', 'fa fa-plug', 'add'); } //settings $links = self::GetAdminGroup('settings'); self::_AdminPanelLinks($in_panel, $links, 'Settings', 'fa fa-sliders', 'set'); //tools $links = self::GetAdminGroup('tools'); self::_AdminPanelLinks($in_panel, $links, 'Tools', 'fa fa-wrench', 'tool'); //updates if( count(self::$new_versions) > 0 ){ ob_start(); if( gp_remote_update && isset(self::$new_versions['core']) ){ echo '
  • '; echo ''.CMS_NAME.' '.self::$new_versions['core'].''; echo '
  • '; } foreach(self::$new_versions as $addon_id => $new_addon_info){ if( !is_numeric($addon_id) ){ continue; } $label = $new_addon_info['name'].': '.$new_addon_info['version']; $url = self::RemoteUrl( $new_addon_info['type'] ); if( $url === false ){ continue; } echo '
  • '.$label.'
  • '; } $links = ob_get_clean(); self::_AdminPanelLinks($in_panel, $links, 'updates', 'fa fa-refresh', 'upd'); } //username ob_start(); self::GetFrequentlyUsed($in_panel); echo '
  • '; echo \gp\tool::Link('Admin/Preferences',$langmessage['Preferences']); echo '
  • '; echo '
  • '; echo \gp\tool::Link($page->title,$langmessage['logout'],'cmd=logout',array('data-cmd'=>'creq')); echo '
  • '; echo '
  • '; echo \gp\tool::Link('Admin/About','About '.CMS_NAME); echo '
  • '; $links = ob_get_clean(); self::_AdminPanelLinks($in_panel, $links, $gpAdmin['useralias'], 'fa fa-user', 'use'); // stats ob_start(); echo '
  • ? Memory
  • '; echo '
  • ? Max Memory
  • '; echo '
  • ? Seconds
  • '; echo '
  • ? Milliseconds
  • '; echo '
  • 0 DB Queries
  • '; $links = ob_get_clean(); self::_AdminPanelLinks($in_panel, $links, 'Performance', 'fa fa-bar-chart', 'cms'); //resources if( $page->pagetype === 'admin_display' ){ ob_start(); if( gp_remote_plugins && self::HasPermission('Admin_Addons') ){ echo '
  • '.\gp\tool::Link('Admin/Addons/Remote',$langmessage['Download Plugins']).'
  • '; } if( gp_remote_themes && self::HasPermission('Admin_Theme_Content') ){ echo '
  • '.\gp\tool::Link('Admin_Theme_Content/Remote',$langmessage['Download Themes']).'
  • '; } echo '
  • Support Forum
  • '; echo '
  • Service Providers
  • '; echo '
  • Official '.CMS_NAME.' Site
  • '; echo '
  • Report A Bug
  • '; $links = ob_get_clean(); self::_AdminPanelLinks($in_panel, $links, 'resources', 'fa fa-globe', 'res'); if( $in_panel ){ echo '
    '; echo CMS_NAME.' '.gpversion; echo '
    '; } } } /** * Get the appropriate remote browse url if available * */ public static function RemoteUrl($type){ if( $type == 'theme' || $type == 'themes' ){ if( gp_remote_themes ){ return addon_browse_path.'/Themes'; } } if( $type == 'plugin' || $type == 'plugins' ){ if( gp_remote_plugins ){ return addon_browse_path.'/Plugins'; } } return false; } /** * Helper function for outputing link groups in AdminPanelLinks() * */ private static function _AdminPanelLinks($in_panel, $links, $lang_key, $icon_class, $panel_arg){ global $langmessage; if( empty($links) ){ return; } $label = isset($langmessage[$lang_key]) ? $langmessage[$lang_key] : $lang_key; echo '
    '; self::PanelHeading($in_panel, $label, $icon_class, $panel_arg ); echo ''; echo '
    '; echo ''; } public static function PanelHeading( $in_panel, $label, $icon, $arg ){ global $gpAdmin; if( !$in_panel ){ echo ''; echo ' '; echo ''.$label.''; echo ''; echo '
    '; return; } echo ''; echo ''; echo ''.$label.''; echo ''; if( $gpAdmin['gpui_vis'] == $arg ){ echo '
    '; }else{ echo '
    '; } } /** * Get the links for the Frequently Used section of the admin toolbar * */ public static function GetFrequentlyUsed($in_panel){ global $langmessage, $gpAdmin; $expand_class = 'expand_child'; if( !$in_panel ){ $expand_class = 'expand_child_click'; } //frequently used echo '
  • '; echo ''; echo $langmessage['frequently_used']; echo ''; if( $in_panel ){ echo '