71 changed files with 1668 additions and 0 deletions
			
			
		| @ -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,98 @@ | |||||||
|  | Yii 2 Advanced Application Template | ||||||
|  | =================================== | ||||||
|  | 
 | ||||||
|  | **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 using Yii 2 Advanced Application Template - an application template | ||||||
|  | that works out-of-box and can be easily customized to fit for your needs. | ||||||
|  | 
 | ||||||
|  | Yii 2 Advanced Application Template is best suitable for large projects requiring frontend and backstage separation, | ||||||
|  | deployment in different environments, configuration nesting etc. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | DIRECTORY STRUCTURE | ||||||
|  | ------------------- | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | common | ||||||
|  | 	config/             contains shared configurations | ||||||
|  | 	models/             contains model classes used in both backstage and frontend | ||||||
|  | console | ||||||
|  | 	config/             contains console configurations | ||||||
|  | 	controllers/        contains console controllers (commands) | ||||||
|  | 	migrations/         contains database migrations | ||||||
|  | 	models/             contains console-specific model classes | ||||||
|  | 	runtime/            contains files generated during runtime | ||||||
|  | backstage | ||||||
|  | 	assets/             contains application assets such as JavaScript and CSS | ||||||
|  | 	config/             contains backstage configurations | ||||||
|  | 	controllers/        contains Web controller classes | ||||||
|  | 	models/             contains backstage-specific model classes | ||||||
|  | 	runtime/            contains files generated during runtime | ||||||
|  | 	views/              contains view files for the Web application | ||||||
|  | 	www/                contains the entry script and Web resources | ||||||
|  | frontend | ||||||
|  | 	assets/             contains application assets such as JavaScript and CSS | ||||||
|  | 	config/             contains frontend configurations | ||||||
|  | 	controllers/        contains Web controller classes | ||||||
|  | 	models/             contains frontend-specific model classes | ||||||
|  | 	runtime/            contains files generated during runtime | ||||||
|  | 	views/              contains view files for the Web application | ||||||
|  | 	www/                contains the entry script and Web resources | ||||||
|  | vendor/                 contains dependent 3rd-party packages | ||||||
|  | environments/                contains environment-based overrides | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 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-app-advanced yii-advanced | ||||||
|  | ~~~ | ||||||
|  | 
 | ||||||
|  | Now you should be able to access: | ||||||
|  | 
 | ||||||
|  | - the frontend using the URL `http://localhost/yii-advanced/frontend/www/` | ||||||
|  | - the backstage using the URL `http://localhost/yii-advanced/backstage/www/` | ||||||
|  | 
 | ||||||
|  | assuming `yii-advanced` 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. | ||||||
|  | 
 | ||||||
|  | GETTING STARTED | ||||||
|  | --------------- | ||||||
|  | 
 | ||||||
|  | After template application and its dependencies are downloaded you need to initialize it and set some config values to | ||||||
|  | match your application requirements. | ||||||
|  | 
 | ||||||
|  | 1. Execute `install` command selecting `dev` as environment. | ||||||
|  | 2. Set `id` value in `console/config/main.php`, `frontend/config/main.php`, `backstage/config/main.php`. | ||||||
|  | 3. Create new database. It is assumed that MySQL InnoDB is used. If not, adjust `console/migrations/m130524_201442_init.php`. | ||||||
|  | 4. In `common/config/params.php` set your database details in `components.db` values. | ||||||
|  | 
 | ||||||
| @ -0,0 +1,2 @@ | |||||||
|  | main-local.php | ||||||
|  | params-local.php | ||||||
| @ -0,0 +1,18 @@ | |||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | return array( | ||||||
|  | 	'app' => array( | ||||||
|  | 		'basePath' => '@wwwroot', | ||||||
|  | 		'baseUrl' => '@www', | ||||||
|  | 		'css' => array( | ||||||
|  | 			'css/site.css', | ||||||
|  | 		), | ||||||
|  | 		'js' => array( | ||||||
|  | 
 | ||||||
|  | 		), | ||||||
|  | 		'depends' => array( | ||||||
|  | 			'yii', | ||||||
|  | 			'yii/bootstrap/responsive', | ||||||
|  | 		), | ||||||
|  | 	), | ||||||
|  | ); | ||||||
| @ -0,0 +1,39 @@ | |||||||
|  | <?php | ||||||
|  | $rootDir = __DIR__ . '/../..'; | ||||||
|  | 
 | ||||||
|  | $params = array_merge( | ||||||
|  | 	require($rootDir . '/common/config/params.php'), | ||||||
|  | 	require($rootDir . '/common/config/params-local.php'), | ||||||
|  | 	require(__DIR__ . '/params.php'), | ||||||
|  | 	require(__DIR__ . '/params-local.php') | ||||||
|  | ); | ||||||
|  | 
 | ||||||
|  | return array( | ||||||
|  | 	'id' => 'change-me', | ||||||
|  | 	'basePath' => dirname(__DIR__), | ||||||
|  | 	'preload' => array('log'), | ||||||
|  | 	'controllerNamespace' => 'backstage\controllers', | ||||||
|  | 	'modules' => array( | ||||||
|  | 	), | ||||||
|  | 	'components' => array( | ||||||
|  | 		'db' => $params['components.db'], | ||||||
|  | 		'cache' => $params['components.cache'], | ||||||
|  | 		'user' => array( | ||||||
|  | 			'class' => 'yii\web\User', | ||||||
|  | 			'identityClass' => 'common\models\User', | ||||||
|  | 		), | ||||||
|  | 		'assetManager' => array( | ||||||
|  | 			'bundles' => require(__DIR__ . '/assets.php'), | ||||||
|  | 		), | ||||||
|  | 		'log' => array( | ||||||
|  | 			'class' => 'yii\logging\Router', | ||||||
|  | 			'targets' => array( | ||||||
|  | 				array( | ||||||
|  | 					'class' => 'yii\logging\FileTarget', | ||||||
|  | 					'levels' => array('error', 'warning'), | ||||||
|  | 				), | ||||||
|  | 			), | ||||||
|  | 		), | ||||||
|  | 	), | ||||||
|  | 	'params' => $params, | ||||||
|  | ); | ||||||
| @ -0,0 +1,5 @@ | |||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | return array( | ||||||
|  | 	'adminEmail' => 'admin@example.com', | ||||||
|  | ); | ||||||
| @ -0,0 +1,33 @@ | |||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | namespace backstage\controllers; | ||||||
|  | 
 | ||||||
|  | use Yii; | ||||||
|  | use yii\web\Controller; | ||||||
|  | use common\models\LoginForm; | ||||||
|  | 
 | ||||||
