Compare commits

..

19 Commits

Author SHA1 Message Date
Abijah a3148cc17d Fixed bug that was using an existing entry, even when the source had been selected as new.
git-svn-id: file:///svn-source/pmgr/branches/hosted_migration_20130215@1029 97e9348a-65ac-dc4b-aefc-98561f571b83
2013-05-30 03:38:17 +00:00
Abijah c709f0bbf5 Prevent redirection when in dev mode, so that we can see the debug output from each page
git-svn-id: file:///svn-source/pmgr/branches/hosted_migration_20130215@1028 97e9348a-65ac-dc4b-aefc-98561f571b83
2013-05-30 03:36:38 +00:00
Abijah 8faafe7f4e Fixed a very long-standing but with a unclosed <div> tag. Also forced autocomplete to OFF for the new items. I wouldn't really care, but this was causing a bug with Chrome where the autocomplete was forcing the radio buttons to be unchecked.
git-svn-id: file:///svn-source/pmgr/branches/hosted_migration_20130215@1027 97e9348a-65ac-dc4b-aefc-98561f571b83
2013-05-30 03:35:55 +00:00
Abijah 4319847665 Bug fixes that have been made since going live.
git-svn-id: file:///svn-source/pmgr/branches/hosted_migration_20130215@1026 97e9348a-65ac-dc4b-aefc-98561f571b83
2013-05-30 02:04:42 +00:00
Abijah d22a69b510 Fix for annoying 400 error from apache on lunarpages when the requested url is a top level request without a trailing slash.
git-svn-id: file:///svn-source/pmgr/branches/hosted_migration_20130215@1025 97e9348a-65ac-dc4b-aefc-98561f571b83
2013-02-16 00:10:48 +00:00
Abijah e9028b7558 Fixed the rebuild mechanism to run directly without scripts
git-svn-id: file:///svn-source/pmgr/branches/hosted_migration_20130215@1024 97e9348a-65ac-dc4b-aefc-98561f571b83
2013-02-16 00:09:39 +00:00
Abijah 26559f3c59 Bug fixes to work with lunarpages
git-svn-id: file:///svn-source/pmgr/branches/hosted_migration_20130215@1023 97e9348a-65ac-dc4b-aefc-98561f571b83
2013-02-15 21:04:41 +00:00
abijah 4d24428a19 First pass at conversion for lunarpages. Untested as of yet, but this checkin will allow an svn export, and I can work on the bugs then.
git-svn-id: file:///svn-source/pmgr/branches/hosted_migration_20130215@1022 97e9348a-65ac-dc4b-aefc-98561f571b83
2013-02-15 19:08:29 +00:00
abijah 15fc04e690 Branch to prepare for moving from local server to a hosted machine on the cloud
git-svn-id: file:///svn-source/pmgr/branches/hosted_migration_20130215@1021 97e9348a-65ac-dc4b-aefc-98561f571b83
2013-02-15 16:59:27 +00:00
abijah 60254860b4 Releasing fixes, most notably the jqGrid update
git-svn-id: file:///svn-source/pmgr/tags/v0.3.2@1020 97e9348a-65ac-dc4b-aefc-98561f571b83
2012-11-17 18:26:03 +00:00
abijah 20284046c3 Fixed bug charging customers again when there is not charge through date.
git-svn-id: file:///svn-source/pmgr/branches/v0.3_work@1019 97e9348a-65ac-dc4b-aefc-98561f571b83
2012-11-17 18:20:48 +00:00
abijah 99a98cbc7d Added some minor view tweaks
git-svn-id: file:///svn-source/pmgr/branches/v0.3_work@1018 97e9348a-65ac-dc4b-aefc-98561f571b83
2012-11-17 18:18:36 +00:00
abijah fc9226594c Added customer link on the receipts page
git-svn-id: file:///svn-source/pmgr/branches/v0.3_work@1017 97e9348a-65ac-dc4b-aefc-98561f571b83
2012-08-07 00:14:54 +00:00
abijah 352bdbbf49 Fixed non-backward compatible jqGrid issue caused during upgrade from 3.8.x to 4.0.0 (grid.postext.js module is no longer supported and is now a plugin)
git-svn-id: file:///svn-source/pmgr/branches/v0.3_work@1016 97e9348a-65ac-dc4b-aefc-98561f571b83
2012-08-07 00:11:03 +00:00
abijah 11fbdf0701 Upgraded to jqGrid 4.4.0
git-svn-id: file:///svn-source/pmgr/branches/v0.3_work@1015 97e9348a-65ac-dc4b-aefc-98561f571b83
2012-08-06 17:57:49 +00:00
abijah 2519f4c8a7 Added support for account name and number on the deposit slips
git-svn-id: file:///svn-source/pmgr/branches/v0.3_work@1014 97e9348a-65ac-dc4b-aefc-98561f571b83
2012-08-06 17:33:21 +00:00
abijah b6ed57c02c Checking in changes from some time ago, changing the reports screen to give direct Quickbooks invoice and credits info.
git-svn-id: file:///svn-source/pmgr/branches/v0.3_work@1013 97e9348a-65ac-dc4b-aefc-98561f571b83
2012-06-14 01:32:44 +00:00
abijah 4dffa540a0 Fixed a long standing bug preventing proper display of the customer-contact relationship fields.
git-svn-id: file:///svn-source/pmgr/branches/v0.3_work@1010 97e9348a-65ac-dc4b-aefc-98561f571b83
2011-05-11 19:19:08 +00:00
abijah 3d1c4d2492 Added income / expense reports that produce results suitable for entry into quickbooks as per the current paradigm
git-svn-id: file:///svn-source/pmgr/branches/v0.3_work@1009 97e9348a-65ac-dc4b-aefc-98561f571b83
2011-03-30 16:57:28 +00:00
36 changed files with 2070 additions and 1255 deletions
+14 -19
View File
@@ -1,25 +1,20 @@
<IfModule mod_rewrite.c> <IfModule mod_rewrite.c>
RewriteEngine on RewriteEngine on
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L] RewriteRule ^$ webroot/ [L]
# Need this prevent a 400 error without trailing /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) webroot/$1 [L]
</IfModule> </IfModule>
# Lets deny everyone -- its a clean slate! # Need to make sure directories can't be listed, since the rewrite
order deny,allow # rule excludes rewriting when an actual directory is requested
deny from all Options -Indexes
# Now allow local access
# Localhost
# allow from 127.0.0
# Local subnet
# allow from 192.168.7
# Provide a mechanism for user authentication # Provide a mechanism for user authentication
AuthType Digest AuthType Basic
AuthName "Property Manager" AuthName "Valley Storage"
AuthUserFile "D:/Website/auth/pmgr.htpasswd" AuthUserFile "/home/perki2/valley_storage.pmgr.htpasswd"
Require valid-user Require valid-user
# Instead of satisfy all (too restrictive)
# This allows EITHER local domain OR authenticated user
satisfy any
+19 -6
View File
@@ -37,7 +37,7 @@
class AppController extends Controller { class AppController extends Controller {
var $uses = array('Option', 'Permission'); var $uses = array('Option', 'Permission');
var $helpers = array('Html', 'Form', 'Javascript', 'Format', 'Time', 'Grid'); var $helpers = array('Html', 'Form', 'Javascript', 'Format', 'Time', 'Grid');
var $components = array('DebugKit.Toolbar'); //var $components = array('DebugKit.Toolbar');
var $sidemenu = array('areas' => array('SITE' => false, 'REPORT' => false, 'CONTROLLER' => false, 'ACTION' => false, 'SANDBOX' => false)); var $sidemenu = array('areas' => array('SITE' => false, 'REPORT' => false, 'CONTROLLER' => false, 'ACTION' => false, 'SANDBOX' => false));
var $std_area = 10; var $std_area = 10;
@@ -278,8 +278,20 @@ class AppController extends Controller {
$this->addSideMenuLink('Unit Summary', $this->addSideMenuLink('Unit Summary',
array('controller' => 'units', 'action' => 'overview'), null, array('controller' => 'units', 'action' => 'overview'), null,
'REPORT'); 'REPORT');
$this->addSideMenuLink('Monthly Charges', /* $this->addSideMenuLink('Monthly Income', */
array('controller' => 'statement_entries', 'action' => 'chargesbymonth'), null, /* array('controller' => 'statement_entries', 'action' => 'incomebymonth'), null, */
/* 'REPORT'); */
/* $this->addSideMenuLink('Monthly Expenses', */
/* array('controller' => 'statement_entries', 'action' => 'expensebymonth'), null, */
/* 'REPORT'); */
$this->addSideMenuLink('Quickbook Invoice',
array('controller' => 'statement_entries', 'action' => 'incomebymonth', 4, 1), null,
'REPORT');
$this->addSideMenuLink('Quickbook Credits',
array('controller' => 'statement_entries', 'action' => 'expensebymonth', 4, 0), null,
'REPORT');
$this->addSideMenuLink('Monthly Net',
array('controller' => 'statement_entries', 'action' => 'netbymonth'), null,
'REPORT'); 'REPORT');
} }
else { else {
@@ -349,8 +361,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);
@@ -452,7 +464,8 @@ class AppController extends Controller {
App::import('Helper', 'Html'); App::import('Helper', 'Html');
$url = HtmlHelper::url($url, true); $url = HtmlHelper::url($url, true);
if (headers_sent()) { if (headers_sent() ||
($this->dev() && $this->Option->enabled('dev'))) {
// If we've already sent the headers, it's because // If we've already sent the headers, it's because
// we're debugging, and our debug output has gotten // we're debugging, and our debug output has gotten
// out before the redirect. That's probably a good // out before the redirect. That's probably a good
-5
View File
@@ -1,5 +0,0 @@
@echo off
mysqldump --user=pmgr --password=pmgruser --opt property_manager > H:\pmgr_dev.sql
mysql --user=pmgr --password=pmgruser --database=pmgr_dev < H:\pmgr_dev.sql
del H:\pmgr_dev.sql
echo Build Complete!
-5
View File
@@ -1,5 +0,0 @@
@echo off
mysqldump --user=pmgr --password=pmgruser --opt property_manager > H:\pmgr_sand.sql
mysql --user=pmgr --password=pmgruser --database=pmgr_sand < H:\pmgr_sand.sql
del H:\pmgr_sand.sql
echo Build Complete!
+1 -1
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
*/ */
+6 -6
View File
@@ -5,17 +5,17 @@ class DATABASE_CONFIG {
'driver' => 'mysql', 'driver' => 'mysql',
'persistent' => false, 'persistent' => false,
'host' => 'localhost', 'host' => 'localhost',
'login' => 'pmgr', 'login' => 'perki2_pmgruser',
'password' => 'pmgruser', 'password' => 'pmgrauth',
'database' => 'property_manager', 'database' => 'perki2_pmgr',
'prefix' => 'pmgr_', 'prefix' => '',
); );
function __construct() { function __construct() {
if (devbox()) if (devbox())
$this->default['database'] = 'pmgr_dev'; $this->default['database'] = 'perki2_pmgr_dev';
if (sandbox()) if (sandbox())
$this->default['database'] = 'pmgr_sand'; $this->default['database'] = 'perki2_pmgr_sand';
} }
} }
?> ?>
@@ -260,38 +260,65 @@ class StatementEntriesController extends AppController {
/************************************************************************** /**************************************************************************
************************************************************************** **************************************************************************
************************************************************************** **************************************************************************
* action: chargesbymonth * action: incexpbymonth
* - Displays charges by month * - Displays income and/or expenses by month
*/ */
function chargesbymonth($months = 12) { function incexpbymonth($accts, $security_deposits, $months) {
$datefrom = 'DATE(NOW() - INTERVAL '.($months-1).' MONTH - INTERVAL DAY(NOW())-1 DAY)';
$dateto = 'NOW()';
/* $datefrom = '"2009-01-01"'; */
/* $dateto = '"2012-12-31"'; */
$result = $this->StatementEntry->find $result = $this->StatementEntry->find
('all', ('all',
array('link' => array('Account' => array('fields' => 'name')), array('link' => array('Account' => array('fields' => 'name')),
'fields' => array_merge(array('MONTHNAME(effective_date) AS month', 'fields' => array_merge(array('MONTHNAME(effective_date) AS month',
'YEAR(effective_date) AS year'), 'YEAR(effective_date) AS year'),
$this->StatementEntry->chargeDisbursementFields(true)), $this->StatementEntry->chargeDisbursementFields(true)),
'conditions' => array('Account.type' => 'INCOME', 'conditions' => array('Account.type' => $accts,
'effective_date >= DATE(NOW() - INTERVAL '.($months-1).' MONTH - INTERVAL DAY(NOW())-1 DAY)', "effective_date >= $datefrom",
'effective_date <= NOW()', "effective_date <= $dateto",
), ),
'group' => array('YEAR(effective_date)', 'MONTH(effective_date)', 'Account.id'), 'group' => array('YEAR(effective_date)', 'MONTH(effective_date)', 'Account.id'),
'order' => array('YEAR(effective_date) DESC', 'MONTH(effective_date) DESC', 'Account.name'), 'order' => array('YEAR(effective_date) DESC', 'MONTH(effective_date) DESC', 'Account.type',
'IF(Account.id = '.$this->StatementEntry->Account->rentAccountID().', "---", Account.name)'),
)); ));
$overview = array('months' => array(), 'charges' => 0); if ($security_deposits) {
foreach ($result AS $row) { $sdresult = $this->StatementEntry->Transaction->LedgerEntry->find
('all',
array('link' => array('Transaction' => array('StatementEntry' => array('fields' => 'effective_date'),
'fields' => array()),
'Account' => array('fields' => 'name')),
'fields' => array_merge(array('MONTHNAME(effective_date) AS month',
'YEAR(effective_date) AS year'),
$this->StatementEntry->Transaction->LedgerEntry->debitCreditFields(true)),
'conditions' => array('LedgerEntry.account_id' => $this->StatementEntry->Account->securityDepositAccountID(),
"effective_date >= $datefrom",
"effective_date <= $dateto",
'StatementEntry.id = (SELECT MIN(id) FROM statement_entries WHERE transaction_id = `Transaction`.id)'
),
'group' => array('YEAR(effective_date)', 'MONTH(effective_date)', 'Account.id'),
'order' => array('YEAR(effective_date) DESC', 'MONTH(effective_date) DESC', 'Account.type', 'Account.name'),
));
} else {
$sdresult = array();
}
$overview = array('months' => array(), 'amount' => 0);
foreach (array_merge($result, $sdresult) AS $row) {
$mname = $row[0]['month'] .', '. $row[0]['year']; $mname = $row[0]['month'] .', '. $row[0]['year'];
if (empty($overview['months'][$mname])) if (empty($overview['months'][$mname]))
$overview['months'][$mname] = array('name' => $mname, $overview['months'][$mname] = array('name' => $mname,
'subs' => array(), 'subs' => array(),
'charges' => 0); 'amount' => 0);
$month = &$overview['months'][$mname]; $month = &$overview['months'][$mname];
$month['subs'][] = array('name' => $row['Account']['name'], $month['subs'][] = array('name' => $row['Account']['name'],
'charges' => $row[0]['balance']); 'amount' => $row[0]['balance']);
$month['charges'] += $row[0]['balance']; $month['amount'] += $row[0]['balance'];
$overview['charges'] += $row[0]['balance']; $overview['amount'] += $row[0]['balance'];
} }
// Enable the Reports menu section // Enable the Reports menu section
@@ -299,8 +326,26 @@ class StatementEntriesController extends AppController {
// Prepare to render. // Prepare to render.
$this->set('months', $months); $this->set('months', $months);
$this->set('title', 'Monthly Charges');
$this->set(compact('overview')); $this->set(compact('overview'));
$this->render('chargesbymonth');
}
function incomebymonth($months = 12, $invoice = false) {
$this->set('title', 'Monthly Gross Income');
$this->set('reptype', 'Gross Income');
$this->incexpbymonth(array('INCOME'), $invoice, $months);
}
function expensebymonth($months = 12) {
$this->set('title', 'Gross Monthly Expenses');
$this->set('reptype', 'Gross Expenses');
$this->incexpbymonth(array('EXPENSE'), false, $months);
}
function netbymonth($months = 12) {
$this->set('title', 'Net Monthly Income');
$this->set('reptype', 'Net Income');
$this->incexpbymonth(array('INCOME', 'EXPENSE'), true, $months);
} }
+3 -3
View File
@@ -468,7 +468,7 @@ class TransactionsController extends AppController {
function deposit_slip($id) { function deposit_slip($id) {
// Find the deposit transaction // Find the deposit transaction
$this->Transaction->id = $id; $this->Transaction->id = $id;
$deposit = $this->Transaction->find('first', array('contain' => false)); $deposit = $this->Transaction->find('first', array('contain' => array('Account')));
// Get a summary of all forms of tender in the deposit // Get a summary of all forms of tender in the deposit
$tenders = $this->Transaction->find $tenders = $this->Transaction->find
@@ -503,8 +503,8 @@ class TransactionsController extends AppController {
foreach ($deposit['types'] AS $type) foreach ($deposit['types'] AS $type)
$deposit_total += $type['total']; $deposit_total += $type['total'];
if ($deposit['Transaction']['amount'] != $deposit_total) if (abs($deposit['Transaction']['amount'] - $deposit_total) >= .001)
$this->INTERNAL_ERROR("Deposit items do not add up to deposit slip total"); $this->INTERNAL_ERROR("Deposit items ($deposit_total) do not add up to deposit slip total (".$deposit['Transaction']['amount'].")");
$this->addSideMenuLink('View', $this->addSideMenuLink('View',
array('action' => 'view', $id), null, array('action' => 'view', $id), null,
+2 -2
View File
@@ -91,8 +91,8 @@ class UnitSizesController extends AppController {
$fields[] = 'SUM(IF(' . $this->UnitSize->Unit->conditionUnavailable() . ', 1, 0)) AS unavailable'; $fields[] = 'SUM(IF(' . $this->UnitSize->Unit->conditionUnavailable() . ', 1, 0)) AS unavailable';
$fields[] = 'SUM(IF(' . $this->UnitSize->Unit->conditionAvailable() . ', 1, 0)) AS available'; $fields[] = 'SUM(IF(' . $this->UnitSize->Unit->conditionAvailable() . ', 1, 0)) AS available';
$fields[] = 'SUM(IF(' . $this->UnitSize->Unit->conditionOccupied() . ', 1, 0)) AS occupied'; $fields[] = 'SUM(IF(' . $this->UnitSize->Unit->conditionOccupied() . ', 1, 0)) AS occupied';
$fields[] = 'SUM(IF(' . $this->UnitSize->Unit->conditionOccupied() . ', 0, 1)) / COUNT(unit.id) AS vacancy'; $fields[] = 'SUM(IF(' . $this->UnitSize->Unit->conditionOccupied() . ', 0, 1)) / COUNT(Unit.id) AS vacancy';
$fields[] = 'SUM(IF(' . $this->UnitSize->Unit->conditionOccupied() . ', 1, 0)) / COUNT(unit.id) AS occupancy'; $fields[] = 'SUM(IF(' . $this->UnitSize->Unit->conditionOccupied() . ', 1, 0)) / COUNT(Unit.id) AS occupancy';
return $fields; return $fields;
} }
+7 -33
View File
@@ -4,31 +4,6 @@ class UtilController extends AppController {
var $uses = array(); var $uses = array();
/**************************************************************************
**************************************************************************
**************************************************************************
* function: reset_data
* - Development function. TO BE DELETED
*/
function reset_data() {
$this->layout = null;
$this->autoLayout = false;
$this->autoRender = false;
Configure::write('debug', '0');
$script = $_SERVER['DOCUMENT_ROOT'] . '/pmgr/build.cmd';
echo "<P>" . date('r') . "\n";
//echo "<P>Script: $script" . "\n";
$handle = popen($script . ' 2>&1', 'r');
//echo "<P>Handle: $handle; " . gettype($handle) . "\n";
echo "<P><PRE>\n";
while (($read = fread($handle, 2096))) {
echo $read;
}
echo "</PRE>\n";
pclose($handle);
}
/************************************************************************** /**************************************************************************
************************************************************************** **************************************************************************
************************************************************************** **************************************************************************
@@ -40,21 +15,20 @@ class UtilController extends AppController {
$this->autoLayout = false; $this->autoLayout = false;
$this->autoRender = false; $this->autoRender = false;
Configure::write('debug', '0'); Configure::write('debug', '0');
$script = preg_replace('%/webroot/index.php$%',
'/build_'.$type.'box.cmd',
$_SERVER['SCRIPT_FILENAME']);
// REVISIT <AP>: 20090828 $usrpass = '--user=perki2_pmgruser --password=pmgrauth';
// Just use system call $boxdb = 'perki2_pmgr_' . $type;
$handle = popen($script . ' 2>&1', 'r');
$handle = popen("mysqldump $usrpass --opt perki2_pmgr" .
" | mysql $usrpass --database=$boxdb", 'r');
while (($read = fread($handle, 2096))) { while (($read = fread($handle, 2096))) {
// Do nothing // Do nothing
} }
pclose($handle); pclose($handle);
$url = $_SERVER['HTTP_REFERER']; $url = $_SERVER['HTTP_REFERER'];
if (empty($url)) if (empty($url) || $url == 'undefined')
$url = "/"; $url = "/$type";
$this->redirect($url); $this->redirect($url);
} }
+1 -1
View File
@@ -91,7 +91,7 @@ class Contact extends AppModel {
// If the user has entered all new data, we need to // If the user has entered all new data, we need to
// save that as a brand new entry. // save that as a brand new entry.
if (!isset($item['id'])) { if (!isset($item['id']) || $item['source'] == 'new') {
$I = new $class(); $I = new $class();
$I->create(); $I->create();
if (!$I->save($item, false)) { if (!$I->save($item, false)) {
+2
View File
@@ -347,6 +347,8 @@ class Lease extends AppModel {
$this->pr(17, compact('date', 'charge_through_date') $this->pr(17, compact('date', 'charge_through_date')
+ array('date_str' => date('Y-m-d', $date), + array('date_str' => date('Y-m-d', $date),
'charge_through_date_str' => date('Y-m-d', $charge_through_date))); 'charge_through_date_str' => date('Y-m-d', $charge_through_date)));
if (!$charge_through_date)
return $this->prReturn(null);
if ($charge_through_date >= $date) if ($charge_through_date >= $date)
return $this->prReturn(null); return $this->prReturn(null);
@@ -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);
} }
} }
?> ?>
@@ -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);
} }
} }
?> ?>
@@ -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();
} }
} }
?> ?>
@@ -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();
} }
} }
?> ?>
@@ -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(__('%.6s (seconds)', true), DebugKitDebugger::requestTime()); ?>
<?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'] sprintf(__('%.6s', true), $timeInfo['time'])
); );
$headers = array(__('Message', true), __('time in seconds', true)); $headers = array(__('Message', true), __('time in seconds', true));
endforeach; endforeach;
+9
View File
@@ -0,0 +1,9 @@
abijah:Property Manager:a2369e3cc9e231ea6f02ce799a8b9970
anja:Property Manager:4539d5a6e58dd5895f2f3891d29705b0
kevin:Property Manager:f01accc9f5e5cdfc028dcf0cca837cf1
adam:Property Manager:ae6835569bb2fc0a0a4a773580ac8cda
shirley:Property Manager:e7e9d674c700796c99cdbf3cf105e739
admin:Property Manager:bab2226685d9b4b66220db8df80f1822
dev:Property Manager:e5c27b3c025e47239a45daceea2c0a00
vasst:Property Manager:523abc6c2b8458b463d5a9baa4f58f2e
answerfirst:Property Manager:6ac128447fab8be985c74ba7539c39b3
+1 -1
View File
@@ -100,7 +100,7 @@ echo $this->element('ledger_entries', array
'filter' => array('Account.id' => $account['id']), 'filter' => array('Account.id' => $account['id']),
'exclude' => array('Account', 'Amount', 'Cr/Dr', 'Balance', 'exclude' => array('Account', 'Amount', 'Cr/Dr', 'Balance',
empty($account['receipts']) ? 'Tender' : null), empty($account['receipts']) ? 'Tender' : null),
'include' => array('Debit', 'Credit', 'Sub-Total'), 'include' => array('Transaction', 'Debit', 'Credit', 'Sub-Total'),
'limit' => 50, 'limit' => 50,
))); )));
+15 -3
View File
@@ -68,7 +68,7 @@ function contactMethodDiv($obj, $type, $legend, $values = null) {
'</DIV>' . "\n" . '</DIV>' . "\n" .
// BEGIN method-div // BEGIN method-div
'<div id="'.$type.'-%{id}-method-div"' . "\n" . '<div id="'.$type.'-%{id}-method-div"' . '>' . "\n" .
$obj->element $obj->element
('form_table', ('form_table',
@@ -131,14 +131,18 @@ function contactMethodTypeDiv($obj, $type, $stype, $values = null) {
elseif ($stype === 'new') { elseif ($stype === 'new') {
$fields = array $fields = array
('type' => array('label_attributes' => array('class' => 'required'), ('type' => array('label_attributes' => array('class' => 'required'),
'opts' => array('options' => $obj->varstore['phoneTypes']), 'opts' => array('autocomplete' => 'off',
'options' => $obj->varstore['phoneTypes']),
'after' => "Physical type of the phone."), 'after' => "Physical type of the phone."),
'phone' => array('label_attributes' => array('class' => 'required empty'), 'phone' => array('label_attributes' => array('class' => 'required empty'),
'opts' => array('autocomplete' => 'off'),
'after' => "Required: Phone number."), 'after' => "Required: Phone number."),
'ext' => array('name' => "Extension", 'ext' => array('name' => "Extension",
'label_attributes' => array('class' => 'optional empty'), 'label_attributes' => array('class' => 'optional empty'),
'opts' => array('autocomplete' => 'off'),
'after' => "Optional: Extension number."), 'after' => "Optional: Extension number."),
'comment' => array('label_attributes' => array('class' => 'optional empty'), 'comment' => array('label_attributes' => array('class' => 'optional empty'),
'opts' => array('autocomplete' => 'off'),
'after' => "Optional: Comments about this phone number."), 'after' => "Optional: Comments about this phone number."),
); );
} }
@@ -167,17 +171,23 @@ function contactMethodTypeDiv($obj, $type, $stype, $values = null) {
elseif ($stype === 'new') { elseif ($stype === 'new') {
$fields = array $fields = array
('address' => array('label_attributes' => array('class' => 'required empty'), ('address' => array('label_attributes' => array('class' => 'required empty'),
'opts' => array('autocomplete' => 'off'),
'after' => "Required: First line of mailing address."), 'after' => "Required: First line of mailing address."),
'city' => array('label_attributes' => array('class' => 'required empty'), 'city' => array('label_attributes' => array('class' => 'required empty'),
'opts' => array('autocomplete' => 'off'),
'after' => "Required."), 'after' => "Required."),
'state' => array('label_attributes' => array('class' => 'required empty'), 'state' => array('label_attributes' => array('class' => 'required empty'),
'opts' => array('autocomplete' => 'off'),
'after' => "Required."), 'after' => "Required."),
'postcode' => array('name' => 'Zip Code', 'postcode' => array('name' => 'Zip Code',
'label_attributes' => array('class' => 'required empty'), 'label_attributes' => array('class' => 'required empty'),
'opts' => array('autocomplete' => 'off'),
'after' => "Required."), 'after' => "Required."),
'country' => array('label_attributes' => array('class' => 'optional empty'), 'country' => array('label_attributes' => array('class' => 'optional empty'),
'opts' => array('autocomplete' => 'off'),
'after' => "Optional: USA is presumed."), 'after' => "Optional: USA is presumed."),
'comment' => array('label_attributes' => array('class' => 'optional empty'), 'comment' => array('label_attributes' => array('class' => 'optional empty'),
'opts' => array('autocomplete' => 'off'),
'after' => "Optional: Comments about this mailing address."), 'after' => "Optional: Comments about this mailing address."),
); );
} }
@@ -208,8 +218,10 @@ function contactMethodTypeDiv($obj, $type, $stype, $values = null) {
elseif ($stype === 'new') { elseif ($stype === 'new') {
$fields = array $fields = array
('email' => array('label_attributes' => array('class' => 'required empty'), ('email' => array('label_attributes' => array('class' => 'required empty'),
'after' => "Required: E-mail address."), 'opts' => array('autocomplete' => 'off'),
'after' => "Required: E-mail address."),
'comment' => array('label_attributes' => array('class' => 'optional empty'), 'comment' => array('label_attributes' => array('class' => 'optional empty'),
'opts' => array('autocomplete' => 'off'),
'after' => "Optional: Comments about this email address."), 'after' => "Optional: Comments about this email address."),
); );
} }
+1 -1
View File
@@ -66,7 +66,7 @@ function customerContactDiv($obj, $values = null, $primary = false) {
'</DIV>' . "\n" . '</DIV>' . "\n" .
// BEGIN contact-div // BEGIN contact-div
'<div id="contact-%{id}-contact-div"' . "\n" . '<div id="contact-%{id}-contact-div">' . "\n" .
$obj->element $obj->element
('form_table', ('form_table',
+4 -1
View File
@@ -157,7 +157,10 @@ function onRowSelect(grid_id, customer_id) {
$("#customer-id").val(customer_id); $("#customer-id").val(customer_id);
// Set the customer name, so the user knows who the receipt is for // Set the customer name, so the user knows who the receipt is for
$("#receipt-customer-name").html($(grid_id).getCell(customer_id, 'Customer-name')); $("#receipt-customer-name")
.html('<A HREF="view/' + customer_id + '">'
+ $(grid_id).getCell(customer_id, 'Customer-name')
+ '</A>');
// Hide the "no customer" message and show the current customer // Hide the "no customer" message and show the current customer
$(".customer-selection-invalid").hide(); $(".customer-selection-invalid").hide();
+21
View File
@@ -105,6 +105,27 @@ echo $this->element('ledger_entries', array
))); )));
/**********************************************************************
* Invoice History
*/
/* NOT COMPLETED
echo $this->element('transactions', array
(// Grid configuration
'config' => array
('caption' => 'Invoices',
'limit' => 5,
'filter' => array('Customer.id' => $customer['Customer']['id'],
'Transaction.type' => 'INVOICE',
),
//'include' => array(),
'exclude' => array('Type'),
'remap' => array('ID' => 'Invoice',
//'Timestamp' => 'Date',
'Entries' => 'Charges'),
)));
NOT COMPLETED */
/********************************************************************** /**********************************************************************
* Lease History * Lease History
*/ */
+1
View File
@@ -50,6 +50,7 @@ if (!isset($grid_setup))
$html->css('ui.jqgrid', null, null, false); $html->css('ui.jqgrid', null, null, false);
$javascript->link('jqGrid/grid.locale-en', false); $javascript->link('jqGrid/grid.locale-en', false);
$javascript->link('jqGrid/jquery.jqGrid.min', false); $javascript->link('jqGrid/jquery.jqGrid.min', false);
$javascript->link('jqGrid/grid.postext', false);
$javascript->link('pmgr_jqGrid', false); $javascript->link('pmgr_jqGrid', false);
+1 -1
View File
@@ -11,8 +11,8 @@ $cols['ID'] = array('index' => 'Transaction.id', 'formatter' =
$cols['Type'] = array('index' => 'Transaction.type', 'formatter' => 'enum'); $cols['Type'] = array('index' => 'Transaction.type', 'formatter' => 'enum');
$cols['Customer'] = array('index' => 'Customer.name', 'formatter' => 'longname'); $cols['Customer'] = array('index' => 'Customer.name', 'formatter' => 'longname');
$cols['Timestamp'] = array('index' => 'Transaction.stamp', 'formatter' => 'date'); $cols['Timestamp'] = array('index' => 'Transaction.stamp', 'formatter' => 'date');
$cols['Amount'] = array('index' => 'Transaction.amount', 'formatter' => 'currency');
$cols['Entries'] = array('index' => 'entries', 'formatter' => 'number'); $cols['Entries'] = array('index' => 'entries', 'formatter' => 'number');
$cols['Amount'] = array('index' => 'Transaction.amount', 'formatter' => 'currency');
$cols['Comment'] = array('index' => 'Transaction.comment', 'formatter' => 'comment'); $cols['Comment'] = array('index' => 'Transaction.comment', 'formatter' => 'comment');
// Render the grid // Render the grid
+1 -1
View File
@@ -75,7 +75,7 @@
echo $html->css('print', null, array('media' => 'print')) . "\n"; echo $html->css('print', null, array('media' => 'print')) . "\n";
echo $html->css('sidemenu') . "\n"; echo $html->css('sidemenu') . "\n";
echo $javascript->link('jquery-1.3.2.min') . "\n"; echo $javascript->link('jquery-1.7.2.min') . "\n";
echo $javascript->link('jquery-ui-1.7.2.custom.min') . "\n"; echo $javascript->link('jquery-ui-1.7.2.custom.min') . "\n";
//echo $javascript->link($protocol . 'ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js') . "\n"; //echo $javascript->link($protocol . 'ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js') . "\n";
//echo $javascript->link($protocol . 'ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.js') . "\n"; //echo $javascript->link($protocol . 'ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.js') . "\n";
@@ -10,11 +10,11 @@ echo '<div class="statement_entry overview">' . "\n";
*/ */
$rows = array(); $rows = array();
$rows[] = array("$months Month Charges", FormatHelper::currency($overview['charges'])); $rows[] = array("$months Month Total", FormatHelper::currency($overview['amount']) . " / (" . FormatHelper::currency($overview['amount'] / $months) . " per month)");
echo $this->element('table', echo $this->element('table',
array('class' => 'item statement_entry detail', array('class' => 'item statement_entry detail',
'caption' => 'Monthly Charges', 'caption' => $reptype,
'rows' => $rows, 'rows' => $rows,
'column_class' => array('field', 'value'))); 'column_class' => array('field', 'value')));
@@ -38,11 +38,11 @@ foreach ($overview['months'] AS $month) {
$odd = 1; $odd = 1;
foreach ($month['subs'] AS $sub) { foreach ($month['subs'] AS $sub) {
$row_class[] = array('subitem', $odd ? 'oddrow' : 'evenrow'); $row_class[] = array('subitem', $odd ? 'oddrow' : 'evenrow');
$rows[] = array($sub['name'], FormatHelper::currency($sub['charges'])); $rows[] = array($sub['name'], FormatHelper::currency($sub['amount']));
$odd = !$odd; $odd = !$odd;
} }
$row_class[] = 'grand'; $row_class[] = 'grand';
$rows[] = array('Total for '.$month['name'], FormatHelper::currency($month['charges'])); $rows[] = array('Total for '.$month['name'], FormatHelper::currency($month['amount']));
} }
echo $this->element('table', echo $this->element('table',
+9 -2
View File
@@ -2,11 +2,18 @@
//style="display:inline; //style="display:inline;
echo('<H2 style="display:inline;">Deposit Slip: ' . echo('<H2 style="display:inline;">Deposit Slip: ' .
FormatHelper::datetime($deposit['Transaction']['stamp']) FormatHelper::date($deposit['Transaction']['stamp'])
. '</H2>' . "\n"); . '</H2><br>' . "\n");
/* echo('(' . */ /* echo('(' . */
/* FormatHelper::age($deposit['Transaction']['stamp'], 60) */ /* FormatHelper::age($deposit['Transaction']['stamp'], 60) */
/* . ')<BR>' . "\n"); */ /* . ')<BR>' . "\n"); */
if ($deposit['Account']['external_name'] || $deposit['Account']['external_account']) {
echo('<H2 style="display:inline;">' .
($deposit['Account']['external_name'] ? $deposit['Account']['external_name'] : '') .
($deposit['Account']['external_name'] && $deposit['Account']['external_account'] ? ': ' : '') .
($deposit['Account']['external_account'] ? 'Account #' . $deposit['Account']['external_account'] : '') .
'</H2><br>' . "\n");
}
//pr(compact('deposit')); //pr(compact('deposit'));
+11 -10
View File
@@ -95,16 +95,17 @@ if ($transaction['type'] === 'INVOICE' ||
* Ledger Entries * Ledger Entries
*/ */
echo $this->element('ledger_entries', array if (0) {
(// Grid configuration echo $this->element('ledger_entries', array
'config' => array (// Grid configuration
( 'config' => array
'caption' => 'Ledger Entries', (
'filter' => array('Transaction.id' => $transaction['id'], 'caption' => 'Ledger Entries',
'Account.id !=' => $account['id']), 'filter' => array('Transaction.id' => $transaction['id'],
'exclude' => array('Transaction'), 'Account.id !=' => $account['id']),
))); 'exclude' => array('Transaction'),
)));
}
/* /\********************************************************************** */ /* /\********************************************************************** */
/* * Tenders Deposited */ /* * Tenders Deposited */
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -55,7 +55,7 @@
* *
*/ */
if (!defined('CAKE_CORE_INCLUDE_PATH')) { if (!defined('CAKE_CORE_INCLUDE_PATH')) {
define('CAKE_CORE_INCLUDE_PATH', 'D:\Website\localhost\CakePHP'); define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . APP_DIR . DS . 'CakePHP');
} }
/** /**
+169 -1
View File
@@ -1 +1,169 @@
(function(a){a.jgrid={defaults:{recordtext:"View {0} - {1} of {2}",emptyrecords:"No records to view",loadtext:"Loading...",pgtext:"Page {0} of {1}"},search:{caption:"Search...",Find:"Find",Reset:"Reset",odata:["equal","not equal","less","less or equal","greater","greater or equal","begins with","does not begin with","is in","is not in","ends with","does not end with","contains","does not contain"],groupOps:[{op:"AND",text:"all"},{op:"OR",text:"any"}],matchText:" match",rulesText:" rules"},edit:{addCaption:"Add Record",editCaption:"Edit Record",bSubmit:"Submit",bCancel:"Cancel",bClose:"Close",saveData:"Data has been changed! Save changes?",bYes:"Yes",bNo:"No",bExit:"Cancel",msg:{required:"Field is required",number:"Please, enter valid number",minValue:"value must be greater than or equal to ",maxValue:"value must be less than or equal to",email:"is not a valid e-mail",integer:"Please, enter valid integer value",date:"Please, enter valid date value",url:"is not a valid URL. Prefix required ('http://' or 'https://')"}},view:{caption:"View Record",bClose:"Close"},del:{caption:"Delete",msg:"Delete selected record(s)?",bSubmit:"Delete",bCancel:"Cancel"},nav:{edittext:"",edittitle:"Edit selected row",addtext:"",addtitle:"Add new row",deltext:"",deltitle:"Delete selected row",searchtext:"",searchtitle:"Find records",refreshtext:"",refreshtitle:"Reload Grid",alertcap:"Warning",alerttext:"Please, select row",viewtext:"",viewtitle:"View selected row"},col:{caption:"Show/Hide Columns",bSubmit:"Submit",bCancel:"Cancel"},errors:{errcap:"Error",nourl:"No url is set",norecords:"No records to process",model:"Length of colNames <> colModel!"},formatter:{integer:{thousandsSeparator:" ",defaultValue:"0"},number:{decimalSeparator:".",thousandsSeparator:" ",decimalPlaces:2,defaultValue:"0.00"},currency:{decimalSeparator:".",thousandsSeparator:" ",decimalPlaces:2,prefix:"",suffix:"",defaultValue:"0.00"},date:{dayNames:["Sun","Mon","Tue","Wed","Thr","Fri","Sat","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","January","February","March","April","May","June","July","August","September","October","November","December"],AmPm:["am","pm","AM","PM"],S:function(b){return b<11||b>13?["st","nd","rd","th"][Math.min((b-1)%10,3)]:"th"},srcformat:"Y-m-d",newformat:"d/m/Y",masks:{ISO8601Long:"Y-m-d H:i:s",ISO8601Short:"Y-m-d",ShortDate:"n/j/Y",LongDate:"l, F d, Y",FullDateTime:"l, F d, Y g:i:s A",MonthDay:"F d",ShortTime:"g:i A",LongTime:"g:i:s A",SortableDateTime:"Y-m-d\\TH:i:s",UniversalSortableDateTime:"Y-m-d H:i:sO",YearMonth:"F, Y"},reformatAfterEdit:false},baseLinkUrl:"",showAction:"",target:"",checkbox:{disabled:true},idName:"id"}}})(jQuery); ;(function($){
/**
* jqGrid English Translation
* Tony Tomov tony@trirand.com
* http://trirand.com/blog/
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
**/
$.jgrid = $.jgrid || {};
$.extend($.jgrid,{
defaults : {
recordtext: "View {0} - {1} of {2}",
emptyrecords: "No records to view",
loadtext: "Loading...",
pgtext : "Page {0} of {1}"
},
search : {
caption: "Search...",
Find: "Find",
Reset: "Reset",
odata : ['equal', 'not equal', 'less', 'less or equal','greater','greater or equal', 'begins with','does not begin with','is in','is not in','ends with','does not end with','contains','does not contain'],
groupOps: [ { op: "AND", text: "all" }, { op: "OR", text: "any" } ],
matchText: " match",
rulesText: " rules"
},
edit : {
addCaption: "Add Record",
editCaption: "Edit Record",
bSubmit: "Submit",
bCancel: "Cancel",
bClose: "Close",
saveData: "Data has been changed! Save changes?",
bYes : "Yes",
bNo : "No",
bExit : "Cancel",
msg: {
required:"Field is required",
number:"Please, enter valid number",
minValue:"value must be greater than or equal to ",
maxValue:"value must be less than or equal to",
email: "is not a valid e-mail",
integer: "Please, enter valid integer value",
date: "Please, enter valid date value",
url: "is not a valid URL. Prefix required ('http://' or 'https://')",
nodefined : " is not defined!",
novalue : " return value is required!",
customarray : "Custom function should return array!",
customfcheck : "Custom function should be present in case of custom checking!"
}
},
view : {
caption: "View Record",
bClose: "Close"
},
del : {
caption: "Delete",
msg: "Delete selected record(s)?",
bSubmit: "Delete",
bCancel: "Cancel"
},
nav : {
edittext: "",
edittitle: "Edit selected row",
addtext:"",
addtitle: "Add new row",
deltext: "",
deltitle: "Delete selected row",
searchtext: "",
searchtitle: "Find records",
refreshtext: "",
refreshtitle: "Reload Grid",
alertcap: "Warning",
alerttext: "Please, select row",
viewtext: "",
viewtitle: "View selected row"
},
col : {
caption: "Select columns",
bSubmit: "Ok",
bCancel: "Cancel"
},
errors : {
errcap : "Error",
nourl : "No url is set",
norecords: "No records to process",
model : "Length of colNames <> colModel!"
},
formatter : {
integer : {thousandsSeparator: ",", defaultValue: '0'},
number : {decimalSeparator:".", thousandsSeparator: ",", decimalPlaces: 2, defaultValue: '0.00'},
currency : {decimalSeparator:".", thousandsSeparator: ",", decimalPlaces: 2, prefix: "", suffix:"", defaultValue: '0.00'},
date : {
dayNames: [
"Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat",
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
],
monthNames: [
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
],
AmPm : ["am","pm","AM","PM"],
S: function (j) {return j < 11 || j > 13 ? ['st', 'nd', 'rd', 'th'][Math.min((j - 1) % 10, 3)] : 'th';},
srcformat: 'Y-m-d',
newformat: 'n/j/Y',
masks : {
// see http://php.net/manual/en/function.date.php for PHP format used in jqGrid
// and see http://docs.jquery.com/UI/Datepicker/formatDate
// and https://github.com/jquery/globalize#dates for alternative formats used frequently
// one can find on https://github.com/jquery/globalize/tree/master/lib/cultures many
// information about date, time, numbers and currency formats used in different countries
// one should just convert the information in PHP format
ISO8601Long:"Y-m-d H:i:s",
ISO8601Short:"Y-m-d",
// short date:
// n - Numeric representation of a month, without leading zeros
// j - Day of the month without leading zeros
// Y - A full numeric representation of a year, 4 digits
// example: 3/1/2012 which means 1 March 2012
ShortDate: "n/j/Y", // in jQuery UI Datepicker: "M/d/yyyy"
// long date:
// l - A full textual representation of the day of the week
// F - A full textual representation of a month
// d - Day of the month, 2 digits with leading zeros
// Y - A full numeric representation of a year, 4 digits
LongDate: "l, F d, Y", // in jQuery UI Datepicker: "dddd, MMMM dd, yyyy"
// long date with long time:
// l - A full textual representation of the day of the week
// F - A full textual representation of a month
// d - Day of the month, 2 digits with leading zeros
// Y - A full numeric representation of a year, 4 digits
// g - 12-hour format of an hour without leading zeros
// i - Minutes with leading zeros
// s - Seconds, with leading zeros
// A - Uppercase Ante meridiem and Post meridiem (AM or PM)
FullDateTime: "l, F d, Y g:i:s A", // in jQuery UI Datepicker: "dddd, MMMM dd, yyyy h:mm:ss tt"
// month day:
// F - A full textual representation of a month
// d - Day of the month, 2 digits with leading zeros
MonthDay: "F d", // in jQuery UI Datepicker: "MMMM dd"
// short time (without seconds)
// g - 12-hour format of an hour without leading zeros
// i - Minutes with leading zeros
// A - Uppercase Ante meridiem and Post meridiem (AM or PM)
ShortTime: "g:i A", // in jQuery UI Datepicker: "h:mm tt"
// long time (with seconds)
// g - 12-hour format of an hour without leading zeros
// i - Minutes with leading zeros
// s - Seconds, with leading zeros
// A - Uppercase Ante meridiem and Post meridiem (AM or PM)
LongTime: "g:i:s A", // in jQuery UI Datepicker: "h:mm:ss tt"
SortableDateTime: "Y-m-d\\TH:i:s",
UniversalSortableDateTime: "Y-m-d H:i:sO",
// month with year
// Y - A full numeric representation of a year, 4 digits
// F - A full textual representation of a month
YearMonth: "F, Y" // in jQuery UI Datepicker: "MMMM, yyyy"
},
reformatAfterEdit : false
},
baseLinkUrl: '',
showAction: '',
target: '',
checkbox : {disabled:true},
idName : 'id'
}
});
})(jQuery);
+64
View File
@@ -0,0 +1,64 @@
;(function($){
/**
* jqGrid extension
* Paul Tiseo ptiseo@wasteconsultants.com
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl-2.0.html
**/
$.jgrid.extend({
getPostData : function(){
var $t = this[0];
if(!$t.grid) { return; }
return $t.p.postData;
},
setPostData : function( newdata ) {
var $t = this[0];
if(!$t.grid) { return; }
// check if newdata is correct type
if ( typeof(newdata) === 'object' ) {
$t.p.postData = newdata;
}
else {
alert("Error: cannot add a non-object postData value. postData unchanged.");
}
},
appendPostData : function( newdata ) {
var $t = this[0];
if(!$t.grid) { return; }
// check if newdata is correct type
if ( typeof(newdata) === 'object' ) {
$.extend($t.p.postData, newdata);
}
else {
alert("Error: cannot append a non-object postData value. postData unchanged.");
}
},
setPostDataItem : function( key, val ) {
var $t = this[0];
if(!$t.grid) { return; }
$t.p.postData[key] = val;
},
getPostDataItem : function( key ) {
var $t = this[0];
if(!$t.grid) { return; }
return $t.p.postData[key];
},
removePostDataItem : function( key ) {
var $t = this[0];
if(!$t.grid) { return; }
delete $t.p.postData[key];
},
getUserData : function(){
var $t = this[0];
if(!$t.grid) { return; }
return $t.p.userData;
},
getUserDataItem : function( key ) {
var $t = this[0];
if(!$t.grid) { return; }
return $t.p.userData[key];
}
});
})(jQuery);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long