Compare commits

..

1 Commits

Author SHA1 Message Date
abijah
82a010496d Releasing v0.3.0
git-svn-id: file:///svn-source/pmgr/tags/v0.3.0@999 97e9348a-65ac-dc4b-aefc-98561f571b83
2010-07-02 22:20:55 +00:00
9 changed files with 1117 additions and 1130 deletions

View File

@@ -349,8 +349,8 @@ class AppController extends Controller {
if ($this->dev() && !$this->Option->enabled('dev')) if ($this->dev() && !$this->Option->enabled('dev'))
$this->redirect("/"); $this->redirect("/");
if ($this->dev()) if (!$this->dev())
Configure::write('debug', 2); Configure::write('debug', '0');
$this->addDefaultSideMenuLinks(); $this->addDefaultSideMenuLinks();
//$this->sideMenuEnable('SITE', $this->op_area, false); //$this->sideMenuEnable('SITE', $this->op_area, false);
@@ -948,24 +948,13 @@ class AppController extends Controller {
'value' => $params['filtValue']); 'value' => $params['filtValue']);
} }
// Translate a user specified date into the SQL date format
foreach ($searches AS &$search) {
if (preg_match('/(_date|stamp)$/', $search['field']) &&
preg_match('%(\d{1,2})[-/](\d{1,2})[-/](\d{2,4})%', $search['value'], $matches)) {
$search['value'] = sprintf('%04d%02d%02d',
$matches[3] + ($matches[3] < 50 ? 2000 : ($matches[3] < 100 ? 1900 : 0)),
$matches[2], $matches[1]);
}
}
unset($search);
$ops = array('eq' => array('op' => null, 'pre' => '', 'post' => ''), $ops = array('eq' => array('op' => null, 'pre' => '', 'post' => ''),
'ne' => array('op' => '<>', 'pre' => '', 'post' => ''), 'ne' => array('op' => '<>', 'pre' => '', 'post' => ''),
'lt' => array('op' => '<', 'pre' => '', 'post' => ''), 'lt' => array('op' => '<', 'pre' => '', 'post' => ''),
'le' => array('op' => '<=', 'pre' => '', 'post' => ''), 'le' => array('op' => '<=', 'pre' => '', 'post' => ''),
'gt' => array('op' => '>', 'pre' => '', 'post' => ''), 'gt' => array('op' => '>', 'pre' => '', 'post' => ''),
'ge' => array('op' => '>=', 'pre' => '', 'post' => ''), 'ge' => array('op' => '>=', 'pre' => '', 'post' => ''),
'in' => array('op' => 'IN', 'pre' => '(', 'post' => ')'), 'in' => array('op' => 'IN', 'pre' => '(', 'post' => ')'),
'bw' => array('op' => 'LIKE', 'pre' => '', 'post' => '%'), 'bw' => array('op' => 'LIKE', 'pre' => '', 'post' => '%'),
'ew' => array('op' => 'LIKE', 'pre' => '%', 'post' => ''), 'ew' => array('op' => 'LIKE', 'pre' => '%', 'post' => ''),
'cn' => array('op' => 'LIKE', 'pre' => '%', 'post' => '%'), 'cn' => array('op' => 'LIKE', 'pre' => '%', 'post' => '%'),
@@ -1168,7 +1157,7 @@ class AppController extends Controller {
} }
function gridDataOutputSummary(&$params, &$model, $pagination) { function gridDataOutputSummary(&$params, &$model, $pagination) {
if ($params['debug']) if ($params['debug'])
echo " <params><![CDATA[\n" . print_r($params, true) . "\n]]></params>\n"; echo " <params><![CDATA[\n" . print_r($params, true) . "\n]]></params>\n";
echo " <page>{$pagination['page']}</page>\n"; echo " <page>{$pagination['page']}</page>\n";
echo " <total>{$pagination['total']}</total>\n"; echo " <total>{$pagination['total']}</total>\n";

View File

@@ -38,7 +38,7 @@
* In production mode, flash messages redirect after a time interval. * In production mode, flash messages redirect after a time interval.
* In development mode, you need to click the flash message to continue. * In development mode, you need to click the flash message to continue.
*/ */
Configure::write('debug', 0); Configure::write('debug', 2);
/** /**
* Application wide charset encoding * Application wide charset encoding
*/ */

View File

@@ -330,15 +330,13 @@ class Customer extends AppModel {
} }
// Remove any contacts which are already destination customer contacts // Remove any contacts which are already destination customer contacts
$new_contacts = array_diff($contacts, array_keys($dst_contacts)); $contacts = array_diff($contacts, array_keys($dst_contacts));
$all_contacts = array_merge($new_contacts, array_keys($dst_contacts));
$this->pr(17, compact('new_contacts', 'all_contacts'));
// For now, we'll assume the operation will succeed. // For now, we'll assume the operation will succeed.
$ret = true; $ret = true;
// Add each desired source customer contact to the destination customer // Add each desired source customer contact to the destination customer
foreach ($new_contacts AS $contact_id) { foreach ($contacts AS $contact_id) {
$CM = new ContactsCustomer(); $CM = new ContactsCustomer();
if (!$CM->save(array('customer_id' => $dst_id) if (!$CM->save(array('customer_id' => $dst_id)
+ $src_contacts[$contact_id], false)) { + $src_contacts[$contact_id], false)) {
@@ -374,7 +372,7 @@ class Customer extends AppModel {
$this->delete($src_id); $this->delete($src_id);
// Delete all the orphaned customers // Delete all the orphaned customers
foreach (array_diff(array_keys($src_contacts), $all_contacts) AS $contact_id) { foreach (array_diff(array_keys($src_contacts), $contacts) AS $contact_id) {
// Delete un-used or duplicate contacts // Delete un-used or duplicate contacts
// REVISIT <AP> 20100702: // REVISIT <AP> 20100702:
// Not sure if we really want to do this. // Not sure if we really want to do this.

View File

@@ -544,7 +544,7 @@ class Lease extends AppModel {
function conditionDelinquent($table_name = 'Lease') { function conditionDelinquent($table_name = 'Lease') {
if (empty($table_name)) $t = ''; else $t = $table_name . '.'; if (empty($table_name)) $t = ''; else $t = $table_name . '.';
return ("({$t}close_date IS NULL AND" . return ("({$t}close_date IS NULL AND" .
" NOW() > DATE_ADD({$t}paid_through_date, INTERVAL 1 DAY))"); " NOW() > DATE_ADD({$t}paid_through_date, INTERVAL 10 DAY))");
} }
function delinquentDaysSQL($table_name = 'Lease') { function delinquentDaysSQL($table_name = 'Lease') {

View File

@@ -1,471 +1,471 @@
<?php <?php
/* SVN FILE: $Id$ */ /* SVN FILE: $Id$ */
/** /**
* DebugKit DebugToolbar Component * DebugKit DebugToolbar Component
* *
* *
* *
* PHP versions 4 and 5 * PHP versions 4 and 5
* *
* CakePHP : Rapid Development Framework <http://www.cakephp.org/> * CakePHP : Rapid Development Framework <http://www.cakephp.org/>
* Copyright 2006-2008, Cake Software Foundation, Inc. * Copyright 2006-2008, Cake Software Foundation, Inc.
* 1785 E. Sahara Avenue, Suite 490-204 * 1785 E. Sahara Avenue, Suite 490-204
* Las Vegas, Nevada 89104 * Las Vegas, Nevada 89104
* *
* Licensed under The MIT License * Licensed under The MIT License
* Redistributions of files must retain the above copyright notice. * Redistributions of files must retain the above copyright notice.
* *
* @filesource * @filesource
* @copyright Copyright 2006-2008, Cake Software Foundation, Inc. * @copyright Copyright 2006-2008, Cake Software Foundation, Inc.
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
* @package cake * @package cake
* @subpackage cake.cake.libs. * @subpackage cake.cake.libs.
* @since CakePHP v 1.2.0.4487 * @since CakePHP v 1.2.0.4487
* @version $Revision$ * @version $Revision$
* @modifiedby $LastChangedBy$ * @modifiedby $LastChangedBy$
* @lastmodified $Date$ * @lastmodified $Date$
* @license http://www.opensource.org/licenses/mit-license.php The MIT License * @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/ */
class ToolbarComponent extends Object { class ToolbarComponent extends Object {
/** /**
* Controller instance reference * Controller instance reference
* *
* @var object * @var object
*/ */
var $controller; var $controller;
/** /**
* Components used by DebugToolbar * Components used by DebugToolbar
* *
* @var array * @var array
*/ */
var $components = array('RequestHandler'); var $components = array('RequestHandler');
/** /**
* The default panels the toolbar uses. * The default panels the toolbar uses.
* which panels are used can be configured when attaching the component * which panels are used can be configured when attaching the component
* *
* @var array * @var array
*/ */
var $_defaultPanels = array('session', 'request', 'sqlLog', 'timer', 'log', 'memory', 'variables'); var $_defaultPanels = array('session', 'request', 'sqlLog', 'timer', 'log', 'memory', 'variables');
/** /**
* Loaded panel objects. * Loaded panel objects.
* *
* @var array * @var array
*/ */
var $panels = array(); var $panels = array();
/** /**
* fallback for javascript settings * fallback for javascript settings
* *
* @var array * @var array
**/ **/
var $_defaultJavascript = array( var $_defaultJavascript = array(
'behavior' => '/debug_kit/js/js_debug_toolbar' 'behavior' => '/debug_kit/js/js_debug_toolbar'
); );
/** /**
* javascript files component will be using. * javascript files component will be using.
* *
* @var array * @var array
**/ **/
var $javascript = array(); var $javascript = array();
/** /**
* initialize * initialize
* *
* If debug is off the component will be disabled and not do any further time tracking * If debug is off the component will be disabled and not do any further time tracking
* or load the toolbar helper. * or load the toolbar helper.
* *
* @return bool * @return bool
**/ **/
function initialize(&$controller, $settings) { function initialize(&$controller, $settings) {
if (Configure::read('debug') == 0) { if (Configure::read('debug') == 0) {
$this->enabled = false; $this->enabled = false;
return false; return false;
} }
App::import('Vendor', 'DebugKit.DebugKitDebugger'); App::import('Vendor', 'DebugKit.DebugKitDebugger');
DebugKitDebugger::startTimer('componentInit', __('Component initialization and startup', true)); DebugKitDebugger::startTimer('componentInit', __('Component initialization and startup', true));
if (!isset($settings['panels'])) { if (!isset($settings['panels'])) {
$settings['panels'] = $this->_defaultPanels; $settings['panels'] = $this->_defaultPanels;
} }
if (isset($settings['javascript'])) { if (isset($settings['javascript'])) {
$settings['javascript'] = $this->_setJavascript($settings['javascript']); $settings['javascript'] = $this->_setJavascript($settings['javascript']);
} else { } else {
$settings['javascript'] = $this->_defaultJavascript; $settings['javascript'] = $this->_defaultJavascript;
} }
$this->_loadPanels($settings['panels']); $this->_loadPanels($settings['panels']);
unset($settings['panels']); unset($settings['panels']);
$this->_set($settings); $this->_set($settings);
$this->controller =& $controller; $this->controller =& $controller;
return false; return false;
} }
/** /**
* Component Startup * Component Startup
* *
* @return bool * @return bool
**/ **/
function startup(&$controller) { function startup(&$controller) {
$currentViewClass = $controller->view; $currentViewClass = $controller->view;
$this->_makeViewClass($currentViewClass); $this->_makeViewClass($currentViewClass);
$controller->view = 'DebugKit.Debug'; $controller->view = 'DebugKit.Debug';
if (!isset($controller->params['url']['ext']) || (isset($controller->params['url']['ext']) && $controller->params['url']['ext'] == 'html')) { if (!isset($controller->params['url']['ext']) || (isset($controller->params['url']['ext']) && $controller->params['url']['ext'] == 'html')) {
$format = 'Html'; $format = 'Html';
} else { } else {
$format = 'FirePhp'; $format = 'FirePhp';
} }
$controller->helpers['DebugKit.Toolbar'] = array('output' => sprintf('DebugKit.%sToolbar', $format)); $controller->helpers['DebugKit.Toolbar'] = array('output' => sprintf('DebugKit.%sToolbar', $format));
$panels = array_keys($this->panels); $panels = array_keys($this->panels);
foreach ($panels as $panelName) { foreach ($panels as $panelName) {
$this->panels[$panelName]->startup($controller); $this->panels[$panelName]->startup($controller);
} }
DebugKitDebugger::stopTimer('componentInit'); DebugKitDebugger::stopTimer('componentInit');
DebugKitDebugger::startTimer('controllerAction', __('Controller Action', true)); DebugKitDebugger::startTimer('controllerAction', __('Controller Action', true));
} }
/** /**
* beforeRender callback * beforeRender callback
* *
* Calls beforeRender on all the panels and set the aggregate to the controller. * Calls beforeRender on all the panels and set the aggregate to the controller.
* *
* @return void * @return void
**/ **/
function beforeRender(&$controller) { function beforeRender(&$controller) {
DebugKitDebugger::stopTimer('controllerAction'); DebugKitDebugger::stopTimer('controllerAction');
$vars = array(); $vars = array();
$panels = array_keys($this->panels); $panels = array_keys($this->panels);
foreach ($panels as $panelName) { foreach ($panels as $panelName) {
$panel =& $this->panels[$panelName]; $panel =& $this->panels[$panelName];
$vars[$panelName]['content'] = $panel->beforeRender($controller); $vars[$panelName]['content'] = $panel->beforeRender($controller);
$elementName = Inflector::underscore($panelName) . '_panel'; $elementName = Inflector::underscore($panelName) . '_panel';
if (isset($panel->elementName)) { if (isset($panel->elementName)) {
$elementName = $panel->elementName; $elementName = $panel->elementName;
} }
$vars[$panelName]['elementName'] = $elementName; $vars[$panelName]['elementName'] = $elementName;
$vars[$panelName]['plugin'] = $panel->plugin; $vars[$panelName]['plugin'] = $panel->plugin;
$vars[$panelName]['disableTimer'] = true; $vars[$panelName]['disableTimer'] = true;
} }
$controller->set(array('debugToolbarPanels' => $vars, 'debugToolbarJavascript' => $this->javascript)); $controller->set(array('debugToolbarPanels' => $vars, 'debugToolbarJavascript' => $this->javascript));
DebugKitDebugger::startTimer('controllerRender', __('Render Controller Action', true)); DebugKitDebugger::startTimer('controllerRender', __('Render Controller Action', true));
} }
/** /**
* Load Panels used in the debug toolbar * Load Panels used in the debug toolbar
* *
* @return void * @return void
* @access protected * @access protected
**/ **/
function _loadPanels($panels) { function _loadPanels($panels) {
foreach ($panels as $panel) { foreach ($panels as $panel) {
$className = $panel . 'Panel'; $className = $panel . 'Panel';
if (!class_exists($className) && !App::import('Vendor', $className)) { if (!class_exists($className) && !App::import('Vendor', $className)) {
trigger_error(sprintf(__('Could not load DebugToolbar panel %s', true), $panel), E_USER_WARNING); trigger_error(sprintf(__('Could not load DebugToolbar panel %s', true), $panel), E_USER_WARNING);
continue; continue;
} }
$panelObj = new $className(); $panelObj =& new $className();
if (is_subclass_of($panelObj, 'DebugPanel') || is_subclass_of($panelObj, 'debugpanel')) { if (is_subclass_of($panelObj, 'DebugPanel') || is_subclass_of($panelObj, 'debugpanel')) {
$this->panels[$panel] =& $panelObj; $this->panels[$panel] =& $panelObj;
} }
} }
} }
/** /**
* Set the javascript to user scripts. * Set the javascript to user scripts.
* *
* Set either script key to false to exclude it from the rendered layout. * Set either script key to false to exclude it from the rendered layout.
* *
* @param array $scripts Javascript config information * @param array $scripts Javascript config information
* @return array * @return array
* @access protected * @access protected
**/ **/
function _setJavascript($scripts) { function _setJavascript($scripts) {
$behavior = false; $behavior = false;
if (!is_array($scripts)) { if (!is_array($scripts)) {
$scripts = (array)$scripts; $scripts = (array)$scripts;
} }
if (isset($scripts[0])) { if (isset($scripts[0])) {
$behavior = $scripts[0]; $behavior = $scripts[0];
} }
if (isset($scripts['behavior'])) { if (isset($scripts['behavior'])) {
$behavior = $scripts['behavior']; $behavior = $scripts['behavior'];
} }
if (!$behavior) { if (!$behavior) {
return array(); return array();
} elseif ($behavior === true) { } elseif ($behavior === true) {
$behavior = 'js'; $behavior = 'js';
} }
if (strpos($behavior, '/') !== 0) { if (strpos($behavior, '/') !== 0) {
$behavior .= '_debug_toolbar'; $behavior .= '_debug_toolbar';
} }
$pluginFile = APP . 'plugins' . DS . 'debug_kit' . DS . 'vendors' . DS . 'js' . DS . $behavior . '.js'; $pluginFile = APP . 'plugins' . DS . 'debug_kit' . DS . 'vendors' . DS . 'js' . DS . $behavior . '.js';
if (file_exists($pluginFile)) { if (file_exists($pluginFile)) {
$behavior = '/debug_kit/js/' . $behavior . '.js'; $behavior = '/debug_kit/js/' . $behavior . '.js';
} }
return compact('behavior'); return compact('behavior');
} }
/** /**
* Makes the DoppleGangerView class if it doesn't already exist. * Makes the DoppleGangerView class if it doesn't already exist.
* This allows DebugView to be compatible with all view classes. * This allows DebugView to be compatible with all view classes.
* *
* @param string $baseClassName * @param string $baseClassName
* @access protected * @access protected
* @return void * @return void
*/ */
function _makeViewClass($baseClassName) { function _makeViewClass($baseClassName) {
if (!class_exists('DoppelGangerView')) { if (!class_exists('DoppelGangerView')) {
App::import('View', $baseClassName); App::import('View', $baseClassName);
if (strpos('View', $baseClassName) === false) { if (strpos('View', $baseClassName) === false) {
$baseClassName .= 'View'; $baseClassName .= 'View';
} }
$class = "class DoppelGangerView extends $baseClassName {}"; $class = "class DoppelGangerView extends $baseClassName {}";
eval($class); eval($class);
} }
} }
} }
/** /**
* Debug Panel * Debug Panel
* *
* Abstract class for debug panels. * Abstract class for debug panels.
* *
* @package cake.debug_kit * @package cake.debug_kit
*/ */
class DebugPanel extends Object { class DebugPanel extends Object {
/** /**
* Defines which plugin this panel is from so the element can be located. * Defines which plugin this panel is from so the element can be located.
* *
* @var string * @var string
*/ */
var $plugin = null; var $plugin = null;
/** /**
* startup the panel * startup the panel
* *
* Pull information from the controller / request * Pull information from the controller / request
* *
* @param object $controller Controller reference. * @param object $controller Controller reference.
* @return void * @return void
**/ **/
function startup(&$controller) { } function startup(&$controller) { }
/** /**
* Prepare output vars before Controller Rendering. * Prepare output vars before Controller Rendering.
* *
* @param object $controller Controller reference. * @param object $controller Controller reference.
* @return void * @return void
**/ **/
function beforeRender(&$controller) { } function beforeRender(&$controller) { }
} }
/** /**
* Variables Panel * Variables Panel
* *
* Provides debug information on the View variables. * Provides debug information on the View variables.
* *
* @package cake.debug_kit.panels * @package cake.debug_kit.panels
**/ **/
class VariablesPanel extends DebugPanel { class VariablesPanel extends DebugPanel {
var $plugin = 'debug_kit'; var $plugin = 'debug_kit';
} }
/** /**
* Session Panel * Session Panel
* *
* Provides debug information on the Session contents. * Provides debug information on the Session contents.
* *
* @package cake.debug_kit.panels * @package cake.debug_kit.panels
**/ **/
class SessionPanel extends DebugPanel { class SessionPanel extends DebugPanel {
var $plugin = 'debug_kit'; var $plugin = 'debug_kit';
/** /**
* beforeRender callback * beforeRender callback
* *
* @param object $controller * @param object $controller
* @access public * @access public
* @return array * @return array
*/ */
function beforeRender(&$controller) { function beforeRender(&$controller) {
return $controller->Session->read(); return $controller->Session->read();
} }
} }
/** /**
* Request Panel * Request Panel
* *
* Provides debug information on the Current request params. * Provides debug information on the Current request params.
* *
* @package cake.debug_kit.panels * @package cake.debug_kit.panels
**/ **/
class RequestPanel extends DebugPanel { class RequestPanel extends DebugPanel {
var $plugin = 'debug_kit'; var $plugin = 'debug_kit';
/** /**
* beforeRender callback - grabs request params * beforeRender callback - grabs request params
* *
* @return array * @return array
**/ **/
function beforeRender(&$controller) { function beforeRender(&$controller) {
$out = array(); $out = array();
$out['params'] = $controller->params; $out['params'] = $controller->params;
if (isset($controller->Cookie)) { if (isset($controller->Cookie)) {
$out['cookie'] = $controller->Cookie->read(); $out['cookie'] = $controller->Cookie->read();
} }
$out['get'] = $_GET; $out['get'] = $_GET;
$out['currentRoute'] = Router::currentRoute(); $out['currentRoute'] = Router::currentRoute();
return $out; return $out;
} }
} }
/** /**
* Timer Panel * Timer Panel
* *
* Provides debug information on all timers used in a request. * Provides debug information on all timers used in a request.
* *
* @package cake.debug_kit.panels * @package cake.debug_kit.panels
**/ **/
class TimerPanel extends DebugPanel { class TimerPanel extends DebugPanel {
var $plugin = 'debug_kit'; var $plugin = 'debug_kit';
/** /**
* startup - add in necessary helpers * startup - add in necessary helpers
* *
* @return void * @return void
**/ **/
function startup(&$controller) { function startup(&$controller) {
if (!in_array('Number', $controller->helpers)) { if (!in_array('Number', $controller->helpers)) {
$controller->helpers[] = 'Number'; $controller->helpers[] = 'Number';
} }
} }
} }
/** /**
* Memory Panel * Memory Panel
* *
* Provides debug information on the memory consumption. * Provides debug information on the memory consumption.
* *
* @package cake.debug_kit.panels * @package cake.debug_kit.panels
**/ **/
class MemoryPanel extends DebugPanel { class MemoryPanel extends DebugPanel {
var $plugin = 'debug_kit'; var $plugin = 'debug_kit';
/** /**
* startup - add in necessary helpers * startup - add in necessary helpers
* *
* @return void * @return void
**/ **/
function startup(&$controller) { function startup(&$controller) {
if (!in_array('Number', $controller->helpers)) { if (!in_array('Number', $controller->helpers)) {
$controller->helpers[] = 'Number'; $controller->helpers[] = 'Number';
} }
} }
} }
/** /**
* sqlLog Panel * sqlLog Panel
* *
* Provides debug information on the SQL logs and provides links to an ajax explain interface. * Provides debug information on the SQL logs and provides links to an ajax explain interface.
* *
* @package cake.debug_kit.panels * @package cake.debug_kit.panels
**/ **/
class sqlLogPanel extends DebugPanel { class sqlLogPanel extends DebugPanel {
var $plugin = 'debug_kit'; var $plugin = 'debug_kit';
var $dbConfigs = array(); var $dbConfigs = array();
/** /**
* get db configs. * get db configs.
* *
* @param string $controller * @param string $controller
* @access public * @access public
* @return void * @return void
*/ */
function startUp(&$controller) { function startUp(&$controller) {
if (!class_exists('ConnectionManager')) { if (!class_exists('ConnectionManager')) {
$this->dbConfigs = array(); $this->dbConfigs = array();
return false; return false;
} }
$this->dbConfigs = ConnectionManager::sourceList(); $this->dbConfigs = ConnectionManager::sourceList();
return true; return true;
} }
/** /**
* Get Sql Logs for each DB config * Get Sql Logs for each DB config
* *
* @param string $controller * @param string $controller
* @access public * @access public
* @return void * @return void
*/ */
function beforeRender(&$controller) { function beforeRender(&$controller) {
$queryLogs = array(); $queryLogs = array();
if (!class_exists('ConnectionManager')) { if (!class_exists('ConnectionManager')) {
return array(); return array();
} }
foreach ($this->dbConfigs as $configName) { foreach ($this->dbConfigs as $configName) {
$db =& ConnectionManager::getDataSource($configName); $db =& ConnectionManager::getDataSource($configName);
if ($db->isInterfaceSupported('showLog')) { if ($db->isInterfaceSupported('showLog')) {
ob_start(); ob_start();
$db->showLog(); $db->showLog();
$queryLogs[$configName] = ob_get_clean(); $queryLogs[$configName] = ob_get_clean();
} }
} }
return $queryLogs; return $queryLogs;
} }
} }
/** /**
* Log Panel - Reads log entries made this request. * Log Panel - Reads log entries made this request.
* *
* @package cake.debug_kit.panels * @package cake.debug_kit.panels
*/ */
class LogPanel extends DebugPanel { class LogPanel extends DebugPanel {
var $plugin = 'debug_kit'; var $plugin = 'debug_kit';
/** /**
* Log files to scan * Log files to scan
* *
* @var array * @var array
*/ */
var $logFiles = array('error.log', 'debug.log'); var $logFiles = array('error.log', 'debug.log');
/** /**
* startup * startup
* *
* @return void * @return void
**/ **/
function startup(&$controller) { function startup(&$controller) {
if (!class_exists('CakeLog')) { if (!class_exists('CakeLog')) {
App::import('Core', 'Log'); App::import('Core', 'Log');
} }
} }
/** /**
* beforeRender Callback * beforeRender Callback
* *
* @return array * @return array
**/ **/
function beforeRender(&$controller) { function beforeRender(&$controller) {
$this->startTime = DebugKitDebugger::requestStartTime(); $this->startTime = DebugKitDebugger::requestStartTime();
$this->currentTime = DebugKitDebugger::requestTime(); $this->currentTime = DebugKitDebugger::requestTime();
$out = array(); $out = array();
foreach ($this->logFiles as $log) { foreach ($this->logFiles as $log) {
$file = LOGS . $log; $file = LOGS . $log;
if (!file_exists($file)) { if (!file_exists($file)) {
continue; continue;
} }
$out[$log] = $this->_parseFile($file); $out[$log] = $this->_parseFile($file);
} }
return $out; return $out;
} }
/** /**
* parse a log file and find the relevant entries * parse a log file and find the relevant entries
* *
* @param string $filename Name of file to read * @param string $filename Name of file to read
* @access protected * @access protected
* @return array * @return array
*/ */
function _parseFile($filename) { function _parseFile($filename) {
$file = new File($filename); $file =& new File($filename);
$contents = $file->read(); $contents = $file->read();
$timePattern = '/(\d{4}-\d{2}\-\d{2}\s\d{1,2}\:\d{1,2}\:\d{1,2})/'; $timePattern = '/(\d{4}-\d{2}\-\d{2}\s\d{1,2}\:\d{1,2}\:\d{1,2})/';
$chunks = preg_split($timePattern, $contents, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); $chunks = preg_split($timePattern, $contents, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
for ($i = 0, $len = count($chunks); $i < $len; $i += 2) { for ($i = 0, $len = count($chunks); $i < $len; $i += 2) {
if (strtotime($chunks[$i]) < $this->startTime) { if (strtotime($chunks[$i]) < $this->startTime) {
unset($chunks[$i], $chunks[$i + 1]); unset($chunks[$i], $chunks[$i + 1]);
} }
} }
return array_values($chunks); return array_values($chunks);
} }
} }
?> ?>

View File

@@ -1,144 +1,144 @@
<?php <?php
/* SVN FILE: $Id$ */ /* SVN FILE: $Id$ */
/** /**
* DebugView test Case * DebugView test Case
* *
* *
* *
* PHP versions 4 and 5 * PHP versions 4 and 5
* *
* CakePHP : Rapid Development Framework <http://www.cakephp.org/> * CakePHP : Rapid Development Framework <http://www.cakephp.org/>
* Copyright 2006-2008, Cake Software Foundation, Inc. * Copyright 2006-2008, Cake Software Foundation, Inc.
* 1785 E. Sahara Avenue, Suite 490-204 * 1785 E. Sahara Avenue, Suite 490-204
* Las Vegas, Nevada 89104 * Las Vegas, Nevada 89104
* *
* Licensed under The MIT License * Licensed under The MIT License
* Redistributions of files must retain the above copyright notice. * Redistributions of files must retain the above copyright notice.
* *
* @filesource * @filesource
* @copyright Copyright 2006-2008, Cake Software Foundation, Inc. * @copyright Copyright 2006-2008, Cake Software Foundation, Inc.
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
* @package cake * @package cake
* @subpackage cake.cake.libs. * @subpackage cake.cake.libs.
* @since CakePHP v 1.2.0.4487 * @since CakePHP v 1.2.0.4487
* @version $Revision$ * @version $Revision$
* @modifiedby $LastChangedBy$ * @modifiedby $LastChangedBy$
* @lastmodified $Date$ * @lastmodified $Date$
* @license http://www.opensource.org/licenses/mit-license.php The MIT License * @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/ */
App::import('Core', 'View'); App::import('Core', 'View');
if (!class_exists('DoppelGangerView')) { if (!class_exists('DoppelGangerView')) {
class DoppelGangerView extends View {} class DoppelGangerView extends View {}
} }
App::import('View', 'DebugKit.Debug'); App::import('View', 'DebugKit.Debug');
App::import('Vendor', 'DebugKit.DebugKitDebugger'); App::import('Vendor', 'DebugKit.DebugKitDebugger');
/** /**
* Debug View Test Case * Debug View Test Case
* *
* @package debug_kit.tests * @package debug_kit.tests
*/ */
class DebugViewTestCase extends CakeTestCase { class DebugViewTestCase extends CakeTestCase {
/** /**
* set Up test case * set Up test case
* *
* @return void * @return void
**/ **/
function setUp() { function setUp() {
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home')); Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::parse('/'); Router::parse('/');
$this->Controller =& ClassRegistry::init('Controller'); $this->Controller =& ClassRegistry::init('Controller');
$this->View = new DebugView($this->Controller, false); $this->View =& new DebugView($this->Controller, false);
$this->_debug = Configure::read('debug'); $this->_debug = Configure::read('debug');
} }
/** /**
* start Case - switch view paths * start Case - switch view paths
* *
* @return void * @return void
**/ **/
function startCase() { function startCase() {
$this->_viewPaths = Configure::read('viewPaths'); $this->_viewPaths = Configure::read('viewPaths');
Configure::write('viewPaths', array( Configure::write('viewPaths', array(
TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS, TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS,
APP . 'plugins' . DS . 'debug_kit' . DS . 'views'. DS, APP . 'plugins' . DS . 'debug_kit' . DS . 'views'. DS,
ROOT . DS . LIBS . 'view' . DS ROOT . DS . LIBS . 'view' . DS
)); ));
} }
/** /**
* test that element timers are working * test that element timers are working
* *
* @return void * @return void
**/ **/
function testElementTimers() { function testElementTimers() {
$result = $this->View->element('test_element'); $result = $this->View->element('test_element');
$this->assertPattern('/^this is the test element$/', $result); $this->assertPattern('/^this is the test element$/', $result);
$result = DebugKitDebugger::getTimers(); $result = DebugKitDebugger::getTimers();
$this->assertTrue(isset($result['render_test_element.ctp'])); $this->assertTrue(isset($result['render_test_element.ctp']));
} }
/** /**
* test rendering and ensure that timers are being set. * test rendering and ensure that timers are being set.
* *
* @access public * @access public
* @return void * @return void
*/ */
function testRenderTimers() { function testRenderTimers() {
$this->Controller->viewPath = 'posts'; $this->Controller->viewPath = 'posts';
$this->Controller->action = 'index'; $this->Controller->action = 'index';
$this->Controller->params = array( $this->Controller->params = array(
'action' => 'index', 'action' => 'index',
'controller' => 'posts', 'controller' => 'posts',
'plugin' => null, 'plugin' => null,
'url' => array('url' => 'posts/index'), 'url' => array('url' => 'posts/index'),
'base' => null, 'base' => null,
'here' => '/posts/index', 'here' => '/posts/index',
); );
$this->Controller->layout = 'default'; $this->Controller->layout = 'default';
$View = new DebugView($this->Controller, false); $View =& new DebugView($this->Controller, false);
$View->render('index'); $View->render('index');
$result = DebugKitDebugger::getTimers(); $result = DebugKitDebugger::getTimers();
$this->assertEqual(count($result), 3); $this->assertEqual(count($result), 3);
$this->assertTrue(isset($result['viewRender'])); $this->assertTrue(isset($result['viewRender']));
$this->assertTrue(isset($result['render_default.ctp'])); $this->assertTrue(isset($result['render_default.ctp']));
$this->assertTrue(isset($result['render_index.ctp'])); $this->assertTrue(isset($result['render_index.ctp']));
} }
/** /**
* Test for correct loading of helpers into custom view * Test for correct loading of helpers into custom view
* *
* @return void * @return void
*/ */
function testLoadHelpers() { function testLoadHelpers() {
$loaded = array(); $loaded = array();
$result = $this->View->_loadHelpers($loaded, array('Html', 'Javascript', 'Number')); $result = $this->View->_loadHelpers($loaded, array('Html', 'Javascript', 'Number'));
$this->assertTrue(is_object($result['Html'])); $this->assertTrue(is_object($result['Html']));
$this->assertTrue(is_object($result['Javascript'])); $this->assertTrue(is_object($result['Javascript']));
$this->assertTrue(is_object($result['Number'])); $this->assertTrue(is_object($result['Number']));
} }
/** /**
* reset the view paths * reset the view paths
* *
* @return void * @return void
**/ **/
function endCase() { function endCase() {
Configure::write('viewPaths', $this->_viewPaths); Configure::write('viewPaths', $this->_viewPaths);
} }
/** /**
* tear down function * tear down function
* *
* @return void * @return void
**/ **/
function tearDown() { function tearDown() {
unset($this->View, $this->Controller); unset($this->View, $this->Controller);
DebugKitDebugger::clearTimers(); DebugKitDebugger::clearTimers();
Configure::write('debug', $this->_debug); Configure::write('debug', $this->_debug);
} }
} }
?> ?>

View File

@@ -1,137 +1,137 @@
<?php <?php
/* SVN FILE: $Id$ */ /* SVN FILE: $Id$ */
/** /**
* Toolbar Abstract Helper Test Case * Toolbar Abstract Helper Test Case
* *
* *
* *
* PHP versions 4 and 5 * PHP versions 4 and 5
* *
* CakePHP : Rapid Development Framework <http://www.cakephp.org/> * CakePHP : Rapid Development Framework <http://www.cakephp.org/>
* Copyright 2006-2008, Cake Software Foundation, Inc. * Copyright 2006-2008, Cake Software Foundation, Inc.
* 1785 E. Sahara Avenue, Suite 490-204 * 1785 E. Sahara Avenue, Suite 490-204
* Las Vegas, Nevada 89104 * Las Vegas, Nevada 89104
* *
* Licensed under The MIT License * Licensed under The MIT License
* Redistributions of files must retain the above copyright notice. * Redistributions of files must retain the above copyright notice.
* *
* @filesource * @filesource
* @copyright Copyright 2006-2008, Cake Software Foundation, Inc. * @copyright Copyright 2006-2008, Cake Software Foundation, Inc.
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
* @package cake * @package cake
* @subpackage debug_kit.tests.views.helpers * @subpackage debug_kit.tests.views.helpers
* @version $Revision$ * @version $Revision$
* @modifiedby $LastChangedBy$ * @modifiedby $LastChangedBy$
* @lastmodified $Date$ * @lastmodified $Date$
* @license http://www.opensource.org/licenses/mit-license.php The MIT License * @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/ */
App::import('Helper', 'DebugKit.FirePhpToolbar'); App::import('Helper', 'DebugKit.FirePhpToolbar');
App::import('Core', array('View', 'Controller')); App::import('Core', array('View', 'Controller'));
require_once APP . 'plugins' . DS . 'debug_kit' . DS . 'tests' . DS . 'cases' . DS . 'test_objects.php'; require_once APP . 'plugins' . DS . 'debug_kit' . DS . 'tests' . DS . 'cases' . DS . 'test_objects.php';
FireCake::getInstance('TestFireCake'); FireCake::getInstance('TestFireCake');
class FirePhpToolbarHelperTestCase extends CakeTestCase { class FirePhpToolbarHelperTestCase extends CakeTestCase {
/** /**
* setUp * setUp
* *
* @return void * @return void
**/ **/
function setUp() { function setUp() {
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home')); Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::parse('/'); Router::parse('/');
$this->Toolbar = new ToolbarHelper(array('output' => 'DebugKit.FirePhpToolbar')); $this->Toolbar =& new ToolbarHelper(array('output' => 'DebugKit.FirePhpToolbar'));
$this->Toolbar->FirePhpToolbar = new FirePhpToolbarHelper(); $this->Toolbar->FirePhpToolbar =& new FirePhpToolbarHelper();
$this->Controller =& ClassRegistry::init('Controller'); $this->Controller =& ClassRegistry::init('Controller');
if (isset($this->_debug)) { if (isset($this->_debug)) {
Configure::write('debug', $this->_debug); Configure::write('debug', $this->_debug);
} }
} }
/** /**
* start Case - switch view paths * start Case - switch view paths
* *
* @return void * @return void
**/ **/
function startCase() { function startCase() {
$this->_viewPaths = Configure::read('viewPaths'); $this->_viewPaths = Configure::read('viewPaths');
Configure::write('viewPaths', array( Configure::write('viewPaths', array(
TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS, TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS,
APP . 'plugins' . DS . 'debug_kit' . DS . 'views'. DS, APP . 'plugins' . DS . 'debug_kit' . DS . 'views'. DS,
ROOT . DS . LIBS . 'view' . DS ROOT . DS . LIBS . 'view' . DS
)); ));
$this->_debug = Configure::read('debug'); $this->_debug = Configure::read('debug');
$this->firecake =& FireCake::getInstance(); $this->firecake =& FireCake::getInstance();
} }
/** /**
* test neat array (dump)creation * test neat array (dump)creation
* *
* @return void * @return void
*/ */
function testMakeNeatArray() { function testMakeNeatArray() {
$this->Toolbar->makeNeatArray(array(1,2,3)); $this->Toolbar->makeNeatArray(array(1,2,3));
$result = $this->firecake->sentHeaders; $result = $this->firecake->sentHeaders;
$this->assertTrue(isset($result['X-Wf-1-1-1-1'])); $this->assertTrue(isset($result['X-Wf-1-1-1-1']));
$this->assertPattern('/\[1,2,3\]/', $result['X-Wf-1-1-1-1']); $this->assertPattern('/\[1,2,3\]/', $result['X-Wf-1-1-1-1']);
} }
/** /**
* testAfterlayout element rendering * testAfterlayout element rendering
* *
* @return void * @return void
*/ */
function testAfterLayout(){ function testAfterLayout(){
$this->Controller->viewPath = 'posts'; $this->Controller->viewPath = 'posts';
$this->Controller->action = 'index'; $this->Controller->action = 'index';
$this->Controller->params = array( $this->Controller->params = array(
'action' => 'index', 'action' => 'index',
'controller' => 'posts', 'controller' => 'posts',
'plugin' => null, 'plugin' => null,
'url' => array('url' => 'posts/index', 'ext' => 'xml'), 'url' => array('url' => 'posts/index', 'ext' => 'xml'),
'base' => null, 'base' => null,
'here' => '/posts/index', 'here' => '/posts/index',
); );
$this->Controller->layout = 'default'; $this->Controller->layout = 'default';
$this->Controller->uses = null; $this->Controller->uses = null;
$this->Controller->components = array('DebugKit.Toolbar'); $this->Controller->components = array('DebugKit.Toolbar');
$this->Controller->constructClasses(); $this->Controller->constructClasses();
$this->Controller->Component->initialize($this->Controller); $this->Controller->Component->initialize($this->Controller);
$this->Controller->Component->startup($this->Controller); $this->Controller->Component->startup($this->Controller);
$this->Controller->Component->beforeRender($this->Controller); $this->Controller->Component->beforeRender($this->Controller);
$result = $this->Controller->render(); $result = $this->Controller->render();
$this->assertNoPattern('/debug-toolbar/', $result); $this->assertNoPattern('/debug-toolbar/', $result);
$result = $this->firecake->sentHeaders; $result = $this->firecake->sentHeaders;
$this->assertTrue(is_array($result)); $this->assertTrue(is_array($result));
} }
/** /**
* endTest() * endTest()
* *
* @return void * @return void
*/ */
function endTest() { function endTest() {
TestFireCake::reset(); TestFireCake::reset();
} }
/** /**
* reset the view paths * reset the view paths
* *
* @return void * @return void
**/ **/
function endCase() { function endCase() {
Configure::write('viewPaths', $this->_viewPaths); Configure::write('viewPaths', $this->_viewPaths);
} }
/** /**
* tearDown * tearDown
* *
* @access public * @access public
* @return void * @return void
*/ */
function tearDown() { function tearDown() {
unset($this->Toolbar, $this->Controller); unset($this->Toolbar, $this->Controller);
ClassRegistry::removeObject('view'); ClassRegistry::removeObject('view');
ClassRegistry::flush(); ClassRegistry::flush();
Router::reload(); Router::reload();
} }
} }
?> ?>

View File

@@ -1,358 +1,358 @@
<?php <?php
/* SVN FILE: $Id$ */ /* SVN FILE: $Id$ */
/** /**
* Toolbar HTML Helper Test Case * Toolbar HTML Helper Test Case
* *
* *
* *
* PHP versions 4 and 5 * PHP versions 4 and 5
* *
* CakePHP : Rapid Development Framework <http://www.cakephp.org/> * CakePHP : Rapid Development Framework <http://www.cakephp.org/>
* Copyright 2006-2008, Cake Software Foundation, Inc. * Copyright 2006-2008, Cake Software Foundation, Inc.
* 1785 E. Sahara Avenue, Suite 490-204 * 1785 E. Sahara Avenue, Suite 490-204
* Las Vegas, Nevada 89104 * Las Vegas, Nevada 89104
* *
* Licensed under The MIT License * Licensed under The MIT License
* Redistributions of files must retain the above copyright notice. * Redistributions of files must retain the above copyright notice.
* *
* @filesource * @filesource
* @copyright Copyright 2006-2008, Cake Software Foundation, Inc. * @copyright Copyright 2006-2008, Cake Software Foundation, Inc.
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
* @package cake * @package cake
* @subpackage debug_kit.tests.views.helpers * @subpackage debug_kit.tests.views.helpers
* @version $Revision$ * @version $Revision$
* @modifiedby $LastChangedBy$ * @modifiedby $LastChangedBy$
* @lastmodified $Date$ * @lastmodified $Date$
* @license http://www.opensource.org/licenses/mit-license.php The MIT License * @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/ */
App::import('Helper', array('DebugKit.HtmlToolbar', 'Html', 'Javascript')); App::import('Helper', array('DebugKit.HtmlToolbar', 'Html', 'Javascript'));
App::import('Core', array('View', 'Controller')); App::import('Core', array('View', 'Controller'));
class HtmlToolbarHelperTestCase extends CakeTestCase { class HtmlToolbarHelperTestCase extends CakeTestCase {
/** /**
* setUp * setUp
* *
* @return void * @return void
**/ **/
function setUp() { function setUp() {
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home')); Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::parse('/'); Router::parse('/');
$this->Toolbar = new ToolbarHelper(array('output' => 'DebugKit.HtmlToolbar')); $this->Toolbar =& new ToolbarHelper(array('output' => 'DebugKit.HtmlToolbar'));
$this->Toolbar->HtmlToolbar = new HtmlToolbarHelper(); $this->Toolbar->HtmlToolbar =& new HtmlToolbarHelper();
$this->Toolbar->HtmlToolbar->Html = new HtmlHelper(); $this->Toolbar->HtmlToolbar->Html =& new HtmlHelper();
$this->Toolbar->HtmlToolbar->Javascript = new JavascriptHelper(); $this->Toolbar->HtmlToolbar->Javascript =& new JavascriptHelper();
$this->Controller =& ClassRegistry::init('Controller'); $this->Controller =& ClassRegistry::init('Controller');
if (isset($this->_debug)) { if (isset($this->_debug)) {
Configure::write('debug', $this->_debug); Configure::write('debug', $this->_debug);
} }
} }
/** /**
* start Case - switch view paths * start Case - switch view paths
* *
* @return void * @return void
**/ **/
function startCase() { function startCase() {
$this->_viewPaths = Configure::read('viewPaths'); $this->_viewPaths = Configure::read('viewPaths');
Configure::write('viewPaths', array( Configure::write('viewPaths', array(
TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS, TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS,
APP . 'plugins' . DS . 'debug_kit' . DS . 'views'. DS, APP . 'plugins' . DS . 'debug_kit' . DS . 'views'. DS,
ROOT . DS . LIBS . 'view' . DS ROOT . DS . LIBS . 'view' . DS
)); ));
$this->_debug = Configure::read('debug'); $this->_debug = Configure::read('debug');
} }
/** /**
* test Neat Array formatting * test Neat Array formatting
* *
* @return void * @return void
**/ **/
function testMakeNeatArray() { function testMakeNeatArray() {
$in = false; $in = false;
$result = $this->Toolbar->makeNeatArray($in); $result = $this->Toolbar->makeNeatArray($in);
$expected = array( $expected = array(
'ul' => array('class' => 'neat-array depth-0'), 'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', '0' , '/strong', '(false)', '/li', '<li', '<strong', '0' , '/strong', '(false)', '/li',
'/ul' '/ul'
); );
$this->assertTags($result, $expected); $this->assertTags($result, $expected);
$in = null; $in = null;
$result = $this->Toolbar->makeNeatArray($in); $result = $this->Toolbar->makeNeatArray($in);
$expected = array( $expected = array(
'ul' => array('class' => 'neat-array depth-0'), 'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', '0' , '/strong', '(null)', '/li', '<li', '<strong', '0' , '/strong', '(null)', '/li',
'/ul' '/ul'
); );
$this->assertTags($result, $expected); $this->assertTags($result, $expected);
$in = true; $in = true;
$result = $this->Toolbar->makeNeatArray($in); $result = $this->Toolbar->makeNeatArray($in);
$expected = array( $expected = array(
'ul' => array('class' => 'neat-array depth-0'), 'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', '0' , '/strong', '(true)', '/li', '<li', '<strong', '0' , '/strong', '(true)', '/li',
'/ul' '/ul'
); );
$this->assertTags($result, $expected); $this->assertTags($result, $expected);
$in = array('key' => 'value'); $in = array('key' => 'value');
$result = $this->Toolbar->makeNeatArray($in); $result = $this->Toolbar->makeNeatArray($in);
$expected = array( $expected = array(
'ul' => array('class' => 'neat-array depth-0'), 'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', 'key', '/strong', 'value', '/li', '<li', '<strong', 'key', '/strong', 'value', '/li',
'/ul' '/ul'
); );
$this->assertTags($result, $expected); $this->assertTags($result, $expected);
$in = array('key' => null); $in = array('key' => null);
$result = $this->Toolbar->makeNeatArray($in); $result = $this->Toolbar->makeNeatArray($in);
$expected = array( $expected = array(
'ul' => array('class' => 'neat-array depth-0'), 'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', 'key', '/strong', '(null)', '/li', '<li', '<strong', 'key', '/strong', '(null)', '/li',
'/ul' '/ul'
); );
$this->assertTags($result, $expected); $this->assertTags($result, $expected);
$in = array('key' => 'value', 'foo' => 'bar'); $in = array('key' => 'value', 'foo' => 'bar');
$result = $this->Toolbar->makeNeatArray($in); $result = $this->Toolbar->makeNeatArray($in);
$expected = array( $expected = array(
'ul' => array('class' => 'neat-array depth-0'), 'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', 'key', '/strong', 'value', '/li', '<li', '<strong', 'key', '/strong', 'value', '/li',
'<li', '<strong', 'foo', '/strong', 'bar', '/li', '<li', '<strong', 'foo', '/strong', 'bar', '/li',
'/ul' '/ul'
); );
$this->assertTags($result, $expected); $this->assertTags($result, $expected);
$in = array( $in = array(
'key' => 'value', 'key' => 'value',
'foo' => array( 'foo' => array(
'this' => 'deep', 'this' => 'deep',
'another' => 'value' 'another' => 'value'
) )
); );
$result = $this->Toolbar->makeNeatArray($in); $result = $this->Toolbar->makeNeatArray($in);
$expected = array( $expected = array(
'ul' => array('class' => 'neat-array depth-0'), 'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', 'key', '/strong', 'value', '/li', '<li', '<strong', 'key', '/strong', 'value', '/li',
'<li', '<strong', 'foo', '/strong', '<li', '<strong', 'foo', '/strong',
array('ul' => array('class' => 'neat-array depth-1')), array('ul' => array('class' => 'neat-array depth-1')),
'<li', '<strong', 'this', '/strong', 'deep', '/li', '<li', '<strong', 'this', '/strong', 'deep', '/li',
'<li', '<strong', 'another', '/strong', 'value', '/li', '<li', '<strong', 'another', '/strong', 'value', '/li',
'/ul', '/ul',
'/li', '/li',
'/ul' '/ul'
); );
$this->assertTags($result, $expected); $this->assertTags($result, $expected);
$in = array( $in = array(
'key' => 'value', 'key' => 'value',
'foo' => array( 'foo' => array(
'this' => 'deep', 'this' => 'deep',
'another' => 'value' 'another' => 'value'
), ),
'lotr' => array( 'lotr' => array(
'gandalf' => 'wizard', 'gandalf' => 'wizard',
'bilbo' => 'hobbit' 'bilbo' => 'hobbit'
) )
); );
$result = $this->Toolbar->makeNeatArray($in, 1); $result = $this->Toolbar->makeNeatArray($in, 1);
$expected = array( $expected = array(
'ul' => array('class' => 'neat-array depth-0 expanded'), 'ul' => array('class' => 'neat-array depth-0 expanded'),
'<li', '<strong', 'key', '/strong', 'value', '/li', '<li', '<strong', 'key', '/strong', 'value', '/li',
'<li', '<strong', 'foo', '/strong', '<li', '<strong', 'foo', '/strong',
array('ul' => array('class' => 'neat-array depth-1')), array('ul' => array('class' => 'neat-array depth-1')),
'<li', '<strong', 'this', '/strong', 'deep', '/li', '<li', '<strong', 'this', '/strong', 'deep', '/li',
'<li', '<strong', 'another', '/strong', 'value', '/li', '<li', '<strong', 'another', '/strong', 'value', '/li',
'/ul', '/ul',
'/li', '/li',
'<li', '<strong', 'lotr', '/strong', '<li', '<strong', 'lotr', '/strong',
array('ul' => array('class' => 'neat-array depth-1')), array('ul' => array('class' => 'neat-array depth-1')),
'<li', '<strong', 'gandalf', '/strong', 'wizard', '/li', '<li', '<strong', 'gandalf', '/strong', 'wizard', '/li',
'<li', '<strong', 'bilbo', '/strong', 'hobbit', '/li', '<li', '<strong', 'bilbo', '/strong', 'hobbit', '/li',
'/ul', '/ul',
'/li', '/li',
'/ul' '/ul'
); );
$this->assertTags($result, $expected); $this->assertTags($result, $expected);
$result = $this->Toolbar->makeNeatArray($in, 2); $result = $this->Toolbar->makeNeatArray($in, 2);
$expected = array( $expected = array(
'ul' => array('class' => 'neat-array depth-0 expanded'), 'ul' => array('class' => 'neat-array depth-0 expanded'),
'<li', '<strong', 'key', '/strong', 'value', '/li', '<li', '<strong', 'key', '/strong', 'value', '/li',
'<li', '<strong', 'foo', '/strong', '<li', '<strong', 'foo', '/strong',
array('ul' => array('class' => 'neat-array depth-1 expanded')), array('ul' => array('class' => 'neat-array depth-1 expanded')),
'<li', '<strong', 'this', '/strong', 'deep', '/li', '<li', '<strong', 'this', '/strong', 'deep', '/li',
'<li', '<strong', 'another', '/strong', 'value', '/li', '<li', '<strong', 'another', '/strong', 'value', '/li',
'/ul', '/ul',
'/li', '/li',
'<li', '<strong', 'lotr', '/strong', '<li', '<strong', 'lotr', '/strong',
array('ul' => array('class' => 'neat-array depth-1 expanded')), array('ul' => array('class' => 'neat-array depth-1 expanded')),
'<li', '<strong', 'gandalf', '/strong', 'wizard', '/li', '<li', '<strong', 'gandalf', '/strong', 'wizard', '/li',
'<li', '<strong', 'bilbo', '/strong', 'hobbit', '/li', '<li', '<strong', 'bilbo', '/strong', 'hobbit', '/li',
'/ul', '/ul',
'/li', '/li',
'/ul' '/ul'
); );
$this->assertTags($result, $expected); $this->assertTags($result, $expected);
$in = array('key' => 'value', 'array' => array()); $in = array('key' => 'value', 'array' => array());
$result = $this->Toolbar->makeNeatArray($in); $result = $this->Toolbar->makeNeatArray($in);
$expected = array( $expected = array(
'ul' => array('class' => 'neat-array depth-0'), 'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', 'key', '/strong', 'value', '/li', '<li', '<strong', 'key', '/strong', 'value', '/li',
'<li', '<strong', 'array', '/strong', '(empty)', '/li', '<li', '<strong', 'array', '/strong', '(empty)', '/li',
'/ul' '/ul'
); );
$this->assertTags($result, $expected); $this->assertTags($result, $expected);
} }
/** /**
* Test injection of toolbar * Test injection of toolbar
* *
* @return void * @return void
**/ **/
function testInjectToolbar() { function testInjectToolbar() {
$this->Controller->viewPath = 'posts'; $this->Controller->viewPath = 'posts';
$this->Controller->action = 'index'; $this->Controller->action = 'index';
$this->Controller->params = array( $this->Controller->params = array(
'action' => 'index', 'action' => 'index',
'controller' => 'posts', 'controller' => 'posts',
'plugin' => null, 'plugin' => null,
'url' => array('url' => 'posts/index'), 'url' => array('url' => 'posts/index'),
'base' => null, 'base' => null,
'here' => '/posts/index', 'here' => '/posts/index',
); );
$this->Controller->helpers = array('Html', 'Javascript', 'DebugKit.Toolbar'); $this->Controller->helpers = array('Html', 'Javascript', 'DebugKit.Toolbar');
$this->Controller->layout = 'default'; $this->Controller->layout = 'default';
$this->Controller->uses = null; $this->Controller->uses = null;
$this->Controller->components = array('DebugKit.Toolbar'); $this->Controller->components = array('DebugKit.Toolbar');
$this->Controller->constructClasses(); $this->Controller->constructClasses();
$this->Controller->Component->initialize($this->Controller); $this->Controller->Component->initialize($this->Controller);
$this->Controller->Component->startup($this->Controller); $this->Controller->Component->startup($this->Controller);
$this->Controller->Component->beforeRender($this->Controller); $this->Controller->Component->beforeRender($this->Controller);
$result = $this->Controller->render(); $result = $this->Controller->render();
$result = str_replace(array("\n", "\r"), '', $result); $result = str_replace(array("\n", "\r"), '', $result);
$this->assertPattern('#<div id\="debug-kit-toolbar">.+</div></body>#', $result); $this->assertPattern('#<div id\="debug-kit-toolbar">.+</div></body>#', $result);
} }
/** /**
* test injection of javascript * test injection of javascript
* *
* @return void * @return void
**/ **/
function testJavascriptInjection() { function testJavascriptInjection() {
$this->Controller->viewPath = 'posts'; $this->Controller->viewPath = 'posts';
$this->Controller->uses = null; $this->Controller->uses = null;
$this->Controller->action = 'index'; $this->Controller->action = 'index';
$this->Controller->params = array( $this->Controller->params = array(
'action' => 'index', 'action' => 'index',
'controller' => 'posts', 'controller' => 'posts',
'plugin' => null, 'plugin' => null,
'url' => array('url' => 'posts/index'), 'url' => array('url' => 'posts/index'),
'base' => '/', 'base' => '/',
'here' => '/posts/index', 'here' => '/posts/index',
); );
$this->Controller->helpers = array('Javascript', 'Html'); $this->Controller->helpers = array('Javascript', 'Html');
$this->Controller->components = array('DebugKit.Toolbar'); $this->Controller->components = array('DebugKit.Toolbar');
$this->Controller->layout = 'default'; $this->Controller->layout = 'default';
$this->Controller->constructClasses(); $this->Controller->constructClasses();
$this->Controller->Component->initialize($this->Controller); $this->Controller->Component->initialize($this->Controller);
$this->Controller->Component->startup($this->Controller); $this->Controller->Component->startup($this->Controller);
$this->Controller->Component->beforeRender($this->Controller); $this->Controller->Component->beforeRender($this->Controller);
$result = $this->Controller->render(); $result = $this->Controller->render();
$result = str_replace(array("\n", "\r"), '', $result); $result = str_replace(array("\n", "\r"), '', $result);
$this->assertPattern('#<script\s*type="text/javascript"\s*src="/debug_kit/js/js_debug_toolbar.js"\s*>\s?</script>#', $result); $this->assertPattern('#<script\s*type="text/javascript"\s*src="/debug_kit/js/js_debug_toolbar.js"\s*>\s?</script>#', $result);
} }
/** /**
* test Injection of user defined javascript * test Injection of user defined javascript
* *
* @return void * @return void
**/ **/
function testCustomJavascriptInjection() { function testCustomJavascriptInjection() {
$this->Controller->viewPath = 'posts'; $this->Controller->viewPath = 'posts';
$this->Controller->uses = null; $this->Controller->uses = null;
$this->Controller->action = 'index'; $this->Controller->action = 'index';
$this->Controller->params = array( $this->Controller->params = array(
'action' => 'index', 'action' => 'index',
'controller' => 'posts', 'controller' => 'posts',
'plugin' => null, 'plugin' => null,
'url' => array('url' => 'posts/index'), 'url' => array('url' => 'posts/index'),
'base' => '/', 'base' => '/',
'here' => '/posts/index', 'here' => '/posts/index',
); );
$this->Controller->helpers = array('Javascript', 'Html'); $this->Controller->helpers = array('Javascript', 'Html');
$this->Controller->components = array('DebugKit.Toolbar' => array('javascript' => array('my_custom'))); $this->Controller->components = array('DebugKit.Toolbar' => array('javascript' => array('my_custom')));
$this->Controller->layout = 'default'; $this->Controller->layout = 'default';
$this->Controller->constructClasses(); $this->Controller->constructClasses();
$this->Controller->Component->initialize($this->Controller); $this->Controller->Component->initialize($this->Controller);
$this->Controller->Component->startup($this->Controller); $this->Controller->Component->startup($this->Controller);
$this->Controller->Component->beforeRender($this->Controller); $this->Controller->Component->beforeRender($this->Controller);
$result = $this->Controller->render(); $result = $this->Controller->render();
$result = str_replace(array("\n", "\r"), '', $result); $result = str_replace(array("\n", "\r"), '', $result);
$this->assertPattern('#<script\s*type="text/javascript"\s*src="js/my_custom_debug_toolbar.js"\s*>\s?</script>#', $result); $this->assertPattern('#<script\s*type="text/javascript"\s*src="js/my_custom_debug_toolbar.js"\s*>\s?</script>#', $result);
} }
/** /**
* test message creation * test message creation
* *
* @return void * @return void
*/ */
function testMessage() { function testMessage() {
$result = $this->Toolbar->message('test', 'one, two'); $result = $this->Toolbar->message('test', 'one, two');
$expected = array( $expected = array(
'<p', '<p',
'<strong', 'test', '/strong', '<strong', 'test', '/strong',
' one, two', ' one, two',
'/p', '/p',
); );
$this->assertTags($result, $expected); $this->assertTags($result, $expected);
} }
/** /**
* Test Table generation * Test Table generation
* *
* @return void * @return void
*/ */
function testTable() { function testTable() {
$rows = array( $rows = array(
array(1,2), array(1,2),
array(3,4), array(3,4),
); );
$result = $this->Toolbar->table($rows); $result = $this->Toolbar->table($rows);
$expected = array( $expected = array(
'table' => array('class' =>'debug-table'), 'table' => array('class' =>'debug-table'),
array('tr' => array('class' => 'odd')), array('tr' => array('class' => 'odd')),
'<td', '1', '/td', '<td', '1', '/td',
'<td', '2', '/td', '<td', '2', '/td',
'/tr', '/tr',
array('tr' => array('class' => 'even')), array('tr' => array('class' => 'even')),
'<td', '3', '/td', '<td', '3', '/td',
'<td', '4', '/td', '<td', '4', '/td',
'/tr', '/tr',
'/table' '/table'
); );
$this->assertTags($result, $expected); $this->assertTags($result, $expected);
} }
/** /**
* reset the view paths * reset the view paths
* *
* @return void * @return void
**/ **/
function endCase() { function endCase() {
Configure::write('viewPaths', $this->_viewPaths); Configure::write('viewPaths', $this->_viewPaths);
} }
/** /**
* tearDown * tearDown
* *
* @access public * @access public
* @return void * @return void
*/ */
function tearDown() { function tearDown() {
unset($this->Toolbar, $this->Controller); unset($this->Toolbar, $this->Controller);
ClassRegistry::removeObject('view'); ClassRegistry::removeObject('view');
ClassRegistry::flush(); ClassRegistry::flush();
} }
} }
?> ?>

View File

@@ -30,14 +30,14 @@ $timers = DebugKitDebugger::getTimers();
?> ?>
<h2><?php __('Timers'); ?></h2> <h2><?php __('Timers'); ?></h2>
<p class="request-time"> <p class="request-time">
<?php $totalTime = sprintf(__('%s (seconds)', true), DebugKitDebugger::requestTime()); ?> <?php $totalTime = sprintf(__('%s (seconds)', true), $number->precision(DebugKitDebugger::requestTime(), 6)); ?>
<?php echo $toolbar->message(__('Total Request Time:', true), $totalTime)?> <?php echo $toolbar->message(__('Total Request Time:', true), $totalTime)?>
</p> </p>
<?php foreach ($timers as $timerName => $timeInfo): <?php foreach ($timers as $timerName => $timeInfo):
$rows[] = array( $rows[] = array(
$timeInfo['message'], $timeInfo['message'],
$timeInfo['time'] $number->precision($timeInfo['time'], 6)
); );
$headers = array(__('Message', true), __('time in seconds', true)); $headers = array(__('Message', true), __('time in seconds', true));
endforeach; endforeach;