Index: typo3/sysext/cms/tslib/index_ts.php =================================================================== --- typo3/sysext/cms/tslib/index_ts.php (revision 4425) +++ typo3/sysext/cms/tslib/index_ts.php (working copy) @@ -77,12 +77,33 @@ // ********************* // Timetracking started // ********************* -require_once(PATH_t3lib.'class.t3lib_timetrack.php'); -$TT = new t3lib_timeTrack; +$trackTime = false; + +if (isset($_GET['TSFE_ADMIN_PANEL']['display_tsdebug'])) { + //TODO setting/unsetting of the cookie can also be done in JS (as soon as we have all of the admin panel JS bundled in a dedicated class) + + if ($_GET['TSFE_ADMIN_PANEL']['display_tsdebug']) { + // the user opened the admin panel TS section + setcookie('enable_admin_panel', '1', $_SERVER['REQUEST_TIME'] + 31104000); + $trackTime = true; + } else { + // the user closed the admin panel TS section, + // so let the cookie expire at the end of the session + setcookie('enable_admin_panel', '0', 0); + } +} + +if ($trackTime || (isset($_COOKIE['enable_admin_panel']) && $_COOKIE['enable_admin_panel'] == 1)) { + require_once(PATH_t3lib.'class.t3lib_timetrack.php'); + $TT = new t3lib_timeTrack; +} else { + require_once(PATH_t3lib.'class.t3lib_timetracknull.php'); + $TT = new t3lib_timeTrackNull; +} + $TT->start(); $TT->push('','Script start'); - // ********************* // Mandatory libraries included // ********************* @@ -634,4 +655,4 @@ new gzip_encode($TYPO3_CONF_VARS['FE']['compressionLevel'], false, $TYPO3_CONF_VARS['FE']['compressionDebugInfo']); } -?> +?> \ No newline at end of file Index: t3lib/class.t3lib_timetrack.php =================================================================== --- t3lib/class.t3lib_timetrack.php (revision 4425) +++ t3lib/class.t3lib_timetrack.php (working copy) @@ -69,7 +69,7 @@ - +require_once(PATH_t3lib . 'interfaces/interface.t3lib_timetracker.php'); @@ -85,23 +85,23 @@ * @subpackage t3lib * @see t3lib_tsfeBeUserAuth, tslib_fe, tslib_cObj, TSpagegen */ -class t3lib_timeTrack { +class t3lib_timeTrack implements t3lib_TimeTracker { var $starttime = 0; // Is loaded with the millisecond time when this object is created var $LR = 1; // Log Rendering flag. If set, ->push() and ->pull() is called from the cObj->cObjGetSingle(). This determines whether or not the TypoScript parsing activity is logged. But it also slows down the rendering var $printConf=array( - 'showParentKeys' => 1, - 'contentLength' => 10000, // Determines max lenght of displayed content before it gets cropped. + 'showParentKeys' => 1, + 'contentLength' => 10000, // Determines max lenght of displayed content before it gets cropped. 'contentLength_FILE' => 400, // Determines max lenght of displayed content FROM FILE cObjects before it gets cropped. Reason is that most FILE cObjects are huge and often used as template-code. - 'flag_tree' => 1, - 'flag_messages' => 1, - 'flag_queries' => 0, - 'flag_content' => 0, - 'allTime' => 0, - 'keyLgd' => 40, - 'factor' => 10, - 'col' => '#D9D5C9', - 'highlight_col' => '#FF9933' + 'flag_tree' => 1, + 'flag_messages' => 1, + 'flag_queries' => 0, + 'flag_content' => 0, + 'allTime' => 0, + 'keyLgd' => 40, + 'factor' => 10, + 'col' => '#D9D5C9', + 'highlight_col' => '#FF9933' ); var $wrapError = array(); @@ -134,7 +134,7 @@ * * @return void */ - function start() { + public function start() { $this->wrapError = array( 0 => array('',''), 1 => array('',''), @@ -161,7 +161,7 @@ * @return void * @see tslib_cObj::cObjGetSingle(), pull() */ - function push($tslabel, $value='') { + public function push($tslabel, $value = '') { array_push($this->tsStack[$this->tsStackPointer], $tslabel); array_push($this->currentHashPointer, 'timetracker_'.$this->uniqueCounter++); @@ -186,7 +186,7 @@ * @return void * @see tslib_cObj::cObjGetSingle(), push() */ - function pull($content='') { + public function pull($content = '') { $k = end($this->currentHashPointer); $this->tsStackLog[$k]['endtime'] = microtime(); $this->tsStackLog[$k]['content'] = $content; @@ -204,7 +204,7 @@ * @return void * @see tslib_cObj::CONTENT() */ - function setTSlogMessage($content,$num=0) { + public function setTSlogMessage($content, $num = 0) { end($this->currentHashPointer); $k = current($this->currentHashPointer); @@ -221,7 +221,7 @@ * @param string Message/Label to attach * @return void */ - function setTSselectQuery(array $data,$msg='') { + public function setTSselectQuery(array $data, $msg = '') { end($this->currentHashPointer); $k = current($this->currentHashPointer); @@ -238,7 +238,7 @@ * @return void * @see decStackPointer(), TSpagegen::renderContent(), tslib_cObj::cObjGetSingle() */ - function incStackPointer() { + public function incStackPointer() { $this->tsStackPointer++; $this->tsStack[$this->tsStackPointer]=array(); } @@ -249,7 +249,7 @@ * @return void * @see incStackPointer(), TSpagegen::renderContent(), tslib_cObj::cObjGetSingle() */ - function decStackPointer() { + public function decStackPointer() { unset($this->tsStack[$this->tsStackPointer]); $this->tsStackPointer--; } @@ -259,7 +259,7 @@ * * @return integer */ - function mtime() { + protected function mtime() { return $this->convertMicrotime(microtime())-$this->starttime; } @@ -269,7 +269,7 @@ * @param string PHP microtime string * @return integer */ - function convertMicrotime($microtime) { + public function convertMicrotime($microtime) { $parts = explode(' ',$microtime); return round(($parts[0]+$parts[1])*1000); } @@ -302,7 +302,7 @@ * @return string HTML table with the information about parsing times. * @see t3lib_tsfeBeUserAuth::extGetCategory_tsdebug() */ - function printTSlog() { + public function printTSlog() { // Calculate times and keys for the tsStackLog $preEndtime = 0; foreach($this->tsStackLog as $uniqueId=>$data) { @@ -454,7 +454,7 @@ * @param string Seems to be the previous tsStackLog key * @return string Returns the $content string generated/modified. Also the $arr array is modified! */ - function fixContent(&$arr, $content, $depthData='', $first=0, $vKey='') { + protected function fixContent(&$arr, $content, $depthData='', $first=0, $vKey='') { $ac=0; $c=0; // First, find number of entries @@ -518,7 +518,7 @@ * @param string Command: If "FILE" then $this->printConf['contentLength_FILE'] is used for content length comparison, otherwise $this->printConf['contentLength'] * @return string */ - function fixCLen($c,$v) { + protected function fixCLen($c,$v) { $len = $v=='FILE'?$this->printConf['contentLength_FILE']:$this->printConf['contentLength']; if (strlen($c)>$len) { $c = ''.htmlspecialchars(t3lib_div::fixed_lgd($c,$len)).''; @@ -534,7 +534,7 @@ * @param string The string to be wrapped * @return string */ - function fw($str) { + protected function fw($str) { return ''.$str.' '; } @@ -548,7 +548,7 @@ * @access private * @see printTSlog() */ - function createHierarchyArray(&$arr,$pointer,$uniqueId) { + protected function createHierarchyArray(&$arr,$pointer,$uniqueId) { if (!is_array($arr)) { $arr = array(); } @@ -570,7 +570,7 @@ * @param string URL for the tag (if you want it) * @return string */ - function debug_typo3PrintError($header,$text,$js,$baseUrl='') { + protected function debug_typo3PrintError($header,$text,$js,$baseUrl='') { if ($js) { echo "alert('".t3lib_div::slashJS($header."\n".$text)."');"; } else { Index: t3lib/interfaces/interface.t3lib_timetracker.php =================================================================== --- t3lib/interfaces/interface.t3lib_timetracker.php (revision 0) +++ t3lib/interfaces/interface.t3lib_timetracker.php (revision 0) @@ -0,0 +1,111 @@ + +* All rights reserved +* +* This script is part of the TYPO3 project. The TYPO3 project is +* free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* The GNU General Public License can be found at +* http://www.gnu.org/copyleft/gpl.html. +* A copy is found in the textfile GPL.txt and important notices to the license +* from the author is found in LICENSE.txt distributed with these scripts. +* +* +* This script is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* This copyright notice MUST APPEAR in all copies of the script! +***************************************************************/ + +/** + * time tracker interface + * + * @package TYPO3 + * @subpackage t3lib + * @see t3lib_div::makeInstance() + */ +interface t3lib_TimeTracker { + + /** + * "Constructor" + * Sets the starting time + * + * @return void + */ + public function start(); + + /** + * Pushes an element to the TypoScript tracking array + * + * @param string Label string for the entry, eg. TypoScript property name + * @param string Additional value(?) + * @return void + */ + public function push($tslabel, $value = ''); + + /** + * Pulls an element from the TypoScript tracking array + * + * @param string The content string generated within the push/pull part. + * @return void + */ + public function pull($content = ''); + + /** + * Set TSselectQuery - for messages in TypoScript debugger. + * + * @param array Query array + * @param string Message/Label to attach + * @return void + */ + public function setTSselectQuery(array $data, $msg = ''); + + /** + * Logs the TypoScript entry + * + * @param string The message string + * @param integer Message type: 0: information, 1: message, 2: warning, 3: error + * @return void + */ + public function setTSlogMessage($content, $num = 0); + + /** + * Print TypoScript parsing log + * + * @return string HTML table with the information about parsing times. + */ + public function printTSlog(); + + /** + * Increases the stack pointer + * + * @return void + */ + public function incStackPointer(); + + /** + * Decreases the stack pointer + * + * @return void + */ + public function decStackPointer(); + + /** + * Returns microtime input to milliseconds + * + * @param string PHP microtime string + * @return integer + */ + public function convertMicrotime($microtime); + +} + +?> Index: t3lib/class.t3lib_timetracknull.php =================================================================== --- t3lib/class.t3lib_timetracknull.php (revision 0) +++ t3lib/class.t3lib_timetracknull.php (revision 0) @@ -0,0 +1,133 @@ + +* All rights reserved +* +* This script is part of the TYPO3 project. The TYPO3 project is +* free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* The GNU General Public License can be found at +* http://www.gnu.org/copyleft/gpl.html. +* +* This script is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* This copyright notice MUST APPEAR in all copies of the script! +***************************************************************/ + + +require_once(PATH_t3lib . 'interfaces/interface.t3lib_timetracker.php'); + + +/** + * A fake time tracker that does nothing but implementing the time tracker + * interface. This is done to save some performance over the real time tracker. + * + * @author Ingo Renner + * @package TYPO3 + * @subpackage t3lib + */ +class t3lib_TimeTrackNull implements t3lib_TimeTracker { + + /** + * "Constructor" + * Sets the starting time + * + * does nothing + * + * @return void + */ + public function start() {} + + /** + * Pushes an element to the TypoScript tracking array + * + * does nothing + * + * @param string Label string for the entry, eg. TypoScript property name + * @param string Additional value(?) + * @return void + */ + public function push($tslabel, $value = '') {} + + /** + * Pulls an element from the TypoScript tracking array + * + * does nothing + * + * @param string The content string generated within the push/pull part. + * @return void + */ + public function pull($content = '') {} + + /** + * Set TSselectQuery - for messages in TypoScript debugger. + * + * does nothing + * + * @param array Query array + * @param string Message/Label to attach + * @return void + */ + public function setTSselectQuery(array $data, $msg = '') {} + + /** + * Logs the TypoScript entry + * + * does nothing + * + * @param string The message string + * @param integer Message type: 0: information, 1: message, 2: warning, 3: error + * @return void + */ + public function setTSlogMessage($content, $num = 0) {} + + /** + * Print TypoScript parsing log + * + * does nothing + * + * @return string HTML table with the information about parsing times. + */ + public function printTSlog() {} + + /** + * Increases the stack pointer + * + * does nothing + * + * @return void + */ + public function incStackPointer() {} + + /** + * Decreases the stack pointer + * + * does nothing + * + * @return void + */ + public function decStackPointer() {} + + /** + * Returns microtime input to milliseconds + * + * does nothing + * + * @param string PHP microtime string + * @return integer + */ + public function convertMicrotime($microtime) {} + +} + +// XCLASSing is not possible for this class + +?>