Merge branch '1.3-misc' of dev@code.cakephp.org:cakephp into 1.3-misc

This commit is contained in:
mark_story 2009-11-24 22:10:11 -05:00
commit 3b1256cefb
162 changed files with 2719 additions and 1468 deletions

View file

@ -29,7 +29,7 @@
* 'plugins' => array('/full/path/to/plugins/', '/next/full/path/to/plugins/'),
* 'models' => array('/full/path/to/models/', '/next/full/path/to/models/'),
* 'views' => array('/full/path/to/views/', '/next/full/path/to/views/'),
* 'controllers' => array(/full/path/to/controllers/', '/next/full/path/to/controllers/'),
* 'controllers' => array('/full/path/to/controllers/', '/next/full/path/to/controllers/'),
* 'datasources' => array('/full/path/to/datasources/', '/next/full/path/to/datasources/'),
* 'behaviors' => array('/full/path/to/behaviors/', '/next/full/path/to/behaviors/'),
* 'components' => array('/full/path/to/components/', '/next/full/path/to/components/'),

View file

@ -69,22 +69,12 @@
*/
//Configure::write('App.baseUrl', env('SCRIPT_NAME'));
/**
* Uncomment the define below to use CakePHP admin routes.
*
* The value of the define determines the name of the route
* and its associated controller actions:
*
* 'admin' -> admin_index() and /admin/controller/index
* 'superuser' -> superuser_index() and /superuser/controller/index
*
* [Note Routing.admin is deprecated in 1.3. Use Routing.prefixes instead]
*/
//Configure::write('Routing.admin', 'admin');
/**
* Uncomment the define below to use CakePHP prefix routes.
*
* The value of the define determines the names of the routes
* and their associated controller actions:
*
* Set to an array of prefixes you want to use in your application. Use for
* admin or other prefixed routes.
*
@ -93,6 +83,8 @@
* Enables:
* `admin_index()` and `/admin/controller/index`
* `manager_index()` and `/manager/controller/index`
*
* [Note Routing.admin is deprecated in 1.3. Use Routing.prefixes instead]
*/
//Configure::write('Routing.prefixes', array('admin'));

View file

@ -212,6 +212,28 @@ if (!function_exists('array_combine')) {
return htmlspecialchars($text, ENT_QUOTES, $charset);
}
/**
* Splits a dot syntax plugin name into its plugin and classname.
* If $name does not have a dot, then index 0 will be null.
*
* Commonly used like `list($plugin, $name) = pluginSplit($name);`
*
* @param string $name The name you want to plugin split.
* @param boolean $dotAppend Set to true if you want the plugin to have a '.' appended to it.
* @param string $plugin Optional default plugin to use if no plugin is found. Defaults to null.
* @return array Array with 2 indexes. 0 => plugin name, 1 => classname
*/
function pluginSplit($name, $dotAppend = false, $plugin = null) {
if (strpos($name, '.') !== false) {
$parts = explode('.', $name, 2);
if ($dotAppend) {
$parts[0] .= '.';
}
return $parts;
}
return array($plugin, $name);
}
/**
* Returns an array of all the given parameters.
*

View file

@ -317,13 +317,8 @@ class ShellDispatcher {
$this->help();
return true;
}
if (strpos($arg, '.') !== false) {
list($plugin, $shell) = explode('.', $arg);
} else {
$plugin = null;
$shell = $arg;
}
list($plugin, $shell) = pluginSplit($arg);
$this->shell = $shell;
$this->shellName = Inflector::camelize($shell);
$this->shellClass = $this->shellName . 'Shell';

View file

@ -236,7 +236,7 @@ class AclShell extends Shell {
* @param integer $indent indent level.
* @return void
* @access protected
**/
*/
function _outputNode($class, $node, $indent) {
$indent = str_repeat(' ', $indent);
$data = $node[$class];
@ -521,7 +521,7 @@ class AclShell extends Shell {
*
* @param string $identifier Identifier to parse
* @return mixed a string for aliases, and an array for model.foreignKey
**/
*/
function parseIdentifier($identifier) {
if (preg_match('/^([\w]+)\.(.*)$/', $identifier, $matches)) {
return array(
@ -539,7 +539,7 @@ class AclShell extends Shell {
* @param string $class Class type you want (Aro/Aco)
* @param mixed $identifier A mixed identifier for finding the node.
* @return int Integer of NodeId. Will trigger an error if nothing is found.
**/
*/
function _getNodeId($class, $identifier) {
$node = $this->Acl->{$class}->node($identifier);
if (empty($node)) {

View file

@ -57,7 +57,7 @@ class BakeShell extends Shell {
}
foreach($this->args as $i => $arg) {
if (strpos($arg, '.')) {
list($this->params['plugin'], $this->args[$i]) = explode('.', $arg);
list($this->params['plugin'], $this->args[$i]) = pluginSplit($arg);
break;
}
}
@ -230,6 +230,8 @@ class BakeShell extends Shell {
$this->out("\n\tbake model\n\t\tbakes a model. run 'bake model help' for more info");
$this->out("\n\tbake view\n\t\tbakes views. run 'bake view help' for more info");
$this->out("\n\tbake controller\n\t\tbakes a controller. run 'bake controller help' for more info");
$this->out("\n\tbake fixture\n\t\tbakes fixtures. run 'bake fixture help' for more info.");
$this->out("\n\tbake test\n\t\tbakes unit tests. run 'bake test help' for more info.");
$this->out();
}

View file

@ -103,7 +103,7 @@ class I18nShell extends Shell {
* @access public
*/
function initdb() {
$this->Dispatch->args = array('schema', 'run', 'create', 'i18n');
$this->Dispatch->args = array('schema', 'create', 'i18n');
$this->Dispatch->dispatch();
}

View file

@ -63,9 +63,10 @@ class SchemaShell extends Shell {
} elseif (!empty($this->args[0])) {
$name = $this->params['name'] = $this->args[0];
}
if (strpos($name, '.')) {
list($this->params['plugin'], $this->params['name']) = explode('.', $name);
$name = $this->params['name'];
list($this->params['plugin'], $splitName) = pluginSplit($name);
$name = $this->params['name'] = $splitName;
}
if ($name) {
@ -242,7 +243,7 @@ class SchemaShell extends Shell {
* Run database create commands. Alias for run create.
*
* @return void
**/
*/
function create() {
list($Schema, $table) = $this->_loadSchema();
$this->__create($Schema, $table);
@ -252,7 +253,7 @@ class SchemaShell extends Shell {
* Run database create commands. Alias for run create.
*
* @return void
**/
*/
function update() {
list($Schema, $table) = $this->_loadSchema();
$this->__update($Schema, $table);
@ -262,7 +263,7 @@ class SchemaShell extends Shell {
* Prepares the Schema objects for database operations.
*
* @return void
**/
*/
function _loadSchema() {
$name = $plugin = null;
if (isset($this->params['name'])) {

View file

@ -254,11 +254,7 @@ class Shell extends Object {
$this->modelClass = $modelClassName;
foreach ($uses as $modelClass) {
$plugin = null;
if (strpos($modelClass, '.') !== false) {
list($plugin, $modelClass) = explode('.', $modelClass);
$plugin = $plugin . '.';
}
list($plugin, $modelClass) = pluginSplit($modelClass, true);
if (PHP5) {
$this->{$modelClass} = ClassRegistry::init($plugin . $modelClass);
} else {
@ -642,7 +638,7 @@ class Shell extends Object {
*
* @param string $pluginName Name of the plugin you want ie. DebugKit
* @return string $path path to the correct plugin.
**/
*/
function _pluginPath($pluginName) {
return App::pluginPath($pluginName);
}

View file

@ -113,7 +113,7 @@ class ControllerTask extends Shell {
*
* @access public
* @return void
**/
*/
function all() {
$this->interactive = false;
$this->listAll($this->connection, false);
@ -219,7 +219,7 @@ class ControllerTask extends Shell {
* Confirm a to be baked controller with the user
*
* @return void
**/
*/
function confirmController($controllerName, $useDynamicScaffold, $helpers, $components) {
$this->out();
$this->hr();
@ -257,7 +257,7 @@ class ControllerTask extends Shell {
* Interact with the user and ask about which methods (admin or regular they want to bake)
*
* @return array Array containing (bakeRegular, bakeAdmin) answers
**/
*/
function _askAboutMethods() {
$wannaBakeCrud = $this->in(
__("Would you like to create some basic class methods \n(index(), add(), view(), edit())?", true),
@ -348,7 +348,7 @@ class ControllerTask extends Shell {
* Interact with the user and get a list of additional helpers
*
* @return array Helpers that the user wants to use.
**/
*/
function doHelpers() {
return $this->_doPropertyChoices(
__("Would you like this controller to use other helpers\nbesides HtmlHelper and FormHelper?", true),
@ -360,7 +360,7 @@ class ControllerTask extends Shell {
* Interact with the user and get a list of additional components
*
* @return array Components the user wants to use.
**/
*/
function doComponents() {
return $this->_doPropertyChoices(
__("Would you like this controller to use any components?", true),
@ -374,7 +374,7 @@ class ControllerTask extends Shell {
* @param string $prompt A yes/no question to precede the list
* @param sting $example A question for a comma separated list, with examples.
* @return array Array of values for property.
**/
*/
function _doPropertyChoices($prompt, $example) {
$proceed = $this->in($prompt, array('y','n'), 'n');
$property = array();

View file

@ -53,7 +53,7 @@ class DbConfigTask extends Shell {
* Used for testing.
*
* @var string
**/
*/
var $databaseClassName = 'DATABASE_CONFIG';
/**
@ -258,6 +258,7 @@ class DbConfigTask extends Shell {
$oldConfigs = array();
if (file_exists($filename)) {
config('database');
$db = new $this->databaseClassName;
$temp = get_class_vars(get_class($db));
@ -350,7 +351,7 @@ class DbConfigTask extends Shell {
* Get a user specified Connection name
*
* @return void
**/
*/
function getConfig() {
App::import('Model', 'ConnectionManager', false);

View file

@ -54,14 +54,14 @@ class FixtureTask extends Shell {
* The db connection being used for baking
*
* @var string
**/
*/
var $connection = null;
/**
* Schema instance
*
* @var object
**/
*/
var $_Schema = null;
/**
@ -103,7 +103,7 @@ class FixtureTask extends Shell {
*
* @access public
* @return void
**/
*/
function all() {
$this->interactive = false;
$this->Model->interactive = false;
@ -140,7 +140,7 @@ class FixtureTask extends Shell {
*
* @param string $modelName Name of model you are dealing with.
* @return array Array of import options.
**/
*/
function importOptions($modelName) {
$options = array();
$doSchema = $this->in(__('Would you like to import schema for this fixture?', true), array('y', 'n'), 'n');
@ -230,7 +230,7 @@ class FixtureTask extends Shell {
* @param string $fixture Contents of the fixture file.
* @access public
* @return void
**/
*/
function generateFixtureFile($model, $otherVars) {
$defaults = array('table' => null, 'schema' => null, 'records' => null, 'import' => null, 'fields' => null);
$vars = array_merge($defaults, $otherVars);
@ -255,7 +255,7 @@ class FixtureTask extends Shell {
*
* @param array $table Table schema array
* @return string fields definitions
**/
*/
function _generateSchema($tableInfo) {
$schema = $this->_Schema->generateTable('f', $tableInfo);
return substr($schema, 10, -2);
@ -266,7 +266,7 @@ class FixtureTask extends Shell {
*
* @param array $table Table schema array
* @return array Array of records to use in the fixture.
**/
*/
function _generateRecords($tableInfo, $recordCount = 1) {
$records = array();
for ($i = 0; $i < $recordCount; $i++) {
@ -277,9 +277,11 @@ class FixtureTask extends Shell {
}
switch ($fieldInfo['type']) {
case 'integer':
case 'float':
$insert = $i + 1;
break;
case 'string';
case 'string':
case 'binary':
$isPrimaryUuid = (
isset($fieldInfo['key']) && strtolower($fieldInfo['key']) == 'primary' &&
isset($fieldInfo['length']) && $fieldInfo['length'] == 36
@ -335,7 +337,7 @@ class FixtureTask extends Shell {
*
* @param array $records Array of records to be converted to string
* @return string A string value of the $records array.
**/
*/
function _makeRecordString($records) {
$out = "array(\n";
foreach ($records as $record) {
@ -358,7 +360,7 @@ class FixtureTask extends Shell {
* @param string $modelName name of the model to take records from.
* @param string $useTable Name of table to use.
* @return array Array of records.
**/
*/
function _getRecordsFromTable($modelName, $useTable = null) {
if ($this->interactive) {
$condition = null;

View file

@ -64,14 +64,14 @@ class ModelTask extends Shell {
* Holds tables found on connection.
*
* @var array
**/
*/
var $__tables = array();
/**
* Holds validation method map.
*
* @var array
**/
*/
var $__validations = array();
/**
@ -80,6 +80,8 @@ class ModelTask extends Shell {
* @access public
*/
function execute() {
App::import('Model', 'Model', false);
if (empty($this->args)) {
$this->__interactive();
}
@ -107,7 +109,7 @@ class ModelTask extends Shell {
* Bake all models at once.
*
* @return void
**/
*/
function all() {
$this->listAll($this->connection, false);
$unitTestExists = $this->_checkUnitTest();
@ -127,9 +129,12 @@ class ModelTask extends Shell {
*
* @param string $className Name of class you want model to be.
* @return object Model instance
**/
function &_getModelObject($className) {
$object = new Model(array('name' => $className, 'ds' => $this->connection));
*/
function &_getModelObject($className, $table = null) {
if (!$table) {
$table = Inflector::tableize($className);
}
$object =& new Model(array('name' => $className, 'table' => $table, 'ds' => $this->connection));
return $object;
}
@ -140,7 +145,7 @@ class ModelTask extends Shell {
* @param string $prompt Prompt to use for options list.
* @param integer $default The default option for the given prompt.
* @return result of user choice.
**/
*/
function inOptions($options, $prompt = null, $default = null) {
$valid = false;
$max = count($options);
@ -165,8 +170,6 @@ class ModelTask extends Shell {
* @access private
*/
function __interactive() {
App::import('Model', 'Model', false);
$this->hr();
$this->out(sprintf("Bake Model\nPath: %s", $this->path));
$this->hr();
@ -262,7 +265,7 @@ class ModelTask extends Shell {
* @param string $associations Collection of associations.
* @access protected
* @return void
**/
*/
function _printAssociation($modelName, $type, $associations) {
if (!empty($associations[$type])) {
for ($i = 0; $i < count($associations[$type]); $i++) {
@ -278,7 +281,7 @@ class ModelTask extends Shell {
* @param array $fields Array of fields that might have a primary key.
* @return string Name of field that is a primary key.
* @access public
**/
*/
function findPrimaryKey($fields) {
foreach ($fields as $name => $field) {
if (isset($field['key']) && $field['key'] == 'primary') {
@ -293,7 +296,7 @@ class ModelTask extends Shell {
*
* @param array $fields Array of fields to look for and choose as a displayField
* @return mixed Name of field to use for displayField or false if the user declines to choose
**/
*/
function findDisplayField($fields) {
$fieldNames = array_keys($fields);
$prompt = __("A displayField could not be automatically detected\nwould you like to choose one?", true);
@ -337,7 +340,7 @@ class ModelTask extends Shell {
* Populate the __validations array
*
* @return void
**/
*/
function initValidations() {
$options = $choices = array();
if (class_exists('Validation')) {
@ -363,7 +366,7 @@ class ModelTask extends Shell {
* @param string $fieldName Name of field to be validated.
* @param array $metaData metadata for field
* @return array Array of validation for the field.
**/
*/
function fieldValidation($fieldName, $metaData, $primaryKey = 'id') {
$defaultChoice = count($this->__validations);
$validate = $alreadyChosen = array();
@ -484,7 +487,7 @@ class ModelTask extends Shell {
* @param object $model Model instance of model being generated.
* @param array $associations Array of inprogress associations
* @return array $associations with belongsTo added in.
**/
*/
function findBelongsTo(&$model, $associations) {
$fields = $model->schema();
foreach ($fields as $fieldName => $field) {
@ -513,11 +516,11 @@ class ModelTask extends Shell {
* @param object $model Model instance being generated
* @param array $associations Array of inprogress associations
* @return array $associations with hasOne and hasMany added in.
**/
*/
function findHasOneAndMany(&$model, $associations) {
$foreignKey = $this->_modelKey($model->name);
foreach ($this->__tables as $otherTable) {
$tempOtherModel = $this->_getModelObject($this->_modelName($otherTable));
$tempOtherModel = $this->_getModelObject($this->_modelName($otherTable), $otherTable);
$modelFieldsTemp = $tempOtherModel->schema();
$pattern = '/_' . preg_quote($model->table, '/') . '|' . preg_quote($model->table, '/') . '_/';
@ -556,11 +559,11 @@ class ModelTask extends Shell {
* @param object $model Model instance being generated
* @param array $associations Array of inprogress associations
* @return array $associations with hasAndBelongsToMany added in.
**/
*/
function findHasAndBelongsToMany(&$model, $associations) {
$foreignKey = $this->_modelKey($model->name);
foreach ($this->__tables as $otherTable) {
$tempOtherModel = $this->_getModelObject($this->_modelName($otherTable));
$tempOtherModel = $this->_getModelObject($this->_modelName($otherTable), $otherTable);
$modelFieldsTemp = $tempOtherModel->schema();
$offset = strpos($otherTable, $model->table . '_');
@ -596,7 +599,7 @@ class ModelTask extends Shell {
* @param array $model Temporary Model instance.
* @param array $associations Array of associations to be confirmed.
* @return array Array of confirmed associations
**/
*/
function confirmAssociations(&$model, $associations) {
foreach ($associations as $type => $settings) {
if (!empty($associations[$type])) {
@ -624,7 +627,7 @@ class ModelTask extends Shell {
* @param object $model Temporary model instance
* @param array $associations Array of associations.
* @return array Array of associations.
**/
*/
function doMoreAssociations($model, $associations) {
$prompt = __('Would you like to define some additional model associations?', true);
$wannaDoMoreAssoc = $this->in($prompt, array('y','n'), 'n');
@ -689,7 +692,7 @@ class ModelTask extends Shell {
* Finds all possible keys to use on custom associations.
*
* @return array array of tables and possible keys
**/
*/
function _generatePossibleKeys() {
$possible = array();
foreach ($this->__tables as $otherTable) {
@ -782,7 +785,7 @@ class ModelTask extends Shell {
* @param string $modelName Name of the model you want a table for.
* @param string $useDbConfig Name of the database config you want to get tables from.
* @return void
**/
*/
function getTable($modelName, $useDbConfig = null) {
if (!isset($useDbConfig)) {
$useDbConfig = $this->connection;
@ -811,7 +814,7 @@ class ModelTask extends Shell {
*
* @param string $useDbConfig Connection name to scan.
* @return array Array of tables in the database.
**/
*/
function getAllTables($useDbConfig = null) {
if (!isset($useDbConfig)) {
$useDbConfig = $this->connection;
@ -906,7 +909,7 @@ class ModelTask extends Shell {
* @access public
* @return void
* @see FixtureTask::bake
**/
*/
function bakeFixture($className, $useTable = null) {
$this->Fixture->connection = $this->connection;
$this->Fixture->plugin = $this->plugin;

View file

@ -204,7 +204,7 @@ class PluginTask extends Shell {
* find and change $this->path to the user selection
*
* @return void
**/
*/
function findPath($pathOptions) {
$valid = false;
$max = count($pathOptions);

View file

@ -30,7 +30,7 @@ class ProjectTask extends Shell {
* configs path (used in testing).
*
* @var string
**/
*/
var $configPath = null;
/**
@ -149,6 +149,9 @@ class ProjectTask extends Shell {
$verbose = $this->in(__('Do you want verbose output?', true), array('y', 'n'), 'n');
$Folder = new Folder($skel);
if (!empty($this->params['empty'])) {
$skip = array();
}
if ($Folder->copy(array('to' => $path, 'skip' => $skip))) {
$this->hr();
$this->out(sprintf(__("Created: %s in %s", true), $app, $path));
@ -224,7 +227,8 @@ class ProjectTask extends Shell {
$File =& new File($path . 'webroot' . DS . 'index.php');
$contents = $File->read();
if (preg_match('/([\\t\\x20]*define\\(\\\'CAKE_CORE_INCLUDE_PATH\\\',[\\t\\x20\'A-z0-9]*\\);)/', $contents, $match)) {
$result = str_replace($match[0], "\t\tdefine('CAKE_CORE_INCLUDE_PATH', '" . CAKE_CORE_INCLUDE_PATH . "');", $contents);
$root = strpos(CAKE_CORE_INCLUDE_PATH, '/') === 0 ? " DS . '" : "'";
$result = str_replace($match[0], "\t\tdefine('CAKE_CORE_INCLUDE_PATH', " . $root . str_replace(DS, "' . DS . '", trim(CAKE_CORE_INCLUDE_PATH, DS)) . "');", $contents);
if (!$File->write($result)) {
return false;
}
@ -235,7 +239,7 @@ class ProjectTask extends Shell {
$File =& new File($path . 'webroot' . DS . 'test.php');
$contents = $File->read();
if (preg_match('/([\\t\\x20]*define\\(\\\'CAKE_CORE_INCLUDE_PATH\\\',[\\t\\x20\'A-z0-9]*\\);)/', $contents, $match)) {
$result = str_replace($match[0], "\t\tdefine('CAKE_CORE_INCLUDE_PATH', '" . CAKE_CORE_INCLUDE_PATH . "');", $contents);
$result = str_replace($match[0], "\t\tdefine('CAKE_CORE_INCLUDE_PATH', " . $root . str_replace(DS, "' . DS . '", trim(CAKE_CORE_INCLUDE_PATH, DS)) . "');", $contents);
if (!$File->write($result)) {
return false;
}
@ -280,30 +284,39 @@ class ProjectTask extends Shell {
$admin = '';
$prefixes = Configure::read('Routing.prefixes');
if (!empty($prefixes)) {
if ($this->interactive) {
$this->out();
$this->out(__('You have more than one routing prefix configured', true));
}
if (count($prefixes) == 1) {
return $prefixes[0] . '_';
}
$options = array();
foreach ($prefixes as $i => $prefix) {
$options[] = $i + 1;
$this->out($i + 1 . '. ' . $prefix);
if ($this->interactive) {
$this->out($i + 1 . '. ' . $prefix);
}
}
$selection = $this->in(__('Please choose a prefix to bake with.', true), $options, 1);
return $prefixes[$selection - 1] . '_';
}
$this->out('You need to enable Configure::write(\'Routing.prefixes\',array(\'admin\')) in /app/config/core.php to use prefix routing.');
$this->out(__('What would you like the prefix route to be?', true));
$this->out(__('Example: www.example.com/admin/controller', true));
while ($admin == '') {
$admin = $this->in(__("What would you like the prefix route to be?", true), null, 'admin');
}
if ($this->cakeAdmin($admin) !== true) {
$this->out(__('Unable to write to /app/config/core.php.', true));
if ($this->interactive) {
$this->hr();
$this->out('You need to enable Configure::write(\'Routing.prefixes\',array(\'admin\')) in /app/config/core.php to use prefix routing.');
$this->_stop();
$this->out(__('What would you like the prefix route to be?', true));
$this->out(__('Example: www.example.com/admin/controller', true));
while ($admin == '') {
$admin = $this->in(__("Enter a routing prefix:", true), null, 'admin');
}
if ($this->cakeAdmin($admin) !== true) {
$this->out(__('Unable to write to /app/config/core.php.', true));
$this->out('You need to enable Configure::write(\'Routing.prefixes\',array(\'admin\')) in /app/config/core.php to use prefix routing.');
$this->_stop();
}
return $admin . '_';
}
return $admin . '_';
return '';
}
/**

View file

@ -23,7 +23,7 @@ class TemplateTask extends Shell {
* variables to add to template scope
*
* @var array
**/
*/
var $templateVars = array();
/**
@ -31,7 +31,7 @@ class TemplateTask extends Shell {
* Contains a list of $theme => $path
*
* @var array
**/
*/
var $templatePaths = array();
/**
@ -39,7 +39,7 @@ class TemplateTask extends Shell {
*
* @access public
* @return void
**/
*/
function initialize() {
$this->templatePaths = $this->_findThemes();
}
@ -50,7 +50,7 @@ class TemplateTask extends Shell {
* Bake themes are directories not named `skel` inside a `vendors/shells/templates` path.
*
* @return array Array of bake themes that are installed.
**/
*/
function _findThemes() {
$paths = App::path('shells');
$core = array_pop($paths);
@ -128,7 +128,7 @@ class TemplateTask extends Shell {
* @param string $vars Additional vars to set to template scope.
* @access public
* @return contents of generated code template
**/
*/
function generate($directory, $filename, $vars = null) {
if ($vars !== null) {
$this->set($vars);
@ -156,7 +156,7 @@ class TemplateTask extends Shell {
* If there is more than one installed theme user interaction will happen
*
* @return string returns the path to the selected theme.
**/
*/
function getThemePath() {
if (count($this->templatePaths) == 1) {
$paths = array_values($this->templatePaths);
@ -193,7 +193,7 @@ class TemplateTask extends Shell {
* @param string $filename lower_case_underscored filename you want.
* @access public
* @return string filename will exit program if template is not found.
**/
*/
function _findTemplate($path, $directory, $filename) {
$themeFile = $path . $directory . DS . $filename . '.ctp';
if (file_exists($themeFile)) {

View file

@ -46,28 +46,28 @@ class TestTask extends Shell {
* Tasks used.
*
* @var array
**/
*/
var $tasks = array('Template');
/**
* class types that methods can be generated for
*
* @var array
**/
*/
var $classTypes = array('Model', 'Controller', 'Component', 'Behavior', 'Helper');
/**
* Internal list of fixtures that have been added so far.
*
* @var string
**/
*/
var $_fixtures = array();
/**
* Flag for interactive mode
*
* @var boolean
**/
*/
var $interactive = false;
/**
@ -164,7 +164,7 @@ class TestTask extends Shell {
* Interact with the user and get their chosen type. Can exit the script.
*
* @return string Users chosen type.
**/
*/
function getObjectType() {
$this->hr();
$this->out(__("Select an object type:", true));
@ -188,7 +188,7 @@ class TestTask extends Shell {
*
* @param string $objectType Type of object to list classes for i.e. Model, Controller.
* @return string Class name the user chose.
**/
*/
function getClassName($objectType) {
$options = App::objects(strtolower($objectType));
$this->out(sprintf(__('Choose a %s class', true), $objectType));
@ -209,7 +209,7 @@ class TestTask extends Shell {
* Currently only model, and controller are supported
*
* @return boolean
**/
*/
function typeCanDetectFixtures($type) {
$type = strtolower($type);
return ($type == 'controller' || $type == 'model');
@ -219,7 +219,7 @@ class TestTask extends Shell {
* Check if a class with the given type is loaded or can be loaded.
*
* @return boolean
**/
*/
function isLoadableClass($type, $class) {
return App::import($type, $class);
}
@ -229,7 +229,7 @@ class TestTask extends Shell {
* So that fixtures can be detected
*
* @return object
**/
*/
function &buildTestSubject($type, $class) {
ClassRegistry::flush();
App::import($type, $class);
@ -246,7 +246,7 @@ class TestTask extends Shell {
* Gets the real class name from the cake short form.
*
* @return string Real classname
**/
*/
function getRealClassName($type, $class) {
if (strtolower($type) == 'model') {
return $class;
@ -260,7 +260,7 @@ class TestTask extends Shell {
*
* @param string $className Name of class to look at.
* @return array Array of method names.
**/
*/
function getTestableMethods($className) {
$classMethods = get_class_methods($className);
$parentMethods = get_class_methods(get_parent_class($className));
@ -280,7 +280,7 @@ class TestTask extends Shell {
*
* @param object The object you want to generate fixtures for.
* @return array Array of fixtures to be included in the test.
**/
*/
function generateFixtureList(&$subject) {
$this->_fixtures = array();
if (is_a($subject, 'Model')) {
@ -297,7 +297,7 @@ class TestTask extends Shell {
*
* @return void
* @access protected
**/
*/
function _processModel(&$subject) {
$this->_addFixture($subject->name);
$associated = $subject->getAssociated();
@ -321,7 +321,7 @@ class TestTask extends Shell {
*
* @return void
* @access protected
**/
*/
function _processController(&$subject) {
$subject->constructClasses();
$models = array(Inflector::classify($subject->name));
@ -339,7 +339,7 @@ class TestTask extends Shell {
*
* @return void
* @access protected
**/
*/
function _addFixture($name) {
$parent = get_parent_class($name);
$prefix = 'app.';
@ -355,7 +355,7 @@ class TestTask extends Shell {
* Interact with the user to get additional fixtures they want to use.
*
* @return void
**/
*/
function getUserFixtures() {
$proceed = $this->in(__('Bake could not detect fixtures, would you like to add some?', true), array('y','n'), 'n');
$fixtures = array();
@ -373,7 +373,7 @@ class TestTask extends Shell {
* Controllers require a mock class.
*
* @return boolean
**/
*/
function hasMockClass($type) {
$type = strtolower($type);
return $type == 'controller';
@ -383,7 +383,7 @@ class TestTask extends Shell {
* Generate a constructor code snippet for the type and classname
*
* @return string Constructor snippet for the thing you are building.
**/
*/
function generateConstructor($type, $fullClassName) {
$type = strtolower($type);
if ($type == 'model') {
@ -401,7 +401,7 @@ class TestTask extends Shell {
* and get the plugin path if needed.
*
* @return string filename the test should be created on
**/
*/
function testCaseFileName($type, $className) {
$path = $this->path;
if (isset($this->plugin)) {
@ -418,7 +418,7 @@ class TestTask extends Shell {
* Show help file.
*
* @return void
**/
*/
function help() {
$this->hr();
$this->out("Usage: cake bake test <type> <class>");

View file

@ -112,6 +112,7 @@ class ViewTask extends Shell {
$this->controllerName = Inflector::camelize($this->args[0]);
$this->controllerPath = Inflector::underscore($this->controllerName);
$this->Project->interactive = false;
if (strtolower($this->args[0]) == 'all') {
return $this->all();
}
@ -144,7 +145,7 @@ class ViewTask extends Shell {
* Get a list of actions that can / should have views baked for them.
*
* @return array Array of action names that should be baked
**/
*/
function _methodsToBake() {
$methods = array_diff(
array_map('strtolower', get_class_methods($this->controllerName . 'Controller')),
@ -176,7 +177,7 @@ class ViewTask extends Shell {
* Bake All views for All controllers.
*
* @return void
**/
*/
function all() {
$this->Controller->interactive = false;
$tables = $this->Controller->listAll($this->connection, false);
@ -308,7 +309,7 @@ class ViewTask extends Shell {
*
* @param array $actions Array of actions to make files for.
* @return void
**/
*/
function bakeActions($actions, $vars) {
foreach ($actions as $action) {
$content = $this->getContent($action, $vars);
@ -320,7 +321,7 @@ class ViewTask extends Shell {
* handle creation of baking a custom action view file
*
* @return void
**/
*/
function customAction() {
$action = '';
while ($action == '') {
@ -460,7 +461,7 @@ class ViewTask extends Shell {
* @return array $associations
* @access private
*/
function __associations($model) {
function __associations(&$model) {
$keys = array('belongsTo', 'hasOne', 'hasMany', 'hasAndBelongsToMany');
$associations = array();

View file

@ -1,2 +0,0 @@
<?php echo $xml->header(); ?>
<?php echo $content_for_layout; ?>

View file

View file

@ -20,15 +20,15 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<?php echo $html->charset(); ?>
<?php echo $this->Html->charset(); ?>
<title>
<?php __('CakePHP: the rapid development php framework:'); ?>
<?php echo $title_for_layout; ?>
</title>
<?php
echo $html->meta('icon');
echo $this->Html->meta('icon');
echo $html->css('cake.generic');
echo $this->Html->css('cake.generic');
echo $scripts_for_layout;
?>
@ -36,18 +36,18 @@
<body>
<div id="container">
<div id="header">
<h1><?php echo $html->link(__('CakePHP: the rapid development php framework', true), 'http://cakephp.org'); ?></h1>
<h1><?php echo $this->Html->link(__('CakePHP: the rapid development php framework', true), 'http://cakephp.org'); ?></h1>
</div>
<div id="content">
<?php $session->flash(); ?>
<?php echo $this->Session->flash(); ?>
<?php echo $content_for_layout; ?>
</div>
<div id="footer">
<?php echo $html->link(
$html->image('cake.power.gif', array('alt'=>__("CakePHP: the rapid development php framework", true), 'border'=>"0")),
<?php echo $this->Html->link(
$this->Html->image('cake.power.gif', array('alt'=> __('CakePHP: the rapid development php framework', true), 'border' => '0')),
'http://www.cakephp.org/',
array('target' => '_blank', 'escape' => false)
);

View file

@ -280,7 +280,7 @@ class Dispatcher extends Object {
$params['form']['_method'] = env('HTTP_X_HTTP_METHOD_OVERRIDE');
}
if (isset($params['form']['_method'])) {
if (isset($_SERVER) && !empty($_SERVER)) {
if (!empty($_SERVER)) {
$_SERVER['REQUEST_METHOD'] = $params['form']['_method'];
} else {
$_ENV['REQUEST_METHOD'] = $params['form']['_method'];
@ -614,15 +614,19 @@ class Dispatcher extends Object {
$this->_stop();
}
$isAsset = false;
$assets = array('js' => 'text/javascript', 'css' => 'text/css', 'gif' => 'image/gif', 'jpg' => 'image/jpeg', 'png' => 'image/png');
$assets = array(
'js' => 'text/javascript', 'css' => 'text/css',
'gif' => 'image/gif', 'jpg' => 'image/jpeg', 'png' => 'image/png'
);
$ext = array_pop(explode('.', $url));
foreach ($assets as $type => $contentType) {
if ($type === $ext) {
if ($type === 'css' || $type === 'js') {
$pos = strpos($url, $type . '/');
$parts = explode('/', $url);
if ($parts[0] === 'css' || $parts[0] === 'js' || $parts[0] === 'img') {
$pos = 0;
} else {
$pos = strpos($url, 'img/');
$pos = strlen($parts[0]);
}
$isAsset = true;
break;
@ -640,7 +644,7 @@ class Dispatcher extends Object {
$paths = array();
if ($pos > 0) {
$plugin = substr($url, 0, $pos - 1);
$plugin = substr($url, 0, $pos);
$url = preg_replace('/^' . preg_quote($plugin, '/') . '\//i', '', $url);
$paths[] = App::pluginPath($plugin) . 'vendors' . DS;
}

View file

@ -25,18 +25,12 @@
* @package cake
* @subpackage cake.cake.libs
*/
class Cache extends Object {
/**
* Cache engine to use
*
* @var CacheEngine
* @access protected
*/
var $_Engine = null;
class Cache {
/**
* Cache configuration stack
* Keeps the permanent/default settings for each cache engine.
* These settings are used to reset the engines after temporary modification.
*
* @var array
* @access private
@ -44,7 +38,7 @@ class Cache extends Object {
var $__config = array();
/**
* Holds name of the current configuration being used
* Holds name of the current configuration name being used.
*
* @var array
* @access private
@ -52,13 +46,20 @@ class Cache extends Object {
var $__name = 'default';
/**
* whether to reset the settings with the next call to self::set();
* Whether to reset the settings with the next call to Cache::set();
*
* @var array
* @access private
*/
var $__reset = false;
/**
* Engine instances keyed by configuration name.
*
* @var array
*/
var $_engines = array();
/**
* Returns a singleton instance
*
@ -75,21 +76,18 @@ class Cache extends Object {
}
/**
* Tries to find and include a file for a cache engine and returns object instance
* Set the cache configuration to use. config() can
* both create new configurations, return the settings for already configured
* configurations. It also sets the 'default' configuration to use for subsequent
* operations.
*
* @param $name Name of the engine (without 'Engine')
* @return mixed $engine object or null
* @access private
*/
function __loadEngine($name) {
if (!class_exists($name . 'Engine')) {
require LIBS . DS . 'cache' . DS . strtolower($name) . '.php';
}
return true;
}
/**
* Set the cache configuration to use
* To create a new configuration:
*
* `Cache::config('my_config', array('engine' => 'File', 'path' => TMP));`
*
* To get the settings for a configuration, and set it as the currently selected configuration
*
* `Cache::config('default');`
*
* @see app/config/core.php for configuration settings
* @param string $name Name of the configuration
@ -99,72 +97,113 @@ class Cache extends Object {
* @static
*/
function config($name = null, $settings = array()) {
$_this =& Cache::getInstance();
$self =& Cache::getInstance();
if (is_array($name)) {
$settings = $name;
}
if ($name === null || !is_string($name)) {
$name = $_this->__name;
$name = $self->__name;
}
$current = array();
if (isset($_this->__config[$name])) {
$current = $_this->__config[$name];
if (isset($self->__config[$name])) {
$current = $self->__config[$name];
}
if (!empty($settings)) {
$_this->__name = null;
$_this->__config[$name] = array_merge($current, $settings);
$self->__config[$name] = array_merge($current, $settings);
}
if (empty($_this->__config[$name]['engine'])) {
if (empty($self->__config[$name]['engine'])) {
return false;
}
$_this->__name = $name;
$engine = $_this->__config[$name]['engine'];
$self->__name = $name;
$engine = $self->__config[$name]['engine'];
if (!$_this->isInitialized($engine)) {
if ($_this->engine($engine, $_this->__config[$name]) === false) {
return false;
}
$settings = $_this->__config[$name] = $_this->settings($engine);
} else if ($settings = $_this->set($_this->__config[$name])) {
$_this->__config[$name] = $settings;
if (!isset($self->_engines[$name])) {
$self->_buildEngine($name);
$settings = $self->__config[$name] = $self->settings($name);
} elseif ($settings = $self->set($self->__config[$name])) {
$self->__config[$name] = $settings;
}
return compact('engine', 'settings');
}
/**
* Set the cache engine to use or modify settings for one instance
* Finds and builds the instance of the required engine class.
*
* @param string $name Name of the engine (without 'Engine')
* @param array $settings Optional associative array of settings passed to the engine
* @return boolean True on success, false on failure
* @access public
* @static
* @param string $name Name of the config array that needs an engine instance built
* @return void
* @access protected
*/
function engine($name = 'File', $settings = array()) {
$cacheClass = $name . 'Engine';
$_this =& Cache::getInstance();
if (!isset($_this->_Engine[$name])) {
if ($_this->__loadEngine($name) === false) {
return false;
}
$_this->_Engine[$name] =& new $cacheClass();
}
function _buildEngine($name) {
$config = $this->__config[$name];
if ($_this->_Engine[$name]->init($settings)) {
if (time() % $_this->_Engine[$name]->settings['probability'] === 0) {
$_this->_Engine[$name]->gc();
list($plugin, $class) = pluginSplit($config['engine']);
$cacheClass = $class . 'Engine';
if (!class_exists($cacheClass) && $this->__loadEngine($class, $plugin) === false) {
return false;
}
$cacheClass = $class . 'Engine';
$this->_engines[$name] =& new $cacheClass();
if ($this->_engines[$name]->init($config)) {
if (time() % $this->_engines[$name]->settings['probability'] === 0) {
$this->_engines[$name]->gc();
}
return true;
}
$_this->_Engine[$name] = null;
return false;
}
/**
* Returns an array containing the currently configured Cache settings.
*
* @return array
*/
function configured() {
$self = Cache::getInstance();
return array_keys($self->__config);
}
/**
* Drops a cache engine. Deletes the cache configuration information
* If the deleted configuration is the last configuration using an certain engine,
* the Engine instance is also unset.
*
* @param string $name A currently configured cache config you wish to remove.
* @return boolen success of the removal, returns false when the config does not exist.
*/
function drop($name) {
$self = Cache::getInstance();
if (!isset($self->__config[$name])) {
return false;
}
unset($self->__config[$name]);
unset($self->_engines[$name]);
return true;
}
/**
* Tries to find and include a file for a cache engine and returns object instance
*
* @param $name Name of the engine (without 'Engine')
* @return mixed $engine object or null
* @access private
*/
function __loadEngine($name, $plugin = null) {
if ($plugin) {
return App::import('Lib', $plugin . '.cache' . DS . $name, false);
} else {
$app = App::import('Lib', 'cache' . DS . $name, false);
if (!$app) {
require LIBS . 'cache' . DS . strtolower($name) . '.php';
}
return true;
}
}
/**
* Temporarily change settings to current config options. if no params are passed, resets settings if needed
* Cache::write() will reset the configuration changes made
@ -176,30 +215,32 @@ class Cache extends Object {
* @static
*/
function set($settings = array(), $value = null) {
$_this =& Cache::getInstance();
if (!isset($_this->__config[$_this->__name])) {
$self =& Cache::getInstance();
if (!isset($self->__config[$self->__name])) {
return false;
}
$engine = $_this->__config[$_this->__name]['engine'];
$name = $self->__name;
if (!empty($settings)) {
$_this->__reset = true;
$self->__reset = true;
}
if ($_this->__reset === true) {
if ($self->__reset === true) {
if (empty($settings)) {
$_this->__reset = false;
$settings = $_this->__config[$_this->__name];
$self->__reset = false;
$settings = $self->__config[$name];
} else {
if (is_string($settings) && $value !== null) {
$settings = array($settings => $value);
}
$settings = array_merge($_this->__config[$_this->__name], $settings);
$settings = array_merge($self->__config[$self->__name], $settings);
if (isset($settings['duration']) && !is_numeric($settings['duration'])) {
$settings['duration'] = strtotime($settings['duration']) - time();
}
}
$_this->engine($engine, $settings);
$self->_engines[$name]->settings = $settings;
}
return $_this->settings($engine);
return $self->settings($name);
}
/**
@ -212,9 +253,8 @@ class Cache extends Object {
* @static
*/
function gc() {
$_this =& Cache::getInstance();
$config = $_this->config();
$_this->_Engine[$config['engine']]->gc();
$self =& Cache::getInstance();
$self->_engines[$self->__name]->gc();
}
/**
@ -228,43 +268,27 @@ class Cache extends Object {
* @static
*/
function write($key, $value, $config = null) {
$_this =& Cache::getInstance();
$self =& Cache::getInstance();
if (is_array($config)) {
extract($config);
} else if ($config && (is_numeric($config) || is_numeric($config[0]) || (isset($config[1]) && is_numeric($config[1])))) {
$config = null;
}
if ($config && isset($_this->__config[$config])) {
$settings = $_this->set($_this->__config[$config]);
} else {
$settings = $_this->settings();
if (!$config) {
$config = $self->__name;
}
$settings = $self->settings($config);
if (empty($settings)) {
return null;
}
extract($settings);
if (!$self->isInitialized($config)) {
return false;
}
$key = $self->_engines[$config]->key($key);
if (!$_this->isInitialized($engine)) {
if (!$key || is_resource($value) || $settings['duration'] < 1) {
return false;
}
if (!$key = $_this->_Engine[$engine]->key($key)) {
return false;
}
if (is_resource($value)) {
return false;
}
if ($duration < 1) {
return false;
}
$success = $_this->_Engine[$engine]->write($settings['prefix'] . $key, $value, $duration);
$settings = $_this->set();
$success = $self->_engines[$config]->write($settings['prefix'] . $key, $value, $settings['duration']);
$self->set();
return $success;
}
@ -278,29 +302,27 @@ class Cache extends Object {
* @static
*/
function read($key, $config = null) {
$_this =& Cache::getInstance();
$self =& Cache::getInstance();
if (isset($_this->__config[$config])) {
$settings = $_this->set($_this->__config[$config]);
} else {
$settings = $_this->settings();
if (!$config) {
$config = $self->__name;
}
$settings = $self->settings($config);
if (empty($settings)) {
return null;
}
extract($settings);
if (!$_this->isInitialized($engine)) {
if (!$self->isInitialized($config)) {
return false;
}
if (!$key = $_this->_Engine[$engine]->key($key)) {
$key = $self->_engines[$config]->key($key);
if (!$key) {
return false;
}
$success = $_this->_Engine[$engine]->read($settings['prefix'] . $key);
$success = $self->_engines[$config]->read($settings['prefix'] . $key);
if ($config !== null && $config !== $_this->__name) {
$settings = $_this->set();
if ($config !== null && $config !== $self->__name) {
$self->set();
}
return $success;
}
@ -315,28 +337,25 @@ class Cache extends Object {
* @static
*/
function delete($key, $config = null) {
$_this =& Cache::getInstance();
if (isset($_this->__config[$config])) {
$settings = $_this->set($_this->__config[$config]);
} else {
$settings = $_this->settings();
$self =& Cache::getInstance();
if (!$config) {
$config = $self->__name;
}
$settings = $self->settings($config);
if (empty($settings)) {
return null;
}
extract($settings);
if (!$_this->isInitialized($engine)) {
if (!$self->isInitialized($config)) {
return false;
}
$key = $self->_engines[$config]->key($key);
if (!$key) {
return false;
}
if (!$key = $_this->_Engine[$engine]->key($key)) {
return false;
}
$success = $_this->_Engine[$engine]->delete($settings['prefix'] . $key);
$settings = $_this->set();
$success = $self->_engines[$config]->delete($settings['prefix'] . $key);
$self->set();
return $success;
}
@ -350,28 +369,26 @@ class Cache extends Object {
* @static
*/
function clear($check = false, $config = null) {
$_this =& Cache::getInstance();
if (isset($_this->__config[$config])) {
$settings = $_this->set($_this->__config[$config]);
} else {
$settings = $_this->settings();
$self =& Cache::getInstance();
if (!$config) {
$config = $self->__name;
}
$settings = $self->settings($config);
if (empty($settings)) {
return null;
}
extract($settings);
if (isset($engine) && !$_this->isInitialized($engine)) {
if (!$self->isInitialized($config)) {
return false;
}
$success = $_this->_Engine[$engine]->clear($check);
$settings = $_this->set();
$success = $self->_engines[$config]->clear($check);
$self->set();
return $success;
}
/**
* Check if Cache has initialized a working storage engine
* Check if Cache has initialized a working config for the given name.
*
* @param string $engine Name of the engine
* @param string $config Name of the configuration setting
@ -379,33 +396,35 @@ class Cache extends Object {
* @access public
* @static
*/
function isInitialized($engine = null) {
function isInitialized($name = null) {
if (Configure::read('Cache.disable')) {
return false;
}
$_this =& Cache::getInstance();
if (!$engine && isset($_this->__config[$_this->__name]['engine'])) {
$engine = $_this->__config[$_this->__name]['engine'];
$self =& Cache::getInstance();
if (!$name && isset($self->__config[$self->__name])) {
$name = $self->__name;
}
return isset($_this->_Engine[$engine]);
return isset($self->_engines[$name]);
}
/**
* Return the settings for current cache engine
* Return the settings for current cache engine. If no name is supplied the settings
* for the 'active default' configuration will be returned. To set the 'active default'
* configuration use `Cache::config()`
*
* @param string $engine Name of the engine
* @param string $engine Name of the configuration to get settings for.
* @return array list of settings for this engine
* @see Cache::config()
* @access public
* @static
*/
function settings($engine = null) {
$_this =& Cache::getInstance();
if (!$engine && isset($_this->__config[$_this->__name]['engine'])) {
$engine = $_this->__config[$_this->__name]['engine'];
function settings($name = null) {
$self =& Cache::getInstance();
if (!$name && isset($self->__config[$self->__name])) {
$name = $self->__name;
}
if (isset($_this->_Engine[$engine]) && !is_null($_this->_Engine[$engine])) {
return $_this->_Engine[$engine]->settings();
if (!empty($self->_engines[$name])) {
return $self->_engines[$name]->settings();
}
return array();
}
@ -417,7 +436,7 @@ class Cache extends Object {
* @package cake
* @subpackage cake.cake.libs
*/
class CacheEngine extends Object {
class CacheEngine {
/**
* settings of current engine instance
@ -428,7 +447,7 @@ class CacheEngine extends Object {
var $settings = array();
/**
* Iitialize the cache engine
* Initialize the cache engine
*
* Called automatically by the cache frontend
*

View file

@ -37,11 +37,12 @@ class FileEngine extends CacheEngine {
var $__File = null;
/**
* settings
* path = absolute path to cache directory, default => CACHE
* prefix = string prefix for filename, default => cake_
* lock = enable file locking on write, default => false
* serialize = serialize the data, default => true
* Settings
*
* - path = absolute path to cache directory, default => CACHE
* - prefix = string prefix for filename, default => cake_
* - lock = enable file locking on write, default => false
* - serialize = serialize the data, default => true
*
* @var array
* @see CacheEngine::__defaults

View file

@ -36,9 +36,11 @@ class MemcacheEngine extends CacheEngine {
var $__Memcache = null;
/**
* settings
* servers = string or array of memcache servers, default => 127.0.0.1
* compress = boolean, default => false
* Settings
*
* - servers = string or array of memcache servers, default => 127.0.0.1. If an
* array MemcacheEngine will use them as a pool.
* - compress = boolean, default => false
*
* @var array
* @access public
@ -60,7 +62,10 @@ class MemcacheEngine extends CacheEngine {
return false;
}
parent::init(array_merge(array(
'engine'=> 'Memcache', 'prefix' => Inflector::slug(APP_DIR) . '_', 'servers' => array('127.0.0.1'), 'compress'=> false
'engine'=> 'Memcache',
'prefix' => Inflector::slug(APP_DIR) . '_',
'servers' => array('127.0.0.1'),
'compress'=> false
), $settings)
);
@ -100,7 +105,7 @@ class MemcacheEngine extends CacheEngine {
*/
function write($key, &$value, $duration) {
$expires = time() + $duration;
$this->__Memcache->set($key.'_expires', $expires, $this->settings['compress'], $expires);
$this->__Memcache->set($key . '_expires', $expires, $this->settings['compress'], $expires);
return $this->__Memcache->set($key, $value, $this->settings['compress'], $expires);
}
@ -113,7 +118,7 @@ class MemcacheEngine extends CacheEngine {
*/
function read($key) {
$time = time();
$cachetime = intval($this->__Memcache->get($key.'_expires'));
$cachetime = intval($this->__Memcache->get($key . '_expires'));
if ($cachetime < $time || ($time + $this->settings['duration']) < $cachetime) {
return false;
}

View file

@ -2,7 +2,6 @@
/**
* Xcache storage engine for cache.
*
*
* PHP versions 4 and 5
*
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
@ -29,9 +28,10 @@
class XcacheEngine extends CacheEngine {
/**
* settings
* PHP_AUTH_USER = xcache.admin.user, default cake
* PHP_AUTH_PW = xcache.admin.password, default cake
* Settings
*
* - PHP_AUTH_USER = xcache.admin.user, default cake
* - PHP_AUTH_PW = xcache.admin.password, default cake
*
* @var array
* @access public
@ -67,7 +67,7 @@ class XcacheEngine extends CacheEngine {
*/
function write($key, &$value, $duration) {
$expires = time() + $duration;
xcache_set($key.'_expires', $expires, $duration);
xcache_set($key . '_expires', $expires, $duration);
return xcache_set($key, $value, $duration);
}
@ -81,7 +81,7 @@ class XcacheEngine extends CacheEngine {
function read($key) {
if (xcache_isset($key)) {
$time = time();
$cachetime = intval(xcache_get($key.'_expires'));
$cachetime = intval(xcache_get($key . '_expires'));
if ($cachetime < $time || ($time + $this->settings['duration']) < $cachetime) {
return false;
}

View file

@ -19,15 +19,6 @@
* @since CakePHP(tm) v 0.2.9
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
*/
/**
* Included libraries.
*
*/
if (!class_exists('File')) {
require LIBS . 'file.php';
}
/**
* Set up error level constants to be used within the framework if they are not defined within the
* system.
@ -60,7 +51,7 @@ class CakeLog {
*
* @var array
* @access protected
**/
*/
var $_streams = array();
/**
@ -68,7 +59,7 @@ class CakeLog {
*
* @return void
* @static
**/
*/
function &getInstance() {
static $instance = array();
if (!isset($instance[0])) {
@ -85,7 +76,7 @@ class CakeLog {
* @param array $config Array of configuration information for the logger
* @return boolean success of configuration.
* @static
**/
*/
function config($key, $config) {
if (empty($config['engine'])) {
trigger_error(__('Missing logger classname', true), E_USER_WARNING);
@ -107,12 +98,10 @@ class CakeLog {
*
* @return mixed boolean false on any failures, string of classname to use if search was successful.\
* @access protected
**/
*/
function _getLogger($loggerName) {
$plugin = null;
if (strpos($loggerName, '.') !== false) {
list($plugin, $loggerName) = explode('.', $loggerName);
}
list($plugin, $loggerName) = pluginSplit($loggerName);
if ($plugin) {
App::import('Lib', $plugin . '.log/' . $loggerName);
} else {
@ -139,46 +128,31 @@ class CakeLog {
*
* @return array
* @static
**/
function streams() {
*/
function configured() {
$self = CakeLog::getInstance();
return array_keys($self->_streams);
}
/**
* Remove a stream from the active streams. Once a stream has been removed
* it will no longer be called.
* Removes a stream from the active streams. Once a stream has been removed
* it will no longer have messages sent to it.
*
* @param string $keyname Key name of callable to remove.
* @return void
* @static
**/
function remove($streamName) {
*/
function drop($streamName) {
$self = CakeLog::getInstance();
unset($self->_streams[$streamName]);
}
/**
* Add a stream the logger.
* Streams represent destinations for log messages. Each stream can connect to
* a different resource /interface and capture/write output to that source.
*
* @param string $key Keyname of config.
* @param array $config Array of config information for the LogStream
* @return boolean success
* @static
**/
function addStream($key, $config) {
$self = CakeLog::getInstance();
$self->_streams[$key] = $config;
}
/**
* Configures the automatic/default stream a FileLog.
*
* @return void
* @access protected
**/
*/
function _autoConfig() {
if (!class_exists('FileLog')) {
App::import('Core', 'log/FileLog');
@ -235,7 +209,7 @@ class CakeLog {
* @param integer $line Line that triggered the error
* @param array $context Context
* @return void
**/
*/
function handleError($code, $description, $file = null, $line = null, $context = null) {
if ($code === 2048 || $code === 8192) {
return;

View file

@ -212,11 +212,10 @@ class CakeSession extends Object {
* @access public
*/
function check($name) {
$var = $this->__validateKeys($name);
if (empty($var)) {
if (empty($name)) {
return false;
}
$result = Set::extract($_SESSION, $var);
$result = Set::classicExtract($_SESSION, $name);
return isset($result);
}
@ -244,7 +243,7 @@ class CakeSession extends Object {
*
* @return boolean
* @deprecated Use CakeSession::delete instead
**/
*/
function del($name) {
trigger_error('CakeSession::del() is deprecated, use CakeSession::delete() instead.', E_USER_WARNING);
return $this->delete($name);
@ -259,13 +258,11 @@ class CakeSession extends Object {
*/
function delete($name) {
if ($this->check($name)) {
if ($var = $this->__validateKeys($name)) {
if (in_array($var, $this->watchKeys)) {
trigger_error('Deleting session key {' . $var . '}', E_USER_NOTICE);
}
$this->__overwrite($_SESSION, Set::remove($_SESSION, $var));
return ($this->check($var) == false);
if (in_array($name, $this->watchKeys)) {
trigger_error('Deleting session key {' . $name . '}', E_USER_NOTICE);
}
$this->__overwrite($_SESSION, Set::remove($_SESSION, $name));
return ($this->check($name) == false);
}
$this->__setError(2, "$name doesn't exist");
return false;
@ -354,7 +351,7 @@ class CakeSession extends Object {
if (empty($name)) {
return false;
}
$result = Set::extract($_SESSION, $name);
$result = Set::classicExtract($_SESSION, $name);
if (!is_null($result)) {
return $result;
@ -385,7 +382,6 @@ class CakeSession extends Object {
* @access public
*/
function watch($var) {
$var = $this->__validateKeys($var);
if (empty($var)) {
return false;
}
@ -402,7 +398,6 @@ class CakeSession extends Object {
* @access public
*/
function ignore($var) {
$var = $this->__validateKeys($var);
if (!in_array($var, $this->watchKeys)) {
return;
}
@ -424,16 +419,14 @@ class CakeSession extends Object {
* @access public
*/
function write($name, $value) {
$var = $this->__validateKeys($name);
if (empty($var)) {
if (empty($name)) {
return false;
}
if (in_array($var, $this->watchKeys)) {
trigger_error('Writing session key {' . $var . '}: ' . Debugger::exportVar($value), E_USER_NOTICE);
if (in_array($name, $this->watchKeys)) {
trigger_error('Writing session key {' . $name . '}: ' . Debugger::exportVar($value), E_USER_NOTICE);
}
$this->__overwrite($_SESSION, Set::insert($_SESSION, $var, $value));
return (Set::extract($_SESSION, $var) === $value);
$this->__overwrite($_SESSION, Set::insert($_SESSION, $name, $value));
return (Set::classicExtract($_SESSION, $name) === $value);
}
/**
@ -676,22 +669,6 @@ class CakeSession extends Object {
$this->__regenerateId();
}
/**
* Validate that the $name is in correct dot notation
* example: $name = 'ControllerName.key';
*
* @param string $name Session key names as string.
* @return mixed false is $name is not correct format, or $name if it is correct
* @access private
*/
function __validateKeys($name) {
if (is_string($name) && preg_match("/^[ 0-9a-zA-Z._-]*$/", $name)) {
return $name;
}
$this->__setError(3, "$name is not a string");
return false;
}
/**
* Helper method to set an internal error message.
*

View file

@ -118,12 +118,12 @@ class ClassRegistry {
foreach ($objects as $key => $settings) {
if (is_array($settings)) {
$plugin = $pluginPath = null;
$pluginPath = null;
$settings = array_merge($defaults, $settings);
$class = $settings['class'];
if (strpos($class, '.') !== false) {
list($plugin, $class) = explode('.', $class);
list($plugin, $class) = pluginSplit($class);
if ($plugin) {
$pluginPath = $plugin . '.';
}

View file

@ -91,11 +91,21 @@ class Configure extends Object {
if (strpos($name, '.') === false) {
$_this->{$name} = $value;
} else {
$names = explode('.', $name, 2);
if (!isset($_this->{$names[0]})) {
$_this->{$names[0]} = array();
$names = explode('.', $name, 4);
switch (count($names)) {
case 2:
$_this->{$names[0]}[$names[1]] = $value;
break;
case 3:
$_this->{$names[0]}[$names[1]][$names[2]] = $value;
case 4:
$names = explode('.', $name, 2);
if (!isset($_this->{$names[0]})) {
$_this->{$names[0]} = array();
}
$_this->{$names[0]} = Set::insert($_this->{$names[0]}, $names[1], $value);
break;
}
$_this->{$names[0]} = Set::insert($_this->{$names[0]}, $names[1], $value);
}
}
@ -130,12 +140,14 @@ class Configure extends Object {
/**
* Used to read information stored in the Configure instance.
*
* Usage
* Usage:
* {{{
* Configure::read('Name'); will return all values for Name
* Configure::read('Name.key'); will return only the value of Configure::Name[key]
* }}}
*
* @link http://book.cakephp.org/view/413/read
* @param string $var Variable to obtain
* @link http://book.cakephp.org/view/413/read
* @param string $var Variable to obtain. Use '.' to access array elements.
* @return string value of Configure::$var
* @access public
*/
@ -147,28 +159,44 @@ class Configure extends Object {
}
if (strpos($var, '.') !== false) {
$names = explode('.', $var, 2);
$names = explode('.', $var, 3);
$var = $names[0];
}
if (!isset($_this->{$var})) {
return null;
}
if (!empty($names[1])) {
return Set::extract($_this->{$var}, $names[1]);
if (!isset($names[1])) {
return $_this->{$var};
}
return $_this->{$var};
switch (count($names)) {
case 2:
if (isset($_this->{$var}[$names[1]])) {
return $_this->{$var}[$names[1]];
}
break;
case 3:
if (isset($_this->{$var}[$names[1]][$names[2]])) {
return $_this->{$var}[$names[1]][$names[2]];
}
if (!isset($_this->{$var}[$names[1]])) {
return null;
}
return Set::classicExtract($_this->{$var}[$names[1]], $names[2]);
break;
}
return null;
}
/**
* Used to delete a variable from the Configure instance.
*
* Usage:
* {{{
* Configure::delete('Name'); will delete the entire Configure::Name
* Configure::delete('Name.key'); will delete only the Configure::Name[key]
* }}}
*
* @link http://book.cakephp.org/view/414/delete
* @link http://book.cakephp.org/view/414/delete
* @param string $var the var to be deleted
* @return void
* @access public
@ -188,21 +216,30 @@ class Configure extends Object {
/**
* Loads a file from app/config/configure_file.php.
* Config file variables should be formated like:
* $config['name'] = 'value';
* These will be used to create dynamic Configure vars.
* `$config['name'] = 'value';`
* These will be used to create dynamic Configure vars. load() is also used to
* load stored config files created with Configure::store()
*
* Usage Configure::load('configure_file');
* - To load config files from app/config use `Configure::load('configure_file');`.
* - To load config files from a plugin `Configure::load('plugin.configure_file');`.
*
* @link http://book.cakephp.org/view/415/load
* @link http://book.cakephp.org/view/415/load
* @param string $fileName name of file to load, extension must be .php and only the name
* should be used, not the extenstion
* should be used, not the extenstion
* @return mixed false if file not found, void if load successful
* @access public
*/
function load($fileName) {
$found = false;
$found = $plugin = $pluginPath = false;
list($plugin, $fileName) = pluginSplit($fileName);
if ($plugin) {
$pluginPath = App::pluginPath($plugin);
}
if (file_exists(CONFIGS . $fileName . '.php')) {
if ($pluginPath && file_exists($pluginPath . 'config' . DS . $fileName . '.php')) {
include($pluginPath . 'config' . DS . $fileName . '.php');
$found = true;
} elseif (file_exists(CONFIGS . $fileName . '.php')) {
include(CONFIGS . $fileName . '.php');
$found = true;
} elseif (file_exists(CACHE . 'persistent' . DS . $fileName . '.php')) {
@ -233,9 +270,9 @@ class Configure extends Object {
/**
* Used to determine the current version of CakePHP.
*
* Usage Configure::version();
* Usage `Configure::version();`
*
* @link http://book.cakephp.org/view/416/version
* @link http://book.cakephp.org/view/416/version
* @return string Current version of CakePHP
* @access public
*/
@ -252,9 +289,11 @@ class Configure extends Object {
/**
* Used to write a config file to disk.
*
* Configure::store('Model', 'class.paths', array('Users' => array(
* {{{
* Configure::store('Model', 'class_paths', array('Users' => array(
* 'path' => 'users', 'plugin' => true
* )));
* }}}
*
* @param string $type Type of config file to write, ex: Models, Controllers, Helpers, Components
* @param string $name file name.
@ -267,20 +306,7 @@ class Configure extends Object {
$content = '';
foreach ($data as $key => $value) {
$content .= "\$config['$type']['$key']";
if (is_array($value)) {
$content .= " = array(";
foreach ($value as $key1 => $value2) {
$value2 = addslashes($value2);
$content .= "'$key1' => '$value2', ";
}
$content .= ");\n";
} else {
$value = addslashes($value);
$content .= " = '$value';\n";
}
$content .= "\$config['$type']['$key'] = " . var_export($value, true) . ";\n";
}
if (is_null($type)) {
$write = false;
@ -367,10 +393,6 @@ class Configure extends Object {
trigger_error(sprintf(__("Can't find application core file. Please create %score.php, and make sure it is readable by PHP.", true), CONFIGS), E_USER_ERROR);
}
if (!include(CONFIGS . 'bootstrap.php')) {
trigger_error(sprintf(__("Can't find application bootstrap file. Please create %sbootstrap.php, and make sure it is readable by PHP.", true), CONFIGS), E_USER_ERROR);
}
if (Configure::read('Cache.disable') !== true) {
$cache = Cache::config('default');
@ -407,6 +429,11 @@ class Configure extends Object {
}
Cache::config('default');
}
if (!include(CONFIGS . 'bootstrap.php')) {
trigger_error(sprintf(__("Can't find application bootstrap file. Please create %sbootstrap.php, and make sure it is readable by PHP.", true), CONFIGS), E_USER_ERROR);
}
if (App::path('controllers') == array()) {
App::build(array(
'models' => $modelPaths, 'views' => $viewPaths, 'controllers' => $controllerPaths,
@ -684,7 +711,7 @@ class App extends Object {
*
* @param string $plugin CamelCased plugin name to find the path of.
* @return string full path to the plugin.
**/
*/
function pluginPath($plugin) {
$_this =& App::getInstance();
$pluginDir = Inflector::underscore($plugin);
@ -1222,8 +1249,8 @@ class App extends Object {
/**
* Returns an array of filenames of PHP files in the given directory.
*
* @param string $path Path to scan for files
* @param string $suffix if false, return only directories. if string, match and return files
* @param string $path Path to scan for files
* @param string $suffix if false, return only directories. if string, match and return files
* @return array List of directories or files in directory
*/
function __list($path, $suffix = false, $extension = false) {

View file

@ -56,7 +56,7 @@ class Component extends Object {
*
* @var array
* @access private
**/
*/
var $__settings = array();
/**
@ -189,16 +189,8 @@ class Component extends Object {
$normal = Set::merge(array('Session' => null), $normal);
}
foreach ((array)$normal as $component => $config) {
$plugin = null;
if (isset($this->__controllerVars['plugin'])) {
$plugin = $this->__controllerVars['plugin'] . '.';
}
if (strpos($component, '.') !== false) {
list($plugin, $component) = explode('.', $component);
$plugin = $plugin . '.';
}
$plugin = isset($this->__controllerVars['plugin']) ? $this->__controllerVars['plugin'] . '.' : null;
list($plugin, $component) = pluginSplit($component, true, $plugin);
$componentCn = $component . 'Component';
if (!class_exists($componentCn)) {

View file

@ -46,9 +46,7 @@ class AclComponent extends Object {
$name = Inflector::camelize(strtolower(Configure::read('Acl.classname')));
if (!class_exists($name)) {
if (App::import('Component', $name)) {
if (strpos($name, '.') !== false) {
list($plugin, $name) = explode('.', $name);
}
list($plugin, $name) = pluginSplit($name);
$name .= 'Component';
} else {
trigger_error(sprintf(__('Could not find %s.', true), $name), E_USER_WARNING);

View file

@ -263,7 +263,7 @@ class CookieComponent extends Object {
/**
* @deprecated use delete()
**/
*/
function del($key) {
trigger_error('Deprecated method, use CookieComponent::delete instead', E_USER_WARNING);
return $this->delete($key);

View file

@ -391,9 +391,7 @@ class EmailComponent extends Object{
$viewClass = $this->Controller->view;
if ($viewClass != 'View') {
if (strpos($viewClass, '.') !== false) {
list($plugin, $viewClass) = explode('.', $viewClass);
}
list($plugin, $viewClass) = pluginSplit($viewClass);
$viewClass = $viewClass . 'View';
App::import('View', $this->Controller->view);
}

View file

@ -576,7 +576,7 @@ class SecurityComponent extends Object {
}
$data = $controller->data;
if (!isset($data['_Token']) || !isset($data['_Token']['fields'])) {
if (!isset($data['_Token']) || !isset($data['_Token']['fields']) || !isset($data['_Token']['key'])) {
return false;
}
$token = $data['_Token']['key'];

View file

@ -528,11 +528,7 @@ class Controller extends Object {
$plugin = $this->plugin . '.';
}
}
if (strpos($modelClass, '.') !== false) {
list($plugin, $modelClass) = explode('.', $modelClass);
$plugin = $plugin . '.';
}
list($plugin, $modelClass) = pluginSplit($modelClass, true, $plugin);
if ($this->persistModel === true) {
$cached = $this->_persist($modelClass, null, $object);
@ -808,9 +804,7 @@ class Controller extends Object {
$viewClass = $this->view;
if ($this->view != 'View') {
if (strpos($viewClass, '.') !== false) {
list($plugin, $viewClass) = explode('.', $viewClass);
}
list($plugin, $viewClass) = pluginSplit($viewClass);
$viewClass = $viewClass . 'View';
App::import('View', $this->view);
}
@ -1003,9 +997,8 @@ class Controller extends Object {
if (is_string($object)) {
$assoc = null;
if (strpos($object, '.') !== false) {
list($object, $assoc) = explode('.', $object);
if (strpos($object, '.') !== false) {
list($object, $assoc) = pluginSplit($object);
}
if ($assoc && isset($this->{$object}->{$assoc})) {
@ -1112,8 +1105,9 @@ class Controller extends Object {
$type = $defaults[0];
unset($defaults[0]);
}
extract($options = array_merge(array('page' => 1, 'limit' => 20), $defaults, $options));
$options = array_merge(array('page' => 1, 'limit' => 20), $defaults, $options);
$options['limit'] = (empty($options['limit']) || !is_numeric($options['limit'])) ? 1 : $options['limit'];
extract($options);
if (is_array($scope) && !empty($scope)) {
$conditions = array_merge($conditions, $scope);

View file

@ -107,10 +107,13 @@ class ErrorHandler extends Object {
if (!in_array(strtolower($method), array_map('strtolower', get_class_methods($this)))) {
$method = 'error';
}
if ($method !== 'error') {
if (Configure::read('debug') == 0) {
$parentMethods = get_class_methods(get_parent_class($this));
$parentClass = get_parent_class($this);
if (strtolower($parentClass) != 'errorhandler') {
$method = 'error404';
}
$parentMethods = get_class_methods($parentClass);
if (in_array($method, $parentMethods)) {
$method = 'error404';
}

View file

@ -577,7 +577,8 @@ class HttpSocket extends CakeSocket {
$stripIfEmpty = array(
'query' => '?%query',
'fragment' => '#%fragment',
'user' => '%user:%pass@'
'user' => '%user:%pass@',
'host' => '%host:%port/'
);
foreach ($stripIfEmpty as $key => $strip) {
@ -590,7 +591,6 @@ class HttpSocket extends CakeSocket {
if (array_key_exists($uri['scheme'], $defaultPorts) && $defaultPorts[$uri['scheme']] == $uri['port']) {
$uriTemplate = str_replace(':%port', null, $uriTemplate);
}
foreach ($uri as $property => $value) {
$uriTemplate = str_replace('%'.$property, $value, $uriTemplate);
}

View file

@ -392,7 +392,7 @@ class I18n extends Object {
$header = "";
do {
$line = trim(fgets($file, 1024));
$line = trim(fgets($file));
if ($line == "" || $line[0] == "#") {
continue;
}

View file

@ -37,7 +37,7 @@ class Inflector {
*
* @var array
* @access protected
**/
*/
var $_plural = array(
'rules' => array(
'/(s)tatus$/i' => '\1\2tatuses',
@ -105,7 +105,7 @@ class Inflector {
*
* @var array
* @access protected
**/
*/
var $_singular = array(
'rules' => array(
'/(s)tatuses$/i' => '\1\2tatus',
@ -139,6 +139,7 @@ class Inflector {
'/(m)en$/i' => '\1an',
'/(c)hildren$/i' => '\1\2hild',
'/(n)ews$/i' => '\1\2ews',
'/eaus$/' => 'eau',
'/^(.*us)$/' => '\\1',
'/s$/i' => ''
),
@ -155,7 +156,7 @@ class Inflector {
*
* @var array
* @access protected
**/
*/
var $_uninflected = array(
'Amoyese', 'bison', 'Borghese', 'bream', 'breeches', 'britches', 'buffalo', 'cantus',
'carp', 'chassis', 'clippers', 'cod', 'coitus', 'Congoese', 'contretemps', 'corps',
@ -176,7 +177,7 @@ class Inflector {
*
* @var array
* @access protected
**/
*/
var $_pluralized = array();
/**
@ -184,7 +185,7 @@ class Inflector {
*
* @var array
* @access protected
**/
*/
var $_singularized = array();
/**

View file

@ -2,7 +2,6 @@
/**
* File Storage stream for Logging
*
*
* PHP versions 4 and 5
*
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
@ -18,7 +17,9 @@
* @since CakePHP(tm) v 1.3
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
*/
if (!class_exists('File')) {
require LIBS . 'file.php';
}
/**
* File Storage stream for Logging
*
@ -31,7 +32,7 @@ class FileLog {
* Path to save log files on.
*
* @var string
**/
*/
var $_path = null;
/**
@ -43,7 +44,7 @@ class FileLog {
*
* @param array $options Options for the FileLog, see above.
* @return void
**/
*/
function FileLog($options = array()) {
$options += array('path' => LOGS);
$this->_path = $options['path'];
@ -55,7 +56,7 @@ class FileLog {
* @param string $type The type of log you are making.
* @param string $message The message you want to log.
* @return boolean success of write.
**/
*/
function write($type, $message) {
$debugTypes = array('notice', 'info', 'debug');

View file

@ -36,7 +36,7 @@ class MagicDb extends Object {
* Holds the parsed MagicDb for this class instance
*
* @var array
**/
*/
var $db = array();
/**
@ -45,7 +45,7 @@ class MagicDb extends Object {
* @var $magicDb mixed Can be an array containing the db, a magic db as a string, or a filename pointing to a magic db in .db or magic.db.php format
* @return boolean Returns false if reading / validation failed or true on success.
* @author Felix
**/
*/
function read($magicDb = null) {
if (!is_string($magicDb) && !is_array($magicDb)) {
return false;

View file

@ -155,7 +155,7 @@ class ContainableBehavior extends ModelBehavior {
if (!$reset && empty($instance->__backOriginalAssociation)) {
$instance->__backOriginalAssociation = $backupBindings;
} else if ($reset) {
$instance->__backAssociation[$type] = $instance->{$type};
$instance->__backAssociation[$type] = $backupBindings[$type];
}
$instance->{$type}[$assoc] = array_merge($instance->{$type}[$assoc], $model['keep'][$assoc]);
}

View file

@ -63,7 +63,7 @@ class CakeSchema extends Object {
* plugin name.
*
* @var string
**/
*/
var $plugin = null;
/**
@ -245,7 +245,7 @@ class CakeSchema extends Object {
if (is_object($Object) && $Object->useTable !== false) {
$Object->setDataSource($connection);
$table = $db->fullTableName($Object->useTable, false);
$table = $db->fullTableName($Object, false);
if (in_array($table, $currentTables)) {
$key = array_search($table, $currentTables);
@ -382,7 +382,7 @@ class CakeSchema extends Object {
* @param string $table Table name you want returned.
* @param array $fields Array of field information to generate the table with.
* @return string Variable declaration for a schema class
**/
*/
function generateTable($table, $fields) {
$out = "\tvar \${$table} = array(\n";
if (is_array($fields)) {
@ -573,7 +573,7 @@ class CakeSchema extends Object {
* @param array $new New indexes
* @param array $old Old indexes
* @return mixed False on failure, or an array of parameters to add & drop.
**/
*/
function _compareTableParameters($new, $old) {
if (!is_array($new) || !is_array($old)) {
return false;

View file

@ -404,7 +404,7 @@ class DataSource extends Object {
* before establishing a connection.
*
* @return boolean Whether or not the Datasources conditions for use are met.
**/
*/
function enabled() {
return true;
}

View file

@ -123,7 +123,7 @@ class DboAdodb extends DboSource {
* Check that AdoDB is available.
*
* @return boolean
**/
*/
function enabled() {
return function_exists('NewADOConnection');
}

View file

@ -144,7 +144,7 @@ class DboDb2 extends DboSource {
* Check that the DB2 extension is installed/loaded
*
* @return boolean
**/
*/
function enabled() {
return extension_loaded('ibm_db2');
}

View file

@ -117,7 +117,7 @@ class DboFirebird extends DboSource {
* Firebird Transaction commands.
*
* @var array
**/
*/
var $_commands = array(
'begin' => 'SET TRANSACTION',
'commit' => 'COMMIT',
@ -143,7 +143,7 @@ class DboFirebird extends DboSource {
* Check that the interbase extension is loaded
*
* @return boolean
**/
*/
function enabled() {
return extension_loaded('interbase');
}

View file

@ -162,7 +162,7 @@ class DboMssql extends DboSource {
* Check that MsSQL is installed/loaded
*
* @return boolean
**/
*/
function enabled() {
return extension_loaded('mssql');
}
@ -426,7 +426,7 @@ class DboMssql extends DboSource {
* @return string Error message with error number
*/
function lastError() {
$error = mssql_get_last_message($this->connection);
$error = mssql_get_last_message();
if ($error) {
if (!preg_match('/contexto de la base de datos a|contesto di database|changed database|datenbankkontext/i', $error)) {

View file

@ -352,7 +352,7 @@ class DboMysqlBase extends DboSource {
* @param array $parameters Parameters to add & drop.
* @return array Array of table property alteration statementes.
* @todo Implement this method.
**/
*/
function _alterTableParameters($table, $parameters) {
if (isset($parameters['change'])) {
return $this->buildTableParameters($parameters['change']);
@ -456,13 +456,14 @@ class DboMysqlBase extends DboSource {
* @return string Character set name
*/
function getCharsetName($name) {
$cols = $this->query('SELECT CHARACTER_SET_NAME FROM INFORMATION_SCHEMA.COLLATIONS WHERE COLLATION_NAME= ' . $this->value($name) . ';');
if (isset($cols[0]['COLLATIONS']['CHARACTER_SET_NAME'])) {
return $cols[0]['COLLATIONS']['CHARACTER_SET_NAME'];
if ((bool)version_compare(mysql_get_server_info($this->connection), "5", ">=")) {
$cols = $this->query('SELECT CHARACTER_SET_NAME FROM INFORMATION_SCHEMA.COLLATIONS WHERE COLLATION_NAME= ' . $this->value($name) . ';');
if (isset($cols[0]['COLLATIONS']['CHARACTER_SET_NAME'])) {
return $cols[0]['COLLATIONS']['CHARACTER_SET_NAME'];
}
}
return false;
}
}
/**
@ -530,7 +531,7 @@ class DboMysql extends DboMysqlBase {
* Check whether the MySQL extension is installed/loaded
*
* @return boolean
**/
*/
function enabled() {
return extension_loaded('mysql');
}

View file

@ -87,7 +87,7 @@ class DboMysqli extends DboMysqlBase {
* Check that MySQLi is installed/enabled
*
* @return boolean
**/
*/
function enabled() {
return extension_loaded('mysqli');
}

View file

@ -110,7 +110,7 @@ class DboOdbc extends DboSource {
* Check if the ODBC extension is installed/loaded
*
* @return boolean
**/
*/
function enabled() {
return extension_loaded('odbc');
}

View file

@ -127,7 +127,7 @@ class DboPostgres extends DboSource {
* Check if PostgreSQL is enabled/loaded
*
* @return boolean
**/
*/
function enabled() {
return extension_loaded('pgsql');
}

View file

@ -141,7 +141,7 @@ class DboSqlite extends DboSource {
* Check that SQLite is enabled/installed
*
* @return boolean
**/
*/
function enabled() {
return extension_loaded('sqlite');
}

View file

@ -109,7 +109,7 @@ class DboSybase extends DboSource {
* Check that one of the sybase extensions is installed
*
* @return boolean
**/
*/
function enabled() {
return extension_loaded('sybase') || extension_loaded('sybase_ct');
}

View file

@ -495,7 +495,7 @@ class DboSource extends DataSource {
*
* @param boolean $sorted Get the queries sorted by time taken, defaults to false.
* @return array Array of queries run as an array
**/
*/
function getLog($sorted = false) {
if ($sorted) {
$log = sortByKey($this->_queriesLog, 'took', 'desc', SORT_NUMERIC);
@ -851,12 +851,12 @@ class DboSource extends DataSource {
if (count($ins) > 1) {
$query = str_replace('{$__cakeID__$}', '(' .join(', ', $ins) .')', $query);
$query = str_replace('= (', 'IN (', $query);
$query = str_replace('= (', 'IN (', $query);
$query = str_replace('= (', 'IN (', $query);
} else {
$query = str_replace('{$__cakeID__$}',$ins[0], $query);
}
$query = str_replace(' WHERE 1 = 1', '', $query);
$query = str_replace(' WHERE 1 = 1', '', $query);
}
$foreignKey = $model->hasAndBelongsToMany[$association]['foreignKey'];
@ -930,7 +930,7 @@ class DboSource extends DataSource {
$this->__mergeAssociation($resultSet[$i], $fetch, $association, $type, $selfJoin);
}
if (isset($resultSet[$i][$association])) {
$resultSet[$i][$association] = $linkModel->afterFind($resultSet[$i][$association]);
$resultSet[$i][$association] = $linkModel->afterFind($resultSet[$i][$association], false);
}
} else {
$tempArray[0][$association] = false;
@ -952,7 +952,7 @@ class DboSource extends DataSource {
$query = str_replace('{$__cakeID__$}', join(', ', $ids), $query);
if (count($ids) > 1) {
$query = str_replace('= (', 'IN (', $query);
$query = str_replace('= (', 'IN (', $query);
$query = str_replace('= (', 'IN (', $query);
}
return $this->fetchAll($query, $model->cacheQueries, $model->alias);
}
@ -967,7 +967,7 @@ class DboSource extends DataSource {
* @param object $model Model being merged onto
* @param object $linkModel Model being merged
* @return void
**/
*/
function __mergeHasMany(&$resultSet, $merge, $association, &$model, &$linkModel) {
foreach ($resultSet as $i => $value) {
$count = 0;
@ -2483,7 +2483,7 @@ class DboSource extends DataSource {
* @param array $columnData The array of column data.
* @param string $position The position type to use. 'beforeDefault' or 'afterDefault' are common
* @return string a built column with the field parameters added.
**/
*/
function _buildFieldParameters($columnString, $columnData, $position) {
foreach ($this->fieldParameters as $paramName => $value) {
if (isset($columnData[$paramName]) && $value['position'] == $position) {

View file

@ -641,20 +641,15 @@ class Model extends Overloadable {
if (strpos($assoc, '.') !== false) {
$value = $this->{$type}[$assoc];
unset($this->{$type}[$assoc]);
list($plugin, $assoc) = explode('.', $assoc);
list($plugin, $assoc) = pluginSplit($assoc, true);
$this->{$type}[$assoc] = $value;
$plugin = $plugin . '.';
}
}
$className = $assoc;
if (isset($value['className']) && !empty($value['className'])) {
$className = $value['className'];
if (strpos($className, '.') !== false) {
list($plugin, $className) = explode('.', $className);
$plugin = $plugin . '.';
$this->{$type}[$assoc]['className'] = $className;
}
if (!empty($value['className'])) {
list($plugin, $className) = pluginSplit($value['className'], true);
$this->{$type}[$assoc]['className'] = $className;
}
$this->__constructLinkedModel($assoc, $plugin . $className);
}
@ -753,13 +748,8 @@ class Model extends Overloadable {
if (is_array($joinClass)) {
$joinClass = key($joinClass);
}
$plugin = null;
if (strpos($joinClass, '.') !== false) {
list($plugin, $joinClass) = explode('.', $joinClass);
$plugin = $plugin . '.';
$this->{$type}[$assocKey]['with'] = $joinClass;
}
list($plugin, $joinClass) = pluginSplit($joinClass, true);
$this->{$type}[$assocKey]['with'] = $joinClass;
if (!ClassRegistry::isKeySet($joinClass) && $dynamicWith === true) {
$this->{$joinClass} = new AppModel(array(
@ -2453,7 +2443,7 @@ class Model extends Overloadable {
) ||
$this->beforeValidate($options) === false
) {
return $this->validationErrors;
return false;
}
if (!isset($this->validate) || empty($this->validate)) {
@ -2925,7 +2915,7 @@ class Model extends Overloadable {
}
/**
* Called during save operations, before validation. Please note that custom
* Called during validation operations, before validation. Please note that custom
* validation rules can be defined in $validate.
*
* @return boolean True if validate operation should continue, false to abort

View file

@ -279,10 +279,7 @@ class BehaviorCollection extends Object {
* @access public
*/
function attach($behavior, $config = array()) {
$name = $behavior;
if (strpos($behavior, '.')) {
list($plugin, $name) = explode('.', $behavior, 2);
}
list($plugin, $name) = pluginSplit($behavior);
$class = $name . 'Behavior';
if (!App::import('Behavior', $behavior)) {

View file

@ -161,7 +161,7 @@ class Router {
* Builds __prefixes
*
* @return void
**/
*/
function Router() {
$this->__setPrefixes();
}
@ -173,7 +173,7 @@ class Router {
* @return void
* @access private
* @todo Remove support for Routing.admin in future versions.
**/
*/
function __setPrefixes() {
$routing = Configure::read('Routing');
if (!empty($routing['admin'])) {
@ -183,6 +183,7 @@ class Router {
$this->__prefixes = array_merge($this->__prefixes, (array)$routing['prefixes']);
}
}
/**
* Gets a reference to the Router object instance
*
@ -232,6 +233,7 @@ class Router {
foreach ($_this->__prefixes as $prefix) {
if (isset($default[$prefix])) {
$default['prefix'] = $prefix;
break;
}
}
if (isset($default['prefix'])) {
@ -597,6 +599,7 @@ class Router {
if (strcasecmp($name, $match) === 0) {
$url = substr($url, 0, strpos($url, '.' . $name));
$ext = $match;
break;
}
}
}
@ -859,6 +862,7 @@ class Router {
$plugin = $url['plugin'];
}
$_url = $url;
$url = array_merge(array('controller' => $params['controller'], 'plugin' => $params['plugin']), Set::filter($url, true));
if ($plugin !== false) {
@ -878,7 +882,13 @@ class Router {
$originalUrl = $url;
if (isset($route[4]['persist'], $_this->__params[0])) {
$url = array_merge(array_intersect_key($params, Set::combine($route[4]['persist'], '/')), $url);
foreach($route[4]['persist'] as $_key) {
if (array_key_exists($_key, $_url)) {
$url[$_key] = $_url[$_key];
} elseif (array_key_exists($_key, $params)) {
$url[$_key] = $params[$_key];
}
}
}
if ($match = $_this->mapRouteElements($route, $url)) {
$output = trim($match, '/');
@ -890,7 +900,7 @@ class Router {
$named = $args = array();
$skip = array_merge(
array('bare', 'action', 'controller', 'plugin', 'ext', '?', '#', 'prefix'),
array('bare', 'action', 'controller', 'plugin', 'ext', '?', '#', 'prefix'),
$_this->__prefixes
);

View file

@ -61,7 +61,6 @@ class Security extends Object {
* @static
*/
function inactiveMins() {
$_this =& Security::getInstance();
switch (Configure::read('Security.level')) {
case 'high':
return 10;
@ -179,7 +178,6 @@ class Security extends Object {
return '';
}
$_this =& Security::getInstance();
if (!defined('CIPHER_SEED')) {
//This is temporary will change later
define('CIPHER_SEED', '76859309657453542496749683645');

View file

@ -213,8 +213,8 @@ class Validation extends Object {
*
* @param mixed $check credit card number to validate
* @param mixed $type 'all' may be passed as a sting, defaults to fast which checks format of most major credit cards
* if an array is used only the values of the array are checked.
* Example: array('amex', 'bankcard', 'maestro')
* if an array is used only the values of the array are checked.
* Example: array('amex', 'bankcard', 'maestro')
* @param boolean $deep set to true this will check the Luhn algorithm of the credit card.
* @param string $regex A custom regex can also be passed, this will be used instead of the defined regex values
* @return boolean Success
@ -608,12 +608,14 @@ class Validation extends Object {
/**
* Validate a multiple select.
*
* Valid Options
*
* - in => provide a list of choices that selections must be made from
* - max => maximun number of non-zero choices that can be made
* - min => minimum number of non-zero choices that can be made
*
* @param mixed $check Value to check
* @param mixed $options Options for the check.
* Valid options
* in => provide a list of choices that selections must be made from
* max => maximun number of non-zero choices that can be made
* min => minimum number of non-zero choices that can be made
* @return boolean Success
* @access public
*/
@ -672,12 +674,16 @@ class Validation extends Object {
if (is_null($_this->regex)) {
switch ($_this->country) {
case 'us':
case 'all':
case 'can':
// includes all NANPA members. see http://en.wikipedia.org/wiki/North_American_Numbering_Plan#List_of_NANPA_countries_and_territories
default:
$_this->regex = '/^(?:\+?1)?[-. ]?\\(?[2-9][0-8][0-9]\\)?[-. ]?[2-9][0-9]{2}[-. ]?[0-9]{4}$/';
break;
}
}
if (empty($_this->regex)) {
return $_this->_pass('phone', $check, $country);
}
return $_this->_check();
}
@ -698,6 +704,9 @@ class Validation extends Object {
if (is_array($check)) {
$_this->_extract($check);
}
if (empty($country)) {
$_this->country = 'us';
}
if (is_null($_this->regex)) {
switch ($_this->country) {
@ -715,11 +724,13 @@ class Validation extends Object {
$_this->regex = '/^[1-9]{1}[0-9]{3}$/i';
break;
case 'us':
default:
$_this->regex = '/\\A\\b[0-9]{5}(?:-[0-9]{4})?\\b\\z/i';
break;
}
}
if (empty($_this->regex)) {
return $_this->_pass('postal', $check, $country);
}
return $_this->_check();
}
@ -783,13 +794,14 @@ class Validation extends Object {
* Checks that a value is a valid URL according to http://www.w3.org/Addressing/URL/url-spec.txt
*
* The regex checks for the following component parts:
* a valid, optional, scheme
* a valid ip address OR
* a valid domain name as defined by section 2.3.1 of http://www.ietf.org/rfc/rfc1035.txt
* with an optional port number
* an optional valid path
* an optional query string (get parameters)
* an optional fragment (anchor tag)
*
* - a valid, optional, scheme
* - a valid ip address OR
* a valid domain name as defined by section 2.3.1 of http://www.ietf.org/rfc/rfc1035.txt
* with an optional port number
* - an optional valid path
* - an optional query string (get parameters)
* - an optional fragment (anchor tag)
*
* @param string $check Value to check
* @param boolean $strict Require URL to be prefixed by a valid scheme (one of http(s)/ftp(s)/file/news/gopher)
@ -834,6 +846,31 @@ class Validation extends Object {
return call_user_func_array(array(&$object, $method), array($check, $args));
}
/**
* Attempts to pass unhandled Validation locales to a class starting with $classPrefix
* and ending with Validation. For example $classPrefix = 'nl', the class would be
* `NlValidation`.
*
* @param string $method The method to call on the other class.
* @param mixed $check The value to check or an array of parameters for the method to be called.
* @param string $classPrefix The prefix for the class to do the validation.
* @return mixed Return of Passed method, false on failure
* @access protected
**/
function _pass($method, $check, $classPrefix) {
$className = ucwords($classPrefix) . 'Validation';
if (!class_exists($className)) {
trigger_error(sprintf(__('Could not find %s class, unable to complete validation.', true), $className), E_USER_WARNING);
return false;
}
if (!method_exists($className, $method)) {
trigger_error(sprintf(__('Method %s does not exist on %s unable to complete validation.', true), $method, $className), E_USER_WARNING);
return false;
}
$check = (array)$check;
return call_user_func_array(array($className, $method), $check);
}
/**
* Runs a regular expression match.
*

View file

@ -225,7 +225,7 @@ class Helper extends Overloadable {
*
* @param string $path The file path to timestamp, the path must be inside WWW_ROOT
* @return string Path with a timestamp added, or not.
**/
*/
function assetTimestamp($path) {
$timestampEnabled = (
(Configure::read('Asset.timestamp') === true && Configure::read() > 0) ||
@ -578,8 +578,9 @@ class Helper extends Overloadable {
* @param array $options
* @param string $key
* @return array
* @access protected
*/
function __name($options = array(), $field = null, $key = 'name') {
function _name($options = array(), $field = null, $key = 'name') {
$view =& ClassRegistry::getObject('view');
if ($options === null) {
$options = array();
@ -646,7 +647,9 @@ class Helper extends Overloadable {
}
$habtmKey = $this->field();
if (empty($result) && isset($this->data[$habtmKey]) && is_array($this->data[$habtmKey])) {
if (empty($result) && isset($this->data[$habtmKey][$habtmKey])) {
$result = $this->data[$habtmKey][$habtmKey];
} elseif (empty($result) && isset($this->data[$habtmKey]) && is_array($this->data[$habtmKey])) {
if (ClassRegistry::isKeySet($habtmKey)) {
$model =& ClassRegistry::getObject($habtmKey);
$result = $this->__selectedArray($this->data[$habtmKey], $model->primaryKey);
@ -687,7 +690,7 @@ class Helper extends Overloadable {
$this->setEntity($field);
}
$options = (array)$options;
$options = $this->__name($options);
$options = $this->_name($options);
$options = $this->value($options);
$options = $this->domId($options);
if ($this->tagIsInvalid()) {

View file

@ -528,7 +528,7 @@ class AjaxHelper extends AppHelper {
}
}
$attr = $this->_parseAttributes(array_merge($options, array('id' => $id)));
return $this->output(sprintf($this->Html->tags['blockstart'], $attr));
return sprintf($this->Html->tags['blockstart'], $attr);
}
/**
@ -547,7 +547,7 @@ class AjaxHelper extends AppHelper {
return '';
}
}
return $this->output($this->Html->tags['blockend']);
return $this->Html->tags['blockend'];
}
/**

View file

@ -68,24 +68,32 @@ class CacheHelper extends AppHelper {
$useCallbacks = false;
if (is_array($this->cacheAction)) {
$controller = Inflector::underscore($this->controllerName);
$controllerAlternate = Inflector::variable($this->controllerName);
$check = str_replace('/', '_', $this->here);
$replace = str_replace('/', '_', $this->base);
$basePath = str_replace('/', '_', $this->base);
$match = str_replace($this->base, '', $this->here);
$match = str_replace('//', '/', $match);
$match = str_replace('/' . $controller . '/', '', $match);
$match = str_replace('/' . $controllerAlternate . '/', '', $match);
$match = str_replace('/' . $this->controllerName . '/', '', $match);
$check = str_replace($replace, '', $check);
$check = str_replace($basePath, '', $check);
$check = str_replace('_' . $controller . '_', '', $check);
$check = str_replace('_' . $this->controllerName . '_', '', $check);
$check = str_replace('_' . $controllerAlternate . '_', '', $match);
$check = Inflector::slug($check);
$check = preg_replace('/^_+/', '', $check);
$check = trim($check, '_');
$keys = str_replace('/', '_', array_keys($this->cacheAction));
$found = array_keys($this->cacheAction);
$index = null;
$count = 0;
foreach ($keys as $key => $value) {
if (strpos($check, $value) === 0) {
if (strpos($check, rtrim($value, '_')) === 0) {
$index = $found[$count];
break;
}

View file

@ -172,7 +172,8 @@ class FormHelper extends AppHelper {
if (is_array($model) && empty($options)) {
$options = $model;
$model = null;
} elseif (empty($model) && $model !== false && !empty($this->params['models'])) {
}
if (empty($model) && $model !== false && !empty($this->params['models'])) {
$model = $this->params['models'][0];
$this->defaultModel = $this->params['models'][0];
} elseif (empty($model) && empty($this->params['models'])) {
@ -293,7 +294,7 @@ class FormHelper extends AppHelper {
$this->setEntity($model . '.', true);
$attributes = $this->_parseAttributes($htmlAttributes, null, '');
return $this->output(sprintf($this->Html->tags['form'], $attributes)) . $append;
return sprintf($this->Html->tags['form'], $attributes) . $append;
}
/**
@ -348,7 +349,7 @@ class FormHelper extends AppHelper {
$view =& ClassRegistry::getObject('view');
$view->modelScope = false;
return $this->output($out);
return $out;
}
/**
@ -527,11 +528,11 @@ class FormHelper extends AppHelper {
$labelFor = $this->domId($fieldName);
}
return $this->output(sprintf(
return sprintf(
$this->Html->tags['label'],
$labelFor,
$this->_parseAttributes($options), $text
));
);
}
/**
@ -939,11 +940,11 @@ class FormHelper extends AppHelper {
}
unset($options['hiddenField']);
return $this->output($output . sprintf(
return $output . sprintf(
$this->Html->tags['checkbox'],
$options['name'],
$this->_parseAttributes($options, array('name'), null, ' ')
));
);
}
/**
@ -1035,7 +1036,7 @@ class FormHelper extends AppHelper {
sprintf($this->Html->tags['legend'], $legend) . $out
);
}
return $this->output($out);
return $out;
}
/**
@ -1049,11 +1050,11 @@ class FormHelper extends AppHelper {
$options = $this->_initInputField($fieldName, array_merge(
array('type' => 'text'), $options
));
return $this->output(sprintf(
return sprintf(
$this->Html->tags['input'],
$options['name'],
$this->_parseAttributes($options, array('name'), null, ' ')
));
);
}
/**
@ -1065,11 +1066,11 @@ class FormHelper extends AppHelper {
*/
function password($fieldName, $options = array()) {
$options = $this->_initInputField($fieldName, $options);
return $this->output(sprintf(
return sprintf(
$this->Html->tags['password'],
$options['name'],
$this->_parseAttributes($options, array('name'), null, ' ')
));
);
}
/**
@ -1090,12 +1091,12 @@ class FormHelper extends AppHelper {
}
unset($options['value']);
}
return $this->output(sprintf(
return sprintf(
$this->Html->tags['textarea'],
$options['name'],
$this->_parseAttributes($options, array('type', 'name'), null, ' '),
$value
));
);
}
/**
@ -1122,11 +1123,11 @@ class FormHelper extends AppHelper {
$this->__secure(null, '' . $options['value']);
}
return $this->output(sprintf(
return sprintf(
$this->Html->tags['hidden'],
$options['name'],
$this->_parseAttributes($options, array('name', 'class'), '', ' ')
));
);
}
/**
@ -1148,7 +1149,7 @@ class FormHelper extends AppHelper {
}
$attributes = $this->_parseAttributes($options, array('name'), '', ' ');
return $this->output(sprintf($this->Html->tags['file'], $options['name'], $attributes));
return sprintf($this->Html->tags['file'], $options['name'], $attributes);
}
/**
@ -1168,12 +1169,12 @@ class FormHelper extends AppHelper {
if ($options['escape']) {
$title = h($title);
}
return $this->output(sprintf(
return sprintf(
$this->Html->tags['button'],
$options['type'],
$this->_parseAttributes($options, array('type'), '', ' '),
$title
));
);
}
/**
@ -1216,11 +1217,11 @@ class FormHelper extends AppHelper {
if (strpos($caption, '://') !== false) {
unset($options['type']);
$out .= $this->output($before . sprintf(
$out .= $before . sprintf(
$this->Html->tags['submitimage'],
$caption,
$this->_parseAttributes($options, null, '', ' ')
) . $after);
) . $after;
} elseif (preg_match('/\.(jpg|jpe|jpeg|gif|png|ico)$/', $caption)) {
unset($options['type']);
if ($caption{0} !== '/') {
@ -1229,17 +1230,17 @@ class FormHelper extends AppHelper {
$caption = trim($caption, '/');
$url = $this->webroot($caption);
}
$out .= $this->output($before . sprintf(
$out .= $before . sprintf(
$this->Html->tags['submitimage'],
$url,
$this->_parseAttributes($options, null, '', ' ')
) . $after);
) . $after;
} else {
$options['value'] = $caption;
$out .= $this->output($before . sprintf(
$out .= $before . sprintf(
$this->Html->tags['submit'],
$this->_parseAttributes($options, null, '', ' ')
). $after);
). $after;
}
if (isset($divOptions)) {
@ -1346,7 +1347,7 @@ class FormHelper extends AppHelper {
$template = ($style == 'checkbox') ? 'checkboxmultipleend' : 'selectend';
$select[] = $this->Html->tags[$template];
return $this->output(implode("\n", $select));
return implode("\n", $select);
}
/**
@ -1751,8 +1752,9 @@ class FormHelper extends AppHelper {
* @param array $options
* @param string $key
* @return array
* @access protected
*/
function __name($options = array(), $field = null, $key = 'name') {
function _name($options = array(), $field = null, $key = 'name') {
if ($this->requestType == 'get') {
if ($options === null) {
$options = array();
@ -1777,7 +1779,7 @@ class FormHelper extends AppHelper {
return $name;
}
}
return parent::__name($options, $field, $key);
return parent::_name($options, $field, $key);
}
/**
@ -1846,7 +1848,7 @@ class FormHelper extends AppHelper {
$label['class'] = 'selected';
}
list($name) = array_values($this->__name());
list($name) = array_values($this->_name());
if (empty($attributes['class'])) {
$attributes['class'] = 'checkbox';

View file

@ -143,14 +143,14 @@ class HtmlHelper extends AppHelper {
*
* @var array
* @access private
**/
*/
var $__includedScripts = array();
/**
* Options for the currently opened script block buffer if any.
*
* @var array
* @access protected
**/
*/
var $_scriptBlockOptions = array();
/**
* Document type definitions
@ -201,7 +201,7 @@ class HtmlHelper extends AppHelper {
*/
function docType($type = 'xhtml-strict') {
if (isset($this->__docTypes[$type])) {
return $this->output($this->__docTypes[$type]);
return $this->__docTypes[$type];
}
return null;
}
@ -270,7 +270,7 @@ class HtmlHelper extends AppHelper {
}
if ($inline) {
return $this->output($out);
return $out;
} else {
$view =& ClassRegistry::getObject('view');
$view->addScript($out);
@ -288,7 +288,7 @@ class HtmlHelper extends AppHelper {
if (empty($charset)) {
$charset = strtolower(Configure::read('App.encoding'));
}
return $this->output(sprintf($this->tags['charset'], (!empty($charset) ? $charset : 'utf-8')));
return sprintf($this->tags['charset'], (!empty($charset) ? $charset : 'utf-8'));
}
/**
@ -347,7 +347,7 @@ class HtmlHelper extends AppHelper {
}
unset($options['default']);
}
return $this->output(sprintf($this->tags['link'], $url, $this->_parseAttributes($options), $title));
return sprintf($this->tags['link'], $url, $this->_parseAttributes($options), $title);
}
/**
@ -355,7 +355,7 @@ class HtmlHelper extends AppHelper {
*
* #### Options
*
* - `inline` If set to false, the generated tag appears in the head tag of the layout.
* - `inline` If set to false, the generated tag appears in the head tag of the layout. Defaults to true
*
* @param mixed $path The name of a CSS style sheet or an array containing names of
* CSS stylesheets. If `$path` is prefixed with '/', the path will be relative to the webroot
@ -366,13 +366,13 @@ class HtmlHelper extends AppHelper {
* @access public
*/
function css($path, $rel = null, $options = array()) {
$inline = isset($options['inline']) ? $options['inline'] : true;
$options += array('inline' => true);
if (is_array($path)) {
$out = '';
foreach ($path as $i) {
$out .= "\n\t" . $this->css($i, $rel, $options, $inline);
$out .= "\n\t" . $this->css($i, $rel, $options);
}
if ($inline) {
if ($options['inline']) {
return $out . "\n";
}
return;
@ -401,16 +401,15 @@ class HtmlHelper extends AppHelper {
}
if ($rel == 'import') {
$out = sprintf($this->tags['style'], $this->_parseAttributes($options, null, '', ' '), '@import url(' . $url . ');');
$out = sprintf($this->tags['style'], $this->_parseAttributes($options, array('inline'), '', ' '), '@import url(' . $url . ');');
} else {
if ($rel == null) {
$rel = 'stylesheet';
}
$out = sprintf($this->tags['css'], $rel, $url, $this->_parseAttributes($options, array('inline'), '', ' '));
}
$out = $this->output($out);
if ($inline) {
if ($options['inline']) {
return $out;
} else {
$view =& ClassRegistry::getObject('view');
@ -436,7 +435,7 @@ class HtmlHelper extends AppHelper {
* @param mixed $options Array of options, and html attributes see above. If boolean sets $options['inline'] = value
* @return mixed String of <script /> tags or null if $inline is false or if $once is true and the file has been
* included before.
**/
*/
function script($url, $options = array()) {
if (is_bool($options)) {
list($inline, $options) = array($options, array());
@ -471,12 +470,10 @@ class HtmlHelper extends AppHelper {
$url = str_replace(JS_URL, 'cjs/', $url);
}
}
$inline = $options['inline'];
unset($options['inline'], $options['once']);
$attributes = $this->_parseAttributes($options, ' ', ' ');
$out = $this->output(sprintf($this->tags['javascriptlink'], $url, $attributes));
$attributes = $this->_parseAttributes($options, array('inline', 'once'), ' ');
$out = sprintf($this->tags['javascriptlink'], $url, $attributes);
if ($inline) {
if ($options['inline']) {
return $out;
} else {
$view =& ClassRegistry::getObject('view');
@ -494,10 +491,9 @@ class HtmlHelper extends AppHelper {
* @param string $script The script to wrap
* @param array $options The options to use.
* @return mixed string or null depending on the value of `$options['inline']`
**/
*/
function scriptBlock($script, $options = array()) {
$defaultOptions = array('safe' => true, 'inline' => true);
$options = array_merge($defaultOptions, $options);
$options += array('safe' => true, 'inline' => true);
if ($options['safe']) {
$script = "\n" . '//<![CDATA[' . "\n" . $script . "\n" . '//]]>' . "\n";
}
@ -524,10 +520,9 @@ class HtmlHelper extends AppHelper {
*
* @param array $options Options for the code block.
* @return void
**/
*/
function scriptStart($options = array()) {
$defaultOptions = array('safe' => true, 'inline' => true);
$options = array_merge($defaultOptions, $options);
$options += array('safe' => true, 'inline' => true);
$this->_scriptBlockOptions = $options;
ob_start();
return null;
@ -538,7 +533,7 @@ class HtmlHelper extends AppHelper {
* used when the scriptBlock was started
*
* @return mixed depending on the settings of scriptStart() either a script tag or null
**/
*/
function scriptEnd() {
$buffer = ob_get_clean();
$options = $this->_scriptBlockOptions;
@ -589,7 +584,7 @@ class HtmlHelper extends AppHelper {
$out[] = $crumb[0];
}
}
return $this->output(join($separator, $out));
return join($separator, $out);
} else {
return null;
}
@ -628,9 +623,9 @@ class HtmlHelper extends AppHelper {
$image = sprintf($this->tags['image'], $path, $this->_parseAttributes($options, null, '', ' '));
if ($url) {
return $this->output(sprintf($this->tags['link'], $this->url($url), null, $image));
return sprintf($this->tags['link'], $this->url($url), null, $image);
}
return $this->output($image);
return $image;
}
/**
@ -647,8 +642,7 @@ class HtmlHelper extends AppHelper {
foreach ($names as $arg) {
$out[] = sprintf($this->tags['tableheader'], $this->_parseAttributes($thOptions), $arg);
}
$data = sprintf($this->tags['tablerow'], $this->_parseAttributes($trOptions), join(' ', $out));
return $this->output($data);
return sprintf($this->tags['tablerow'], $this->_parseAttributes($trOptions), join(' ', $out));
}
/**
@ -702,7 +696,7 @@ class HtmlHelper extends AppHelper {
$options = $this->_parseAttributes($count % 2 ? $oddTrOptions : $evenTrOptions);
$out[] = sprintf($this->tags['tablerow'], $options, join(' ', $cellsOut));
}
return $this->output(join("\n", $out));
return implode("\n", $out);
}
/**
@ -733,7 +727,7 @@ class HtmlHelper extends AppHelper {
} else {
$tag = 'tag';
}
return $this->output(sprintf($this->tags[$tag], $name, $this->_parseAttributes($options, null, ' ', ''), $text, $name));
return sprintf($this->tags[$tag], $name, $this->_parseAttributes($options, null, ' ', ''), $text, $name);
}
/**
@ -782,7 +776,7 @@ class HtmlHelper extends AppHelper {
} else {
$tag = 'para';
}
return $this->output(sprintf($this->tags[$tag], $this->_parseAttributes($options, null, ' ', ''), $text));
return sprintf($this->tags[$tag], $this->_parseAttributes($options, null, ' ', ''), $text);
}
/**

View file

@ -273,7 +273,7 @@ class JavascriptHelper extends AppHelper {
}
}
}
$out = $this->output(sprintf($this->tags['javascriptlink'], $url));
$out = sprintf($this->tags['javascriptlink'], $url);
if ($inline) {
return $out;
@ -319,7 +319,7 @@ class JavascriptHelper extends AppHelper {
* Encode a string into JSON. Converts and escapes necessary characters.
*
* @return void
**/
*/
function _utf8ToHex($string) {
$length = strlen($string);
$return = '';

View file

@ -27,7 +27,7 @@ class JqueryEngineHelper extends JsBaseEngineHelper {
* Option mappings for jQuery
*
* @var array
**/
*/
var $_optionMap = array(
'request' => array(
'type' => 'dataType',
@ -55,7 +55,7 @@ class JqueryEngineHelper extends JsBaseEngineHelper {
* callback arguments lists
*
* @var string
**/
*/
var $_callbackArguments = array(
'slider' => array(
'start' => 'event, ui',
@ -103,7 +103,7 @@ class JqueryEngineHelper extends JsBaseEngineHelper {
* when jQuery is put into noConflict() mode.
*
* @var string
**/
*/
var $jQueryObject = '$';
/**
@ -116,7 +116,7 @@ class JqueryEngineHelper extends JsBaseEngineHelper {
* @param string $callbacks Array of callback / special options.
* @access public
* @return string
**/
*/
function _methodTemplate($method, $template, $options, $extraSafeKeys = array()) {
$options = $this->_mapOptions($method, $options);
$options = $this->_prepareCallbacks($method, $options);
@ -133,7 +133,7 @@ class JqueryEngineHelper extends JsBaseEngineHelper {
*
* @param string $selector The selector that is targeted
* @return object instance of $this. Allows chained methods.
**/
*/
function get($selector) {
if ($selector == 'window' || $selector == 'document') {
$this->selection = $this->jQueryObject . '(' . $selector .')';
@ -155,7 +155,7 @@ class JqueryEngineHelper extends JsBaseEngineHelper {
* @param string $callback The Javascript function you wish to trigger or the function literal
* @param array $options Options for the event.
* @return string completed event handler
**/
*/
function event($type, $callback, $options = array()) {
$defaults = array('wrap' => true, 'stop' => true);
$options = array_merge($defaults, $options);
@ -175,7 +175,7 @@ class JqueryEngineHelper extends JsBaseEngineHelper {
*
* @param string $functionBody The code to run on domReady
* @return string completed domReady method
**/
*/
function domReady($functionBody) {
$this->get('document');
return $this->event('ready', $functionBody, array('stop' => false));
@ -187,7 +187,7 @@ class JqueryEngineHelper extends JsBaseEngineHelper {
* @param string $method The method you want to apply to the selection
* @param string $callback The function body you wish to apply during the iteration.
* @return string completed iteration
**/
*/
function each($callback) {
return $this->selection . '.each(function () {' . $callback . '});';
}
@ -199,7 +199,7 @@ class JqueryEngineHelper extends JsBaseEngineHelper {
* @param array $options Array of options for the effect.
* @return string completed string with effect.
* @see JsBaseEngineHelper::effect()
**/
*/
function effect($name, $options = array()) {
$speed = null;
if (isset($options['speed']) && in_array($options['speed'], array('fast', 'slow'))) {
@ -230,7 +230,7 @@ class JqueryEngineHelper extends JsBaseEngineHelper {
* @param mixed $url
* @param array $options
* @return string The completed ajax call.
**/
*/
function request($url, $options = array()) {
$url = $this->url($url);
$options = $this->_mapOptions('request', $options);
@ -266,7 +266,7 @@ class JqueryEngineHelper extends JsBaseEngineHelper {
* @param array $options Array of options for the sortable.
* @return string Completed sortable script.
* @see JsHelper::sortable() for options list.
**/
*/
function sortable($options = array()) {
$template = '%s.sortable({%s});';
return $this->_methodTemplate('sortable', $template, $options);
@ -280,7 +280,7 @@ class JqueryEngineHelper extends JsBaseEngineHelper {
* @param array $options Array of options for the draggable element.
* @return string Completed Draggable script.
* @see JsHelper::drag() for options list.
**/
*/
function drag($options = array()) {
$template = '%s.draggable({%s});';
return $this->_methodTemplate('drag', $template, $options);
@ -294,7 +294,7 @@ class JqueryEngineHelper extends JsBaseEngineHelper {
* @param array $options Array of options for the droppable element.
* @return string Completed Droppable script.
* @see JsHelper::drop() for options list.
**/
*/
function drop($options = array()) {
$template = '%s.droppable({%s});';
return $this->_methodTemplate('drop', $template, $options);
@ -308,7 +308,7 @@ class JqueryEngineHelper extends JsBaseEngineHelper {
* @param array $options Array of options for the droppable element.
* @return string Completed Slider script.
* @see JsHelper::slider() for options list.
**/
*/
function slider($options = array()) {
$callbacks = array('start', 'change', 'slide', 'stop');
$template = '%s.slider({%s});';
@ -322,7 +322,7 @@ class JqueryEngineHelper extends JsBaseEngineHelper {
* @param array $options Options for the serialization
* @return string completed form serialization script
* @see JsHelper::serializeForm() for option list.
**/
*/
function serializeForm($options = array()) {
$options = array_merge(array('isForm' => false, 'inline' => false), $options);
$selector = $this->selection;

View file

@ -26,20 +26,20 @@
*
* @package cake
* @subpackage cake.cake.libs.view.helpers
**/
*/
class JsHelper extends AppHelper {
/**
* Whether or not you want scripts to be buffered or output.
*
* @var boolean
**/
*/
var $bufferScripts = true;
/**
* helpers
*
* @var array
**/
*/
var $helpers = array('Html', 'Form');
/**
@ -47,14 +47,14 @@ class JsHelper extends AppHelper {
*
* @var array
* @see JsHelper::set()
**/
*/
var $__jsVars = array();
/**
* Scripts that are queued for output
*
* @var array
**/
*/
var $__bufferedScripts = array();
/**
@ -62,14 +62,14 @@ class JsHelper extends AppHelper {
*
* @var string
* @access private
**/
*/
var $__engineName;
/**
* The javascript variable created by set() variables.
*
* @var string
**/
*/
var $setVariable = APP_DIR;
/**
@ -78,7 +78,7 @@ class JsHelper extends AppHelper {
* @param array $settings Settings array contains name of engine helper.
* @access public
* @return void
**/
*/
function __construct($settings = array()) {
$className = 'Jquery';
if (is_array($settings) && isset($settings[0])) {
@ -87,9 +87,8 @@ class JsHelper extends AppHelper {
$className = $settings;
}
$engineName = $className;
if (strpos($className, '.') !== false) {
list($plugin, $className) = explode('.', $className);
}
list($plugin, $className) = pluginSplit($className);
$this->__engineName = $className . 'Engine';
$engineClass = $engineName . 'Engine';
$this->helpers[] = $engineClass;
@ -115,7 +114,7 @@ class JsHelper extends AppHelper {
* @param array $params Parameters for the method being called.
* @access public
* @return mixed Depends on the return of the dispatched method, or it could be an instance of the EngineHelper
**/
*/
function call__($method, $params) {
if (isset($this->{$this->__engineName}) && method_exists($this->{$this->__engineName}, $method)) {
$buffer = false;
@ -158,7 +157,7 @@ class JsHelper extends AppHelper {
* @param array $options Options to use for encoding JSON. See JsBaseEngineHelper::object() for more details.
* @return string encoded JSON
* @deprecated Remove when support for PHP4 and Object::object are removed.
**/
*/
function object($data = array(), $options = array()) {
return $this->{$this->__engineName}->object($data, $options);
}
@ -178,7 +177,7 @@ class JsHelper extends AppHelper {
*
* @param array $options options for the code block
* @return string completed javascript tag.
**/
*/
function writeBuffer($options = array()) {
$defaults = array('onDomReady' => true, 'inline' => true, 'cache' => false, 'clear' => true, 'safe' => true);
$options = array_merge($defaults, $options);
@ -208,7 +207,7 @@ class JsHelper extends AppHelper {
* Write a script to the cached scripts.
*
* @return void
**/
*/
function buffer($script) {
$this->__bufferedScripts[] = $script;
}
@ -218,7 +217,7 @@ class JsHelper extends AppHelper {
*
* @param boolean $clear Whether or not to clear the script caches (default true)
* @return array Array of scripts added to the request.
**/
*/
function getBuffer($clear = true) {
$this->_createVars();
$scripts = $this->__bufferedScripts;
@ -233,7 +232,7 @@ class JsHelper extends AppHelper {
* Generates the object string for variables passed to javascript.
*
* @return string
**/
*/
function _createVars() {
if (!empty($this->__jsVars)) {
$setVar = (strpos($this->setVariable, '.')) ? $this->setVariable : 'var ' . $this->setVariable;
@ -258,7 +257,7 @@ class JsHelper extends AppHelper {
* @param mixed $url Mixed either a string URL or an cake url array.
* @param array $options Options for both the HTML element and Js::request()
* @return string Completed link. If buffering is disabled a script tag will be returned as well.
**/
*/
function link($title, $url = null, $options = array()) {
if (!isset($options['id'])) {
$options['id'] = 'link-' . intval(mt_rand());
@ -293,7 +292,7 @@ class JsHelper extends AppHelper {
* @param mixed $one
* @param mixed $two
* @return void
**/
*/
function set($one, $two = null) {
$data = null;
if (is_array($one)) {
@ -322,7 +321,7 @@ class JsHelper extends AppHelper {
* @param string $title The display text of the submit button.
* @param array $options Array of options to use.
* @return string Completed submit button.
**/
*/
function submit($caption = null, $options = array()) {
if (!isset($options['id'])) {
$options['id'] = 'submit-' . intval(mt_rand());
@ -364,7 +363,7 @@ class JsHelper extends AppHelper {
* @param array $options Options to filter.
* @param array $additional Array of additional keys to extract and include in the return options array.
* @return array Array of options for non-js.
**/
*/
function _getHtmlOptions(&$options, $additional = array()) {
$htmlKeys = array_merge(array('class', 'id', 'escape', 'onblur', 'onfocus', 'rel', 'title'), $additional);
$htmlOptions = array();
@ -388,14 +387,14 @@ class JsHelper extends AppHelper {
* Abstract Base Class for All JsEngines to extend. Provides generic methods.
*
* @package cake.view.helpers
**/
*/
class JsBaseEngineHelper extends AppHelper {
/**
* Determines whether native JSON extension is used for encoding. Set by object constructor.
*
* @var boolean
* @access public
**/
*/
var $useNative = false;
/**
@ -403,7 +402,7 @@ class JsBaseEngineHelper extends AppHelper {
*
* @var string
* @access public
**/
*/
var $selection;
/**
@ -412,7 +411,7 @@ class JsBaseEngineHelper extends AppHelper {
* for end user use though.
*
* @var array
**/
*/
var $_optionMap = array();
/**
@ -420,21 +419,21 @@ class JsBaseEngineHelper extends AppHelper {
* This allows specific 'end point' methods to be automatically buffered by the JsHelper.
*
* @var array
**/
*/
var $bufferedMethods = array('event', 'sortable', 'drag', 'drop', 'slider');
/**
* Contains a list of callback names -> default arguments.
*
* @var array
**/
*/
var $_callbackArguments = array();
/**
* Constructor.
*
* @return void
**/
*/
function __construct() {
$this->useNative = function_exists('json_encode');
}
@ -445,7 +444,7 @@ class JsBaseEngineHelper extends AppHelper {
* @param string $message Message you want to alter.
* @access public
* @return string completed alert()
**/
*/
function alert($message) {
return 'alert("' . $this->escape($message) . '");';
}
@ -456,7 +455,7 @@ class JsBaseEngineHelper extends AppHelper {
* @param mixed $url
* @param array $options
* @return string completed redirect in javascript
**/
*/
function redirect($url = null) {
return 'window.location = "' . Router::url($url) . '";';
}
@ -467,7 +466,7 @@ class JsBaseEngineHelper extends AppHelper {
* @param string $message Message you want confirmed.
* @access public
* @return string completed confirm()
**/
*/
function confirm($message) {
return 'confirm("' . $this->escape($message) . '");';
}
@ -479,7 +478,7 @@ class JsBaseEngineHelper extends AppHelper {
* @param string $message Message to use in the confirm dialog.
* @access public
* @return string
**/
*/
function confirmReturn($message) {
$out = 'var _confirm = ' . $this->confirm($message);
$out .= "if (!_confirm) {\n\treturn false;\n}";
@ -493,7 +492,7 @@ class JsBaseEngineHelper extends AppHelper {
* @param string $default Default message
* @access public
* @return string completed prompt()
**/
*/
function prompt($message, $default = '') {
return 'prompt("' . $this->escape($message) . '", "' . $this->escape($default) . '");';
}
@ -511,7 +510,7 @@ class JsBaseEngineHelper extends AppHelper {
* @param array $options Set of options, see above.
* @return string A JSON code block
* @access public
**/
*/
function object($data = array(), $options = array()) {
$defaultOptions = array(
'prefix' => '', 'postfix' => '',
@ -571,7 +570,7 @@ class JsBaseEngineHelper extends AppHelper {
* @param boolean $quoteStrings If false, leaves string values unquoted
* @return string a JavaScript-safe/JSON representation of $val
* @access public
**/
*/
function value($val, $quoteString = true) {
switch (true) {
case (is_array($val) || is_object($val)):
@ -611,7 +610,7 @@ class JsBaseEngineHelper extends AppHelper {
* @param string $script String that needs to get escaped.
* @return string Escaped string.
* @access public
**/
*/
function escape($string) {
App::import('Core', 'Multibyte');
return $this->_utf8ToHex($string);
@ -621,7 +620,7 @@ class JsBaseEngineHelper extends AppHelper {
* Encode a string into JSON. Converts and escapes necessary characters.
*
* @return void
**/
*/
function _utf8ToHex($string) {
$length = strlen($string);
$return = '';
@ -716,7 +715,7 @@ class JsBaseEngineHelper extends AppHelper {
*
* @param string $selector The selector that is targeted
* @return object instance of $this. Allows chained methods.
**/
*/
function get($selector) {
trigger_error(sprintf(__('%s does not have get() implemented', true), get_class($this)), E_USER_WARNING);
return $this;
@ -734,7 +733,7 @@ class JsBaseEngineHelper extends AppHelper {
* @param string $callback The Javascript function you wish to trigger or the function literal
* @param array $options Options for the event.
* @return string completed event handler
**/
*/
function event($type, $callback, $options = array()) {
trigger_error(sprintf(__('%s does not have event() implemented', true), get_class($this)), E_USER_WARNING);
}
@ -744,7 +743,7 @@ class JsBaseEngineHelper extends AppHelper {
*
* @param string $functionBody The code to run on domReady
* @return string completed domReady method
**/
*/
function domReady($functionBody) {
trigger_error(sprintf(__('%s does not have domReady() implemented', true), get_class($this)), E_USER_WARNING);
}
@ -754,7 +753,7 @@ class JsBaseEngineHelper extends AppHelper {
*
* @param string $callback The function body you wish to apply during the iteration.
* @return string completed iteration
**/
*/
function each($callback) {
trigger_error(sprintf(__('%s does not have each() implemented', true), get_class($this)), E_USER_WARNING);
}
@ -781,7 +780,7 @@ class JsBaseEngineHelper extends AppHelper {
* @param string $name The name of the effect to trigger.
* @param array $options Array of options for the effect.
* @return string completed string with effect.
**/
*/
function effect($name, $options) {
trigger_error(sprintf(__('%s does not have effect() implemented', true), get_class($this)), E_USER_WARNING);
}
@ -810,7 +809,7 @@ class JsBaseEngineHelper extends AppHelper {
* @param mixed $url Array or String URL to target with the request.
* @param array $options Array of options. See above for cross library supported options
* @return string XHR request.
**/
*/
function request($url, $options = array()) {
trigger_error(sprintf(__('%s does not have request() implemented', true), get_class($this)), E_USER_WARNING);
}
@ -833,7 +832,7 @@ class JsBaseEngineHelper extends AppHelper {
*
* @param array $options Options array see above.
* @return string Completed drag script
**/
*/
function drag($options = array()) {
trigger_error(sprintf(__('%s does not have drag() implemented', true), get_class($this)), E_USER_WARNING);
}
@ -854,7 +853,7 @@ class JsBaseEngineHelper extends AppHelper {
* - `leave` - Event fired when a drag is removed from a drop zone without being dropped.
*
* @return string Completed drop script
**/
*/
function drop($options = array()) {
trigger_error(sprintf(__('%s does not have drop() implemented', true), get_class($this)), E_USER_WARNING);
}
@ -878,7 +877,7 @@ class JsBaseEngineHelper extends AppHelper {
*
* @param array $options Array of options for the sortable. See above.
* @return string Completed sortable script.
**/
*/
function sortable() {
trigger_error(sprintf(__('%s does not have sortable() implemented', true), get_class($this)), E_USER_WARNING);
}
@ -901,7 +900,7 @@ class JsBaseEngineHelper extends AppHelper {
* - `complete` - Fired when the user stops sliding the handle
*
* @return string Completed slider script
**/
*/
function slider() {
trigger_error(sprintf(__('%s does not have slider() implemented', true), get_class($this)), E_USER_WARNING);
}
@ -919,7 +918,7 @@ class JsBaseEngineHelper extends AppHelper {
*
* @param array $options options for serialization generation.
* @return string completed form serialization script
**/
*/
function serializeForm() {
trigger_error(
sprintf(__('%s does not have serializeForm() implemented', true), get_class($this)), E_USER_WARNING
@ -935,7 +934,7 @@ class JsBaseEngineHelper extends AppHelper {
* @param array $safeKeys Keys that should not be escaped.
* @return string
* @access protected
**/
*/
function _parseOptions($options, $safeKeys = array()) {
$out = array();
$safeKeys = array_flip($safeKeys);
@ -957,7 +956,7 @@ class JsBaseEngineHelper extends AppHelper {
* @param array $options Array of options to map.
* @return array Array of mapped options.
* @access protected
**/
*/
function _mapOptions($method, $options) {
if (!isset($this->_optionMap[$method])) {
return $options;
@ -980,7 +979,7 @@ class JsBaseEngineHelper extends AppHelper {
* @param string $callbacks Additional Keys that contain callbacks
* @access protected
* @return array Array of options with callbacks added.
**/
*/
function _prepareCallbacks($method, $options, $callbacks = array()) {
$wrapCallbacks = true;
if (isset($options['wrapCallbacks'])) {
@ -1016,7 +1015,7 @@ class JsBaseEngineHelper extends AppHelper {
* @param string $method Name of method processing options for.
* @param array $options Array of options to process.
* @return string Parsed options string.
**/
*/
function _processOptions($method, $options) {
$options = $this->_mapOptions($method, $options);
$options = $this->_prepareCallbacks($method, $options);
@ -1030,7 +1029,7 @@ class JsBaseEngineHelper extends AppHelper {
* @param array $parameters Array of parameters to convert to a query string
* @return string Querystring fragment
* @access protected
**/
*/
function _toQuerystring($parameters) {
$out = '';
$keys = array_keys($parameters);

View file

@ -32,7 +32,7 @@ class MootoolsEngineHelper extends JsBaseEngineHelper {
* Option mappings for MooTools
*
* @var array
**/
*/
var $_optionMap = array(
'request' => array(
'complete' => 'onComplete',
@ -70,7 +70,7 @@ class MootoolsEngineHelper extends JsBaseEngineHelper {
* Contains a list of callback names -> default arguments.
*
* @var array
**/
*/
var $_callbackArguments = array(
'slider' => array(
'onTick' => 'position',
@ -116,7 +116,7 @@ class MootoolsEngineHelper extends JsBaseEngineHelper {
*
* @param string $selector The selector that is targeted
* @return object instance of $this. Allows chained methods.
**/
*/
function get($selector) {
$this->_multipleSelection = false;
if ($selector == 'window' || $selector == 'document') {
@ -144,7 +144,7 @@ class MootoolsEngineHelper extends JsBaseEngineHelper {
* @param string $callback The Javascript function you wish to trigger or the function literal
* @param array $options Options for the event.
* @return string completed event handler
**/
*/
function event($type, $callback, $options = array()) {
$defaults = array('wrap' => true, 'stop' => true);
$options = array_merge($defaults, $options);
@ -165,7 +165,7 @@ class MootoolsEngineHelper extends JsBaseEngineHelper {
*
* @param string $functionBody The code to run on domReady
* @return string completed domReady method
**/
*/
function domReady($functionBody) {
$this->selection = 'window';
return $this->event('domready', $functionBody, array('stop' => false));
@ -177,7 +177,7 @@ class MootoolsEngineHelper extends JsBaseEngineHelper {
* @param string $method The method you want to apply to the selection
* @param string $callback The function body you wish to apply during the iteration.
* @return string completed iteration
**/
*/
function each($callback) {
return $this->selection . '.each(function (item, index) {' . $callback . '});';
}
@ -189,7 +189,7 @@ class MootoolsEngineHelper extends JsBaseEngineHelper {
* @param array $options Array of options for the effect.
* @return string completed string with effect.
* @see JsBaseEngineHelper::effect()
**/
*/
function effect($name, $options = array()) {
$speed = null;
if (isset($options['speed']) && in_array($options['speed'], array('fast', 'slow'))) {
@ -231,7 +231,7 @@ class MootoolsEngineHelper extends JsBaseEngineHelper {
* @param mixed $url
* @param array $options
* @return string The completed ajax call.
**/
*/
function request($url, $options = array()) {
$url = $this->url($url);
$options = $this->_mapOptions('request', $options);
@ -270,7 +270,7 @@ class MootoolsEngineHelper extends JsBaseEngineHelper {
* @param array $options Array of options for the sortable.
* @return string Completed sortable script.
* @see JsHelper::sortable() for options list.
**/
*/
function sortable($options = array()) {
$options = $this->_processOptions('sortable', $options);
return 'var jsSortable = new Sortables(' . $this->selection . ', {' . $options . '});';
@ -284,7 +284,7 @@ class MootoolsEngineHelper extends JsBaseEngineHelper {
* @param array $options Array of options for the draggable.
* @return string Completed draggable script.
* @see JsHelper::drag() for options list.
**/
*/
function drag($options = array()) {
$options = $this->_processOptions('drag', $options);
return $this->selection . '.makeDraggable({' . $options . '});';
@ -303,7 +303,7 @@ class MootoolsEngineHelper extends JsBaseEngineHelper {
* @param array $options Array of options for the droppable.
* @return string Completed droppable script.
* @see JsHelper::drop() for options list.
**/
*/
function drop($options = array()) {
if (empty($options['drag'])) {
trigger_error(
@ -333,7 +333,7 @@ class MootoolsEngineHelper extends JsBaseEngineHelper {
* @param array $options Array of options for the slider.
* @return string Completed slider script.
* @see JsHelper::slider() for options list.
**/
*/
function slider($options = array()) {
$slider = $this->selection;
$this->get($options['handle']);
@ -358,7 +358,7 @@ class MootoolsEngineHelper extends JsBaseEngineHelper {
* @param array $options Array of options.
* @return string Completed serializeForm() snippet
* @see JsHelper::serializeForm()
**/
*/
function serializeForm($options = array()) {
$options = array_merge(array('isForm' => false, 'inline' => false), $options);
$selection = $this->selection;

View file

@ -36,7 +36,7 @@ class NumberHelper extends AppHelper {
*
* @var array
* @access protected
**/
*/
var $_currencies = array(
'USD' => array(
'before' => '$', 'after' => 'c', 'zero' => 0, 'places' => 2, 'thousands' => ',',
@ -57,7 +57,7 @@ class NumberHelper extends AppHelper {
*
* @var array
* @access protected
**/
*/
var $_currencyDefaults = array(
'before'=>'', 'after' => '', 'zero' => '0', 'places' => 2, 'thousands' => ',',
'decimals' => '.','negative' => '()', 'escape' => true
@ -222,7 +222,7 @@ class NumberHelper extends AppHelper {
* @param string $formatName The format name to be used in the future.
* @param array $options The array of options for this format.
* @return void
**/
*/
function addFormat($formatName, $options) {
$this->_currencies[$formatName] = $options + $this->_currencyDefaults;
}

View file

@ -46,7 +46,7 @@ class PaginatorHelper extends AppHelper {
* The class used for 'Ajax' pagination links.
*
* @var string
**/
*/
var $_ajaxHelperClass = 'Js';
/**
@ -54,20 +54,20 @@ class PaginatorHelper extends AppHelper {
*
* The values that may be specified are:
*
* - <i>$options['format']</i> Format of the counter. Supported formats are 'range' and 'pages'
* and custom (default). In the default mode the supplied string is parsed and constants are replaced
* by their actual values.
* Constants: %page%, %pages%, %current%, %count%, %start%, %end% .
* - <i>$options['separator']</i> The separator of the actual page and number of pages (default: ' of ').
* - <i>$options['url']</i> Url of the action. See Router::url()
* - <i>$options['url']['sort']</i> the key that the recordset is sorted.
* - <i>$options['url']['direction']</i> Direction of the sorting (default: 'asc').
* - <i>$options['url']['page']</i> Page # to display.
* - <i>$options['model']</i> The name of the model.
* - <i>$options['escape']</i> Defines if the title field for the link should be escaped (default: true).
* - <i>$options['update']</i> DOM id of the element updated with the results of the AJAX call.
* If this key isn't specified Paginator will use plain HTML links.
* - <i>$options['indicator']</i> DOM id of the element that will be shown when doing AJAX requests.
* - `$options['format']` Format of the counter. Supported formats are 'range' and 'pages'
* and custom (default). In the default mode the supplied string is parsed and constants are replaced
* by their actual values.
* Constants: %page%, %pages%, %current%, %count%, %start%, %end% .
* - `$options['separator']` The separator of the actual page and number of pages (default: ' of ').
* - `$options['url']` Url of the action. See Router::url()
* - `$options['url']['sort']` the key that the recordset is sorted.
* - `$options['url']['direction']` Direction of the sorting (default: 'asc').
* - `$options['url']['page']` Page # to display.
* - `$options['model']` The name of the model.
* - `$options['escape']` Defines if the title field for the link should be escaped (default: true).
* - `$options['update']` DOM id of the element updated with the results of the AJAX call.
* If this key isn't specified Paginator will use plain HTML links.
* - `$options['indicator']` DOM id of the element that will be shown when doing AJAX requests.
*
* @var array
*/
@ -83,7 +83,7 @@ class PaginatorHelper extends AppHelper {
* The chosen custom helper must implement a `link()` method.
*
* @return void
**/
*/
function __construct($config = array()) {
$ajaxProvider = isset($config['ajax']) ? $config['ajax'] : 'Js';
$this->helpers[] = $ajaxProvider;
@ -112,7 +112,7 @@ class PaginatorHelper extends AppHelper {
/**
* Gets the current paging parameters from the resultset for the given model
*
* @param string $model Optional model name. Uses the default if none is specified.
* @param string $model Optional model name. Uses the default if none is specified.
* @return array The array of paging parameters for the paginated resultset.
*/
function params($model = null) {
@ -128,7 +128,7 @@ class PaginatorHelper extends AppHelper {
/**
* Sets default options for all pagination links
*
* @param mixed $options Default options for pagination links. If a string is supplied - it
* @param mixed $options Default options for pagination links. If a string is supplied - it
* is used as the DOM id element to update. See #options for list of keys.
*/
function options($options = array()) {
@ -160,7 +160,7 @@ class PaginatorHelper extends AppHelper {
/**
* Gets the current page of the recordset for the given model
*
* @param string $model Optional model name. Uses the default if none is specified.
* @param string $model Optional model name. Uses the default if none is specified.
* @return string The current page number of the recordset.
*/
function current($model = null) {
@ -175,8 +175,8 @@ class PaginatorHelper extends AppHelper {
/**
* Gets the current key by which the recordset is sorted
*
* @param string $model Optional model name. Uses the default if none is specified.
* @param mixed $options Options for pagination links. See #options for list of keys.
* @param string $model Optional model name. Uses the default if none is specified.
* @param mixed $options Options for pagination links. See #options for list of keys.
* @return string The name of the key by which the recordset is being sorted, or
* null if the results are not currently sorted.
*/
@ -207,8 +207,8 @@ class PaginatorHelper extends AppHelper {
/**
* Gets the current direction the recordset is sorted
*
* @param string $model Optional model name. Uses the default if none is specified.
* @param mixed $options Options for pagination links. See #options for list of keys.
* @param string $model Optional model name. Uses the default if none is specified.
* @param mixed $options Options for pagination links. See #options for list of keys.
* @return string The direction by which the recordset is being sorted, or
* null if the results are not currently sorted.
*/
@ -235,6 +235,12 @@ class PaginatorHelper extends AppHelper {
/**
* Generates a "previous" link for a set of paged records
*
* Options:
*
* - `tag` The tag wrapping tag you want to use, defaults to 'span'
* - `escape` Whether you want the contents html entity encoded, defaults to true
* - `model` The model to use, defaults to PaginatorHelper::defaultModel()
*
* @param string $title Title for the link. Defaults to '<< Previous'.
* @param mixed $options Options for pagination link. See #options for list of keys.
* @param string $disabledTitle Title when the link is disabled.
@ -248,10 +254,16 @@ class PaginatorHelper extends AppHelper {
/**
* Generates a "next" link for a set of paged records
*
* @param string $title Title for the link. Defaults to 'Next >>'.
* @param mixed $options Options for pagination link. See #options for list of keys.
* @param string $disabledTitle Title when the link is disabled.
* @param mixed $disabledOptions Options for the disabled pagination link. See #options for list of keys.
* Options:
*
* - `tag` The tag wrapping tag you want to use, defaults to 'span'
* - `escape` Whether you want the contents html entity encoded, defaults to true
* - `model` The model to use, defaults to PaginatorHelper::defaultModel()
*
* @param string $title Title for the link. Defaults to 'Next >>'.
* @param mixed $options Options for pagination link. See above for list of keys.
* @param string $disabledTitle Title when the link is disabled.
* @param mixed $disabledOptions Options for the disabled pagination link. See above for list of keys.
* @return string A "next" link or or $disabledTitle text if the link is disabled.
*/
function next($title = 'Next >>', $options = array(), $disabledTitle = null, $disabledOptions = array()) {
@ -262,10 +274,15 @@ class PaginatorHelper extends AppHelper {
* Generates a sorting link. Sets named parameters for the sort and direction. Handles
* direction switching automatically.
*
* Options:
*
* - `escape` Whether you want the contents html entity encoded, defaults to true
* - `model` The model to use, defaults to PaginatorHelper::defaultModel()
*
* @param string $title Title for the link.
* @param string $key The name of the key that the recordset should be sorted. If $key is null
* $title will be used for the key, and a title will be generated by inflection.
* @param array $options Options for sorting link. See #options for list of keys.
* @param array $options Options for sorting link. See above for list of keys.
* @return string A link sorting default by 'asc'. If the resultset is sorted 'asc' by the specified
* key the returned link will sort by 'desc'.
*/
@ -285,9 +302,7 @@ class PaginatorHelper extends AppHelper {
$isSorted = ($sortKey === $key || $sortKey === $this->defaultModel() . '.' . $key);
if ($isSorted) {
if ($this->sortDir($options['model']) === 'asc') {
$dir = 'desc';
}
$dir = $this->sortDir($options['model']) === 'asc' ? 'desc' : 'asc';
$class = $dir === 'asc' ? 'desc' : 'asc';
if (!empty($options['class'])) {
$options['class'] .= $class;
@ -306,9 +321,16 @@ class PaginatorHelper extends AppHelper {
/**
* Generates a plain or Ajax link with pagination parameters
*
* @param string $title Title for the link.
* @param mixed $url Url for the action. See Router::url()
* @param array $options Options for the link. See #options for list of keys.
* Options
*
* - `update` The Id of the DOM element you wish to update. Creates Ajax enabled links
* with the AjaxHelper.
* - `escape` Whether you want the contents html entity encoded, defaults to true
* - `model` The model to use, defaults to PaginatorHelper::defaultModel()
*
* @param string $title Title for the link.
* @param mixed $url Url for the action. See Router::url()
* @param array $options Options for the link. See #options for list of keys.
* @return string A link with pagination parameters.
*/
function link($title, $url = array(), $options = array()) {
@ -334,9 +356,9 @@ class PaginatorHelper extends AppHelper {
/**
* Merges passed URL options with current pagination state to generate a pagination URL.
*
* @param array $options Pagination/URL options array
* @param boolean $asArray
* @param string $model Which model to paginate on
* @param array $options Pagination/URL options array
* @param boolean $asArray Return the url as an array, or a URI string
* @param string $model Which model to paginate on
* @return mixed By default, returns a full pagination URL string for use in non-standard contexts (i.e. JavaScript)
*/
function url($options = array(), $asArray = false, $model = null) {
@ -401,7 +423,7 @@ class PaginatorHelper extends AppHelper {
/**
* Returns true if the given result set is not at the first page
*
* @param string $model Optional model name. Uses the default if none is specified.
* @param string $model Optional model name. Uses the default if none is specified.
* @return boolean True if the result set is not at the first page.
*/
function hasPrev($model = null) {
@ -421,8 +443,8 @@ class PaginatorHelper extends AppHelper {
/**
* Returns true if the given result set has the page number given by $page
*
* @param string $model Optional model name. Uses the default if none is specified.
* @param int $page The page number - if not set defaults to 1.
* @param string $model Optional model name. Uses the default if none is specified.
* @param int $page The page number - if not set defaults to 1.
* @return boolean True if the given result set has the specified page number.
*/
function hasPage($model = null, $page = 1) {
@ -467,8 +489,16 @@ class PaginatorHelper extends AppHelper {
/**
* Returns a counter string for the paged result set
*
* @param mixed $options Options for the counter string. See #options for list of keys.
* @todo See about deprecating the keys in $map for formatting
* Options
*
* - `model` The model to use, defaults to PaginatorHelper::defaultModel();
* - `format` The format string you want to use, defaults to 'pages' Which generates output like '1 of 5'
* set to 'range' to generate output like '1 - 3 of 13'. Can also be set to a custom string, containing
* the following placeholders `%page%`, `%pages%`, `%current%`, `%count%`, `%start%`, `%end%` and any
* custom content you would like.
* - `separator` The separator string to use, default to ' of '
*
* @param mixed $options Options for the counter string. See #options for list of keys.
* @return string Counter string.
*/
function counter($options = array()) {
@ -480,7 +510,7 @@ class PaginatorHelper extends AppHelper {
array(
'model' => $this->defaultModel(),
'format' => 'pages',
'separator' => ' of '
'separator' => __(' of ', true)
),
$options);
@ -525,14 +555,27 @@ class PaginatorHelper extends AppHelper {
$out = str_replace($newKeys, array_values($map), $out);
break;
}
return $this->output($out);
return $out;
}
/**
* Returns a set of numbers for the paged result set
* uses a modulus to decide how many numbers to show on each side of the current page (default: 8)
*
* @param mixed $options Options for the numbers, (before, after, model, modulus, separator)
* Options
*
* - `before` Content to be inserted before the numbers
* - `after` Content to be inserted after the numbers
* - `model` Model to create numbers for, defaults to PaginatorHelper::defaultModel()
* - `modulus` how many numbers to include on either side of the current page, defaults to 8.
* - `separator` Separator content defaults to ' | '
* - `tag` The tag to wrap links in, defaults to 'span'
* - `first` Whether you want first links generated, set to an integer to define the number of 'first'
* links to generate
* - `last` Whether you want last links generated, set to an integer to define the number of 'last'
* links to generate
*
* @param mixed $options Options for the numbers, (before, after, model, modulus, separator)
* @return string numbers string.
*/
function numbers($options = array()) {
@ -633,14 +676,21 @@ class PaginatorHelper extends AppHelper {
$out .= $after;
}
return $this->output($out);
return $out;
}
/**
* Returns a first or set of numbers for the first pages
*
* @param mixed $first if string use as label for the link, if numeric print page numbers
* @param mixed $options
* Options:
*
* - `tag` The tag wrapping tag you want to use, defaults to 'span'
* - `before` Content to insert before the link/tag
* - `model` The model to use defaults to PaginatorHelper::defaultModel()
* - `separator` Content between the generated links, defaults to ' | '
*
* @param mixed $first if string use as label for the link, if numeric print page numbers
* @param mixed $options
* @return string numbers string.
*/
function first($first = '<< first', $options = array()) {
@ -685,8 +735,15 @@ class PaginatorHelper extends AppHelper {
/**
* Returns a last or set of numbers for the last pages
*
* @param mixed $last if string use as label for the link, if numeric print page numbers
* @param mixed $options
* Options:
*
* - `tag` The tag wrapping tag you want to use, defaults to 'span'
* - `before` Content to insert before the link/tag
* - `model` The model to use defaults to PaginatorHelper::defaultModel()
* - `separator` Content between the generated links, defaults to ' | '
*
* @param mixed $last if string use as label for the link, if numeric print page numbers
* @param mixed $options Array of options
* @return string numbers string.
*/
function last($last = 'last >>', $options = array()) {

View file

@ -27,13 +27,13 @@ class PrototypeEngineHelper extends JsBaseEngineHelper {
* Is the current selection a multiple selection? or is it just a single element.
*
* @var boolean
**/
*/
var $_multiple = false;
/**
* Option mappings for Prototype
*
* @var array
**/
*/
var $_optionMap = array(
'request' => array(
'async' => 'asynchronous',
@ -73,7 +73,7 @@ class PrototypeEngineHelper extends JsBaseEngineHelper {
* Contains a list of callback names -> default arguments.
*
* @var array
**/
*/
var $_callbackArguments = array(
'slider' => array(
'onSlide' => 'value',
@ -108,7 +108,7 @@ class PrototypeEngineHelper extends JsBaseEngineHelper {
*
* @param string $selector The selector that is targeted
* @return object instance of $this. Allows chained methods.
**/
*/
function get($selector) {
$this->_multiple = false;
if ($selector == 'window' || $selector == 'document') {
@ -135,7 +135,7 @@ class PrototypeEngineHelper extends JsBaseEngineHelper {
* @param string $callback The Javascript function you wish to trigger or the function literal
* @param array $options Options for the event.
* @return string completed event handler
**/
*/
function event($type, $callback, $options = array()) {
$defaults = array('wrap' => true, 'stop' => true);
$options = array_merge($defaults, $options);
@ -155,7 +155,7 @@ class PrototypeEngineHelper extends JsBaseEngineHelper {
*
* @param string $functionBody The code to run on domReady
* @return string completed domReady method
**/
*/
function domReady($functionBody) {
$this->selection = 'document';
return $this->event('dom:loaded', $functionBody, array('stop' => false));
@ -166,7 +166,7 @@ class PrototypeEngineHelper extends JsBaseEngineHelper {
* @param string $method The method you want to apply to the selection
* @param string $callback The function body you wish to apply during the iteration.
* @return string completed iteration
**/
*/
function each($callback) {
return $this->selection . '.each(function (item, index) {' . $callback . '});';
}
@ -179,7 +179,7 @@ class PrototypeEngineHelper extends JsBaseEngineHelper {
* @param array $options Array of options for the effect.
* @return string completed string with effect.
* @see JsBaseEngineHelper::effect()
**/
*/
function effect($name, $options = array()) {
$effect = '';
$optionString = null;
@ -220,7 +220,7 @@ class PrototypeEngineHelper extends JsBaseEngineHelper {
* @param mixed $url
* @param array $options
* @return string The completed ajax call.
**/
*/
function request($url, $options = array()) {
$url = '"'. $this->url($url) . '"';
$options = $this->_mapOptions('request', $options);
@ -255,7 +255,7 @@ class PrototypeEngineHelper extends JsBaseEngineHelper {
* @param array $options Array of options for the sortable.
* @return string Completed sortable script.
* @see JsHelper::sortable() for options list.
**/
*/
function sortable($options = array()) {
$options = $this->_processOptions('sortable', $options);
if (!empty($options)) {
@ -271,7 +271,7 @@ class PrototypeEngineHelper extends JsBaseEngineHelper {
* @param array $options Array of options for the draggable.
* @return string Completed draggable script.
* @see JsHelper::draggable() for options list.
**/
*/
function drag($options = array()) {
$options = $this->_processOptions('drag', $options);
if (!empty($options)) {
@ -290,7 +290,7 @@ class PrototypeEngineHelper extends JsBaseEngineHelper {
* @param array $options Array of options for the droppable.
* @return string Completed droppable script.
* @see JsHelper::droppable() for options list.
**/
*/
function drop($options = array()) {
$options = $this->_processOptions('drop', $options);
if (!empty($options)) {
@ -306,7 +306,7 @@ class PrototypeEngineHelper extends JsBaseEngineHelper {
* @param array $options Array of options for the slider.
* @return string Completed slider script.
* @see JsHelper::slider() for options list.
**/
*/
function slider($options = array()) {
$slider = $this->selection;
$this->get($options['handle']);
@ -330,7 +330,7 @@ class PrototypeEngineHelper extends JsBaseEngineHelper {
* @param array $options Array of options.
* @return string Completed serializeForm() snippet
* @see JsHelper::serializeForm()
**/
*/
function serializeForm($options = array()) {
$options = array_merge(array('isForm' => false, 'inline' => false), $options);
$selection = $this->selection;

View file

@ -34,7 +34,7 @@ class RssHelper extends XmlHelper {
*
* @var array
* @access public
**/
*/
var $helpers = array('Time');
/**
@ -269,7 +269,7 @@ class RssHelper extends XmlHelper {
if (!empty($elements)) {
$content = join('', $elements);
}
return $this->output($this->elem('item', $att, $content, !($content === null)));
return $this->elem('item', $att, $content, !($content === null));
}
/**

View file

@ -125,10 +125,12 @@ class SessionHelper extends CakeSession {
* Will default to flash if no param is passed
*
* @param string $key The [Message.]key you are rendering in the view.
* @return string Will echo the value if $key is set, or false if not set.
* @return boolean|string Will return the value if $key is set, or false if not set.
* @access public
*/
function flash($key = 'flash') {
$out = false;
if ($this->__active === true && $this->__start()) {
if (parent::check('Message.' . $key)) {
$flash = parent::read('Message.' . $key);
@ -148,12 +150,10 @@ class SessionHelper extends CakeSession {
$tmpVars['message'] = $flash['message'];
$out = $view->element($flash['element'], $tmpVars);
}
echo($out);
parent::delete('Message.' . $key);
return true;
}
}
return false;
return $out;
}
/**

View file

@ -87,8 +87,7 @@ class TimeHelper extends AppHelper {
$date = time();
}
$ret = date("D, M jS Y, H:i", $date);
return $this->output($ret);
return date("D, M jS Y, H:i", $date);
}
/**
@ -115,8 +114,7 @@ class TimeHelper extends AppHelper {
} else {
$ret = date("M jS{$y}, H:i", $date);
}
return $this->output($ret);
return $ret;
}
/**
@ -134,8 +132,7 @@ class TimeHelper extends AppHelper {
$begin = date('Y-m-d', $begin) . ' 00:00:00';
$end = date('Y-m-d', $end) . ' 23:59:59';
$ret ="($fieldName >= '$begin') AND ($fieldName <= '$end')";
return $this->output($ret);
return "($fieldName >= '$begin') AND ($fieldName <= '$end')";
}
/**
@ -149,8 +146,7 @@ class TimeHelper extends AppHelper {
*/
function dayAsSql($dateString, $fieldName, $userOffset = null) {
$date = $this->fromString($dateString, $userOffset);
$ret = $this->daysAsSql($dateString, $dateString, $fieldName);
return $this->output($ret);
return $this->daysAsSql($dateString, $dateString, $fieldName);
}
/**
@ -254,7 +250,7 @@ class TimeHelper extends AppHelper {
break;
}
}
return $this->output($date);
return $date;
}
/**
@ -265,8 +261,7 @@ class TimeHelper extends AppHelper {
* @return integer Unix timestamp
*/
function toUnix($dateString, $userOffset = null) {
$ret = $this->fromString($dateString, $userOffset);
return $this->output($ret);
return $this->fromString($dateString, $userOffset);
}
/**
@ -278,8 +273,7 @@ class TimeHelper extends AppHelper {
*/
function toAtom($dateString, $userOffset = null) {
$date = $this->fromString($dateString, $userOffset);
$ret = date('Y-m-d\TH:i:s\Z', $date);
return $this->output($ret);
return date('Y-m-d\TH:i:s\Z', $date);
}
/**
@ -291,8 +285,7 @@ class TimeHelper extends AppHelper {
*/
function toRSS($dateString, $userOffset = null) {
$date = $this->fromString($dateString, $userOffset);
$ret = date("r", $date);
return $this->output($ret);
return date("r", $date);
}
/**
@ -472,7 +465,7 @@ class TimeHelper extends AppHelper {
$relativeDate = sprintf(__('%s ago', true), $relativeDate);
}
}
return $this->output($relativeDate);
return $relativeDate;
}
/**

View file

@ -65,7 +65,7 @@ class XmlHelper extends AppHelper {
$attrib = 'xml ' . $attrib;
}
return $this->output($this->Xml->header($attrib));
return $this->Xml->header($attrib);
}
/**
@ -131,7 +131,7 @@ class XmlHelper extends AppHelper {
if (!$endTag) {
$this->Xml =& $elem;
}
return $this->output($out);
return $out;
}
/**
@ -144,7 +144,7 @@ class XmlHelper extends AppHelper {
if ($parent =& $this->Xml->parent()) {
$this->Xml =& $parent;
}
return $this->output('</' . $name . '>');
return '</' . $name . '>';
}
/**

View file

@ -40,7 +40,7 @@
</div>
<div id="content">
<?php $this->Session->flash(); ?>
<?php echo $this->Session->flash(); ?>
<?php echo $content_for_layout; ?>

View file

@ -252,7 +252,7 @@ class View extends Object {
* Holds View output.
*
* @var string
**/
*/
var $output = false;
/**
@ -722,7 +722,7 @@ class View extends Object {
$cache->helpers = $this->helpers;
$cache->action = $this->action;
$cache->controllerName = $this->name;
$cache->layout = $this->layout;
$cache->layout = $this->layout;
$cache->cacheAction = $this->cacheAction;
$cache->cache($___viewFn, $out, $cached);
}
@ -750,18 +750,14 @@ class View extends Object {
$options = $helper;
$helper = $i;
}
$plugin = $this->plugin;
if (strpos($helper, '.') !== false) {
list($plugin, $helper) = explode('.', $helper);
}
list($plugin, $helper) = pluginSplit($helper, true, $this->plugin);
$helperCn = $helper . 'Helper';
if (!isset($loaded[$helper])) {
if (!class_exists($helperCn)) {
$isLoaded = false;
if (!is_null($plugin)) {
$isLoaded = App::import('Helper', $plugin . '.' . $helper);
$isLoaded = App::import('Helper', $plugin . $helper);
}
if (!$isLoaded) {
if (!App::import('Helper', $helper)) {

View file

@ -33,8 +33,8 @@ class BasicsTest extends CakeTestCase {
/**
* setUp method
*
* @access public
* @return void
* @access public
*/
function setUp() {
App::build(array(
@ -46,8 +46,8 @@ class BasicsTest extends CakeTestCase {
/**
* tearDown method
*
* @access public
* @return void
* @access public
*/
function tearDown() {
App::build();
@ -58,7 +58,8 @@ class BasicsTest extends CakeTestCase {
* test the array_diff_key compatibility function.
*
* @return void
**/
* @access public
*/
function testArrayDiffKey() {
$one = array('one' => 1, 'two' => 2, 'three' => 3);
$two = array('one' => 'one', 'two' => 'two');
@ -175,8 +176,8 @@ class BasicsTest extends CakeTestCase {
/**
* test uses()
*
* @access public
* @return void
* @access public
* @deprecated
*/
function testUses() {
@ -194,8 +195,8 @@ class BasicsTest extends CakeTestCase {
/**
* Test h()
*
* @access public
* @return void
* @access public
*/
function testH() {
$string = '<foo>';
@ -211,8 +212,8 @@ class BasicsTest extends CakeTestCase {
/**
* Test a()
*
* @access public
* @return void
* @access public
*/
function testA() {
$result = a('this', 'that', 'bar');
@ -222,8 +223,8 @@ class BasicsTest extends CakeTestCase {
/**
* Test aa()
*
* @access public
* @return void
* @access public
*/
function testAa() {
$result = aa('a', 'b', 'c', 'd');
@ -238,8 +239,8 @@ class BasicsTest extends CakeTestCase {
/**
* Test am()
*
* @access public
* @return void
* @access public
*/
function testAm() {
$result = am(array('one', 'two'), 2, 3, 4);
@ -254,8 +255,8 @@ class BasicsTest extends CakeTestCase {
/**
* test cache()
*
* @access public
* @return void
* @access public
*/
function testCache() {
$_cacheDisable = Configure::read('Cache.disable');
@ -290,8 +291,8 @@ class BasicsTest extends CakeTestCase {
/**
* test clearCache()
*
* @access public
* @return void
* @access public
*/
function testClearCache() {
$cacheOff = Configure::read('Cache.disable');
@ -338,8 +339,8 @@ class BasicsTest extends CakeTestCase {
/**
* test __()
*
* @access public
* @return void
* @access public
*/
function test__() {
Configure::write('Config.language', 'rule_1_po');
@ -362,8 +363,8 @@ class BasicsTest extends CakeTestCase {
/**
* test __n()
*
* @access public
* @return void
* @access public
*/
function test__n() {
Configure::write('Config.language', 'rule_1_po');
@ -390,8 +391,8 @@ class BasicsTest extends CakeTestCase {
/**
* test __d()
*
* @access public
* @return void
* @access public
*/
function test__d() {
Configure::write('Config.language', 'rule_1_po');
@ -418,8 +419,8 @@ class BasicsTest extends CakeTestCase {
/**
* test __dn()
*
* @access public
* @return void
* @access public
*/
function test__dn() {
Configure::write('Config.language', 'rule_1_po');
@ -450,8 +451,8 @@ class BasicsTest extends CakeTestCase {
/**
* test __c()
*
* @access public
* @return void
* @access public
*/
function test__c() {
Configure::write('Config.language', 'rule_1_po');
@ -474,8 +475,8 @@ class BasicsTest extends CakeTestCase {
/**
* test __dc()
*
* @access public
* @return void
* @access public
*/
function test__dc() {
Configure::write('Config.language', 'rule_1_po');
@ -506,8 +507,8 @@ class BasicsTest extends CakeTestCase {
/**
* test __dcn()
*
* @access public
* @return void
* @access public
*/
function test__dcn() {
Configure::write('Config.language', 'rule_1_po');
@ -534,8 +535,8 @@ class BasicsTest extends CakeTestCase {
/**
* test LogError()
*
* @access public
* @return void
* @access public
*/
function testLogError() {
@unlink(LOGS . 'error.log');
@ -552,8 +553,8 @@ class BasicsTest extends CakeTestCase {
/**
* test fileExistsInPath()
*
* @access public
* @return void
* @access public
*/
function testFileExistsInPath() {
$this->skipUnless(function_exists('ini_set'), '%s ini_set function not available');
@ -597,8 +598,8 @@ class BasicsTest extends CakeTestCase {
/**
* test convertSlash()
*
* @access public
* @return void
* @access public
*/
function testConvertSlash() {
$result = convertSlash('\path\to\location\\');
@ -613,8 +614,8 @@ class BasicsTest extends CakeTestCase {
/**
* test debug()
*
* @access public
* @return void
* @access public
*/
function testDebug() {
ob_start();
@ -637,8 +638,8 @@ class BasicsTest extends CakeTestCase {
/**
* test pr()
*
* @access public
* @return void
* @access public
*/
function testPr() {
ob_start();
@ -657,8 +658,8 @@ class BasicsTest extends CakeTestCase {
/**
* test params()
*
* @access public
* @return void
* @access public
*/
function testParams() {
$this->assertNull(params('weekend'));
@ -675,8 +676,8 @@ class BasicsTest extends CakeTestCase {
/**
* test stripslashes_deep()
*
* @access public
* @return void
* @access public
*/
function testStripslashesDeep() {
$this->skipIf(ini_get('magic_quotes_sybase') === '1', '%s magic_quotes_sybase is on');
@ -713,8 +714,8 @@ class BasicsTest extends CakeTestCase {
/**
* test stripslashes_deep() with magic_quotes_sybase on
*
* @access public
* @return void
* @access public
*/
function testStripslashesDeepSybase() {
$this->skipUnless(ini_get('magic_quotes_sybase') === '1', '%s magic_quotes_sybase is off');
@ -747,8 +748,8 @@ class BasicsTest extends CakeTestCase {
/**
* test ife()
*
* @access public
* @return void
* @access public
*/
function testIfe() {
$this->assertEqual(ife(true, 'a', 'b'), 'a');
@ -763,5 +764,33 @@ class BasicsTest extends CakeTestCase {
$this->assertEqual(ife(0, 'a', 'b'), 'b');
$this->assertEqual(ife(array(), 'a', 'b'), 'b');
}
/**
* test pluginSplit
*
* @return void
*/
function testPluginSplit() {
$result = pluginSplit('Something.else');
$this->assertEqual($result, array('Something', 'else'));
$result = pluginSplit('Something.else.more.dots');
$this->assertEqual($result, array('Something', 'else.more.dots'));
$result = pluginSplit('Somethingelse');
$this->assertEqual($result, array(null, 'Somethingelse'));
$result = pluginSplit('Something.else', true);
$this->assertEqual($result, array('Something.', 'else'));
$result = pluginSplit('Something.else.more.dots', true);
$this->assertEqual($result, array('Something.', 'else.more.dots'));
$result = pluginSplit('Post', false, 'Blog');
$this->assertEqual($result, array('Blog', 'Post'));
$result = pluginSplit('Blog.Post', false, 'Ultimate');
$this->assertEqual($result, array('Blog', 'Post'));
}
}
?>

View file

@ -83,8 +83,8 @@ class TestShellDispatcher extends ShellDispatcher {
/**
* _initEnvironment method
*
* @access protected
* @return void
* @access protected
*/
function _initEnvironment() {
}
@ -92,8 +92,8 @@ class TestShellDispatcher extends ShellDispatcher {
/**
* stderr method
*
* @access public
* @return void
* @access public
*/
function stderr($string) {
$this->stderr .= rtrim($string, ' ');
@ -102,8 +102,8 @@ class TestShellDispatcher extends ShellDispatcher {
/**
* stdout method
*
* @access public
* @return void
* @access public
*/
function stdout($string, $newline = true) {
if ($newline) {
@ -116,8 +116,8 @@ class TestShellDispatcher extends ShellDispatcher {
/**
* clear method
*
* @access public
* @return void
* @access public
*/
function clear() {
@ -126,8 +126,8 @@ class TestShellDispatcher extends ShellDispatcher {
/**
* _stop method
*
* @access protected
* @return void
* @access protected
*/
function _stop($status = 0) {
$this->stopped = 'Stopped with status: ' . $status;
@ -138,8 +138,8 @@ class TestShellDispatcher extends ShellDispatcher {
* getShell
*
* @param mixed $plugin
* @access public
* @return mixed
* @access public
*/
function getShell($plugin = null) {
return $this->_getShell($plugin);
@ -149,8 +149,8 @@ class TestShellDispatcher extends ShellDispatcher {
* _getShell
*
* @param mixed $plugin
* @access protected
* @return mixed
* @access protected
*/
function _getShell($plugin = null) {
if (isset($this->TestShell)) {
@ -171,8 +171,8 @@ class ShellDispatcherTest extends CakeTestCase {
/**
* setUp method
*
* @access public
* @return void
* @access public
*/
function setUp() {
App::build(array(
@ -189,8 +189,8 @@ class ShellDispatcherTest extends CakeTestCase {
/**
* tearDown method
*
* @access public
* @return void
* @access public
*/
function tearDown() {
App::build();
@ -199,8 +199,8 @@ class ShellDispatcherTest extends CakeTestCase {
/**
* testParseParams method
*
* @access public
* @return void
* @access public
*/
function testParseParams() {
$Dispatcher =& new TestShellDispatcher();
@ -458,8 +458,8 @@ class ShellDispatcherTest extends CakeTestCase {
/**
* testBuildPaths method
*
* @access public
* @return void
* @access public
*/
function testBuildPaths() {
$Dispatcher =& new TestShellDispatcher();
@ -481,8 +481,8 @@ class ShellDispatcherTest extends CakeTestCase {
/**
* Verify loading of (plugin-) shells
*
* @access public
* @return void
* @access public
*/
function testGetShell() {
$this->skipIf(class_exists('SampleShell'), '%s SampleShell Class already loaded');
@ -510,8 +510,8 @@ class ShellDispatcherTest extends CakeTestCase {
/**
* Verify correct dispatch of Shell subclasses with a main method
*
* @access public
* @return void
* @access public
*/
function testDispatchShellWithMain() {
Mock::generate('Shell', 'MockWithMainShell', array('main', '_secret'));
@ -601,8 +601,8 @@ class ShellDispatcherTest extends CakeTestCase {
/**
* Verify correct dispatch of Shell subclasses without a main method
*
* @access public
* @return void
* @access public
*/
function testDispatchShellWithoutMain() {
Mock::generate('Shell', 'MockWithoutMainShell', array('initDb', '_secret'));
@ -673,8 +673,8 @@ class ShellDispatcherTest extends CakeTestCase {
/**
* Verify correct dispatch of custom classes with a main method
*
* @access public
* @return void
* @access public
*/
function testDispatchNotAShellWithMain() {
Mock::generate('Object', 'MockWithMainNotAShell',
@ -753,8 +753,8 @@ class ShellDispatcherTest extends CakeTestCase {
/**
* Verify correct dispatch of custom classes without a main method
*
* @access public
* @return void
* @access public
*/
function testDispatchNotAShellWithoutMain() {
Mock::generate('Object', 'MockWithoutMainNotAShell',
@ -824,8 +824,8 @@ class ShellDispatcherTest extends CakeTestCase {
* Verify that a task is called instead of the shell if the first arg equals
* the name of the task
*
* @access public
* @return void
* @access public
*/
function testDispatchTask() {
Mock::generate('Shell', 'MockWeekShell', array('main'));
@ -872,8 +872,8 @@ class ShellDispatcherTest extends CakeTestCase {
/**
* Verify shifting of arguments
*
* @access public
* @return void
* @access public
*/
function testShiftArgs() {
$Dispatcher =& new TestShellDispatcher();
@ -902,8 +902,8 @@ class ShellDispatcherTest extends CakeTestCase {
/**
* testHelpCommand method
*
* @access public
* @return void
* @access public
*/
function testHelpCommand() {
$Dispatcher =& new TestShellDispatcher();

View file

@ -52,13 +52,21 @@ Mock::generate('AclComponent', 'MockAclShellAclComponent');
* @subpackage cake.tests.cases.console.libs.tasks
*/
class AclShellTest extends CakeTestCase {
/**
* Fixtures
*
* @var array
* @access public
*/
var $fixtures = array('core.aco', 'core.aro', 'core.aros_aco');
/**
* configure Configure for testcase
*
* @return void
**/
* @access public
*/
function startCase() {
$this->_aclDb = Configure::read('Acl.database');
$this->_aclClass = Configure::read('Acl.classname');
@ -71,7 +79,8 @@ class AclShellTest extends CakeTestCase {
* restore Environment settings
*
* @return void
**/
* @access public
*/
function endCase() {
Configure::write('Acl.database', $this->_aclDb);
Configure::write('Acl.classname', $this->_aclClass);
@ -107,7 +116,8 @@ class AclShellTest extends CakeTestCase {
* test that model.foreign_key output works when looking at acl rows
*
* @return void
**/
* @access public
*/
function testViewWithModelForeignKeyOutput() {
$this->Task->command = 'view';
$this->Task->startup();
@ -132,7 +142,8 @@ class AclShellTest extends CakeTestCase {
* test view with an argument
*
* @return void
**/
* @access public
*/
function testViewWithArgument() {
$this->Task->args = array('aro', 'admins');
$this->Task->expectAt(0, 'out', array('Aro tree:'));
@ -146,7 +157,8 @@ class AclShellTest extends CakeTestCase {
* test the method that splits model.foreign key. and that it returns an array.
*
* @return void
**/
* @access public
*/
function testParsingModelAndForeignKey() {
$result = $this->Task->parseIdentifier('Model.foreignKey');
$expected = array('model' => 'Model', 'foreign_key' => 'foreignKey');
@ -162,7 +174,8 @@ class AclShellTest extends CakeTestCase {
* test creating aro/aco nodes
*
* @return void
**/
* @access public
*/
function testCreate() {
$this->Task->args = array('aro', 'root', 'User.1');
$this->Task->expectAt(0, 'out', array(new PatternExpectation('/created/'), '*'));
@ -202,7 +215,8 @@ class AclShellTest extends CakeTestCase {
* test the delete method with different node types.
*
* @return void
**/
* @access public
*/
function testDelete() {
$this->Task->args = array('aro', 'AuthUser.1');
$this->Task->expectAt(0, 'out', array(new NoPatternExpectation('/not/'), true));
@ -217,7 +231,8 @@ class AclShellTest extends CakeTestCase {
* test setParent method.
*
* @return void
**/
* @access public
*/
function testSetParent() {
$this->Task->args = array('aro', 'AuthUser.2', 'root');
$this->Task->setParent();
@ -231,7 +246,8 @@ class AclShellTest extends CakeTestCase {
* test grant
*
* @return void
**/
* @access public
*/
function testGrant() {
$this->Task->args = array('AuthUser.2', 'ROOT/Controller1', 'create');
$this->Task->expectAt(0, 'out', array(new PatternExpectation('/Permission granted/'), true));
@ -246,7 +262,8 @@ class AclShellTest extends CakeTestCase {
* test deny
*
* @return void
**/
* @access public
*/
function testDeny() {
$this->Task->args = array('AuthUser.2', 'ROOT/Controller1', 'create');
$this->Task->expectAt(0, 'out', array(new PatternExpectation('/Permission denied/'), true));
@ -261,7 +278,8 @@ class AclShellTest extends CakeTestCase {
* test checking allowed and denied perms
*
* @return void
**/
* @access public
*/
function testCheck() {
$this->Task->args = array('AuthUser.2', 'ROOT/Controller1', '*');
$this->Task->expectAt(0, 'out', array(new PatternExpectation('/not allowed/'), true));
@ -284,7 +302,8 @@ class AclShellTest extends CakeTestCase {
* test inherit and that it 0's the permission fields.
*
* @return void
**/
* @access public
*/
function testInherit() {
$this->Task->args = array('AuthUser.2', 'ROOT/Controller1', 'create');
$this->Task->expectAt(0, 'out', array(new PatternExpectation('/Permission granted/'), true));
@ -303,7 +322,8 @@ class AclShellTest extends CakeTestCase {
* test getting the path for an aro/aco
*
* @return void
**/
* @access public
*/
function testGetPath() {
$this->Task->args = array('aro', 'AuthUser.2');
$this->Task->expectAt(1, 'out', array('[1] ROOT'));
@ -311,6 +331,5 @@ class AclShellTest extends CakeTestCase {
$this->Task->expectAt(3, 'out', array(' [4] Elrond'));
$this->Task->getPath();
}
}
?>

View file

@ -76,8 +76,8 @@ class ApiShellTest extends CakeTestCase {
/**
* Test that method names are detected properly including those with no arguments.
*
* @access public
* @return void
* @access public
*/
function testMethodNameDetection () {
$this->Shell->setReturnValueAt(0, 'in', 'q');

View file

@ -61,14 +61,16 @@ class BakeShellTestCase extends CakeTestCase {
* fixtures
*
* @var array
**/
* @access public
*/
var $fixtures = array('core.user');
/**
* start test
*
* @return void
**/
* @access public
*/
function startTest() {
$this->Dispatch =& new BakeShellMockShellDispatcher();
$this->Shell =& new MockBakeShell();
@ -80,7 +82,8 @@ class BakeShellTestCase extends CakeTestCase {
* endTest method
*
* @return void
**/
* @access public
*/
function endTest() {
unset($this->Dispatch, $this->Shell);
}
@ -89,7 +92,8 @@ class BakeShellTestCase extends CakeTestCase {
* test bake all
*
* @return void
**/
* @access public
*/
function testAllWithModelName() {
$this->Shell->Model =& new BakeShellMockModelTask();
$this->Shell->Controller =& new BakeShellMockControllerTask();
@ -118,4 +122,5 @@ class BakeShellTestCase extends CakeTestCase {
$this->Shell->args = array('User');
$this->Shell->all();
}
}
}
?>

View file

@ -115,7 +115,14 @@ class SchemaShellTestSchema extends CakeSchema {
*/
class SchemaShellTest extends CakeTestCase {
/**
* Fixtures
*
* @var array
* @access public
*/
var $fixtures = array('core.article', 'core.user', 'core.post', 'core.auth_user');
/**
* startTest method
*
@ -142,7 +149,8 @@ class SchemaShellTest extends CakeTestCase {
* test startup method
*
* @return void
**/
* @access public
*/
function testStartup() {
$this->Shell->startup();
$this->assertTrue(isset($this->Shell->Schema));
@ -177,7 +185,8 @@ class SchemaShellTest extends CakeTestCase {
* Test View - and that it dumps the schema file to stdout
*
* @return void
**/
* @access public
*/
function testView() {
$this->Shell->startup();
$this->Shell->Schema->path = APP . 'config' . DS . 'schema';
@ -191,7 +200,8 @@ class SchemaShellTest extends CakeTestCase {
* test that view() can find plugin schema files.
*
* @return void
**/
* @access public
*/
function testViewWithPlugins() {
App::build(array(
'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS)
@ -214,7 +224,8 @@ class SchemaShellTest extends CakeTestCase {
* test dump() with sql file generation
*
* @return void
**/
* @access public
*/
function testDumpWithFileWriting() {
$this->Shell->params = array(
'name' => 'i18n',
@ -242,7 +253,8 @@ class SchemaShellTest extends CakeTestCase {
* test that dump() can find and work with plugin schema files.
*
* @return void
**/
* @access public
*/
function testDumpFileWritingWithPlugins() {
App::build(array(
'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS)
@ -271,6 +283,7 @@ class SchemaShellTest extends CakeTestCase {
* test generate with snapshot generation
*
* @return void
* @access public
*/
function testGenerateSnaphot() {
$this->Shell->path = TMP;
@ -290,7 +303,8 @@ class SchemaShellTest extends CakeTestCase {
* test generate without a snapshot.
*
* @return void
**/
* @access public
*/
function testGenerateNoOverwrite() {
touch(TMP . 'schema.php');
$this->Shell->params['file'] = 'schema.php';
@ -309,7 +323,8 @@ class SchemaShellTest extends CakeTestCase {
* test generate with overwriting of the schema files.
*
* @return void
**/
* @access public
*/
function testGenerateOverwrite() {
touch(TMP . 'schema.php');
$this->Shell->params['file'] = 'schema.php';
@ -334,7 +349,8 @@ class SchemaShellTest extends CakeTestCase {
* in a plugin.
*
* @return void
**/
* @access public
*/
function testGenerateWithPlugins() {
App::build(array(
'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS)
@ -363,7 +379,8 @@ class SchemaShellTest extends CakeTestCase {
* Test schema run create with no table args.
*
* @return void
**/
* @access public
*/
function testCreateNoArgs() {
$this->Shell->params = array(
'connection' => 'test_suite',
@ -386,7 +403,8 @@ class SchemaShellTest extends CakeTestCase {
* Test schema run create with no table args.
*
* @return void
**/
* @access public
*/
function testCreateWithTableArgs() {
$this->Shell->params = array(
'connection' => 'test_suite',
@ -411,7 +429,8 @@ class SchemaShellTest extends CakeTestCase {
* test run update with a table arg.
*
* @return void
**/
* @access public
*/
function testUpdateWithTable() {
$this->Shell->params = array(
'connection' => 'test_suite',
@ -434,7 +453,8 @@ class SchemaShellTest extends CakeTestCase {
* test that the plugin param creates the correct path in the schema object.
*
* @return void
**/
* @access public
*/
function testPluginParam() {
App::build(array(
'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS)
@ -454,7 +474,8 @@ class SchemaShellTest extends CakeTestCase {
* test that using Plugin.name with write.
*
* @return void
**/
* @access public
*/
function testPluginDotSyntaxWithCreate() {
App::build(array(
'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS)

View file

@ -46,7 +46,7 @@ Mock::generatePartial('ShellDispatcher', 'TestShellMockShellDispatcher', array(
*/
class TestShell extends Shell {
/*
/**
* name property
*
* @var name
@ -65,8 +65,8 @@ class TestShell extends Shell {
* stop method
*
* @param integer $status
* @access protected
* @return void
* @access protected
*/
function _stop($status = 0) {
$this->stopped = $status;
@ -257,8 +257,8 @@ class ShellTest extends CakeTestCase {
/**
* testNl
*
* @access public
* @return void
* @access public
*/
function testNl() {
$this->assertEqual($this->Shell->nl(), "\n");
@ -271,8 +271,8 @@ class ShellTest extends CakeTestCase {
/**
* testHr
*
* @access public
* @return void
* @access public
*/
function testHr() {
$bar = '---------------------------------------------------------------';
@ -296,8 +296,8 @@ class ShellTest extends CakeTestCase {
/**
* testError
*
* @access public
* @return void
* @access public
*/
function testError() {
$this->Shell->Dispatch->expectAt(0, 'stderr', array("Error: Foo Not Found\n"));

View file

@ -88,7 +88,8 @@ class ControllerTaskTest extends CakeTestCase {
* fixtures
*
* @var array
**/
* @access public
*/
var $fixtures = array('core.article', 'core.comment', 'core.articles_tag', 'core.tag');
/**
@ -124,7 +125,8 @@ class ControllerTaskTest extends CakeTestCase {
* test ListAll
*
* @return void
**/
* @access public
*/
function testListAll() {
$this->Task->connection = 'test_suite';
$this->Task->interactive = true;
@ -153,7 +155,8 @@ class ControllerTaskTest extends CakeTestCase {
* Test that getName interacts with the user and returns the controller name.
*
* @return void
**/
* @access public
*/
function testGetName() {
$this->Task->setReturnValue('in', 1);
@ -180,7 +183,8 @@ class ControllerTaskTest extends CakeTestCase {
* test helper interactions
*
* @return void
**/
* @access public
*/
function testDoHelpers() {
$this->Task->setReturnValue('in', 'n');
$result = $this->Task->doHelpers();
@ -203,7 +207,8 @@ class ControllerTaskTest extends CakeTestCase {
* test component interactions
*
* @return void
**/
* @access public
*/
function testDoComponents() {
$this->Task->setReturnValue('in', 'n');
$result = $this->Task->doComponents();
@ -226,7 +231,8 @@ class ControllerTaskTest extends CakeTestCase {
* test Confirming controller user interaction
*
* @return void
**/
* @access public
*/
function testConfirmController() {
$controller = 'Posts';
$scaffold = false;
@ -244,7 +250,8 @@ class ControllerTaskTest extends CakeTestCase {
* test the bake method
*
* @return void
**/
* @access public
*/
function testBake() {
$helpers = array('Ajax', 'Time');
$components = array('Acl', 'Auth');
@ -267,7 +274,8 @@ class ControllerTaskTest extends CakeTestCase {
* test bake() with a -plugin param
*
* @return void
**/
* @access public
*/
function testBakeWithPlugin() {
$this->Task->plugin = 'ControllerTest';
$helpers = array('Ajax', 'Time');
@ -289,7 +297,8 @@ class ControllerTaskTest extends CakeTestCase {
* test that bakeActions is creating the correct controller Code. (Using sessions)
*
* @return void
**/
* @access public
*/
function testBakeActionsUsingSessions() {
$skip = $this->skipIf(!defined('ARTICLE_MODEL_CREATED'),
'Testing bakeActions requires Article, Comment & Tag Model to be undefined. %s');
@ -332,7 +341,8 @@ class ControllerTaskTest extends CakeTestCase {
* Test baking with Controller::flash() or no sessions.
*
* @return void
**/
* @access public
*/
function testBakeActionsWithNoSessions() {
$skip = $this->skipIf(!defined('ARTICLE_MODEL_CREATED'),
'Testing bakeActions requires Article, Tag, Comment Models to be undefined. %s');
@ -367,7 +377,8 @@ class ControllerTaskTest extends CakeTestCase {
* test baking a test
*
* @return void
**/
* @access public
*/
function testBakeTest() {
$this->Task->plugin = 'ControllerTest';
$this->Task->connection = 'test_suite';
@ -383,7 +394,8 @@ class ControllerTaskTest extends CakeTestCase {
* test Interactive mode.
*
* @return void
**/
* @access public
*/
function testInteractive() {
$this->Task->connection = 'test_suite';
$this->Task->path = '/my/path';
@ -407,7 +419,8 @@ class ControllerTaskTest extends CakeTestCase {
* test that execute runs all when the first arg == all
*
* @return void
**/
* @access public
*/
function testExecuteIntoAll() {
$skip = $this->skipIf(!defined('ARTICLE_MODEL_CREATED'),
'Execute into all could not be run as an Article, Tag or Comment model was already loaded. %s');
@ -432,7 +445,8 @@ class ControllerTaskTest extends CakeTestCase {
* test that `cake bake controller foos` works.
*
* @return void
**/
* @access public
*/
function testExecuteWithController() {
$skip = $this->skipIf(!defined('ARTICLE_MODEL_CREATED'),
'Execute with scaffold param requires no Article, Tag or Comment model to be defined. %s');
@ -455,7 +469,8 @@ class ControllerTaskTest extends CakeTestCase {
* test that `cake bake controller foo scaffold` works.
*
* @return void
**/
* @access public
*/
function testExecuteWithPublicParam() {
$skip = $this->skipIf(!defined('ARTICLE_MODEL_CREATED'),
'Execute with scaffold param requires no Article, Tag or Comment model to be defined. %s');
@ -478,7 +493,8 @@ class ControllerTaskTest extends CakeTestCase {
* test that `cake bake controller foos both` works.
*
* @return void
**/
* @access public
*/
function testExecuteWithControllerAndBoth() {
$skip = $this->skipIf(!defined('ARTICLE_MODEL_CREATED'),
'Execute with scaffold param requires no Article, Tag or Comment model to be defined. %s');
@ -502,7 +518,8 @@ class ControllerTaskTest extends CakeTestCase {
* test that `cake bake controller foos admin` works.
*
* @return void
**/
* @access public
*/
function testExecuteWithControllerAndAdmin() {
$skip = $this->skipIf(!defined('ARTICLE_MODEL_CREATED'),
'Execute with scaffold param requires no Article, Tag or Comment model to be defined. %s');

View file

@ -104,7 +104,8 @@ class DbConfigTaskTest extends CakeTestCase {
* Test the getConfig method.
*
* @return void
**/
* @access public
*/
function testGetConfig() {
$this->Task->setReturnValueAt(0, 'in', 'otherOne');
$result = $this->Task->getConfig();
@ -115,7 +116,8 @@ class DbConfigTaskTest extends CakeTestCase {
* test that initialize sets the path up.
*
* @return void
**/
* @access public
*/
function testInitialize() {
$this->assertTrue(empty($this->Task->path));
$this->Task->initialize();
@ -128,7 +130,8 @@ class DbConfigTaskTest extends CakeTestCase {
* test execute and by extension __interactive
*
* @return void
**/
* @access public
*/
function testExecuteIntoInteractive() {
$this->Task->initialize();

View file

@ -60,8 +60,9 @@ class FixtureTaskTest extends CakeTestCase {
* fixtures
*
* @var array
**/
var $fixtures = array('core.article', 'core.comment');
* @access public
*/
var $fixtures = array('core.article', 'core.comment', 'core.datatype', 'core.binary_test');
/**
* startTest method
@ -94,7 +95,8 @@ class FixtureTaskTest extends CakeTestCase {
* test that initialize sets the path
*
* @return void
**/
* @access public
*/
function testConstruct() {
$this->Dispatch->params['working'] = DS . 'my' . DS . 'path';
$Task =& new FixtureTask($this->Dispatch);
@ -107,7 +109,8 @@ class FixtureTaskTest extends CakeTestCase {
* test import option array generation
*
* @return void
**/
* @access public
*/
function testImportOptions() {
$this->Task->setReturnValueAt(0, 'in', 'y');
$this->Task->setReturnValueAt(1, 'in', 'y');
@ -136,7 +139,8 @@ class FixtureTaskTest extends CakeTestCase {
* test generating a fixture with database conditions.
*
* @return void
**/
* @access public
*/
function testImportRecordsFromDatabaseWithConditions() {
$this->Task->setReturnValueAt(0, 'in', 'WHERE 1=1 LIMIT 10');
$this->Task->connection = 'test_suite';
@ -155,7 +159,8 @@ class FixtureTaskTest extends CakeTestCase {
* test that execute passes runs bake depending with named model.
*
* @return void
**/
* @access public
*/
function testExecuteWithNamedModel() {
$this->Task->connection = 'test_suite';
$this->Task->path = '/my/path/';
@ -169,7 +174,8 @@ class FixtureTaskTest extends CakeTestCase {
* test that execute runs all() when args[0] = all
*
* @return void
**/
* @access public
*/
function testExecuteIntoAll() {
$this->Task->connection = 'test_suite';
$this->Task->path = '/my/path/';
@ -189,7 +195,8 @@ class FixtureTaskTest extends CakeTestCase {
* test using all() with -count and -records
*
* @return void
**/
* @access public
*/
function testAllWithCountAndRecordsFlags() {
$this->Task->connection = 'test_suite';
$this->Task->path = '/my/path/';
@ -210,7 +217,8 @@ class FixtureTaskTest extends CakeTestCase {
* test interactive mode of execute
*
* @return void
**/
* @access public
*/
function testExecuteInteractive() {
$this->Task->connection = 'test_suite';
$this->Task->path = '/my/path/';
@ -228,7 +236,8 @@ class FixtureTaskTest extends CakeTestCase {
* Test that bake works
*
* @return void
**/
* @access public
*/
function testBake() {
$this->Task->connection = 'test_suite';
$this->Task->path = '/my/path/';
@ -259,11 +268,29 @@ class FixtureTaskTest extends CakeTestCase {
$this->assertNoPattern('/var \$records/', $result);
}
/**
* test record generation with float and binary types
*
* @return void
* @access public
*/
function testRecordGenerationForBinaryAndFloat() {
$this->Task->connection = 'test_suite';
$this->Task->path = '/my/path/';
$result = $this->Task->bake('Article', 'datatypes');
$this->assertPattern("/'float_field' => 1/", $result);
$result = $this->Task->bake('Article', 'binary_tests');
$this->assertPattern("/'data' => 'Lorem ipsum dolor sit amet'/", $result);
}
/**
* Test that file generation includes headers and correct path for plugins.
*
* @return void
**/
* @access public
*/
function testGenerateFixtureFile() {
$this->Task->connection = 'test_suite';
$this->Task->path = '/my/path/';
@ -280,7 +307,8 @@ class FixtureTaskTest extends CakeTestCase {
* test generating files into plugins.
*
* @return void
**/
* @access public
*/
function testGeneratePluginFixtureFile() {
$this->Task->connection = 'test_suite';
$this->Task->path = '/my/path/';

View file

@ -65,7 +65,8 @@ class ModelTaskTest extends CakeTestCase {
* fixtures
*
* @var array
**/
* @access public
*/
var $fixtures = array('core.article', 'core.comment', 'core.articles_tag', 'core.tag', 'core.category_thread');
/**
@ -99,7 +100,8 @@ class ModelTaskTest extends CakeTestCase {
* Test that listAll scans the database connection and lists all the tables in it.s
*
* @return void
**/
* @access public
*/
function testListAll() {
$this->Task->expectAt(1, 'out', array('1. Article'));
$this->Task->expectAt(2, 'out', array('2. ArticlesTag'));
@ -126,7 +128,8 @@ class ModelTaskTest extends CakeTestCase {
* Test that getName interacts with the user and returns the model name.
*
* @return void
**/
* @access public
*/
function testGetName() {
$this->Task->setReturnValue('in', 1);
@ -153,7 +156,8 @@ class ModelTaskTest extends CakeTestCase {
* Test table name interactions
*
* @return void
**/
* @access public
*/
function testGetTableName() {
$this->Task->setReturnValueAt(0, 'in', 'y');
$result = $this->Task->getTable('Article', 'test_suite');
@ -171,7 +175,8 @@ class ModelTaskTest extends CakeTestCase {
* test that initializing the validations works.
*
* @return void
**/
* @access public
*/
function testInitValidations() {
$result = $this->Task->initValidations();
$this->assertTrue(in_array('notempty', $result));
@ -182,7 +187,8 @@ class ModelTaskTest extends CakeTestCase {
* tests the guessing features of validation
*
* @return void
**/
* @access public
*/
function testFieldValidationGuessing() {
$this->Task->interactive = false;
$this->Task->initValidations();
@ -210,7 +216,8 @@ class ModelTaskTest extends CakeTestCase {
* test that interactive field validation works and returns multiple validators.
*
* @return void
**/
* @access public
*/
function testInteractiveFieldValidation() {
$this->Task->initValidations();
$this->Task->interactive = true;
@ -228,7 +235,8 @@ class ModelTaskTest extends CakeTestCase {
* test the validation Generation routine
*
* @return void
**/
* @access public
*/
function testNonInteractiveDoValidation() {
$Model =& new MockModelTaskModel();
$Model->primaryKey = 'id';
@ -289,7 +297,8 @@ class ModelTaskTest extends CakeTestCase {
* test that finding primary key works
*
* @return void
**/
* @access public
*/
function testFindPrimaryKey() {
$fields = array(
'one' => array(),
@ -307,7 +316,8 @@ class ModelTaskTest extends CakeTestCase {
* test finding Display field
*
* @return void
**/
* @access public
*/
function testFindDisplayField() {
$fields = array('id' => array(), 'tagname' => array(), 'body' => array(),
'created' => array(), 'modified' => array());
@ -327,7 +337,8 @@ class ModelTaskTest extends CakeTestCase {
* test that belongsTo generation works.
*
* @return void
**/
* @access public
*/
function testBelongsToGeneration() {
$model = new Model(array('ds' => 'test_suite', 'name' => 'Comment'));
$result = $this->Task->findBelongsTo($model, array());
@ -347,7 +358,6 @@ class ModelTaskTest extends CakeTestCase {
);
$this->assertEqual($result, $expected);
$model = new Model(array('ds' => 'test_suite', 'name' => 'CategoryThread'));
$result = $this->Task->findBelongsTo($model, array());
$expected = array(
@ -366,7 +376,8 @@ class ModelTaskTest extends CakeTestCase {
* test that hasOne and/or hasMany relations are generated properly.
*
* @return void
**/
* @access public
*/
function testHasManyHasOneGeneration() {
$model = new Model(array('ds' => 'test_suite', 'name' => 'Article'));
$this->Task->connection = 'test_suite';
@ -390,7 +401,6 @@ class ModelTaskTest extends CakeTestCase {
);
$this->assertEqual($result, $expected);
$model = new Model(array('ds' => 'test_suite', 'name' => 'CategoryThread'));
$result = $this->Task->findHasOneAndMany($model, array());
$expected = array(
@ -413,10 +423,11 @@ class ModelTaskTest extends CakeTestCase {
}
/**
* test that habtm generation works
* Test that HABTM generation works
*
* @return void
**/
* @access public
*/
function testHasAndBelongsToManyGeneration() {
$model = new Model(array('ds' => 'test_suite', 'name' => 'Article'));
$this->Task->connection = 'test_suite';
@ -440,7 +451,8 @@ class ModelTaskTest extends CakeTestCase {
* test non interactive doAssociations
*
* @return void
**/
* @access public
*/
function testDoAssociationsNonInteractive() {
$this->Task->connection = 'test_suite';
$this->Task->interactive = false;
@ -464,14 +476,14 @@ class ModelTaskTest extends CakeTestCase {
),
),
);
}
/**
* Ensure that the fixutre object is correctly called.
*
* @return void
**/
* @access public
*/
function testBakeFixture() {
$this->Task->Fixture->expectAt(0, 'bake', array('Article', 'articles'));
$this->Task->bakeFixture('Article', 'articles');
@ -484,7 +496,8 @@ class ModelTaskTest extends CakeTestCase {
* Ensure that the test object is correctly called.
*
* @return void
**/
* @access public
*/
function testBakeTest() {
$this->Task->Test->expectAt(0, 'bake', array('Model', 'Article'));
$this->Task->bakeTest('Article');
@ -498,7 +511,8 @@ class ModelTaskTest extends CakeTestCase {
* a question for the hasOne is also not asked.
*
* @return void
**/
* @access public
*/
function testConfirmAssociations() {
$associations = array(
'hasOne' => array(
@ -538,7 +552,8 @@ class ModelTaskTest extends CakeTestCase {
* test that inOptions generates questions and only accepts a valid answer
*
* @return void
**/
* @access public
*/
function testInOptions() {
$options = array('one', 'two', 'three');
$this->Task->expectAt(0, 'out', array('1. one'));
@ -558,7 +573,8 @@ class ModelTaskTest extends CakeTestCase {
* test baking validation
*
* @return void
**/
* @access public
*/
function testBakeValidation() {
$validate = array(
'name' => array(
@ -586,7 +602,8 @@ class ModelTaskTest extends CakeTestCase {
* test baking relations
*
* @return void
**/
* @access public
*/
function testBakeRelations() {
$associations = array(
'belongsTo' => array(
@ -640,7 +657,8 @@ class ModelTaskTest extends CakeTestCase {
* test bake() with a -plugin param
*
* @return void
**/
* @access public
*/
function testBakeWithPlugin() {
$this->Task->plugin = 'ControllerTest';
@ -660,7 +678,8 @@ class ModelTaskTest extends CakeTestCase {
* test that execute passes runs bake depending with named model.
*
* @return void
**/
* @access public
*/
function testExecuteWithNamedModel() {
$this->Task->connection = 'test_suite';
$this->Task->path = '/my/path/';
@ -675,7 +694,8 @@ class ModelTaskTest extends CakeTestCase {
* test that execute runs all() when args[0] = all
*
* @return void
**/
* @access public
*/
function testExecuteIntoAll() {
$this->Task->connection = 'test_suite';
$this->Task->path = '/my/path/';
@ -707,7 +727,8 @@ class ModelTaskTest extends CakeTestCase {
* test the interactive side of bake.
*
* @return void
**/
* @access public
*/
function testExecuteIntoInteractive() {
$this->Task->connection = 'test_suite';
$this->Task->path = '/my/path/';
@ -736,7 +757,8 @@ class ModelTaskTest extends CakeTestCase {
* test using bake interactively with a table that does not exist.
*
* @return void
**/
* @access public
*/
function testExecuteWithNonExistantTableName() {
$this->Task->connection = 'test_suite';
$this->Task->path = '/my/path/';

View file

@ -72,7 +72,8 @@ class PluginTaskTest extends CakeTestCase {
* startCase methods
*
* @return void
**/
* @access public
*/
function startCase() {
$this->_paths = $paths = App::path('plugins');
$this->_testPath = array_push($paths, TMP . 'tests' . DS);
@ -83,7 +84,8 @@ class PluginTaskTest extends CakeTestCase {
* endCase
*
* @return void
**/
* @access public
*/
function endCase() {
App::build(array('plugins' => $this->_paths));
}
@ -102,7 +104,8 @@ class PluginTaskTest extends CakeTestCase {
* test bake()
*
* @return void
**/
* @access public
*/
function testBakeFoldersAndFiles() {
$this->Task->setReturnValueAt(0, 'in', $this->_testPath);
$this->Task->setReturnValueAt(1, 'in', 'y');
@ -196,7 +199,8 @@ class PluginTaskTest extends CakeTestCase {
* test execute with no args, flowing into interactive,
*
* @return void
**/
* @access public
*/
function testExecuteWithNoArgs() {
$this->Task->setReturnValueAt(0, 'in', 'TestPlugin');
$this->Task->setReturnValueAt(1, 'in', '3');
@ -221,7 +225,8 @@ class PluginTaskTest extends CakeTestCase {
* Test Execute
*
* @return void
**/
* @access public
*/
function testExecuteWithOneArg() {
$this->Task->setReturnValueAt(0, 'in', $this->_testPath);
$this->Task->setReturnValueAt(1, 'in', 'y');
@ -245,7 +250,8 @@ class PluginTaskTest extends CakeTestCase {
* test execute chaining into MVC parts
*
* @return void
**/
* @access public
*/
function testExecuteWithTwoArgs() {
$this->Task->Model =& new PluginTestMockModelTask();
$this->Task->setReturnValueAt(0, 'in', $this->_testPath);

View file

@ -84,7 +84,8 @@ class ProjectTaskTest extends CakeTestCase {
* creates a test project that is used for testing project task.
*
* @return void
**/
* @access protected
*/
function _setupTestProject() {
$skel = CAKE_CORE_INCLUDE_PATH . DS . CAKE . 'console' . DS . 'templates' . DS . 'skel';
$this->Task->setReturnValueAt(0, 'in', 'y');
@ -96,7 +97,8 @@ class ProjectTaskTest extends CakeTestCase {
* test bake() method and directory creation.
*
* @return void
**/
* @access public
*/
function testBake() {
$this->_setupTestProject();
@ -113,11 +115,57 @@ class ProjectTaskTest extends CakeTestCase {
$this->assertTrue(is_dir($path . DS . 'tests' . DS . 'fixtures'), 'No fixtures dir %s');
}
/**
* test bake() method with -empty flag, directory creation and empty files.
*
* @return void
* @access public
*/
function testBakeEmptyFlag() {
$this->Task->params['empty'] = true;
$this->_setupTestProject();
$path = $this->Task->path . 'bake_test_app';
$this->assertTrue(is_dir($path), 'No project dir %s');
$this->assertTrue(is_dir($path . DS . 'controllers'), 'No controllers dir %s');
$this->assertTrue(is_dir($path . DS . 'controllers' . DS .'components'), 'No components dir %s');
$this->assertTrue(is_dir($path . DS . 'models'), 'No models dir %s');
$this->assertTrue(is_dir($path . DS . 'views'), 'No views dir %s');
$this->assertTrue(is_dir($path . DS . 'views' . DS . 'helpers'), 'No helpers dir %s');
$this->assertTrue(is_dir($path . DS . 'tests'), 'No tests dir %s');
$this->assertTrue(is_dir($path . DS . 'tests' . DS . 'cases'), 'No cases dir %s');
$this->assertTrue(is_dir($path . DS . 'tests' . DS . 'groups'), 'No groups dir %s');
$this->assertTrue(is_dir($path . DS . 'tests' . DS . 'fixtures'), 'No fixtures dir %s');
$this->assertTrue(is_file($path . DS . 'controllers' . DS .'components' . DS . 'empty'), 'No empty file in dir %s');
$this->assertTrue(is_file($path . DS . 'locale' . DS . 'eng' . DS . 'LC_MESSAGES' . DS . 'empty'), 'No empty file in dir %s');
$this->assertTrue(is_file($path . DS . 'models' . DS . 'behaviors' . DS . 'empty'), 'No empty file in dir %s');
$this->assertTrue(is_file($path . DS . 'models' . DS . 'datasources' . DS . 'empty'), 'No empty file in dir %s');
$this->assertTrue(is_file($path . DS . 'plugins' . DS . 'empty'), 'No empty file in dir %s');
$this->assertTrue(is_file($path . DS . 'tests' . DS . 'cases' . DS . 'behaviors' . DS . 'empty'), 'No empty file in dir %s');
$this->assertTrue(is_file($path . DS . 'tests' . DS . 'cases' . DS . 'components' . DS . 'empty'), 'No empty file in dir %s');
$this->assertTrue(is_file($path . DS . 'tests' . DS . 'cases' . DS . 'controllers' . DS . 'empty'), 'No empty file in dir %s');
$this->assertTrue(is_file($path . DS . 'tests' . DS . 'cases' . DS . 'datasources' . DS . 'empty'), 'No empty file in dir %s');
$this->assertTrue(is_file($path . DS . 'tests' . DS . 'cases' . DS . 'helpers' . DS . 'empty'), 'No empty file in dir %s');
$this->assertTrue(is_file($path . DS . 'tests' . DS . 'cases' . DS . 'models' . DS . 'empty'), 'No empty file in dir %s');
$this->assertTrue(is_file($path . DS . 'tests' . DS . 'cases' . DS . 'shells' . DS . 'empty'), 'No empty file in dir %s');
$this->assertTrue(is_file($path . DS . 'tests' . DS . 'fixtures' . DS . 'empty'), 'No empty file in dir %s');
$this->assertTrue(is_file($path . DS . 'tests' . DS . 'groups' . DS . 'empty'), 'No empty file in dir %s');
$this->assertTrue(is_file($path . DS . 'vendors' . DS . 'css' . DS . 'empty'), 'No empty file in dir %s');
$this->assertTrue(is_file($path . DS . 'vendors' . DS . 'img' . DS . 'empty'), 'No empty file in dir %s');
$this->assertTrue(is_file($path . DS . 'vendors' . DS . 'js' . DS . 'empty'), 'No empty file in dir %s');
$this->assertTrue(is_file($path . DS . 'vendors' . DS . 'shells' . DS . 'tasks' . DS . 'empty'), 'No empty file in dir %s');
$this->assertTrue(is_file($path . DS . 'views' . DS . 'errors' . DS . 'empty'), 'No empty file in dir %s');
$this->assertTrue(is_file($path . DS . 'views' . DS . 'helpers' . DS . 'empty'), 'No empty file in dir %s');
$this->assertTrue(is_file($path . DS . 'views' . DS . 'scaffolds' . DS . 'empty'), 'No empty file in dir %s');
$this->assertTrue(is_file($path . DS . 'webroot' . DS . 'js' . DS . 'empty'), 'No empty file in dir %s');
}
/**
* test generation of Security.salt
*
* @return void
**/
* @access public
*/
function testSecuritySaltGeneration() {
$this->_setupTestProject();
@ -130,11 +178,33 @@ class ProjectTaskTest extends CakeTestCase {
$this->assertNoPattern('/DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi/', $contents, 'Default Salt left behind. %s');
}
/**
* Test that index.php is generated correctly.
*
* @return void
* @access public
*/
function testIndexPhpGeneration() {
$this->_setupTestProject();
$path = $this->Task->path . 'bake_test_app' . DS;
$this->Task->corePath($path);
$file =& new File($path . 'webroot' . DS . 'index.php');
$contents = $file->read();
$this->assertNoPattern('/define\(\'CAKE_CORE_INCLUDE_PATH\', \'ROOT/', $contents);
$file =& new File($path . 'webroot' . DS . 'test.php');
$contents = $file->read();
$this->assertNoPattern('/define\(\'CAKE_CORE_INCLUDE_PATH\', \'ROOT/', $contents);
}
/**
* test getPrefix method, and that it returns Routing.prefix or writes to config file.
*
* @return void
**/
* @access public
*/
function testGetPrefix() {
Configure::write('Routing.prefixes', array('admin'));
$result = $this->Task->getPrefix();
@ -156,7 +226,8 @@ class ProjectTaskTest extends CakeTestCase {
* test cakeAdmin() writing core.php
*
* @return void
**/
* @access public
*/
function testCakeAdmin() {
$file =& new File(CONFIGS . 'core.php');
$contents = $file->read();;
@ -176,7 +247,8 @@ class ProjectTaskTest extends CakeTestCase {
* test getting the prefix with more than one prefix setup
*
* @return void
**/
* @access public
*/
function testGetPrefixWithMultiplePrefixes() {
Configure::write('Routing.prefixes', array('admin', 'ninja', 'shinobi'));
$this->_setupTestProject();
@ -191,7 +263,8 @@ class ProjectTaskTest extends CakeTestCase {
* Test execute method with one param to destination folder.
*
* @return void
**/
* @access public
*/
function testExecute() {
$this->Task->params['skel'] = CAKE_CORE_INCLUDE_PATH . DS . CAKE . DS . 'console' . DS. 'templates' . DS . 'skel';
$this->Task->params['working'] = TMP . 'tests' . DS;

View file

@ -81,7 +81,8 @@ class TemplateTaskTest extends CakeTestCase {
* test that set sets variables
*
* @return void
**/
* @access public
*/
function testSet() {
$this->Task->set('one', 'two');
$this->assertTrue(isset($this->Task->templateVars['one']));
@ -98,7 +99,8 @@ class TemplateTaskTest extends CakeTestCase {
* test finding themes installed in
*
* @return void
**/
* @access public
*/
function testFindingInstalledThemesForBake() {
$consoleLibs = CAKE_CORE_INCLUDE_PATH . DS . CAKE . 'console' . DS;
$this->Task->Dispatch->shellPaths = array($consoleLibs);
@ -111,7 +113,8 @@ class TemplateTaskTest extends CakeTestCase {
* that the user is not bugged. If there are more, find and return the correct theme name
*
* @return void
**/
* @access public
*/
function testGetThemePath() {
$defaultTheme = CAKE_CORE_INCLUDE_PATH . DS . dirname(CONSOLE_LIBS) . 'templates' . DS . 'default' .DS;
$this->Task->templatePaths = array('default' => $defaultTheme);
@ -136,7 +139,8 @@ class TemplateTaskTest extends CakeTestCase {
* test generate
*
* @return void
**/
* @access public
*/
function testGenerate() {
App::build(array(
'shells' => array(
@ -155,7 +159,8 @@ class TemplateTaskTest extends CakeTestCase {
* ensure fallback to default works.
*
* @return void
**/
* @access public
*/
function testGenerateWithTemplateFallbacks() {
App::build(array(
'shells' => array(

View file

@ -49,17 +49,48 @@ Mock::generatePartial(
);
/**
* Test subject models for fixture generation
**/
* Test Article model
*
* @package cake
* @subpackage cake.tests.cases.console.libs.tasks
*/
class TestTaskArticle extends Model {
/**
* Model name
*
* @var string
* @access public
*/
var $name = 'TestTaskArticle';
/**
* Table name to use
*
* @var string
* @access public
*/
var $useTable = 'articles';
/**
* HasMany Associations
*
* @var array
* @access public
*/
var $hasMany = array(
'Comment' => array(
'className' => 'TestTask.TestTaskComment',
'foreignKey' => 'article_id',
)
);
/**
* Has and Belongs To Many Associations
*
* @var array
* @access public
*/
var $hasAndBelongsToMany = array(
'Tag' => array(
'className' => 'TestTaskTag',
@ -68,19 +99,65 @@ class TestTaskArticle extends Model {
'associationForeignKey' => 'tag_id'
)
);
/**
* Example public method
*
* @return void
* @access public
*/
function doSomething() {
}
/**
* Example Secondary public method
*
* @return void
* @access public
*/
function doSomethingElse() {
}
function _innerMethod() {
/**
* Example protected method
*
* @return void
* @access protected
*/
function _innerMethod() {
}
}
/**
* Tag Testing Model
*
* @package cake
* @subpackage cake.tests.cases.console.libs.tasks
*/
class TestTaskTag extends Model {
/**
* Model name
*
* @var string
* @access public
*/
var $name = 'TestTaskTag';
/**
* Table name
*
* @var string
* @access public
*/
var $useTable = 'tags';
/**
* Has and Belongs To Many Associations
*
* @var array
* @access public
*/
var $hasAndBelongsToMany = array(
'Article' => array(
'className' => 'TestTaskArticle',
@ -92,14 +169,44 @@ class TestTaskTag extends Model {
}
/**
* Simulated Plugin
**/
* Simulated plugin
*
* @package cake
* @subpackage cake.tests.cases.console.libs.tasks
*/
class TestTaskAppModel extends Model {
}
/**
* Testing AppMode (TaskComment)
*
* @package cake
* @subpackage cake.tests.cases.console.libs.tasks
*/
class TestTaskComment extends TestTaskAppModel {
/**
* Model name
*
* @var string
* @access public
*/
var $name = 'TestTaskComment';
/**
* Table name
*
* @var string
* @access public
*/
var $useTable = 'comments';
/**
* Belongs To Associations
*
* @var array
* @access public
*/
var $belongsTo = array(
'Article' => array(
'className' => 'TestTaskArticle',
@ -108,8 +215,28 @@ class TestTaskComment extends TestTaskAppModel {
);
}
/**
* Test Task Comments Controller
*
* @package cake
* @subpackage cake.tests.cases.console.libs.tasks
*/
class TestTaskCommentsController extends Controller {
/**
* Controller Name
*
* @var string
* @access public
*/
var $name = 'TestTaskComments';
/**
* Models to use
*
* @var array
* @access public
*/
var $uses = array('TestTaskComment', 'TestTaskTag');
}
@ -121,6 +248,12 @@ class TestTaskCommentsController extends Controller {
*/
class TestTaskTest extends CakeTestCase {
/**
* Fixtures
*
* @var string
* @access public
*/
var $fixtures = array('core.article', 'core.comment', 'core.articles_tag', 'core.tag');
/**
@ -150,8 +283,8 @@ class TestTaskTest extends CakeTestCase {
/**
* Test that file path generation doesn't continuously append paths.
*
* @access public
* @return void
* @access public
*/
function testFilePathGeneration() {
$file = TESTS . 'cases' . DS . 'models' . DS . 'my_class.test.php';
@ -176,7 +309,7 @@ class TestTaskTest extends CakeTestCase {
* methods into the test case.
*
* @return void
**/
*/
function testMethodIntrospection() {
$result = $this->Task->getTestableMethods('TestTaskArticle');
$expected = array('dosomething', 'dosomethingelse');
@ -187,7 +320,8 @@ class TestTaskTest extends CakeTestCase {
* test that the generation of fixtures works correctly.
*
* @return void
**/
* @access public
*/
function testFixtureArrayGenerationFromModel() {
$subject = ClassRegistry::init('TestTaskArticle');
$result = $this->Task->generateFixtureList($subject);
@ -201,7 +335,8 @@ class TestTaskTest extends CakeTestCase {
* test that the generation of fixtures works correctly.
*
* @return void
**/
* @access public
*/
function testFixtureArrayGenerationFromController() {
$subject = new TestTaskCommentsController();
$result = $this->Task->generateFixtureList($subject);
@ -215,7 +350,8 @@ class TestTaskTest extends CakeTestCase {
* test user interaction to get object type
*
* @return void
**/
* @access public
*/
function testGetObjectType() {
$this->Task->expectOnce('_stop');
$this->Task->setReturnValueAt(0, 'in', 'q');
@ -230,7 +366,8 @@ class TestTaskTest extends CakeTestCase {
* creating test subjects should clear the registry so the registry is always fresh
*
* @return void
**/
* @access public
*/
function testRegistryClearWhenBuildingTestObjects() {
ClassRegistry::flush();
$model = ClassRegistry::init('TestTaskComment');
@ -254,7 +391,8 @@ class TestTaskTest extends CakeTestCase {
* test that getClassName returns the user choice as a classname.
*
* @return void
**/
* @access public
*/
function testGetClassName() {
$objects = App::objects('model');
$skip = $this->skipIf(empty($objects), 'No models in app, this test will fail. %s');
@ -275,7 +413,8 @@ class TestTaskTest extends CakeTestCase {
* Test the user interaction for defining additional fixtures.
*
* @return void
**/
* @access public
*/
function testGetUserFixtures() {
$this->Task->setReturnValueAt(0, 'in', 'y');
$this->Task->setReturnValueAt(1, 'in', 'app.pizza, app.topping, app.side_dish');
@ -288,7 +427,8 @@ class TestTaskTest extends CakeTestCase {
* test that resolving classnames works
*
* @return void
**/
* @access public
*/
function testGetRealClassname() {
$result = $this->Task->getRealClassname('Model', 'Post');
$this->assertEqual($result, 'Post');
@ -311,7 +451,8 @@ class TestTaskTest extends CakeTestCase {
* as PHP4 classnames are all lower case, breaking the plugin path inflection.
*
* @return void
**/
* @access public
*/
function testBakeModelTest() {
$this->Task->setReturnValue('createFile', true);
$this->Task->setReturnValue('isLoadableClass', true);
@ -344,7 +485,8 @@ class TestTaskTest extends CakeTestCase {
* causing issues with inflection of path name from classname.
*
* @return void
**/
* @access public
*/
function testBakeControllerTest() {
$this->Task->setReturnValue('createFile', true);
$this->Task->setReturnValue('isLoadableClass', true);
@ -377,7 +519,8 @@ class TestTaskTest extends CakeTestCase {
* test Constructor generation ensure that constructClasses is called for controllers
*
* @return void
**/
* @access public
*/
function testGenerateContsructor() {
$result = $this->Task->generateConstructor('controller', 'PostsController');
$expected = "new TestPostsController();\n\t\t\$this->Posts->constructClasses();\n";
@ -396,7 +539,8 @@ class TestTaskTest extends CakeTestCase {
* Test that mock class generation works for the appropriate classes
*
* @return void
**/
* @access public
*/
function testMockClassGeneration() {
$result = $this->Task->hasMockClass('controller');
$this->assertTrue($result);
@ -406,7 +550,8 @@ class TestTaskTest extends CakeTestCase {
* test bake() with a -plugin param
*
* @return void
**/
* @access public
*/
function testBakeWithPlugin() {
$this->Task->plugin = 'TestTest';
@ -419,7 +564,8 @@ class TestTaskTest extends CakeTestCase {
* Test filename generation for each type + plugins
*
* @return void
**/
* @access public
*/
function testTestCaseFileName() {
$this->Task->path = '/my/path/tests/';
@ -453,7 +599,8 @@ class TestTaskTest extends CakeTestCase {
* test execute with a type defined
*
* @return void
**/
* @access public
*/
function testExecuteWithOneArg() {
$this->Task->args[0] = 'Model';
$this->Task->setReturnValueAt(0, 'in', 'TestTaskTag');
@ -466,7 +613,8 @@ class TestTaskTest extends CakeTestCase {
* test execute with type and class name defined
*
* @return void
**/
* @access public
*/
function testExecuteWithTwoArgs() {
$this->Task->args = array('Model', 'TestTaskTag');
$this->Task->setReturnValueAt(0, 'in', 'TestTaskTag');

View file

@ -49,10 +49,36 @@ Mock::generatePartial(
Mock::generate('ControllerTask', 'ViewTaskMockControllerTask');
Mock::generate('ProjectTask', 'ViewTaskMockProjectTask');
/**
* Test View Task Comment Model
*
* @package cake
* @subpackage cake.tests.cases.console.libs.tasks
*/
class ViewTaskComment extends Model {
/**
* Model name
*
* @var string
* @access public
*/
var $name = 'ViewTaskComment';
/**
* Table name
*
* @var string
* @access public
*/
var $useTable = 'comments';
/**
* Belongs To Associations
*
* @var array
* @access public
*/
var $belongsTo = array(
'Article' => array(
'className' => 'ViewTaskArticle',
@ -61,46 +87,143 @@ class ViewTaskComment extends Model {
);
}
/**
* Test View Task Article Model
*
* @package cake
* @subpackage cake.tests.cases.console.libs.tasks
*/
class ViewTaskArticle extends Model {
/**
* Model name
*
* @var string
* @access public
*/
var $name = 'ViewTaskArticle';
/**
* Table name
*
* @var string
* @access public
*/
var $useTable = 'articles';
}
/**
* Test View Task Comments Controller
*
* @package cake
* @subpackage cake.tests.cases.console.libs.tasks
*/
class ViewTaskCommentsController extends Controller {
/**
* Controller name
*
* @var string
* @access public
*/
var $name = 'ViewTaskComments';
/**
* Testing public controller action
*
* @return void
* @access public
*/
function index() {
}
function add() {
/**
* Testing public controller action
*
* @return void
* @access public
*/
function add() {
}
}
/**
* Test View Task Articles Controller
*
* @package cake
* @subpackage cake.tests.cases.console.libs.tasks
*/
class ViewTaskArticlesController extends Controller {
/**
* Controller name
*
* @var string
* @access public
*/
var $name = 'ViewTaskArticles';
/**
* Test public controller action
*
* @return void
* @access public
*/
function index() {
}
/**
* Test public controller action
*
* @return void
* @access public
*/
function add() {
}
/**
* Test admin prefixed controller action
*
* @return void
* @access public
*/
function admin_index() {
}
/**
* Test admin prefixed controller action
*
* @return void
* @access public
*/
function admin_add() {
}
/**
* Test admin prefixed controller action
*
* @return void
* @access public
*/
function admin_view() {
}
/**
* Test admin prefixed controller action
*
* @return void
* @access public
*/
function admin_edit() {
}
function admin_delete() {
/**
* Test admin prefixed controller action
*
* @return void
* @access public
*/
function admin_delete() {
}
}
@ -112,6 +235,12 @@ class ViewTaskArticlesController extends Controller {
*/
class ViewTaskTest extends CakeTestCase {
/**
* Fixtures
*
* @var array
* @access public
*/
var $fixtures = array('core.article', 'core.comment', 'core.articles_tag', 'core.tag');
/**
@ -148,7 +277,8 @@ class ViewTaskTest extends CakeTestCase {
* Test getContent and parsing of Templates.
*
* @return void
**/
* @access public
*/
function testGetContent() {
$vars = array(
'modelClass' => 'TestViewModel',
@ -178,7 +308,8 @@ class ViewTaskTest extends CakeTestCase {
* test getContent() using an admin_prefixed action.
*
* @return void
**/
* @access public
*/
function testGetContentWithAdminAction() {
$_back = Configure::read('Routing');
Configure::write('Routing.prefixes', array('admin'));
@ -212,7 +343,8 @@ class ViewTaskTest extends CakeTestCase {
* test Bake method
*
* @return void
**/
* @access public
*/
function testBake() {
$this->Task->controllerName = 'ViewTaskComments';
$this->Task->controllerPath = 'view_task_comments';
@ -237,7 +369,8 @@ class ViewTaskTest extends CakeTestCase {
* test bake() with a -plugin param
*
* @return void
**/
* @access public
*/
function testBakeWithPlugin() {
$this->Task->controllerName = 'ViewTaskComments';
$this->Task->controllerPath = 'view_task_comments';
@ -252,7 +385,8 @@ class ViewTaskTest extends CakeTestCase {
* test bake actions baking multiple actions.
*
* @return void
**/
* @access public
*/
function testBakeActions() {
$this->Task->controllerName = 'ViewTaskComments';
$this->Task->controllerPath = 'view_task_comments';
@ -277,7 +411,8 @@ class ViewTaskTest extends CakeTestCase {
* test baking a customAction (non crud)
*
* @return void
**/
* @access public
*/
function testCustomAction() {
$this->Task->controllerName = 'ViewTaskComments';
$this->Task->controllerPath = 'view_task_comments';
@ -295,7 +430,8 @@ class ViewTaskTest extends CakeTestCase {
* Test all()
*
* @return void
**/
* @access public
*/
function testExecuteIntoAll() {
$this->Task->args[0] = 'all';
@ -313,7 +449,8 @@ class ViewTaskTest extends CakeTestCase {
* test `cake bake view $controller view`
*
* @return void
**/
* @access public
*/
function testExecuteWithActionParam() {
$this->Task->args[0] = 'ViewTaskComments';
$this->Task->args[1] = 'view';
@ -328,7 +465,8 @@ class ViewTaskTest extends CakeTestCase {
* Ensure that views are only baked for actions that exist in the controller.
*
* @return void
**/
* @access public
*/
function testExecuteWithController() {
$this->Task->args[0] = 'ViewTaskComments';
@ -344,7 +482,8 @@ class ViewTaskTest extends CakeTestCase {
* Which only bakes admin methods, not non-admin methods.
*
* @return void
**/
* @access public
*/
function testExecuteWithControllerAndAdminFlag() {
$_back = Configure::read('Routing');
Configure::write('Routing.prefixes', array('admin'));
@ -366,7 +505,8 @@ class ViewTaskTest extends CakeTestCase {
* test execute into interactive.
*
* @return void
**/
* @access public
*/
function testExecuteInteractive() {
$this->Task->connection = 'test_suite';
$this->Task->args = array();
@ -403,7 +543,8 @@ class ViewTaskTest extends CakeTestCase {
* test `cake bake view posts index list`
*
* @return void
**/
* @access public
*/
function testExecuteWithAlternateTemplates() {
$this->Task->connection = 'test_suite';
$this->Task->args = array('ViewTaskComments', 'index', 'list');
@ -421,7 +562,8 @@ class ViewTaskTest extends CakeTestCase {
* test execute into interactive() with admin methods.
*
* @return void
**/
* @access public
*/
function testExecuteInteractiveWithAdmin() {
Configure::write('Routing.prefixes', array('admin'));
$this->Task->connection = 'test_suite';

View file

@ -41,8 +41,8 @@ class TestDispatcher extends Dispatcher {
* @param mixed $controller
* @param mixed $params
* @param mixed $missingAction
* @access protected
* @return void
* @access protected
*/
function _invoke(&$controller, $params) {
restore_error_handler();
@ -60,8 +60,8 @@ class TestDispatcher extends Dispatcher {
* cakeError method
*
* @param mixed $filename
* @access public
* @return void
* @access public
*/
function cakeError($filename, $params) {
return array($filename, $params);
@ -70,8 +70,8 @@ class TestDispatcher extends Dispatcher {
/**
* _stop method
*
* @access protected
* @return void
* @access protected
*/
function _stop() {
return true;
@ -114,8 +114,8 @@ class MyPluginController extends MyPluginAppController {
/**
* index method
*
* @access public
* @return void
* @access public
*/
function index() {
return true;
@ -124,8 +124,8 @@ class MyPluginController extends MyPluginAppController {
/**
* add method
*
* @access public
* @return void
* @access public
*/
function add() {
return true;
@ -135,8 +135,8 @@ class MyPluginController extends MyPluginAppController {
* admin_add method
*
* @param mixed $id
* @access public
* @return void
* @access public
*/
function admin_add($id = null) {
return $id;
@ -171,8 +171,8 @@ class SomePagesController extends AppController {
* display method
*
* @param mixed $page
* @access public
* @return void
* @access public
*/
function display($page = null) {
return $page;
@ -181,8 +181,8 @@ class SomePagesController extends AppController {
/**
* index method
*
* @access public
* @return void
* @access public
*/
function index() {
return true;
@ -191,8 +191,8 @@ class SomePagesController extends AppController {
/**
* protected method
*
* @access protected
* @return void
* @access protected
*/
function _protected() {
return true;
@ -201,8 +201,8 @@ class SomePagesController extends AppController {
/**
* redirect method overriding
*
* @access public
* @return void
* @access public
*/
function redirect() {
echo 'this should not be accessible';
@ -237,8 +237,8 @@ class OtherPagesController extends MyPluginAppController {
* display method
*
* @param mixed $page
* @access public
* @return void
* @access public
*/
function display($page = null) {
return $page;
@ -247,8 +247,8 @@ class OtherPagesController extends MyPluginAppController {
/**
* index method
*
* @access public
* @return void
* @access public
*/
function index() {
return true;
@ -282,8 +282,8 @@ class TestDispatchPagesController extends AppController {
/**
* admin_index method
*
* @access public
* @return void
* @access public
*/
function admin_index() {
return true;
@ -292,8 +292,8 @@ class TestDispatchPagesController extends AppController {
/**
* camelCased method
*
* @access public
* @return void
* @access public
*/
function camelCased() {
return true;
@ -336,8 +336,8 @@ class ArticlesTestController extends ArticlesTestAppController {
/**
* admin_index method
*
* @access public
* @return void
* @access public
*/
function admin_index() {
return true;
@ -379,8 +379,8 @@ class SomePostsController extends AppController {
/**
* beforeFilter method
*
* @access public
* @return void
* @access public
*/
function beforeFilter() {
if ($this->params['action'] == 'index') {
@ -394,8 +394,8 @@ class SomePostsController extends AppController {
/**
* index method
*
* @access public
* @return void
* @access public
*/
function index() {
return true;
@ -404,8 +404,8 @@ class SomePostsController extends AppController {
/**
* change method
*
* @access public
* @return void
* @access public
*/
function change() {
return true;
@ -466,8 +466,8 @@ class TestCachedPagesController extends AppController {
/**
* index method
*
* @access public
* @return void
* @access public
*/
function index() {
$this->render();
@ -476,8 +476,8 @@ class TestCachedPagesController extends AppController {
/**
* test_nocache_tags method
*
* @access public
* @return void
* @access public
*/
function test_nocache_tags() {
$this->render();
@ -486,8 +486,8 @@ class TestCachedPagesController extends AppController {
/**
* view method
*
* @access public
* @return void
* @access public
*/
function view($id = null) {
$this->render('index');
@ -521,8 +521,8 @@ class TimesheetsController extends AppController {
/**
* index method
*
* @access public
* @return void
* @access public
*/
function index() {
return true;
@ -540,8 +540,8 @@ class DispatcherTest extends CakeTestCase {
/**
* setUp method
*
* @access public
* @return void
* @access public
*/
function startTest() {
$this->_get = $_GET;
@ -567,8 +567,8 @@ class DispatcherTest extends CakeTestCase {
/**
* tearDown method
*
* @access public
* @return void
* @access public
*/
function endTest() {
$_GET = $this->_get;
@ -584,8 +584,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testParseParamsWithoutZerosAndEmptyPost method
*
* @access public
* @return void
* @access public
*/
function testParseParamsWithoutZerosAndEmptyPost() {
$Dispatcher =& new Dispatcher();
@ -601,8 +601,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testParseParamsReturnsPostedData method
*
* @access public
* @return void
* @access public
*/
function testParseParamsReturnsPostedData() {
$_POST['testdata'] = "My Posted Content";
@ -615,8 +615,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testParseParamsWithSingleZero method
*
* @access public
* @return void
* @access public
*/
function testParseParamsWithSingleZero() {
$Dispatcher =& new Dispatcher();
@ -631,8 +631,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testParseParamsWithManySingleZeros method
*
* @access public
* @return void
* @access public
*/
function testParseParamsWithManySingleZeros() {
$Dispatcher =& new Dispatcher();
@ -648,8 +648,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testParseParamsWithManyZerosInEachSectionOfUrl method
*
* @access public
* @return void
* @access public
*/
function testParseParamsWithManyZerosInEachSectionOfUrl() {
$Dispatcher =& new Dispatcher();
@ -665,8 +665,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testParseParamsWithMixedOneToManyZerosInEachSectionOfUrl method
*
* @access public
* @return void
* @access public
*/
function testParseParamsWithMixedOneToManyZerosInEachSectionOfUrl() {
$Dispatcher =& new Dispatcher();
@ -682,8 +682,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testQueryStringOnRoot method
*
* @access public
* @return void
* @access public
*/
function testQueryStringOnRoot() {
Router::reload();
@ -712,8 +712,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testFileUploadArrayStructure method
*
* @access public
* @return void
* @access public
*/
function testFileUploadArrayStructure() {
$_FILES = array('data' => array('name' => array(
@ -965,8 +965,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testGetUrl method
*
* @access public
* @return void
* @access public
*/
function testGetUrl() {
$Dispatcher =& new Dispatcher();
@ -1005,8 +1005,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testBaseUrlAndWebrootWithModRewrite method
*
* @access public
* @return void
* @access public
*/
function testBaseUrlAndWebrootWithModRewrite() {
$Dispatcher =& new Dispatcher();
@ -1081,8 +1081,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testBaseUrlwithModRewriteAlias method
*
* @access public
* @return void
* @access public
*/
function testBaseUrlwithModRewriteAlias() {
$_SERVER['DOCUMENT_ROOT'] = '/home/aplusnur/public_html';
@ -1116,8 +1116,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testBaseUrlAndWebrootWithBaseUrl method
*
* @access public
* @return void
* @access public
*/
function testBaseUrlAndWebrootWithBaseUrl() {
$Dispatcher =& new Dispatcher();
@ -1186,8 +1186,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testBaseUrlAndWebrootWithBase method
*
* @access public
* @return void
* @access public
*/
function testBaseUrlAndWebrootWithBase() {
$Dispatcher =& new Dispatcher();
@ -1217,8 +1217,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testMissingController method
*
* @access public
* @return void
* @access public
*/
function testMissingController() {
$Dispatcher =& new TestDispatcher();
@ -1237,8 +1237,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testPrivate method
*
* @access public
* @return void
* @access public
*/
function testPrivate() {
$Dispatcher =& new TestDispatcher();
@ -1260,8 +1260,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testMissingAction method
*
* @access public
* @return void
* @access public
*/
function testMissingAction() {
$Dispatcher =& new TestDispatcher();
@ -1298,8 +1298,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testDispatch method
*
* @access public
* @return void
* @access public
*/
function testDispatch() {
$Dispatcher =& new TestDispatcher();
@ -1353,8 +1353,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testDispatchWithArray method
*
* @access public
* @return void
* @access public
*/
function testDispatchWithArray() {
$Dispatcher =& new TestDispatcher();
@ -1373,8 +1373,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testAdminDispatch method
*
* @access public
* @return void
* @access public
*/
function testAdminDispatch() {
$_POST = array();
@ -1404,8 +1404,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testPluginDispatch method
*
* @access public
* @return void
* @access public
*/
function testPluginDispatch() {
$_POST = array();
@ -1453,8 +1453,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testAutomaticPluginDispatch method
*
* @access public
* @return void
* @access public
*/
function testAutomaticPluginDispatch() {
$_POST = array();
@ -1491,8 +1491,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testAutomaticPluginControllerDispatch method
*
* @access public
* @return void
* @access public
*/
function testAutomaticPluginControllerDispatch() {
$_POST = array();
@ -1594,7 +1594,8 @@ class DispatcherTest extends CakeTestCase {
* plugin short form instead.
*
* @return void
**/
* @access public
*/
function testAutomaticPluginDispatchWithShortAccess() {
$_POST = array();
$_SERVER['PHP_SELF'] = '/cake/repo/branches/1.2.x.x/index.php';
@ -1642,8 +1643,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testAutomaticPluginControllerMissingActionDispatch method
*
* @access public
* @return void
* @access public
*/
function testAutomaticPluginControllerMissingActionDispatch() {
$_POST = array();
@ -1685,8 +1686,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testPrefixProtection method
*
* @access public
* @return void
* @access public
*/
function testPrefixProtection() {
$_POST = array();
@ -1715,7 +1716,8 @@ class DispatcherTest extends CakeTestCase {
* undocumented function
*
* @return void
**/
* @access public
*/
function testTestPluginDispatch() {
$Dispatcher =& new TestDispatcher();
App::build(array(
@ -1734,8 +1736,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testChangingParamsFromBeforeFilter method
*
* @access public
* @return void
* @access public
*/
function testChangingParamsFromBeforeFilter() {
$_SERVER['PHP_SELF'] = '/cake/repo/branches/1.2.x.x/index.php';
@ -1768,8 +1770,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testStaticAssets method
*
* @access public
* @return void
* @access public
*/
function testStaticAssets() {
Router::reload();
@ -1785,7 +1787,7 @@ class DispatcherTest extends CakeTestCase {
Configure::write('debug', 0);
ob_start();
$Dispatcher->dispatch('/img/test.jpg');
$Dispatcher->dispatch('img/test.jpg');
$result = ob_get_clean();
$file = file_get_contents(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'vendors' . DS . 'img' . DS . 'test.jpg');
$this->assertEqual($file, $result);
@ -1830,14 +1832,23 @@ class DispatcherTest extends CakeTestCase {
$file = file_get_contents(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS . 'test_plugin' .DS . 'vendors' . DS . 'img' . DS . 'cake.icon.gif');
$this->assertEqual($file, $result);
Configure::write('debug', 2);
$Dispatcher->params = $Dispatcher->parseParams('plugin_js/js/plugin_js.js');
ob_start();
$Dispatcher->cached('plugin_js/js/plugin_js.js');
$result = ob_get_clean();
$expected = "alert('win sauce');";
$this->assertEqual($result, $expected);
header('Content-type: text/html');//reset the header content-type without page can render as plain text.
}
/**
* testFullPageCachingDispatch method
*
* @access public
* @return void
* @access public
*/
function testFullPageCachingDispatch() {
Configure::write('Cache.disable', false);
@ -1972,8 +1983,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testHttpMethodOverrides method
*
* @access public
* @return void
* @access public
*/
function testHttpMethodOverrides() {
Router::reload();
@ -2027,6 +2038,7 @@ class DispatcherTest extends CakeTestCase {
* Tests that invalid characters cannot be injected into the application base path.
*
* @return void
* @access public
*/
function testBasePathInjection() {
$self = $_SERVER['PHP_SELF'];
@ -2043,8 +2055,8 @@ class DispatcherTest extends CakeTestCase {
/**
* testEnvironmentDetection method
*
* @access public
* @return void
* @access public
*/
function testEnvironmentDetection() {
$dispatcher =& new Dispatcher();
@ -2149,8 +2161,8 @@ class DispatcherTest extends CakeTestCase {
/**
* Tests that the Dispatcher does not return an empty action
*
* @access private
* @return void
* @access public
*/
function testTrailingSlash() {
$_POST = array();
@ -2175,8 +2187,8 @@ class DispatcherTest extends CakeTestCase {
/**
* backupEnvironment method
*
* @access private
* @return void
* @access private
*/
function __backupEnvironment() {
return array(
@ -2190,8 +2202,8 @@ class DispatcherTest extends CakeTestCase {
/**
* reloadEnvironment method
*
* @access private
* @return void
* @access private
*/
function __reloadEnvironment() {
foreach ($_GET as $key => $val) {
@ -2210,8 +2222,8 @@ class DispatcherTest extends CakeTestCase {
* loadEnvironment method
*
* @param mixed $env
* @access private
* @return void
* @access private
*/
function __loadEnvironment($env) {
if ($env['reload']) {
@ -2245,8 +2257,8 @@ class DispatcherTest extends CakeTestCase {
* cachePath method
*
* @param mixed $her
* @access private
* @return string
* @access private
*/
function __cachePath($here) {
$path = $here;

View file

@ -43,8 +43,6 @@ class CacheTest extends CakeTestCase {
$this->_defaultCacheConfig = Cache::config('default');
Cache::config('default', array('engine' => 'File', 'path' => TMP . 'tests'));
Cache::engine('File', array('path' => TMP . 'tests'));
}
/**
@ -56,7 +54,6 @@ class CacheTest extends CakeTestCase {
function tearDown() {
Configure::write('Cache.disable', $this->_cacheDisable);
Cache::config('default', $this->_defaultCacheConfig['settings']);
Cache::engine('File');
}
/**
@ -71,6 +68,31 @@ class CacheTest extends CakeTestCase {
$this->assertEqual($results, Cache::config('new'));
}
/**
* test configuring CacheEngines in App/libs
*
* @return void
*/
function testConfigWithLibAndPluginEngines() {
App::build(array(
'libs' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'libs' . DS),
'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS)
), true);
$settings = array('engine' => 'TestAppCache', 'path' => TMP, 'prefix' => 'cake_test_');
$result = Cache::config('libEngine', $settings);
$this->assertEqual($result, Cache::config('libEngine'));
$settings = array('engine' => 'TestPlugin.TestPluginCache', 'path' => TMP, 'prefix' => 'cake_test_');
$result = Cache::config('pluginLibEngine', $settings);
$this->assertEqual($result, Cache::config('pluginLibEngine'));
Cache::drop('libEngine');
Cache::drop('pluginLibEngine');
App::build();
}
/**
* testInvalidConfig method
*
@ -102,15 +124,45 @@ class CacheTest extends CakeTestCase {
$_cacheConfigTests = Cache::config('tests');
$result = Cache::config('sessions', array('engine'=> 'File', 'path' => TMP . 'sessions'));
$this->assertEqual($result['settings'], Cache::settings('File'));
$this->assertEqual($result['settings'], Cache::settings('sessions'));
$result = Cache::config('tests', array('engine'=> 'File', 'path' => TMP . 'tests'));
$this->assertEqual($result['settings'], Cache::settings('File'));
$this->assertEqual($result['settings'], Cache::settings('tests'));
Cache::config('sessions', $_cacheConfigSessions['settings']);
Cache::config('tests', $_cacheConfigTests['settings']);
}
/**
* test that calling config() sets the 'default' configuration up.
*
* @return void
*/
function testConfigSettingDefaultConfigKey() {
Cache::config('test_name', array('engine' => 'File', 'prefix' => 'test_name_'));
Cache::config('test_name');
Cache::write('value_one', 'I am cached');
$result = Cache::read('value_one');
$this->assertEqual($result, 'I am cached');
Cache::config('default');
$result = Cache::read('value_one');
$this->assertEqual($result, null);
Cache::write('value_one', 'I am in another cache config!');
$result = Cache::read('value_one');
$this->assertEqual($result, 'I am in another cache config!');
Cache::config('test_name');
$result = Cache::read('value_one');
$this->assertEqual($result, 'I am cached');
Cache::delete('value_one');
Cache::config('default');
Cache::delete('value_one');
}
/**
* testWritingWithConfig method
*
@ -132,11 +184,23 @@ class CacheTest extends CakeTestCase {
'engine' => 'File',
'isWindows' => DIRECTORY_SEPARATOR == '\\'
);
$this->assertEqual($expected, Cache::settings('File'));
$this->assertEqual($expected, Cache::settings('sessions'));
Cache::config('sessions', $_cacheConfigSessions['settings']);
}
/**
* test that configured returns an array of the currently configured cache
* settings
*
* @return void
*/
function testConfigured() {
$result = Cache::configured();
$this->assertTrue(in_array('_cake_core_', $result));
$this->assertTrue(in_array('default', $result));
}
/**
* testInitSettings method
*
@ -144,7 +208,7 @@ class CacheTest extends CakeTestCase {
* @return void
*/
function testInitSettings() {
Cache::engine('File', array('path' => TMP . 'tests'));
Cache::config('default', array('engine' => 'File', 'path' => TMP . 'tests'));
$settings = Cache::settings();
$expecting = array(
@ -158,8 +222,37 @@ class CacheTest extends CakeTestCase {
'isWindows' => DIRECTORY_SEPARATOR == '\\'
);
$this->assertEqual($settings, $expecting);
}
Cache::engine('File');
/**
* test that drop removes cache configs, and that further attempts to use that config
* do not work.
*
* @return void
*/
function testDrop() {
App::build(array(
'libs' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'libs' . DS),
'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS)
), true);
$result = Cache::drop('some_config_that_does_not_exist');
$this->assertFalse($result);
$_testsConfig = Cache::config('tests');
$result = Cache::drop('tests');
$this->assertTrue($result);
Cache::config('unconfigTest', array(
'engine' => 'TestAppCache'
));
$this->assertTrue(Cache::isInitialized('unconfigTest'));
$this->assertTrue(Cache::drop('unconfigTest'));
$this->assertFalse(Cache::isInitialized('TestAppCache'));
Cache::config('tests', $_testsConfig);
App::build();
}
/**
@ -256,5 +349,6 @@ class CacheTest extends CakeTestCase {
Cache::set($_cacheSet);
}
}
?>

View file

@ -39,7 +39,7 @@ class ApcEngineTest extends UnitTestCase {
*/
function skip() {
$skip = true;
if (Cache::engine('Apc')) {
if (function_exists('apc_store')) {
$skip = false;
}
$this->skipIf($skip, '%s Apc is not installed or configured properly');
@ -65,6 +65,7 @@ class ApcEngineTest extends UnitTestCase {
*/
function tearDown() {
Configure::write('Cache.disable', $this->_cacheDisable);
Cache::drop('apc');
Cache::config('default');
}
@ -112,7 +113,7 @@ class ApcEngineTest extends UnitTestCase {
$result = Cache::read('other_test');
$this->assertFalse($result);
Cache::set(array('duration' => "+1 second"));
Cache::set(array('duration' => 1));
$data = 'this is a test of the emergency broadcasting system';
$result = Cache::write('other_test', $data);

View file

@ -2,8 +2,6 @@
/**
* FileEngineTest file
*
* Long description for file
*
* PHP versions 4 and 5
*
* CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>
@ -22,9 +20,6 @@
if (!class_exists('Cache')) {
require LIBS . 'cache.php';
}
if (!defined('CAKEPHP_UNIT_TEST_EXECUTION')) {
define('CAKEPHP_UNIT_TEST_EXECUTION', 1);
}
/**
* FileEngineTest class
@ -74,12 +69,11 @@ class FileEngineTest extends CakeTestCase {
*/
function testCacheDirChange() {
$result = Cache::config('sessions', array('engine'=> 'File', 'path' => TMP . 'sessions'));
$this->assertEqual($result['settings'], Cache::settings('File'));
$this->assertNotEqual($result, Cache::settings('File'));
$this->assertEqual($result['settings'], Cache::settings('sessions'));
$result = Cache::config('tests', array('engine'=> 'File', 'path' => TMP . 'tests'));
$this->assertEqual($result['settings'], Cache::settings('File'));
$this->assertNotEqual($result, Cache::settings('File'));
$result = Cache::config('sessions', array('engine'=> 'File', 'path' => TMP . 'tests'));
$this->assertEqual($result['settings'], Cache::settings('sessions'));
$this->assertNotEqual($result['settings'], Cache::settings('default'));
}
/**
@ -159,7 +153,6 @@ class FileEngineTest extends CakeTestCase {
$result = Cache::delete('delete_test');
$this->assertFalse($result);
}
/**
@ -169,12 +162,12 @@ class FileEngineTest extends CakeTestCase {
* @return void
*/
function testSerialize() {
Cache::engine('File', array('serialize' => true));
Cache::config('default', array('engine' => 'File', 'serialize' => true));
$data = 'this is a test of the emergency broadcasting system';
$write = Cache::write('serialize_test', $data, 1);
$write = Cache::write('serialize_test', $data);
$this->assertTrue($write);
Cache::engine('File', array('serialize' => false));
Cache::config('default', array('serialize' => false));
$read = Cache::read('serialize_test');
$newread = Cache::read('serialize_test');
@ -184,7 +177,6 @@ class FileEngineTest extends CakeTestCase {
$this->assertIdentical($read, serialize($data));
$this->assertIdentical(unserialize($newread), $data);
}
/**
@ -194,7 +186,7 @@ class FileEngineTest extends CakeTestCase {
* @return void
*/
function testClear() {
Cache::engine('File', array('duration' => 1));
Cache::config('default', array('engine' => 'File', 'duration' => 1));
$data = 'this is a test of the emergency broadcasting system';
$write = Cache::write('serialize_test1', $data);
$write = Cache::write('serialize_test2', $data);
@ -223,7 +215,7 @@ class FileEngineTest extends CakeTestCase {
$this->assertFalse(file_exists(CACHE . 'cake_serialize_test2'));
$this->assertFalse(file_exists(CACHE . 'cake_serialize_test3'));
$result = Cache::engine('File', array('path' => CACHE . 'views'));
Cache::config('default', array('engine' => 'File', 'path' => CACHE . 'views'));
$data = 'this is a test of the emergency broadcasting system';
$write = Cache::write('controller_view_1', $data);
@ -278,7 +270,7 @@ class FileEngineTest extends CakeTestCase {
clearCache('controller_view');
Cache::engine('File', array('path' => CACHE));
Cache::config('default', array('engine' => 'File', 'path' => CACHE));
}
/**
@ -306,40 +298,43 @@ class FileEngineTest extends CakeTestCase {
* @return void
*/
function testRemoveWindowsSlashesFromCache() {
Cache::engine('File', array('isWindows' => true, 'prefix' => null, 'path' => TMP));
Cache::config('windows_test', array('engine' => 'File', 'isWindows' => true, 'prefix' => null, 'path' => TMP));
$expected = array (
'C:\dev\prj2\sites\cake\libs' => array(
0 => 'C:\dev\prj2\sites\cake\libs', 1 => 'C:\dev\prj2\sites\cake\libs\view',
2 => 'C:\dev\prj2\sites\cake\libs\view\scaffolds', 3 => 'C:\dev\prj2\sites\cake\libs\view\pages',
4 => 'C:\dev\prj2\sites\cake\libs\view\layouts', 5 => 'C:\dev\prj2\sites\cake\libs\view\layouts\xml',
6 => 'C:\dev\prj2\sites\cake\libs\view\layouts\rss', 7 => 'C:\dev\prj2\sites\cake\libs\view\layouts\js',
8 => 'C:\dev\prj2\sites\cake\libs\view\layouts\email', 9 => 'C:\dev\prj2\sites\cake\libs\view\layouts\email\text',
10 => 'C:\dev\prj2\sites\cake\libs\view\layouts\email\html', 11 => 'C:\dev\prj2\sites\cake\libs\view\helpers',
12 => 'C:\dev\prj2\sites\cake\libs\view\errors', 13 => 'C:\dev\prj2\sites\cake\libs\view\elements',
14 => 'C:\dev\prj2\sites\cake\libs\view\elements\email', 15 => 'C:\dev\prj2\sites\cake\libs\view\elements\email\text',
16 => 'C:\dev\prj2\sites\cake\libs\view\elements\email\html', 17 => 'C:\dev\prj2\sites\cake\libs\model',
18 => 'C:\dev\prj2\sites\cake\libs\model\datasources', 19 => 'C:\dev\prj2\sites\cake\libs\model\datasources\dbo',
20 => 'C:\dev\prj2\sites\cake\libs\model\behaviors', 21 => 'C:\dev\prj2\sites\cake\libs\controller',
22 => 'C:\dev\prj2\sites\cake\libs\controller\components', 23 => 'C:\dev\prj2\sites\cake\libs\cache'),
'C:\dev\prj2\sites\main_site\vendors' => array(
0 => 'C:\dev\prj2\sites\main_site\vendors', 1 => 'C:\dev\prj2\sites\main_site\vendors\shells',
2 => 'C:\dev\prj2\sites\main_site\vendors\shells\templates', 3 => 'C:\dev\prj2\sites\main_site\vendors\shells\templates\cdc_project',
4 => 'C:\dev\prj2\sites\main_site\vendors\shells\tasks', 5 => 'C:\dev\prj2\sites\main_site\vendors\js',
6 => 'C:\dev\prj2\sites\main_site\vendors\css'),
'C:\dev\prj2\sites\vendors' => array(
0 => 'C:\dev\prj2\sites\vendors', 1 => 'C:\dev\prj2\sites\vendors\simpletest',
2 => 'C:\dev\prj2\sites\vendors\simpletest\test', 3 => 'C:\dev\prj2\sites\vendors\simpletest\test\support',
4 => 'C:\dev\prj2\sites\vendors\simpletest\test\support\collector', 5 => 'C:\dev\prj2\sites\vendors\simpletest\extensions',
6 => 'C:\dev\prj2\sites\vendors\simpletest\extensions\testdox', 7 => 'C:\dev\prj2\sites\vendors\simpletest\docs',
8 => 'C:\dev\prj2\sites\vendors\simpletest\docs\fr', 9 => 'C:\dev\prj2\sites\vendors\simpletest\docs\en'),
'C:\dev\prj2\sites\main_site\views\helpers' => array(
0 => 'C:\dev\prj2\sites\main_site\views\helpers'));
'C:\dev\prj2\sites\cake\libs' => array(
0 => 'C:\dev\prj2\sites\cake\libs', 1 => 'C:\dev\prj2\sites\cake\libs\view',
2 => 'C:\dev\prj2\sites\cake\libs\view\scaffolds', 3 => 'C:\dev\prj2\sites\cake\libs\view\pages',
4 => 'C:\dev\prj2\sites\cake\libs\view\layouts', 5 => 'C:\dev\prj2\sites\cake\libs\view\layouts\xml',
6 => 'C:\dev\prj2\sites\cake\libs\view\layouts\rss', 7 => 'C:\dev\prj2\sites\cake\libs\view\layouts\js',
8 => 'C:\dev\prj2\sites\cake\libs\view\layouts\email', 9 => 'C:\dev\prj2\sites\cake\libs\view\layouts\email\text',
10 => 'C:\dev\prj2\sites\cake\libs\view\layouts\email\html', 11 => 'C:\dev\prj2\sites\cake\libs\view\helpers',
12 => 'C:\dev\prj2\sites\cake\libs\view\errors', 13 => 'C:\dev\prj2\sites\cake\libs\view\elements',
14 => 'C:\dev\prj2\sites\cake\libs\view\elements\email', 15 => 'C:\dev\prj2\sites\cake\libs\view\elements\email\text',
16 => 'C:\dev\prj2\sites\cake\libs\view\elements\email\html', 17 => 'C:\dev\prj2\sites\cake\libs\model',
18 => 'C:\dev\prj2\sites\cake\libs\model\datasources', 19 => 'C:\dev\prj2\sites\cake\libs\model\datasources\dbo',
20 => 'C:\dev\prj2\sites\cake\libs\model\behaviors', 21 => 'C:\dev\prj2\sites\cake\libs\controller',
22 => 'C:\dev\prj2\sites\cake\libs\controller\components', 23 => 'C:\dev\prj2\sites\cake\libs\cache'),
'C:\dev\prj2\sites\main_site\vendors' => array(
0 => 'C:\dev\prj2\sites\main_site\vendors', 1 => 'C:\dev\prj2\sites\main_site\vendors\shells',
2 => 'C:\dev\prj2\sites\main_site\vendors\shells\templates', 3 => 'C:\dev\prj2\sites\main_site\vendors\shells\templates\cdc_project',
4 => 'C:\dev\prj2\sites\main_site\vendors\shells\tasks', 5 => 'C:\dev\prj2\sites\main_site\vendors\js',
6 => 'C:\dev\prj2\sites\main_site\vendors\css'),
'C:\dev\prj2\sites\vendors' => array(
0 => 'C:\dev\prj2\sites\vendors', 1 => 'C:\dev\prj2\sites\vendors\simpletest',
2 => 'C:\dev\prj2\sites\vendors\simpletest\test', 3 => 'C:\dev\prj2\sites\vendors\simpletest\test\support',
4 => 'C:\dev\prj2\sites\vendors\simpletest\test\support\collector', 5 => 'C:\dev\prj2\sites\vendors\simpletest\extensions',
6 => 'C:\dev\prj2\sites\vendors\simpletest\extensions\testdox', 7 => 'C:\dev\prj2\sites\vendors\simpletest\docs',
8 => 'C:\dev\prj2\sites\vendors\simpletest\docs\fr', 9 => 'C:\dev\prj2\sites\vendors\simpletest\docs\en'),
'C:\dev\prj2\sites\main_site\views\helpers' => array(
0 => 'C:\dev\prj2\sites\main_site\views\helpers')
);
$data = Cache::write('test_dir_map', $expected);
$data = Cache::read('test_dir_map');
Cache::delete('test_dir_map');
Cache::write('test_dir_map', $expected, 'windows_test');
$data = Cache::read('test_dir_map', 'windows_test');
Cache::delete('test_dir_map', 'windows_test');
$this->assertEqual($expected, $data);
Cache::drop('windows_test');
}
/**
@ -349,13 +344,13 @@ class FileEngineTest extends CakeTestCase {
* @return void
*/
function testWriteQuotedString() {
Cache::engine('File', array('path' => TMP . 'tests'));
Cache::config('default', array('engine' => 'File', 'path' => TMP . 'tests'));
Cache::write('App.doubleQuoteTest', '"this is a quoted string"');
$this->assertIdentical(Cache::read('App.doubleQuoteTest'), '"this is a quoted string"');
Cache::write('App.singleQuoteTest', "'this is a quoted string'");
$this->assertIdentical(Cache::read('App.singleQuoteTest'), "'this is a quoted string'");
Cache::engine('File', array('isWindows' => true, 'path' => TMP . 'tests'));
Cache::config('default', array('isWindows' => true, 'path' => TMP . 'tests'));
$this->assertIdentical(Cache::read('App.doubleQuoteTest'), '"this is a quoted string"');
Cache::write('App.singleQuoteTest', "'this is a quoted string'");
$this->assertIdentical(Cache::read('App.singleQuoteTest'), "'this is a quoted string'");

View file

@ -2,8 +2,6 @@
/**
* MemcacheEngineTest file
*
* Long description for file
*
* PHP versions 4 and 5
*
* CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>
@ -23,13 +21,6 @@ if (!class_exists('Cache')) {
require LIBS . 'cache.php';
}
/**
* MemcacheEngineTest class
*
* @package cake
* @subpackage cake.tests.cases.libs.cache
*/
/**
* MemcacheEngineTest class
*
@ -46,10 +37,10 @@ class MemcacheEngineTest extends CakeTestCase {
*/
function skip() {
$skip = true;
if (Cache::engine('Memcache')) {
if (class_exists('Memcache')) {
$skip = false;
}
$this->skipIf($skip, '%s Memcache is not installed or configured properly');
$this->skipIf($skip, '%s Memcache is not installed or configured properly.');
}
/**
@ -72,6 +63,7 @@ class MemcacheEngineTest extends CakeTestCase {
*/
function tearDown() {
Configure::write('Cache.disable', $this->_cacheDisable);
Cache::drop('memcache');
Cache::config('default');
}
@ -83,13 +75,15 @@ class MemcacheEngineTest extends CakeTestCase {
*/
function testSettings() {
$settings = Cache::settings();
$expecting = array('prefix' => 'cake_',
'duration'=> 3600,
'probability' => 100,
'servers' => array('127.0.0.1'),
'compress' => false,
'engine' => 'Memcache'
);
unset($settings['serialize'], $settings['path']);
$expecting = array(
'prefix' => 'cake_',
'duration'=> 3600,
'probability' => 100,
'servers' => array('127.0.0.1'),
'compress' => false,
'engine' => 'Memcache'
);
$this->assertEqual($settings, $expecting);
}
@ -101,14 +95,12 @@ class MemcacheEngineTest extends CakeTestCase {
*/
function testMultipleServers() {
$servers = array('127.0.0.1:11211', '127.0.0.1:11222');
$Cache =& Cache::getInstance();
$MemCache =& $Cache->_Engine['Memcache'];
$available = true;
$Memcache =& new Memcache();
foreach($servers as $server) {
list($host, $port) = explode(':', $server);
if (!@$MemCache->__Memcache->connect($host, $port)) {
if (!$Memcache->addServer($host, $port)) {
$available = false;
}
}
@ -116,13 +108,13 @@ class MemcacheEngineTest extends CakeTestCase {
if ($this->skipIf(!$available, '%s Need memcache servers at ' . implode(', ', $servers) . ' to run this test')) {
return;
}
$Memcache =& new MemcacheEngine();
$Memcache->init(array('engine' => 'Memcache', 'servers' => $servers));
unset($MemCache->__Memcache);
$MemCache->init(array('engine' => 'Memcache', 'servers' => $servers));
$servers = array_keys($MemCache->__Memcache->getExtendedStats());
$settings = Cache::settings();
$servers = array_keys($Memcache->__Memcache->getExtendedStats());
$settings = $Memcache->settings();
$this->assertEqual($servers, $settings['servers']);
Cache::drop('dual_server');
}
/**
@ -132,8 +124,9 @@ class MemcacheEngineTest extends CakeTestCase {
* @return void
*/
function testConnect() {
$Cache =& Cache::getInstance();
$result = $Cache->_Engine['Memcache']->connect('127.0.0.1');
$Memcache =& new MemcacheEngine();
$Memcache->init(Cache::settings('memcache'));
$result = $Memcache->connect('127.0.0.1');
$this->assertTrue($result);
}
@ -191,13 +184,13 @@ class MemcacheEngineTest extends CakeTestCase {
$result = Cache::read('other_test');
$this->assertFalse($result);
Cache::engine('Memcache', array('duration' => '+1 second'));
Cache::config('memcache', array('duration' => '+1 second'));
sleep(2);
$result = Cache::read('other_test');
$this->assertFalse($result);
Cache::engine('Memcache', array('duration' => '+31 day'));
Cache::config('memcache', array('duration' => '+31 day'));
$data = 'this is a test of the emergency broadcasting system';
$result = Cache::write('long_expiry_test', $data);
$this->assertTrue($result);
@ -210,7 +203,7 @@ class MemcacheEngineTest extends CakeTestCase {
$result = Cache::read('long_expiry_test');
$this->assertTrue($result);
Cache::engine('Memcache', array('duration' => 3600));
Cache::config('memcache', array('duration' => 3600));
}
/**

Some files were not shown because too many files have changed in this diff Show more