Esempio n. 1
0
 /**
  * Log a message to the logger
  *
  * @param string $message The message to log
  * @param string $category[optional] The message category (default "main")
  * @param integer $level[optional] The loglevel
  */
 public static function log($message, $category = 'main', $level = 1)
 {
     if (!self::$_logging_enabled) {
         return false;
     }
     if (self::$_loglevel > $level) {
         return false;
     }
     if (self::$_cli_log_to_screen_in_debug_mode && TBGContext::isCLI() && TBGContext::isDebugMode() && class_exists('TBGCliCommand')) {
         TBGCliCommand::cli_echo(mb_strtoupper(self::getLevelName($level)), 'white', 'bold');
         TBGCliCommand::cli_echo(" [{$category}] ", 'green', 'bold');
         TBGCliCommand::cli_echo("{$message}\n");
     }
     if (self::$_logonajaxcalls || TBGContext::getRequest()->isAjaxCall()) {
         if (self::$_logfile !== null) {
             file_put_contents(self::$_logfile, mb_strtoupper(self::getLevelName($level)) . " [{$category}] {$message}\n", FILE_APPEND);
         }
         $time_msg = TBGContext::isDebugMode() ? ($load_time = TBGContext::getLoadtime()) >= 1 ? round($load_time, 2) . ' seconds' : round($load_time * 1000, 3) . ' ms' : '';
         self::$_entries[] = array('category' => $category, 'time' => $time_msg, 'message' => $message, 'level' => $level);
         self::$_categorized_entries[$category][] = array('time' => $time_msg, 'message' => $message, 'level' => $level);
     }
 }
Esempio n. 2
0
}
?>
										</div>
									</div>
									<?php 
TBGEvent::createNew('core', 'after_header_userinfo')->trigger();
?>
								</div>
							</td>
						</tr>
					</table>
					<?php 
require THEBUGGENIE_CORE_PATH . 'templates/submenu.inc.php';
?>
					<?php 
if (!TBGContext::isDebugMode()) {
    ?>
						<div class="rounded_box iceblue borderless infobox" style="margin: 5px; display: none;" id="firebug_warning">
							<div style="padding: 5px;">
								<?php 
    echo image_tag('icon_info_big.png', array('style' => 'float: left; margin: 5px 5px 0 0;'));
    ?>
								<div>
									<div class="header"><?php 
    echo __("Cool - you're using Firebug, too - so do we!");
    ?>
</div>
									<div class="content">
										<?php 
    echo __("As you probably know, Firebug has awesome monitoring and profiling features, which in turn means The Bug Genie will probably be a bit slow if you have Firebug enabled with it.");
    ?>
Esempio n. 3
0
        ?>
]</strong> <span style="color: #555; font-size: 10px; font-style: italic;"><?php 
        echo $entry['time'];
        ?>
</span>&nbsp;&nbsp;<?php 
        echo $entry['message'];
        ?>
</div>
				<?php 
    }
    ?>
			<?php 
}
?>
			<?php 