|  | class SiteController extends Controller | ||||||
|  | { | ||||||
|  | 	public function actionIndex() | ||||||
|  | 	{ | ||||||
|  | 		echo $this->render('index'); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public function actionLogin() | ||||||
|  | 	{ | ||||||
|  | 		$model = new LoginForm(); | ||||||
|  | 		if ($this->populate($_POST, $model) && $model->login()) { | ||||||
|  | 			Yii::$app->response->redirect(array('site/index')); | ||||||
|  | 		} else { | ||||||
|  | 			echo $this->render('login', array( | ||||||
|  | 				'model' => $model, | ||||||
|  | 			)); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public function actionLogout() | ||||||
|  | 	{ | ||||||
|  | 		Yii::$app->getUser()->logout(); | ||||||
|  | 		Yii::$app->getResponse()->redirect(array('site/index')); | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -0,0 +1,2 @@ | |||||||
|  | * | ||||||
|  | !.gitignore | ||||||
| @ -0,0 +1,64 @@ | |||||||
|  | <?php | ||||||
|  | use yii\helpers\Html; | ||||||
|  | use yii\widgets\Menu; | ||||||
|  | use yii\widgets\Breadcrumbs; | ||||||
|  | use yii\debug\Toolbar; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * @var $this \yii\base\View | ||||||
|  |  * @var $content string | ||||||
|  |  */ | ||||||
|  | $this->registerAssetBundle('app'); | ||||||
|  | ?> | ||||||
|  | <?php $this->beginPage(); ?> | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <html lang="en"> | ||||||
|  | <head> | ||||||
|  | 	<meta charset="utf-8"/> | ||||||
|  | 	<title><?php echo Html::encode($this->title); ?></title>
 | ||||||
|  | 	<?php $this->head(); ?> | ||||||
|  | </head> | ||||||
|  | <body> | ||||||
|  | <div class="container"> | ||||||
|  | 	<?php $this->beginBody(); ?> | ||||||
|  | 	<div class="masthead"> | ||||||
|  | 		<h3 class="muted">My Company</h3> | ||||||
|  | 
 | ||||||
|  | 		<div class="navbar"> | ||||||
|  | 			<div class="navbar-inner"> | ||||||
|  | 				<div class="container"> | ||||||
|  | 					<?php echo Menu::widget(array( | ||||||
|  | 						'options' => array('class' => 'nav'), | ||||||
|  | 						'items' => array( | ||||||
|  | 							array('label' => 'Home', 'url' => array('/site/index')), | ||||||
|  | 							Yii::$app->user->isGuest ? | ||||||
|  | 								array('label' => 'Login', 'url' => array('/site/login')) : | ||||||
|  | 								array('label' => 'Logout (' . Yii::$app->user->identity->username .')' , 'url' => array('/site/logout')), | ||||||
|  | 						), | ||||||
|  | 					)); ?> | ||||||
|  | 				</div> | ||||||
|  | 			</div> | ||||||
|  | 		</div> | ||||||
|  | 		<!-- /.navbar --> | ||||||
|  | 	</div> | ||||||
|  | 
 | ||||||
|  | 	<?php echo Breadcrumbs::widget(array( | ||||||
|  | 		'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : array(), | ||||||
|  | 	)); ?> | ||||||
|  | 	<?php echo $content; ?> | ||||||
|  | 
 | ||||||
|  | 	<hr> | ||||||
|  | 
 | ||||||
|  | 	<div class="footer"> | ||||||
|  | 		<p>© My Company <?php echo date('Y'); ?></p>
 | ||||||
|  | 		<p> | ||||||
|  | 			<?php echo Yii::powered(); ?> | ||||||
|  | 			Template by <a href="http://twitter.github.io/bootstrap/">Twitter Bootstrap</a> | ||||||
|  | 		</p> | ||||||
|  | 	</div> | ||||||
|  | 	<?php $this->endBody(); ?> | ||||||
|  | </div> | ||||||
|  | <?php echo Toolbar::widget(); ?> | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
|  | <?php $this->endPage(); ?> | ||||||
| @ -0,0 +1,47 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * @var yii\base\View $this | ||||||
|  |  */ | ||||||
|  | $this->title = 'Welcome'; | ||||||
|  | ?> | ||||||
|  | <div class="jumbotron"> | ||||||
|  | 	<h1>Welcome!</h1> | ||||||
|  | 
 | ||||||
|  | 	<p class="lead">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Fusce dapibus, tellus ac cursus | ||||||
|  | 		commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p> | ||||||
|  | 	<a class="btn btn-large btn-success" href="http://www.yiiframework.com">Get started with Yii</a> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  | <hr> | ||||||
|  | 
 | ||||||
|  | <!-- Example row of columns --> | ||||||
|  | <div class="row-fluid"> | ||||||
|  | 	<div class="span4"> | ||||||
|  | 		<h2>Heading</h2> | ||||||
|  | 
 | ||||||
|  | 		<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris | ||||||
|  | 			condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. | ||||||
|  | 			Donec sed odio dui. </p> | ||||||
|  | 
 | ||||||
|  | 		<p><a class="btn" href="#">View details »</a></p> | ||||||
|  | 	</div> | ||||||
|  | 	<div class="span4"> | ||||||
|  | 		<h2>Heading</h2> | ||||||
|  | 
 | ||||||
|  | 		<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris | ||||||
|  | 			condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. | ||||||
|  | 			Donec sed odio dui. </p> | ||||||
|  | 
 | ||||||
|  | 		<p><a class="btn" href="#">View details »</a></p> | ||||||
|  | 	</div> | ||||||
|  | 	<div class="span4"> | ||||||
|  | 		<h2>Heading</h2> | ||||||
|  | 
 | ||||||
|  | 		<p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta | ||||||
|  | 			felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum | ||||||
|  | 			massa.</p> | ||||||
|  | 
 | ||||||
|  | 		<p><a class="btn" href="#">View details »</a></p> | ||||||
|  | 	</div> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
| @ -0,0 +1,24 @@ | |||||||
|  | <?php | ||||||
|  | use yii\helpers\Html; | ||||||
|  | use yii\widgets\ActiveForm; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * @var yii\base\View $this | ||||||
|  |  * @var yii\widgets\ActiveForm $form | ||||||
|  |  * @var app\models\LoginForm $model | ||||||
|  |  */ | ||||||
|  | $this->title = 'Login'; | ||||||
|  | $this->params['breadcrumbs'][] = $this->title; | ||||||
|  | ?> | ||||||
|  | <h1><?php echo Html::encode($this->title); ?></h1>
 | ||||||
|  | 
 | ||||||
|  | <p>Please fill out the following fields to login:</p> | ||||||
|  | 
 | ||||||
|  | <?php $form = ActiveForm::begin(array('options' => array('class' => 'form-horizontal'))); ?> | ||||||
|  | 	<?php echo $form->field($model, 'username')->textInput(); ?> | ||||||
|  | 	<?php echo $form->field($model, 'password')->passwordInput(); ?> | ||||||
|  | 	<?php echo $form->field($model, 'rememberMe')->checkbox(); ?> | ||||||
|  | 	<div class="form-actions"> | ||||||
|  | 		<?php echo Html::submitButton('Login', null, null, array('class' => 'btn btn-primary')); ?> | ||||||
|  | 	</div> | ||||||
|  | <?php ActiveForm::end(); ?> | ||||||
| @ -0,0 +1,2 @@ | |||||||
|  | * | ||||||
|  | !.gitignore | ||||||
| @ -0,0 +1,78 @@ | |||||||
|  | body { | ||||||
|  | 	padding-top: 20px; | ||||||
|  | 	padding-bottom: 60px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Custom container */ | ||||||
|  | .container { | ||||||
|  | 	margin: 0 auto; | ||||||
|  | 	max-width: 1000px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .container > hr { | ||||||
|  | 	margin: 60px 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Main marketing message and sign up button */ | ||||||
|  | .jumbotron { | ||||||
|  | 	margin: 80px 0; | ||||||
|  | 	text-align: center; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .jumbotron h1 { | ||||||
|  | 	font-size: 100px; | ||||||
|  | 	line-height: 1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .jumbotron .lead { | ||||||
|  | 	font-size: 24px; | ||||||
|  | 	line-height: 1.25; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .jumbotron .btn { | ||||||
|  | 	font-size: 21px; | ||||||
|  | 	padding: 14px 24px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Supporting marketing content */ | ||||||
|  | .marketing { | ||||||
|  | 	margin: 60px 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .marketing p + h4 { | ||||||
|  | 	margin-top: 28px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Customize the navbar links to be fill the entire space of the .navbar */ | ||||||
|  | .navbar .navbar-inner { | ||||||
|  | 	padding: 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .navbar .nav { | ||||||
|  | 	margin: 0; | ||||||
|  | 	display: table; | ||||||
|  | 	width: 100%; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .navbar .nav li { | ||||||
|  | 	display: table-cell; | ||||||
|  | 	width: 1%; | ||||||
|  | 	float: none; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .navbar .nav li a { | ||||||
|  | 	font-weight: bold; | ||||||
|  | 	text-align: center; | ||||||
|  | 	border-left: 1px solid rgba(255, 255, 255, .75); | ||||||
|  | 	border-right: 1px solid rgba(0, 0, 0, .1); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .navbar .nav li:first-child a { | ||||||
|  | 	border-left: 0; | ||||||
|  | 	border-radius: 3px 0 0 3px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .navbar .nav li:last-child a { | ||||||
|  | 	border-right: 0; | ||||||
|  | 	border-radius: 0 3px 3px 0; | ||||||
|  | } | ||||||
| @ -0,0 +1,16 @@ | |||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | return array( | ||||||
|  | 	'adminEmail' => 'admin@example.com', | ||||||
|  | 
 | ||||||
|  | 	'components.cache' => array( | ||||||
|  | 		'class' => 'yii\caching\FileCache', | ||||||
|  | 	), | ||||||
|  | 
 | ||||||
|  | 	'components.db' => array( | ||||||
|  | 		'class' => 'yii\db\Connection', | ||||||
|  | 		'dsn' => 'mysql:host=localhost;dbname=yii2advanced', | ||||||
|  | 		'username' => 'root', | ||||||
|  | 		'password' => '', | ||||||
|  | 	), | ||||||
|  | ); | ||||||
| @ -0,0 +1,58 @@ | |||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | namespace common\models; | ||||||
|  | 
 | ||||||
|  | use Yii; | ||||||
|  | use yii\base\Model; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * LoginForm is the model behind the login form. | ||||||
|  |  */ | ||||||
|  | class LoginForm extends Model | ||||||
|  | { | ||||||
|  | 	public $username; | ||||||
|  | 	public $password; | ||||||
|  | 	public $rememberMe = true; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @return array the validation rules. | ||||||
|  | 	 */ | ||||||
|  | 	public function rules() | ||||||
|  | 	{ | ||||||
|  | 		return array( | ||||||
|  | 			// username and password are both required | ||||||
|  | 			array('username, password', 'required'), | ||||||
|  | 			// password is validated by validatePassword() | ||||||
|  | 			array('password', 'validatePassword'), | ||||||
|  | 			// rememberMe must be a boolean value | ||||||
|  | 			array('rememberMe', 'boolean'), | ||||||
|  | 		); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Validates the password. | ||||||
|  | 	 * This method serves as the inline validation for password. | ||||||
|  | 	 */ | ||||||
|  | 	public function validatePassword() | ||||||
|  | 	{ | ||||||
|  | 		$user = User::findByUsername($this->username); | ||||||
|  | 		if (!$user || !$user->validatePassword($this->password)) { | ||||||
|  | 			$this->addError('password', 'Incorrect username or password.'); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Logs in a user using the provided username and password. | ||||||
|  | 	 * @return boolean whether the user is logged in successfully | ||||||
|  | 	 */ | ||||||
|  | 	public function login() | ||||||
|  | 	{ | ||||||
|  | 		if ($this->validate()) { | ||||||
|  | 			$user = User::findByUsername($this->username); | ||||||
|  | 			Yii::$app->user->login($user, $this->rememberMe ? 3600*24*30 : 0); | ||||||
|  | 			return true; | ||||||
|  | 		} else { | ||||||
|  | 			return false; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -0,0 +1,115 @@ | |||||||
|  | <?php | ||||||
|  | namespace common\models; | ||||||
|  | 
 | ||||||
|  | use yii\db\ActiveRecord; | ||||||
|  | use yii\helpers\SecurityHelper; | ||||||
|  | use yii\web\Identity; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Class User | ||||||
|  |  * @package common\models | ||||||
|  |  * | ||||||
|  |  * @property integer $id | ||||||
|  |  * @property string $username | ||||||
|  |  * @property string $password_hash | ||||||
|  |  * @property string $email | ||||||
|  |  * @property string $auth_key | ||||||
|  |  * @property integer $role | ||||||
|  |  * @property integer $status | ||||||
|  |  * @property integer $create_time | ||||||
|  |  * @property integer $update_time | ||||||
|  |  */ | ||||||
|  | class User extends ActiveRecord implements Identity | ||||||
|  | { | ||||||
|  | 	/** | ||||||
|  | 	 * @var string the raw password. Used to collect password input and isn't saved in database | ||||||
|  | 	 */ | ||||||
|  | 	public $password; | ||||||
|  | 
 | ||||||
|  | 	const STATUS_DELETED = 0; | ||||||
|  | 	const STATUS_ACTIVE = 10; | ||||||
|  | 
 | ||||||
|  | 	const ROLE_USER = 10; | ||||||
|  | 
 | ||||||
|  | 	public function behaviors() | ||||||
|  | 	{ | ||||||
|  | 		return array( | ||||||
|  | 			'timestamp' => array( | ||||||
|  | 				'class' => 'yii\behaviors\AutoTimestamp', | ||||||
|  | 				'attributes' => array( | ||||||
|  | 					ActiveRecord::EVENT_BEFORE_INSERT => 'create_time', | ||||||
|  | 					ActiveRecord::EVENT_BEFORE_INSERT => 'update_time', | ||||||
|  | 					ActiveRecord::EVENT_BEFORE_UPDATE => 'update_time', | ||||||
|  | 				), | ||||||
|  | 			), | ||||||
|  | 		); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static function findIdentity($id) | ||||||
|  | 	{ | ||||||
|  | 		return static::find($id); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static function findByUsername($username) | ||||||
|  | 	{ | ||||||
|  | 		return static::find(array('username' => $username, 'status' => static::STATUS_ACTIVE)); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public function getId() | ||||||
|  | 	{ | ||||||
|  | 		return $this->id; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public function getAuthKey() | ||||||
|  | 	{ | ||||||
|  | 		return $this->auth_key; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public function validateAuthKey($authKey) | ||||||
|  | 	{ | ||||||
|  | 		return $this->auth_key === $authKey; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public function validatePassword($password) | ||||||
|  | 	{ | ||||||
|  | 		return SecurityHelper::validatePassword($password, $this->password_hash); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public function rules() | ||||||
|  | 	{ | ||||||
|  | 		return array( | ||||||
|  | 			array('username', 'filter', 'filter' => 'trim'), | ||||||
|  | 			array('username', 'required'), | ||||||
|  | 			array('username', 'length', 'min' => 2, 'max' => 255), | ||||||
|  | 
 | ||||||
|  | 			array('email', 'filter', 'filter' => 'trim'), | ||||||
|  | 			array('email', 'required'), | ||||||
|  | 			array('email', 'email'), | ||||||
|  | 			array('email', 'unique', 'message' => 'This email address has already been taken.'), | ||||||
|  | 
 | ||||||
|  | 			array('password', 'required'), | ||||||
|  | 			array('password', 'length', 'min' => 6), | ||||||
|  | 		); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public function scenarios() | ||||||
|  | 	{ | ||||||
|  | 		return array( | ||||||
|  | 			'signup' => array('username', 'email', 'password'), | ||||||
|  | 			'login' => array('username', 'password'), | ||||||
|  | 		); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public function beforeSave($insert) | ||||||
|  | 	{ | ||||||
|  | 		if(parent::beforeSave($insert)) { | ||||||
|  | 			if($this->isNewRecord) { | ||||||
|  | 				if(!empty($this->password)) { | ||||||
|  | 					$this->password_hash = SecurityHelper::generatePasswordHash($this->password); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			return true; | ||||||
|  | 		} | ||||||
|  | 		return false; | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -0,0 +1,2 @@ | |||||||
|  | main-local.php | ||||||
|  | params-local.php | ||||||
| @ -0,0 +1,32 @@ | |||||||
|  | <?php | ||||||
|  | $rootDir = __DIR__ . '/../..'; | ||||||
|  | 
 | ||||||
|  | $params = array_merge( | ||||||
|  | 	require($rootDir . '/common/config/params.php'), | ||||||
|  | 	require($rootDir . '/common/config/params-local.php'), | ||||||
|  | 	require(__DIR__ . '/params.php'), | ||||||
|  | 	require(__DIR__ . '/params-local.php') | ||||||
|  | ); | ||||||
|  | 
 | ||||||
|  | return array( | ||||||
|  | 	'id' => 'change-me', | ||||||
|  | 	'basePath' => dirname(__DIR__), | ||||||
|  | 	'preload' => array('log'), | ||||||
|  | 	'controllerNamespace' => 'console\controllers', | ||||||
|  | 	'modules' => array( | ||||||
|  | 	), | ||||||
|  | 	'components' => array( | ||||||
|  | 		'db' => $params['components.db'], | ||||||
|  | 		'cache' => $params['components.cache'], | ||||||
|  | 		'log' => array( | ||||||
|  | 			'class' => 'yii\logging\Router', | ||||||
|  | 			'targets' => array( | ||||||
|  | 				array( | ||||||
|  | 					'class' => 'yii\logging\FileTarget', | ||||||
|  | 					'levels' => array('error', 'warning'), | ||||||
|  | 				), | ||||||
|  | 			), | ||||||
|  | 		), | ||||||
|  | 	), | ||||||
|  | 	'params' => $params, | ||||||
|  | ); | ||||||
| @ -0,0 +1,5 @@ | |||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | return array( | ||||||
|  | 	'adminEmail' => 'admin@example.com', | ||||||
|  | ); | ||||||
| @ -0,0 +1,27 @@ | |||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | class m130524_201442_init extends \yii\db\Migration | ||||||
|  | { | ||||||
|  | 	public function up() | ||||||
|  | 	{ | ||||||
|  | 		// MySQL-specific table options. Adjust if you plan working with another DBMS | ||||||
|  | 		$tableOptions = 'CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE=InnoDB'; | ||||||
|  | 
 | ||||||
|  | 		$this->createTable('tbl_user', array( | ||||||
|  | 			'id' => Schema::TYPE_PK, | ||||||
|  | 			'username' => Schema::TYPE_STRING.' NOT NULL', | ||||||
|  | 			'password_hash' => Schema::TYPE_STRING.' NOT NULL', | ||||||
|  | 			'email' => Schema::TYPE_STRING.' NOT NULL', | ||||||
|  | 			'role' => 'tinyint NOT NULL DEFAULT 10', | ||||||
|  | 
 | ||||||
|  | 			'status' => 'tinyint NOT NULL DEFAULT 10', | ||||||
|  | 			'create_time' => Schema::TYPE_INTEGER.' NOT NULL', | ||||||
|  | 			'update_time' => Schema::TYPE_INTEGER.' NOT NULL', | ||||||
|  | 		), $tableOptions); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public function down() | ||||||
|  | 	{ | ||||||
|  | 		$this->dropTable('tbl_user'); | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -0,0 +1,17 @@ | |||||||
|  | <?php | ||||||
|  | return array( | ||||||
|  | 	'modules' => array( | ||||||
|  | //		'debug' => array( | ||||||
|  | //			'class' => 'yii\debug\Module', | ||||||
|  | //		), | ||||||
|  | 	), | ||||||
|  | 	'components' => array( | ||||||
|  | 		'log' => array( | ||||||
|  | 			'targets' => array( | ||||||
|  | //				array( | ||||||
|  | //					'class' => 'yii\logging\DebugTarget', | ||||||
|  | //				) | ||||||
|  | 			), | ||||||
|  | 		), | ||||||
|  | 	), | ||||||
|  | ); | ||||||
| @ -0,0 +1,3 @@ | |||||||
|  | <?php | ||||||
|  | return array( | ||||||
|  | ); | ||||||
| @ -0,0 +1,14 @@ | |||||||
|  | <?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 = yii\helpers\ArrayHelper::merge( | ||||||
|  | 	require(__DIR__ . '/../config/main.php'), | ||||||
|  | 	require(__DIR__ . '/../config/main-local.php') | ||||||
|  | ); | ||||||
|  | 
 | ||||||
|  | $application = new yii\web\Application($config); | ||||||
|  | $application->run(); | ||||||
| @ -0,0 +1,3 @@ | |||||||
|  | <?php | ||||||
|  | return array( | ||||||
|  | ); | ||||||
| @ -0,0 +1,3 @@ | |||||||
|  | <?php | ||||||
|  | return array( | ||||||
|  | ); | ||||||
| @ -0,0 +1,3 @@ | |||||||
|  | <?php | ||||||
|  | return array( | ||||||
|  | ); | ||||||
| @ -0,0 +1,17 @@ | |||||||
|  | <?php | ||||||
|  | return array( | ||||||
|  | 	'modules' => array( | ||||||
|  | //			'debug' => array( | ||||||
|  | //				'class' => 'yii\debug\Module', | ||||||
|  | //			), | ||||||
|  | 	), | ||||||
|  | 	'components' => array( | ||||||
|  | 		'log' => array( | ||||||
|  | 			'targets' => array( | ||||||
|  | //				array( | ||||||
|  | //					'class' => 'yii\logging\DebugTarget', | ||||||
|  | //				) | ||||||
|  | 			), | ||||||
|  | 		), | ||||||
|  | 	), | ||||||
|  | ); | ||||||
| @ -0,0 +1,3 @@ | |||||||
|  | <?php | ||||||
|  | return array( | ||||||
|  | ); | ||||||
| @ -0,0 +1,15 @@ | |||||||
|  | <?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 = yii\helpers\ArrayHelper::merge( | ||||||
|  | 	require(__DIR__ . '/../config/main.php'), | ||||||
|  | 	require(__DIR__ . '/../config/main-local.php') | ||||||
|  | ); | ||||||
|  | 
 | ||||||
|  | $application = new yii\web\Application($config); | ||||||
|  | $application->run(); | ||||||
| @ -0,0 +1,25 @@ | |||||||
|  | #!/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 = yii\helpers\ArrayHelper::merge( | ||||||
|  | 	require(__DIR__ . '/console/config/main.php'), | ||||||
|  | 	require(__DIR__ . '/console/config/main-local.php') | ||||||
|  | ); | ||||||
|  | 
 | ||||||
|  | $application = new yii\console\Application($config); | ||||||
|  | $application->run(); | ||||||
| @ -0,0 +1,38 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * The manifest of files that are local to specific environment. | ||||||
|  |  * This file returns a list of environments that the application | ||||||
|  |  * may be installed under. The returned data must be in the following | ||||||
|  |  * format: | ||||||
|  |  * | ||||||
|  |  * ```php | ||||||
|  |  * return array( | ||||||
|  |  *     'environment name' => array( | ||||||
|  |  *         'path' => 'directory storing the local files', | ||||||
|  |  *         'writable' => array( | ||||||
|  |  *             // list of directories that should be set writable | ||||||
|  |  *         ), | ||||||
|  |  *     ), | ||||||
|  |  * ); | ||||||
|  |  * ``` | ||||||
|  |  */ | ||||||
|  | return array( | ||||||
|  | 	'Development' => array( | ||||||
|  | 		'path' => 'dev', | ||||||
|  | 		'writable' => array( | ||||||
|  | 			// handled by composer.json already | ||||||
|  | 		), | ||||||
|  | 		'executable' => array( | ||||||
|  | 			'yiic', | ||||||
|  | 		), | ||||||
|  | 	), | ||||||
|  | 	'Production' => array( | ||||||
|  | 		'path' => 'prod', | ||||||
|  | 		'writable' => array( | ||||||
|  | 			// handled by composer.json already | ||||||
|  | 		), | ||||||
|  | 		'executable' => array( | ||||||
|  | 			'yiic', | ||||||
|  | 		), | ||||||
|  | 	), | ||||||
|  | ); | ||||||
| @ -0,0 +1,3 @@ | |||||||
|  | <?php | ||||||
|  | return array( | ||||||
|  | ); | ||||||
| @ -0,0 +1,3 @@ | |||||||
|  | <?php | ||||||
|  | return array( | ||||||
|  | ); | ||||||
| @ -0,0 +1,14 @@ | |||||||
|  | <?php | ||||||
|  | // comment out the following line to disable debug mode | ||||||
|  | defined('YII_DEBUG') or define('YII_DEBUG', false); | ||||||
|  | 
 | ||||||
|  | require(__DIR__ . '/../../vendor/yiisoft/yii2/yii/Yii.php'); | ||||||
|  | require(__DIR__ . '/../../vendor/autoload.php'); | ||||||
|  | 
 | ||||||
|  | $config = yii\helpers\ArrayHelper::merge( | ||||||
|  | 	require(__DIR__ . '/../config/main.php'), | ||||||
|  | 	require(__DIR__ . '/../config/main-local.php') | ||||||
|  | ); | ||||||
|  | 
 | ||||||
|  | $application = new yii\web\Application($config); | ||||||
|  | $application->run(); | ||||||
| @ -0,0 +1,3 @@ | |||||||
|  | <?php | ||||||
|  | return array( | ||||||
|  | ); | ||||||
| @ -0,0 +1,3 @@ | |||||||
|  | <?php | ||||||
|  | return array( | ||||||
|  | ); | ||||||
| @ -0,0 +1,3 @@ | |||||||
|  | <?php | ||||||
|  | return array( | ||||||
|  | ); | ||||||
| @ -0,0 +1,3 @@ | |||||||
|  | <?php | ||||||
|  | return array( | ||||||
|  | ); | ||||||
| @ -0,0 +1,3 @@ | |||||||
|  | <?php | ||||||
|  | return array( | ||||||
|  | ); | ||||||
| @ -0,0 +1,15 @@ | |||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | // comment out the following line to disable debug mode | ||||||
|  | defined('YII_DEBUG') or define('YII_DEBUG', false); | ||||||
|  | 
 | ||||||
|  | require(__DIR__ . '/../../vendor/yiisoft/yii2/yii/Yii.php'); | ||||||
|  | require(__DIR__ . '/../../vendor/autoload.php'); | ||||||
|  | 
 | ||||||
|  | $config = yii\helpers\ArrayHelper::merge( | ||||||
|  | 	require(__DIR__ . '/../config/main.php'), | ||||||
|  | 	require(__DIR__ . '/../config/main-local.php') | ||||||
|  | ); | ||||||
|  | 
 | ||||||
|  | $application = new yii\web\Application($config); | ||||||
|  | $application->run(); | ||||||
| @ -0,0 +1,25 @@ | |||||||
|  | #!/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', false); | ||||||
|  | 
 | ||||||
|  | // 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 = yii\helpers\ArrayHelper::merge( | ||||||
|  | 	require(__DIR__ . '/console/config/main.php'), | ||||||
|  | 	require(__DIR__ . '/console/config/main-local.php') | ||||||
|  | ); | ||||||
|  | 
 | ||||||
|  | $application = new yii\console\Application($config); | ||||||
|  | $application->run(); | ||||||
| @ -0,0 +1,2 @@ | |||||||
|  | main-local.php | ||||||
|  | params-local.php | ||||||
| @ -0,0 +1,18 @@ | |||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | return array( | ||||||
|  | 	'app' => array( | ||||||
|  | 		'basePath' => '@wwwroot', | ||||||
|  | 		'baseUrl' => '@www', | ||||||
|  | 		'css' => array( | ||||||
|  | 			'css/site.css', | ||||||
|  | 		), | ||||||
|  | 		'js' => array( | ||||||
|  | 
 | ||||||
|  | 		), | ||||||
|  | 		'depends' => array( | ||||||
|  | 			'yii', | ||||||
|  | 			'yii/bootstrap/responsive', | ||||||
|  | 		), | ||||||
|  | 	), | ||||||
|  | ); | ||||||
| @ -0,0 +1,39 @@ | |||||||
|  | <?php | ||||||
|  | $rootDir = __DIR__ . '/../..'; | ||||||
|  | 
 | ||||||
|  | $params = array_merge( | ||||||
|  | 	require($rootDir . '/common/config/params.php'), | ||||||
|  | 	require($rootDir . '/common/config/params-local.php'), | ||||||
|  | 	require(__DIR__ . '/params.php'), | ||||||
|  | 	require(__DIR__ . '/params-local.php') | ||||||
|  | ); | ||||||
|  | 
 | ||||||
|  | return array( | ||||||
|  | 	'id' => 'change-me', | ||||||
|  | 	'basePath' => dirname(__DIR__), | ||||||
|  | 	'preload' => array('log'), | ||||||
|  | 	'controllerNamespace' => 'frontend\controllers', | ||||||
|  | 	'modules' => array( | ||||||
|  | 	), | ||||||
|  | 	'components' => array( | ||||||
|  | 		'db' => $params['components.db'], | ||||||
|  | 		'cache' => $params['components.cache'], | ||||||
|  | 		'user' => array( | ||||||
|  | 			'class' => 'yii\web\User', | ||||||
|  | 			'identityClass' => 'common\models\User', | ||||||
|  | 		), | ||||||
|  | 		'assetManager' => array( | ||||||
|  | 			'bundles' => require(__DIR__ . '/assets.php'), | ||||||
|  | 		), | ||||||
|  | 		'log' => array( | ||||||
|  | 			'class' => 'yii\logging\Router', | ||||||
|  | 			'targets' => array( | ||||||
|  | 				array( | ||||||
|  | 					'class' => 'yii\logging\FileTarget', | ||||||
|  | 					'levels' => array('error', 'warning'), | ||||||
|  | 				), | ||||||
|  | 			), | ||||||
|  | 		), | ||||||
|  | 	), | ||||||
|  | 	'params' => $params, | ||||||
|  | ); | ||||||
| @ -0,0 +1,5 @@ | |||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | return array( | ||||||
|  | 	'adminEmail' => 'admin@example.com', | ||||||
|  | ); | ||||||
| @ -0,0 +1,61 @@ | |||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | namespace frontend\controllers; | ||||||
|  | 
 | ||||||
|  | use Yii; | ||||||
|  | use yii\web\Controller; | ||||||
|  | use common\models\LoginForm; | ||||||
|  | use frontend\models\ContactForm; | ||||||
|  | 
 | ||||||
|  | class SiteController extends Controller | ||||||
|  | { | ||||||
|  | 	public function actions() | ||||||
|  | 	{ | ||||||
|  | 		return array( | ||||||
|  | 			'captcha' => array( | ||||||
|  | 				'class' => 'yii\web\CaptchaAction', | ||||||
|  | 			), | ||||||
|  | 		); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public function actionIndex() | ||||||
|  | 	{ | ||||||
|  | 		echo $this->render('index'); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public function actionLogin() | ||||||
|  | 	{ | ||||||
|  | 		$model = new LoginForm(); | ||||||
|  | 		if ($this->populate($_POST, $model) && $model->login()) { | ||||||
|  | 			Yii::$app->response->redirect(array('site/index')); | ||||||
|  | 		} else { | ||||||
|  | 			echo $this->render('login', array( | ||||||
|  | 				'model' => $model, | ||||||
|  | 			)); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public function actionLogout() | ||||||
|  | 	{ | ||||||
|  | 		Yii::$app->getUser()->logout(); | ||||||
|  | 		Yii::$app->getResponse()->redirect(array('site/index')); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public function actionContact() | ||||||
|  | 	{ | ||||||
|  | 		$model = new ContactForm; | ||||||
|  | 		if ($this->populate($_POST, $model) && $model->contact(Yii::$app->params['adminEmail'])) { | ||||||
|  | 			Yii::$app->session->setFlash('contactFormSubmitted'); | ||||||
|  | 			Yii::$app->response->refresh(); | ||||||
|  | 		} else { | ||||||
|  | 			echo $this->render('contact', array( | ||||||
|  | 				'model' => $model, | ||||||
|  | 			)); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public function actionAbout() | ||||||
|  | 	{ | ||||||
|  | 		echo $this->render('about'); | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -0,0 +1,63 @@ | |||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | namespace frontend\models; | ||||||
|  | 
 | ||||||
|  | use yii\base\Model; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * ContactForm is the model behind the contact form. | ||||||
|  |  */ | ||||||
|  | class ContactForm extends Model | ||||||
|  | { | ||||||
|  | 	public $name; | ||||||
|  | 	public $email; | ||||||
|  | 	public $subject; | ||||||
|  | 	public $body; | ||||||
|  | 	public $verifyCode; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @return array the validation rules. | ||||||
|  | 	 */ | ||||||
|  | 	public function rules() | ||||||
|  | 	{ | ||||||
|  | 		return array( | ||||||
|  | 			// name, email, subject and body are required | ||||||
|  | 			array('name, email, subject, body', 'required'), | ||||||
|  | 			// email has to be a valid email address | ||||||
|  | 			array('email', 'email'), | ||||||
|  | 			// verifyCode needs to be entered correctly | ||||||
|  | 			array('verifyCode', 'captcha'), | ||||||
|  | 		); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @return array customized attribute labels | ||||||
|  | 	 */ | ||||||
|  | 	public function attributeLabels() | ||||||
|  | 	{ | ||||||
|  | 		return array( | ||||||
|  | 			'verifyCode' => 'Verification Code', | ||||||
|  | 		); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Sends an email to the specified email address using the information collected by this model. | ||||||
|  | 	 * @param string $email the target email address | ||||||
|  | 	 * @return boolean whether the model passes validation | ||||||
|  | 	 */ | ||||||
|  | 	public function contact($email) | ||||||
|  | 	{ | ||||||
|  | 		if ($this->validate()) { | ||||||
|  | 			$name = '=?UTF-8?B?' . base64_encode($this->name) . '?='; | ||||||
|  | 			$subject = '=?UTF-8?B?' . base64_encode($this->subject) . '?='; | ||||||
|  | 			$headers = "From: $name <{$this->email}>\r\n" . | ||||||
|  | 				"Reply-To: {$this->email}\r\n" . | ||||||
|  | 				"MIME-Version: 1.0\r\n" . | ||||||
|  | 				"Content-type: text/plain; charset=UTF-8"; | ||||||
|  | 			mail($email, $subject, $this->body, $headers); | ||||||
|  | 			return true; | ||||||
|  | 		} else { | ||||||
|  | 			return false; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -0,0 +1,2 @@ | |||||||
|  | * | ||||||
|  | !.gitignore | ||||||
| @ -0,0 +1,66 @@ | |||||||
|  | <?php | ||||||
|  | use yii\helpers\Html; | ||||||
|  | use yii\widgets\Menu; | ||||||
|  | use yii\widgets\Breadcrumbs; | ||||||
|  | use yii\debug\Toolbar; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * @var $this \yii\base\View | ||||||
|  |  * @var $content string | ||||||
|  |  */ | ||||||
|  | $this->registerAssetBundle('app'); | ||||||
|  | ?> | ||||||
|  | <?php $this->beginPage(); ?> | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <html lang="en"> | ||||||
|  | <head> | ||||||
|  | 	<meta charset="utf-8"/> | ||||||
|  | 	<title><?php echo Html::encode($this->title); ?></title>
 | ||||||
|  | 	<?php $this->head(); ?> | ||||||
|  | </head> | ||||||
|  | <body> | ||||||
|  | <div class="container"> | ||||||
|  | 	<?php $this->beginBody(); ?> | ||||||
|  | 	<div class="masthead"> | ||||||
|  | 		<h3 class="muted">My Company</h3> | ||||||
|  | 
 | ||||||
|  | 		<div class="navbar"> | ||||||
|  | 			<div class="navbar-inner"> | ||||||
|  | 				<div class="container"> | ||||||
|  | 					<?php echo Menu::widget(array( | ||||||
|  | 						'options' => array('class' => 'nav'), | ||||||
|  | 						'items' => array( | ||||||
|  | 							array('label' => 'Home', 'url' => array('/site/index')), | ||||||
|  | 							array('label' => 'About', 'url' => array('/site/about')), | ||||||
|  | 							array('label' => 'Contact', 'url' => array('/site/contact')), | ||||||
|  | 							Yii::$app->user->isGuest ? | ||||||
|  | 								array('label' => 'Login', 'url' => array('/site/login')) : | ||||||
|  | 								array('label' => 'Logout (' . Yii::$app->user->identity->username .')' , 'url' => array('/site/logout')), | ||||||
|  | 						), | ||||||
|  | 					)); ?> | ||||||
|  | 				</div> | ||||||
|  | 			</div> | ||||||
|  | 		</div> | ||||||
|  | 		<!-- /.navbar --> | ||||||
|  | 	</div> | ||||||
|  | 
 | ||||||
|  | 	<?php echo Breadcrumbs::widget(array( | ||||||
|  | 		'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : array(), | ||||||
|  | 	)); ?> | ||||||
|  | 	<?php echo $content; ?> | ||||||
|  | 
 | ||||||
|  | 	<hr> | ||||||
|  | 
 | ||||||
|  | 	<div class="footer"> | ||||||
|  | 		<p>© My Company <?php echo date('Y'); ?></p>
 | ||||||
|  | 		<p> | ||||||
|  | 			<?php echo Yii::powered(); ?> | ||||||
|  | 			Template by <a href="http://twitter.github.io/bootstrap/">Twitter Bootstrap</a> | ||||||
|  | 		</p> | ||||||
|  | 	</div> | ||||||
|  | 	<?php $this->endBody(); ?> | ||||||
|  | </div> | ||||||
|  | <?php echo Toolbar::widget(); ?> | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
|  | <?php $this->endPage(); ?> | ||||||
| @ -0,0 +1,16 @@ | |||||||
|  | <?php | ||||||
|  | use yii\helpers\Html; | ||||||
|  | /** | ||||||
|  |  * @var yii\base\View $this | ||||||
|  |  */ | ||||||
|  | $this->title = 'About'; | ||||||
|  | $this->params['breadcrumbs'][] = $this->title; | ||||||
|  | ?> | ||||||
|  | <h1><?php echo Html::encode($this->title); ?></h1>
 | ||||||
|  | 
 | ||||||
|  | <p> | ||||||
|  | 	This is the About page. You may modify the following file to customize its content: | ||||||
|  | </p> | ||||||
|  | 
 | ||||||
|  | <code><?php echo __FILE__; ?></code>
 | ||||||
|  | 
 | ||||||
| @ -0,0 +1,46 @@ | |||||||
|  | <?php | ||||||
|  | use yii\helpers\Html; | ||||||
|  | use yii\widgets\ActiveForm; | ||||||
|  | use yii\widgets\Captcha; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * @var yii\base\View $this | ||||||
|  |  * @var yii\widgets\ActiveForm $form | ||||||
|  |  * @var app\models\ContactForm $model | ||||||
|  |  */ | ||||||
|  | $this->title = 'Contact'; | ||||||
|  | $this->params['breadcrumbs'][] = $this->title; | ||||||
|  | ?> | ||||||
|  | <h1><?php echo Html::encode($this->title); ?></h1>
 | ||||||
|  | 
 | ||||||
|  | <?php if (Yii::$app->session->hasFlash('contactFormSubmitted')): ?> | ||||||
|  | <div class="alert alert-success"> | ||||||
|  | 	Thank you for contacting us. We will respond to you as soon as possible. | ||||||
|  | </div> | ||||||
|  | <?php return; endif; ?> | ||||||
|  | 
 | ||||||
|  | <p> | ||||||
|  | 	If you have business inquiries or other questions, please fill out the following form to contact us. Thank you. | ||||||
|  | </p> | ||||||
|  | 
 | ||||||
|  | <?php $form = ActiveForm::begin(array( | ||||||
|  | 	'options' => array('class' => 'form-horizontal'), | ||||||
|  | 	'fieldConfig' => array('inputOptions' => array('class' => 'input-xlarge')), | ||||||
|  | )); ?> | ||||||
|  | 	<?php echo $form->field($model, 'name')->textInput(); ?> | ||||||
|  | 	<?php echo $form->field($model, 'email')->textInput(); ?> | ||||||
|  | 	<?php echo $form->field($model, 'subject')->textInput(); ?> | ||||||
|  | 	<?php echo $form->field($model, 'body')->textArea(array('rows' => 6)); ?> | ||||||
|  | 	<?php | ||||||
|  | 		$field = $form->field($model, 'verifyCode'); | ||||||
|  | 		echo $field->begin() | ||||||
|  | 			. $field->label() | ||||||
|  | 			. Captcha::widget() | ||||||
|  | 			. Html::activeTextInput($model, 'verifyCode', array('class' => 'input-medium')) | ||||||
|  | 			. $field->error() | ||||||
|  | 			. $field->end(); | ||||||
|  | 	?> | ||||||
|  | 	<div class="form-actions"> | ||||||
|  | 		<?php echo Html::submitButton('Submit', null, null, array('class' => 'btn btn-primary')); ?> | ||||||
|  | 	</div> | ||||||
|  | <?php ActiveForm::end(); ?> | ||||||
| @ -0,0 +1,47 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * @var yii\base\View $this | ||||||
|  |  */ | ||||||
|  | $this->title = 'Welcome'; | ||||||
|  | ?> | ||||||
|  | <div class="jumbotron"> | ||||||
|  | 	<h1>Welcome!</h1> | ||||||
|  | 
 | ||||||
|  | 	<p class="lead">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Fusce dapibus, tellus ac cursus | ||||||
|  | 		commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p> | ||||||
|  | 	<a class="btn btn-large btn-success" href="http://www.yiiframework.com">Get started with Yii</a> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  | <hr> | ||||||
|  | 
 | ||||||
|  | <!-- Example row of columns --> | ||||||
|  | <div class="row-fluid"> | ||||||
|  | 	<div class="span4"> | ||||||
|  | 		<h2>Heading</h2> | ||||||
|  | 
 | ||||||
|  | 		<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris | ||||||
|  | 			condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. | ||||||
|  | 			Donec sed odio dui. </p> | ||||||
|  | 
 | ||||||
|  | 		<p><a class="btn" href="#">View details »</a></p> | ||||||
|  | 	</div> | ||||||
|  | 	<div class="span4"> | ||||||
|  | 		<h2>Heading</h2> | ||||||
|  | 
 | ||||||
|  | 		<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris | ||||||
|  | 			condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. | ||||||
|  | 			Donec sed odio dui. </p> | ||||||
|  | 
 | ||||||
|  | 		<p><a class="btn" href="#">View details »</a></p> | ||||||
|  | 	</div> | ||||||
|  | 	<div class="span4"> | ||||||
|  | 		<h2>Heading</h2> | ||||||
|  | 
 | ||||||
|  | 		<p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta | ||||||
|  | 			felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum | ||||||
|  | 			massa.</p> | ||||||
|  | 
 | ||||||
|  | 		<p><a class="btn" href="#">View details »</a></p> | ||||||
|  | 	</div> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
| @ -0,0 +1,24 @@ | |||||||
|  | <?php | ||||||
|  | use yii\helpers\Html; | ||||||
|  | use yii\widgets\ActiveForm; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * @var yii\base\View $this | ||||||
|  |  * @var yii\widgets\ActiveForm $form | ||||||
|  |  * @var app\models\LoginForm $model | ||||||
|  |  */ | ||||||
|  | $this->title = 'Login'; | ||||||
|  | $this->params['breadcrumbs'][] = $this->title; | ||||||
|  | ?> | ||||||
|  | <h1><?php echo Html::encode($this->title); ?></h1>
 | ||||||
|  | 
 | ||||||
|  | <p>Please fill out the following fields to login:</p> | ||||||
|  | 
 | ||||||
|  | <?php $form = ActiveForm::begin(array('options' => array('class' => 'form-horizontal'))); ?> | ||||||
|  | 	<?php echo $form->field($model, 'username')->textInput(); ?> | ||||||
|  | 	<?php echo $form->field($model, 'password')->passwordInput(); ?> | ||||||
|  | 	<?php echo $form->field($model, 'rememberMe')->checkbox(); ?> | ||||||
|  | 	<div class="form-actions"> | ||||||
|  | 		<?php echo Html::submitButton('Login', null, null, array('class' => 'btn btn-primary')); ?> | ||||||
|  | 	</div> | ||||||
|  | <?php ActiveForm::end(); ?> | ||||||
| @ -0,0 +1,2 @@ | |||||||
|  | * | ||||||
|  | !.gitignore | ||||||
| @ -0,0 +1,78 @@ | |||||||
|  | body { | ||||||
|  | 	padding-top: 20px; | ||||||
|  | 	padding-bottom: 60px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Custom container */ | ||||||
|  | .container { | ||||||
|  | 	margin: 0 auto; | ||||||
|  | 	max-width: 1000px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .container > hr { | ||||||
|  | 	margin: 60px 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Main marketing message and sign up button */ | ||||||
|  | .jumbotron { | ||||||
|  | 	margin: 80px 0; | ||||||
|  | 	text-align: center; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .jumbotron h1 { | ||||||
|  | 	font-size: 100px; | ||||||
|  | 	line-height: 1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .jumbotron .lead { | ||||||
|  | 	font-size: 24px; | ||||||
|  | 	line-height: 1.25; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .jumbotron .btn { | ||||||
|  | 	font-size: 21px; | ||||||
|  | 	padding: 14px 24px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Supporting marketing content */ | ||||||
|  | .marketing { | ||||||
|  | 	margin: 60px 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .marketing p + h4 { | ||||||
|  | 	margin-top: 28px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Customize the navbar links to be fill the entire space of the .navbar */ | ||||||
|  | .navbar .navbar-inner { | ||||||
|  | 	padding: 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .navbar .nav { | ||||||
|  | 	margin: 0; | ||||||
|  | 	display: table; | ||||||
|  | 	width: 100%; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .navbar .nav li { | ||||||
|  | 	display: table-cell; | ||||||
|  | 	width: 1%; | ||||||
|  | 	float: none; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .navbar .nav li a { | ||||||
|  | 	font-weight: bold; | ||||||
|  | 	text-align: center; | ||||||
|  | 	border-left: 1px solid rgba(255, 255, 255, .75); | ||||||
|  | 	border-right: 1px solid rgba(0, 0, 0, .1); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .navbar .nav li:first-child a { | ||||||
|  | 	border-left: 0; | ||||||
|  | 	border-radius: 3px 0 0 3px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .navbar .nav li:last-child a { | ||||||
|  | 	border-right: 0; | ||||||
|  | 	border-radius: 0 3px 3px 0; | ||||||
|  | } | ||||||
| @ -0,0 +1,112 @@ | |||||||
|  | #!/usr/bin/env php | ||||||
|  | <?php | ||||||
|  | $root = str_replace('\\', '/', __DIR__); | ||||||
|  | $envs = require("$root/environments/index.php"); | ||||||
|  | $envNames = array_keys($envs); | ||||||
|  | 
 | ||||||
|  | echo "Yii Application Installation Tool v1.0\n\n"; | ||||||
|  | echo "Which environment do you want to install the application to?\n\n"; | ||||||
|  | foreach ($envNames as $i => $name) { | ||||||
|  | 	echo "  [$i] $name\n"; | ||||||
|  | } | ||||||
|  | echo "\n  Your choice [0-" . (count($envs) - 1) . ', or "q" to quit] '; | ||||||
|  | $answer = trim(fgets(STDIN)); | ||||||
|  | if (!ctype_digit($answer) || !isset($envNames[$answer])) { | ||||||
|  | 	echo "\n  Quit installation.\n"; | ||||||
|  | 	return; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | $env = $envs[$envNames[$answer]]; | ||||||
|  | echo "\n  Install the application under '{$envNames[$answer]}' environment? [yes|no] "; | ||||||
|  | $answer = trim(fgets(STDIN)); | ||||||
|  | if (strncasecmp($answer, 'y', 1)) { | ||||||
|  | 	echo "\n  Quit installation.\n"; | ||||||
|  | 	return; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | echo "\n  Start installation ...\n\n"; | ||||||
|  | $files = getFileList("$root/environments/{$env['path']}"); | ||||||
|  | $all = false; | ||||||
|  | foreach ($files as $file) { | ||||||
|  | 	if (!copyFile($root, "environments/{$env['path']}/$file", $file, $all)) { | ||||||
|  | 		break; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | if (isset($env['writable'])) { | ||||||
|  | 	foreach ($env['writable'] as $writable) { | ||||||
|  | 		echo "      chmod 0777 $writable\n"; | ||||||
|  | 		@chmod("$root/$writable", 0777); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | if (isset($env['executable'])) { | ||||||
|  | 	foreach ($env['executable'] as $executable) { | ||||||
|  | 		echo "      chmod 0755 $executable\n"; | ||||||
|  | 		@chmod("$root/$executable", 0755); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | echo "\n  ... installation completed.\n\n"; | ||||||
|  | 
 | ||||||
|  | function getFileList($root, $basePath = '') | ||||||
|  | { | ||||||
|  | 	$files = array(); | ||||||
|  | 	$handle = opendir($root); | ||||||
|  | 	while (($path = readdir($handle)) !== false) { | ||||||
|  | 		if ($path === '.svn' || $path === '.' || $path === '..') { | ||||||
|  | 			continue; | ||||||
|  | 		} | ||||||
|  | 		$fullPath = "$root/$path"; | ||||||
|  | 		$relativePath = $basePath === '' ? $path : "$basePath/$path"; | ||||||
|  | 		if (is_dir($fullPath)) { | ||||||
|  | 			$files = array_merge($files, getFileList($fullPath, $relativePath)); | ||||||
|  | 		} else { | ||||||
|  | 			$files[] = $relativePath; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	closedir($handle); | ||||||
|  | 	return $files; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function copyFile($root, $source, $target, &$all) | ||||||
|  | { | ||||||
|  | 	if (!is_file($root . '/' . $source)) { | ||||||
|  | 		echo "       skip $target ($source not exist)\n"; | ||||||
|  | 		return true; | ||||||
|  | 	} | ||||||
|  | 	if (is_file($root . '/' . $target)) { | ||||||
|  | 		if (file_get_contents($root . '/' . $source) === file_get_contents($root . '/' . $target)) { | ||||||
|  | 			echo "  unchanged $target\n"; | ||||||
|  | 			return true; | ||||||
|  | 		} | ||||||
|  | 		if ($all) { | ||||||
|  | 			echo "  overwrite $target\n"; | ||||||
|  | 		} else { | ||||||
|  | 			echo "      exist $target\n"; | ||||||
|  | 			echo "            ...overwrite? [Yes|No|All|Quit] "; | ||||||
|  | 			$answer = trim(fgets(STDIN)); | ||||||
|  | 			if (!strncasecmp($answer, 'q', 1)) { | ||||||
|  | 				return false; | ||||||
|  | 			} else { | ||||||
|  | 				if (!strncasecmp($answer, 'y', 1)) { | ||||||
|  | 					echo "  overwrite $target\n"; | ||||||
|  | 				} else { | ||||||
|  | 					if (!strncasecmp($answer, 'a', 1)) { | ||||||
|  | 						echo "  overwrite $target\n"; | ||||||
|  | 						$all = true; | ||||||
|  | 					} else { | ||||||
|  | 						echo "       skip $target\n"; | ||||||
|  | 						return true; | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		file_put_contents($root . '/' . $target, file_get_contents($root . '/' . $source)); | ||||||
|  | 		return true; | ||||||
|  | 	} | ||||||
|  | 	echo "   generate $target\n"; | ||||||
|  | 	@mkdir(dirname($root . '/' . $target), 0777, true); | ||||||
|  | 	file_put_contents($root . '/' . $target, file_get_contents($root . '/' . $source)); | ||||||
|  | 	return true; | ||||||
|  | } | ||||||
| @ -0,0 +1,20 @@ | |||||||
|  | @echo off | ||||||
|  | 
 | ||||||
|  | rem ------------------------------------------------------------- | ||||||
|  | rem  Yii command line install script for Windows. | ||||||
|  | rem | ||||||
|  | rem  @author Qiang Xue <qiang.xue@gmail.com> | ||||||
|  | rem  @link http://www.yiiframework.com/ | ||||||
|  | rem  @copyright Copyright © 2012 Yii Software LLC | ||||||
|  | rem  @license http://www.yiiframework.com/license/ | ||||||
|  | rem ------------------------------------------------------------- | ||||||
|  | 
 | ||||||
|  | @setlocal | ||||||
|  | 
 | ||||||
|  | set YII_PATH=%~dp0 | ||||||
|  | 
 | ||||||
|  | if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe | ||||||
|  | 
 | ||||||
|  | "%PHP_COMMAND%" "%YII_PATH%install" %* | ||||||
|  | 
 | ||||||
|  | @endlocal | ||||||
| @ -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,20 @@ | |||||||
|  | @echo off | ||||||
|  | 
 | ||||||
|  | rem ------------------------------------------------------------- | ||||||
|  | rem  Yii command line bootstrap script for Windows. | ||||||
|  | rem | ||||||
|  | rem  @author Qiang Xue <qiang.xue@gmail.com> | ||||||
|  | rem  @link http://www.yiiframework.com/ | ||||||
|  | rem  @copyright Copyright © 2012 Yii Software LLC | ||||||
|  | rem  @license http://www.yiiframework.com/license/ | ||||||
|  | rem ------------------------------------------------------------- | ||||||
|  | 
 | ||||||
|  | @setlocal | ||||||
|  | 
 | ||||||
|  | set YII_PATH=%~dp0 | ||||||
|  | 
 | ||||||
|  | if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe | ||||||
|  | 
 | ||||||
|  | "%PHP_COMMAND%" "%YII_PATH%yii" %* | ||||||
|  | 
 | ||||||
|  | @endlocal | ||||||
					Loading…
					
					
				
		Reference in new issue