From cd7b4628c31fc0d5c3b5b72c64f7775ffb21492d Mon Sep 17 00:00:00 2001
From: Marek Sebera
Date: Tue, 22 Jan 2013 23:12:03 +0100
Subject: [PATCH] initial commit
---
app/.htaccess | 5 +
app/Console/Command/AppShell.php | 31 +
app/Console/Command/Task/empty | 0
app/Console/Templates/empty | 0
app/Console/cake | 33 +
app/Console/cake.bat | 32 +
app/Console/cake.php | 33 +
app/Controller/AppController.php | 35 ++
app/Controller/ItemsController.php | 8 +
app/Controller/UsersController.php | 7 +
app/Lib/empty | 0
app/Locale/eng/LC_MESSAGES/empty | 0
app/Model/AppModel.php | 34 ++
app/Model/Behavior/empty | 0
app/Model/Datasource/empty | 0
app/Model/Item.php | 8 +
app/Model/User.php | 8 +
app/Plugin/empty | 0
app/Test/Case/Controller/Component/empty | 0
app/Test/Case/Model/Behavior/empty | 0
app/Test/Case/View/Helper/empty | 0
app/Test/Fixture/empty | 0
app/Vendor/empty | 0
app/View/Elements/empty | 0
app/View/Emails/html/default.ctp | 25 +
app/View/Emails/text/default.ctp | 19 +
app/View/Errors/error400.ctp | 31 +
app/View/Errors/error500.ctp | 28 +
app/View/Helper/AppHelper.php | 34 ++
app/View/Items/scaffold.index.ctp | 106 ++++
app/View/Layouts/Emails/html/default.ctp | 29 +
app/View/Layouts/Emails/text/default.ctp | 21 +
app/View/Layouts/ajax.ctp | 19 +
app/View/Layouts/default.ctp | 32 +
app/View/Layouts/error.ctp | 61 ++
app/View/Layouts/flash.ctp | 37 ++
app/View/Layouts/js/default.ctp | 2 +
app/View/Layouts/rss/default.ctp | 14 +
app/View/Layouts/xml/default.ctp | 1 +
app/View/Pages/home.ctp | 188 ++++++
app/View/Scaffolds/empty | 0
app/index.php | 17 +
app/webroot/.htaccess | 6 +
app/webroot/css/cake.generic.css | 741 +++++++++++++++++++++++
app/webroot/favicon.ico | Bin 0 -> 372 bytes
app/webroot/files/empty | 0
app/webroot/img/brmlab.png | Bin 0 -> 12230 bytes
app/webroot/img/cake.icon.png | Bin 0 -> 943 bytes
app/webroot/img/cake.power.gif | Bin 0 -> 201 bytes
app/webroot/img/test-error-icon.png | Bin 0 -> 3358 bytes
app/webroot/img/test-fail-icon.png | Bin 0 -> 496 bytes
app/webroot/img/test-pass-icon.png | Bin 0 -> 783 bytes
app/webroot/img/test-skip-icon.png | Bin 0 -> 1207 bytes
app/webroot/index.php | 92 +++
app/webroot/js/empty | 0
app/webroot/test.php | 92 +++
56 files changed, 1829 insertions(+)
create mode 100644 app/.htaccess
create mode 100644 app/Console/Command/AppShell.php
create mode 100644 app/Console/Command/Task/empty
create mode 100644 app/Console/Templates/empty
create mode 100755 app/Console/cake
create mode 100644 app/Console/cake.bat
create mode 100644 app/Console/cake.php
create mode 100644 app/Controller/AppController.php
create mode 100644 app/Controller/ItemsController.php
create mode 100644 app/Controller/UsersController.php
create mode 100644 app/Lib/empty
create mode 100644 app/Locale/eng/LC_MESSAGES/empty
create mode 100644 app/Model/AppModel.php
create mode 100644 app/Model/Behavior/empty
create mode 100644 app/Model/Datasource/empty
create mode 100644 app/Model/Item.php
create mode 100644 app/Model/User.php
create mode 100644 app/Plugin/empty
create mode 100644 app/Test/Case/Controller/Component/empty
create mode 100644 app/Test/Case/Model/Behavior/empty
create mode 100644 app/Test/Case/View/Helper/empty
create mode 100644 app/Test/Fixture/empty
create mode 100644 app/Vendor/empty
create mode 100644 app/View/Elements/empty
create mode 100644 app/View/Emails/html/default.ctp
create mode 100644 app/View/Emails/text/default.ctp
create mode 100644 app/View/Errors/error400.ctp
create mode 100644 app/View/Errors/error500.ctp
create mode 100644 app/View/Helper/AppHelper.php
create mode 100644 app/View/Items/scaffold.index.ctp
create mode 100644 app/View/Layouts/Emails/html/default.ctp
create mode 100644 app/View/Layouts/Emails/text/default.ctp
create mode 100644 app/View/Layouts/ajax.ctp
create mode 100644 app/View/Layouts/default.ctp
create mode 100644 app/View/Layouts/error.ctp
create mode 100644 app/View/Layouts/flash.ctp
create mode 100644 app/View/Layouts/js/default.ctp
create mode 100644 app/View/Layouts/rss/default.ctp
create mode 100644 app/View/Layouts/xml/default.ctp
create mode 100644 app/View/Pages/home.ctp
create mode 100644 app/View/Scaffolds/empty
create mode 100644 app/index.php
create mode 100644 app/webroot/.htaccess
create mode 100644 app/webroot/css/cake.generic.css
create mode 100644 app/webroot/favicon.ico
create mode 100644 app/webroot/files/empty
create mode 100644 app/webroot/img/brmlab.png
create mode 100644 app/webroot/img/cake.icon.png
create mode 100644 app/webroot/img/cake.power.gif
create mode 100644 app/webroot/img/test-error-icon.png
create mode 100644 app/webroot/img/test-fail-icon.png
create mode 100644 app/webroot/img/test-pass-icon.png
create mode 100644 app/webroot/img/test-skip-icon.png
create mode 100644 app/webroot/index.php
create mode 100644 app/webroot/js/empty
create mode 100644 app/webroot/test.php
diff --git a/app/.htaccess b/app/.htaccess
new file mode 100644
index 0000000..fc3aac4
--- /dev/null
+++ b/app/.htaccess
@@ -0,0 +1,5 @@
+
+ RewriteEngine on
+ RewriteRule ^$ webroot/ [L]
+ RewriteRule (.*) webroot/$1 [L]
+
\ No newline at end of file
diff --git a/app/Console/Command/AppShell.php b/app/Console/Command/AppShell.php
new file mode 100644
index 0000000..5cc915f
--- /dev/null
+++ b/app/Console/Command/AppShell.php
@@ -0,0 +1,31 @@
+
+ ' . $line . "
\n";
+endforeach;
+?>
\ No newline at end of file
diff --git a/app/View/Emails/text/default.ctp b/app/View/Emails/text/default.ctp
new file mode 100644
index 0000000..56be8c1
--- /dev/null
+++ b/app/View/Emails/text/default.ctp
@@ -0,0 +1,19 @@
+
+
\ No newline at end of file
diff --git a/app/View/Errors/error400.ctp b/app/View/Errors/error400.ctp
new file mode 100644
index 0000000..6d50860
--- /dev/null
+++ b/app/View/Errors/error400.ctp
@@ -0,0 +1,31 @@
+
+
+
+ :
+ '{$url}'"
+ ); ?>
+
+ 0 ):
+ echo $this->element('exception_stack_trace');
+endif;
+?>
diff --git a/app/View/Errors/error500.ctp b/app/View/Errors/error500.ctp
new file mode 100644
index 0000000..4e1f36e
--- /dev/null
+++ b/app/View/Errors/error500.ctp
@@ -0,0 +1,28 @@
+
+
+
+ :
+
+
+ 0 ):
+ echo $this->element('exception_stack_trace');
+endif;
+?>
diff --git a/app/View/Helper/AppHelper.php b/app/View/Helper/AppHelper.php
new file mode 100644
index 0000000..0fddaea
--- /dev/null
+++ b/app/View/Helper/AppHelper.php
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+ Paginator->sort($_field); ?> |
+
+ |
+
+';
+ foreach ($scaffoldFields as $_field) {
+ if($_field == "id") continue;
+ $isKey = false;
+ if (!empty($associations['belongsTo'])) {
+ foreach ($associations['belongsTo'] as $_alias => $_details) {
+ if ($_field === $_details['foreignKey']) {
+ $isKey = true;
+ echo '' . $this->Html->link(${$singularVar}[$_alias][$_details['displayField']], array('controller' => $_details['controller'], 'action' => 'view', ${$singularVar}[$_alias][$_details['primaryKey']])) . ' | ';
+ break;
+ }
+ }
+ }
+ if ($isKey !== true) {
+ echo '' . h(${$singularVar}[$modelClass][$_field]) . ' | ';
+ }
+ }
+
+ echo '';
+ echo $this->Html->link(__d('cake', 'View'), array('action' => 'view', ${$singularVar}[$modelClass][$primaryKey]));
+ echo ' ' . $this->Html->link(__d('cake', 'Edit'), array('action' => 'edit', ${$singularVar}[$modelClass][$primaryKey]));
+ echo ' ' . $this->Form->postLink(
+ __d('cake', 'Delete'),
+ array('action' => 'delete', ${$singularVar}[$modelClass][$primaryKey]),
+ null,
+ __d('cake', 'Are you sure you want to delete').' #' . ${$singularVar}[$modelClass][$primaryKey]
+ );
+ echo ' | ';
+ echo '';
+
+endforeach;
+
+?>
+
+
Paginator->counter(array(
+ 'format' => __d('cake', 'Page {:page} of {:pages}, showing {:current} records out of {:count} total, starting on record {:start}, ending on {:end}')
+ ));
+ ?>
+
+ Paginator->prev('< ' . __d('cake', 'previous'), array(), null, array('class' => 'prev disabled'));
+ echo $this->Paginator->numbers(array('separator' => ''));
+ echo $this->Paginator->next(__d('cake', 'next') .' >', array(), null, array('class' => 'next disabled'));
+ ?>
+
+
+
+
+
+ - Html->link(__d('cake', 'New %s', $singularHumanName), array('action' => 'add')); ?>
+ $_data) {
+ foreach ($_data as $_alias => $_details) {
+ if ($_details['controller'] != $this->name && !in_array($_details['controller'], $done)) {
+ echo '- ';
+ echo $this->Html->link(
+ __d('cake', 'List %s', Inflector::humanize($_details['controller'])),
+ array('plugin' => $_details['plugin'], 'controller' => $_details['controller'], 'action' => 'index')
+ );
+ echo '
';
+
+ echo '- ';
+ echo $this->Html->link(
+ __d('cake', 'New %s', Inflector::humanize(Inflector::underscore($_alias))),
+ array('plugin' => $_details['plugin'], 'controller' => $_details['controller'], 'action' => 'add')
+ );
+ echo '
';
+ $done[] = $_details['controller'];
+ }
+ }
+ }
+?>
+
+
diff --git a/app/View/Layouts/Emails/html/default.ctp b/app/View/Layouts/Emails/html/default.ctp
new file mode 100644
index 0000000..e574a9b
--- /dev/null
+++ b/app/View/Layouts/Emails/html/default.ctp
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+ fetch('content');?>
+
+ This email was sent using the CakePHP Framework
+
+
\ No newline at end of file
diff --git a/app/View/Layouts/Emails/text/default.ctp b/app/View/Layouts/Emails/text/default.ctp
new file mode 100644
index 0000000..c2a683a
--- /dev/null
+++ b/app/View/Layouts/Emails/text/default.ctp
@@ -0,0 +1,21 @@
+
+fetch('content');?>
+
+This email was sent using the CakePHP Framework, http://cakephp.org.
diff --git a/app/View/Layouts/ajax.ctp b/app/View/Layouts/ajax.ctp
new file mode 100644
index 0000000..c0da850
--- /dev/null
+++ b/app/View/Layouts/ajax.ctp
@@ -0,0 +1,19 @@
+
+fetch('content'); ?>
diff --git a/app/View/Layouts/default.ctp b/app/View/Layouts/default.ctp
new file mode 100644
index 0000000..9e1352e
--- /dev/null
+++ b/app/View/Layouts/default.ctp
@@ -0,0 +1,32 @@
+
+
+
+ Html->charset(); ?>
+
+ BrmSklad:
+
+
+ Html->meta('icon');
+ echo $this->Html->css('cake.generic');
+
+ echo $this->fetch('meta');
+ echo $this->fetch('css');
+ echo $this->fetch('script');
+ ?>
+
+
+
+
+
+
+ Session->flash(); ?>
+
+ fetch('content'); ?>
+
+
+ element('sql_dump'); ?>
+
+
diff --git a/app/View/Layouts/error.ctp b/app/View/Layouts/error.ctp
new file mode 100644
index 0000000..4947734
--- /dev/null
+++ b/app/View/Layouts/error.ctp
@@ -0,0 +1,61 @@
+
+
+
+
+ Html->charset(); ?>
+
+ :
+
+
+ Html->meta('icon');
+
+ echo $this->Html->css('cake.generic');
+
+ echo $this->fetch('meta');
+ echo $this->fetch('css');
+ echo $this->fetch('script');
+ ?>
+
+
+
+
+
+
+ Session->flash(); ?>
+
+ fetch('content'); ?>
+
+
+
+ element('sql_dump'); ?>
+
+
diff --git a/app/View/Layouts/flash.ctp b/app/View/Layouts/flash.ctp
new file mode 100644
index 0000000..76fae34
--- /dev/null
+++ b/app/View/Layouts/flash.ctp
@@ -0,0 +1,37 @@
+
+
+
+
+Html->charset(); ?>
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/View/Layouts/js/default.ctp b/app/View/Layouts/js/default.ctp
new file mode 100644
index 0000000..7239b5d
--- /dev/null
+++ b/app/View/Layouts/js/default.ctp
@@ -0,0 +1,2 @@
+
+
diff --git a/app/View/Layouts/rss/default.ctp b/app/View/Layouts/rss/default.ctp
new file mode 100644
index 0000000..077de61
--- /dev/null
+++ b/app/View/Layouts/rss/default.ctp
@@ -0,0 +1,14 @@
+Rss->document(
+ $this->Rss->channel(
+ array(), $channel, $this->fetch('content')
+ )
+);
+?>
diff --git a/app/View/Layouts/xml/default.ctp b/app/View/Layouts/xml/default.ctp
new file mode 100644
index 0000000..fbd5ee0
--- /dev/null
+++ b/app/View/Layouts/xml/default.ctp
@@ -0,0 +1 @@
+fetch('content'); ?>
diff --git a/app/View/Pages/home.ctp b/app/View/Pages/home.ctp
new file mode 100644
index 0000000..9a22923
--- /dev/null
+++ b/app/View/Pages/home.ctp
@@ -0,0 +1,188 @@
+
+
+
+
+ 0):
+ Debugger::checkSecurityKeys();
+endif;
+?>
+
+
+ 1) Help me configure it
+ 2) I don't / can't use URL rewriting
+
+
+=')):
+ echo '';
+ echo __d('cake_dev', 'Your version of PHP is 5.2.8 or higher.');
+ echo '';
+ else:
+ echo '';
+ echo __d('cake_dev', 'Your version of PHP is too low. You need PHP 5.2.8 or higher to use CakePHP.');
+ echo '';
+ endif;
+?>
+
+
+ ';
+ echo __d('cake_dev', 'Your tmp directory is writable.');
+ echo '';
+ else:
+ echo '';
+ echo __d('cake_dev', 'Your tmp directory is NOT writable.');
+ echo '';
+ endif;
+ ?>
+
+
+ ';
+ echo __d('cake_dev', 'The %s is being used for core caching. To change the config edit APP/Config/core.php ', ''. $settings['engine'] . 'Engine');
+ echo '';
+ else:
+ echo '';
+ echo __d('cake_dev', 'Your cache is NOT working. Please check the settings in APP/Config/core.php');
+ echo '';
+ endif;
+ ?>
+
+
+ ';
+ echo __d('cake_dev', 'Your database configuration file is present.');
+ $filePresent = true;
+ echo '';
+ else:
+ echo '';
+ echo __d('cake_dev', 'Your database configuration file is NOT present.');
+ echo '
';
+ echo __d('cake_dev', 'Rename APP/Config/database.php.default to APP/Config/database.php');
+ echo '';
+ endif;
+ ?>
+
+
+
+ isConnected()):
+ echo '';
+ echo __d('cake_dev', 'Cake is able to connect to the database.');
+ echo '';
+ else:
+ echo '';
+ echo __d('cake_dev', 'Cake is NOT able to connect to the database.');
+ echo '
';
+ echo $connectionError->getMessage();
+ echo '';
+ endif;
+ ?>
+
+
+';
+ echo __d('cake_dev', 'PCRE has not been compiled with Unicode support.');
+ echo '
';
+ echo __d('cake_dev', 'Recompile PCRE with Unicode support by adding --enable-unicode-properties
when configuring');
+ echo '';
+ }
+?>
+
+
+
+To change its layout, edit: APP/View/Layouts/default.ctp.
+You can also add some CSS styles for your pages at: APP/webroot/css.');
+?>
+
+
+
+
+ Html->link(
+ sprintf('%s %s', __d('cake_dev', 'New'), __d('cake_dev', 'CakePHP 2.0 Docs')),
+ 'http://book.cakephp.org/2.0/en/',
+ array('target' => '_blank', 'escape' => false)
+ );
+ ?>
+
+
+ Html->link(
+ __d('cake_dev', 'The 15 min Blog Tutorial'),
+ 'http://book.cakephp.org/2.0/en/tutorials-and-examples/blog/blog.html',
+ array('target' => '_blank', 'escape' => false)
+ );
+ ?>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/View/Scaffolds/empty b/app/View/Scaffolds/empty
new file mode 100644
index 0000000..e69de29
diff --git a/app/index.php b/app/index.php
new file mode 100644
index 0000000..29f2c57
--- /dev/null
+++ b/app/index.php
@@ -0,0 +1,17 @@
+
+ RewriteEngine On
+ RewriteCond %{REQUEST_FILENAME} !-d
+ RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteRule ^(.*)$ index.php [QSA,L]
+
diff --git a/app/webroot/css/cake.generic.css b/app/webroot/css/cake.generic.css
new file mode 100644
index 0000000..206d679
--- /dev/null
+++ b/app/webroot/css/cake.generic.css
@@ -0,0 +1,741 @@
+@charset "utf-8";
+/**
+ *
+ * Generic CSS for CakePHP
+ *
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link http://cakephp.org CakePHP(tm) Project
+ * @package app.webroot.css
+ * @since CakePHP(tm)
+ * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
+ */
+
+* {
+ margin:0;
+ padding:0;
+}
+
+/** General Style Info **/
+body {
+ background: #FFFFFF;
+ color: #fff;
+ font-family:'lucida grande',verdana,helvetica,arial,sans-serif;
+ font-size:90%;
+ margin: 0;
+}
+a {
+ color: #003d4c;
+ text-decoration: underline;
+ font-weight: bold;
+}
+a:hover {
+ color: #367889;
+ text-decoration:none;
+}
+a img {
+ border:none;
+}
+h1, h2, h3, h4 {
+ font-weight: normal;
+ margin-bottom:0.5em;
+}
+h1 {
+ background:#fff;
+ color: #003d4c;
+ font-size: 100%;
+}
+h2 {
+ background:#fff;
+ color: #e32;
+ font-family:'Gill Sans','lucida grande', helvetica, arial, sans-serif;
+ font-size: 190%;
+}
+h3 {
+ color: #2c6877;
+ font-family:'Gill Sans','lucida grande', helvetica, arial, sans-serif;
+ font-size: 165%;
+}
+h4 {
+ color: #993;
+ font-weight: normal;
+}
+ul, li {
+ margin: 0 12px;
+}
+p {
+ margin: 0 0 1em 0;
+}
+
+/** Layout **/
+#container {
+ text-align: left;
+}
+
+#header{
+ padding: 10px 20px;
+ border: 1px solid black;
+ border-width: 0 0 1px 0;
+}
+#header h1 {
+ line-height:20px;
+ background: #FFFFFF;
+ color: #fff;
+ padding: 0px 30px;
+}
+#header h1 a {
+ color: black;
+ background: #FFF;
+ font-weight: normal;
+ text-decoration: none;
+ vertical-align: bottom;
+}
+#header h1 a:hover {
+ color: #fff;
+ background: #003d4c;
+}
+#content{
+ background: #fff;
+ clear: both;
+ color: #333;
+ padding: 10px 20px 40px 20px;
+ overflow: auto;
+}
+#footer {
+ clear: both;
+ padding: 6px 10px;
+ text-align: right;
+}
+
+/** containers **/
+div.form,
+div.index,
+div.view {
+ float:right;
+ width:76%;
+ border-left:1px solid #666;
+ padding:10px 2%;
+}
+div.actions {
+ float:left;
+ width:16%;
+ padding:10px 1.5%;
+}
+div.actions h3 {
+ padding-top:0;
+ color:#777;
+}
+
+
+/** Tables **/
+table {
+ border-right:0;
+ clear: both;
+ color: #333;
+ margin-bottom: 10px;
+ width: 100%;
+}
+th {
+ border:0;
+ border-bottom:2px solid #555;
+ text-align: left;
+ padding:4px;
+}
+th a {
+ display: block;
+ padding: 2px 4px;
+ text-decoration: none;
+}
+th a.asc:after {
+ content: ' ⇣';
+}
+th a.desc:after {
+ content: ' ⇡';
+}
+table tr td {
+ padding: 6px;
+ text-align: left;
+ vertical-align: top;
+ border-bottom:1px solid #ddd;
+}
+table tr:nth-child(even) {
+ background: #f9f9f9;
+}
+td.actions {
+ text-align: center;
+ white-space: nowrap;
+}
+table td.actions a {
+ margin: 0px 6px;
+ padding:2px 5px;
+}
+
+/* SQL log */
+.cake-sql-log {
+ background: #fff;
+}
+.cake-sql-log td {
+ padding: 4px 8px;
+ text-align: left;
+ font-family: Monaco, Consolas, "Courier New", monospaced;
+}
+.cake-sql-log caption {
+ color:#fff;
+}
+
+/** Paging **/
+.paging {
+ background:#fff;
+ color: #ccc;
+ margin-top: 1em;
+ clear:both;
+}
+.paging .current,
+.paging .disabled,
+.paging a {
+ text-decoration: none;
+ padding: 5px 8px;
+ display: inline-block
+}
+.paging > span {
+ display: inline-block;
+ border: 1px solid #ccc;
+ border-left: 0;
+}
+.paging > span:hover {
+ background: #efefef;
+}
+.paging .prev {
+ border-left: 1px solid #ccc;
+ -moz-border-radius: 4px 0 0 4px;
+ -webkit-border-radius: 4px 0 0 4px;
+ border-radius: 4px 0 0 4px;
+}
+.paging .next {
+ -moz-border-radius: 0 4px 4px 0;
+ -webkit-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+}
+.paging .disabled {
+ color: #ddd;
+}
+.paging .disabled:hover {
+ background: transparent;
+}
+.paging .current {
+ background: #efefef;
+ color: #c73e14;
+}
+
+/** Scaffold View **/
+dl {
+ line-height: 2em;
+ margin: 0em 0em;
+ width: 60%;
+}
+dl dd:nth-child(4n+2),
+dl dt:nth-child(4n+1) {
+ background: #f4f4f4;
+}
+
+dt {
+ font-weight: bold;
+ padding-left: 4px;
+ vertical-align: top;
+ width: 10em;
+}
+dd {
+ margin-left: 10em;
+ margin-top: -2em;
+ vertical-align: top;
+}
+
+/** Forms **/
+form {
+ clear: both;
+ margin-right: 20px;
+ padding: 0;
+ width: 95%;
+}
+fieldset {
+ border: none;
+ margin-bottom: 1em;
+ padding: 16px 10px;
+}
+fieldset legend {
+ color: #e32;
+ font-size: 160%;
+ font-weight: bold;
+}
+fieldset fieldset {
+ margin-top: 0;
+ padding: 10px 0 0;
+}
+fieldset fieldset legend {
+ font-size: 120%;
+ font-weight: normal;
+}
+fieldset fieldset div {
+ clear: left;
+ margin: 0 20px;
+}
+form div {
+ clear: both;
+ margin-bottom: 1em;
+ padding: .5em;
+ vertical-align: text-top;
+}
+form .input {
+ color: #444;
+}
+form .required {
+ font-weight: bold;
+}
+form .required label:after {
+ color: #e32;
+ content: '*';
+ display:inline;
+}
+form div.submit {
+ border: 0;
+ clear: both;
+ margin-top: 10px;
+}
+label {
+ display: block;
+ font-size: 110%;
+ margin-bottom:3px;
+}
+input, textarea {
+ clear: both;
+ font-size: 140%;
+ font-family: "frutiger linotype", "lucida grande", "verdana", sans-serif;
+ padding: 1%;
+ width:98%;
+}
+select {
+ clear: both;
+ font-size: 120%;
+ vertical-align: text-bottom;
+}
+select[multiple=multiple] {
+ width: 100%;
+}
+option {
+ font-size: 120%;
+ padding: 0 3px;
+}
+input[type=checkbox] {
+ clear: left;
+ float: left;
+ margin: 0px 6px 7px 2px;
+ width: auto;
+}
+div.checkbox label {
+ display: inline;
+}
+input[type=radio] {
+ float:left;
+ width:auto;
+ margin: 6px 0;
+ padding: 0;
+ line-height: 26px;
+}
+.radio label {
+ margin: 0 0 6px 20px;
+ line-height: 26px;
+}
+input[type=submit] {
+ display: inline;
+ font-size: 110%;
+ width: auto;
+}
+form .submit input[type=submit] {
+ background:#62af56;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#76BF6B), to(#3B8230));
+ background-image: -webkit-linear-gradient(top, #76BF6B, #3B8230);
+ background-image: -moz-linear-gradient(top, #76BF6B, #3B8230);
+ border-color: #2d6324;
+ color: #fff;
+ text-shadow: rgba(0, 0, 0, 0.5) 0px -1px 0px;
+ padding: 8px 10px;
+}
+form .submit input[type=submit]:hover {
+ background: #5BA150;
+}
+/* Form errors */
+form .error {
+ background: #FFDACC;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ font-weight: normal;
+}
+form .error-message {
+ -moz-border-radius: none;
+ -webkit-border-radius: none;
+ border-radius: none;
+ border: none;
+ background: none;
+ margin: 0;
+ padding-left: 4px;
+ padding-right: 0;
+}
+form .error,
+form .error-message {
+ color: #9E2424;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ -ms-box-shadow: none;
+ -o-box-shadow: none;
+ box-shadow: none;
+ text-shadow: none;
+}
+
+/** Notices and Errors **/
+.message {
+ clear: both;
+ color: #fff;
+ font-size: 140%;
+ font-weight: bold;
+ margin: 0 0 1em 0;
+ padding: 5px;
+}
+
+.success,
+.message,
+.cake-error,
+.cake-debug,
+.notice,
+p.error,
+.error-message {
+ background: #ffcc00;
+ background-repeat: repeat-x;
+ background-image: -moz-linear-gradient(top, #ffcc00, #E6B800);
+ background-image: -ms-linear-gradient(top, #ffcc00, #E6B800);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#ffcc00), to(#E6B800));
+ background-image: -webkit-linear-gradient(top, #ffcc00, #E6B800);
+ background-image: -o-linear-gradient(top, #ffcc00, #E6B800);
+ background-image: linear-gradient(top, #ffcc00, #E6B800);
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ border: 1px solid rgba(0, 0, 0, 0.2);
+ margin-bottom: 18px;
+ padding: 7px 14px;
+ color: #404040;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
+}
+.success,
+.message,
+.cake-error,
+p.error,
+.error-message {
+ clear: both;
+ color: #fff;
+ background: #c43c35;
+ border: 1px solid rgba(0, 0, 0, 0.5);
+ background-repeat: repeat-x;
+ background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
+ background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));
+ background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
+ background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
+ background-image: linear-gradient(top, #ee5f5b, #c43c35);
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3);
+}
+.success {
+ clear: both;
+ color: #fff;
+ border: 1px solid rgba(0, 0, 0, 0.5);
+ background: #3B8230;
+ background-repeat: repeat-x;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#76BF6B), to(#3B8230));
+ background-image: -webkit-linear-gradient(top, #76BF6B, #3B8230);
+ background-image: -moz-linear-gradient(top, #76BF6B, #3B8230);
+ background-image: -ms-linear-gradient(top, #76BF6B, #3B8230);
+ background-image: -o-linear-gradient(top, #76BF6B, #3B8230);
+ background-image: linear-gradient(top, #76BF6B, #3B8230);
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3);
+}
+p.error {
+ font-family: Monaco, Consolas, Courier, monospace;
+ font-size: 120%;
+ padding: 0.8em;
+ margin: 1em 0;
+}
+p.error em {
+ font-weight: normal;
+ line-height: 140%;
+}
+.notice {
+ color: #000;
+ display: block;
+ font-size: 120%;
+ padding: 0.8em;
+ margin: 1em 0;
+}
+.success {
+ color: #fff;
+}
+
+/** Actions **/
+.actions ul {
+ margin: 0;
+ padding: 0;
+}
+.actions li {
+ margin:0 0 0.5em 0;
+ list-style-type: none;
+ white-space: nowrap;
+ padding: 0;
+}
+.actions ul li a {
+ font-weight: normal;
+ display: block;
+ clear: both;
+}
+
+/* Buttons and button links */
+input[type=submit],
+.actions ul li a,
+.actions a {
+ font-weight:normal;
+ padding: 4px 8px;
+ background: #dcdcdc;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fefefe), to(#dcdcdc));
+ background-image: -webkit-linear-gradient(top, #fefefe, #dcdcdc);
+ background-image: -moz-linear-gradient(top, #fefefe, #dcdcdc);
+ background-image: -ms-linear-gradient(top, #fefefe, #dcdcdc);
+ background-image: -o-linear-gradient(top, #fefefe, #dcdcdc);
+ background-image: linear-gradient(top, #fefefe, #dcdcdc);
+ color:#333;
+ border:1px solid #bbb;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ text-decoration: none;
+ text-shadow: #fff 0px 1px 0px;
+ min-width: 0;
+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), 0px 1px 1px rgba(0, 0, 0, 0.2);
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), 0px 1px 1px rgba(0, 0, 0, 0.2);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), 0px 1px 1px rgba(0, 0, 0, 0.2);
+ -webkit-user-select: none;
+ user-select: none;
+}
+.actions ul li a:hover,
+.actions a:hover {
+ background: #ededed;
+ border-color: #acacac;
+ text-decoration: none;
+}
+input[type=submit]:active,
+.actions ul li a:active,
+.actions a:active {
+ background: #eee;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#dfdfdf), to(#eee));
+ background-image: -webkit-linear-gradient(top, #dfdfdf, #eee);
+ background-image: -moz-linear-gradient(top, #dfdfdf, #eee);
+ background-image: -ms-linear-gradient(top, #dfdfdf, #eee);
+ background-image: -o-linear-gradient(top, #dfdfdf, #eee);
+ background-image: linear-gradient(top, #dfdfdf, #eee);
+ text-shadow: #eee 0px 1px 0px;
+ -moz-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3);
+ -webkit-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3);
+ box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3);
+ border-color: #aaa;
+ text-decoration: none;
+}
+
+/** Related **/
+.related {
+ clear: both;
+ display: block;
+}
+
+/** Debugging **/
+pre {
+ color: #000;
+ background: #f0f0f0;
+ padding: 15px;
+ -moz-box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);
+ -webkit-box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);
+ box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);
+}
+.cake-debug-output {
+ padding: 0;
+ position: relative;
+}
+.cake-debug-output > span {
+ position: absolute;
+ top: 5px;
+ right: 5px;
+ background: rgba(255, 255, 255, 0.3);
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ padding: 5px 6px;
+ color: #000;
+ display: block;
+ float: left;
+ -moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.25), 0 1px 0 rgba(255, 255, 255, 0.5);
+ -webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.25), 0 1px 0 rgba(255, 255, 255, 0.5);
+ box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.25), 0 1px 0 rgba(255, 255, 255, 0.5);
+ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);
+}
+.cake-debug,
+.cake-error {
+ font-size: 16px;
+ line-height: 20px;
+ clear: both;
+}
+.cake-error > a {
+ text-shadow: none;
+}
+.cake-error {
+ white-space: normal;
+}
+.cake-stack-trace {
+ background: rgba(255, 255, 255, 0.7);
+ color: #333;
+ margin: 10px 0 5px 0;
+ padding: 10px 10px 0 10px;
+ font-size: 120%;
+ line-height: 140%;
+ overflow: auto;
+ position: relative;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+}
+.cake-stack-trace a {
+ text-shadow: none;
+ background: rgba(255, 255, 255, 0.7);
+ padding: 5px;
+ -moz-border-radius: 10px;
+ -webkit-border-radius: 10px;
+ border-radius: 10px;
+ margin: 0px 4px 10px 2px;
+ font-family: sans-serif;
+ font-size: 14px;
+ line-height: 14px;
+ display: inline-block;
+ text-decoration: none;
+ -moz-box-shadow: inset 0px 1px 0 rgba(0, 0, 0, 0.3);
+ -webkit-box-shadow: inset 0px 1px 0 rgba(0, 0, 0, 0.3);
+ box-shadow: inset 0px 1px 0 rgba(0, 0, 0, 0.3);
+}
+.cake-code-dump pre {
+ position: relative;
+ overflow: auto;
+}
+.cake-context {
+ margin-bottom: 10px;
+}
+.cake-stack-trace pre {
+ color: #000;
+ background-color: #F0F0F0;
+ margin: 0px 0 10px 0;
+ padding: 1em;
+ overflow: auto;
+ text-shadow: none;
+}
+.cake-stack-trace li {
+ padding: 10px 5px 0px;
+ margin: 0 0 4px 0;
+ font-family: monospace;
+ border: 1px solid #bbb;
+ -moz-border-radius: 4px;
+ -wekbkit-border-radius: 4px;
+ border-radius: 4px;
+ background: #dcdcdc;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fefefe), to(#dcdcdc));
+ background-image: -webkit-linear-gradient(top, #fefefe, #dcdcdc);
+ background-image: -moz-linear-gradient(top, #fefefe, #dcdcdc);
+ background-image: -ms-linear-gradient(top, #fefefe, #dcdcdc);
+ background-image: -o-linear-gradient(top, #fefefe, #dcdcdc);
+ background-image: linear-gradient(top, #fefefe, #dcdcdc);
+}
+/* excerpt */
+.cake-code-dump pre,
+.cake-code-dump pre code {
+ clear: both;
+ font-size: 12px;
+ line-height: 15px;
+ margin: 4px 2px;
+ padding: 4px;
+ overflow: auto;
+}
+.cake-code-dump .code-highlight {
+ display: block;
+ background-color: rgba(255, 255, 0, 0.5);
+}
+.code-coverage-results div.code-line {
+ padding-left:5px;
+ display:block;
+ margin-left:10px;
+}
+.code-coverage-results div.uncovered span.content {
+ background:#ecc;
+}
+.code-coverage-results div.covered span.content {
+ background:#cec;
+}
+.code-coverage-results div.ignored span.content {
+ color:#aaa;
+}
+.code-coverage-results span.line-num {
+ color:#666;
+ display:block;
+ float:left;
+ width:20px;
+ text-align:right;
+ margin-right:5px;
+}
+.code-coverage-results span.line-num strong {
+ color:#666;
+}
+.code-coverage-results div.start {
+ border:1px solid #aaa;
+ border-width:1px 1px 0px 1px;
+ margin-top:30px;
+ padding-top:5px;
+}
+.code-coverage-results div.end {
+ border:1px solid #aaa;
+ border-width:0px 1px 1px 1px;
+ margin-bottom:30px;
+ padding-bottom:5px;
+}
+.code-coverage-results div.realstart {
+ margin-top:0px;
+}
+.code-coverage-results p.note {
+ color:#bbb;
+ padding:5px;
+ margin:5px 0 10px;
+ font-size:10px;
+}
+.code-coverage-results span.result-bad {
+ color: #a00;
+}
+.code-coverage-results span.result-ok {
+ color: #fa0;
+}
+.code-coverage-results span.result-good {
+ color: #0a0;
+}
+
+/** Elements **/
+#url-rewriting-warning {
+ display:none;
+}
diff --git a/app/webroot/favicon.ico b/app/webroot/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..b36e81f2f35133dede48dc18f78d3e1a3353f7bc
GIT binary patch
literal 372
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
U{@d2-X8-^I07*qoM6N<$f^>H7f&c&j
literal 0
HcmV?d00001
diff --git a/app/webroot/img/cake.icon.png b/app/webroot/img/cake.icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..394fa42d5131cdc7b0b1246af93b92179f3c887e
GIT binary patch
literal 943
zcmV;g15o^lP)9q)cr7>
zIGsQFGn3|
zCzs2iP$-yfVPOGVTU&6sT(-5fwHb2tVsLP9#{Vr9Ct?R7q(rf?v2A5#W$OI=e1YUJ
zQ1YRnA&iWSQ1XYAm__>aYb6XIhMiYVD+-z8_pYi6+CsH{*^m;vOjqvbr=H&DFkeqxHQBh$Scsoy0Glw(T
zsaSG*ok62V;~yXYNgP*DUw;o98^+0@vGFb{HC+As}XJ=;xg=B7N_;-mKbHH{|lXs_o+aPcs5~J?s%^P2Odb)Uz
z$GvY6^!N9(C2-h?28B$qx7%_yHnt2eU%nQ0qThbl6a_+b)EirjBgQ`g1_07Fr&6R?
RzIgxu002ovPDHLkV1mdlwUYn<
literal 0
HcmV?d00001
diff --git a/app/webroot/img/cake.power.gif b/app/webroot/img/cake.power.gif
new file mode 100644
index 0000000000000000000000000000000000000000..8f8d570a2e24d86f0ad7730ee8f2435fd49f152c
GIT binary patch
literal 201
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
literal 0
HcmV?d00001
diff --git a/app/webroot/img/test-fail-icon.png b/app/webroot/img/test-fail-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..f9d2f147ec4ef406186c967c17aa9d592a09336e
GIT binary patch
literal 496
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G}
zXKrG8YEWuoN@d~6R2!h8r2#%6u9q1Y_A@XXWnehT!0_XL%T5M{>kJI%85mYDFg#fm
z@qmG069dC728KUx-uyQ(To^b!NZ6$XaAf}9Vfq#lclKVe|Fz`$^pf#C)(
z?|%b>GYkxe7#Qw~i+_GseHzG+ka#R5b(MkPp}6=pPR{@T|KFMBG8O1x^O7LHU?7(a
zz#tGgw;O20JWm(LkcwMA=Z`Zr83?dk2y7BE6=YUe|*dabSZF*mIx>v0bsK
zhImj64Tcwn`A_+lH49lnMl*u*gGmJ>51|J|OF=yr*B8yJW~ec3o5lk`2g|wzshC-w
ziSCMq2n+=S*%-Br(g+${U@~D`FhT&sxB*oN&;*cc$WcTT9wVtcsdKUucOmbP;||0x
z#q3tLa6o9^vHKPIF?*Owqq5D^MpaVDQnH801Nwb#BL&(K7w$YlkeuS0|3?^KwXL|W
zZgJvS!cr?^E>%Hd`MA%ASbAg$QJRhgw-~dTt8se0&H5u6>~Hz*7HSB4*!uq4vq;NjRN`wbRrY=k
ztZO7Hf9`nx3i*;j@S2CmwzWRi?KpG$@ix}{S-*Q_F&XAfUVh5qiW8;W{?l*PWU~|&
zXJF+?I7gWJwdv?FLs}6xsv$ajvf*#NUOnZcOK`I#;=J!d&L`LN;INb9hb~B}{sAr8
BX72z1
literal 0
HcmV?d00001
diff --git a/app/webroot/img/test-skip-icon.png b/app/webroot/img/test-skip-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..749771c9895a1abbb843f894540a43a5dc426b2c
GIT binary patch
literal 1207
zcmcgr`BM@I7-iGaX-3y=+tk$2=@1heYqQ2Fr&dQR+w#8F+EyJ=3j{$FBt!*70YwQk
z&qPo`NyPiUZ$&My$ooDs54`YP_Mg~q=6i3xpWeLp=A+ozJW)A+`8)ssP_ce$=^$sd
z|5jN+js`b>c9fGQ%E}Gp2=_suJ&|C5xi{PktY_`-=?iuMdwPc;I>BZDfC9koxs%l!
zEKAYA?)3C@cTc8#*X_a+xXL52WNcR59{1Y|%sC@xAdC&dt3FBE?v&eJ(VET#C1aPfAbX9c(2(>>t!J=b9>Y}4{Vv&J?_v2@
z{Zeit+2+s~*}>tpx2alAc$vPpzT>hM@4;GBTU{^zhonf02G`{6!jDK79JiR5fMQk5Qsz~iA0Kwj3krEQBhIR(a{tNg-WH;XtbD^nAq4@I-MRD
z7Z)EN&tNd#zkknUGFdEELPA1fV&aDnACi)il9Q8DQc_Y=Q`6GY($mvFe*Bn`k-=uO
zGcz+e91fSu&C1Hk&d$!s$>H&Md_F%nH#aXYPaqI{`t&J3KVK*m78DeSM54mN!lI(0
z;^N|xl9JNW(z3F$^78VEii*n0%BrfW>gwv6nwr|$+Pb>B`uh5YhK9z*#-^sG=H}*>
zmX_Am*0#2`_V)IUj*iaG&aSSm?(S}}SlrXo)7#tI*Vp&?^XD&LzV!F^4-52q~$`a_L84UdB=6VyZ=u9nnig?j|*#Wx)G#h*aePfzjUYo@M;4}Fb&*iuQMNlT)P
zH1r_DmZyA5)S=yZ1P7iME0&D<)aAv^j
SzbA!qhX89U8%v>u2jO4XOSDb^
literal 0
HcmV?d00001
diff --git a/app/webroot/index.php b/app/webroot/index.php
new file mode 100644
index 0000000..e125e09
--- /dev/null
+++ b/app/webroot/index.php
@@ -0,0 +1,92 @@
+dispatch(new CakeRequest(), new CakeResponse(array('charset' => Configure::read('App.encoding'))));
diff --git a/app/webroot/js/empty b/app/webroot/js/empty
new file mode 100644
index 0000000..e69de29
diff --git a/app/webroot/test.php b/app/webroot/test.php
new file mode 100644
index 0000000..39bea7a
--- /dev/null
+++ b/app/webroot/test.php
@@ -0,0 +1,92 @@
+
+ * Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * Redistributions of files must retain the above copyright notice
+ *
+ * @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link http://book.cakephp.org/2.0/en/development/testing.html
+ * @package app.webroot
+ * @since CakePHP(tm) v 1.2.0.4433
+ * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
+ */
+set_time_limit(0);
+ini_set('display_errors', 1);
+/**
+ * Use the DS to separate the directories in other defines
+ */
+if (!defined('DS')) {
+ define('DS', DIRECTORY_SEPARATOR);
+}
+/**
+ * These defines should only be edited if you have cake installed in
+ * a directory layout other than the way it is distributed.
+ * When using custom settings be sure to use the DS and do not add a trailing DS.
+ */
+
+/**
+ * The full path to the directory which holds "app", WITHOUT a trailing DS.
+ *
+ */
+if (!defined('ROOT')) {
+ define('ROOT', dirname(dirname(dirname(__FILE__))));
+}
+/**
+ * The actual directory name for the "app".
+ *
+ */
+if (!defined('APP_DIR')) {
+ define('APP_DIR', basename(dirname(dirname(__FILE__))));
+}
+
+/**
+ * The absolute path to the "Cake" directory, WITHOUT a trailing DS.
+ *
+ * For ease of development CakePHP uses PHP's include_path. If you
+ * need to cannot modify your include_path, you can set this path.
+ *
+ * Leaving this constant undefined will result in it being defined in Cake/bootstrap.php
+ */
+ //define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . 'lib');
+
+/**
+ * Editing below this line should not be necessary.
+ * Change at your own risk.
+ *
+ */
+if (!defined('WEBROOT_DIR')) {
+ define('WEBROOT_DIR', basename(dirname(__FILE__)));
+}
+if (!defined('WWW_ROOT')) {
+ define('WWW_ROOT', dirname(__FILE__) . DS);
+}
+
+if (!defined('CAKE_CORE_INCLUDE_PATH')) {
+ if (function_exists('ini_set')) {
+ ini_set('include_path', ROOT . DS . 'lib' . PATH_SEPARATOR . ini_get('include_path'));
+ }
+ if (!include ('Cake' . DS . 'bootstrap.php')) {
+ $failed = true;
+ }
+} else {
+ if (!include (CAKE_CORE_INCLUDE_PATH . DS . 'Cake' . DS . 'bootstrap.php')) {
+ $failed = true;
+ }
+}
+if (!empty($failed)) {
+ trigger_error("CakePHP core could not be found. Check the value of CAKE_CORE_INCLUDE_PATH in APP/webroot/index.php. It should point to the directory containing your " . DS . "cake core directory and your " . DS . "vendors root directory.", E_USER_ERROR);
+}
+
+if (Configure::read('debug') < 1) {
+ die(__d('cake_dev', 'Debug setting does not allow access to this url.'));
+}
+
+require_once CAKE . 'TestSuite' . DS . 'CakeTestSuiteDispatcher.php';
+
+CakeTestSuiteDispatcher::run();