From 0fb30f8d25eaef1072bd0583a97d2b218b40fa63 Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Fri, 24 May 2013 21:47:27 +0400 Subject: [PATCH 01/14] Advanced application template --- apps/advanced/LICENSE.md | 32 ++++++++ apps/advanced/README.md | 89 ++++++++++++++++++++ apps/advanced/backstage/assets/.gitkeep | 1 + apps/advanced/backstage/config/.gitignore | 2 + apps/advanced/backstage/config/assets.php | 18 ++++ apps/advanced/backstage/config/main.php | 46 +++++++++++ apps/advanced/backstage/config/params.php | 5 ++ .../backstage/controllers/SiteController.php | 61 ++++++++++++++ apps/advanced/backstage/models/.gitkeep | 1 + apps/advanced/backstage/runtime/.gitignore | 2 + apps/advanced/backstage/views/layouts/main.php | 66 +++++++++++++++ apps/advanced/backstage/views/site/about.php | 16 ++++ apps/advanced/backstage/views/site/contact.php | 46 +++++++++++ apps/advanced/backstage/views/site/index.php | 47 +++++++++++ apps/advanced/backstage/views/site/login.php | 24 ++++++ apps/advanced/backstage/www/assets/.gitignore | 2 + apps/advanced/backstage/www/css/site.css | 78 ++++++++++++++++++ apps/advanced/common/config/.gitignore | 1 + apps/advanced/common/config/params.php | 9 ++ apps/advanced/common/models/ContactForm.php | 63 ++++++++++++++ apps/advanced/common/models/LoginForm.php | 58 +++++++++++++ apps/advanced/common/models/User.php | 61 ++++++++++++++ apps/advanced/composer.json | 44 ++++++++++ apps/advanced/console/config/.gitignore | 2 + apps/advanced/console/config/main.php | 34 ++++++++ apps/advanced/console/config/params.php | 5 ++ .../console/controllers/HelloController.php | 29 +++++++ .../console/controllers/InstallController.php | 13 +++ apps/advanced/console/migrations/.gitkeep | 1 + apps/advanced/console/runtime/.gitignore | 2 + apps/advanced/frontend/assets/.gitkeep | 2 + apps/advanced/frontend/config/.gitignore | 2 + apps/advanced/frontend/config/assets.php | 18 ++++ apps/advanced/frontend/config/main.php | 46 +++++++++++ apps/advanced/frontend/config/params.php | 5 ++ .../frontend/controllers/SiteController.php | 61 ++++++++++++++ apps/advanced/frontend/models/ContactForm.php | 63 ++++++++++++++ apps/advanced/frontend/models/LoginForm.php | 58 +++++++++++++ apps/advanced/frontend/models/User.php | 61 ++++++++++++++ apps/advanced/frontend/runtime/.gitignore | 2 + apps/advanced/frontend/views/layouts/main.php | 66 +++++++++++++++ apps/advanced/frontend/views/site/about.php | 16 ++++ apps/advanced/frontend/views/site/contact.php | 46 +++++++++++ apps/advanced/frontend/views/site/index.php | 47 +++++++++++ apps/advanced/frontend/views/site/login.php | 24 ++++++ apps/advanced/frontend/www/assets/.gitignore | 2 + apps/advanced/frontend/www/css/site.css | 78 ++++++++++++++++++ .../install/dev/backstage/config/main-local.php | 3 + .../install/dev/backstage/config/params-local.php | 3 + apps/advanced/install/dev/backstage/www/index.php | 14 ++++ .../install/dev/common/config/params-local.php | 3 + .../install/dev/console/config/main-local.php | 3 + .../install/dev/console/config/params-local.php | 3 + .../install/dev/frontend/config/main-local.php | 3 + .../install/dev/frontend/config/params-local.php | 3 + apps/advanced/install/dev/frontend/www/index.php | 15 ++++ apps/advanced/requirements.php | 96 ++++++++++++++++++++++ apps/advanced/vendor/.gitignore | 2 + apps/advanced/yii | 26 ++++++ apps/advanced/yii.bat | 20 +++++ 60 files changed, 1649 insertions(+) create mode 100644 apps/advanced/LICENSE.md create mode 100644 apps/advanced/README.md create mode 100644 apps/advanced/backstage/assets/.gitkeep create mode 100644 apps/advanced/backstage/config/.gitignore create mode 100644 apps/advanced/backstage/config/assets.php create mode 100644 apps/advanced/backstage/config/main.php create mode 100644 apps/advanced/backstage/config/params.php create mode 100644 apps/advanced/backstage/controllers/SiteController.php create mode 100644 apps/advanced/backstage/models/.gitkeep create mode 100644 apps/advanced/backstage/runtime/.gitignore create mode 100644 apps/advanced/backstage/views/layouts/main.php create mode 100644 apps/advanced/backstage/views/site/about.php create mode 100644 apps/advanced/backstage/views/site/contact.php create mode 100644 apps/advanced/backstage/views/site/index.php create mode 100644 apps/advanced/backstage/views/site/login.php create mode 100644 apps/advanced/backstage/www/assets/.gitignore create mode 100644 apps/advanced/backstage/www/css/site.css create mode 100644 apps/advanced/common/config/.gitignore create mode 100644 apps/advanced/common/config/params.php create mode 100644 apps/advanced/common/models/ContactForm.php create mode 100644 apps/advanced/common/models/LoginForm.php create mode 100644 apps/advanced/common/models/User.php create mode 100644 apps/advanced/composer.json create mode 100644 apps/advanced/console/config/.gitignore create mode 100644 apps/advanced/console/config/main.php create mode 100644 apps/advanced/console/config/params.php create mode 100644 apps/advanced/console/controllers/HelloController.php create mode 100644 apps/advanced/console/controllers/InstallController.php create mode 100644 apps/advanced/console/migrations/.gitkeep create mode 100644 apps/advanced/console/runtime/.gitignore create mode 100644 apps/advanced/frontend/assets/.gitkeep create mode 100644 apps/advanced/frontend/config/.gitignore create mode 100644 apps/advanced/frontend/config/assets.php create mode 100644 apps/advanced/frontend/config/main.php create mode 100644 apps/advanced/frontend/config/params.php create mode 100644 apps/advanced/frontend/controllers/SiteController.php create mode 100644 apps/advanced/frontend/models/ContactForm.php create mode 100644 apps/advanced/frontend/models/LoginForm.php create mode 100644 apps/advanced/frontend/models/User.php create mode 100644 apps/advanced/frontend/runtime/.gitignore create mode 100644 apps/advanced/frontend/views/layouts/main.php create mode 100644 apps/advanced/frontend/views/site/about.php create mode 100644 apps/advanced/frontend/views/site/contact.php create mode 100644 apps/advanced/frontend/views/site/index.php create mode 100644 apps/advanced/frontend/views/site/login.php create mode 100644 apps/advanced/frontend/www/assets/.gitignore create mode 100644 apps/advanced/frontend/www/css/site.css create mode 100644 apps/advanced/install/dev/backstage/config/main-local.php create mode 100644 apps/advanced/install/dev/backstage/config/params-local.php create mode 100644 apps/advanced/install/dev/backstage/www/index.php create mode 100644 apps/advanced/install/dev/common/config/params-local.php create mode 100644 apps/advanced/install/dev/console/config/main-local.php create mode 100644 apps/advanced/install/dev/console/config/params-local.php create mode 100644 apps/advanced/install/dev/frontend/config/main-local.php create mode 100644 apps/advanced/install/dev/frontend/config/params-local.php create mode 100644 apps/advanced/install/dev/frontend/www/index.php create mode 100644 apps/advanced/requirements.php create mode 100644 apps/advanced/vendor/.gitignore create mode 100644 apps/advanced/yii create mode 100644 apps/advanced/yii.bat diff --git a/apps/advanced/LICENSE.md b/apps/advanced/LICENSE.md new file mode 100644 index 0000000..6edcc4f --- /dev/null +++ b/apps/advanced/LICENSE.md @@ -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. \ No newline at end of file diff --git a/apps/advanced/README.md b/apps/advanced/README.md new file mode 100644 index 0000000..08f0b0d --- /dev/null +++ b/apps/advanced/README.md @@ -0,0 +1,89 @@ +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 + env/ contains environment-based overrides + models/ contains model classes used in both backstage and frontend +console + config/ contains console configurations + controllers/ contains console controllers (commands) + env/ contains environment-based overrides + 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 + env/ contains environment-based overrides + 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 + env/ contains environment-based overrides + 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 +``` + + + +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. diff --git a/apps/advanced/backstage/assets/.gitkeep b/apps/advanced/backstage/assets/.gitkeep new file mode 100644 index 0000000..72e8ffc --- /dev/null +++ b/apps/advanced/backstage/assets/.gitkeep @@ -0,0 +1 @@ +* diff --git a/apps/advanced/backstage/config/.gitignore b/apps/advanced/backstage/config/.gitignore new file mode 100644 index 0000000..20da318 --- /dev/null +++ b/apps/advanced/backstage/config/.gitignore @@ -0,0 +1,2 @@ +main-local.php +params-local.php \ No newline at end of file diff --git a/apps/advanced/backstage/config/assets.php b/apps/advanced/backstage/config/assets.php new file mode 100644 index 0000000..ee0d610 --- /dev/null +++ b/apps/advanced/backstage/config/assets.php @@ -0,0 +1,18 @@ + array( + 'basePath' => '@wwwroot', + 'baseUrl' => '@www', + 'css' => array( + 'css/site.css', + ), + 'js' => array( + + ), + 'depends' => array( + 'yii', + 'yii/bootstrap/responsive', + ), + ), +); diff --git a/apps/advanced/backstage/config/main.php b/apps/advanced/backstage/config/main.php new file mode 100644 index 0000000..3fb95da --- /dev/null +++ b/apps/advanced/backstage/config/main.php @@ -0,0 +1,46 @@ + 'change-me', + 'basePath' => dirname(__DIR__), + 'preload' => array('log'), + 'controllerNamespace' => 'app\controllers', + 'modules' => array( +// 'debug' => array( +// 'class' => 'yii\debug\Module', +// ) + ), + 'components' => array( + 'cache' => array( + 'class' => 'yii\caching\FileCache', + ), + 'user' => array( + 'class' => 'yii\web\User', + 'identityClass' => 'app\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'), + ), +// array( +// 'class' => 'yii\logging\DebugTarget', +// ) + ), + ), + ), + 'params' => $params, +); diff --git a/apps/advanced/backstage/config/params.php b/apps/advanced/backstage/config/params.php new file mode 100644 index 0000000..1e197d0 --- /dev/null +++ b/apps/advanced/backstage/config/params.php @@ -0,0 +1,5 @@ + 'admin@example.com', +); \ No newline at end of file diff --git a/apps/advanced/backstage/controllers/SiteController.php b/apps/advanced/backstage/controllers/SiteController.php new file mode 100644 index 0000000..ff3b8b4 --- /dev/null +++ b/apps/advanced/backstage/controllers/SiteController.php @@ -0,0 +1,61 @@ + 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'); + } +} diff --git a/apps/advanced/backstage/models/.gitkeep b/apps/advanced/backstage/models/.gitkeep new file mode 100644 index 0000000..72e8ffc --- /dev/null +++ b/apps/advanced/backstage/models/.gitkeep @@ -0,0 +1 @@ +* diff --git a/apps/advanced/backstage/runtime/.gitignore b/apps/advanced/backstage/runtime/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/apps/advanced/backstage/runtime/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/apps/advanced/backstage/views/layouts/main.php b/apps/advanced/backstage/views/layouts/main.php new file mode 100644 index 0000000..635e118 --- /dev/null +++ b/apps/advanced/backstage/views/layouts/main.php @@ -0,0 +1,66 @@ +registerAssetBundle('app'); +?> +beginPage(); ?> + + + + + <?php echo Html::encode($this->title); ?> + head(); ?> + + +
+ beginBody(); ?> +
+

My Company

+ + + +
+ + isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : array(), + )); ?> + + +
+ + + endBody(); ?> +
+ + + +endPage(); ?> diff --git a/apps/advanced/backstage/views/site/about.php b/apps/advanced/backstage/views/site/about.php new file mode 100644 index 0000000..86e19e1 --- /dev/null +++ b/apps/advanced/backstage/views/site/about.php @@ -0,0 +1,16 @@ +title = 'About'; +$this->params['breadcrumbs'][] = $this->title; +?> +

title); ?>

+ +

+ This is the About page. You may modify the following file to customize its content: +

+ + + diff --git a/apps/advanced/backstage/views/site/contact.php b/apps/advanced/backstage/views/site/contact.php new file mode 100644 index 0000000..e740d0f --- /dev/null +++ b/apps/advanced/backstage/views/site/contact.php @@ -0,0 +1,46 @@ +title = 'Contact'; +$this->params['breadcrumbs'][] = $this->title; +?> +

title); ?>

+ +session->hasFlash('contactFormSubmitted')): ?> +
+ Thank you for contacting us. We will respond to you as soon as possible. +
+ + +

+ If you have business inquiries or other questions, please fill out the following form to contact us. Thank you. +

+ + array('class' => 'form-horizontal'), + 'fieldConfig' => array('inputOptions' => array('class' => 'input-xlarge')), +)); ?> + field($model, 'name')->textInput(); ?> + field($model, 'email')->textInput(); ?> + field($model, 'subject')->textInput(); ?> + field($model, 'body')->textArea(array('rows' => 6)); ?> + field($model, 'verifyCode'); + echo $field->begin() + . $field->label() + . Captcha::widget() + . Html::activeTextInput($model, 'verifyCode', array('class' => 'input-medium')) + . $field->error() + . $field->end(); + ?> +
+ 'btn btn-primary')); ?> +
+ diff --git a/apps/advanced/backstage/views/site/index.php b/apps/advanced/backstage/views/site/index.php new file mode 100644 index 0000000..158b61c --- /dev/null +++ b/apps/advanced/backstage/views/site/index.php @@ -0,0 +1,47 @@ +title = 'Welcome'; +?> +
+

Welcome!

+ +

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.

+ Get started with Yii +
+ +
+ + +
+
+

Heading

+ +

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.

+ +

View details »

+
+
+

Heading

+ +

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.

+ +

View details »

+
+
+

Heading

+ +

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.

+ +

View details »

+
+
+ diff --git a/apps/advanced/backstage/views/site/login.php b/apps/advanced/backstage/views/site/login.php new file mode 100644 index 0000000..f676b98 --- /dev/null +++ b/apps/advanced/backstage/views/site/login.php @@ -0,0 +1,24 @@ +title = 'Login'; +$this->params['breadcrumbs'][] = $this->title; +?> +

title); ?>

+ +

Please fill out the following fields to login:

+ + array('class' => 'form-horizontal'))); ?> + field($model, 'username')->textInput(); ?> + field($model, 'password')->passwordInput(); ?> + field($model, 'rememberMe')->checkbox(); ?> +
+ 'btn btn-primary')); ?> +
+ diff --git a/apps/advanced/backstage/www/assets/.gitignore b/apps/advanced/backstage/www/assets/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/apps/advanced/backstage/www/assets/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/apps/advanced/backstage/www/css/site.css b/apps/advanced/backstage/www/css/site.css new file mode 100644 index 0000000..890a953 --- /dev/null +++ b/apps/advanced/backstage/www/css/site.css @@ -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; +} diff --git a/apps/advanced/common/config/.gitignore b/apps/advanced/common/config/.gitignore new file mode 100644 index 0000000..46f6eb4 --- /dev/null +++ b/apps/advanced/common/config/.gitignore @@ -0,0 +1 @@ +params-local.php \ No newline at end of file diff --git a/apps/advanced/common/config/params.php b/apps/advanced/common/config/params.php new file mode 100644 index 0000000..9eb2b15 --- /dev/null +++ b/apps/advanced/common/config/params.php @@ -0,0 +1,9 @@ + 'admin@example.com', + + 'component.cache' => array( + 'class' => 'yii\caching\FileCache', + ), +); \ No newline at end of file diff --git a/apps/advanced/common/models/ContactForm.php b/apps/advanced/common/models/ContactForm.php new file mode 100644 index 0000000..7b713a1 --- /dev/null +++ b/apps/advanced/common/models/ContactForm.php @@ -0,0 +1,63 @@ + '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; + } + } +} diff --git a/apps/advanced/common/models/LoginForm.php b/apps/advanced/common/models/LoginForm.php new file mode 100644 index 0000000..5ba1dc6 --- /dev/null +++ b/apps/advanced/common/models/LoginForm.php @@ -0,0 +1,58 @@ +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; + } + } +} diff --git a/apps/advanced/common/models/User.php b/apps/advanced/common/models/User.php new file mode 100644 index 0000000..afbf9f8 --- /dev/null +++ b/apps/advanced/common/models/User.php @@ -0,0 +1,61 @@ + array( + 'id' => '100', + 'username' => 'admin', + 'password' => 'admin', + 'authKey' => 'test100key', + ), + '101' => array( + 'id' => '101', + 'username' => 'demo', + 'password' => 'demo', + 'authKey' => 'test101key', + ), + ); + + public static function findIdentity($id) + { + return isset(self::$users[$id]) ? new self(self::$users[$id]) : null; + } + + public static function findByUsername($username) + { + foreach (self::$users as $user) { + if (strcasecmp($user['username'], $username) === 0) { + return new self($user); + } + } + return null; + } + + public function getId() + { + return $this->id; + } + + public function getAuthKey() + { + return $this->authKey; + } + + public function validateAuthKey($authKey) + { + return $this->authKey === $authKey; + } + + public function validatePassword($password) + { + return $this->password === $password; + } +} diff --git a/apps/advanced/composer.json b/apps/advanced/composer.json new file mode 100644 index 0000000..a5ff565 --- /dev/null +++ b/apps/advanced/composer.json @@ -0,0 +1,44 @@ +{ + "name": "yiisoft/yii2-app-basic", + "description": "Yii 2 Basic Application Template", + "keywords": ["yii", "framework", "basic", "application template"], + "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": { + "yii-install-writable": [ + "backstage/runtime", + "backstage/www/assets", + + "console/runtime", + "console/migrations", + + "frontend/runtime", + "frontend/www/assets" + ], + "yii-install-executable": [ + "yii" + ] + } +} diff --git a/apps/advanced/console/config/.gitignore b/apps/advanced/console/config/.gitignore new file mode 100644 index 0000000..20da318 --- /dev/null +++ b/apps/advanced/console/config/.gitignore @@ -0,0 +1,2 @@ +main-local.php +params-local.php \ No newline at end of file diff --git a/apps/advanced/console/config/main.php b/apps/advanced/console/config/main.php new file mode 100644 index 0000000..7af7824 --- /dev/null +++ b/apps/advanced/console/config/main.php @@ -0,0 +1,34 @@ + 'bootstrap-console', + 'basePath' => dirname(__DIR__), + 'preload' => array('log'), + 'controllerPath' => dirname(__DIR__) . '/commands', + 'controllerNamespace' => 'app\controllers', + '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' => $params, +); diff --git a/apps/advanced/console/config/params.php b/apps/advanced/console/config/params.php new file mode 100644 index 0000000..1e197d0 --- /dev/null +++ b/apps/advanced/console/config/params.php @@ -0,0 +1,5 @@ + 'admin@example.com', +); \ No newline at end of file diff --git a/apps/advanced/console/controllers/HelloController.php b/apps/advanced/console/controllers/HelloController.php new file mode 100644 index 0000000..603c6e8 --- /dev/null +++ b/apps/advanced/console/controllers/HelloController.php @@ -0,0 +1,29 @@ + + * @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."\n"; + } +} \ No newline at end of file diff --git a/apps/advanced/console/controllers/InstallController.php b/apps/advanced/console/controllers/InstallController.php new file mode 100644 index 0000000..cbc2227 --- /dev/null +++ b/apps/advanced/console/controllers/InstallController.php @@ -0,0 +1,13 @@ + array( + 'basePath' => '@wwwroot', + 'baseUrl' => '@www', + 'css' => array( + 'css/site.css', + ), + 'js' => array( + + ), + 'depends' => array( + 'yii', + 'yii/bootstrap/responsive', + ), + ), +); diff --git a/apps/advanced/frontend/config/main.php b/apps/advanced/frontend/config/main.php new file mode 100644 index 0000000..9379e06 --- /dev/null +++ b/apps/advanced/frontend/config/main.php @@ -0,0 +1,46 @@ + 'bootstrap', + 'basePath' => dirname(__DIR__), + 'preload' => array('log'), + 'controllerNamespace' => 'app\controllers', + 'modules' => array( +// 'debug' => array( +// 'class' => 'yii\debug\Module', +// ) + ), + 'components' => array( + 'cache' => array( + 'class' => 'yii\caching\FileCache', + ), + 'user' => array( + 'class' => 'yii\web\User', + 'identityClass' => 'app\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'), + ), +// array( +// 'class' => 'yii\logging\DebugTarget', +// ) + ), + ), + ), + 'params' => $params, +); diff --git a/apps/advanced/frontend/config/params.php b/apps/advanced/frontend/config/params.php new file mode 100644 index 0000000..1e197d0 --- /dev/null +++ b/apps/advanced/frontend/config/params.php @@ -0,0 +1,5 @@ + 'admin@example.com', +); \ No newline at end of file diff --git a/apps/advanced/frontend/controllers/SiteController.php b/apps/advanced/frontend/controllers/SiteController.php new file mode 100644 index 0000000..ff3b8b4 --- /dev/null +++ b/apps/advanced/frontend/controllers/SiteController.php @@ -0,0 +1,61 @@ + 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'); + } +} diff --git a/apps/advanced/frontend/models/ContactForm.php b/apps/advanced/frontend/models/ContactForm.php new file mode 100644 index 0000000..7b713a1 --- /dev/null +++ b/apps/advanced/frontend/models/ContactForm.php @@ -0,0 +1,63 @@ + '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; + } + } +} diff --git a/apps/advanced/frontend/models/LoginForm.php b/apps/advanced/frontend/models/LoginForm.php new file mode 100644 index 0000000..5ba1dc6 --- /dev/null +++ b/apps/advanced/frontend/models/LoginForm.php @@ -0,0 +1,58 @@ +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; + } + } +} diff --git a/apps/advanced/frontend/models/User.php b/apps/advanced/frontend/models/User.php new file mode 100644 index 0000000..afbf9f8 --- /dev/null +++ b/apps/advanced/frontend/models/User.php @@ -0,0 +1,61 @@ + array( + 'id' => '100', + 'username' => 'admin', + 'password' => 'admin', + 'authKey' => 'test100key', + ), + '101' => array( + 'id' => '101', + 'username' => 'demo', + 'password' => 'demo', + 'authKey' => 'test101key', + ), + ); + + public static function findIdentity($id) + { + return isset(self::$users[$id]) ? new self(self::$users[$id]) : null; + } + + public static function findByUsername($username) + { + foreach (self::$users as $user) { + if (strcasecmp($user['username'], $username) === 0) { + return new self($user); + } + } + return null; + } + + public function getId() + { + return $this->id; + } + + public function getAuthKey() + { + return $this->authKey; + } + + public function validateAuthKey($authKey) + { + return $this->authKey === $authKey; + } + + public function validatePassword($password) + { + return $this->password === $password; + } +} diff --git a/apps/advanced/frontend/runtime/.gitignore b/apps/advanced/frontend/runtime/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/apps/advanced/frontend/runtime/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/apps/advanced/frontend/views/layouts/main.php b/apps/advanced/frontend/views/layouts/main.php new file mode 100644 index 0000000..635e118 --- /dev/null +++ b/apps/advanced/frontend/views/layouts/main.php @@ -0,0 +1,66 @@ +registerAssetBundle('app'); +?> +beginPage(); ?> + + + + + <?php echo Html::encode($this->title); ?> + head(); ?> + + +
+ beginBody(); ?> +
+

My Company

+ + + +
+ + isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : array(), + )); ?> + + +
+ + + endBody(); ?> +
+ + + +endPage(); ?> diff --git a/apps/advanced/frontend/views/site/about.php b/apps/advanced/frontend/views/site/about.php new file mode 100644 index 0000000..86e19e1 --- /dev/null +++ b/apps/advanced/frontend/views/site/about.php @@ -0,0 +1,16 @@ +title = 'About'; +$this->params['breadcrumbs'][] = $this->title; +?> +

title); ?>

+ +

+ This is the About page. You may modify the following file to customize its content: +

+ + + diff --git a/apps/advanced/frontend/views/site/contact.php b/apps/advanced/frontend/views/site/contact.php new file mode 100644 index 0000000..e740d0f --- /dev/null +++ b/apps/advanced/frontend/views/site/contact.php @@ -0,0 +1,46 @@ +title = 'Contact'; +$this->params['breadcrumbs'][] = $this->title; +?> +

title); ?>

+ +session->hasFlash('contactFormSubmitted')): ?> +
+ Thank you for contacting us. We will respond to you as soon as possible. +
+ + +

+ If you have business inquiries or other questions, please fill out the following form to contact us. Thank you. +

+ + array('class' => 'form-horizontal'), + 'fieldConfig' => array('inputOptions' => array('class' => 'input-xlarge')), +)); ?> + field($model, 'name')->textInput(); ?> + field($model, 'email')->textInput(); ?> + field($model, 'subject')->textInput(); ?> + field($model, 'body')->textArea(array('rows' => 6)); ?> + field($model, 'verifyCode'); + echo $field->begin() + . $field->label() + . Captcha::widget() + . Html::activeTextInput($model, 'verifyCode', array('class' => 'input-medium')) + . $field->error() + . $field->end(); + ?> +
+ 'btn btn-primary')); ?> +
+ diff --git a/apps/advanced/frontend/views/site/index.php b/apps/advanced/frontend/views/site/index.php new file mode 100644 index 0000000..158b61c --- /dev/null +++ b/apps/advanced/frontend/views/site/index.php @@ -0,0 +1,47 @@ +title = 'Welcome'; +?> +
+

Welcome!

+ +

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.

+ Get started with Yii +
+ +
+ + +
+
+

Heading

+ +

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.

+ +

View details »

+
+
+

Heading

+ +

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.

+ +

View details »

+
+
+

Heading

+ +

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.

+ +

View details »

+
+
+ diff --git a/apps/advanced/frontend/views/site/login.php b/apps/advanced/frontend/views/site/login.php new file mode 100644 index 0000000..f676b98 --- /dev/null +++ b/apps/advanced/frontend/views/site/login.php @@ -0,0 +1,24 @@ +title = 'Login'; +$this->params['breadcrumbs'][] = $this->title; +?> +

title); ?>

+ +

Please fill out the following fields to login:

+ + array('class' => 'form-horizontal'))); ?> + field($model, 'username')->textInput(); ?> + field($model, 'password')->passwordInput(); ?> + field($model, 'rememberMe')->checkbox(); ?> +
+ 'btn btn-primary')); ?> +
+ diff --git a/apps/advanced/frontend/www/assets/.gitignore b/apps/advanced/frontend/www/assets/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/apps/advanced/frontend/www/assets/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/apps/advanced/frontend/www/css/site.css b/apps/advanced/frontend/www/css/site.css new file mode 100644 index 0000000..890a953 --- /dev/null +++ b/apps/advanced/frontend/www/css/site.css @@ -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; +} diff --git a/apps/advanced/install/dev/backstage/config/main-local.php b/apps/advanced/install/dev/backstage/config/main-local.php new file mode 100644 index 0000000..5b61b0e --- /dev/null +++ b/apps/advanced/install/dev/backstage/config/main-local.php @@ -0,0 +1,3 @@ +run(); diff --git a/apps/advanced/install/dev/common/config/params-local.php b/apps/advanced/install/dev/common/config/params-local.php new file mode 100644 index 0000000..2670143 --- /dev/null +++ b/apps/advanced/install/dev/common/config/params-local.php @@ -0,0 +1,3 @@ +run(); diff --git a/apps/advanced/requirements.php b/apps/advanced/requirements.php new file mode 100644 index 0000000..5a2d910 --- /dev/null +++ b/apps/advanced/requirements.php @@ -0,0 +1,96 @@ + 'PDO extension', + 'mandatory' => true, + 'condition' => extension_loaded('pdo'), + 'by' => 'All DB-related classes', + ), + array( + 'name' => 'PDO SQLite extension', + 'mandatory' => false, + 'condition' => extension_loaded('pdo_sqlite'), + 'by' => 'All DB-related classes', + 'memo' => 'Required for SQLite database.', + ), + array( + 'name' => 'PDO MySQL extension', + 'mandatory' => false, + 'condition' => extension_loaded('pdo_mysql'), + 'by' => 'All DB-related classes', + 'memo' => 'Required for MySQL database.', + ), + // Cache : + array( + 'name' => 'Memcache extension', + 'mandatory' => false, + 'condition' => extension_loaded('memcache') || extension_loaded('memcached'), + 'by' => 'CMemCache', + 'memo' => extension_loaded('memcached') ? 'To use memcached set CMemCache::useMemcached to true.' : '' + ), + array( + 'name' => 'APC extension', + 'mandatory' => false, + 'condition' => extension_loaded('apc') || extension_loaded('apc'), + 'by' => 'CApcCache', + ), + // Additional PHP extensions : + array( + 'name' => 'Mcrypt extension', + 'mandatory' => false, + 'condition' => extension_loaded('mcrypt'), + 'by' => 'CSecurityManager', + '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(); diff --git a/apps/advanced/vendor/.gitignore b/apps/advanced/vendor/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/apps/advanced/vendor/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/apps/advanced/yii b/apps/advanced/yii new file mode 100644 index 0000000..afcba03 --- /dev/null +++ b/apps/advanced/yii @@ -0,0 +1,26 @@ +#!/usr/bin/env php +run(); diff --git a/apps/advanced/yii.bat b/apps/advanced/yii.bat new file mode 100644 index 0000000..5e21e2e --- /dev/null +++ b/apps/advanced/yii.bat @@ -0,0 +1,20 @@ +@echo off + +rem ------------------------------------------------------------- +rem Yii command line bootstrap script for Windows. +rem +rem @author Qiang Xue +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 From a16d3cd37099a10c65095e76e0e8ea2567b0f219 Mon Sep 17 00:00:00 2001 From: Qiang Xue Date: Fri, 24 May 2013 15:19:59 -0300 Subject: [PATCH 02/14] Do explicit check of local config file. --- apps/advanced/yii | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/advanced/yii b/apps/advanced/yii index afcba03..70e730d 100644 --- a/apps/advanced/yii +++ b/apps/advanced/yii @@ -16,10 +16,10 @@ 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__ . 'console/config/main.php'); -$localConfig = @include(__DIR__ . 'console/config/main-local.php'); -if($localConfig!==false) { - $config = yii\helpers\ArrayHelper::merge($config, $localConfig); +$config = require(__DIR__ . '/console/config/main.php'); +$localConfig = __DIR__ . '/console/config/main-local.php'); +if (is_file($localeConfig)) { + $config = yii\helpers\ArrayHelper::merge($config, require($localConfig)); } $application = new yii\console\Application($config); From 0e7808595b8adc72595a9379716c14457309a80f Mon Sep 17 00:00:00 2001 From: Qiang Xue Date: Fri, 24 May 2013 15:20:33 -0300 Subject: [PATCH 03/14] typo fix --- apps/advanced/yii | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/advanced/yii b/apps/advanced/yii index 70e730d..77d58cb 100644 --- a/apps/advanced/yii +++ b/apps/advanced/yii @@ -17,7 +17,7 @@ require(__DIR__ . '/vendor/yiisoft/yii2/yii/Yii.php'); require(__DIR__ . '/vendor/autoload.php'); $config = require(__DIR__ . '/console/config/main.php'); -$localConfig = __DIR__ . '/console/config/main-local.php'); +$localConfig = __DIR__ . '/console/config/main-local.php'; if (is_file($localeConfig)) { $config = yii\helpers\ArrayHelper::merge($config, require($localConfig)); } From 0411f09a43902b3e487c032c38c2670425194c62 Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Fri, 24 May 2013 23:05:41 +0400 Subject: [PATCH 04/14] Added install tool, moved all local configs and entry points to environments --- apps/advanced/.gitignore | 1 + apps/advanced/README.md | 5 +- apps/advanced/console/controllers/.gitkeep | 0 .../console/controllers/HelloController.php | 29 ------ .../console/controllers/InstallController.php | 13 --- apps/advanced/console/models/.gitkeep | 1 + .../dev/backstage/config/main-local.php | 3 + .../dev/backstage/config/params-local.php | 3 + .../environments/dev/backstage/www/index.php | 14 +++ .../dev/common/config/params-local.php | 3 + .../environments/dev/console/config/main-local.php | 3 + .../dev/console/config/params-local.php | 3 + .../dev/frontend/config/main-local.php | 3 + .../dev/frontend/config/params-local.php | 3 + .../environments/dev/frontend/www/index.php | 15 +++ apps/advanced/environments/dev/yii | 25 +++++ apps/advanced/environments/index.php | 38 +++++++ apps/advanced/install | 111 +++++++++++++++++++++ .../install/dev/backstage/config/main-local.php | 3 - .../install/dev/backstage/config/params-local.php | 3 - apps/advanced/install/dev/backstage/www/index.php | 14 --- .../install/dev/common/config/params-local.php | 3 - .../install/dev/console/config/main-local.php | 3 - .../install/dev/console/config/params-local.php | 3 - .../install/dev/frontend/config/main-local.php | 3 - .../install/dev/frontend/config/params-local.php | 3 - apps/advanced/install/dev/frontend/www/index.php | 15 --- apps/advanced/yii | 26 ----- 28 files changed, 227 insertions(+), 122 deletions(-) create mode 100644 apps/advanced/.gitignore create mode 100644 apps/advanced/console/controllers/.gitkeep delete mode 100644 apps/advanced/console/controllers/HelloController.php delete mode 100644 apps/advanced/console/controllers/InstallController.php create mode 100644 apps/advanced/console/models/.gitkeep create mode 100644 apps/advanced/environments/dev/backstage/config/main-local.php create mode 100644 apps/advanced/environments/dev/backstage/config/params-local.php create mode 100644 apps/advanced/environments/dev/backstage/www/index.php create mode 100644 apps/advanced/environments/dev/common/config/params-local.php create mode 100644 apps/advanced/environments/dev/console/config/main-local.php create mode 100644 apps/advanced/environments/dev/console/config/params-local.php create mode 100644 apps/advanced/environments/dev/frontend/config/main-local.php create mode 100644 apps/advanced/environments/dev/frontend/config/params-local.php create mode 100644 apps/advanced/environments/dev/frontend/www/index.php create mode 100644 apps/advanced/environments/dev/yii create mode 100644 apps/advanced/environments/index.php create mode 100644 apps/advanced/install delete mode 100644 apps/advanced/install/dev/backstage/config/main-local.php delete mode 100644 apps/advanced/install/dev/backstage/config/params-local.php delete mode 100644 apps/advanced/install/dev/backstage/www/index.php delete mode 100644 apps/advanced/install/dev/common/config/params-local.php delete mode 100644 apps/advanced/install/dev/console/config/main-local.php delete mode 100644 apps/advanced/install/dev/console/config/params-local.php delete mode 100644 apps/advanced/install/dev/frontend/config/main-local.php delete mode 100644 apps/advanced/install/dev/frontend/config/params-local.php delete mode 100644 apps/advanced/install/dev/frontend/www/index.php delete mode 100644 apps/advanced/yii diff --git a/apps/advanced/.gitignore b/apps/advanced/.gitignore new file mode 100644 index 0000000..b1cf719 --- /dev/null +++ b/apps/advanced/.gitignore @@ -0,0 +1 @@ +/yii \ No newline at end of file diff --git a/apps/advanced/README.md b/apps/advanced/README.md index 08f0b0d..f088fc8 100644 --- a/apps/advanced/README.md +++ b/apps/advanced/README.md @@ -20,12 +20,10 @@ DIRECTORY STRUCTURE ``` common config/ contains shared configurations - env/ contains environment-based overrides models/ contains model classes used in both backstage and frontend console config/ contains console configurations controllers/ contains console controllers (commands) - env/ contains environment-based overrides migrations/ contains database migrations models/ contains console-specific model classes runtime/ contains files generated during runtime @@ -33,7 +31,6 @@ backstage assets/ contains application assets such as JavaScript and CSS config/ contains backstage configurations controllers/ contains Web controller classes - env/ contains environment-based overrides models/ contains backstage-specific model classes runtime/ contains files generated during runtime views/ contains view files for the Web application @@ -42,12 +39,12 @@ frontend assets/ contains application assets such as JavaScript and CSS config/ contains frontend configurations controllers/ contains Web controller classes - env/ contains environment-based overrides 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 ``` diff --git a/apps/advanced/console/controllers/.gitkeep b/apps/advanced/console/controllers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/apps/advanced/console/controllers/HelloController.php b/apps/advanced/console/controllers/HelloController.php deleted file mode 100644 index 603c6e8..0000000 --- a/apps/advanced/console/controllers/HelloController.php +++ /dev/null @@ -1,29 +0,0 @@ - - * @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."\n"; - } -} \ No newline at end of file diff --git a/apps/advanced/console/controllers/InstallController.php b/apps/advanced/console/controllers/InstallController.php deleted file mode 100644 index cbc2227..0000000 --- a/apps/advanced/console/controllers/InstallController.php +++ /dev/null @@ -1,13 +0,0 @@ -run(); diff --git a/apps/advanced/environments/dev/common/config/params-local.php b/apps/advanced/environments/dev/common/config/params-local.php new file mode 100644 index 0000000..2670143 --- /dev/null +++ b/apps/advanced/environments/dev/common/config/params-local.php @@ -0,0 +1,3 @@ +run(); diff --git a/apps/advanced/environments/dev/yii b/apps/advanced/environments/dev/yii new file mode 100644 index 0000000..d763217 --- /dev/null +++ b/apps/advanced/environments/dev/yii @@ -0,0 +1,25 @@ +#!/usr/bin/env php +run(); diff --git a/apps/advanced/environments/index.php b/apps/advanced/environments/index.php new file mode 100644 index 0000000..ff907d2 --- /dev/null +++ b/apps/advanced/environments/index.php @@ -0,0 +1,38 @@ + 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', + ), + ), +); diff --git a/apps/advanced/install b/apps/advanced/install new file mode 100644 index 0000000..2204acd --- /dev/null +++ b/apps/advanced/install @@ -0,0 +1,111 @@ + $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/install/{$env['path']}"); +$all = false; +foreach ($files as $file) { + if (!copyFile($root, "install/{$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; +} diff --git a/apps/advanced/install/dev/backstage/config/main-local.php b/apps/advanced/install/dev/backstage/config/main-local.php deleted file mode 100644 index 5b61b0e..0000000 --- a/apps/advanced/install/dev/backstage/config/main-local.php +++ /dev/null @@ -1,3 +0,0 @@ -run(); diff --git a/apps/advanced/install/dev/common/config/params-local.php b/apps/advanced/install/dev/common/config/params-local.php deleted file mode 100644 index 2670143..0000000 --- a/apps/advanced/install/dev/common/config/params-local.php +++ /dev/null @@ -1,3 +0,0 @@ -run(); diff --git a/apps/advanced/yii b/apps/advanced/yii deleted file mode 100644 index 77d58cb..0000000 --- a/apps/advanced/yii +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env php -run(); From 4c1378cb513f7e40b7d2fcb9a941abe1c1e7b8cf Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Fri, 24 May 2013 23:09:55 +0400 Subject: [PATCH 05/14] Adjusted paths, added install.bat --- apps/advanced/install | 6 +++--- apps/advanced/install.bat | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 apps/advanced/install.bat diff --git a/apps/advanced/install b/apps/advanced/install index 2204acd..a2f0160 100644 --- a/apps/advanced/install +++ b/apps/advanced/install @@ -1,6 +1,6 @@ +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 From fb1013e6193933ccf6d27dc1e3d8c068bba06573 Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Fri, 24 May 2013 23:11:40 +0400 Subject: [PATCH 06/14] Ignores for frontend/backstage index.php --- apps/advanced/backstage/www/.gitignore | 1 + apps/advanced/frontend/www/.gitignore | 1 + 2 files changed, 2 insertions(+) create mode 100644 apps/advanced/backstage/www/.gitignore create mode 100644 apps/advanced/frontend/www/.gitignore diff --git a/apps/advanced/backstage/www/.gitignore b/apps/advanced/backstage/www/.gitignore new file mode 100644 index 0000000..148f2b0 --- /dev/null +++ b/apps/advanced/backstage/www/.gitignore @@ -0,0 +1 @@ +/index.php \ No newline at end of file diff --git a/apps/advanced/frontend/www/.gitignore b/apps/advanced/frontend/www/.gitignore new file mode 100644 index 0000000..148f2b0 --- /dev/null +++ b/apps/advanced/frontend/www/.gitignore @@ -0,0 +1 @@ +/index.php \ No newline at end of file From 4a9f0eed0ceb1c2615a54901cb7e679c156c8ca8 Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Fri, 24 May 2013 23:34:07 +0400 Subject: [PATCH 07/14] Moved commented sections into -local configs, added prod environment --- apps/advanced/backstage/config/main.php | 10 +-------- apps/advanced/console/config/main.php | 7 ++---- .../dev/backstage/config/main-local.php | 14 ++++++++++++ .../dev/frontend/config/main-local.php | 14 ++++++++++++ .../prod/backstage/config/main-local.php | 3 +++ .../prod/backstage/config/params-local.php | 3 +++ .../environments/prod/backstage/www/index.php | 14 ++++++++++++ .../prod/common/config/params-local.php | 3 +++ .../prod/console/config/main-local.php | 3 +++ .../prod/console/config/params-local.php | 3 +++ .../prod/frontend/config/main-local.php | 3 +++ .../prod/frontend/config/params-local.php | 3 +++ .../environments/prod/frontend/www/index.php | 15 +++++++++++++ apps/advanced/environments/prod/yii | 25 ++++++++++++++++++++++ apps/advanced/frontend/config/main.php | 12 ++--------- 15 files changed, 108 insertions(+), 24 deletions(-) create mode 100644 apps/advanced/environments/prod/backstage/config/main-local.php create mode 100644 apps/advanced/environments/prod/backstage/config/params-local.php create mode 100644 apps/advanced/environments/prod/backstage/www/index.php create mode 100644 apps/advanced/environments/prod/common/config/params-local.php create mode 100644 apps/advanced/environments/prod/console/config/main-local.php create mode 100644 apps/advanced/environments/prod/console/config/params-local.php create mode 100644 apps/advanced/environments/prod/frontend/config/main-local.php create mode 100644 apps/advanced/environments/prod/frontend/config/params-local.php create mode 100644 apps/advanced/environments/prod/frontend/www/index.php create mode 100644 apps/advanced/environments/prod/yii diff --git a/apps/advanced/backstage/config/main.php b/apps/advanced/backstage/config/main.php index 3fb95da..561dae1 100644 --- a/apps/advanced/backstage/config/main.php +++ b/apps/advanced/backstage/config/main.php @@ -14,14 +14,9 @@ return array( 'preload' => array('log'), 'controllerNamespace' => 'app\controllers', 'modules' => array( -// 'debug' => array( -// 'class' => 'yii\debug\Module', -// ) ), 'components' => array( - 'cache' => array( - 'class' => 'yii\caching\FileCache', - ), + 'cache' => $params['components.cache'], 'user' => array( 'class' => 'yii\web\User', 'identityClass' => 'app\models\User', @@ -36,9 +31,6 @@ return array( 'class' => 'yii\logging\FileTarget', 'levels' => array('error', 'warning'), ), -// array( -// 'class' => 'yii\logging\DebugTarget', -// ) ), ), ), diff --git a/apps/advanced/console/config/main.php b/apps/advanced/console/config/main.php index 7af7824..f5e488c 100644 --- a/apps/advanced/console/config/main.php +++ b/apps/advanced/console/config/main.php @@ -9,17 +9,14 @@ $params = array_merge( ); return array( - 'id' => 'bootstrap-console', + 'id' => 'change-me', 'basePath' => dirname(__DIR__), 'preload' => array('log'), - 'controllerPath' => dirname(__DIR__) . '/commands', 'controllerNamespace' => 'app\controllers', 'modules' => array( ), 'components' => array( - 'cache' => array( - 'class' => 'yii\caching\FileCache', - ), + 'cache' => $params['components.cache'], 'log' => array( 'class' => 'yii\logging\Router', 'targets' => array( diff --git a/apps/advanced/environments/dev/backstage/config/main-local.php b/apps/advanced/environments/dev/backstage/config/main-local.php index 5b61b0e..f74bfa3 100644 --- a/apps/advanced/environments/dev/backstage/config/main-local.php +++ b/apps/advanced/environments/dev/backstage/config/main-local.php @@ -1,3 +1,17 @@ array( +// 'debug' => array( +// 'class' => 'yii\debug\Module', +// ), + ), + 'components' => array( + 'log' => array( + 'targets' => array( +// array( +// 'class' => 'yii\logging\DebugTarget', +// ) + ), + ), + ), ); diff --git a/apps/advanced/environments/dev/frontend/config/main-local.php b/apps/advanced/environments/dev/frontend/config/main-local.php index 5b61b0e..b77abed 100644 --- a/apps/advanced/environments/dev/frontend/config/main-local.php +++ b/apps/advanced/environments/dev/frontend/config/main-local.php @@ -1,3 +1,17 @@ array( +// 'debug' => array( +// 'class' => 'yii\debug\Module', +// ), + ), + 'components' => array( + 'log' => array( + 'targets' => array( +// array( +// 'class' => 'yii\logging\DebugTarget', +// ) + ), + ), + ), ); diff --git a/apps/advanced/environments/prod/backstage/config/main-local.php b/apps/advanced/environments/prod/backstage/config/main-local.php new file mode 100644 index 0000000..5b61b0e --- /dev/null +++ b/apps/advanced/environments/prod/backstage/config/main-local.php @@ -0,0 +1,3 @@ +run(); diff --git a/apps/advanced/environments/prod/common/config/params-local.php b/apps/advanced/environments/prod/common/config/params-local.php new file mode 100644 index 0000000..2670143 --- /dev/null +++ b/apps/advanced/environments/prod/common/config/params-local.php @@ -0,0 +1,3 @@ +run(); diff --git a/apps/advanced/environments/prod/yii b/apps/advanced/environments/prod/yii new file mode 100644 index 0000000..395aede --- /dev/null +++ b/apps/advanced/environments/prod/yii @@ -0,0 +1,25 @@ +#!/usr/bin/env php +run(); diff --git a/apps/advanced/frontend/config/main.php b/apps/advanced/frontend/config/main.php index 9379e06..561dae1 100644 --- a/apps/advanced/frontend/config/main.php +++ b/apps/advanced/frontend/config/main.php @@ -9,19 +9,14 @@ $params = array_merge( ); return array( - 'id' => 'bootstrap', + 'id' => 'change-me', 'basePath' => dirname(__DIR__), 'preload' => array('log'), 'controllerNamespace' => 'app\controllers', 'modules' => array( -// 'debug' => array( -// 'class' => 'yii\debug\Module', -// ) ), 'components' => array( - 'cache' => array( - 'class' => 'yii\caching\FileCache', - ), + 'cache' => $params['components.cache'], 'user' => array( 'class' => 'yii\web\User', 'identityClass' => 'app\models\User', @@ -36,9 +31,6 @@ return array( 'class' => 'yii\logging\FileTarget', 'levels' => array('error', 'warning'), ), -// array( -// 'class' => 'yii\logging\DebugTarget', -// ) ), ), ), From e8d59fb6cbe4f8ef59afbeecaeec220750eac6da Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Fri, 24 May 2013 23:37:22 +0400 Subject: [PATCH 08/14] specified proper namespaces --- apps/advanced/backstage/config/main.php | 2 +- .../backstage/controllers/SiteController.php | 2 +- apps/advanced/common/models/ContactForm.php | 63 ---------------------- apps/advanced/common/models/LoginForm.php | 58 -------------------- apps/advanced/common/models/User.php | 2 +- apps/advanced/console/config/main.php | 2 +- apps/advanced/frontend/config/main.php | 2 +- .../frontend/controllers/SiteController.php | 2 +- apps/advanced/frontend/models/ContactForm.php | 2 +- apps/advanced/frontend/models/LoginForm.php | 2 +- apps/advanced/frontend/models/User.php | 2 +- 11 files changed, 9 insertions(+), 130 deletions(-) delete mode 100644 apps/advanced/common/models/ContactForm.php delete mode 100644 apps/advanced/common/models/LoginForm.php diff --git a/apps/advanced/backstage/config/main.php b/apps/advanced/backstage/config/main.php index 561dae1..6204f50 100644 --- a/apps/advanced/backstage/config/main.php +++ b/apps/advanced/backstage/config/main.php @@ -12,7 +12,7 @@ return array( 'id' => 'change-me', 'basePath' => dirname(__DIR__), 'preload' => array('log'), - 'controllerNamespace' => 'app\controllers', + 'controllerNamespace' => 'backstage\controllers', 'modules' => array( ), 'components' => array( diff --git a/apps/advanced/backstage/controllers/SiteController.php b/apps/advanced/backstage/controllers/SiteController.php index ff3b8b4..192884b 100644 --- a/apps/advanced/backstage/controllers/SiteController.php +++ b/apps/advanced/backstage/controllers/SiteController.php @@ -1,6 +1,6 @@ '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; - } - } -} diff --git a/apps/advanced/common/models/LoginForm.php b/apps/advanced/common/models/LoginForm.php deleted file mode 100644 index 5ba1dc6..0000000 --- a/apps/advanced/common/models/LoginForm.php +++ /dev/null @@ -1,58 +0,0 @@ -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; - } - } -} diff --git a/apps/advanced/common/models/User.php b/apps/advanced/common/models/User.php index afbf9f8..035f1fb 100644 --- a/apps/advanced/common/models/User.php +++ b/apps/advanced/common/models/User.php @@ -1,6 +1,6 @@ 'change-me', 'basePath' => dirname(__DIR__), 'preload' => array('log'), - 'controllerNamespace' => 'app\controllers', + 'controllerNamespace' => 'console\controllers', 'modules' => array( ), 'components' => array( diff --git a/apps/advanced/frontend/config/main.php b/apps/advanced/frontend/config/main.php index 561dae1..eac7c4d 100644 --- a/apps/advanced/frontend/config/main.php +++ b/apps/advanced/frontend/config/main.php @@ -12,7 +12,7 @@ return array( 'id' => 'change-me', 'basePath' => dirname(__DIR__), 'preload' => array('log'), - 'controllerNamespace' => 'app\controllers', + 'controllerNamespace' => 'frontend\controllers', 'modules' => array( ), 'components' => array( diff --git a/apps/advanced/frontend/controllers/SiteController.php b/apps/advanced/frontend/controllers/SiteController.php index ff3b8b4..d2ea5a6 100644 --- a/apps/advanced/frontend/controllers/SiteController.php +++ b/apps/advanced/frontend/controllers/SiteController.php @@ -1,6 +1,6 @@ Date: Fri, 24 May 2013 23:44:56 +0400 Subject: [PATCH 09/14] fixed typo --- apps/advanced/common/config/params.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/advanced/common/config/params.php b/apps/advanced/common/config/params.php index 9eb2b15..015be76 100644 --- a/apps/advanced/common/config/params.php +++ b/apps/advanced/common/config/params.php @@ -3,7 +3,7 @@ return array( 'adminEmail' => 'admin@example.com', - 'component.cache' => array( + 'components.cache' => array( 'class' => 'yii\caching\FileCache', ), ); \ No newline at end of file From 987b50cf041f94f7bffe377d54a26481fbab6dde Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Sat, 25 May 2013 00:08:24 +0400 Subject: [PATCH 10/14] Added #!/usr/bin/env php --- apps/advanced/install | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/advanced/install b/apps/advanced/install index a2f0160..6864440 100644 --- a/apps/advanced/install +++ b/apps/advanced/install @@ -1,3 +1,4 @@ +#!/usr/bin/env php Date: Sat, 25 May 2013 00:15:17 +0400 Subject: [PATCH 11/14] yii migrate/create should not require db component --- framework/yii/console/controllers/MigrateController.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/framework/yii/console/controllers/MigrateController.php b/framework/yii/console/controllers/MigrateController.php index 0acc672..b437450 100644 --- a/framework/yii/console/controllers/MigrateController.php +++ b/framework/yii/console/controllers/MigrateController.php @@ -115,11 +115,13 @@ class MigrateController extends Controller } $this->migrationPath = $path; - if (is_string($this->db)) { - $this->db = Yii::$app->getComponent($this->db); - } - if (!$this->db instanceof Connection) { - throw new Exception("The 'db' option must refer to the application component ID of a DB connection."); + if($action->id!=='create') { + if (is_string($this->db)) { + $this->db = Yii::$app->getComponent($this->db); + } + if (!$this->db instanceof Connection) { + throw new Exception("The 'db' option must refer to the application component ID of a DB connection."); + } } $version = Yii::getVersion(); From c4380f65a5753ef41b463718ba7cfd235c1e2f3f Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Sat, 25 May 2013 00:23:07 +0400 Subject: [PATCH 12/14] MySQL migration for User model --- apps/advanced/console/migrations/.gitkeep | 1 - .../console/migrations/m130524_201442_init.php | 27 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) delete mode 100644 apps/advanced/console/migrations/.gitkeep create mode 100644 apps/advanced/console/migrations/m130524_201442_init.php diff --git a/apps/advanced/console/migrations/.gitkeep b/apps/advanced/console/migrations/.gitkeep deleted file mode 100644 index 72e8ffc..0000000 --- a/apps/advanced/console/migrations/.gitkeep +++ /dev/null @@ -1 +0,0 @@ -* diff --git a/apps/advanced/console/migrations/m130524_201442_init.php b/apps/advanced/console/migrations/m130524_201442_init.php new file mode 100644 index 0000000..24a74c3 --- /dev/null +++ b/apps/advanced/console/migrations/m130524_201442_init.php @@ -0,0 +1,27 @@ +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'); + } +} From 75917e2cb112201dd98a5564038bd9578d767a03 Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Sat, 25 May 2013 03:23:09 +0400 Subject: [PATCH 13/14] User and LoginForm are now common models, User is AR and Identity --- apps/advanced/backstage/config/main.php | 2 +- .../backstage/controllers/SiteController.php | 30 +----- apps/advanced/backstage/views/layouts/main.php | 2 - apps/advanced/backstage/views/site/about.php | 16 --- apps/advanced/backstage/views/site/contact.php | 46 --------- apps/advanced/common/models/LoginForm.php | 58 +++++++++++ apps/advanced/common/models/User.php | 114 +++++++++++++++------ apps/advanced/frontend/config/main.php | 2 +- .../frontend/controllers/SiteController.php | 4 +- apps/advanced/frontend/models/LoginForm.php | 58 ----------- apps/advanced/frontend/models/User.php | 61 ----------- 11 files changed, 147 insertions(+), 246 deletions(-) delete mode 100644 apps/advanced/backstage/views/site/about.php delete mode 100644 apps/advanced/backstage/views/site/contact.php create mode 100644 apps/advanced/common/models/LoginForm.php delete mode 100644 apps/advanced/frontend/models/LoginForm.php delete mode 100644 apps/advanced/frontend/models/User.php diff --git a/apps/advanced/backstage/config/main.php b/apps/advanced/backstage/config/main.php index 6204f50..d47904a 100644 --- a/apps/advanced/backstage/config/main.php +++ b/apps/advanced/backstage/config/main.php @@ -19,7 +19,7 @@ return array( 'cache' => $params['components.cache'], 'user' => array( 'class' => 'yii\web\User', - 'identityClass' => 'app\models\User', + 'identityClass' => 'common\models\User', ), 'assetManager' => array( 'bundles' => require(__DIR__ . '/assets.php'), diff --git a/apps/advanced/backstage/controllers/SiteController.php b/apps/advanced/backstage/controllers/SiteController.php index 192884b..d40738a 100644 --- a/apps/advanced/backstage/controllers/SiteController.php +++ b/apps/advanced/backstage/controllers/SiteController.php @@ -4,20 +4,10 @@ namespace backstage\controllers; use Yii; use yii\web\Controller; -use app\models\LoginForm; -use app\models\ContactForm; +use common\models\LoginForm; class SiteController extends Controller { - public function actions() - { - return array( - 'captcha' => array( - 'class' => 'yii\web\CaptchaAction', - ), - ); - } - public function actionIndex() { echo $this->render('index'); @@ -40,22 +30,4 @@ class SiteController extends Controller 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'); - } } diff --git a/apps/advanced/backstage/views/layouts/main.php b/apps/advanced/backstage/views/layouts/main.php index 635e118..44117f4 100644 --- a/apps/advanced/backstage/views/layouts/main.php +++ b/apps/advanced/backstage/views/layouts/main.php @@ -31,8 +31,6 @@ $this->registerAssetBundle('app'); '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')), diff --git a/apps/advanced/backstage/views/site/about.php b/apps/advanced/backstage/views/site/about.php deleted file mode 100644 index 86e19e1..0000000 --- a/apps/advanced/backstage/views/site/about.php +++ /dev/null @@ -1,16 +0,0 @@ -title = 'About'; -$this->params['breadcrumbs'][] = $this->title; -?> -

title); ?>

- -

- This is the About page. You may modify the following file to customize its content: -

- - - diff --git a/apps/advanced/backstage/views/site/contact.php b/apps/advanced/backstage/views/site/contact.php deleted file mode 100644 index e740d0f..0000000 --- a/apps/advanced/backstage/views/site/contact.php +++ /dev/null @@ -1,46 +0,0 @@ -title = 'Contact'; -$this->params['breadcrumbs'][] = $this->title; -?> -

title); ?>

- -session->hasFlash('contactFormSubmitted')): ?> -
- Thank you for contacting us. We will respond to you as soon as possible. -
- - -

- If you have business inquiries or other questions, please fill out the following form to contact us. Thank you. -

- - array('class' => 'form-horizontal'), - 'fieldConfig' => array('inputOptions' => array('class' => 'input-xlarge')), -)); ?> - field($model, 'name')->textInput(); ?> - field($model, 'email')->textInput(); ?> - field($model, 'subject')->textInput(); ?> - field($model, 'body')->textArea(array('rows' => 6)); ?> - field($model, 'verifyCode'); - echo $field->begin() - . $field->label() - . Captcha::widget() - . Html::activeTextInput($model, 'verifyCode', array('class' => 'input-medium')) - . $field->error() - . $field->end(); - ?> -
- 'btn btn-primary')); ?> -
- diff --git a/apps/advanced/common/models/LoginForm.php b/apps/advanced/common/models/LoginForm.php new file mode 100644 index 0000000..4631dbd --- /dev/null +++ b/apps/advanced/common/models/LoginForm.php @@ -0,0 +1,58 @@ +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; + } + } +} diff --git a/apps/advanced/common/models/User.php b/apps/advanced/common/models/User.php index 035f1fb..110487e 100644 --- a/apps/advanced/common/models/User.php +++ b/apps/advanced/common/models/User.php @@ -1,42 +1,58 @@ array( - 'id' => '100', - 'username' => 'admin', - 'password' => 'admin', - 'authKey' => 'test100key', - ), - '101' => array( - 'id' => '101', - 'username' => 'demo', - 'password' => 'demo', - 'authKey' => 'test101key', - ), - ); + + 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 isset(self::$users[$id]) ? new self(self::$users[$id]) : null; + return static::find($id); } public static function findByUsername($username) { - foreach (self::$users as $user) { - if (strcasecmp($user['username'], $username) === 0) { - return new self($user); - } - } - return null; + return static::find(array('username' => $username, 'status' => static::STATUS_ACTIVE)); } public function getId() @@ -46,16 +62,54 @@ class User extends \yii\base\Object implements \yii\web\Identity public function getAuthKey() { - return $this->authKey; + return $this->auth_key; } public function validateAuthKey($authKey) { - return $this->authKey === $authKey; + return $this->auth_key === $authKey; } public function validatePassword($password) { - return $this->password === $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; } } diff --git a/apps/advanced/frontend/config/main.php b/apps/advanced/frontend/config/main.php index eac7c4d..e83ac26 100644 --- a/apps/advanced/frontend/config/main.php +++ b/apps/advanced/frontend/config/main.php @@ -19,7 +19,7 @@ return array( 'cache' => $params['components.cache'], 'user' => array( 'class' => 'yii\web\User', - 'identityClass' => 'app\models\User', + 'identityClass' => 'common\models\User', ), 'assetManager' => array( 'bundles' => require(__DIR__ . '/assets.php'), diff --git a/apps/advanced/frontend/controllers/SiteController.php b/apps/advanced/frontend/controllers/SiteController.php index d2ea5a6..cd3339c 100644 --- a/apps/advanced/frontend/controllers/SiteController.php +++ b/apps/advanced/frontend/controllers/SiteController.php @@ -4,8 +4,8 @@ namespace frontend\controllers; use Yii; use yii\web\Controller; -use app\models\LoginForm; -use app\models\ContactForm; +use common\models\LoginForm; +use frontend\models\ContactForm; class SiteController extends Controller { diff --git a/apps/advanced/frontend/models/LoginForm.php b/apps/advanced/frontend/models/LoginForm.php deleted file mode 100644 index f5e131d..0000000 --- a/apps/advanced/frontend/models/LoginForm.php +++ /dev/null @@ -1,58 +0,0 @@ -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; - } - } -} diff --git a/apps/advanced/frontend/models/User.php b/apps/advanced/frontend/models/User.php deleted file mode 100644 index 8a60503..0000000 --- a/apps/advanced/frontend/models/User.php +++ /dev/null @@ -1,61 +0,0 @@ - array( - 'id' => '100', - 'username' => 'admin', - 'password' => 'admin', - 'authKey' => 'test100key', - ), - '101' => array( - 'id' => '101', - 'username' => 'demo', - 'password' => 'demo', - 'authKey' => 'test101key', - ), - ); - - public static function findIdentity($id) - { - return isset(self::$users[$id]) ? new self(self::$users[$id]) : null; - } - - public static function findByUsername($username) - { - foreach (self::$users as $user) { - if (strcasecmp($user['username'], $username) === 0) { - return new self($user); - } - } - return null; - } - - public function getId() - { - return $this->id; - } - - public function getAuthKey() - { - return $this->authKey; - } - - public function validateAuthKey($authKey) - { - return $this->authKey === $authKey; - } - - public function validatePassword($password) - { - return $this->password === $password; - } -} From 8325f7a8909cc726e08963e4f533279dc95c478b Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Sat, 25 May 2013 03:33:43 +0400 Subject: [PATCH 14/14] Added db component. Added configuration section to readme. --- apps/advanced/README.md | 12 ++++++++++++ apps/advanced/backstage/config/main.php | 1 + apps/advanced/common/config/params.php | 7 +++++++ apps/advanced/console/config/main.php | 1 + apps/advanced/frontend/config/main.php | 1 + 5 files changed, 22 insertions(+) diff --git a/apps/advanced/README.md b/apps/advanced/README.md index f088fc8..a2bcdd4 100644 --- a/apps/advanced/README.md +++ b/apps/advanced/README.md @@ -84,3 +84,15 @@ 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. + diff --git a/apps/advanced/backstage/config/main.php b/apps/advanced/backstage/config/main.php index d47904a..d3288bd 100644 --- a/apps/advanced/backstage/config/main.php +++ b/apps/advanced/backstage/config/main.php @@ -16,6 +16,7 @@ return array( 'modules' => array( ), 'components' => array( + 'db' => $params['components.db'], 'cache' => $params['components.cache'], 'user' => array( 'class' => 'yii\web\User', diff --git a/apps/advanced/common/config/params.php b/apps/advanced/common/config/params.php index 015be76..b9409f9 100644 --- a/apps/advanced/common/config/params.php +++ b/apps/advanced/common/config/params.php @@ -6,4 +6,11 @@ return array( 'components.cache' => array( 'class' => 'yii\caching\FileCache', ), + + 'components.db' => array( + 'class' => 'yii\db\Connection', + 'dsn' => 'mysql:host=localhost;dbname=yii2advanced', + 'username' => 'root', + 'password' => '', + ), ); \ No newline at end of file diff --git a/apps/advanced/console/config/main.php b/apps/advanced/console/config/main.php index a237444..83cb2e3 100644 --- a/apps/advanced/console/config/main.php +++ b/apps/advanced/console/config/main.php @@ -16,6 +16,7 @@ return array( 'modules' => array( ), 'components' => array( + 'db' => $params['components.db'], 'cache' => $params['components.cache'], 'log' => array( 'class' => 'yii\logging\Router', diff --git a/apps/advanced/frontend/config/main.php b/apps/advanced/frontend/config/main.php index e83ac26..607c9a9 100644 --- a/apps/advanced/frontend/config/main.php +++ b/apps/advanced/frontend/config/main.php @@ -16,6 +16,7 @@ return array( 'modules' => array( ), 'components' => array( + 'db' => $params['components.db'], 'cache' => $params['components.cache'], 'user' => array( 'class' => 'yii\web\User',