resurtm
12 years ago
564 changed files with 68295 additions and 50055 deletions
@ -1,7 +1,7 @@
|
||||
The Yii framework is free software. It is released under the terms of |
||||
the following BSD License. |
||||
|
||||
Copyright © 2008-2012 by Yii Software LLC (http://www.yiisoft.com) |
||||
Copyright © 2008-2013 by Yii Software LLC (http://www.yiisoft.com) |
||||
All rights reserved. |
||||
|
||||
Redistribution and use in source and binary forms, with or without |
@ -0,0 +1,32 @@
|
||||
The Yii framework is free software. It is released under the terms of |
||||
the following BSD License. |
||||
|
||||
Copyright © 2008-2013 by Yii Software LLC (http://www.yiisoft.com) |
||||
All rights reserved. |
||||
|
||||
Redistribution and use in source and binary forms, with or without |
||||
modification, are permitted provided that the following conditions |
||||
are met: |
||||
|
||||
* Redistributions of source code must retain the above copyright |
||||
notice, this list of conditions and the following disclaimer. |
||||
* Redistributions in binary form must reproduce the above copyright |
||||
notice, this list of conditions and the following disclaimer in |
||||
the documentation and/or other materials provided with the |
||||
distribution. |
||||
* Neither the name of Yii Software LLC nor the names of its |
||||
contributors may be used to endorse or promote products derived |
||||
from this software without specific prior written permission. |
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
||||
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
||||
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
||||
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
||||
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
POSSIBILITY OF SUCH DAMAGE. |
@ -0,0 +1,61 @@
|
||||
Yii 2 Bootstrap Application |
||||
=========================== |
||||
|
||||
**NOTE** Yii 2 and the relevant applications and extensions are still under heavy |
||||
development. We may make significant changes without prior notices. Please do not |
||||
use them for production. Please consider using [Yii v1.1](https://github.com/yiisoft/yii) |
||||
if you have a project to be deployed for production soon. |
||||
|
||||
|
||||
Thank you for choosing Yii 2 - the new generation of high-performance PHP framework. |
||||
|
||||
The Yii 2 Bootstrap Application is a Web application template that you can easily customize |
||||
to fit for your needs. It is particularly suitable for small Websites which mainly contain |
||||
a few informational pages. |
||||
|
||||
|
||||
DIRECTORY STRUCTURE |
||||
------------------- |
||||
|
||||
commands/ contains console commands (controllers) |
||||
config/ contains application configurations |
||||
controllers/ contains Web controller classes |
||||
models/ contains model classes |
||||
runtime/ contains files generated during runtime |
||||
vendor/ contains dependent 3rd-party packages |
||||
views/ contains view files for the Web application |
||||
www/ contains the entry script and Web resources |
||||
|
||||
|
||||
|
||||
REQUIREMENTS |
||||
------------ |
||||
|
||||
The minimum requirement by Yii is that your Web server supports PHP 5.3.?. |
||||
|
||||
|
||||
INSTALLATION |
||||
------------ |
||||
|
||||
### Install via Composer |
||||
|
||||
If you do not have [Composer](http://getcomposer.org/), you may download it from |
||||
[http://getcomposer.org/](http://getcomposer.org/) or run the following command on Linux/Unix/MacOS: |
||||
|
||||
~~~ |
||||
curl -s http://getcomposer.org/installer | php |
||||
~~~ |
||||
|
||||
You can then install the Bootstrap Application using the following command: |
||||
|
||||
~~~ |
||||
php composer.phar create-project --stability=dev yiisoft/yii2-bootstrap bootstrap |
||||
~~~ |
||||
|
||||
Now you should be able to access the Bootstrap Application using the URL `http://localhost/bootstrap/www/`, |
||||
assuming `bootstrap` is directly under the document root of your Web server. |
||||
|
||||
|
||||
### Install from an Archive File |
||||
|
||||
This is not currently available. We will provide it when Yii 2 is formally released. |
@ -0,0 +1,29 @@
|
||||
<?php |
||||
/** |
||||
* @link http://www.yiiframework.com/ |
||||
* @copyright Copyright (c) 2008 Yii Software LLC |
||||
* @license http://www.yiiframework.com/license/ |
||||
*/ |
||||
|
||||
namespace app\commands; |
||||
use yii\console\Controller; |
||||
|
||||
/** |
||||
* This command echos what the first argument that you have entered. |
||||
* |
||||
* This command is provided as an example for you to learn how to create console commands. |
||||
* |
||||
* @author Qiang Xue <qiang.xue@gmail.com> |
||||
* @since 2.0 |
||||
*/ |
||||
class HelloController extends Controller |
||||
{ |
||||
/** |
||||
* This command echos what you have entered as the message. |
||||
* @param string $message the message to be echoed. |
||||
*/ |
||||
public function actionIndex($message = 'hello world') |
||||
{ |
||||
echo $message; |
||||
} |
||||
} |
@ -0,0 +1,38 @@
|
||||
{ |
||||
"name": "yiisoft/yii2-bootstrap", |
||||
"description": "Yii 2 Bootstrap Application", |
||||
"keywords": ["yii", "framework", "bootstrap"], |
||||
"homepage": "http://www.yiiframework.com/", |
||||
"type": "project", |
||||
"license": "BSD-3-Clause", |
||||
"support": { |
||||
"issues": "https://github.com/yiisoft/yii2/issues?state=open", |
||||
"forum": "http://www.yiiframework.com/forum/", |
||||
"wiki": "http://www.yiiframework.com/wiki/", |
||||
"irc": "irc://irc.freenode.net/yii", |
||||
"source": "https://github.com/yiisoft/yii2" |
||||
}, |
||||
"minimum-stability": "dev", |
||||
"require": { |
||||
"php": ">=5.3.0", |
||||
"yiisoft/yii2": "dev-master", |
||||
"yiisoft/yii2-composer": "dev-master" |
||||
}, |
||||
"scripts": { |
||||
"post-install-cmd": [ |
||||
"yii\\composer\\InstallHandler::setPermissions" |
||||
], |
||||
"post-update-cmd": [ |
||||
"yii\\composer\\InstallHandler::setPermissions" |
||||
] |
||||
}, |
||||
"extra": { |
||||
"writable": [ |
||||
"runtime", |
||||
"www/assets" |
||||
], |
||||
"executable": [ |
||||
"yii" |
||||
] |
||||
} |
||||
} |
@ -0,0 +1,26 @@
|
||||
<?php |
||||
|
||||
return array( |
||||
'id' => 'bootstrap-console', |
||||
'basePath' => dirname(__DIR__), |
||||
'preload' => array('log'), |
||||
'controllerPath' => dirname(__DIR__) . '/commands', |
||||
'controllerNamespace' => 'app\commands', |
||||
'modules' => array( |
||||
), |
||||
'components' => array( |
||||
'cache' => array( |
||||
'class' => 'yii\caching\FileCache', |
||||
), |
||||
'log' => array( |
||||
'class' => 'yii\logging\Router', |
||||
'targets' => array( |
||||
array( |
||||
'class' => 'yii\logging\FileTarget', |
||||
'levels' => array('error', 'warning'), |
||||
), |
||||
), |
||||
), |
||||
), |
||||
'params' => require(__DIR__ . '/params.php'), |
||||
); |
@ -0,0 +1,5 @@
|
||||
<?php |
||||
|
||||
return array( |
||||
'adminEmail' => 'admin@example.com', |
||||
); |
@ -1,5 +1,8 @@
|
||||
<?php |
||||
|
||||
namespace app\controllers; |
||||
|
||||
use Yii; |
||||
use yii\web\Controller; |
||||
use app\models\LoginForm; |
||||
use app\models\ContactForm; |
File diff suppressed because one or more lines are too long
@ -1,14 +0,0 @@
|
||||
<?php |
||||
|
||||
// comment out the following line to disable debug mode |
||||
defined('YII_DEBUG') or define('YII_DEBUG', true); |
||||
|
||||
$frameworkPath = __DIR__ . '/../../yii'; |
||||
|
||||
require($frameworkPath . '/Yii.php'); |
||||
// Register Composer autoloader |
||||
@include($frameworkPath . '/vendor/autoload.php'); |
||||
|
||||
$config = require(__DIR__ . '/protected/config/main.php'); |
||||
$application = new yii\web\Application($config); |
||||
$application->run(); |
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@ -0,0 +1,96 @@
|
||||
<?php |
||||
/** |
||||
* Application requirement checker script. |
||||
* |
||||
* In order to run this script use the following console command: |
||||
* php requirements.php |
||||
* |
||||
* In order to run this script from the web, you should copy it to the web root. |
||||
* If you are using Linux you can create a hard link instead, using the following command: |
||||
* ln requirements.php ../requirements.php |
||||
*/ |
||||
|
||||
// you may need to adjust this path to the correct Yii framework path |
||||
$frameworkPath = dirname(__FILE__) . '/../../yii'; |
||||
|
||||
require_once($frameworkPath . '/requirements/YiiRequirementChecker.php'); |
||||
$requirementsChecker = new YiiRequirementChecker(); |
||||
|
||||
/** |
||||
* Adjust requirements according to your application specifics. |
||||
*/ |
||||
$requirements = array( |
||||
// Database : |
||||
array( |
||||
'name' => 'PDO extension', |
||||
'mandatory' => true, |
||||
'condition' => extension_loaded('pdo'), |
||||
'by' => 'All <a href="http://www.yiiframework.com/doc/api/#system.db">DB-related classes</a>', |
||||
), |
||||
array( |
||||
'name' => 'PDO SQLite extension', |
||||
'mandatory' => false, |
||||
'condition' => extension_loaded('pdo_sqlite'), |
||||
'by' => 'All <a href="http://www.yiiframework.com/doc/api/#system.db">DB-related classes</a>', |
||||
'memo' => 'Required for SQLite database.', |
||||
), |
||||
array( |
||||
'name' => 'PDO MySQL extension', |
||||
'mandatory' => false, |
||||
'condition' => extension_loaded('pdo_mysql'), |
||||
'by' => 'All <a href="http://www.yiiframework.com/doc/api/#system.db">DB-related classes</a>', |
||||
'memo' => 'Required for MySQL database.', |
||||
), |
||||
// Cache : |
||||
array( |
||||
'name' => 'Memcache extension', |
||||
'mandatory' => false, |
||||
'condition' => extension_loaded('memcache') || extension_loaded('memcached'), |
||||
'by' => '<a href="http://www.yiiframework.com/doc/api/CMemCache">CMemCache</a>', |
||||
'memo' => extension_loaded('memcached') ? 'To use memcached set <a href="http://www.yiiframework.com/doc/api/CMemCache#useMemcached-detail">CMemCache::useMemcached</a> to <code>true</code>.' : '' |
||||
), |
||||
array( |
||||
'name' => 'APC extension', |
||||
'mandatory' => false, |
||||
'condition' => extension_loaded('apc') || extension_loaded('apc'), |
||||
'by' => '<a href="http://www.yiiframework.com/doc/api/CApcCache">CApcCache</a>', |
||||
), |
||||
// Additional PHP extensions : |
||||
array( |
||||
'name' => 'Mcrypt extension', |
||||
'mandatory' => false, |
||||
'condition' => extension_loaded('mcrypt'), |
||||
'by' => '<a href="http://www.yiiframework.com/doc/api/CSecurityManager">CSecurityManager</a>', |
||||
'memo' => 'Required by encrypt and decrypt methods.' |
||||
), |
||||
// PHP ini : |
||||
'phpSafeMode' => array( |
||||
'name' => 'PHP safe mode', |
||||
'mandatory' => false, |
||||
'condition' => $requirementsChecker->checkPhpIniOff("safe_mode"), |
||||
'by' => 'File uploading and console command execution', |
||||
'memo' => '"safe_mode" should be disabled at php.ini', |
||||
), |
||||
'phpExposePhp' => array( |
||||
'name' => 'Expose PHP', |
||||
'mandatory' => false, |
||||
'condition' => $requirementsChecker->checkPhpIniOff("expose_php"), |
||||
'by' => 'Security reasons', |
||||
'memo' => '"expose_php" should be disabled at php.ini', |
||||
), |
||||
'phpAllowUrlInclude' => array( |
||||
'name' => 'PHP allow url include', |
||||
'mandatory' => false, |
||||
'condition' => $requirementsChecker->checkPhpIniOff("allow_url_include"), |
||||
'by' => 'Security reasons', |
||||
'memo' => '"allow_url_include" should be disabled at php.ini', |
||||
), |
||||
'phpSmtp' => array( |
||||
'name' => 'PHP mail SMTP', |
||||
'mandatory' => false, |
||||
'condition' => strlen(ini_get('SMTP'))>0, |
||||
'by' => 'Email sending', |
||||
'memo' => 'PHP mail SMTP server required', |
||||
), |
||||
); |
||||
$requirementsChecker->checkYii()->check($requirements)->render(); |
@ -0,0 +1,12 @@
|
||||
<?php |
||||
|
||||
// comment out the following line to disable debug mode |
||||
defined('YII_DEBUG') or define('YII_DEBUG', true); |
||||
|
||||
require(__DIR__ . '/../vendor/yiisoft/yii2/yii/Yii.php'); |
||||
require(__DIR__ . '/../vendor/autoload.php'); |
||||
|
||||
$config = require(__DIR__ . '/../config/main.php'); |
||||
|
||||
$application = new yii\web\Application($config); |
||||
$application->run(); |
@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env php |
||||
<?php |
||||
/** |
||||
* Yii console bootstrap file. |
||||
* |
||||
* @link http://www.yiiframework.com/ |
||||
* @copyright Copyright (c) 2008 Yii Software LLC |
||||
* @license http://www.yiiframework.com/license/ |
||||
*/ |
||||
|
||||
defined('YII_DEBUG') or define('YII_DEBUG', true); |
||||
|
||||
// fcgi doesn't have STDIN defined by default |
||||
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r')); |
||||
|
||||
require(__DIR__ . '/vendor/yiisoft/yii2/yii/Yii.php'); |
||||
require(__DIR__ . '/vendor/autoload.php'); |
||||
|
||||
$config = require(__DIR__ . '/config/console.php'); |
||||
|
||||
$application = new yii\console\Application($config); |
||||
$application->run(); |
@ -1,212 +0,0 @@
|
||||
{ |
||||
"_readme": [ |
||||
"This file locks the dependencies of your project to a known state", |
||||
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file" |
||||
], |
||||
"hash": "7d46ce9c4d8d5f4ecae1611ea8f0b49c", |
||||
"packages": [ |
||||
{ |
||||
"name": "ezyang/htmlpurifier", |
||||
"version": "v4.5.0", |
||||
"source": { |
||||
"type": "git", |
||||
"url": "https://github.com/ezyang/htmlpurifier.git", |
||||
"reference": "v4.5.0" |
||||
}, |
||||
"dist": { |
||||
"type": "zip", |
||||
"url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/v4.5.0", |
||||
"reference": "v4.5.0", |
||||
"shasum": "" |
||||
}, |
||||
"require": { |
||||
"php": ">=5.2" |
||||
}, |
||||
"type": "library", |
||||
"autoload": { |
||||
"psr-0": { |
||||
"HTMLPurifier": "library/" |
||||
}, |
||||
"files": [ |
||||
"library/HTMLPurifier.composer.php" |
||||
] |
||||
}, |
||||
"notification-url": "https://packagist.org/downloads/", |
||||
"license": [ |
||||
"LGPL" |
||||
], |
||||
"authors": [ |
||||
{ |
||||
"name": "Edward Z. Yang", |
||||
"email": "admin@htmlpurifier.org", |
||||
"homepage": "http://ezyang.com" |
||||
} |
||||
], |
||||
"description": "Standards compliant HTML filter written in PHP", |
||||
"homepage": "http://htmlpurifier.org/", |
||||
"keywords": [ |
||||
"html" |
||||
], |
||||
"time": "2013-02-18 00:04:08" |
||||
}, |
||||
{ |
||||
"name": "michelf/php-markdown", |
||||
"version": "1.3", |
||||
"source": { |
||||
"type": "git", |
||||
"url": "https://github.com/michelf/php-markdown.git", |
||||
"reference": "1.3" |
||||
}, |
||||
"dist": { |
||||
"type": "zip", |
||||
"url": "https://api.github.com/repos/michelf/php-markdown/zipball/1.3", |
||||
"reference": "1.3", |
||||
"shasum": "" |
||||
}, |
||||
"require": { |
||||
"php": ">=5.3.0" |
||||
}, |
||||
"type": "library", |
||||
"extra": { |
||||
"branch-alias": { |
||||
"dev-lib": "1.3.x-dev" |
||||
} |
||||
}, |
||||
"autoload": { |
||||
"psr-0": { |
||||
"Michelf": "" |
||||
} |
||||
}, |
||||
"notification-url": "https://packagist.org/downloads/", |
||||
"license": [ |
||||
"BSD-3-Clause" |
||||
], |
||||
"authors": [ |
||||
{ |
||||
"name": "Michel Fortin", |
||||
"email": "michel.fortin@michelf.ca", |
||||
"homepage": "http://michelf.ca/", |
||||
"role": "Developer" |
||||
}, |
||||
{ |
||||
"name": "John Gruber", |
||||
"homepage": "http://daringfireball.net/" |
||||
} |
||||
], |
||||
"description": "PHP Markdown", |
||||
"homepage": "http://michelf.ca/projects/php-markdown/", |
||||
"keywords": [ |
||||
"markdown" |
||||
], |
||||
"time": "2013-04-11 18:53:11" |
||||
}, |
||||
{ |
||||
"name": "smarty/smarty", |
||||
"version": "v3.1.13", |
||||
"source": { |
||||
"type": "svn", |
||||
"url": "http://smarty-php.googlecode.com/svn", |
||||
"reference": "/tags/v3.1.13/@4699" |
||||
}, |
||||
"require": { |
||||
"php": ">=5.2" |
||||
}, |
||||
"type": "library", |
||||
"autoload": { |
||||
"classmap": [ |
||||
"distribution/libs/Smarty.class.php", |
||||
"distribution/libs/SmartyBC.class.php" |
||||
] |
||||
}, |
||||
"notification-url": "https://packagist.org/downloads/", |
||||
"license": [ |
||||
"LGPL-3.0" |
||||
], |
||||
"authors": [ |
||||
{ |
||||
"name": "Monte Ohrt", |
||||
"email": "monte@ohrt.com" |
||||
}, |
||||
{ |
||||
"name": "Uwe Tews", |
||||
"email": "uwe.tews@googlemail.com" |
||||
}, |
||||
{ |
||||
"name": "Rodney Rehm", |
||||
"email": "rodney.rehm@medialize.de" |
||||
} |
||||
], |
||||
"description": "Smarty - the compiling PHP template engine", |
||||
"homepage": "http://www.smarty.net", |
||||
"keywords": [ |
||||
"templating" |
||||
], |
||||
"time": "2013-01-26 12:03:52" |
||||
}, |
||||
{ |
||||
"name": "twig/twig", |
||||
"version": "v1.12.3", |
||||
"source": { |
||||
"type": "git", |
||||
"url": "https://github.com/fabpot/Twig.git", |
||||
"reference": "v1.12.3" |
||||
}, |
||||
"dist": { |
||||
"type": "zip", |
||||
"url": "https://api.github.com/repos/fabpot/Twig/zipball/v1.12.3", |
||||
"reference": "v1.12.3", |
||||
"shasum": "" |
||||
}, |
||||
"require": { |
||||
"php": ">=5.2.4" |
||||
}, |
||||
"type": "library", |
||||
"extra": { |
||||
"branch-alias": { |
||||
"dev-master": "1.12-dev" |
||||
} |
||||
}, |
||||
"autoload": { |
||||
"psr-0": { |
||||
"Twig_": "lib/" |
||||
} |
||||
}, |
||||
"notification-url": "https://packagist.org/downloads/", |
||||
"license": [ |
||||
"BSD-3" |
||||
], |
||||
"authors": [ |
||||
{ |
||||
"name": "Fabien Potencier", |
||||
"email": "fabien@symfony.com" |
||||
}, |
||||
{ |
||||
"name": "Armin Ronacher", |
||||
"email": "armin.ronacher@active-4.com" |
||||
} |
||||
], |
||||
"description": "Twig, the flexible, fast, and secure template language for PHP", |
||||
"homepage": "http://twig.sensiolabs.org", |
||||
"keywords": [ |
||||
"templating" |
||||
], |
||||
"time": "2013-04-08 12:40:11" |
||||
} |
||||
], |
||||
"packages-dev": [ |
||||
|
||||
], |
||||
"aliases": [ |
||||
|
||||
], |
||||
"minimum-stability": "stable", |
||||
"stability-flags": [ |
||||
|
||||
], |
||||
"platform": { |
||||
"php": ">=5.3.0" |
||||
}, |
||||
"platform-dev": [ |
||||
|
||||
] |
||||
} |
@ -0,0 +1,27 @@
|
||||
{ |
||||
"name": "yiisoft/yii2-composer", |
||||
"description": "The composer integration for the Yii framework", |
||||
"keywords": ["yii", "composer", "install", "update"], |
||||
"type": "library", |
||||
"license": "BSD-3-Clause", |
||||
"support": { |
||||
"issues": "https://github.com/yiisoft/yii2/issues?state=open", |
||||
"forum": "http://www.yiiframework.com/forum/", |
||||
"wiki": "http://www.yiiframework.com/wiki/", |
||||
"irc": "irc://irc.freenode.net/yii", |
||||
"source": "https://github.com/yiisoft/yii2" |
||||
}, |
||||
"authors": [ |
||||
{ |
||||
"name": "Qiang Xue", |
||||
"email": "qiang.xue@gmail.com" |
||||
} |
||||
], |
||||
"minimum-stability": "dev", |
||||
"require": { |
||||
"yiisoft/yii2": "dev-master" |
||||
}, |
||||
"autoload": { |
||||
"psr-0": { "yii\\composer": "" } |
||||
} |
||||
} |
@ -0,0 +1,53 @@
|
||||
<?php |
||||
/** |
||||
* @link http://www.yiiframework.com/ |
||||
* @copyright Copyright (c) 2008 Yii Software LLC |
||||
* @license http://www.yiiframework.com/license/ |
||||
*/ |
||||
|
||||
namespace yii\composer; |
||||
|
||||
use Composer\Script\CommandEvent; |
||||
|
||||
/** |
||||
* InstallHandler is called by Composer after it installs/updates the current package. |
||||
* |
||||
* @author Qiang Xue <qiang.xue@gmail.com> |
||||
* @since 2.0 |
||||
*/ |
||||
class InstallHandler |
||||
{ |
||||
/** |
||||
* Sets the correct permissions of files and directories. |
||||
* @param CommandEvent $event |
||||
*/ |
||||
public static function setPermissions($event) |
||||
{ |
||||
$options = array_merge(array( |
||||
'writable' => array(), |
||||
'executable' => array(), |
||||
), $event->getComposer()->getPackage()->getExtra()); |
||||
|
||||
foreach ((array)$options['writable'] as $path) { |
||||
echo "Setting writable: $path ..."; |
||||
if (is_dir($path)) { |
||||
chmod($path, 0777); |
||||
echo "done\n"; |
||||
} else { |
||||
echo "The directory was not found: " . getcwd() . DIRECTORY_SEPARATOR . $path; |
||||
return; |
||||
} |
||||
} |
||||
|
||||
foreach ((array)$options['executable'] as $path) { |
||||
echo "Setting executable: $path ..."; |
||||
if (is_file($path)) { |
||||
chmod($path, 0755); |
||||
echo "done\n"; |
||||
} else { |
||||
echo "\n\tThe file was not found: " . getcwd() . DIRECTORY_SEPARATOR . $path . "\n"; |
||||
return; |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,32 @@
|
||||
The Yii framework is free software. It is released under the terms of |
||||
the following BSD License. |
||||
|
||||
Copyright © 2008-2013 by Yii Software LLC (http://www.yiisoft.com) |
||||
All rights reserved. |
||||
|
||||
Redistribution and use in source and binary forms, with or without |
||||
modification, are permitted provided that the following conditions |
||||
are met: |
||||
|
||||
* Redistributions of source code must retain the above copyright |
||||
notice, this list of conditions and the following disclaimer. |
||||
* Redistributions in binary form must reproduce the above copyright |
||||
notice, this list of conditions and the following disclaimer in |
||||
the documentation and/or other materials provided with the |
||||
distribution. |
||||
* Neither the name of Yii Software LLC nor the names of its |
||||
contributors may be used to endorse or promote products derived |
||||
from this software without specific prior written permission. |
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
||||
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
||||
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
||||
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
||||
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
POSSIBILITY OF SUCH DAMAGE. |
@ -0,0 +1,21 @@
|
||||
Yii 2.0 Public Preview |
||||
====================== |
||||
|
||||
Thank you for choosing Yii - a high-performance component-based PHP framework. |
||||
|
||||
If you are looking for a production-ready PHP framework, please use |
||||
[Yii v1.1](https://github.com/yiisoft/yii). |
||||
|
||||
Yii 2.0 is still under heavy development. We may make significant changes |
||||
without prior notices. **Yii 2.0 is not ready for production use yet.** |
||||
|
||||
[![Build Status](https://secure.travis-ci.org/yiisoft/yii2.png)](http://travis-ci.org/yiisoft/yii2) |
||||
|
||||
|
||||
|
||||
REQUIREMENTS |
||||
------------ |
||||
|
||||
The minimum requirement by Yii is that your Web server supports PHP 5.3.?. |
||||
|
||||
|
@ -0,0 +1,9 @@
|
||||
Upgrading Instructions for Yii Framework v2 |
||||
=========================================== |
||||
|
||||
!!!IMPORTANT!!! |
||||
|
||||
The following upgrading instructions are cumulative. That is, |
||||
if you want to upgrade from version A to version C and there is |
||||
version B between A and C, you need to following the instructions |
||||
for both A and B. |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,278 @@
|
||||
GNU GENERAL PUBLIC LICENSE |
||||
Version 2, June 1991 |
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc. |
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
Everyone is permitted to copy and distribute verbatim copies |
||||
of this license document, but changing it is not allowed. |
||||
|
||||
Preamble |
||||
|
||||
The licenses for most software are designed to take away your |
||||
freedom to share and change it. By contrast, the GNU General Public |
||||
License is intended to guarantee your freedom to share and change free |
||||
software--to make sure the software is free for all its users. This |
||||
General Public License applies to most of the Free Software |
||||
Foundation's software and to any other program whose authors commit to |
||||
using it. (Some other Free Software Foundation software is covered by |
||||
the GNU Lesser General Public License instead.) You can apply it to |
||||
your programs, too. |
||||
|
||||
When we speak of free software, we are referring to freedom, not |
||||
price. Our General Public Licenses are designed to make sure that you |
||||
have the freedom to distribute copies of free software (and charge for |
||||
this service if you wish), that you receive source code or can get it |
||||
if you want it, that you can change the software or use pieces of it |
||||
in new free programs; and that you know you can do these things. |
||||
|
||||
To protect your rights, we need to make restrictions that forbid |
||||
anyone to deny you these rights or to ask you to surrender the rights. |
||||
These restrictions translate to certain responsibilities for you if you |
||||
distribute copies of the software, or if you modify it. |
||||
|
||||
For example, if you distribute copies of such a program, whether |
||||
gratis or for a fee, you must give the recipients all the rights that |
||||
you have. You must make sure that they, too, receive or can get the |
||||
source code. And you must show them these terms so they know their |
||||
rights. |
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and |
||||
(2) offer you this license which gives you legal permission to copy, |
||||
distribute and/or modify the software. |
||||
|
||||
Also, for each author's protection and ours, we want to make certain |
||||
that everyone understands that there is no warranty for this free |
||||
software. If the software is modified by someone else and passed on, we |
||||
want its recipients to know that what they have is not the original, so |
||||
that any problems introduced by others will not reflect on the original |
||||
authors' reputations. |
||||
|
||||
Finally, any free program is threatened constantly by software |
||||
patents. We wish to avoid the danger that redistributors of a free |
||||
program will individually obtain patent licenses, in effect making the |
||||
program proprietary. To prevent this, we have made it clear that any |
||||
patent must be licensed for everyone's free use or not licensed at all. |
||||
|
||||
The precise terms and conditions for copying, distribution and |
||||
modification follow. |
||||
|
||||
GNU GENERAL PUBLIC LICENSE |
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
||||
|
||||
0. This License applies to any program or other work which contains |
||||
a notice placed by the copyright holder saying it may be distributed |
||||
under the terms of this General Public License. The "Program", below, |
||||
refers to any such program or work, and a "work based on the Program" |
||||
means either the Program or any derivative work under copyright law: |
||||
that is to say, a work containing the Program or a portion of it, |
||||
either verbatim or with modifications and/or translated into another |
||||
language. (Hereinafter, translation is included without limitation in |
||||
the term "modification".) Each licensee is addressed as "you". |
||||
|
||||
Activities other than copying, distribution and modification are not |
||||
covered by this License; they are outside its scope. The act of |
||||
running the Program is not restricted, and the output from the Program |
||||
is covered only if its contents constitute a work based on the |
||||
Program (independent of having been made by running the Program). |
||||
Whether that is true depends on what the Program does. |
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's |
||||
source code as you receive it, in any medium, provided that you |
||||
conspicuously and appropriately publish on each copy an appropriate |
||||
copyright notice and disclaimer of warranty; keep intact all the |
||||
notices that refer to this License and to the absence of any warranty; |
||||
and give any other recipients of the Program a copy of this License |
||||
along with the Program. |
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and |
||||
you may at your option offer warranty protection in exchange for a fee. |
||||
|
||||
2. You may modify your copy or copies of the Program or any portion |
||||
of it, thus forming a work based on the Program, and copy and |
||||
distribute such modifications or work under the terms of Section 1 |
||||
above, provided that you also meet all of these conditions: |
||||
|
||||
a) You must cause the modified files to carry prominent notices |
||||
stating that you changed the files and the date of any change. |
||||
|
||||
b) You must cause any work that you distribute or publish, that in |
||||
whole or in part contains or is derived from the Program or any |
||||
part thereof, to be licensed as a whole at no charge to all third |
||||
parties under the terms of this License. |
||||
|
||||
c) If the modified program normally reads commands interactively |
||||
when run, you must cause it, when started running for such |
||||
interactive use in the most ordinary way, to print or display an |
||||
announcement including an appropriate copyright notice and a |
||||
notice that there is no warranty (or else, saying that you provide |
||||
a warranty) and that users may redistribute the program under |
||||
these conditions, and telling the user how to view a copy of this |
||||
License. (Exception: if the Program itself is interactive but |
||||
does not normally print such an announcement, your work based on |
||||
the Program is not required to print an announcement.) |
||||
|
||||
These requirements apply to the modified work as a whole. If |
||||
identifiable sections of that work are not derived from the Program, |
||||
and can be reasonably considered independent and separate works in |
||||
themselves, then this License, and its terms, do not apply to those |
||||
sections when you distribute them as separate works. But when you |
||||
distribute the same sections as part of a whole which is a work based |
||||
on the Program, the distribution of the whole must be on the terms of |
||||
this License, whose permissions for other licensees extend to the |
||||
entire whole, and thus to each and every part regardless of who wrote it. |
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest |
||||
your rights to work written entirely by you; rather, the intent is to |
||||
exercise the right to control the distribution of derivative or |
||||
collective works based on the Program. |
||||
|
||||
In addition, mere aggregation of another work not based on the Program |
||||
with the Program (or with a work based on the Program) on a volume of |
||||
a storage or distribution medium does not bring the other work under |
||||
the scope of this License. |
||||
|
||||
3. You may copy and distribute the Program (or a work based on it, |
||||
under Section 2) in object code or executable form under the terms of |
||||
Sections 1 and 2 above provided that you also do one of the following: |
||||
|
||||
a) Accompany it with the complete corresponding machine-readable |
||||
source code, which must be distributed under the terms of Sections |
||||
1 and 2 above on a medium customarily used for software interchange; or, |
||||
|
||||
b) Accompany it with a written offer, valid for at least three |
||||
years, to give any third party, for a charge no more than your |
||||
cost of physically performing source distribution, a complete |
||||
machine-readable copy of the corresponding source code, to be |
||||
distributed under the terms of Sections 1 and 2 above on a medium |
||||
customarily used for software interchange; or, |
||||
|
||||
c) Accompany it with the information you received as to the offer |
||||
to distribute corresponding source code. (This alternative is |
||||
allowed only for noncommercial distribution and only if you |
||||
received the program in object code or executable form with such |
||||
an offer, in accord with Subsection b above.) |
||||
|
||||
The source code for a work means the preferred form of the work for |
||||
making modifications to it. For an executable work, complete source |
||||
code means all the source code for all modules it contains, plus any |
||||
associated interface definition files, plus the scripts used to |
||||
control compilation and installation of the executable. However, as a |
||||
special exception, the source code distributed need not include |
||||
anything that is normally distributed (in either source or binary |
||||
form) with the major components (compiler, kernel, and so on) of the |
||||
operating system on which the executable runs, unless that component |
||||
itself accompanies the executable. |
||||
|
||||
If distribution of executable or object code is made by offering |
||||
access to copy from a designated place, then offering equivalent |
||||
access to copy the source code from the same place counts as |
||||
distribution of the source code, even though third parties are not |
||||
compelled to copy the source along with the object code. |
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program |
||||
except as expressly provided under this License. Any attempt |
||||
otherwise to copy, modify, sublicense or distribute the Program is |
||||
void, and will automatically terminate your rights under this License. |
||||
However, parties who have received copies, or rights, from you under |
||||
this License will not have their licenses terminated so long as such |
||||
parties remain in full compliance. |
||||
|
||||
5. You are not required to accept this License, since you have not |
||||
signed it. However, nothing else grants you permission to modify or |
||||
distribute the Program or its derivative works. These actions are |
||||
prohibited by law if you do not accept this License. Therefore, by |
||||
modifying or distributing the Program (or any work based on the |
||||
Program), you indicate your acceptance of this License to do so, and |
||||
all its terms and conditions for copying, distributing or modifying |
||||
the Program or works based on it. |
||||
|
||||
6. Each time you redistribute the Program (or any work based on the |
||||
Program), the recipient automatically receives a license from the |
||||
original licensor to copy, distribute or modify the Program subject to |
||||
these terms and conditions. You may not impose any further |
||||
restrictions on the recipients' exercise of the rights granted herein. |
||||
You are not responsible for enforcing compliance by third parties to |
||||
this License. |
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent |
||||
infringement or for any other reason (not limited to patent issues), |
||||
conditions are imposed on you (whether by court order, agreement or |
||||
otherwise) that contradict the conditions of this License, they do not |
||||
excuse you from the conditions of this License. If you cannot |
||||
distribute so as to satisfy simultaneously your obligations under this |
||||
License and any other pertinent obligations, then as a consequence you |
||||
may not distribute the Program at all. For example, if a patent |
||||
license would not permit royalty-free redistribution of the Program by |
||||
all those who receive copies directly or indirectly through you, then |
||||
the only way you could satisfy both it and this License would be to |
||||
refrain entirely from distribution of the Program. |
||||
|
||||
If any portion of this section is held invalid or unenforceable under |
||||
any particular circumstance, the balance of the section is intended to |
||||
apply and the section as a whole is intended to apply in other |
||||
circumstances. |
||||
|
||||
It is not the purpose of this section to induce you to infringe any |
||||
patents or other property right claims or to contest validity of any |
||||
such claims; this section has the sole purpose of protecting the |
||||
integrity of the free software distribution system, which is |
||||
implemented by public license practices. Many people have made |
||||
generous contributions to the wide range of software distributed |
||||
through that system in reliance on consistent application of that |
||||
system; it is up to the author/donor to decide if he or she is willing |
||||
to distribute software through any other system and a licensee cannot |
||||
impose that choice. |
||||
|
||||
This section is intended to make thoroughly clear what is believed to |
||||
be a consequence of the rest of this License. |
||||
|
||||
8. If the distribution and/or use of the Program is restricted in |
||||
certain countries either by patents or by copyrighted interfaces, the |
||||
original copyright holder who places the Program under this License |
||||
may add an explicit geographical distribution limitation excluding |
||||
those countries, so that distribution is permitted only in or among |
||||
countries not thus excluded. In such case, this License incorporates |
||||
the limitation as if written in the body of this License. |
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions |
||||
of the General Public License from time to time. Such new versions will |
||||
be similar in spirit to the present version, but may differ in detail to |
||||
address new problems or concerns. |
||||
|
||||
Each version is given a distinguishing version number. If the Program |
||||
specifies a version number of this License which applies to it and "any |
||||
later version", you have the option of following the terms and conditions |
||||
either of that version or of any later version published by the Free |
||||
Software Foundation. If the Program does not specify a version number of |
||||
this License, you may choose any version ever published by the Free Software |
||||
Foundation. |
||||
|
||||
10. If you wish to incorporate parts of the Program into other free |
||||
programs whose distribution conditions are different, write to the author |
||||
to ask for permission. For software which is copyrighted by the Free |
||||
Software Foundation, write to the Free Software Foundation; we sometimes |
||||
make exceptions for this. Our decision will be guided by the two goals |
||||
of preserving the free status of all derivatives of our free software and |
||||
of promoting the sharing and reuse of software generally. |
||||
|
||||
NO WARRANTY |
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY |
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN |
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES |
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED |
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS |
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE |
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, |
||||
REPAIR OR CORRECTION. |
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR |
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, |
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING |
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED |
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY |
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER |
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE |
||||
POSSIBILITY OF SUCH DAMAGES. |
@ -0,0 +1,20 @@
|
||||
Copyright Mathias Bynens <http://mathiasbynens.be/> |
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining |
||||
a copy of this software and associated documentation files (the |
||||
"Software"), to deal in the Software without restriction, including |
||||
without limitation the rights to use, copy, modify, merge, publish, |
||||
distribute, sublicense, and/or sell copies of the Software, and to |
||||
permit persons to whom the Software is furnished to do so, subject to |
||||
the following conditions: |
||||
|
||||
The above copyright notice and this permission notice shall be |
||||
included in all copies or substantial portions of the Software. |
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE |
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
@ -0,0 +1,502 @@
|
||||
/*! http://mths.be/punycode v1.2.1 by @mathias */ |
||||
;(function(root) { |
||||
|
||||
/** Detect free variables */ |
||||
var freeExports = typeof exports == 'object' && exports; |
||||
var freeModule = typeof module == 'object' && module && |
||||
module.exports == freeExports && module; |
||||
var freeGlobal = typeof global == 'object' && global; |
||||
if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { |
||||
root = freeGlobal; |
||||
} |
||||
|
||||
/** |
||||
* The `punycode` object. |
||||
* @name punycode |
||||
* @type Object |
||||
*/ |
||||
var punycode, |
||||
|
||||
/** Highest positive signed 32-bit float value */ |
||||
maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
|
||||
|
||||
/** Bootstring parameters */ |
||||
base = 36, |
||||
tMin = 1, |
||||
tMax = 26, |
||||
skew = 38, |
||||
damp = 700, |
||||
initialBias = 72, |
||||
initialN = 128, // 0x80
|
||||
delimiter = '-', // '\x2D'
|
||||
|
||||
/** Regular expressions */ |
||||
regexPunycode = /^xn--/, |
||||
regexNonASCII = /[^ -~]/, // unprintable ASCII chars + non-ASCII chars
|
||||
regexSeparators = /\x2E|\u3002|\uFF0E|\uFF61/g, // RFC 3490 separators
|
||||
|
||||
/** Error messages */ |
||||
errors = { |
||||
'overflow': 'Overflow: input needs wider integers to process', |
||||
'not-basic': 'Illegal input >= 0x80 (not a basic code point)', |
||||
'invalid-input': 'Invalid input' |
||||
}, |
||||
|
||||
/** Convenience shortcuts */ |
||||
baseMinusTMin = base - tMin, |
||||
floor = Math.floor, |
||||
stringFromCharCode = String.fromCharCode, |
||||
|
||||
/** Temporary variable */ |
||||
key; |
||||
|
||||
/*--------------------------------------------------------------------------*/ |
||||
|
||||
/** |
||||
* A generic error utility function. |
||||
* @private |
||||
* @param {String} type The error type. |
||||
* @returns {Error} Throws a `RangeError` with the applicable error message. |
||||
*/ |
||||
function error(type) { |
||||
throw RangeError(errors[type]); |
||||
} |
||||
|
||||
/** |
||||
* A generic `Array#map` utility function. |
||||
* @private |
||||
* @param {Array} array The array to iterate over. |
||||
* @param {Function} callback The function that gets called for every array |
||||
* item. |
||||
* @returns {Array} A new array of values returned by the callback function. |
||||
*/ |
||||
function map(array, fn) { |
||||
var length = array.length; |
||||
while (length--) { |
||||
array[length] = fn(array[length]); |
||||
} |
||||
return array; |
||||
} |
||||
|
||||
/** |
||||
* A simple `Array#map`-like wrapper to work with domain name strings. |
||||
* @private |
||||
* @param {String} domain The domain name. |
||||
* @param {Function} callback The function that gets called for every |
||||
* character. |
||||
* @returns {Array} A new string of characters returned by the callback |
||||
* function. |
||||
*/ |
||||
function mapDomain(string, fn) { |
||||
return map(string.split(regexSeparators), fn).join('.'); |
||||
} |
||||
|
||||
/** |
||||
* Creates an array containing the decimal code points of each Unicode |
||||
* character in the string. While JavaScript uses UCS-2 internally, |
||||
* this function will convert a pair of surrogate halves (each of which |
||||
* UCS-2 exposes as separate characters) into a single code point, |
||||
* matching UTF-16. |
||||
* @see `punycode.ucs2.encode` |
||||
* @see <http://mathiasbynens.be/notes/javascript-encoding>
|
||||
* @memberOf punycode.ucs2 |
||||
* @name decode |
||||
* @param {String} string The Unicode input string (UCS-2). |
||||
* @returns {Array} The new array of code points. |
||||
*/ |
||||
function ucs2decode(string) { |
||||
var output = [], |
||||
counter = 0, |
||||
length = string.length, |
||||
value, |
||||
extra; |
||||
while (counter < length) { |
||||
value = string.charCodeAt(counter++); |
||||
if ((value & 0xF800) == 0xD800 && counter < length) { |
||||
// high surrogate, and there is a next character
|
||||
extra = string.charCodeAt(counter++); |
||||
if ((extra & 0xFC00) == 0xDC00) { // low surrogate
|
||||
output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); |
||||
} else { |
||||
output.push(value, extra); |
||||
} |
||||
} else { |
||||
output.push(value); |
||||
} |
||||
} |
||||
return output; |
||||
} |
||||
|
||||
/** |
||||
* Creates a string based on an array of decimal code points. |
||||
* @see `punycode.ucs2.decode` |
||||
* @memberOf punycode.ucs2 |
||||
* @name encode |
||||
* @param {Array} codePoints The array of decimal code points. |
||||
* @returns {String} The new Unicode string (UCS-2). |
||||
*/ |
||||
function ucs2encode(array) { |
||||
return map(array, function(value) { |
||||
var output = ''; |
||||
if (value > 0xFFFF) { |
||||
value -= 0x10000; |
||||
output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); |
||||
value = 0xDC00 | value & 0x3FF; |
||||
} |
||||
output += stringFromCharCode(value); |
||||
return output; |
||||
}).join(''); |
||||
} |
||||
|
||||
/** |
||||
* Converts a basic code point into a digit/integer. |
||||
* @see `digitToBasic()` |
||||
* @private |
||||
* @param {Number} codePoint The basic (decimal) code point. |
||||
* @returns {Number} The numeric value of a basic code point (for use in |
||||
* representing integers) in the range `0` to `base - 1`, or `base` if |
||||
* the code point does not represent a value. |
||||
*/ |
||||
function basicToDigit(codePoint) { |
||||
return codePoint - 48 < 10 |
||||
? codePoint - 22 |
||||
: codePoint - 65 < 26 |
||||
? codePoint - 65 |
||||
: codePoint - 97 < 26 |
||||
? codePoint - 97 |
||||
: base; |
||||
} |
||||
|
||||
/** |
||||
* Converts a digit/integer into a basic code point. |
||||
* @see `basicToDigit()` |
||||
* @private |
||||
* @param {Number} digit The numeric value of a basic code point. |
||||
* @returns {Number} The basic code point whose value (when used for |
||||
* representing integers) is `digit`, which needs to be in the range |
||||
* `0` to `base - 1`. If `flag` is non-zero, the uppercase form is |
||||
* used; else, the lowercase form is used. The behavior is undefined |
||||
* if flag is non-zero and `digit` has no uppercase form. |
||||
*/ |
||||
function digitToBasic(digit, flag) { |
||||
// 0..25 map to ASCII a..z or A..Z
|
||||
// 26..35 map to ASCII 0..9
|
||||
return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); |
||||
} |
||||
|
||||
/** |
||||
* Bias adaptation function as per section 3.4 of RFC 3492. |
||||
* http://tools.ietf.org/html/rfc3492#section-3.4
|
||||
* @private |
||||
*/ |
||||
function adapt(delta, numPoints, firstTime) { |
||||
var k = 0; |
||||
delta = firstTime ? floor(delta / damp) : delta >> 1; |
||||
delta += floor(delta / numPoints); |
||||
for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { |
||||
delta = floor(delta / baseMinusTMin); |
||||
} |
||||
return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); |
||||
} |
||||
|
||||
/** |
||||
* Converts a Punycode string of ASCII code points to a string of Unicode |
||||
* code points. |
||||
* @memberOf punycode |
||||
* @param {String} input The Punycode string of ASCII code points. |
||||
* @returns {String} The resulting string of Unicode code points. |
||||
*/ |
||||
function decode(input) { |
||||
// Don't use UCS-2
|
||||
var output = [], |
||||
inputLength = input.length, |
||||
out, |
||||
i = 0, |
||||
n = initialN, |
||||
bias = initialBias, |
||||
basic, |
||||
j, |
||||
index, |
||||
oldi, |
||||
w, |
||||
k, |
||||
digit, |
||||
t, |
||||
length, |
||||
/** Cached calculation results */ |
||||
baseMinusT; |
||||
|
||||
// Handle the basic code points: let `basic` be the number of input code
|
||||
// points before the last delimiter, or `0` if there is none, then copy
|
||||
// the first basic code points to the output.
|
||||
|
||||
basic = input.lastIndexOf(delimiter); |
||||
if (basic < 0) { |
||||
basic = 0; |
||||
} |
||||
|
||||
for (j = 0; j < basic; ++j) { |
||||
// if it's not a basic code point
|
||||
if (input.charCodeAt(j) >= 0x80) { |
||||
error('not-basic'); |
||||
} |
||||
output.push(input.charCodeAt(j)); |
||||
} |
||||
|
||||
// Main decoding loop: start just after the last delimiter if any basic code
|
||||
// points were copied; start at the beginning otherwise.
|
||||
|
||||
for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { |
||||
|
||||
// `index` is the index of the next character to be consumed.
|
||||
// Decode a generalized variable-length integer into `delta`,
|
||||
// which gets added to `i`. The overflow checking is easier
|
||||
// if we increase `i` as we go, then subtract off its starting
|
||||
// value at the end to obtain `delta`.
|
||||
for (oldi = i, w = 1, k = base; /* no condition */; k += base) { |
||||
|
||||
if (index >= inputLength) { |
||||
error('invalid-input'); |
||||
} |
||||
|
||||
digit = basicToDigit(input.charCodeAt(index++)); |
||||
|
||||
if (digit >= base || digit > floor((maxInt - i) / w)) { |
||||
error('overflow'); |
||||
} |
||||
|
||||
i += digit * w; |
||||
t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); |
||||
|
||||
if (digit < t) { |
||||
break; |
||||
} |
||||
|
||||
baseMinusT = base - t; |
||||
if (w > floor(maxInt / baseMinusT)) { |
||||
error('overflow'); |
||||
} |
||||
|
||||
w *= baseMinusT; |
||||
|
||||
} |
||||
|
||||
out = output.length + 1; |
||||
bias = adapt(i - oldi, out, oldi == 0); |
||||
|
||||
// `i` was supposed to wrap around from `out` to `0`,
|
||||
// incrementing `n` each time, so we'll fix that now:
|
||||
if (floor(i / out) > maxInt - n) { |
||||
error('overflow'); |
||||
} |
||||
|
||||
n += floor(i / out); |
||||
i %= out; |
||||
|
||||
// Insert `n` at position `i` of the output
|
||||
output.splice(i++, 0, n); |
||||
|
||||
} |
||||
|
||||
return ucs2encode(output); |
||||
} |
||||
|
||||
/** |
||||
* Converts a string of Unicode code points to a Punycode string of ASCII |
||||
* code points. |
||||
* @memberOf punycode |
||||
* @param {String} input The string of Unicode code points. |
||||
* @returns {String} The resulting Punycode string of ASCII code points. |
||||
*/ |
||||
function encode(input) { |
||||
var n, |
||||
delta, |
||||
handledCPCount, |
||||
basicLength, |
||||
bias, |
||||
j, |
||||
m, |
||||
q, |
||||
k, |
||||
t, |
||||
currentValue, |
||||
output = [], |
||||
/** `inputLength` will hold the number of code points in `input`. */ |
||||
inputLength, |
||||
/** Cached calculation results */ |
||||
handledCPCountPlusOne, |
||||
baseMinusT, |
||||
qMinusT; |
||||
|
||||
// Convert the input in UCS-2 to Unicode
|
||||
input = ucs2decode(input); |
||||
|
||||
// Cache the length
|
||||
inputLength = input.length; |
||||
|
||||
// Initialize the state
|
||||
n = initialN; |
||||
delta = 0; |
||||
bias = initialBias; |
||||
|
||||
// Handle the basic code points
|
||||
for (j = 0; j < inputLength; ++j) { |
||||
currentValue = input[j]; |
||||
if (currentValue < 0x80) { |
||||
output.push(stringFromCharCode(currentValue)); |
||||
} |
||||
} |
||||
|
||||
handledCPCount = basicLength = output.length; |
||||
|
||||
// `handledCPCount` is the number of code points that have been handled;
|
||||
// `basicLength` is the number of basic code points.
|
||||
|
||||
// Finish the basic string - if it is not empty - with a delimiter
|
||||
if (basicLength) { |
||||
output.push(delimiter); |
||||
} |
||||
|
||||
// Main encoding loop:
|
||||
while (handledCPCount < inputLength) { |
||||
|
||||
// All non-basic code points < n have been handled already. Find the next
|
||||
// larger one:
|
||||
for (m = maxInt, j = 0; j < inputLength; ++j) { |
||||
currentValue = input[j]; |
||||
if (currentValue >= n && currentValue < m) { |
||||
m = currentValue; |
||||
} |
||||
} |
||||
|
||||
// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
|
||||
// but guard against overflow
|
||||
handledCPCountPlusOne = handledCPCount + 1; |
||||
if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { |
||||
error('overflow'); |
||||
} |
||||
|
||||
delta += (m - n) * handledCPCountPlusOne; |
||||
n = m; |
||||
|
||||
for (j = 0; j < inputLength; ++j) { |
||||
currentValue = input[j]; |
||||
|
||||
if (currentValue < n && ++delta > maxInt) { |
||||
error('overflow'); |
||||
} |
||||
|
||||
if (currentValue == n) { |
||||
// Represent delta as a generalized variable-length integer
|
||||
for (q = delta, k = base; /* no condition */; k += base) { |
||||
t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); |
||||
if (q < t) { |
||||
break; |
||||
} |
||||
qMinusT = q - t; |
||||
baseMinusT = base - t; |
||||
output.push( |
||||
stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) |
||||
); |
||||
q = floor(qMinusT / baseMinusT); |
||||
} |
||||
|
||||
output.push(stringFromCharCode(digitToBasic(q, 0))); |
||||
bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); |
||||
delta = 0; |
||||
++handledCPCount; |
||||
} |
||||
} |
||||
|
||||
++delta; |
||||
++n; |
||||
|
||||
} |
||||
return output.join(''); |
||||
} |
||||
|
||||
/** |
||||
* Converts a Punycode string representing a domain name to Unicode. Only the |
||||
* Punycoded parts of the domain name will be converted, i.e. it doesn't |
||||
* matter if you call it on a string that has already been converted to |
||||
* Unicode. |
||||
* @memberOf punycode |
||||
* @param {String} domain The Punycode domain name to convert to Unicode. |
||||
* @returns {String} The Unicode representation of the given Punycode |
||||
* string. |
||||
*/ |
||||
function toUnicode(domain) { |
||||
return mapDomain(domain, function(string) { |
||||
return regexPunycode.test(string) |
||||
? decode(string.slice(4).toLowerCase()) |
||||
: string; |
||||
}); |
||||
} |
||||
|
||||
/** |
||||
* Converts a Unicode string representing a domain name to Punycode. Only the |
||||
* non-ASCII parts of the domain name will be converted, i.e. it doesn't |
||||
* matter if you call it with a domain that's already in ASCII. |
||||
* @memberOf punycode |
||||
* @param {String} domain The domain name to convert, as a Unicode string. |
||||
* @returns {String} The Punycode representation of the given domain name. |
||||
*/ |
||||
function toASCII(domain) { |
||||
return mapDomain(domain, function(string) { |
||||
return regexNonASCII.test(string) |
||||
? 'xn--' + encode(string) |
||||
: string; |
||||
}); |
||||
} |
||||
|
||||
/*--------------------------------------------------------------------------*/ |
||||
|
||||
/** Define the public API */ |
||||
punycode = { |
||||
/** |
||||
* A string representing the current Punycode.js version number. |
||||
* @memberOf punycode |
||||
* @type String |
||||
*/ |
||||
'version': '1.2.1', |
||||
/** |
||||
* An object of methods to convert from JavaScript's internal character |
||||
* representation (UCS-2) to decimal Unicode code points, and back. |
||||
* @see <http://mathiasbynens.be/notes/javascript-encoding>
|
||||
* @memberOf punycode |
||||
* @type Object |
||||
*/ |
||||
'ucs2': { |
||||
'decode': ucs2decode, |
||||
'encode': ucs2encode |
||||
}, |
||||
'decode': decode, |
||||
'encode': encode, |
||||
'toASCII': toASCII, |
||||
'toUnicode': toUnicode |
||||
}; |
||||
|
||||
/** Expose `punycode` */ |
||||
// Some AMD build optimizers, like r.js, check for specific condition patterns
|
||||
// like the following:
|
||||
if ( |
||||
typeof define == 'function' && |
||||
typeof define.amd == 'object' && |
||||
define.amd |
||||
) { |
||||
define(function() { |
||||
return punycode; |
||||
}); |
||||
} else if (freeExports && !freeExports.nodeType) { |
||||
if (freeModule) { // in Node.js or RingoJS v0.8.0+
|
||||
freeModule.exports = punycode; |
||||
} else { // in Narwhal or RingoJS v0.7.0-
|
||||
for (key in punycode) { |
||||
punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); |
||||
} |
||||
} |
||||
} else { // in Rhino or a web browser
|
||||
root.punycode = punycode; |
||||
} |
||||
|
||||
}(this)); |
@ -0,0 +1,2 @@
|
||||
/*! http://mths.be/punycode v1.2.1 by @mathias */ |
||||
(function(o){function e(o){throw RangeError(L[o])}function n(o,e){for(var n=o.length;n--;)o[n]=e(o[n]);return o}function t(o,e){return n(o.split(S),e).join(".")}function r(o){for(var e,n,t=[],r=0,u=o.length;u>r;)e=o.charCodeAt(r++),55296==(63488&e)&&u>r?(n=o.charCodeAt(r++),56320==(64512&n)?t.push(((1023&e)<<10)+(1023&n)+65536):t.push(e,n)):t.push(e);return t}function u(o){return n(o,function(o){var e="";return o>65535&&(o-=65536,e+=R(55296|1023&o>>>10),o=56320|1023&o),e+=R(o)}).join("")}function i(o){return 10>o-48?o-22:26>o-65?o-65:26>o-97?o-97:x}function f(o,e){return o+22+75*(26>o)-((0!=e)<<5)}function c(o,e,n){var t=0;for(o=n?P(o/m):o>>1,o+=P(o/e);o>M*y>>1;t+=x)o=P(o/M);return P(t+(M+1)*o/(o+j))}function l(o){var n,t,r,f,l,d,s,a,p,h,v=[],g=o.length,w=0,j=I,m=A;for(t=o.lastIndexOf(F),0>t&&(t=0),r=0;t>r;++r)o.charCodeAt(r)>=128&&e("not-basic"),v.push(o.charCodeAt(r));for(f=t>0?t+1:0;g>f;){for(l=w,d=1,s=x;f>=g&&e("invalid-input"),a=i(o.charCodeAt(f++)),(a>=x||a>P((b-w)/d))&&e("overflow"),w+=a*d,p=m>=s?C:s>=m+y?y:s-m,!(p>a);s+=x)h=x-p,d>P(b/h)&&e("overflow"),d*=h;n=v.length+1,m=c(w-l,n,0==l),P(w/n)>b-j&&e("overflow"),j+=P(w/n),w%=n,v.splice(w++,0,j)}return u(v)}function d(o){var n,t,u,i,l,d,s,a,p,h,v,g,w,j,m,E=[];for(o=r(o),g=o.length,n=I,t=0,l=A,d=0;g>d;++d)v=o[d],128>v&&E.push(R(v));for(u=i=E.length,i&&E.push(F);g>u;){for(s=b,d=0;g>d;++d)v=o[d],v>=n&&s>v&&(s=v);for(w=u+1,s-n>P((b-t)/w)&&e("overflow"),t+=(s-n)*w,n=s,d=0;g>d;++d)if(v=o[d],n>v&&++t>b&&e("overflow"),v==n){for(a=t,p=x;h=l>=p?C:p>=l+y?y:p-l,!(h>a);p+=x)m=a-h,j=x-h,E.push(R(f(h+m%j,0))),a=P(m/j);E.push(R(f(a,0))),l=c(t,w,u==i),t=0,++u}++t,++n}return E.join("")}function s(o){return t(o,function(o){return E.test(o)?l(o.slice(4).toLowerCase()):o})}function a(o){return t(o,function(o){return O.test(o)?"xn--"+d(o):o})}var p="object"==typeof exports&&exports,h="object"==typeof module&&module&&module.exports==p&&module,v="object"==typeof global&&global;(v.global===v||v.window===v)&&(o=v);var g,w,b=2147483647,x=36,C=1,y=26,j=38,m=700,A=72,I=128,F="-",E=/^xn--/,O=/[^ -~]/,S=/\x2E|\u3002|\uFF0E|\uFF61/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},M=x-C,P=Math.floor,R=String.fromCharCode;if(g={version:"1.2.1",ucs2:{decode:r,encode:u},decode:l,encode:d,toASCII:a,toUnicode:s},"function"==typeof define&&"object"==typeof define.amd&&define.amd)define(function(){return g});else if(p&&!p.nodeType)if(h)h.exports=g;else for(w in g)g.hasOwnProperty(w)&&(p[w]=g[w]);else o.punycode=g})(this); |
@ -0,0 +1,106 @@
|
||||
<?php |
||||
/** |
||||
* @link http://www.yiiframework.com/ |
||||
* @copyright Copyright (c) 2008 Yii Software LLC |
||||
* @license http://www.yiiframework.com/license/ |
||||
*/ |
||||
|
||||
namespace yii\behaviors; |
||||
|
||||
use yii\base\Behavior; |
||||
use yii\db\Expression; |
||||
use yii\db\ActiveRecord; |
||||
|
||||
/** |
||||
* AutoTimestamp will automatically fill the attributes about creation time and updating time. |
||||
* |
||||
* AutoTimestamp fills the attributes when the associated AR model is being inserted or updated. |
||||
* You may specify an AR to use this behavior like the following: |
||||
* |
||||
* ~~~ |
||||
* public function behaviors() |
||||
* { |
||||
* return array( |
||||
* 'timestamp' => array( |
||||
* 'class' => 'yii\behaviors\AutoTimestamp', |
||||
* ), |
||||
* ); |
||||
* } |
||||
* ~~~ |
||||
* |
||||
* By default, AutoTimestamp will fill the `create_time` attribute with the current timestamp |
||||
* when the associated AR object is being inserted; it will fill the `update_time` attribute |
||||
* with the timestamp when the AR object is being updated. |
||||
* |
||||
* @author Qiang Xue <qiang.xue@gmail.com> |
||||
* @since 2.0 |
||||
*/ |
||||
class AutoTimestamp extends Behavior |
||||
{ |
||||
/** |
||||
* @var array list of attributes that are to be automatically filled with timestamps. |
||||
* The array keys are the ActiveRecord events upon which the attributes are to be filled with timestamps, |
||||
* and the array values are the corresponding attribute to be updated. You can use a string to represent |
||||
* a single attribute, or an array to represent a list of attributes. |
||||
* The default setting is to update the `create_time` attribute upon AR insertion, |
||||
* and update the `update_time` attribute upon AR updating. |
||||
*/ |
||||
public $attributes = array( |
||||
ActiveRecord::EVENT_BEFORE_INSERT => 'create_time', |
||||
ActiveRecord::EVENT_BEFORE_UPDATE => 'update_time', |
||||
); |
||||
/** |
||||
* @var \Closure|Expression The expression that will be used for generating the timestamp. |
||||
* This can be either an anonymous function that returns the timestamp value, |
||||
* or an [[Expression]] object representing a DB expression (e.g. `new Expression('NOW()')`). |
||||
* If not set, it will use the value of `time()` to fill the attributes. |
||||
*/ |
||||
public $timestamp; |
||||
|
||||
|
||||
/** |
||||
* Declares event handlers for the [[owner]]'s events. |
||||
* @return array events (array keys) and the corresponding event handler methods (array values). |
||||
*/ |
||||
public function events() |
||||
{ |
||||
$events = array(); |
||||
$behavior = $this; |
||||
foreach ($this->attributes as $event => $attributes) { |
||||
if (!is_array($attributes)) { |
||||
$attributes = array($attributes); |
||||
} |
||||
$events[$event] = function () use ($behavior, $attributes) { |
||||
$behavior->updateTimestamp($attributes); |
||||
}; |
||||
} |
||||
return $events; |
||||
} |
||||
|
||||
/** |
||||
* Updates the attributes with the current timestamp. |
||||
* @param array $attributes list of attributes to be updated. |
||||
*/ |
||||
public function updateTimestamp($attributes) |
||||
{ |
||||
foreach ($attributes as $attribute) { |
||||
$this->owner->$attribute = $this->evaluateTimestamp($attribute); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Gets the appropriate timestamp for the specified attribute. |
||||
* @param string $attribute attribute name |
||||
* @return mixed the timestamp value |
||||
*/ |
||||
protected function evaluateTimestamp($attribute) |
||||
{ |
||||
if ($this->timestamp instanceof Expression) { |
||||
return $this->timestamp; |
||||
} elseif ($this->timestamp !== null) { |
||||
return call_user_func($this->timestamp); |
||||
} else { |
||||
return time(); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,154 @@
|
||||
<?php |
||||
/** |
||||
* @link http://www.yiiframework.com/ |
||||
* @copyright Copyright (c) 2008 Yii Software LLC |
||||
* @license http://www.yiiframework.com/license/ |
||||
*/ |
||||
|
||||
namespace yii\bootstrap; |
||||
|
||||
use Yii; |
||||
use yii\helpers\ArrayHelper; |
||||
use yii\helpers\Html; |
||||
|
||||
/** |
||||
* Alert renders an alert bootstrap component. |
||||
* |
||||
* For example, |
||||
* |
||||
* ```php |
||||
* echo Alert::widget(array( |
||||
* 'body' => 'Say hello...', |
||||
* 'closeButton' => array( |
||||
* 'label' => '×', |
||||
* 'tag' => 'a', |
||||
* ), |
||||
* )); |
||||
* ``` |
||||
* |
||||
* The following example will show the content enclosed between the [[begin()]] |
||||
* and [[end()]] calls within the alert box: |
||||
* |
||||
* ```php |
||||
* Alert::begin(array( |
||||
* 'closeButton' => array( |
||||
* 'label' => '×', |
||||
* ), |
||||
* )); |
||||
* |
||||
* echo 'Say hello...'; |
||||
* |
||||
* Alert::end(); |
||||
* ``` |
||||
* |
||||
* @see http://twitter.github.io/bootstrap/javascript.html#alerts |
||||
* @author Antonio Ramirez <amigo.cobos@gmail.com> |
||||
* @since 2.0 |
||||
*/ |
||||
class Alert extends Widget |
||||
{ |
||||
/** |
||||
* @var string the body content in the alert component. Note that anything between |
||||
* the [[begin()]] and [[end()]] calls of the Alert widget will also be treated |
||||
* as the body content, and will be rendered before this. |
||||
*/ |
||||
public $body; |
||||
/** |
||||
* @var array the options for rendering the close button tag. |
||||
* The close button is displayed in the header of the modal window. Clicking |
||||
* on the button will hide the modal window. If this is null, no close button will be rendered. |
||||
* |
||||
* The following special options are supported: |
||||
* |
||||
* - tag: string, the tag name of the button. Defaults to 'button'. |
||||
* - label: string, the label of the button. Defaults to '×'. |
||||
* |
||||
* The rest of the options will be rendered as the HTML attributes of the button tag. |
||||
* Please refer to the [Alert plugin help](http://twitter.github.com/bootstrap/javascript.html#alerts) |
||||
* for the supported HTML attributes. |
||||
*/ |
||||
public $closeButton = array(); |
||||
|
||||
|
||||
/** |
||||
* Initializes the widget. |
||||
*/ |
||||
public function init() |
||||
{ |
||||
parent::init(); |
||||
|
||||
$this->getView()->registerAssetBundle('yii/bootstrap/alert'); |
||||
$this->initOptions(); |
||||
|
||||
echo Html::beginTag('div', $this->options) . "\n"; |
||||
echo $this->renderBodyBegin() . "\n"; |
||||
} |
||||
|
||||
/** |
||||
* Renders the widget. |
||||
*/ |
||||
public function run() |
||||
{ |
||||
echo "\n" . $this->renderBodyEnd(); |
||||
echo "\n" . Html::endTag('div'); |
||||
|
||||
$this->registerPlugin('alert'); |
||||
} |
||||
|
||||
/** |
||||
* Renders the close button if any before rendering the content. |
||||
* @return string the rendering result |
||||
*/ |
||||
protected function renderBodyBegin() |
||||
{ |
||||
return $this->renderCloseButton(); |
||||
} |
||||
|
||||
/** |
||||
* Renders the alert body (if any). |
||||
* @return string the rendering result |
||||
*/ |
||||
protected function renderBodyEnd() |
||||
{ |
||||
return $this->body . "\n"; |
||||
} |
||||
|
||||
/** |
||||
* Renders the close button. |
||||
* @return string the rendering result |
||||
*/ |
||||
protected function renderCloseButton() |
||||
{ |
||||
if ($this->closeButton !== null) { |
||||
$tag = ArrayHelper::remove($this->closeButton, 'tag', 'button'); |
||||
$label = ArrayHelper::remove($this->closeButton, 'label', '×'); |
||||
if ($tag === 'button' && !isset($this->closeButton['type'])) { |
||||
$this->closeButton['type'] = 'button'; |
||||
} |
||||
return Html::tag($tag, $label, $this->closeButton); |
||||
} else { |
||||
return null; |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Initializes the widget options. |
||||
* This method sets the default values for various options. |
||||
*/ |
||||
protected function initOptions() |
||||
{ |
||||
$this->options = array_merge(array( |
||||
'class' => 'fade in', |
||||
), $this->options); |
||||
|
||||
$this->addCssClass($this->options, 'alert'); |
||||
|
||||
if ($this->closeButton !== null) { |
||||
$this->closeButton = array_merge(array( |
||||
'data-dismiss' => 'alert', |
||||
'aria-hidden' => 'true', |
||||
'class' => 'close', |
||||
), $this->closeButton); |
||||
} |
||||
} |
||||
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue