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

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

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

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!

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!

View File

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

View File

@@ -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';
} }
} }
?> ?>

View File

@@ -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);
} }

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,

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;
} }

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);
} }

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)) {

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);

View File

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

View File

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

View File

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

View File

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

View File

@@ -30,14 +30,14 @@ $timers = DebugKitDebugger::getTimers();
?> ?>
<h2><?php __('Timers'); ?></h2> <h2><?php __('Timers'); ?></h2>
<p class="request-time"> <p class="request-time">
<?php $totalTime = sprintf(__('%s (seconds)', true), DebugKitDebugger::requestTime()); ?> <?php $totalTime = sprintf(__('%.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;

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

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,
))); )));

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."),
); );
} }

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',

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();

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
*/ */

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);

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

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";

View File

@@ -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',

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'));

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

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');
} }
/** /**

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);

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

4
site/webroot/js/jquery-1.7.2.min.js vendored Normal file

File diff suppressed because one or more lines are too long