tags. */ public $extra_header = ""; /** * @var string Show a post verify error */ public $show_post_verify_error = ''; /** * Output the page header. * * @param string The title of the page. */ function output_header($title="") { global $mybb, $admin_session, $lang, $plugins; $plugins->run_hooks("admin_page_output_header"); if(!$title) { $title = $lang->mybb_admin_panel; } $rtl = ""; if($lang->settings['rtl'] == 1) { $rtl = " dir=\"rtl\""; } echo "\n"; echo "\n"; echo "\n"; echo " ".$title."\n"; echo " \n"; echo " \n"; echo " style."/main.css\" type=\"text/css\" />\n"; // Load stylesheet for this module if it has one if(file_exists(MYBB_ADMIN_DIR."styles/{$this->style}/{$this->active_module}.css")) { echo " style}/{$this->active_module}.css\" type=\"text/css\" />\n"; } echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; // Stop JS elements showing while page is loading (JS supported browsers only) echo " \n"; echo " \n"; echo " \n"; echo $this->extra_header; echo "\n"; echo "\n"; echo "
\n"; echo "

{$lang->mybb_admin_cp}

\n"; echo "
{$lang->logged_in_as} user['uid']}\" class=\"username\">{$mybb->user['username']} | settings['bburl']}\" target=\"_blank\" class=\"forum\">{$lang->view_board} | post_code}\" class=\"logout\">{$lang->logout}
\n"; echo $this->_build_menu(); echo "
\n"; echo "
\n"; echo $this->submenu; echo $this->sidebar; echo "
\n"; echo "
\n"; echo "
\n"; echo $this->_generate_breadcrumb(); echo "
\n"; echo "
\n"; if(isset($admin_session['data']['flash_message']) && $admin_session['data']['flash_message']) { $message = $admin_session['data']['flash_message']['message']; $type = $admin_session['data']['flash_message']['type']; echo "
\n"; echo "{$message}\n"; echo "
\n"; update_admin_session('flash_message', ''); } if($this->show_post_verify_error == true) { $this->output_error($lang->invalid_post_verify_key); } } /** * Output the page footer. */ function output_footer($quit=true) { global $mybb, $maintimer, $db, $lang, $plugins; $plugins->run_hooks("admin_page_output_footer"); $memory_usage = get_friendly_size(get_memory_usage()); $totaltime = $maintimer->stop(); $querycount = $db->query_count; echo "
\n"; echo "
\n"; echo "
"; echo "
"; echo "
\n"; echo "

".$lang->sprintf($lang->generated_in, $totaltime, $querycount, $memory_usage)."

Powered By MyBB. © ".COPY_YEAR." MyBB Group. All Rights Reserved.

\n"; if($mybb->debug_mode) { echo $db->explain; } echo "
\n"; echo "\n"; echo "\n"; if($quit != false) { exit; } } /** * Add an item to the page breadcrumb trail. * * @param string The name of the item to add. * @param string The URL to the item we're adding (if there is one) */ function add_breadcrumb_item($name, $url="") { $this->_breadcrumb_trail[] = array("name" => $name, "url" => $url); } /** * Generate a breadcrumb trail. */ function _generate_breadcrumb() { if(!is_array($this->_breadcrumb_trail)) { return false; } $trail = ""; foreach($this->_breadcrumb_trail as $key => $crumb) { if(isset($this->_breadcrumb_trail[$key+1])) { $trail .= "".$crumb['name'].""; if(isset($this->_breadcrumb_trail[$key+2])) { $trail .= " » "; } } else { $trail .= "".$crumb['name'].""; } } return $trail; } /** * Output a success message. * * @param string The message to output. */ function output_success($message) { echo "
{$message}
\n"; } /** * Output an alert/warning message. * * @param string The message to output. * @param string The ID of the alert/warning (optional) */ function output_alert($message, $id="") { if($id) { $id = " id=\"{$id}\""; } echo "
{$message}
\n"; } /** * Output an inline message. * * @param string The message to output. */ function output_inline_message($message) { echo "
{$message}
\n"; } /** * Output a single error message. * * @param string The message to output. */ function output_error($error) { echo "
\n"; echo "{$error}\n"; echo "
\n"; } /** * Output one or more inline error messages. * * @param array Array of error messages to output. */ function output_inline_error($errors) { global $lang; if(!is_array($errors)) { $errors = array($errors); } echo "
\n"; echo "

{$lang->encountered_errors}

\n"; echo "\n"; echo "
\n"; } /** * Generate the login page. * * @param string The any message to output on the page if there is one. * @param string The class name of the message (defaults to success) */ function show_login($message="", $class="success") { global $lang, $cp_style, $mybb; $copy_year = COPY_YEAR; $login_container_width = ""; $login_label_width = ""; // If the language string for "Username" is too cramped then use this to define how much larger you want the gap to be (in px) if(isset($lang->login_field_width)) { $login_label_width = " style=\"width: ".(intval($lang->login_field_width)+100)."px;\""; $login_container_width = " style=\"width: ".(410+(intval($lang->login_field_width)))."px;\""; } print << {$lang->mybb_admin_login}

