/** * Performs an action. * * @param $action * @param string $module Name of the action module * @param string $method Name of the action method to run * * @return bool * @throws \Exception */ public static function performAction($action, $module, $method) { // Set content variable $content = null; // Set the template to be used when rendering the html (or other) output $templateBasePath = self::isInternalModule($module) ? THEBUGGENIE_INTERNAL_MODULES_PATH : THEBUGGENIE_MODULES_PATH; $templatePath = $templateBasePath . $module . DS . 'templates' . DS; $actionClassName = get_class($action); $actionToRunName = 'run' . ucfirst($method); $preActionToRunName = 'pre' . ucfirst($method); // Set up the response object, responsible for controlling any output self::getResponse()->setPage(self::getRouting()->getCurrentRouteName()); self::getResponse()->setTemplate(mb_strtolower($method) . '.' . self::getRequest()->getRequestedFormat() . '.php'); self::getResponse()->setupResponseContentType(self::getRequest()->getRequestedFormat()); self::setCurrentProject(null); // Run the specified action method set if it exists if (method_exists($action, $actionToRunName)) { // Turning on output buffering ob_start('mb_output_handler'); ob_implicit_flush(0); if (self::getRouting()->isCurrentRouteCSRFenabled()) { // If the csrf check fails, don't proceed if (!self::checkCSRFtoken()) { return true; } } if (self::$_debug_mode) { $time = explode(' ', microtime()); $pretime = $time[1] + $time[0]; } if ($content === null) { Logging::log('Running main pre-execute action'); // Running any overridden preExecute() method defined for that module // or the default empty one provided by \thebuggenie\core\framework\Action if ($pre_action_retval = $action->preExecute(self::getRequest(), $method)) { $content = ob_get_clean(); Logging::log('preexecute method returned something, skipping further action'); if (self::$_debug_mode) { $visited_templatename = "{$actionClassName}::preExecute()"; } } } if ($content === null) { $action_retval = null; if (self::getResponse()->getHttpStatus() == 200) { // Checking for and running action-specific preExecute() function if // it exists if (method_exists($action, $preActionToRunName)) { Logging::log('Running custom pre-execute action'); $action->{$preActionToRunName}(self::getRequest(), $method); } // Running main route action Logging::log('Running route action ' . $actionToRunName . '()'); if (self::$_debug_mode) { $time = explode(' ', microtime()); $action_pretime = $time[1] + $time[0]; } $action_retval = $action->{$actionToRunName}(self::getRequest()); if (self::$_debug_mode) { $time = explode(' ', microtime()); $action_posttime = $time[1] + $time[0]; self::visitPartial("{$actionClassName}::{$actionToRunName}()", $action_posttime - $action_pretime); } } if (self::getResponse()->getHttpStatus() == 200 && $action_retval) { // If the action returns *any* output, we're done, and collect the // output to a variable to be outputted in context later $content = ob_get_clean(); Logging::log('...done'); } elseif (!$action_retval) { // If the action doesn't return any output (which it usually doesn't) // we continue on to rendering the template file for that specific action Logging::log('...done'); Logging::log('Displaying template'); // Check to see if we have a translated version of the template if ($method == 'notFound' && $module == 'main') { $templateName = $templatePath . self::getResponse()->getTemplate(); } elseif (!self::isReadySetup() || ($templateName = self::getI18n()->hasTranslatedTemplate(self::getResponse()->getTemplate())) === false) { // Check to see if any modules provide an alternate template $event = Event::createNew('core', "self::performAction::renderTemplate")->triggerUntilProcessed(array('class' => $actionClassName, 'action' => $actionToRunName)); if ($event->isProcessed()) { $templateName = $event->getReturnValue(); } // Check to see if the template has been changed, and whether it's in a // different module, specified by "module/templatename" if (mb_strpos(self::getResponse()->getTemplate(), '/')) { $newPath = explode('/', self::getResponse()->getTemplate()); $templateName = self::isInternalModule($newPath[0]) ? THEBUGGENIE_INTERNAL_MODULES_PATH : THEBUGGENIE_MODULES_PATH; $templateName .= $newPath[0] . DS . 'templates' . DS . $newPath[1] . '.' . self::getRequest()->getRequestedFormat() . '.php'; } else { $templateName = $templatePath . self::getResponse()->getTemplate(); } } // Check to see if the template exists and throw an exception otherwise if (!isset($templateName) || !file_exists($templateName)) { Logging::log('The template file for the ' . $method . ' action ("' . self::getResponse()->getTemplate() . '") does not exist', 'core', Logging::LEVEL_FATAL); Logging::log('Trying to load file "' . $templateName . '"', 'core', Logging::LEVEL_FATAL); throw new exceptions\TemplateNotFoundException('The template file for the ' . $method . ' action ("' . self::getResponse()->getTemplate() . '") does not exist'); } self::loadLibrary('common'); // Present template for current action ActionComponent::presentTemplate($templateName, $action->getParameterHolder()); $content = ob_get_clean(); Logging::log('...completed'); } } elseif (self::$_debug_mode) { $time = explode(' ', microtime()); $posttime = $time[1] + $time[0]; self::visitPartial($visited_templatename, $posttime - $pretime); } Logging::log('rendering final content'); // Set core layout path self::getResponse()->setLayoutPath(THEBUGGENIE_CORE_PATH . 'templates'); // Trigger event for rendering (so layout path can be overwritten) \thebuggenie\core\framework\Event::createNew('core', '\\thebuggenie\\core\\framework\\Context::renderBegins')->trigger(); if (Settings::isMaintenanceModeEnabled() && !mb_strstr(self::getRouting()->getCurrentRouteName(), 'configure')) { if (!file_exists(self::getResponse()->getLayoutPath() . DS . 'offline.inc.php')) { throw new exceptions\TemplateNotFoundException('Can not find offline mode template'); } ob_start('mb_output_handler'); ob_implicit_flush(0); ActionComponent::presentTemplate(self::getResponse()->getLayoutPath() . DS . 'offline.inc.php'); $content = ob_get_clean(); } // Render output in correct order self::getResponse()->renderHeaders(); if (self::getResponse()->getDecoration() == Response::DECORATE_DEFAULT && !self::getRequest()->isAjaxCall()) { if (!file_exists(self::getResponse()->getLayoutPath() . DS . 'layout.php')) { throw new exceptions\TemplateNotFoundException('Can not find layout template'); } ob_start('mb_output_handler'); ob_implicit_flush(0); $layoutproperties = self::setupLayoutProperties($content); ActionComponent::presentTemplate(self::getResponse()->getLayoutPath() . DS . 'layout.php', $layoutproperties); ob_flush(); } else { // Render header template if any, and store the output in a variable if (!self::getRequest()->isAjaxCall() && self::getResponse()->doDecorateHeader()) { Logging::log('decorating with header'); if (!file_exists(self::getResponse()->getHeaderDecoration())) { throw new exceptions\TemplateNotFoundException('Can not find header decoration: ' . self::getResponse()->getHeaderDecoration()); } ActionComponent::presentTemplate(self::getResponse()->getHeaderDecoration()); } echo $content; // Trigger event for ending the rendering \thebuggenie\core\framework\Event::createNew('core', '\\thebuggenie\\core\\framework\\Context::renderEnds')->trigger(); Logging::log('...done (rendering content)'); // Render footer template if any if (!self::getRequest()->isAjaxCall() && self::getResponse()->doDecorateFooter()) { Logging::log('decorating with footer'); if (!file_exists(self::getResponse()->getFooterDecoration())) { throw new exceptions\TemplateNotFoundException('Can not find footer decoration: ' . self::getResponse()->getFooterDecoration()); } ActionComponent::presentTemplate(self::getResponse()->getFooterDecoration()); } Logging::log('...done'); } Logging::log('done (rendering final content)'); return true; } else { Logging::log("Cannot find the method {$actionToRunName}() in class {$actionClassName}.", 'core', Logging::LEVEL_FATAL); throw new exceptions\ActionNotFoundException("Cannot find the method {$actionToRunName}() in class {$actionClassName}. Make sure the method exists."); } }
public function runStatus(framework\Request $request) { $status_info = array('api_version' => $this->getApiVersion(), 'version' => framework\Settings::getVersion(), 'version_long' => framework\Settings::getVersion(true, true), 'site_name' => framework\Settings::getSiteHeaderName(), 'host' => framework\Settings::getURLhost(), 'urls' => array('site' => framework\Settings::getHeaderLink() == '' ? framework\Context::getWebroot() : framework\Settings::getHeaderLink(), 'logo' => framework\Settings::getHeaderIconURL(), 'icon' => framework\Settings::getFaviconURL()), 'online' => !(bool) framework\Settings::isMaintenanceModeEnabled()); if (framework\Settings::hasMaintenanceMessage()) { $status_info['maintenance_msg'] = framework\Settings::getMaintenanceMessage(); } $this->status_info = $status_info; }
$link = \thebuggenie\core\framework\Settings::getHeaderLink() == '' ? \thebuggenie\core\framework\Context::getWebroot() : \thebuggenie\core\framework\Settings::getHeaderLink(); ?> <a class="logo" href="<?php print $link; ?> "><?php echo image_tag(\thebuggenie\core\framework\Settings::getHeaderIconUrl(), array('style' => 'max-height: 24px;'), \thebuggenie\core\framework\Settings::isUsingCustomHeaderIcon()); ?> </a> <div class="logo_name"><?php echo \thebuggenie\core\framework\Settings::getSiteHeaderName(); ?> </div> </div> <?php if (!\thebuggenie\core\framework\Settings::isMaintenanceModeEnabled()) { ?> <div id="topmenu-container"> <?php if (\thebuggenie\core\framework\Event::createNew('core', 'header_mainmenu_decider')->trigger()->getReturnValue() !== false) { ?> <?php require THEBUGGENIE_CORE_PATH . 'templates/headermainmenu.inc.php'; ?> <?php } ?> <?php require THEBUGGENIE_CORE_PATH . 'templates/headerusermenu.inc.php'; ?> </div>
<option value=0<?php if (!\thebuggenie\core\framework\Settings::isMaintenanceModeEnabled()) { ?> selected<?php } ?> ><?php echo __('No'); ?> </option> </select> <?php } else { ?> <?php echo \thebuggenie\core\framework\Settings::isMaintenanceModeEnabled() ? __('Yes') : __('No'); ?> <?php } ?> <?php echo config_explanation(__('In maintenance mode, access to The Bug Genie will be disabled, except for the Configuration pages. This allows you to perform upgrades and other maintance without interruption. Please remember that if you log out, you will be unable to log back in again whilst maintenace mode is enabled.')); ?> </td> </tr> <tr> <td colspan="2"> <br> <label for="offline_msg"><?php echo __('Maintenance mode message');