if (class_exists("\\b2db\\Core") && TBGContext::isDebugMode() && (!isset($exception) || !$exception instanceof TBGComposerException)) {
    ?>
				<h3>SQL queries:</h3>
					<ol>
					<?php 
    foreach (\b2db\Core::getSQLHits() as $details) {
        ?>
						<li>
							<span class="faded_out dark small"><b>[<?php 
        echo $details['time'] >= 1 ? round($details['time'], 2) . ' seconds' : round($details['time'] * 1000, 1) . 'ms';
        ?>
]</b></span>
							from <b><?php 
        echo $details['filename'];
        ?>
, line <?php 
Esempio n. 4
0
<br>
		<a href="http://www.opensource.org/licenses/mozilla1.1.php"><?php 
echo __('Read the license (MPL 1.1 only)');
?>
</a>
	<?php 
if ($tbg_user->canAccessConfigurationPage()) {
    ?>
        | <b><?php 
    echo link_tag(make_url('configure'), __('Configure %thebuggenie_name', array('%thebuggenie_name' => TBGSettings::getTBGname())));
    ?>
</b>
	<?php 
}
?>
	<?php 
if (TBGContext::isDebugMode() && TBGLogging::isEnabled()) {
    ?>
		<div id="tbg___DEBUGINFO___" style="position: fixed; bottom: 0; left: 0; z-index: 100; display: none; width: 100%;">
		</div>
		<?php 
    echo image_tag('spinning_16.gif', array('style' => 'position: fixed; bottom: 5px; right: 23px;', 'id' => 'tbg___DEBUGINFO___indicator'));
    ?>
		<?php 
    echo image_tag('debug_show.png', array('style' => 'position: fixed; bottom: 5px; right: 3px; cursor: pointer;', 'onclick' => "\$('tbg___DEBUGINFO___').toggle();", 'title' => 'Show debug bar'));
    ?>
	<?php 
}
?>
</footer>
Esempio n. 5
0
 public function runGetBackdropPartial(TBGRequest $request)
 {
     if (!$request->isAjaxCall()) {
         return $this->return404($this->getI18n()->__('You need to enable javascript for The Bug Genie to work properly'));
     }
     try {
         $template_name = null;
         if ($request->hasParameter('issue_id')) {
             $issue = TBGContext::factory()->TBGIssue($request['issue_id']);
             $options = array('issue' => $issue);
         } else {
             $options = array();
         }
         switch ($request['key']) {
             case 'usercard':
                 $template_name = 'main/usercard';
                 if ($user_id = $request['user_id']) {
                     $user = TBGContext::factory()->TBGUser($user_id);
                     $options['user'] = $user;
                 }
                 break;
             case 'login':
                 $template_name = 'main/loginpopup';
                 $options = $request->getParameters();
                 $options['content'] = $this->getComponentHTML('login', array('section' => $request->getParameter('section', 'login')));
                 $options['mandatory'] = false;
                 break;
             case 'uploader':
                 $template_name = 'main/uploader';
                 $options = $request->getParameters();
                 $options['uploader'] = $request['uploader'] == 'dynamic' ? 'dynamic' : 'standard';
                 break;
             case 'openid':
                 $template_name = 'main/openid';
                 break;
             case 'notifications':
                 $template_name = 'main/notifications';
                 break;
             case 'workflow_transition':
                 $transition = TBGContext::factory()->TBGWorkflowTransition($request['transition_id']);
                 $template_name = $transition->getTemplate();
                 $options['transition'] = $transition;
                 $options['issues'] = array();
                 foreach ($request['issue_ids'] as $issue_id) {
                     $options['issues'][$issue_id] = new TBGIssue($issue_id);
                 }
                 $options['project'] = $this->selected_project;
                 break;
             case 'reportissue':
                 $template_name = 'main/reportissuecontainer';
                 $this->_loadSelectedProjectAndIssueTypeFromRequestForReportIssueAction($request);
                 $options['selected_project'] = $this->selected_project;
                 $options['selected_issuetype'] = $this->selected_issuetype;
                 if ($request->hasParameter('milestone_id')) {
                     try {
                         $options['selected_milestone'] = TBGContext::factory()->TBGMilestone((int) $request['milestone_id']);
                     } catch (Exception $e) {
                     }
                 }
                 if ($request->hasParameter('parent_issue_id')) {
                     try {
                         $options['parent_issue'] = TBGContext::factory()->TBGIssue((int) $request['parent_issue_id']);
                     } catch (Exception $e) {
                     }
                 }
                 if ($request->hasParameter('build_id')) {
                     try {
                         $options['selected_build'] = TBGContext::factory()->TBGBuild((int) $request['build_id']);
                     } catch (Exception $e) {
                     }
                 }
                 $options['issuetypes'] = $this->issuetypes;
                 $options['errors'] = array();
                 break;
             case 'move_issue':
                 $template_name = 'main/moveissue';
                 $options['multi'] = (bool) $request->getParameter('multi', false);
                 break;
             case 'issue_permissions':
                 $template_name = 'main/issuepermissions';
                 break;
             case 'issue_subscribers':
                 $template_name = 'main/issuesubscribers';
                 break;
             case 'issue_spenttimes':
                 $template_name = 'main/issuespenttimes';
                 $options['initial_view'] = $request->getParameter('initial_view', 'list');
                 break;
             case 'issue_spenttime':
                 $template_name = 'main/issuespenttime';
                 $options['entry_id'] = $request->getParameter('entry_id');
                 break;
             case 'relate_issue':
                 $template_name = 'main/relateissue';
                 break;
             case 'milestone':
                 $template_name = 'project/milestone';
                 $options['project'] = TBGContext::factory()->TBGProject($request['project_id']);
                 if ($request->hasParameter('milestone_id')) {
                     $options['milestone'] = TBGContext::factory()->TBGMilestone($request['milestone_id']);
                 }
                 break;
             case 'project_build':
                 $template_name = 'project/build';
                 $options['project'] = TBGContext::factory()->TBGProject($request['project_id']);
                 if ($request->hasParameter('build_id')) {
                     $options['build'] = TBGContext::factory()->TBGBuild($request['build_id']);
                 }
                 break;
             case 'project_icons':
                 $template_name = 'project/projecticons';
                 $options['project'] = TBGContext::factory()->TBGProject($request['project_id']);
                 break;
             case 'project_workflow':
                 $template_name = 'project/projectworkflow';
                 $options['project'] = TBGContext::factory()->TBGProject($request['project_id']);
                 break;
             case 'permissions':
                 $options['key'] = $request['permission_key'];
                 if ($details = TBGContext::getPermissionDetails($options['key'])) {
                     $template_name = 'configuration/permissionspopup';
                     $options['mode'] = $request['mode'];
                     $options['module'] = $request['target_module'];
                     $options['target_id'] = $request['target_id'];
                     $options['item_name'] = $details['description'];
                     $options['access_level'] = $request['access_level'];
                 }
                 break;
             case 'issuefield_permissions':
                 $options['item_key'] = $request['item_key'];
                 if ($details = TBGContext::getPermissionDetails($options['item_key'])) {
                     $template_name = 'configuration/issuefieldpermissions';
                     $options['item_name'] = $details['description'];
                     $options['item_id'] = $request['item_id'];
                     $options['access_level'] = $request['access_level'];
                 } else {
                     die('fu');
                 }
                 break;
             case 'site_icons':
                 $template_name = 'configuration/siteicons';
                 break;
             case 'project_config':
                 $template_name = 'project/projectconfig_container';
                 $project = TBGContext::factory()->TBGProject($request['project_id']);
                 $options['project'] = $project;
                 $options['section'] = $request->getParameter('section', 'info');
                 if ($request->hasParameter('edition_id')) {
                     $edition = TBGContext::factory()->TBGEdition($request['edition_id']);
                     $options['edition'] = $edition;
                     $options['selected_section'] = $request->getParameter('section', 'general');
                 }
                 break;
             case 'issue_add_item':
                 $issue = TBGContext::factory()->TBGIssue($request['issue_id']);
                 $template_name = 'main/issueadditem';
                 break;
             case 'client_users':
                 $options['client'] = TBGContext::factory()->TBGClient($request['client_id']);
                 $template_name = 'main/clientusers';
                 break;
             case 'dashboard_config':
                 $template_name = 'main/dashboardconfig';
                 $options['tid'] = $request['tid'];
                 $options['target_type'] = $request['target_type'];
                 $options['previous_route'] = $request['previous_route'];
                 $options['mandatory'] = true;
                 break;
             case 'archived_projects':
                 $template_name = 'main/archivedprojects';
                 $options['mandatory'] = true;
                 break;
             case 'team_archived_projects':
                 $template_name = 'main/archivedprojects';
                 $options['target'] = 'team';
                 $options['id'] = $request['tid'];
                 $options['mandatory'] = true;
                 break;
             case 'client_archived_projects':
                 $template_name = 'main/archivedprojects';
                 $options['target'] = 'client';
                 $options['id'] = $request['cid'];
                 $options['mandatory'] = true;
                 break;
             case 'project_archived_projects':
                 $template_name = 'main/archivedprojects';
                 $options['target'] = 'project';
                 $options['id'] = $request['pid'];
                 $options['mandatory'] = true;
                 break;
             case 'bulk_workflow':
                 $template_name = 'search/bulkworkflow';
                 $options['issue_ids'] = $request['issue_ids'];
                 break;
             case 'confirm_username':
                 $template_name = 'main/confirmusername';
                 $options['username'] = $request['username'];
                 break;
             case 'userscopes':
                 if (!TBGContext::getScope()->isDefault()) {
                     throw new Exception($this->getI18n()->__('This is not allowed outside the default scope'));
                 }
                 $template_name = 'configuration/userscopes';
                 $options['user'] = new TBGUser((int) $request['user_id']);
                 break;
             default:
                 $event = new TBGEvent('core', 'get_backdrop_partial', $request['key']);
                 $event->triggerUntilProcessed();
                 $options = $event->getReturnList();
                 $template_name = $event->getReturnValue();
         }
         if ($template_name !== null) {
             return $this->renderJSON(array('content' => $this->getComponentHTML($template_name, $options)));
         }
     } catch (Exception $e) {
         $this->getResponse()->cleanBuffer();
         $this->getResponse()->setHttpStatus(400);
         return $this->renderJSON(array('error' => TBGContext::getI18n()->__('An error occured: %error_message', array('%error_message' => $e->getMessage()))));
     }
     $this->getResponse()->cleanBuffer();
     $this->getResponse()->setHttpStatus(400);
     $error = TBGContext::isDebugMode() ? TBGContext::getI18n()->__('Invalid template or parameter') : $this->getI18n()->__('Could not show the requested popup');
     return $this->renderJSON(array('error' => $error));
 }
/**
 * Displays a nicely formatted exception message
 *  
 * @param string $title
 * @param Exception $exception
 */
function tbg_exception($title, $exception)
{
    if (TBGContext::getRequest() instanceof TBGRequest && TBGContext::getRequest()->isAjaxCall()) {
        TBGContext::getResponse()->ajaxResponseText(404, $title);
    }
    $ob_status = ob_get_status();
    if (!empty($ob_status) && $ob_status['status'] != PHP_OUTPUT_HANDLER_END) {
        ob_end_clean();
    }
    if (TBGContext::isCLI()) {
        $trace_elements = null;
        if ($exception instanceof Exception) {
            if ($exception instanceof TBGActionNotFoundException) {
                TBGCliCommand::cli_echo("Could not find the specified action\n", 'white', 'bold');
            } elseif ($exception instanceof TBGTemplateNotFoundException) {
                TBGCliCommand::cli_echo("Could not find the template file for the specified action\n", 'white', 'bold');
            } elseif ($exception instanceof B2DBException) {
                TBGCliCommand::cli_echo("An exception was thrown in the B2DB framework\n", 'white', 'bold');
            } else {
                TBGCliCommand::cli_echo("An unhandled exception occurred:\n", 'white', 'bold');
            }
            echo TBGCliCommand::cli_echo($exception->getMessage(), 'red', 'bold') . "\n";
            echo "\n";
            TBGCliCommand::cli_echo('Stack trace') . ":\n";
            $trace_elements = $exception->getTrace();
        } else {
            if ($exception['code'] == 8) {
                TBGCliCommand::cli_echo('The following notice has stopped further execution:', 'white', 'bold');
            } else {
                TBGCliCommand::cli_echo('The following error occured:', 'white', 'bold');
            }
            echo "\n";
            echo "\n";
            TBGCliCommand::cli_echo($title, 'red', 'bold');
            echo "\n";
            TBGCliCommand::cli_echo("occured in\n");
            TBGCliCommand::cli_echo($exception['file'] . ', line ' . $exception['line'], 'blue', 'bold');
            echo "\n";
            echo "\n";
            TBGCliCommand::cli_echo("Backtrace:\n", 'white', 'bold');
            $trace_elements = debug_backtrace();
        }
        foreach ($trace_elements as $trace_element) {
            if (array_key_exists('class', $trace_element)) {
                TBGCliCommand::cli_echo($trace_element['class'] . $trace_element['type'] . $trace_element['function'] . '()');
            } elseif (array_key_exists('function', $trace_element)) {
                if (in_array($trace_element['function'], array('tbg_error_handler', 'tbg_exception'))) {
                    continue;
                }
                TBGCliCommand::cli_echo($trace_element['function'] . '()');
            } else {
                TBGCliCommand::cli_echo('unknown function');
            }
            echo "\n";
            if (array_key_exists('file', $trace_element)) {
                TBGCliCommand::cli_echo($trace_element['file'] . ', line ' . $trace_element['line'], 'blue', 'bold');
            } else {
                TBGCliCommand::cli_echo('unknown file', 'red', 'bold');
            }
            echo "\n";
        }
        if (class_exists('B2DB')) {
            echo "\n";
            TBGCliCommand::cli_echo("SQL queries:\n", 'white', 'bold');
            try {
                $cc = 1;
                foreach (B2DB::getSQLHits() as $details) {
                    TBGCliCommand::cli_echo("(" . $cc++ . ") [");
                    $str = $details['time'] >= 1 ? round($details['time'], 2) . ' seconds' : round($details['time'] * 1000, 1) . 'ms';
                    TBGCliCommand::cli_echo($str);
                    TBGCliCommand::cli_echo("] from ");
                    TBGCliCommand::cli_echo($details['filename'], 'blue');
                    TBGCliCommand::cli_echo(", line ");
                    TBGCliCommand::cli_echo($details['line'], 'white', 'bold');
                    TBGCliCommand::cli_echo(":\n");
                    TBGCliCommand::cli_echo("{$details['sql']}\n");
                }
                echo "\n";
            } catch (Exception $e) {
                TBGCliCommand::cli_echo("Could not generate query list (there may be no database connection)", "red", "bold");
            }
        }
        echo "\n";
        die;
    }
    echo "\n\t\t<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n\t\t<html>\n\t\t<head>\n\t\t<style>\n\t\tbody { background-color: #DFDFDF; font-family: \"Droid Sans\", \"Trebuchet MS\", \"Liberation Sans\", \"Nimbus Sans L\", \"Luxi Sans\", Verdana, sans-serif; font-size: 13px; }\n\t\th1 { margin: 5px 0 0 0; font-size: 19px; }\n\t\th2 { margin: 0 0 15px 0; font-size: 16px; }\n\t\th3 { margin: 15px 0 0 0; font-size: 14px; }\n\t\tinput[type=\"text\"], input[type=\"password\"] { float: left; margin-right: 15px; }\n\t\tlabel { float: left; font-weight: bold; margin-right: 5px; display: block; width: 150px; }\n\t\tlabel span { font-weight: normal; color: #888; }\n\t\t.rounded_box {background: transparent; margin:0px;}\n\t\t.rounded_box h4 { margin-bottom: 0px; margin-top: 7px; font-size: 14px; }\n\t\t.xtop, .xbottom {display:block; background:transparent; font-size:1px;}\n\t\t.xb1, .xb2, .xb3, .xb4 {display:block; overflow:hidden;}\n\t\t.xb1, .xb2, .xb3 {height:1px;}\n\t\t.xb2, .xb3, .xb4 {background:#F9F9F9; border-left:1px solid #CCC; border-right:1px solid #CCC;}\n\t\t.xb1 {margin:0 5px; background:#CCC;}\n\t\t.xb2 {margin:0 3px; border-width:0 2px;}\n\t\t.xb3 {margin:0 2px;}\n\t\t.xb4 {height:2px; margin:0 1px;}\n\t\t.xboxcontent {display:block; background:#F9F9F9; border:0 solid #CCC; border-width:0 1px; padding: 0 5px 0 5px;}\n\t\t.xboxcontent table td.description { padding: 3px 3px 3px 0;}\n\t\t.white .xb2, .white .xb3, .white .xb4 { background: #FFF; border-color: #CCC; }\n\t\t.white .xb1 { background: #CCC; }\n\t\t.white .xboxcontent { background: #FFF; border-color: #CCC; }\n\t\tpre { overflow: scroll; padding: 5px; }\n\t\t</style>\n\t\t<!--[if IE]>\n\t\t<style>\n\t\tbody { background-color: #DFDFDF; font-family: sans-serif; font-size: 13px; }\n\t\t</style>\n\t\t<![endif]-->\n\t\t</head>\n\t\t<body>\n\t\t<div class=\"rounded_box white\" style=\"margin: 30px auto 0 auto; width: 700px;\">\n\t\t\t<b class=\"xtop\"><b class=\"xb1\"></b><b class=\"xb2\"></b><b class=\"xb3\"></b><b class=\"xb4\"></b></b>\n\t\t\t<div class=\"xboxcontent\" style=\"vertical-align: middle; padding: 10px 10px 10px 15px;\">\n\t\t\t<img style=\"float: left; margin-right: 10px;\" src=\"" . TBGContext::getTBGPath() . "header.png\"><h1>An error occured in The Bug Genie</h1>";
    echo "<h2>{$title}</h2>";
    $report_description = null;
    if ($exception instanceof Exception) {
        if ($exception instanceof TBGActionNotFoundException) {
            echo "<h3>Could not find the specified action</h3>";
            $report_description = "Could not find the specified action";
        } elseif ($exception instanceof TBGTemplateNotFoundException) {
            echo "<h3>Could not find the template file for the specified action</h3>";
            $report_description = "Could not find the template file for the specified action";
        } elseif ($exception instanceof B2DBException) {
            echo "<h3>An exception was thrown in the B2DB framework</h3>";
            $report_description = "An exception was thrown in the B2DB framework";
        } else {
            echo "<h3>An unhandled exception occurred:</h3>";
            $report_description = "An unhandled exception occurred";
        }
        $report_description .= "\n" . $exception->getMessage();
        echo "<i>" . $exception->getMessage() . "</i><br>";
        if (class_exists("TBGContext") && TBGContext::isDebugMode()) {
            echo "<h3>Stack trace:</h3>\n\t\t\t\t\t<ul>";
            //echo '<pre>';var_dump($exception->getTrace());die();
            foreach ($exception->getTrace() as $trace_element) {
                echo '<li>';
                if (array_key_exists('class', $trace_element)) {
                    echo '<strong>' . $trace_element['class'] . $trace_element['type'] . $trace_element['function'] . '()</strong><br>';
                } elseif (array_key_exists('function', $trace_element)) {
                    if (!in_array($trace_element['function'], array('tbg_error_handler', 'tbg_exception'))) {
                        echo '<strong>' . $trace_element['function'] . '()</strong><br>';
                    }
                } else {
                    echo '<strong>unknown function</strong><br>';
                }
                if (array_key_exists('file', $trace_element)) {
                    echo '<span style="color: #55F;">' . $trace_element['file'] . '</span>, line ' . $trace_element['line'];
                } else {
                    echo '<span style="color: #C95;">unknown file</span>';
                }
                echo '</li>';
            }
            echo "</ul>";
        }
    } else {
        echo '<h3>';
        if ($exception['code'] == 8) {
            echo 'The following notice has stopped further execution:';
            $report_description = 'The following notice has stopped further execution: ';
        } else {
            echo 'The following error occured:';
            $report_description = 'The following error occured: ';
        }
        echo '</h3>';
        $report_description .= $title;
        echo "{$title}</i><br>\n\t\t\t\t<h3>Error information:</h3>\n\t\t\t\t<ul>\n\t\t\t\t\t<li>";
        echo '<span style="color: #55F;">' . $exception['file'] . '</span>, line ' . $exception['line'];
        echo "</li>\n\t\t\t\t</ul>";
        if (class_exists("TBGContext") && TBGContext::isDebugMode()) {
            echo "<h3>Backtrace:</h3>\n\t\t\t\t\t<ol>";
            foreach (debug_backtrace() as $trace_element) {
                echo '<li>';
                if (array_key_exists('class', $trace_element)) {
                    echo '<strong>' . $trace_element['class'] . $trace_element['type'] . $trace_element['function'] . '()</strong><br>';
                } elseif (array_key_exists('function', $trace_element)) {
                    if (in_array($trace_element['function'], array('tbg_error_handler', 'tbg_exception'))) {
                        continue;
                    }
                    echo '<strong>' . $trace_element['function'] . '()</strong><br>';
                } else {
                    echo '<strong>unknown function</strong><br>';
                }
                if (array_key_exists('file', $trace_element)) {
                    echo '<span style="color: #55F;">' . $trace_element['file'] . '</span>, line ' . $trace_element['line'];
                } else {
                    echo '<span style="color: #C95;">unknown file</span>';
                }
                echo '</li>';
            }
            echo "</ol>";
        }
    }
    if (class_exists("TBGContext") && TBGContext::isDebugMode()) {
        echo "<h3>Log messages:</h3>";
        foreach (TBGLogging::getEntries() as $entry) {
            $color = TBGLogging::getCategoryColor($entry['category']);
            $lname = TBGLogging::getLevelName($entry['level']);
            echo "<div class=\"log_{$entry['category']}\"><strong>{$lname}</strong> <strong style=\"color: #{$color}\">[{$entry['category']}]</strong> <span style=\"color: #555; font-size: 10px; font-style: italic;\">{$entry['time']}</span>&nbsp;&nbsp;{$entry['message']}</div>";
        }
    }
    if (class_exists("B2DB") && TBGContext::isDebugMode()) {
        echo "<h3>SQL queries:</h3>";
        try {
            echo "<ol>";
            foreach (B2DB::getSQLHits() as $details) {
                echo "<li>\n\t\t\t\t\t\t\t<b>\n\t\t\t\t\t\t\t<span class=\"faded_out dark small\">[";
                echo $details['time'] >= 1 ? round($details['time'], 2) . ' seconds' : round($details['time'] * 1000, 1) . 'ms';
                echo "]</span> </b> from <b>{$details['filename']}, line {$details['line']}</b>:<br>\n\t\t\t\t\t\t\t<span style=\"font-size: 12px;\">{$details['sql']}</span>\n\t\t\t\t\t\t</li>";
            }
            echo "</ol>";
        } catch (Exception $e) {
            echo '<span style="color: red;">Could not generate query list (there may be no database connection)</span>';
        }
    }
    echo "</div>\n\t\t\t<b class=\"xbottom\"><b class=\"xb4\"></b><b class=\"xb3\"></b><b class=\"xb2\"></b><b class=\"xb1\"></b></b>\n\t\t</div>";
    if (class_exists("TBGContext") && !TBGContext::isDebugMode()) {
        echo "<div style=\"text-align: left; margin: 35px auto 0 auto; width: 700px; font-size: 13px;\">\n\t\t\t\t<div class=\"rounded_box white\" style=\"margin-bottom: 10px; text-align: right; color: #111;\">\n\t\t\t\t\t<b class=\"xtop\"><b class=\"xb1\"></b><b class=\"xb2\"></b><b class=\"xb3\"></b><b class=\"xb4\"></b></b>\n\t\t\t\t\t<div class=\"xboxcontent\">\n\t\t\t\t\t\t<div style=\"text-align: left;\">\n\t\t\t\t\t\t\t<h2 style=\"padding-top: 10px; margin-bottom: 5px;\">Reporting this issue</h2>\n\t\t\t\t\t\t\tPlease report this error in the bug tracker by pressing the button below. This will file an automatic bug report and open it in a new window.<br><br>\n\t\t\t\t\t\t\tNo login is required - but if you have a username and password entering it below will post the issue with your username, allowing you to follow its progress.\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<br>\n\t\t\t\t\t\t<form action=\"http://thebuggenie.com/thebuggenie/thebuggenie/issues/new/bugreport\" target=\"_new\" method=\"post\">\n\t\t\t\t\t\t\t<label for=\"username\">Username <span>(optional)</span></label>\n\t\t\t\t\t\t\t<input type=\"text\" name=\"tbg3_username\" id=\"username\">\n\t\t\t\t\t\t\t<br style=\"clear: both;\">\n\t\t\t\t\t\t\t<label for=\"password\">Password <span>(optional)</span></label>\n\t\t\t\t\t\t\t<input type=\"password\" name=\"tbg3_password\" id=\"password\">\n\t\t\t\t\t\t\t<br>\n\t\t\t\t\t\t\t<input type=\"hidden\" name=\"category_id\" value=\"34\">\n\t\t\t\t\t\t\t<input type=\"hidden\" name=\"title\" value=\"" . htmlentities($title) . "\">\n\t\t\t\t\t\t\t<input type=\"hidden\" name=\"description\" value=\"" . htmlentities($report_description) . "\n\n\">";
        echo "<input type=\"hidden\" name=\"reproduction_steps\" value=\"PHP_SAPI: " . PHP_SAPI . "<br>PHP_VERSION: " . PHP_VERSION . "\n\n'''Backtrace''':<br>";
        if ($exception instanceof TBGException) {
            foreach ($exception->getTrace() as $trace_element) {
                if (array_key_exists('class', $trace_element)) {
                    echo "'''{$trace_element['class']}{$trace_element['type']}{$trace_element['function']}()'''\n";
                } elseif (array_key_exists('function', $trace_element)) {
                    if (in_array($trace_element['function'], array('tbg_error_handler', 'tbg_exception'))) {
                        continue;
                    }
                    echo "'''{$trace_element['function']}()'''\n";
                } else {
                    echo "'''unknown function'''\n";
                }
                if (array_key_exists('file', $trace_element)) {
                    echo 'in ' . str_replace(THEBUGGENIE_PATH, '<installpath>/', $trace_element['file']) . ', line ' . $trace_element['line'];
                } else {
                    echo 'in an unknown file';
                }
                echo "<br>";
            }
        } else {
            foreach (debug_backtrace() as $trace_element) {
                if (array_key_exists('class', $trace_element)) {
                    echo "'''{$trace_element['class']}{$trace_element['type']}{$trace_element['function']}()'''\n";
                } elseif (array_key_exists('function', $trace_element)) {
                    if (in_array($trace_element['function'], array('tbg_error_handler', 'tbg_exception'))) {
                        continue;
                    }
                    echo "'''{$trace_element['function']}()'''\n";
                } else {
                    echo "'''unknown function'''\n";
                }
                if (array_key_exists('file', $trace_element)) {
                    echo 'in ' . str_replace(THEBUGGENIE_PATH, '<installpath>/', $trace_element['file']) . ', line ' . $trace_element['line'];
                } else {
                    echo 'in an unknown file';
                }
                echo "<br>";
            }
        }
        echo "\n\n\">";
        echo "\t\t\t\t\t\n\t\t\t\t\t\t\t\t<input type=\"submit\" value=\"Submit details for reporting\" style=\"font-size: 16px; font-weight: normal; padding: 5px; margin: 10px 0;\">\n\t\t\t\t\t\t\t\t<div style=\"font-size: 15px; font-weight: bold; padding: 0 5px 10px 0;\">Thank you for helping us improve The Bug Genie!</div>\n\t\t\t\t\t\t\t</form>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<b class=\"xbottom\"><b class=\"xb4\"></b><b class=\"xb3\"></b><b class=\"xb2\"></b><b class=\"xb1\"></b></b>\n\t\t\t\t\t</div>";
        if (TBGLogging::isEnabled()) {
            echo "<h3 style=\"margin-top: 50px;\">Log messages (may contain useful information, but will not be submitted):</h3>";
            foreach (TBGLogging::getEntries() as $entry) {
                $color = TBGLogging::getCategoryColor($entry['category']);
                $lname = TBGLogging::getLevelName($entry['level']);
                echo "<div class=\"log_{$entry['category']}\"><strong>{$lname}</strong> <strong style=\"color: #{$color}\">[{$entry['category']}]</strong> <span style=\"color: #555; font-size: 10px; font-style: italic;\">{$entry['time']}</span>&nbsp;&nbsp;{$entry['message']}</div>";
            }
        }
    }
    echo "\n\t\t\t</div>\n\t\t</body>\n\t\t</html>\n\t\t";
    die;
}
 /**
  * Include a template from a module
  *
  * @param string $template
  * @param array $params
  */
 public static function includeTemplate($template, $params = array())
 {
     $debug = TBGContext::isDebugMode();
     if ($debug) {
         $time = explode(' ', microtime());
         $pretime = $time[1] + $time[0];
     }
     $template_name = self::getFinalTemplateName($template);
     self::presentTemplate($template_name, $params);
     if ($debug) {
         $time = explode(' ', microtime());
         $posttime = $time[1] + $time[0];
         TBGContext::visitPartial($template, $posttime - $pretime);
     }
 }
Esempio n. 8
0
 public function ajaxResponseText($code, $error)
 {
     if (TBGContext::isDebugMode()) {
         return true;
     }
     $this->cleanBuffer();
     $this->setContentType('application/json');
     $this->setHttpStatus($code);
     $this->renderHeaders();
     echo json_encode(array('error' => $error));
     die;
 }