{$lang->please_login}

EOF; if($message) { echo "

{$message}

"; } // Make query string nice and pretty so that user can go to his/her preferred destination $query_string = ''; if($_SERVER['QUERY_STRING']) { $query_string = '?'.preg_replace('#adminsid=(.{32})#i', '', $_SERVER['QUERY_STRING']); $query_string = preg_replace('#my_post_key=(.{32})#i', '', $query_string); $query_string = str_replace('action=logout', '', $query_string); $query_string = preg_replace('#&+#', '&', $query_string); $query_string = str_replace('?&', '?', $query_string); $query_string = htmlspecialchars_uni($query_string); } switch($mybb->settings['username_method']) { case 0: $lang_username = $lang->username; break; case 1: $lang_username = $lang->username1; break; case 2: $lang_username = $lang->username2; break; default: $lang_username = $lang->username; break; } // TODO: Better Fix? $_SERVER['PHP_SELF'] = htmlspecialchars_uni($_SERVER['PHP_SELF']); print <<{$lang->enter_username_and_password}

{$lang->lost_password}

EOF; exit; } /** * Generate the lockout page * */ function show_lockedout() { global $lang, $mybb, $cp_style; $copy_year = COPY_YEAR; $allowed_attempts = intval($mybb->settings['maxloginattempts']); $lockedout_message = $lang->sprintf($lang->error_mybb_admin_lockedout_message, $allowed_attempts); print << {$lang->mybb_admin_cp} - {$lang->error_mybb_admin_lockedout}

{$lang->error_mybb_admin_lockedout}

{$lockedout_message}
EOF; exit; } /** * Generate the lockout unlock page * * @param string The any message to output on the page if there is one. * @param string The class name of the message (defaults to success) */ function show_lockout_unlock($message="", $class="success") { global $lang, $mybb, $cp_style; $copy_year = COPY_YEAR; switch($mybb->settings['username_method']) { case 0: $lang_username = $lang->username; break; case 1: $lang_username = $lang->username1; break; case 2: $lang_username = $lang->username2; break; default: $lang_username = $lang->username; break; } if($message) { $message = "

{$message}

"; } print << {$lang->mybb_admin_cp} - {$lang->lockout_unlock}

{$lang->lockout_unlock}

{$message}

{$lang->enter_username_and_token}

{$lang->lost_password}

EOF; exit; } /** * Add an item to the primary navigation menu. * * @param string The title of the menu item. * @param string The ID of the menu item. This should correspond with the module the menu will run. * @param string The link to follow when the menu item is clicked. * @param int The display order of the menu item. Lower display order means closer to start of the menu. * @param array Array of sub menu items if there are any. */ function add_menu_item($title, $id, $link, $order=10, $submenu=array()) { $this->_menu[$order][] = array( "title" => $title, "id" => $id, "link" => $link, "submenu" => $submenu ); } /** * Build the actual navigation menu. */ function _build_menu() { if(!is_array($this->_menu)) { return false; } $build_menu = "
\n
    \n"; ksort($this->_menu); foreach($this->_menu as $items) { foreach($items as $menu_item) { $menu_item['link'] = htmlspecialchars_uni($menu_item['link']); if($menu_item['id'] == $this->active_module) { $sub_menu = $menu_item['submenu']; $sub_menu_title = $menu_item['title']; $build_menu .= "
  • {$menu_item['title']}
  • \n"; } else { $build_menu .= "
  • {$menu_item['title']}
  • \n"; } } } $build_menu .= "
\n
"; if($sub_menu) { $this->_build_submenu($sub_menu_title, $sub_menu); } return $build_menu; } /** * Build a navigation sub menu if we have one. * * @param string A title for the sub menu. * @param array Array of items for the sub menu. */ function _build_submenu($title, $items) { if(is_array($items)) { $sidebar = new sideBarItem($title); $sidebar->add_menu_items($items, $this->active_action); $this->submenu .= $sidebar->get_markup(); } } /** * Switch between two different alternating background colours. */ function get_alt_bg() { static $alt_bg; if($alt_bg == "alt1") { $alt_bg = "alt2"; return "alt1"; } else { $alt_bg = "alt1"; return $alt_bg; } } /** * Output a Javascript based tab control on to the page. * * @param array Array of tabs in name => title format. Name should correspond to the name of a DIV containing the tab content. * @param boolean Whether or not to run the event onload or instantly * @param string The ID to use for the tabs for if you run multiple instances of the tabbing control in one html page */ function output_tab_control($tabs=array(), $observe_onload=true, $id="tabs") { global $plugins; $tabs = $plugins->run_hooks("admin_page_output_tab_control_start", $tabs); echo "\n"; echo "
    \n"; $tab_count = count($tabs); $done = 1; foreach($tabs as $anchor => $title) { $class = ""; if($tab_count == $done) { $class .= " last"; } if($done == 1) { $class .= " first"; } ++$done; echo "
  • {$title}
  • \n"; } echo "
\n"; $plugins->run_hooks("admin_page_output_tab_control_end", $tabs); } /** * Output a series of primary navigation tabs for swithcing between items within a particular module/action. * * @param array Nested array of tabs containing possible keys of align, link_target, link, title. * @param string The name of the active tab. Corresponds with the key of each tab item. */ function output_nav_tabs($tabs=array(), $active='') { global $plugins; $tabs = $plugins->run_hooks("admin_page_output_nav_tabs_start", $tabs); echo "
"; echo "\t
    \n"; foreach($tabs as $id => $tab) { $class = ''; if($id == $active) { $class = ' active'; } if(isset($tab['align']) == "right") { $class .= " right"; } $target = ''; if(isset($tab['link_target'])) { $target = " target=\"{$tab['link_target']}\""; } if(!isset($tab['link'])) { $tab['link'] = ''; } echo "\t\t
  • {$tab['title']}
  • \n"; $target = ''; } echo "\t
\n"; if($tabs[$active]['description']) { echo "\t
{$tabs[$active]['description']}
\n"; } echo "
"; $arguments = array('tabs' => $tabs, 'active' => $active); $plugins->run_hooks("admin_page_output_nav_tabs_end", $arguments); } /** * Output a page asking if a user wishes to continue performing a specific action. * * @param string The URL to be forwarded to. * @param string The confirmation message to output. * @param string The title to use in the output header */ function output_confirm_action($url, $message="", $title="") { global $lang; if(!$message) { $message = $lang->confirm_action; } $this->output_header($title); $form = new Form($url, 'post'); echo "
\n"; echo "

{$message}

\n"; echo "
\n"; echo "

\n"; echo $form->generate_submit_button($lang->yes, array('class' => 'button_yes')); echo $form->generate_submit_button($lang->no, array("name" => "no", 'class' => 'button_no')); echo "

\n"; echo "
\n"; $form->end(); $this->output_footer(); } /** * Build a clickable MyCode editor for the Admin CP. * * @param string The ID of the textarea to bind the editor to. * @param string The language string for the editor. * @return string The build MyCode editor Javascript. */ function build_codebuttons_editor($bind, $editor_language) { global $lang; if($bind == "signature") { $tabs_js = "Control.Tabs.observe('afterChange', function(instance, new_tab) { if(new_tab.id == \"tab_signature\") { initEditor() }});"; } return "\n". ""; } } /** * A class for generating side bar blocks. */ class DefaultSidebarItem { /** * @var The title of the side bar block. */ private $_title; /** * @var string The contents of the side bar block. */ private $_contents; /** * Constructor. Set the title of the side bar block. * * @param string The title of the side bar block. */ function __construct($title="") { $this->_title = $title; } /** * Add menus item to the side bar block. * * @param array Array of menu items to add. Each menu item should be a nested array of id, link and title. * @param string The ID of the active menu item if there is one. */ function add_menu_items($items, $active) { global $run_module; $this->_contents = "
    "; foreach($items as $item) { if(!check_admin_permissions(array("module" => $run_module, "action" => $item['id']), false)) { continue; } $class = ""; if($item['id'] == $active) { $class = "active"; } $item['link'] = htmlspecialchars_uni($item['link']); $this->_contents .= "
  • {$item['title']}
  • \n"; } $this->_contents .= "
"; } /** * Sets custom html to the contents variable * * @param string The custom html to set */ function set_contents($html) { $this->_contents = $html; } /** * Fetch the HTML markup for the side bar box. */ function get_markup() { $markup = "
\n"; $markup .= "
{$this->_title}
\n"; if($this->_contents) { $markup .= $this->_contents; } $markup .= "
\n"; return $markup; } } /** * Generate a Javascript based popup menu. */ class DefaultPopupMenu { /** * @var string The title of the popup menu to be shown on the button. */ private $_title; /** * @var string The ID of this popup menu. Must be unique. */ private $_id; /** * @var string Built HTML for the items in the popup menu. */ private $_items; /** * Initialise a new popup menu. * * @var string The ID of the popup menu. * @var string The title of the popup menu. */ function __construct($id, $title='') { $this->_id = $id; $this->_title = $title; } /** * Add an item to the popup menu. * * @param string The title of this item. * @param string The page this item should link to. * @param string The onclick event handler if we have one. */ function add_item($text, $link, $onclick='') { if($onclick) { $onclick = " onclick=\"{$onclick}\""; } $this->_items .= "\n"; } /** * Fetch the contents of the popup menu. * * @return string The popup menu. */ function fetch() { $popup = "
_id}_popup\">\n{$this->_items}
\n"; if($this->_title) { $popup .= "_id}\" class=\"popup_button\">{$this->_title}\n"; } $popup .= "\n"; return $popup; } /** * Outputs a popup menu to the browser. */ function output() { echo $this->fetch(); } } ?>