Browse Source
* master: (806 commits)
avoid confusing docs about autoload return value
doc fix.
Fixed doc.
Fixed autoloader behavior according to leading \
Fix in RequestPanel
changed to trace from info.
Removed yii\debug\Module::enabled.
minor enhancement of debugger.
Refactored the basic app.
Added ErrorAction.
Use `hasAttribute()` instead to avoid code duplication
refactored NavBar and basic app navbar.
test break fix.
test break fix.
Fixed test breaks.
#735: removed hiddenInput to avoid confusion.
ResizableAsset typo fix!
Update radio and checkbox due to e3801fbf6b
css fix.
Fixed the basic app template.
...
Conflicts:
.travis.yml
tests/unit/data/config.php
tags/2.0.0-beta
Carsten Brandt
12 years ago
657 changed files with 58806 additions and 21231 deletions
@ -0,0 +1,4 @@ |
|||||||
|
service_name: travis-ci |
||||||
|
src_dir: framework/yii |
||||||
|
coverage_clover: tests/unit/runtime/coveralls/clover.xml |
||||||
|
json_path: tests/unit/runtime/coveralls/coveralls-upload.json |
@ -0,0 +1,23 @@ |
|||||||
|
# Autodetect text files |
||||||
|
* text=auto |
||||||
|
|
||||||
|
# ...Unless the name matches the following overriding patterns |
||||||
|
|
||||||
|
# Definitively text files |
||||||
|
*.php text |
||||||
|
*.css text |
||||||
|
*.js text |
||||||
|
*.txt text |
||||||
|
*.md text |
||||||
|
*.xml text |
||||||
|
*.json text |
||||||
|
*.bat text |
||||||
|
*.sql text |
||||||
|
*.xml text |
||||||
|
*.yml text |
||||||
|
|
||||||
|
# Ensure those won't be messed up with |
||||||
|
*.png binary |
||||||
|
*.jpg binary |
||||||
|
*.gif binary |
||||||
|
*.ttf binary |
@ -0,0 +1,114 @@ |
|||||||
|
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 backend separation, |
||||||
|
deployment in different environments, configuration nesting etc. |
||||||
|
|
||||||
|
|
||||||
|
DIRECTORY STRUCTURE |
||||||
|
------------------- |
||||||
|
|
||||||
|
``` |
||||||
|
common |
||||||
|
config/ contains shared configurations |
||||||
|
models/ contains model classes used in both backend 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 |
||||||
|
backend |
||||||
|
assets/ contains application assets such as JavaScript and CSS |
||||||
|
config/ contains backend configurations |
||||||
|
controllers/ contains Web controller classes |
||||||
|
models/ contains backend-specific model classes |
||||||
|
runtime/ contains files generated during runtime |
||||||
|
views/ contains view files for the Web application |
||||||
|
web/ 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 |
||||||
|
web/ 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.?. |
||||||
|
|
||||||
|
In order for captcha to work you need either GD2 extension or ImageMagick PHP extension. |
||||||
|
|
||||||
|
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 application using the following command: |
||||||
|
|
||||||
|
~~~ |
||||||
|
php composer.phar create-project --stability=dev yiisoft/yii2-app-advanced yii-advanced |
||||||
|
~~~ |
||||||
|
|
||||||
|
|
||||||
|
### Install from an Archive File |
||||||
|
|
||||||
|
This is not currently available. We will provide it when Yii 2 is formally released. |
||||||
|
|
||||||
|
|
||||||
|
### Install from development repository |
||||||
|
|
||||||
|
If you've cloned the [Yii 2 framework main development repository](https://github.com/yiisoft/yii2) you |
||||||
|
can bootstrap your application with: |
||||||
|
|
||||||
|
~~~ |
||||||
|
cd yii2/apps/advanced |
||||||
|
php composer.phar create-project |
||||||
|
~~~ |
||||||
|
|
||||||
|
*Note: If the above command fails with `[RuntimeException] Not enough arguments.` run |
||||||
|
`php composer.phar self-update` to obtain an updated version of composer which supports creating projects |
||||||
|
from local packages.* |
||||||
|
|
||||||
|
|
||||||
|
GETTING STARTED |
||||||
|
--------------- |
||||||
|
|
||||||
|
After you install the application, you have to conduct the following steps to initialize |
||||||
|
the installed application. You only need to do these once for all. |
||||||
|
|
||||||
|
1. Execute the `init` command and select `dev` as environment. |
||||||
|
2. Create a new database. It is assumed that MySQL InnoDB is used. If not, adjust `console/migrations/m130524_201442_init.php`. |
||||||
|
3. In `common/config/params.php` set your database details in `components.db` values. |
||||||
|
|
||||||
|
Now you should be able to access: |
||||||
|
|
||||||
|
- the frontend using the URL `http://localhost/yii-advanced/frontend/web/` |
||||||
|
- the backend using the URL `http://localhost/yii-advanced/backend/web/` |
||||||
|
|
||||||
|
assuming `yii-advanced` is directly under the document root of your Web server. |
||||||
|
|
@ -0,0 +1,2 @@ |
|||||||
|
main-local.php |
||||||
|
params-local.php |
@ -0,0 +1,28 @@ |
|||||||
|
<?php |
||||||
|
/** |
||||||
|
* @link http://www.yiiframework.com/ |
||||||
|
* @copyright Copyright (c) 2008 Yii Software LLC |
||||||
|
* @license http://www.yiiframework.com/license/ |
||||||
|
*/ |
||||||
|
|
||||||
|
namespace backend\config; |
||||||
|
use yii\web\AssetBundle; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Qiang Xue <qiang.xue@gmail.com> |
||||||
|
* @since 2.0 |
||||||
|
*/ |
||||||
|
class AppAsset extends AssetBundle |
||||||
|
{ |
||||||
|
public $basePath = '@webroot'; |
||||||
|
public $baseUrl = '@web'; |
||||||
|
public $css = array( |
||||||
|
'css/site.css', |
||||||
|
); |
||||||
|
public $js = array( |
||||||
|
); |
||||||
|
public $depends = array( |
||||||
|
'yii\web\YiiAsset', |
||||||
|
'yii\bootstrap\BootstrapAsset', |
||||||
|
); |
||||||
|
} |
@ -0,0 +1,36 @@ |
|||||||
|
<?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' => 'app-backend', |
||||||
|
'basePath' => dirname(__DIR__), |
||||||
|
'vendorPath' => dirname(dirname(__DIR__)) . '/vendor', |
||||||
|
'preload' => array('log'), |
||||||
|
'controllerNamespace' => 'backend\controllers', |
||||||
|
'modules' => array( |
||||||
|
), |
||||||
|
'components' => array( |
||||||
|
'db' => $params['components.db'], |
||||||
|
'cache' => $params['components.cache'], |
||||||
|
'user' => array( |
||||||
|
'class' => 'yii\web\User', |
||||||
|
'identityClass' => 'common\models\User', |
||||||
|
), |
||||||
|
'log' => array( |
||||||
|
'targets' => array( |
||||||
|
array( |
||||||
|
'class' => 'yii\log\FileTarget', |
||||||
|
'levels' => array('error', 'warning'), |
||||||
|
), |
||||||
|
), |
||||||
|
), |
||||||
|
), |
||||||
|
'params' => $params, |
||||||
|
); |
@ -0,0 +1,33 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace backend\controllers; |
||||||
|
|
||||||
|
use Yii; |
||||||
|
use yii\web\Controller; |
||||||
|
use common\models\LoginForm; |
||||||
|
|
||||||
|
class SiteController extends Controller |
||||||
|
{ |
||||||
|
public function actionIndex() |
||||||
|
{ |
||||||
|
return $this->render('index'); |
||||||
|
} |
||||||
|
|
||||||
|
public function actionLogin() |
||||||
|
{ |
||||||
|
$model = new LoginForm(); |
||||||
|
if ($model->load($_POST) && $model->login()) { |
||||||
|
return $this->redirect(array('site/index')); |
||||||
|
} else { |
||||||
|
return $this->render('login', array( |
||||||
|
'model' => $model, |
||||||
|
)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public function actionLogout() |
||||||
|
{ |
||||||
|
Yii::$app->user->logout(); |
||||||
|
return $this->redirect(array('site/index')); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,2 @@ |
|||||||
|
* |
||||||
|
!.gitignore |
@ -0,0 +1,22 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
Yii::setAlias('common', __DIR__ . '/../'); |
||||||
|
Yii::setAlias('frontend', __DIR__ . '/../../frontend'); |
||||||
|
Yii::setAlias('backend', __DIR__ . '/../../backend'); |
||||||
|
|
||||||
|
return array( |
||||||
|
'adminEmail' => 'admin@example.com', |
||||||
|
'supportEmail' => 'support@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' => '', |
||||||
|
'charset' => 'utf8', |
||||||
|
), |
||||||
|
); |
@ -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,145 @@ |
|||||||
|
<?php |
||||||
|
namespace common\models; |
||||||
|
|
||||||
|
use yii\db\ActiveRecord; |
||||||
|
use yii\helpers\Security; |
||||||
|
use yii\web\Identity; |
||||||
|
|
||||||
|
/** |
||||||
|
* Class User |
||||||
|
* @package common\models |
||||||
|
* |
||||||
|
* @property integer $id |
||||||
|
* @property string $username |
||||||
|
* @property string $password_hash |
||||||
|
* @property string $password_reset_token |
||||||
|
* @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 => array('create_time', 'update_time'), |
||||||
|
ActiveRecord::EVENT_BEFORE_UPDATE => 'update_time', |
||||||
|
), |
||||||
|
), |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Finds an identity by the given ID. |
||||||
|
* |
||||||
|
* @param string|integer $id the ID to be looked for |
||||||
|
* @return Identity|null the identity object that matches the given ID. |
||||||
|
*/ |
||||||
|
public static function findIdentity($id) |
||||||
|
{ |
||||||
|
return static::find($id); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Finds user by username |
||||||
|
* |
||||||
|
* @param string $username |
||||||
|
* @return null|User |
||||||
|
*/ |
||||||
|
public static function findByUsername($username) |
||||||
|
{ |
||||||
|
return static::find(array('username' => $username, 'status' => static::STATUS_ACTIVE)); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @return int|string current user ID |
||||||
|
*/ |
||||||
|
public function getId() |
||||||
|
{ |
||||||
|
return $this->id; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @return string current user auth key |
||||||
|
*/ |
||||||
|
public function getAuthKey() |
||||||
|
{ |
||||||
|
return $this->auth_key; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @param string $authKey |
||||||
|
* @return boolean if auth key is valid for current user |
||||||
|
*/ |
||||||
|
public function validateAuthKey($authKey) |
||||||
|
{ |
||||||
|
return $this->getAuthKey() === $authKey; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @param string $password password to validate |
||||||
|
* @return bool if password provided is valid for current user |
||||||
|
*/ |
||||||
|
public function validatePassword($password) |
||||||
|
{ |
||||||
|
return Security::validatePassword($password, $this->password_hash); |
||||||
|
} |
||||||
|
|
||||||
|
public function rules() |
||||||
|
{ |
||||||
|
return array( |
||||||
|
array('username', 'filter', 'filter' => 'trim'), |
||||||
|
array('username', 'required'), |
||||||
|
array('username', 'string', '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.', 'on' => 'signup'), |
||||||
|
array('email', 'exist', 'message' => 'There is no user with such email.', 'on' => 'requestPasswordResetToken'), |
||||||
|
|
||||||
|
array('password', 'required'), |
||||||
|
array('password', 'string', 'min' => 6), |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public function scenarios() |
||||||
|
{ |
||||||
|
return array( |
||||||
|
'signup' => array('username', 'email', 'password'), |
||||||
|
'login' => array('username', 'password'), |
||||||
|
'resetPassword' => array('password'), |
||||||
|
'requestPasswordResetToken' => array('email'), |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public function beforeSave($insert) |
||||||
|
{ |
||||||
|
if (parent::beforeSave($insert)) { |
||||||
|
if (($this->isNewRecord || $this->getScenario() === 'resetPassword') && !empty($this->password)) { |
||||||
|
$this->password_hash = Security::generatePasswordHash($this->password); |
||||||
|
} |
||||||
|
if ($this->isNewRecord) { |
||||||
|
$this->auth_key = Security::generateRandomKey(); |
||||||
|
} |
||||||
|
return true; |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,38 @@ |
|||||||
|
{ |
||||||
|
"name": "yiisoft/yii2-app-advanced", |
||||||
|
"description": "Yii 2 Advanced Application Template", |
||||||
|
"keywords": ["yii", "framework", "advanced", "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-create-project-cmd": [ |
||||||
|
"yii\\composer\\InstallHandler::setPermissions" |
||||||
|
] |
||||||
|
}, |
||||||
|
"extra": { |
||||||
|
"yii-install-writable": [ |
||||||
|
"backend/runtime", |
||||||
|
"backend/web/assets", |
||||||
|
|
||||||
|
"console/runtime", |
||||||
|
"console/migrations", |
||||||
|
|
||||||
|
"frontend/runtime", |
||||||
|
"frontend/web/assets" |
||||||
|
] |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,2 @@ |
|||||||
|
main-local.php |
||||||
|
params-local.php |
@ -0,0 +1,31 @@ |
|||||||
|
<?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' => 'app-console', |
||||||
|
'basePath' => dirname(__DIR__), |
||||||
|
'vendorPath' => dirname(dirname(__DIR__)) . '/vendor', |
||||||
|
'controllerNamespace' => 'console\controllers', |
||||||
|
'modules' => array( |
||||||
|
), |
||||||
|
'components' => array( |
||||||
|
'db' => $params['components.db'], |
||||||
|
'cache' => $params['components.cache'], |
||||||
|
'log' => array( |
||||||
|
'targets' => array( |
||||||
|
array( |
||||||
|
'class' => 'yii\log\FileTarget', |
||||||
|
'levels' => array('error', 'warning'), |
||||||
|
), |
||||||
|
), |
||||||
|
), |
||||||
|
), |
||||||
|
'params' => $params, |
||||||
|
); |
@ -0,0 +1,5 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
return array( |
||||||
|
'adminEmail' => 'admin@example.com', |
||||||
|
); |
@ -0,0 +1,31 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
use yii\db\Schema; |
||||||
|
|
||||||
|
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', |
||||||
|
'auth_key' => Schema::TYPE_STRING.'(32) NOT NULL', |
||||||
|
'password_hash' => Schema::TYPE_STRING.' NOT NULL', |
||||||
|
'password_reset_token' => Schema::TYPE_STRING.'(32)', |
||||||
|
'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\log\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\log\DebugTarget', |
||||||
|
// ) |
||||||
|
), |
||||||
|
), |
||||||
|
), |
||||||
|
); |
@ -0,0 +1,3 @@ |
|||||||
|
<?php |
||||||
|
return array( |
||||||
|
); |
@ -0,0 +1,16 @@ |
|||||||
|
<?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'); |
||||||
|
Yii::importNamespaces(require(__DIR__ . '/../../vendor/composer/autoload_namespaces.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,26 @@ |
|||||||
|
#!/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'); |
||||||
|
Yii::importNamespaces(require(__DIR__ . '/vendor/composer/autoload_namespaces.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); |
||||||
|
return $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( |
||||||
|
'yii', |
||||||
|
), |
||||||
|
), |
||||||
|
'Production' => array( |
||||||
|
'path' => 'prod', |
||||||
|
'writable' => array( |
||||||
|
// handled by composer.json already |
||||||
|
), |
||||||
|
'executable' => array( |
||||||
|
'yii', |
||||||
|
), |
||||||
|
), |
||||||
|
); |
@ -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,16 @@ |
|||||||
|
<?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'); |
||||||
|
Yii::importNamespaces(require(__DIR__ . '/../../vendor/composer/autoload_namespaces.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,26 @@ |
|||||||
|
#!/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'); |
||||||
|
Yii::importNamespaces(require(__DIR__ . '/vendor/composer/autoload_namespaces.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); |
||||||
|
return $application->run(); |
@ -0,0 +1,2 @@ |
|||||||
|
main-local.php |
||||||
|
params-local.php |
@ -0,0 +1,28 @@ |
|||||||
|
<?php |
||||||
|
/** |
||||||
|
* @link http://www.yiiframework.com/ |
||||||
|
* @copyright Copyright (c) 2008 Yii Software LLC |
||||||
|
* @license http://www.yiiframework.com/license/ |
||||||
|
*/ |
||||||
|
|
||||||
|
namespace frontend\config; |
||||||
|
use yii\web\AssetBundle; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Qiang Xue <qiang.xue@gmail.com> |
||||||
|
* @since 2.0 |
||||||
|
*/ |
||||||
|
class AppAsset extends AssetBundle |
||||||
|
{ |
||||||
|
public $basePath = '@webroot'; |
||||||
|
public $baseUrl = '@web'; |
||||||
|
public $css = array( |
||||||
|
'css/site.css', |
||||||
|
); |
||||||
|
public $js = array( |
||||||
|
); |
||||||
|
public $depends = array( |
||||||
|
'yii\web\YiiAsset', |
||||||
|
'yii\bootstrap\BootstrapAsset', |
||||||
|
); |
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
<?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' => 'app-frontend', |
||||||
|
'basePath' => dirname(__DIR__), |
||||||
|
'vendorPath' => dirname(dirname(__DIR__)) . '/vendor', |
||||||
|
'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', |
||||||
|
), |
||||||
|
'log' => array( |
||||||
|
'targets' => array( |
||||||
|
array( |
||||||
|
'class' => 'yii\log\FileTarget', |
||||||
|
'levels' => array('error', 'warning'), |
||||||
|
), |
||||||
|
), |
||||||
|
), |
||||||
|
), |
||||||
|
'params' => $params, |
||||||
|
); |
@ -0,0 +1,5 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
return array( |
||||||
|
'adminEmail' => 'admin@example.com', |
||||||
|
); |
@ -0,0 +1,146 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace frontend\controllers; |
||||||
|
|
||||||
|
use Yii; |
||||||
|
use yii\web\Controller; |
||||||
|
use common\models\LoginForm; |
||||||
|
use frontend\models\ContactForm; |
||||||
|
use common\models\User; |
||||||
|
use yii\web\HttpException; |
||||||
|
use yii\helpers\Security; |
||||||
|
|
||||||
|
class SiteController extends Controller |
||||||
|
{ |
||||||
|
public function actions() |
||||||
|
{ |
||||||
|
return array( |
||||||
|
'captcha' => array( |
||||||
|
'class' => 'yii\captcha\CaptchaAction', |
||||||
|
), |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public function actionIndex() |
||||||
|
{ |
||||||
|
return $this->render('index'); |
||||||
|
} |
||||||
|
|
||||||
|
public function actionLogin() |
||||||
|
{ |
||||||
|
$model = new LoginForm(); |
||||||
|
if ($model->load($_POST) && $model->login()) { |
||||||
|
return $this->redirect(array('site/index')); |
||||||
|
} else { |
||||||
|
return $this->render('login', array( |
||||||
|
'model' => $model, |
||||||
|
)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public function actionLogout() |
||||||
|
{ |
||||||
|
Yii::$app->user->logout(); |
||||||
|
return $this->redirect(array('site/index')); |
||||||
|
} |
||||||
|
|
||||||
|
public function actionContact() |
||||||
|
{ |
||||||
|
$model = new ContactForm; |
||||||
|
if ($model->load($_POST) && $model->contact(Yii::$app->params['adminEmail'])) { |
||||||
|
Yii::$app->session->setFlash('success', 'Thank you for contacting us. We will respond to you as soon as possible.'); |
||||||
|
return $this->refresh(); |
||||||
|
} else { |
||||||
|
return $this->render('contact', array( |
||||||
|
'model' => $model, |
||||||
|
)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public function actionAbout() |
||||||
|
{ |
||||||
|
return $this->render('about'); |
||||||
|
} |
||||||
|
|
||||||
|
public function actionSignup() |
||||||
|
{ |
||||||
|
$model = new User(); |
||||||
|
$model->setScenario('signup'); |
||||||
|
if ($model->load($_POST) && $model->save()) { |
||||||
|
if (Yii::$app->getUser()->login($model)) { |
||||||
|
$this->redirect('index'); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return $this->render('signup', array( |
||||||
|
'model' => $model, |
||||||
|
)); |
||||||
|
} |
||||||
|
|
||||||
|
public function actionRequestPasswordReset() |
||||||
|
{ |
||||||
|
$model = new User(); |
||||||
|
$model->scenario = 'requestPasswordResetToken'; |
||||||
|
if ($model->load($_POST) && $model->validate()) { |
||||||
|
if ($this->sendPasswordResetEmail($model->email)) { |
||||||
|
Yii::$app->getSession()->setFlash('success', 'Check your email for further instructions.'); |
||||||
|
$this->redirect('index'); |
||||||
|
} else { |
||||||
|
Yii::$app->getSession()->setFlash('error', 'There was an error sending email.'); |
||||||
|
} |
||||||
|
} |
||||||
|
return $this->render('requestPasswordResetToken', array( |
||||||
|
'model' => $model, |
||||||
|
)); |
||||||
|
} |
||||||
|
|
||||||
|
public function actionResetPassword($token) |
||||||
|
{ |
||||||
|
$model = User::find(array( |
||||||
|
'password_reset_token' => $token, |
||||||
|
'status' => User::STATUS_ACTIVE, |
||||||
|
)); |
||||||
|
|
||||||
|
if (!$model) { |
||||||
|
throw new HttpException(400, 'Wrong password reset token.'); |
||||||
|
} |
||||||
|
|
||||||
|
$model->scenario = 'resetPassword'; |
||||||
|
if ($model->load($_POST) && $model->save()) { |
||||||
|
Yii::$app->getSession()->setFlash('success', 'New password was saved.'); |
||||||
|
$this->redirect('index'); |
||||||
|
} |
||||||
|
|
||||||
|
return $this->render('resetPassword', array( |
||||||
|
'model' => $model, |
||||||
|
)); |
||||||
|
} |
||||||
|
|
||||||
|
private function sendPasswordResetEmail($email) |
||||||
|
{ |
||||||
|
$user = User::find(array( |
||||||
|
'status' => User::STATUS_ACTIVE, |
||||||
|
'email' => $email, |
||||||
|
)); |
||||||
|
|
||||||
|
if (!$user) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
$user->password_reset_token = Security::generateRandomKey(); |
||||||
|
if ($user->save(false)) { |
||||||
|
$fromEmail = \Yii::$app->params['supportEmail']; |
||||||
|
$name = '=?UTF-8?B?' . base64_encode(\Yii::$app->name . ' robot') . '?='; |
||||||
|
$subject = '=?UTF-8?B?' . base64_encode('Password reset for ' . \Yii::$app->name) . '?='; |
||||||
|
$body = $this->renderPartial('/emails/passwordResetToken', array( |
||||||
|
'user' => $user, |
||||||
|
)); |
||||||
|
$headers = "From: $name <{$fromEmail}>\r\n" . |
||||||
|
"MIME-Version: 1.0\r\n" . |
||||||
|
"Content-type: text/plain; charset=UTF-8"; |
||||||
|
return mail($fromEmail, $subject, $body, $headers); |
||||||
|
} |
||||||
|
|
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
@ -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,16 @@ |
|||||||
|
<?php |
||||||
|
use yii\helpers\Html; |
||||||
|
|
||||||
|
/** |
||||||
|
* @var yii\base\View $this |
||||||
|
* @var common\models\User $user; |
||||||
|
*/ |
||||||
|
|
||||||
|
$resetLink = Yii::$app->urlManager->createAbsoluteUrl('site/reset-password', array('token' => $user->password_reset_token)); |
||||||
|
?> |
||||||
|
|
||||||
|
Hello <?php echo Html::encode($user->username)?>,
|
||||||
|
|
||||||
|
Follow the link below to reset your password: |
||||||
|
|
||||||
|
<?php Html::a(Html::encode($resetLink), $resetLink)?> |
@ -0,0 +1,76 @@ |
|||||||
|
<?php |
||||||
|
use frontend\config\AppAsset; |
||||||
|
use yii\helpers\Html; |
||||||
|
use yii\widgets\Menu; |
||||||
|
use yii\widgets\Breadcrumbs; |
||||||
|
use frontend\widgets\Alert; |
||||||
|
|
||||||
|
/** |
||||||
|
* @var $this \yii\base\View |
||||||
|
* @var $content string |
||||||
|
*/ |
||||||
|
AppAsset::register($this); |
||||||
|
?> |
||||||
|
<?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 fullwidth"> |
||||||
|
<div class="navbar-inner"> |
||||||
|
<div class="container"> |
||||||
|
<?php |
||||||
|
$menuItems = array( |
||||||
|
array('label' => 'Home', 'url' => array('/site/index')), |
||||||
|
array('label' => 'About', 'url' => array('/site/about')), |
||||||
|
array('label' => 'Contact', 'url' => array('/site/contact')), |
||||||
|
); |
||||||
|
if (Yii::$app->user->isGuest) { |
||||||
|
$menuItems[] = array('label' => 'Signup', 'url' => array('/site/signup')); |
||||||
|
$menuItems[] = array('label' => 'Login', 'url' => array('/site/login')); |
||||||
|
} |
||||||
|
else { |
||||||
|
$menuItems[] = array('label' => 'Logout (' . Yii::$app->user->identity->username .')' , 'url' => array('/site/logout')); |
||||||
|
} |
||||||
|
echo Menu::widget(array( |
||||||
|
'options' => array('class' => 'nav'), |
||||||
|
'items' => $menuItems, |
||||||
|
)); |
||||||
|
?> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<!-- /.navbar --> |
||||||
|
</div> |
||||||
|
|
||||||
|
<?php echo Breadcrumbs::widget(array( |
||||||
|
'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : array(), |
||||||
|
)); ?> |
||||||
|
|
||||||
|
<?php echo Alert::widget()?> |
||||||
|
|
||||||
|
<?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> |
||||||
|
</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,26 @@ |
|||||||
|
<?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', array('class' => 'btn btn-primary')); ?> |
||||||
|
</div> |
||||||
|
<?php ActiveForm::end(); ?> |
||||||
|
|
||||||
|
<p>If you forgot your password you can <?php echo Html::a('reset it', array('site/request-password-reset'))?>.</p>
|
@ -0,0 +1,22 @@ |
|||||||
|
<?php |
||||||
|
use yii\helpers\Html; |
||||||
|
use yii\widgets\ActiveForm; |
||||||
|
|
||||||
|
/** |
||||||
|
* @var yii\base\View $this |
||||||
|
* @var yii\widgets\ActiveForm $form |
||||||
|
* @var frontend\models\User $model |
||||||
|
*/ |
||||||
|
$this->title = 'Request password reset'; |
||||||
|
$this->params['breadcrumbs'][] = $this->title; |
||||||
|
?> |
||||||
|
<h1><?php echo Html::encode($this->title); ?></h1>
|
||||||
|
|
||||||
|
<p>Please fill out your email. A link to reset password will be sent there.</p> |
||||||
|
|
||||||
|
<?php $form = ActiveForm::begin(array('options' => array('class' => 'form-horizontal'))); ?> |
||||||
|
<?php echo $form->field($model, 'email')->textInput(); ?> |
||||||
|
<div class="form-actions"> |
||||||
|
<?php echo Html::submitButton('Send', array('class' => 'btn btn-primary')); ?> |
||||||
|
</div> |
||||||
|
<?php ActiveForm::end(); ?> |
@ -0,0 +1,22 @@ |
|||||||
|
<?php |
||||||
|
use yii\helpers\Html; |
||||||
|
use yii\widgets\ActiveForm; |
||||||
|
|
||||||
|
/** |
||||||
|
* @var yii\base\View $this |
||||||
|
* @var yii\widgets\ActiveForm $form |
||||||
|
* @var common\models\User $model |
||||||
|
*/ |
||||||
|
$this->title = 'Reset password'; |
||||||
|
$this->params['breadcrumbs'][] = $this->title; |
||||||
|
?> |
||||||
|
<h1><?php echo Html::encode($this->title); ?></h1>
|
||||||
|
|
||||||
|
<p>Please choose your new password:</p> |
||||||
|
|
||||||
|
<?php $form = ActiveForm::begin(array('options' => array('class' => 'form-horizontal'))); ?> |
||||||
|
<?php echo $form->field($model, 'password')->passwordInput(); ?> |
||||||
|
<div class="form-actions"> |
||||||
|
<?php echo Html::submitButton('Save', array('class' => 'btn btn-primary')); ?> |
||||||
|
</div> |
||||||
|
<?php ActiveForm::end(); ?> |
@ -0,0 +1,24 @@ |
|||||||
|
<?php |
||||||
|
use yii\helpers\Html; |
||||||
|
use yii\widgets\ActiveForm; |
||||||
|
|
||||||
|
/** |
||||||
|
* @var yii\base\View $this |
||||||
|
* @var yii\widgets\ActiveForm $form |
||||||
|
* @var common\models\User $model |
||||||
|
*/ |
||||||
|
$this->title = 'Signup'; |
||||||
|
$this->params['breadcrumbs'][] = $this->title; |
||||||
|
?> |
||||||
|
<h1><?php echo Html::encode($this->title); ?></h1>
|
||||||
|
|
||||||
|
<p>Please fill out the following fields to signup:</p> |
||||||
|
|
||||||
|
<?php $form = ActiveForm::begin(array('options' => array('class' => 'form-horizontal'))); ?> |
||||||
|
<?php echo $form->field($model, 'username')->textInput(); ?> |
||||||
|
<?php echo $form->field($model, 'email')->textInput(); ?> |
||||||
|
<?php echo $form->field($model, 'password')->passwordInput(); ?> |
||||||
|
<div class="form-actions"> |
||||||
|
<?php echo Html::submitButton('Signup', 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.fullwidth .navbar-inner { |
||||||
|
padding: 0; |
||||||
|
} |
||||||
|
|
||||||
|
.navbar.fullwidth .nav { |
||||||
|
margin: 0; |
||||||
|
display: table; |
||||||
|
width: 100%; |
||||||
|
} |
||||||
|
|
||||||
|
.navbar.fullwidth .nav li { |
||||||
|
display: table-cell; |
||||||
|
width: 1%; |
||||||
|
float: none; |
||||||
|
} |
||||||
|
|
||||||
|
.navbar.fullwidth .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.fullwidth .nav li:first-child a { |
||||||
|
border-left: 0; |
||||||
|
border-radius: 3px 0 0 3px; |
||||||
|
} |
||||||
|
|
||||||
|
.navbar.fullwidth .nav li:last-child a { |
||||||
|
border-right: 0; |
||||||
|
border-radius: 0 3px 3px 0; |
||||||
|
} |
@ -0,0 +1,48 @@ |
|||||||
|
<?php |
||||||
|
/** |
||||||
|
* @link http://www.yiiframework.com/ |
||||||
|
* @copyright Copyright (c) 2008 Yii Software LLC |
||||||
|
* @license http://www.yiiframework.com/license/ |
||||||
|
*/ |
||||||
|
|
||||||
|
namespace frontend\widgets; |
||||||
|
|
||||||
|
use yii\helpers\Html; |
||||||
|
|
||||||
|
/** |
||||||
|
* Alert widget renders a message from session flash. You can set message as following: |
||||||
|
* |
||||||
|
* - \Yii::$app->getSession()->setFlash('error', 'This is the message'); |
||||||
|
* - \Yii::$app->getSession()->setFlash('success', 'This is the message'); |
||||||
|
* - \Yii::$app->getSession()->setFlash('info', 'This is the message'); |
||||||
|
* |
||||||
|
* @author Alexander Makarov <sam@rmcerative.ru> |
||||||
|
*/ |
||||||
|
class Alert extends \yii\bootstrap\Alert |
||||||
|
{ |
||||||
|
private $_doNotRender = false; |
||||||
|
public function init() |
||||||
|
{ |
||||||
|
if ($this->body = \Yii::$app->getSession()->getFlash('error')) { |
||||||
|
Html::addCssClass($this->options, 'alert-error'); |
||||||
|
} elseif ($this->body = \Yii::$app->getSession()->getFlash('success')) { |
||||||
|
Html::addCssClass($this->options, 'alert-success'); |
||||||
|
} elseif ($this->body = \Yii::$app->getSession()->getFlash('info')) { |
||||||
|
Html::addCssClass($this->options, 'alert-info'); |
||||||
|
} elseif ($this->body = \Yii::$app->getSession()->getFlash('warning')) { |
||||||
|
|
||||||
|
} else { |
||||||
|
$this->_doNotRender = true; |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
parent::init(); |
||||||
|
} |
||||||
|
|
||||||
|
public function run() |
||||||
|
{ |
||||||
|
if (!$this->_doNotRender) { |
||||||
|
parent::run(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -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 Init Tool v1.0\n\n"; |
||||||
|
echo "Which environment do you want the application to be initialized in?\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 initialization.\n"; |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
$env = $envs[$envNames[$answer]]; |
||||||
|
echo "\n Initialize the application under '{$envNames[$answer]}' environment? [yes|no] "; |
||||||
|
$answer = trim(fgets(STDIN)); |
||||||
|
if (strncasecmp($answer, 'y', 1)) { |
||||||
|
echo "\n Quit initialization.\n"; |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
echo "\n Start initialization ...\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 ... initialization 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 init 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%init" %* |
||||||
|
|
||||||
|
@endlocal |
@ -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,18 @@ |
|||||||
|
paths: |
||||||
|
tests: tests |
||||||
|
log: tests/_log |
||||||
|
data: tests/_data |
||||||
|
helpers: tests/_helpers |
||||||
|
settings: |
||||||
|
bootstrap: _bootstrap.php |
||||||
|
suite_class: \PHPUnit_Framework_TestSuite |
||||||
|
colors: true |
||||||
|
memory_limit: 1024M |
||||||
|
log: true |
||||||
|
modules: |
||||||
|
config: |
||||||
|
Db: |
||||||
|
dsn: '' |
||||||
|
user: '' |
||||||
|
password: '' |
||||||
|
dump: tests/_data/dump.sql |
@ -0,0 +1,29 @@ |
|||||||
|
<?php |
||||||
|
/** |
||||||
|
* @link http://www.yiiframework.com/ |
||||||
|
* @copyright Copyright (c) 2008 Yii Software LLC |
||||||
|
* @license http://www.yiiframework.com/license/ |
||||||
|
*/ |
||||||
|
|
||||||
|
namespace app\config; |
||||||
|
|
||||||
|
use yii\web\AssetBundle; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Qiang Xue <qiang.xue@gmail.com> |
||||||
|
* @since 2.0 |
||||||
|
*/ |
||||||
|
class AppAsset extends AssetBundle |
||||||
|
{ |
||||||
|
public $basePath = '@webroot'; |
||||||
|
public $baseUrl = '@web'; |
||||||
|
public $css = array( |
||||||
|
'css/site.css', |
||||||
|
); |
||||||
|
public $js = array( |
||||||
|
); |
||||||
|
public $depends = array( |
||||||
|
'yii\web\YiiAsset', |
||||||
|
'yii\bootstrap\BootstrapAsset', |
||||||
|
); |
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
return array( |
||||||
|
'adminEmail' => 'admin@example.com', |
||||||
|
); |
@ -0,0 +1,7 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
$config = require(__DIR__ . '/web.php'); |
||||||
|
|
||||||
|
// ... customize $config for the "test" environment here... |
||||||
|
|
||||||
|
return $config; |
@ -0,0 +1,35 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
$config = array( |
||||||
|
'id' => 'bootstrap', |
||||||
|
'basePath' => dirname(__DIR__), |
||||||
|
'components' => array( |
||||||
|
'cache' => array( |
||||||
|
'class' => 'yii\caching\FileCache', |
||||||
|
), |
||||||
|
'user' => array( |
||||||
|
'identityClass' => 'app\models\User', |
||||||
|
), |
||||||
|
'errorHandler' => array( |
||||||
|
'errorAction' => 'site/error', |
||||||
|
), |
||||||
|
'log' => array( |
||||||
|
'traceLevel' => YII_DEBUG ? 3 : 0, |
||||||
|
'targets' => array( |
||||||
|
array( |
||||||
|
'class' => 'yii\log\FileTarget', |
||||||
|
'levels' => array('error', 'warning'), |
||||||
|
), |
||||||
|
), |
||||||
|
), |
||||||
|
), |
||||||
|
'params' => require(__DIR__ . '/params.php'), |
||||||
|
); |
||||||
|
|
||||||
|
if (YII_ENV_DEV) { |
||||||
|
$config['preload'][] = 'debug'; |
||||||
|
$config['modules']['debug'] = 'yii\debug\Module'; |
||||||
|
$config['modules']['gii'] = 'yii\gii\Module'; |
||||||
|
} |
||||||
|
|
||||||
|
return $config; |
@ -0,0 +1,103 @@ |
|||||||
|
<?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__) . '/vendor/yiisoft/yii2/yii'; |
||||||
|
|
||||||
|
if (!is_dir($frameworkPath)) { |
||||||
|
echo '<h1>Error</h1>'; |
||||||
|
echo '<p><strong>The path to yii framework seems to be incorrect.</strong></p>'; |
||||||
|
echo '<p>You need to install Yii framework via composer or adjust the framework path in file <abbr title="' . __FILE__ . '">' . basename(__FILE__) .'</abbr>.</p>'; |
||||||
|
echo '<p>Please refer to the <abbr title="' . dirname(__FILE__) . '/README.md">README</abbr> on how to install Yii.</p>'; |
||||||
|
} |
||||||
|
|
||||||
|
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 @@ |
|||||||
|
/* Replace this file with actual dump of your database */ |
@ -0,0 +1,8 @@ |
|||||||
|
<?php |
||||||
|
namespace Codeception\Module; |
||||||
|
|
||||||
|
// here you can define custom functions for CodeGuy |
||||||
|
|
||||||
|
class CodeHelper extends \Codeception\Module |
||||||
|
{ |
||||||
|
} |
@ -0,0 +1,8 @@ |
|||||||
|
<?php |
||||||
|
namespace Codeception\Module; |
||||||
|
|
||||||
|
// here you can define custom functions for TestGuy |
||||||
|
|
||||||
|
class TestHelper extends \Codeception\Module |
||||||
|
{ |
||||||
|
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue