Changeset c642b7a in iPeer


Ignore:
Timestamp:
2012-02-20T15:42:08-08:00 (5 years ago)
Author:
John Hsu <john.hsu@…>
Branches:
3.1.x, dev, hotfix, master, pagodabox, ticket463
Children:
00c3818
Parents:
0da9118
git-author:
Compass <pan.luo@…> (02/17/2012 10:45:04 AM)
git-committer:
John Hsu <john.hsu@…> (02/20/2012 03:42:08 PM)
Message:

updated CakePHP 1.3 as of 20120217

Files:
15 added
28 edited

Legend:

Unmodified
Added
Removed
  • app/config/acl.ini.php

    r0da9118 rc642b7a  
    22; SVN FILE: $Id$
    33;/**
    4 ; * Short description for file.
     4; * ACL configuration
    55; *
    66; *
    77; * PHP versions 4 and 5
    88; *
    9 ; * CakePHP :  Rapid Development Framework <http://www.cakephp.org/>
    10 ; * Copyright (c)       2006, Cake Software Foundation, Inc.
    11 ; *                                                     1785 E. Sahara Avenue, Suite 490-204
    12 ; *                                                     Las Vegas, Nevada 89104
     9; * CakePHP(tm) :  Rapid Development Framework http://cakephp.org
     10; * Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
    1311; *
    1412; *  Licensed under The MIT License
    1513; *  Redistributions of files must retain the above copyright notice.
    1614; *
    17 ; * @filesource
    18 ; * @copyright          Copyright (c) 2006, Cake Software Foundation, Inc.
    19 ; * @link                       http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
    20 ; * @package            cake
    21 ; * @subpackage cake.app.config
    22 ; * @since                      CakePHP v 0.10.0.1076
    23 ; * @version            $Revision$
    24 ; * @modifiedby $LastChangedBy: phpnut $
    25 ; * @lastmodified       $Date: 2006/06/20 18:44:07 $
    26 ; * @license            http://www.opensource.org/licenses/mit-license.php The MIT License
     15; * @copyright     Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
     16; * @link          http://cakephp.org CakePHP(tm) Project
     17; * @package       cake
     18; * @subpackage    cake.app.config
     19; * @since         CakePHP(tm) v 0.10.0.1076
     20; * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
    2721; */
    2822
  • app/config/bootstrap.php

    r0da9118 rc642b7a  
    99 *
    1010 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
    11  * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
     11 * Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
    1212 *
    1313 * Licensed under The MIT License
    1414 * Redistributions of files must retain the above copyright notice.
    1515 *
    16  * @copyright     Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
     16 * @copyright     Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
    1717 * @link          http://cakephp.org CakePHP(tm) Project
    1818 * @package       cake
  • app/config/core.php

    r0da9118 rc642b7a  
    88 *
    99 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
    10  * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
     10 * Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
    1111 *
    1212 * Licensed under The MIT License
    1313 * Redistributions of files must retain the above copyright notice.
    1414 *
    15  * @copyright     Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
     15 * @copyright     Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
    1616 * @link          http://cakephp.org CakePHP(tm) Project
    1717 * @package       cake
     
    168168
    169169/**
    170  * Session time out time (in minutes).
     170 * Session time out time (in seconds).
    171171 * Actual value depends on 'Security.level' setting.
    172172 */
     
    180180/**
    181181 * When set to false, HTTP_USER_AGENT will not be checked
    182  * in the session
     182 * in the session. You might want to set the value to false, when dealing with
     183 * older versions of IE, Chrome Frame or certain web-browsing devices and AJAX
    183184 */
    184185        Configure::write('Session.checkAgent', true);
     
    213214 * useful for invalidating browser caches.
    214215 *
    215  * Set to `true` to apply timestamps, when debug = 0, or set to 'force' to always enable
    216  * timestamping.
     216 * Set to `true` to apply timestamps when debug > 0. Set to 'force' to always enable
     217 * timestamping regardless of debug value.
    217218 */
    218219        //Configure::write('Asset.timestamp', true);
     
    297298 *              ), //[optional]
    298299 *              'compress' => false, // [optional] compress data in Memcache (slower, but uses less memory)
     300 *              'persistent' => true, // [optional] set this to false for non-persistent connections
    299301 *      ));
    300302 *
  • app/config/database.php.default

    r0da9118 rc642b7a  
    11<?php
    2 /* SVN FILE: $Id: database.php.default,v 1.3 2006/06/20 18:44:08 zoeshum Exp $ */
    32/**
    43 * This is core configuration file.
     
    87 * PHP versions 4 and 5
    98 *
    10  * CakePHP :  Rapid Development Framework <http://www.cakephp.org/>
    11  * Copyright (c)        2006, Cake Software Foundation, Inc.
    12  *                                                              1785 E. Sahara Avenue, Suite 490-204
    13  *                                                              Las Vegas, Nevada 89104
     9 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
     10 * Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
    1411 *
    1512 * Licensed under The MIT License
    1613 * Redistributions of files must retain the above copyright notice.
    1714 *
    18  * @filesource
    19  * @copyright           Copyright (c) 2006, Cake Software Foundation, Inc.
    20  * @link                                http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
    21  * @package                     cake
    22  * @subpackage          cake.app.config
    23  * @since                       CakePHP v 0.2.9
    24  * @version                     $Revision: 1.3 $
    25  * @modifiedby          $LastChangedBy: phpnut $
    26  * @lastmodified        $Date: 2006/06/20 18:44:08 $
    27  * @license                     http://www.opensource.org/licenses/mit-license.php The MIT License
     15 * @copyright     Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
     16 * @link          http://cakephp.org CakePHP(tm) Project
     17 * @package       cake
     18 * @subpackage    cake.app.config
     19 * @since         CakePHP(tm) v 0.2.9
     20 * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
    2821 */
    2922/**
    3023 * In this file you set up your database connection details.
    3124 *
    32  * @package             cake
    33  * @subpackage  cake.config
     25 * @package       cake
     26 * @subpackage    cake.config
    3427 */
    3528/**
     
    3730 * You can specify multiple configurations for production, development and testing.
    3831 *
    39  * driver =>
    40  * mysql, postgres, sqlite, adodb-drivername, pear-drivername
     32 * driver => The name of a supported driver; valid options are as follows:
     33 *              mysql           - MySQL 4 & 5,
     34 *              mysqli          - MySQL 4 & 5 Improved Interface (PHP5 only),
     35 *              sqlite          - SQLite (PHP5 only),
     36 *              postgres        - PostgreSQL 7 and higher,
     37 *              mssql           - Microsoft SQL Server 2000 and higher,
     38 *              db2                     - IBM DB2, Cloudscape, and Apache Derby (http://php.net/ibm-db2)
     39 *              oracle          - Oracle 8 and higher
     40 *              firebird        - Firebird/Interbase
     41 *              sybase          - Sybase ASE
     42 *              adodb-[drivername]      - ADOdb interface wrapper (see below),
     43 *              odbc            - ODBC DBO driver
     44 *
     45 * You can add custom database drivers (or override existing drivers) by adding the
     46 * appropriate file to app/models/datasources/dbo.  Drivers should be named 'dbo_x.php',
     47 * where 'x' is the name of the database.
     48 *
     49 * persistent => true / false
     50 * Determines whether or not the database should use a persistent connection
    4151 *
    4252 * connect =>
    43  * MySQL set the connect to either mysql_pconnect of mysql_connect
    44  * PostgreSQL set the connect to either pg_pconnect of pg_connect
    45  * SQLite set the connect to sqlite_popen  sqlite_open
    4653 * ADOdb set the connect to one of these
    4754 *      (http://phplens.com/adodb/supported.databases.html) and
    4855 *      append it '|p' for persistent connection. (mssql|p for example, or just mssql for not persistent)
     56 * For all other databases, this setting is deprecated.
    4957 *
    5058 * host =>
    51  * the host you connect to the database
    52  * MySQL 'localhost' to add a port number use 'localhost:port#'
    53  * PostgreSQL 'localhost' to add a port number use 'localhost port=5432'
     59 * the host you connect to the database.  To add a socket or port number, use 'port' => #
     60 *
     61 * prefix =>
     62 * Uses the given prefix for all the tables in this database.  This setting can be overridden
     63 * on a per-table basis with the Model::$tablePrefix property.
     64 *
     65 * schema =>
     66 * For Postgres and DB2, specifies which schema you would like to use the tables in. Postgres defaults to
     67 * 'public', DB2 defaults to empty.
     68 *
     69 * encoding =>
     70 * For MySQL, MySQLi, Postgres and DB2, specifies the character encoding to use when connecting to the
     71 * database.  Uses database default.
    5472 *
    5573 */
    56 class DATABASE_CONFIG
    57 {
    58         var $default = array('driver' => 'mysql',
    59                                                                 'connect' => 'mysql_connect',
    60                                                                 'host' => 'localhost',
    61                                                                 'login' => 'user',
    62                                                                 'password' => 'password',
    63                                                                 'database' => 'project_name',
    64                                                                 'prefix' => '');
     74class DATABASE_CONFIG {
    6575
    66         var $test = array('driver' => 'mysql',
    67                                                         'connect' => 'mysql_connect',
    68                                                         'host' => 'localhost',
    69                                                         'login' => 'user',
    70                                                         'password' => 'password',
    71                                                         'database' => 'project_name-test',
    72                                                         'prefix' => '');
     76        var $default = array(
     77                'driver' => 'mysql',
     78                'persistent' => false,
     79                'host' => 'localhost',
     80                'login' => 'user',
     81                'password' => 'password',
     82                'database' => 'database_name',
     83                'prefix' => '',
     84                //'encoding' => 'utf8',
     85        );
     86
     87        var $test = array(
     88                'driver' => 'mysql',
     89                'persistent' => false,
     90                'host' => 'localhost',
     91                'login' => 'user',
     92                'password' => 'password',
     93                'database' => 'test_database_name',
     94                'prefix' => '',
     95                //'encoding' => 'utf8',
     96        );
    7397}
    74 ?>
  • app/config/routes.php

    r0da9118 rc642b7a  
    11<?php
    2 /* SVN FILE: $Id$ */
    32/**
    43 * Routes configuration
     
    1110 *
    1211 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
    13  * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
     12 * Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
    1413 *
    1514 * Licensed under The MIT License
    1615 * Redistributions of files must retain the above copyright notice.
    1716 *
    18  * @copyright     Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
     17 * @copyright     Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
    1918 * @link          http://cakephp.org CakePHP(tm) Project
    2019 * @package       cake
     
    2322 * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
    2423 */
    25 
    2624/**
    2725 * Configure routing so that if iPeer has not been installed, the user
  • app/config/schema/db_acl.php

    r0da9118 rc642b7a  
    99 *
    1010 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
    11  * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
     11 * Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
    1212 *
    1313 * Licensed under The MIT License
    1414 * Redistributions of files must retain the above copyright notice.
    1515 *
    16  * @copyright     Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
     16 * @copyright     Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
    1717 * @link          http://cakephp.org CakePHP(tm) Project
    1818 * @package       cake
  • app/config/schema/i18n.php

    r0da9118 rc642b7a  
    99 *
    1010 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
    11  * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
     11 * Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
    1212 *
    1313 * Licensed under The MIT License
    1414 * Redistributions of files must retain the above copyright notice.
    1515 *
    16  * @copyright     Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
     16 * @copyright     Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
    1717 * @link          http://cakephp.org CakePHP(tm) Project
    1818 * @package       cake
  • app/config/schema/sessions.php

    r0da9118 rc642b7a  
    99 *
    1010 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
    11  * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
     11 * Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
    1212 *
    1313 * Licensed under The MIT License
    1414 * Redistributions of files must retain the above copyright notice.
    1515 *
    16  * @copyright     Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
     16 * @copyright     Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
    1717 * @link          http://cakephp.org CakePHP(tm) Project
    1818 * @package       cake
  • app/index.php

    r0da9118 rc642b7a  
    11<?php
    2 /* SVN FILE: $Id$ */
    32/**
    43 * PHP versions 4 and 5
    54 *
    6  * CakePHP :  Rapid Development Framework <http://www.cakephp.org/>
    7  * Copyright (c)        2006, Cake Software Foundation, Inc.
    8  *                                                              1785 E. Sahara Avenue, Suite 490-204
    9  *                                                              Las Vegas, Nevada 89104
     5 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
     6 * Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
    107 *
    118 * Licensed under The MIT License
    129 * Redistributions of files must retain the above copyright notice.
    1310 *
    14  * @filesource
    15  * @copyright           Copyright (c) 2006, Cake Software Foundation, Inc.
    16  * @link                                http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
    17  * @package                     cake
    18  * @subpackage          cake.app
    19  * @since                       CakePHP v 0.10.0.1076
    20  * @version                     $Revision$
    21  * @modifiedby          $LastChangedBy: phpnut $
    22  * @lastmodified        $Date: 2006/06/20 18:44:07 $
    23  * @license                     http://www.opensource.org/licenses/mit-license.php The MIT License
     11 * @copyright     Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
     12 * @link          http://cakephp.org CakePHP(tm) Project
     13 * @package       cake
     14 * @subpackage    cake.app
     15 * @since         CakePHP(tm) v 0.10.0.1076
     16 * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
    2417 */
    2518require 'webroot' . DIRECTORY_SEPARATOR . 'index.php';
    26 ?>
  • app/webroot/css.php

    r0da9118 rc642b7a  
    11<?php
    2 /* SVN FILE: $Id$ */
    32/**
    4  * Short description for file.
    5  *
    6  * Long description for file
     3 * CSS helping functions
    74 *
    85 * PHP versions 4 and 5
    96 *
    10  * CakePHP :  Rapid Development Framework <http://www.cakephp.org/>
    11  * Copyright (c)        2006, Cake Software Foundation, Inc.
    12  *                                                              1785 E. Sahara Avenue, Suite 490-204
    13  *                                                              Las Vegas, Nevada 89104
     7 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
     8 * Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
    149 *
    1510 * Licensed under The MIT License
    1611 * Redistributions of files must retain the above copyright notice.
    1712 *
    18  * @filesource
    19  * @copyright           Copyright (c) 2006, Cake Software Foundation, Inc.
    20  * @link                                http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
    21  * @package                     cake
    22  * @subpackage          cake.app.webroot
    23  * @since                       CakePHP v 0.2.9
    24  * @version                     $Revision$
    25  * @modifiedby          $LastChangedBy: phpnut $
    26  * @lastmodified        $Date: 2006/06/20 18:45:25 $
    27  * @license                     http://www.opensource.org/licenses/mit-license.php The MIT License
     13 * @copyright     Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
     14 * @link          http://cakephp.org CakePHP(tm) Project
     15 * @package       cake
     16 * @subpackage    cake.app.webroot
     17 * @since         CakePHP(tm) v 0.2.9
     18 * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
    2819 */
     20if (!defined('CAKE_CORE_INCLUDE_PATH')) {
     21        header('HTTP/1.1 404 Not Found');
     22        exit('File Not Found');
     23}
     24
    2925/**
    30  * Enter description here...
     26 * Ensure required classes are available.
    3127 */
    32         require(CONFIGS . 'paths.php');
    33         require(CAKE . 'basics.php');
    34         require(LIBS . 'folder.php');
    35         require(LIBS . 'file.php');
    36         require(LIBS . 'legacy.php');
     28if (!class_exists('File')) {
     29        uses('file');
     30}
     31
    3732/**
    38  * Enter description here...
     33 * Make clean CSS
    3934 *
    4035 * @param unknown_type $path
     
    4338 */
    4439        function make_clean_css($path, $name) {
    45                  require(VENDORS . 'csspp' . DS . 'csspp.php');
    46                  $data  =file_get_contents($path);
    47                  $csspp =new csspp();
    48                  $output=$csspp->compress($data);
    49                  $ratio =100 - (round(strlen($output) / strlen($data), 3) * 100);
    50                  $output=" /* file: $name, ratio: $ratio% */ " . $output;
    51                  return $output;
     40                App::import('Vendor', 'csspp' . DS . 'csspp');
     41                $data = file_get_contents($path);
     42                $csspp = new csspp();
     43                $output = $csspp->compress($data);
     44                $ratio = 100 - (round(strlen($output) / strlen($data), 3) * 100);
     45                $output = " /* file: $name, ratio: $ratio% */ " . $output;
     46                return $output;
    5247        }
    5348/**
    54  * Enter description here...
     49 * Write CSS cache
    5550 *
    5651 * @param unknown_type $path
     
    5954 */
    6055        function write_css_cache($path, $content) {
    61                  if (!is_dir(dirname($path))) {
    62                           mkdir(dirname($path));
    63                  }
    64                  $cache=new File($path);
    65                  return $cache->write($content);
     56                if (!is_dir(dirname($path))) {
     57                        mkdir(dirname($path));
     58                }
     59                $cache = new File($path);
     60                return $cache->write($content);
    6661        }
    6762
    6863        if (preg_match('|\.\.|', $url) || !preg_match('|^ccss/(.+)$|i', $url, $regs)) {
    69                  die('Wrong file name.');
     64                die('Wrong file name.');
    7065        }
    7166
     
    7570
    7671        if (!file_exists($filepath)) {
    77                  die('Wrong file name.');
     72                die('Wrong file name.');
    7873        }
    7974
    8075        if (file_exists($cachepath)) {
    81                  $templateModified=filemtime($filepath);
    82                  $cacheModified   =filemtime($cachepath);
     76                $templateModified = filemtime($filepath);
     77                $cacheModified = filemtime($cachepath);
    8378
    84                  if ($templateModified > $cacheModified) {
    85                           $output=make_clean_css($filepath, $filename);
    86                           write_css_cache($cachepath, $output);
    87                  } else {
    88                           $output = file_get_contents($cachepath);
    89                  }
     79                if ($templateModified > $cacheModified) {
     80                        $output = make_clean_css($filepath, $filename);
     81                        write_css_cache($cachepath, $output);
     82                } else {
     83                        $output = file_get_contents($cachepath);
     84                }
    9085        } else {
    91                  $output=make_clean_css($filepath, $filename);
    92                  write_css_cache($cachepath, $output);
     86                $output = make_clean_css($filepath, $filename);
     87                write_css_cache($cachepath, $output);
     88                $templateModified = time();
    9389        }
    9490
    9591        header("Date: " . date("D, j M Y G:i:s ", $templateModified) . 'GMT');
    9692        header("Content-Type: text/css");
    97         header("Expires: " . gmdate("D, j M Y H:i:s", time() + DAY) . " GMT");
    98         header("Cache-Control: cache"); // HTTP/1.1
     93        header("Expires: " . gmdate("D, d M Y H:i:s", time() + DAY) . " GMT");
     94        header("Cache-Control: max-age=86400, must-revalidate"); // HTTP/1.1
    9995        header("Pragma: cache");        // HTTP/1.0
    10096        print $output;
    101 ?>
  • app/webroot/css/cake.default.css

    r0da9118 rc642b7a  
    1 /* CSS Document */
    2 @import url("cake.forms.css");
     1/**
     2 *
     3 * Generic CSS for CakePHP
     4 *
     5 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
     6 * Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
     7 *
     8 * Licensed under The MIT License
     9 * Redistributions of files must retain the above copyright notice.
     10 *
     11 * @copyright     Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
     12 * @link          http://cakephp.org CakePHP(tm) Project
     13 * @package       cake
     14 * @subpackage    cake.app.webroot.css
     15 * @since         CakePHP(tm)
     16 * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
     17 */
    318
    419* {
    5   padding:0;
    6   margin:0;
    7 }
     20        margin:0;
     21        padding:0;
     22}
     23
     24/** General Style Info **/
    825body {
    9   font: 76% Verdana, Arial, Sans-serif;
    10   color: #333;
    11 }
    12 img {
    13   border:0;
    14 }
    15 #wrapper {
    16  text-align:left;
    17 }
    18 #header {
    19   height: 101px;
    20   background: #0D5087 url(../img/cake.header_bg.png) repeat-x left top;
    21   border-bottom: 1px solid #000;
    22 }
    23 #content {
    24  min-height:400px;
    25   background-color: #fff;
    26   padding:2em 4em;
     26        background: #003d4c;
     27        color: #fff;
     28        font-family:'lucida grande',verdana,helvetica,arial,sans-serif;
     29        font-size:90%;
     30        margin: 0;
     31}
     32a {
     33        color: #003d4c;
     34        text-decoration: underline;
     35        font-weight: bold;
     36}
     37a:hover {
     38        color: #367889;
     39        text-decoration:none;
     40}
     41a img {
     42        border:none;
     43}
     44h1, h2, h3, h4 {
     45        font-weight: normal;
     46        margin-bottom:0.5em;
     47}
     48h1 {
     49        background:#fff;
     50        color: #003d4c;
     51        font-size: 100%;
     52}
     53h2 {
     54        background:#fff;
     55        color: #e32;
     56        font-family:'Gill Sans','lucida grande', helvetica, arial, sans-serif;
     57        font-size: 190%;
     58}
     59h3 {
     60        color: #993;
     61        font-family:'Gill Sans','lucida grande', helvetica, arial, sans-serif;
     62        font-size: 165%;
     63}
     64h4 {
     65        color: #993;
     66        font-weight: normal;
     67}
     68ul, li {
     69        margin: 0 12px;
     70}
     71
     72/** Layout **/
     73#container {
     74        text-align: left;
     75}
     76
     77#header{
     78        padding: 10px 20px;
     79}
     80#header h1 {
     81        line-height:20px;
     82        background: #003d4c url('../img/cake.icon.png') no-repeat left;
     83        color: #fff;
     84        padding: 0px 30px;
     85}
     86#header h1 a {
     87        color: #fff;
     88        background: #003d4c;
     89        font-weight: normal;
     90        text-decoration: none;
     91}
     92#header h1 a:hover {
     93        color: #fff;
     94        background: #003d4c;
     95        text-decoration: underline;
     96}
     97#content{
     98        background: #fff;
     99        clear: both;
     100        color: #333;
     101        padding: 10px 20px 40px 20px;
     102        overflow: auto;
    27103}
    28104#footer {
    29  text-align:center;
    30  padding:1em 0;
    31  font-size:smaller;
    32  border-top:1px solid #333;
    33  background-color: #063260;
    34  color:#fff;
    35  line-height:1.5;
    36 }
    37 #footer a {
    38  color:#fff;
    39 }
    40 
    41 h1, h2, h3, h4 {
    42 padding-bottom:0.5em;
    43 }
    44 h1 {
    45   font-family:"Trebuchet MS",Verdana,Arial,Sans-serif;
    46 }
    47 h1, a  {
    48   color:#DB8101;
    49 }
    50 h1 em, a em  {
    51     color:#008BCC;
    52     font-style: normal;
    53 }
    54 ul.colored a em
    55 h2 {
    56     font-style: italic;
    57     font-weight: bold;
    58     color:#666;
    59 }
    60 a:hover, a:hover em {
    61 color:#A22424;
    62 text-decoration:none;
    63 }
    64 #content p, #content ul, #content ol {
    65 line-height:1.5;
    66 padding-bottom:1em;
    67 }
    68 ul, ol {
    69 margin-left:3em;
    70 }
    71 
    72 /* tables */
    73 
     105        clear: both;
     106        padding: 6px 10px;
     107        text-align: right;
     108}
     109
     110/** containers **/
     111div.form,
     112div.index,
     113div.view {
     114        float:right;
     115        width:76%;
     116        border-left:1px solid #666;
     117        padding:10px 2%;
     118}
     119div.actions {
     120        float:left;
     121        width:16%;
     122        padding:10px 1.5%;
     123}
     124div.actions h3 {
     125        padding-top:0;
     126        color:#777;
     127}
     128
     129
     130/** Tables **/
    74131table {
    75   width: 100%;
    76   background-color: #fff;
    77   border: 1px solid #333;
    78   clear:both;
    79   margin: 0 0 2em 0;
    80   white-space: normal;
     132        background: #fff;
     133        border-right:0;
     134        clear: both;
     135        color: #333;
     136        margin-bottom: 10px;
     137        width: 100%;
    81138}
    82139th {
    83   background-color: #ccc;
    84   border-top: 1px solid #fff;
    85   border-right: 1px solid #666;
    86   border-bottom: 1px solid #666;
    87   text-align: center;
    88   padding:3px;
     140        border:0;
     141        border-bottom:2px solid #555;
     142        text-align: left;
     143        padding:4px;
     144}
     145th a {
     146        display: block;
     147        padding: 2px 4px;
     148        text-decoration: none;
     149}
     150th a.asc:after {
     151        content: ' ⇣';
     152}
     153th a.desc:after {
     154        content: ' ⇡';
    89155}
    90156table tr td {
    91   border-right: 1px solid #ccc;
    92   padding:4px 4px;
    93   vertical-align:top;
    94   text-align: center;
    95 }
    96 table tr.altRow td {
    97   background: #f4f4f4;
    98 }
    99 
    100 /* scaffold show */
    101 
    102 
     157        background: #fff;
     158        padding: 6px;
     159        text-align: left;
     160        vertical-align: top;
     161        border-bottom:1px solid #ddd;
     162}
     163table tr:nth-child(2n) td {
     164        background: #f5f5f5;
     165}
     166table .altrow td {
     167        background: #f5f5f5;
     168}
     169td.actions {
     170        text-align: center;
     171        white-space: nowrap;
     172}
     173table td.actions a {
     174        margin: 0px 6px;
     175        padding:2px 5px;
     176}
     177.cake-sql-log table {
     178        background: #f4f4f4;
     179}
     180.cake-sql-log td {
     181        padding: 4px 8px;
     182        text-align: left;
     183        font-family: Monaco, Consolas, "Courier New", monospaced;
     184}
     185.cake-sql-log caption {
     186        color:#fff;
     187}
     188
     189/** Paging **/
     190div.paging {
     191        background:#fff;
     192        color: #ccc;
     193        margin-top: 1em;
     194        clear:both;
     195}
     196div.paging span.disabled {
     197        color: #ddd;
     198        display: inline;
     199}
     200div.paging span.current {
     201        color: #c73e14;
     202}
     203div.paging span a {
     204}
     205
     206/** Scaffold View **/
     207dl {
     208        line-height: 2em;
     209        margin: 0em 0em;
     210        width: 60%;
     211}
     212dl .altrow {
     213        background: #f4f4f4;
     214}
     215dt {
     216        font-weight: bold;
     217        padding-left: 4px;
     218        vertical-align: top;
     219        width: 10em;
     220}
     221dd {
     222        margin-left: 10em;
     223        margin-top: -2em;
     224        vertical-align: top;
     225}
     226
     227/** Forms **/
     228form {
     229        clear: both;
     230        margin-right: 20px;
     231        padding: 0;
     232        width: 95%;
     233}
     234fieldset {
     235        border: 1px solid #ccc;
     236        margin-bottom: 1em;
     237        padding: 16px 20px;
     238}
     239fieldset legend {
     240        background:#fff;
     241        color: #e32;
     242        font-size: 160%;
     243        font-weight: bold;
     244}
     245fieldset fieldset {
     246        margin-top: 0px;
     247        margin-bottom: 20px;
     248        padding: 16px 10px;
     249}
     250fieldset fieldset legend {
     251        font-size: 120%;
     252        font-weight: normal;
     253}
     254fieldset fieldset div {
     255        clear: left;
     256        margin: 0 20px;
     257}
     258form div {
     259        clear: both;
     260        margin-bottom: 1em;
     261        padding: .5em;
     262        vertical-align: text-top;
     263}
     264form .input {
     265        color: #444;
     266}
     267form .required {
     268        font-weight: bold;
     269}
     270form .required label:after {
     271        color: #e32;
     272        content: '*';
     273        display:inline;
     274}
     275form div.submit {
     276        border: 0;
     277        clear: both;
     278        margin-top: 10px;
     279}
     280label {
     281        display: block;
     282        font-size: 110%;
     283        margin-bottom:3px;
     284}
     285input, textarea {
     286        clear: both;
     287        font-size: 140%;
     288        font-family: "frutiger linotype", "lucida grande", "verdana", sans-serif;
     289        padding: 1%;
     290        width:98%;
     291}
     292select {
     293        clear: both;
     294        font-size: 120%;
     295        vertical-align: text-bottom;
     296}
     297select[multiple=multiple] {
     298        width: 100%;
     299}
     300option {
     301        font-size: 120%;
     302        padding: 0 3px;
     303}
     304input[type=checkbox] {
     305        clear: left;
     306        float: left;
     307        margin: 0px 6px 7px 2px;
     308        width: auto;
     309}
     310div.checkbox label {
     311        display: inline;
     312}
     313input[type=radio] {
     314        float:left;
     315        width:auto;
     316        margin: 0 3px 7px 0;
     317}
     318div.radio label {
     319        margin: 0 0 6px 20px;
     320}
     321input[type=submit] {
     322        display: inline;
     323        font-size: 110%;
     324        width: auto;
     325}
     326form .submit input[type=submit] {
     327        background:#62af56;
     328        background: -webkit-gradient(linear, left top, left bottom, from(#a8ea9c), to(#62af56));
     329        background-image: -moz-linear-gradient(top, #a8ea9c, #62af56);
     330        border-color: #2d6324;
     331        color: #000;
     332        text-shadow: #8cee7c 0px 1px 0px;
     333}
     334form .submit input[type=submit]:hover {
     335        background:#4ca83d;
     336        background: -webkit-gradient(linear, left top, left bottom, from(#85e573), to(#4ca83d));
     337        background-image: -moz-linear-gradient(top, #85e573, #4ca83d);
     338}
     339
     340/** Notices and Errors **/
     341div.message {
     342        clear: both;
     343        color: #fff;
     344        font-size: 140%;
     345        font-weight: bold;
     346        margin: 0 0 1em 0;
     347        background: #c73e14;
     348        padding: 5px;
     349}
     350div.error-message {
     351        clear: both;
     352        color: #fff;
     353        font-weight: bold;
     354        background: #c73e14;
     355}
     356p.error {
     357        background-color: #e32;
     358        color: #fff;
     359        font-family: Courier, monospace;
     360        font-size: 120%;
     361        line-height: 140%;
     362        padding: 0.8em;
     363        margin: 1em 0;
     364}
     365p.error em {
     366        color: #000;
     367        font-weight: normal;
     368        line-height: 140%;
     369}
     370.notice {
     371        background: #ffcc00;
     372        color: #000;
     373        display: block;
     374        font-family: Courier, monospace;
     375        font-size: 120%;
     376        line-height: 140%;
     377        padding: 0.8em;
     378        margin: 1em 0;
     379}
     380.success {
     381        background: green;
     382        color: #fff;
     383}
     384
     385/**  Actions  **/
     386div.actions ul {
     387        margin: 0;
     388        padding: 0;
     389}
     390div.actions li {
     391        margin:0 0 0.5em 0;
     392        list-style-type: none;
     393        white-space: nowrap;
     394        padding: 0;
     395}
     396div.actions ul li a {
     397        font-weight: normal;
     398        display: block;
     399        clear: both;
     400}
     401div.actions ul li a:hover {
     402        text-decoration: underline;
     403}
     404
     405input[type=submit],
     406div.actions ul li a,
     407td.actions a {
     408        font-weight:normal;
     409        padding: 4px 8px;
     410        background:#e6e49f;
     411        background: -webkit-gradient(linear, left top, left bottom, from(#f1f1d4), to(#e6e49f));
     412        background-image: -moz-linear-gradient(top, #f1f1d4, #e6e49f);
     413        color:#333;
     414        border:1px solid #aaac62;
     415        -webkit-border-radius:8px;
     416        -moz-border-radius:8px;
     417        border-radius:8px;
     418        text-decoration:none;
     419        text-shadow: #fff 0px 1px 0px;
     420        min-width: 0;
     421}
     422input[type=submit]:hover,
     423div.actions ul li a:hover,
     424td.actions a:hover {
     425        background: #f0f09a;
     426        background: -webkit-gradient(linear, left top, left bottom, from(#f7f7e1), to(#eeeca9));
     427}
     428
     429/** Related **/
    103430div.related {
    104   clear:both;
    105   display:block;
    106 }
    107 #loading {
    108   border: thick;
    109 }
    110 dl {
    111   line-height:2em;
    112   margin:1em;
    113 }
    114 dt {
    115   font-weight: bold;
    116   vertical-align:top;
    117 }
    118 dd {
    119   margin-left:10em;
    120   margin-top:-2em;
    121   vertical-align:top;
    122 }
    123 
    124 /* scaffold buttons */
    125 
    126 
    127 .notice {
    128   color: #DB8101;
    129   background-color: #ddd;
    130   display: block;
    131   padding: 1em;
    132 }
    133 .tip {
    134   color: #DB8101;
    135   background-color: #ddd;
    136   display: block;
    137   padding: 1em;
    138 }
    139 
    140 ul.actions {
    141   list-style: none;
    142   text-align:left;
    143   margin:2em 0;
    144   padding: 0;
    145 }
    146 ul.actions li {
    147   margin-left:1em;
    148   list-style: none;
    149   display: inline;
    150 }
    151 ul.actions li a,  ul.actions li input {
    152   padding: 2px 12px;
    153   color: #DB8101;
    154   background-color:#ccc;
    155   text-decoration: none;
    156   border: 1px solid #666;
    157   line-height: 24px;
    158   font-weight: bold;
    159   text-align:center;
    160   text-decoration: none;
    161 }
    162 ul.actions li a:hover {
    163   color: #DB8101;
    164   background-color:#fff;
    165   text-decoration: none;
    166 }
    167 td.listactions {
    168   width: 14em;
    169   text-align: center;
    170   white-space: nowrap;
    171 }
    172 td.listactions a {
    173   padding: 0px 8px;
    174   text-align:center;
    175   font-weight: bold;
    176   color: #DB8101;
    177   background-color:#ccc;
    178   text-decoration: none;
    179   border: 1px solid #666;
    180   white-space: nowrap;
    181 }
    182 td.listactions a:hover {
    183   color: #fff;
    184   background-color:#DB8101;
    185 }
    186 
    187 /* index links */
    188 
    189 ul.colored a {
    190 
    191 }
    192 ul.colored a em {
    193 
    194 }
    195 
    196 a {
    197 font-weight: bold;
    198 }
     431        clear: both;
     432        display: block;
     433}
     434
     435/** Debugging **/
     436pre {
     437        color: #000;
     438        background: #f0f0f0;
     439        padding: 1em;
     440}
     441pre.cake-debug {
     442        background: #ffcc00;
     443        font-size: 120%;
     444        line-height: 140%;
     445        margin-top: 1em;
     446        overflow: auto;
     447        position: relative;
     448}
     449div.cake-stack-trace {
     450        background: #fff;
     451        color: #333;
     452        margin: 0px;
     453        padding: 6px;
     454        font-size: 120%;
     455        line-height: 140%;
     456        overflow: auto;
     457        position: relative;
     458}
     459div.cake-code-dump pre {
     460        position: relative;
     461        overflow: auto;
     462}
     463div.cake-stack-trace pre, div.cake-code-dump pre {
     464        color: #000;
     465        background-color: #F0F0F0;
     466        margin: 0px;
     467        padding: 1em;
     468        overflow: auto;
     469}
     470div.cake-code-dump pre, div.cake-code-dump pre code {
     471        clear: both;
     472        font-size: 12px;
     473        line-height: 15px;
     474        margin: 4px 2px;
     475        padding: 4px;
     476        overflow: auto;
     477}
     478div.cake-code-dump span.code-highlight {
     479        background-color: #ff0;
     480        padding: 4px;
     481}
     482div.code-coverage-results div.code-line {
     483        padding-left:5px;
     484        display:block;
     485        margin-left:10px;
     486}
     487div.code-coverage-results div.uncovered span.content {
     488        background:#ecc;
     489}
     490div.code-coverage-results div.covered span.content {
     491        background:#cec;
     492}
     493div.code-coverage-results div.ignored span.content {
     494        color:#aaa;
     495}
     496div.code-coverage-results span.line-num {
     497        color:#666;
     498        display:block;
     499        float:left;
     500        width:20px;
     501        text-align:right;
     502        margin-right:5px;
     503}
     504div.code-coverage-results span.line-num strong {
     505        color:#666;
     506}
     507div.code-coverage-results div.start {
     508        border:1px solid #aaa;
     509        border-width:1px 1px 0px 1px;
     510        margin-top:30px;
     511        padding-top:5px;
     512}
     513div.code-coverage-results div.end {
     514        border:1px solid #aaa;
     515        border-width:0px 1px 1px 1px;
     516        margin-bottom:30px;
     517        padding-bottom:5px;
     518}
     519div.code-coverage-results div.realstart {
     520        margin-top:0px;
     521}
     522div.code-coverage-results p.note {
     523        color:#bbb;
     524        padding:5px;
     525        margin:5px 0 10px;
     526        font-size:10px;
     527}
     528div.code-coverage-results span.result-bad {
     529        color: #a00;
     530}
     531div.code-coverage-results span.result-ok {
     532        color: #fa0;
     533}
     534div.code-coverage-results span.result-good {
     535        color: #0a0;
     536}
     537
     538/** Elements **/
     539#url-rewriting-warning {
     540        display: none;
     541}
  • app/webroot/index.php

    r0da9118 rc642b7a  
    88 *
    99 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
    10  * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
     10 * Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
    1111 *
    1212 * Licensed under The MIT License
    1313 * Redistributions of files must retain the above copyright notice.
    1414 *
    15  * @copyright     Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
     15 * @copyright     Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
    1616 * @link          http://cakephp.org CakePHP(tm) Project
    1717 * @package       cake
     
    7474                }
    7575        }
     76        if (php_sapi_name() == 'cli-server') {
     77                $_SERVER['PHP_SELF'] = '/'.basename(__FILE__);
     78        }
    7679        if (!include(CORE_PATH . 'cake' . DS . 'bootstrap.php')) {
    7780                trigger_error("CakePHP core could not be found.  Check the value of CAKE_CORE_INCLUDE_PATH in APP/webroot/index.php.  It should point to the directory containing your " . DS . "cake core directory and your " . DS . "vendors root directory.", E_USER_ERROR);
  • app/webroot/test.php

    r0da9118 rc642b7a  
    66 *
    77 * CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing>
    8  * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
     8 * Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
    99 *
    1010 *  Licensed under The Open Group Test Suite License
    1111 *  Redistributions of files must retain the above copyright notice.
    1212 *
    13  * @copyright     Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
     13 * @copyright     Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
    1414 * @link          http://book.cakephp.org/view/1196/Testing
    1515 * @package       cake
  • cake/libs/controller/components/cookie.php

    r0da9118 rc642b7a  
    465465 *
    466466 * @param string $string String in the form key1|value1,key2|value2
    467  * @return array Map of key and values
     467 * @return mixed If array, map of key and values. If string, value.
    468468 * @access private
    469469 */
    470470        function __explode($string) {
    471                 if (($string[0] === '{' || $string[0] === '[') && function_exists('json_decode')) {
     471                $first = substr($string, 0, 1);
     472                if ($first !== false && ($first === '{' || $first === '[') && function_exists('json_decode')) {
    472473                        $ret = json_decode($string, true);
    473474                        return ($ret != null) ? $ret : $string;
  • cake/libs/controller/components/email.php

    r0da9118 rc642b7a  
    439439                $this->textMessage = null;
    440440                $this->messageId = true;
     441                $this->delivery = 'mail';
    441442                $this->__header = array();
    442443                $this->__boundary = null;
     
    800801        function _strip($value, $message = false) {
    801802                $search  = '%0a|%0d|Content-(?:Type|Transfer-Encoding)\:';
    802                 $search .= '|charset\=|mime-version\:|multipart/mixed|(?:[^a-z]to|b?cc)\:.*';
     803                $search .= '|charset\=|mime-version\:|multipart/mixed|(?:[\n\r]+to|b?cc)\:.*';
    803804
    804805                if ($message !== true) {
  • cake/libs/controller/components/request_handler.php

    r0da9118 rc642b7a  
    116116                'iPod',
    117117                'iPhone',
     118                'iPad',
    118119                'J2ME',
    119120                'MIDP',
     
    132133                'webOS',
    133134                'Windows CE',
     135                'Windows Phone OS',
    134136                'Xiino'
    135137        );
  • cake/libs/inflector.php

    r0da9118 rc642b7a  
    149149                ),
    150150                'irregular' => array(
     151                        'foes' => 'foe',
    151152                        'waves' => 'wave',
    152153                        'curves' => 'curve'
  • cake/libs/model/behaviors/translate.php

    r0da9118 rc642b7a  
    3434 */
    3535        var $runtime = array();
     36
     37/**
     38 * Stores the joinTable object for generating joins.
     39 *
     40 * @var object
     41 */
     42        var $_joinTable;
     43
     44/**
     45 * Stores the runtime model for generating joins.
     46 *
     47 * @var Model
     48 */
     49        var $_runtimeModel;
    3650
    3751/**
     
    97111                $db =& ConnectionManager::getDataSource($model->useDbConfig);
    98112                $RuntimeModel =& $this->translateModel($model);
     113
    99114                if (!empty($RuntimeModel->tablePrefix)) {
    100115                        $tablePrefix = $RuntimeModel->tablePrefix;
     
    106121                $joinTable->table = $RuntimeModel->table;
    107122
    108                 if (is_string($query['fields']) && 'COUNT(*) AS '.$db->name('count') == $query['fields']) {
     123                $this->_joinTable = $joinTable;
     124                $this->_runtimeModel = $RuntimeModel;
     125
     126                if (is_string($query['fields']) && 'COUNT(*) AS ' . $db->name('count') == $query['fields']) {
    109127                        $query['fields'] = 'COUNT(DISTINCT('.$db->name($model->alias . '.' . $model->primaryKey) . ')) ' . $db->alias . 'count';
     128
    110129                        $query['joins'][] = array(
    111130                                'type' => 'INNER',
     
    118137                                )
    119138                        );
     139                        $conditionFields = $this->_checkConditions($model, $query);
     140                        foreach ($conditionFields as $field) {
     141                                $query = $this->_addJoin($model, $query, $field, $locale, false);
     142                        }
     143                        unset($this->_joinTable, $this->_runtimeModel);
    120144                        return $query;
    121145                }
     
    151175                        foreach ($fields as $key => $value) {
    152176                                $field = (is_numeric($key)) ? $value : $key;
    153 
    154177                                if (in_array($model->alias.'.*', $query['fields']) || $autoFields || in_array($model->alias.'.'.$field, $query['fields']) || in_array($field, $query['fields'])) {
    155178                                        $addFields[] = $field;
     
    167190                                        }
    168191                                }
    169 
    170                                 if (is_array($locale)) {
    171                                         foreach ($locale as $_locale) {
    172                                                 $query['fields'][] = 'I18n__'.$field.'__'.$_locale.'.content';
    173                                                 $query['joins'][] = array(
    174                                                         'type' => 'LEFT',
    175                                                         'alias' => 'I18n__'.$field.'__'.$_locale,
    176                                                         'table' => $joinTable,
    177                                                         'conditions' => array(
    178                                                                 $model->alias . '.' . $model->primaryKey => $db->identifier("I18n__{$field}__{$_locale}.foreign_key"),
    179                                                                 'I18n__'.$field.'__'.$_locale.'.model' => $model->name,
    180                                                                 'I18n__'.$field.'__'.$_locale.'.'.$RuntimeModel->displayField => $field,
    181                                                                 'I18n__'.$field.'__'.$_locale.'.locale' => $_locale
    182                                                         )
    183                                                 );
    184                                         }
    185                                 } else {
    186                                         $query['fields'][] = 'I18n__'.$field.'.content';
    187                                         $query['joins'][] = array(
    188                                                 'type' => 'INNER',
    189                                                 'alias' => 'I18n__'.$field,
    190                                                 'table' => $joinTable,
    191                                                 'conditions' => array(
    192                                                         $model->alias . '.' . $model->primaryKey => $db->identifier("I18n__{$field}.foreign_key"),
    193                                                         'I18n__'.$field.'.model' => $model->name,
    194                                                         'I18n__'.$field.'.'.$RuntimeModel->displayField => $field,
    195                                                         'I18n__'.$field.'.locale' => $locale
    196                                                 )
    197                                         );
    198                                 }
     192                                $query = $this->_addJoin($model, $query, $field, $locale, true);
    199193                        }
    200194                }
    201195                $this->runtime[$model->alias]['beforeFind'] = $addFields;
     196                unset($this->_joinTable, $this->_runtimeModel);
     197                return $query;
     198        }
     199
     200/**
     201 * Check a query's conditions for translated fields.
     202 * Return an array of translated fields found in the conditions.
     203 *
     204 * @param Model $model The model being read.
     205 * @param array $query The query array.
     206 * @return array The list of translated fields that are in the conditions.
     207 */
     208        function _checkConditions(&$model, $query) {
     209                $conditionFields = array();
     210                if (empty($query['conditions']) || (!empty($query['conditions']) && !is_array($query['conditions'])) ) {
     211                        return $conditionFields;
     212                }
     213                foreach ($query['conditions'] as $col => $val) {
     214                        foreach ($this->settings[$model->alias] as $field => $assoc) {
     215                                if (is_numeric($field)) {
     216                                        $field = $assoc;
     217                                }
     218                                if (strpos($col, $field) !== false) {
     219                                        $conditionFields[] = $field;
     220                                }
     221                        }
     222                }
     223                return $conditionFields;
     224        }
     225
     226/**
     227 * Appends a join for translated fields and possibly a field.
     228 *
     229 * @param Model $model The model being worked on.
     230 * @param object $joinTable The jointable object.
     231 * @param array $query The query array to append a join to.
     232 * @param string $field The field name being joined.
     233 * @param mixed $locale The locale(s) having joins added.
     234 * @param boolean $addField Whether or not to add a field.
     235 * @return array The modfied query
     236 */
     237        function _addJoin(&$model, $query, $field, $locale, $addField = false) {
     238                $db =& ConnectionManager::getDataSource($model->useDbConfig);
     239
     240                $RuntimeModel = $this->_runtimeModel;
     241                $joinTable = $this->_joinTable;
     242
     243                if (is_array($locale)) {
     244                        foreach ($locale as $_locale) {
     245                                if ($addField) {
     246                                        $query['fields'][] = 'I18n__'.$field.'__'.$_locale.'.content';
     247                                }
     248                                $query['joins'][] = array(
     249                                        'type' => 'LEFT',
     250                                        'alias' => 'I18n__'.$field.'__'.$_locale,
     251                                        'table' => $joinTable,
     252                                        'conditions' => array(
     253                                                $model->alias . '.' . $model->primaryKey => $db->identifier("I18n__{$field}__{$_locale}.foreign_key"),
     254                                                'I18n__'.$field.'__'.$_locale.'.model' => $model->name,
     255                                                'I18n__'.$field.'__'.$_locale.'.'.$RuntimeModel->displayField => $field,
     256                                                'I18n__'.$field.'__'.$_locale.'.locale' => $_locale
     257                                        )
     258                                );
     259                        }
     260                } else {
     261                        if ($addField) {
     262                                $query['fields'][] = 'I18n__'.$field.'.content';
     263                        }
     264                        $query['joins'][] = array(
     265                                'type' => 'INNER',
     266                                'alias' => 'I18n__'.$field,
     267                                'table' => $joinTable,
     268                                'conditions' => array(
     269                                        $model->alias . '.' . $model->primaryKey => $db->identifier("I18n__{$field}.foreign_key"),
     270                                        'I18n__'.$field.'.model' => $model->name,
     271                                        'I18n__'.$field.'.'.$RuntimeModel->displayField => $field,
     272                                        'I18n__'.$field.'.locale' => $locale
     273                                )
     274                        );
     275                }
    202276                return $query;
    203277        }
  • cake/libs/model/datasources/dbo/dbo_mssql.php

    r0da9118 rc642b7a  
    326326                $count = count($fields);
    327327
    328                 if ($count >= 1 && strpos($fields[0], 'COUNT(*)') === false) {
     328                if (
     329                        $count >= 1 &&
     330                        strpos($fields[0], 'COUNT(*)') === false &&
     331                        strpos($fields[0], 'COUNT(DISTINCT') === false
     332                ) {
    329333                        $result = array();
    330334                        for ($i = 0; $i < $count; $i++) {
  • cake/libs/model/model.php

    r0da9118 rc642b7a  
    25382538
    25392539                $Validation =& Validation::getInstance();
    2540                 $exists = $this->exists();
     2540                $exists = null;
    25412541
    25422542                $_validate = $this->validate;
     
    25812581                                }
    25822582
    2583                                 if (
    2584                                         empty($validator['on']) || ($validator['on'] == 'create' &&
    2585                                         !$exists) || ($validator['on'] == 'update' && $exists
    2586                                 )) {
    2587                                         $required = (
    2588                                                 (!isset($data[$fieldName]) && $validator['required'] === true) ||
    2589                                                 (
    2590                                                         isset($data[$fieldName]) && (empty($data[$fieldName]) &&
    2591                                                         !is_numeric($data[$fieldName])) && $validator['allowEmpty'] === false
    2592                                                 )
    2593                                         );
    2594 
    2595                                         if ($required) {
    2596                                                 $this->invalidate($fieldName, $message);
     2583                                if (!empty($validator['on'])) {
     2584                                        if ($exists === null) {
     2585                                                $exists = $this->exists();
     2586                                        }
     2587                                        if (($validator['on'] == 'create' && $exists) || ($validator['on'] == 'update' && !$exists)) {
     2588                                                continue;
     2589                                        }
     2590                                }
     2591
     2592                                $required = (
     2593                                        (!isset($data[$fieldName]) && $validator['required'] === true) ||
     2594                                        (
     2595                                                isset($data[$fieldName]) && (empty($data[$fieldName]) &&
     2596                                                !is_numeric($data[$fieldName])) && $validator['allowEmpty'] === false
     2597                                        )
     2598                                );
     2599
     2600                                if ($required) {
     2601                                        $this->invalidate($fieldName, $message);
     2602                                        if ($validator['last']) {
     2603                                                break;
     2604                                        }
     2605                                } elseif (array_key_exists($fieldName, $data)) {
     2606                                        if (empty($data[$fieldName]) && $data[$fieldName] != '0' && $validator['allowEmpty'] === true) {
     2607                                                break;
     2608                                        }
     2609                                        if (is_array($validator['rule'])) {
     2610                                                $rule = $validator['rule'][0];
     2611                                                unset($validator['rule'][0]);
     2612                                                $ruleParams = array_merge(array($data[$fieldName]), array_values($validator['rule']));
     2613                                        } else {
     2614                                                $rule = $validator['rule'];
     2615                                                $ruleParams = array($data[$fieldName]);
     2616                                        }
     2617
     2618                                        $valid = true;
     2619
     2620                                        if (in_array(strtolower($rule), $methods)) {
     2621                                                $ruleParams[] = $validator;
     2622                                                $ruleParams[0] = array($fieldName => $ruleParams[0]);
     2623                                                $valid = $this->dispatchMethod($rule, $ruleParams);
     2624                                        } elseif (in_array($rule, $behaviorMethods) || in_array(strtolower($rule), $behaviorMethods)) {
     2625                                                $ruleParams[] = $validator;
     2626                                                $ruleParams[0] = array($fieldName => $ruleParams[0]);
     2627                                                $valid = $this->Behaviors->dispatchMethod($this, $rule, $ruleParams);
     2628                                        } elseif (method_exists($Validation, $rule)) {
     2629                                                $valid = $Validation->dispatchMethod($rule, $ruleParams);
     2630                                        } elseif (!is_array($validator['rule'])) {
     2631                                                $valid = preg_match($rule, $data[$fieldName]);
     2632                                        } elseif (Configure::read('debug') > 0) {
     2633                                                trigger_error(sprintf(__('Could not find validation handler %s for %s', true), $rule, $fieldName), E_USER_WARNING);
     2634                                        }
     2635
     2636                                        if (!$valid || (is_string($valid) && strlen($valid) > 0)) {
     2637                                                if (is_string($valid) && strlen($valid) > 0) {
     2638                                                        $validator['message'] = $valid;
     2639                                                } elseif (!isset($validator['message'])) {
     2640                                                        if (is_string($index)) {
     2641                                                                $validator['message'] = $index;
     2642                                                        } elseif (is_numeric($index) && count($ruleSet) > 1) {
     2643                                                                $validator['message'] = $index + 1;
     2644                                                        } else {
     2645                                                                $validator['message'] = $message;
     2646                                                        }
     2647                                                }
     2648                                                $this->invalidate($fieldName, $validator['message']);
     2649
    25972650                                                if ($validator['last']) {
    25982651                                                        break;
    2599                                                 }
    2600                                         } elseif (array_key_exists($fieldName, $data)) {
    2601                                                 if (empty($data[$fieldName]) && $data[$fieldName] != '0' && $validator['allowEmpty'] === true) {
    2602                                                         break;
    2603                                                 }
    2604                                                 if (is_array($validator['rule'])) {
    2605                                                         $rule = $validator['rule'][0];
    2606                                                         unset($validator['rule'][0]);
    2607                                                         $ruleParams = array_merge(array($data[$fieldName]), array_values($validator['rule']));
    2608                                                 } else {
    2609                                                         $rule = $validator['rule'];
    2610                                                         $ruleParams = array($data[$fieldName]);
    2611                                                 }
    2612 
    2613                                                 $valid = true;
    2614 
    2615                                                 if (in_array(strtolower($rule), $methods)) {
    2616                                                         $ruleParams[] = $validator;
    2617                                                         $ruleParams[0] = array($fieldName => $ruleParams[0]);
    2618                                                         $valid = $this->dispatchMethod($rule, $ruleParams);
    2619                                                 } elseif (in_array($rule, $behaviorMethods) || in_array(strtolower($rule), $behaviorMethods)) {
    2620                                                         $ruleParams[] = $validator;
    2621                                                         $ruleParams[0] = array($fieldName => $ruleParams[0]);
    2622                                                         $valid = $this->Behaviors->dispatchMethod($this, $rule, $ruleParams);
    2623                                                 } elseif (method_exists($Validation, $rule)) {
    2624                                                         $valid = $Validation->dispatchMethod($rule, $ruleParams);
    2625                                                 } elseif (!is_array($validator['rule'])) {
    2626                                                         $valid = preg_match($rule, $data[$fieldName]);
    2627                                                 } elseif (Configure::read('debug') > 0) {
    2628                                                         trigger_error(sprintf(__('Could not find validation handler %s for %s', true), $rule, $fieldName), E_USER_WARNING);
    2629                                                 }
    2630 
    2631                                                 if (!$valid || (is_string($valid) && strlen($valid) > 0)) {
    2632                                                         if (is_string($valid) && strlen($valid) > 0) {
    2633                                                                 $validator['message'] = $valid;
    2634                                                         } elseif (!isset($validator['message'])) {
    2635                                                                 if (is_string($index)) {
    2636                                                                         $validator['message'] = $index;
    2637                                                                 } elseif (is_numeric($index) && count($ruleSet) > 1) {
    2638                                                                         $validator['message'] = $index + 1;
    2639                                                                 } else {
    2640                                                                         $validator['message'] = $message;
    2641                                                                 }
    2642                                                         }
    2643                                                         $this->invalidate($fieldName, $validator['message']);
    2644 
    2645                                                         if ($validator['last']) {
    2646                                                                 break;
    2647                                                         }
    26482652                                                }
    26492653                                        }
  • cake/libs/view/helpers/number.php

    r0da9118 rc642b7a  
    6161 */
    6262        var $_currencyDefaults = array(
    63                 'before'=>'', 'after' => '', 'zero' => '0', 'places' => 2, 'thousands' => ',',
     63                'before'=>'', 'after' => false, 'zero' => '0', 'places' => 2, 'thousands' => ',',
    6464                'decimals' => '.','negative' => '()', 'escape' => true
    6565        );
  • cake/tests/cases/libs/controller/components/cookie.test.php

    r0da9118 rc642b7a  
    488488                        return;
    489489                }
    490                 $_COOKIE['CakeTestCookie'] = array('Test' => '{"name":"value"}');
     490                $_COOKIE['CakeTestCookie'] = array(
     491                        'JSON' => '{"name":"value"}',
     492                        'Empty' => '',
     493                        'String' => '{"somewhat:"broken"}'
     494                );
    491495                $this->Controller->Cookie->startup($this->Controller);
    492                 $this->assertEqual('value', $this->Controller->Cookie->read('Test.name'));
     496                $this->assertEqual(array('name' => 'value'), $this->Controller->Cookie->read('JSON'));
     497                $this->assertEqual('value', $this->Controller->Cookie->read('JSON.name'));
     498                $this->assertEqual('', $this->Controller->Cookie->read('Empty'));
     499                $this->assertEqual('{"somewhat:"broken"}', $this->Controller->Cookie->read('String'));
    493500        }
    494501
  • cake/tests/cases/libs/controller/components/email.test.php

    r0da9118 rc642b7a  
    975975                $content  = '<p>Some HTML content with an ';
    976976                $content .= '<a href="mailto:test@example.com,test2@example.com">email link</a>';
     977                $result  = $this->Controller->EmailTest->strip($content, true);
     978                $expected = $content;
     979                $this->assertEqual($result, $expected);
     980
     981                $content = 'This is a test email to: you and whomever you forward it to';
    977982                $result  = $this->Controller->EmailTest->strip($content, true);
    978983                $expected = $content;
     
    11771182                $this->assertNull($this->Controller->EmailTest->textMessage);
    11781183                $this->assertTrue($this->Controller->EmailTest->messageId);
     1184                $this->assertEqual('mail', $this->Controller->EmailTest->delivery);
    11791185        }
    11801186
  • cake/tests/cases/libs/inflector.test.php

    r0da9118 rc642b7a  
    120120                $this->assertEqual(Inflector::singularize('cafes'), 'cafe');
    121121                $this->assertEqual(Inflector::singularize('roofs'), 'roof');
     122                $this->assertEqual(Inflector::singularize('foes'), 'foe');
    122123
    123124                $this->assertEqual(Inflector::singularize(''), '');
     
    171172                $this->assertEqual(Inflector::pluralize('cafe'), 'cafes');
    172173                $this->assertEqual(Inflector::pluralize('roof'), 'roofs');
     174                $this->assertEqual(Inflector::pluralize('foe'), 'foes');
    173175                $this->assertEqual(Inflector::pluralize(''), '');
    174176        }
  • cake/tests/cases/libs/model/behaviors/translate.test.php

    r0da9118 rc642b7a  
    6161        function endTest() {
    6262                ClassRegistry::flush();
     63        }
     64
     65/**
     66 * Test that count queries with conditions get the correct joins
     67 *
     68 * @return void
     69 */
     70        function testCountWithConditions() {
     71                $this->loadFixtures('Translate', 'TranslatedItem');
     72
     73                $Model =& new TranslatedItem();
     74                $Model->locale = 'eng';
     75                $result = $Model->find('count', array(
     76                        'conditions' => array(
     77                                'I18n__content.locale' => 'eng'
     78                        )
     79                ));
     80                $this->assertEqual(3, $result);
    6381        }
    6482
     
    896914                $this->assertFalse($result);
    897915        }
     916
    898917}
  • cake/tests/cases/libs/model/model_validation.test.php

    r0da9118 rc642b7a  
    658658                        ),
    659659                        'Comment' => array(
    660                                 array('word' => 'Hello'), 
    661                                 array('word' => 'World'), 
     660                                array('word' => 'Hello'),
     661                                array('word' => 'World'),
    662662                        )
    663663                );
     
    675675                $this->assertTrue($result);
    676676                $this->assertFalse(is_null($Article->id));
    677                
     677
    678678                $id = $Article->id;
    679679                $count = $Article->find('count', array('conditions' => array('Article.id' => $id)));
     
    713713        }
    714714
     715/**
     716 * Test for 'on' => [create|update] in validation rules.
     717 *
     718 * @return void
     719 */
     720        function testStateValidation() {
     721                $Article =& new Article();
     722
     723                $data = array(
     724                        'Article' => array(
     725                                'title' => '',
     726                                'body' => 'Extra Fields Body',
     727                                'published' => '1'
     728                        )
     729                );
     730
     731                $Article->validate = array(
     732                        'title' => array(
     733                                'notempty' => array(
     734                                        'rule' => 'notEmpty',
     735                                        'on' => 'create'
     736                                )
     737                        ),
     738                        'published' => array(
     739                                'notempty' => array(
     740                                        'rule' => 'notEmpty',
     741                                )
     742                        )
     743                );
     744
     745                $Article->create($data);
     746                $this->assertFalse($Article->validates());
     747
     748                $Article->save(null, array('validate' => false));
     749                $data['Article']['id'] = $Article->id;
     750                $Article->set($data);
     751                $this->assertTrue($Article->validates());
     752
     753                $Article->data['Article']['published'] = null;
     754                $this->assertFalse($Article->validates());
     755
     756                unset($data['Article']['id']);
     757                $Article->data['Article']['published'] = '1';
     758                $Article->validate = array(
     759                        'title' => array(
     760                                'notempty' => array(
     761                                        'rule' => 'notEmpty',
     762                                        'on' => 'update'
     763                                )
     764                        ),
     765                        'published' => array(
     766                                'notempty' => array(
     767                                        'rule' => 'notEmpty',
     768                                )
     769                        )
     770                );
     771
     772                $Article->create($data);
     773                $this->assertTrue($Article->validates());
     774
     775                $Article->save(null, array('validate' => false));
     776                $data['Article']['id'] = $Article->id;
     777                $Article->set($data);
     778                $this->assertFalse($Article->validates());
     779
     780        }
     781
    715782}
  • cake/tests/cases/libs/view/helpers/number.test.php

    r0da9118 rc642b7a  
    152152                $expected = '($$ 10.00)';
    153153                $this->assertEqual($expected,$result);
     154
     155                $this->Number->addFormat('Other2', array('before' => '$ '));
     156                $result = $this->Number->currency(0.22, 'Other2');
     157                $expected = '$ 0.22';
     158                $this->assertEqual($expected,$result);
    154159        }
    155160
  • index.php

    r0da9118 rc642b7a  
    1111 *
    1212 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
    13  * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
     13 * Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
    1414 *
    1515 * Licensed under The MIT License
    1616 * Redistributions of files must retain the above copyright notice.
    1717 *
    18  * @copyright     Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
     18 * @copyright     Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
    1919 * @link          http://cakephp.org CakePHP(tm) Project
    2020 * @package       cake
Note: See TracChangeset for help on using the changeset viewer.