diff --git a/apps/advanced/backend/tests/_bootstrap.php b/apps/advanced/backend/tests/_bootstrap.php
index ee6d24a..da7a35d 100644
--- a/apps/advanced/backend/tests/_bootstrap.php
+++ b/apps/advanced/backend/tests/_bootstrap.php
@@ -2,14 +2,14 @@
 
 // the entry script URL (without host info) for functional and acceptance tests
 // PLEASE ADJUST IT TO THE ACTUAL ENTRY SCRIPT URL
-defined('TEST_ENTRY_URL') or define('TEST_ENTRY_URL', '/backend/web/index-test.php');
+defined('TEST_ENTRY_URL') ?: define('TEST_ENTRY_URL', '/backend/web/index-test.php');
 
 // the entry script file path for functional and acceptance tests
-defined('TEST_ENTRY_FILE') or define('TEST_ENTRY_FILE', dirname(__DIR__) . '/web/index-test.php');
+defined('TEST_ENTRY_FILE') ?: define('TEST_ENTRY_FILE', dirname(__DIR__) . '/web/index-test.php');
 
-defined('YII_DEBUG') or define('YII_DEBUG', true);
+defined('YII_DEBUG') ?: define('YII_DEBUG', true);
 
-defined('YII_ENV') or define('YII_ENV', 'test');
+defined('YII_ENV') ?: define('YII_ENV', 'test');
 
 require_once(__DIR__ . '/../../vendor/autoload.php');
 
diff --git a/apps/advanced/backend/tests/_console.php b/apps/advanced/backend/tests/_console.php
index b38c84e..2486123 100644
--- a/apps/advanced/backend/tests/_console.php
+++ b/apps/advanced/backend/tests/_console.php
@@ -8,12 +8,12 @@
  */
 
 // fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
+defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r'));
+defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w'));
 
 require_once(__DIR__ . '/../../vendor/autoload.php');
 require_once(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
 require_once(__DIR__ . '/../../common/config/aliases.php');
 
-defined('YII_DEBUG') or define('YII_DEBUG', true);
-defined('YII_ENV') or define('YII_ENV', 'test');
+defined('YII_DEBUG') ?: define('YII_DEBUG', true);
+defined('YII_ENV') ?: define('YII_ENV', 'test');
diff --git a/apps/advanced/backend/tests/acceptance/yii b/apps/advanced/backend/tests/acceptance/yii
index a348a9a..2c5d280 100644
--- a/apps/advanced/backend/tests/acceptance/yii
+++ b/apps/advanced/backend/tests/acceptance/yii
@@ -9,8 +9,8 @@
  */
 
 // fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
+defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r'));
+defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w'));
 
 require_once(__DIR__ . '/../_console.php');
 
diff --git a/apps/advanced/backend/tests/functional/yii b/apps/advanced/backend/tests/functional/yii
index a348a9a..2c5d280 100644
--- a/apps/advanced/backend/tests/functional/yii
+++ b/apps/advanced/backend/tests/functional/yii
@@ -9,8 +9,8 @@
  */
 
 // fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
+defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r'));
+defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w'));
 
 require_once(__DIR__ . '/../_console.php');
 
diff --git a/apps/advanced/backend/tests/unit/yii b/apps/advanced/backend/tests/unit/yii
index a348a9a..2c5d280 100644
--- a/apps/advanced/backend/tests/unit/yii
+++ b/apps/advanced/backend/tests/unit/yii
@@ -9,8 +9,8 @@
  */
 
 // fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
+defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r'));
+defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w'));
 
 require_once(__DIR__ . '/../_console.php');
 
diff --git a/apps/advanced/common/mail/layouts/html.php b/apps/advanced/common/mail/layouts/html.php
index 2e6b615..8e2707d 100644
--- a/apps/advanced/common/mail/layouts/html.php
+++ b/apps/advanced/common/mail/layouts/html.php
@@ -1,10 +1,9 @@
 <?php
 use yii\helpers\Html;
-use yii\mail\BaseMessage;
 
 /**
  * @var \yii\web\View $this
- * @var BaseMessage $content
+ * @var \yii\mail\BaseMessage $content
  */
 ?>
 <?php $this->beginPage() ?>
diff --git a/apps/advanced/common/tests/_bootstrap.php b/apps/advanced/common/tests/_bootstrap.php
index c64ad3b..9ffbe8f 100644
--- a/apps/advanced/common/tests/_bootstrap.php
+++ b/apps/advanced/common/tests/_bootstrap.php
@@ -2,14 +2,14 @@
 
 // the entry script URL (without host info) for functional and acceptance tests
 // PLEASE ADJUST IT TO THE ACTUAL ENTRY SCRIPT URL
-defined('TEST_ENTRY_URL') or define('TEST_ENTRY_URL', '/index-test.php');
+defined('TEST_ENTRY_URL') ?: define('TEST_ENTRY_URL', '/index-test.php');
 
 // the entry script file path for functional and acceptance tests
-defined('TEST_ENTRY_FILE') or define('TEST_ENTRY_FILE', dirname(__DIR__) . '/index-test.php');
+defined('TEST_ENTRY_FILE') ?: define('TEST_ENTRY_FILE', dirname(__DIR__) . '/index-test.php');
 
-defined('YII_DEBUG') or define('YII_DEBUG', true);
+defined('YII_DEBUG') ?: define('YII_DEBUG', true);
 
-defined('YII_ENV') or define('YII_ENV', 'test');
+defined('YII_ENV') ?: define('YII_ENV', 'test');
 
 require_once(__DIR__ . '/../../vendor/autoload.php');
 
diff --git a/apps/advanced/common/tests/_console.php b/apps/advanced/common/tests/_console.php
index b38c84e..2486123 100644
--- a/apps/advanced/common/tests/_console.php
+++ b/apps/advanced/common/tests/_console.php
@@ -8,12 +8,12 @@
  */
 
 // fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
+defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r'));
+defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w'));
 
 require_once(__DIR__ . '/../../vendor/autoload.php');
 require_once(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
 require_once(__DIR__ . '/../../common/config/aliases.php');
 
-defined('YII_DEBUG') or define('YII_DEBUG', true);
-defined('YII_ENV') or define('YII_ENV', 'test');
+defined('YII_DEBUG') ?: define('YII_DEBUG', true);
+defined('YII_ENV') ?: define('YII_ENV', 'test');
diff --git a/apps/advanced/common/tests/unit/yii b/apps/advanced/common/tests/unit/yii
index a348a9a..2c5d280 100644
--- a/apps/advanced/common/tests/unit/yii
+++ b/apps/advanced/common/tests/unit/yii
@@ -9,8 +9,8 @@
  */
 
 // fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
+defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r'));
+defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w'));
 
 require_once(__DIR__ . '/../_console.php');
 
diff --git a/apps/advanced/console/tests/_bootstrap.php b/apps/advanced/console/tests/_bootstrap.php
index c64ad3b..9ffbe8f 100644
--- a/apps/advanced/console/tests/_bootstrap.php
+++ b/apps/advanced/console/tests/_bootstrap.php
@@ -2,14 +2,14 @@
 
 // the entry script URL (without host info) for functional and acceptance tests
 // PLEASE ADJUST IT TO THE ACTUAL ENTRY SCRIPT URL
-defined('TEST_ENTRY_URL') or define('TEST_ENTRY_URL', '/index-test.php');
+defined('TEST_ENTRY_URL') ?: define('TEST_ENTRY_URL', '/index-test.php');
 
 // the entry script file path for functional and acceptance tests
-defined('TEST_ENTRY_FILE') or define('TEST_ENTRY_FILE', dirname(__DIR__) . '/index-test.php');
+defined('TEST_ENTRY_FILE') ?: define('TEST_ENTRY_FILE', dirname(__DIR__) . '/index-test.php');
 
-defined('YII_DEBUG') or define('YII_DEBUG', true);
+defined('YII_DEBUG') ?: define('YII_DEBUG', true);
 
-defined('YII_ENV') or define('YII_ENV', 'test');
+defined('YII_ENV') ?: define('YII_ENV', 'test');
 
 require_once(__DIR__ . '/../../vendor/autoload.php');
 
diff --git a/apps/advanced/console/tests/_console.php b/apps/advanced/console/tests/_console.php
index b38c84e..2486123 100644
--- a/apps/advanced/console/tests/_console.php
+++ b/apps/advanced/console/tests/_console.php
@@ -8,12 +8,12 @@
  */
 
 // fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
+defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r'));
+defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w'));
 
 require_once(__DIR__ . '/../../vendor/autoload.php');
 require_once(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
 require_once(__DIR__ . '/../../common/config/aliases.php');
 
-defined('YII_DEBUG') or define('YII_DEBUG', true);
-defined('YII_ENV') or define('YII_ENV', 'test');
+defined('YII_DEBUG') ?: define('YII_DEBUG', true);
+defined('YII_ENV') ?: define('YII_ENV', 'test');
diff --git a/apps/advanced/console/tests/unit/yii b/apps/advanced/console/tests/unit/yii
index a348a9a..2c5d280 100644
--- a/apps/advanced/console/tests/unit/yii
+++ b/apps/advanced/console/tests/unit/yii
@@ -9,8 +9,8 @@
  */
 
 // fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
+defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r'));
+defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w'));
 
 require_once(__DIR__ . '/../_console.php');
 
diff --git a/apps/advanced/environments/dev/backend/web/index-test.php b/apps/advanced/environments/dev/backend/web/index-test.php
index 1cd0794..81009d2 100644
--- a/apps/advanced/environments/dev/backend/web/index-test.php
+++ b/apps/advanced/environments/dev/backend/web/index-test.php
@@ -5,8 +5,8 @@ if (!in_array(@$_SERVER['REMOTE_ADDR'], ['127.0.0.1', '::1'])) {
 	die('You are not allowed to access this file.');
 }
 
-defined('YII_DEBUG') or define('YII_DEBUG', true);
-defined('YII_ENV') or define('YII_ENV', 'test');
+defined('YII_DEBUG') ?: define('YII_DEBUG', true);
+defined('YII_ENV') ?: define('YII_ENV', 'test');
 
 require(__DIR__ . '/../../vendor/autoload.php');
 require(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
diff --git a/apps/advanced/environments/dev/backend/web/index.php b/apps/advanced/environments/dev/backend/web/index.php
index ed8e69f..4248787 100644
--- a/apps/advanced/environments/dev/backend/web/index.php
+++ b/apps/advanced/environments/dev/backend/web/index.php
@@ -1,6 +1,6 @@
 <?php
-defined('YII_DEBUG') or define('YII_DEBUG', true);
-defined('YII_ENV') or define('YII_ENV', 'dev');
+defined('YII_DEBUG') ?: define('YII_DEBUG', true);
+defined('YII_ENV') ?: define('YII_ENV', 'dev');
 
 require(__DIR__ . '/../../vendor/autoload.php');
 require(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
diff --git a/apps/advanced/environments/dev/frontend/web/index-test.php b/apps/advanced/environments/dev/frontend/web/index-test.php
index 1cd0794..81009d2 100644
--- a/apps/advanced/environments/dev/frontend/web/index-test.php
+++ b/apps/advanced/environments/dev/frontend/web/index-test.php
@@ -5,8 +5,8 @@ if (!in_array(@$_SERVER['REMOTE_ADDR'], ['127.0.0.1', '::1'])) {
 	die('You are not allowed to access this file.');
 }
 
-defined('YII_DEBUG') or define('YII_DEBUG', true);
-defined('YII_ENV') or define('YII_ENV', 'test');
+defined('YII_DEBUG') ?: define('YII_DEBUG', true);
+defined('YII_ENV') ?: define('YII_ENV', 'test');
 
 require(__DIR__ . '/../../vendor/autoload.php');
 require(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
diff --git a/apps/advanced/environments/dev/frontend/web/index.php b/apps/advanced/environments/dev/frontend/web/index.php
index ed8e69f..4248787 100644
--- a/apps/advanced/environments/dev/frontend/web/index.php
+++ b/apps/advanced/environments/dev/frontend/web/index.php
@@ -1,6 +1,6 @@
 <?php
-defined('YII_DEBUG') or define('YII_DEBUG', true);
-defined('YII_ENV') or define('YII_ENV', 'dev');
+defined('YII_DEBUG') ?: define('YII_DEBUG', true);
+defined('YII_ENV') ?: define('YII_ENV', 'dev');
 
 require(__DIR__ . '/../../vendor/autoload.php');
 require(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
diff --git a/apps/advanced/environments/dev/yii b/apps/advanced/environments/dev/yii
index a282824..3d552af 100644
--- a/apps/advanced/environments/dev/yii
+++ b/apps/advanced/environments/dev/yii
@@ -8,12 +8,12 @@
  * @license http://www.yiiframework.com/license/
  */
 
-defined('YII_DEBUG') or define('YII_DEBUG', true);
-defined('YII_ENV') or define('YII_ENV', 'dev');
+defined('YII_DEBUG') ?: define('YII_DEBUG', true);
+defined('YII_ENV') ?: define('YII_ENV', 'dev');
 
 // fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
+defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r'));
+defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w'));
 
 require(__DIR__ . '/vendor/autoload.php');
 require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
diff --git a/apps/advanced/environments/prod/backend/web/index.php b/apps/advanced/environments/prod/backend/web/index.php
index 8a215ce..7cab3d3 100644
--- a/apps/advanced/environments/prod/backend/web/index.php
+++ b/apps/advanced/environments/prod/backend/web/index.php
@@ -1,6 +1,6 @@
 <?php
-defined('YII_DEBUG') or define('YII_DEBUG', false);
-defined('YII_ENV') or define('YII_ENV', 'prod');
+defined('YII_DEBUG') ?: define('YII_DEBUG', false);
+defined('YII_ENV') ?: define('YII_ENV', 'prod');
 
 require(__DIR__ . '/../../vendor/autoload.php');
 require(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
diff --git a/apps/advanced/environments/prod/frontend/web/index.php b/apps/advanced/environments/prod/frontend/web/index.php
index 8a215ce..7cab3d3 100644
--- a/apps/advanced/environments/prod/frontend/web/index.php
+++ b/apps/advanced/environments/prod/frontend/web/index.php
@@ -1,6 +1,6 @@
 <?php
-defined('YII_DEBUG') or define('YII_DEBUG', false);
-defined('YII_ENV') or define('YII_ENV', 'prod');
+defined('YII_DEBUG') ?: define('YII_DEBUG', false);
+defined('YII_ENV') ?: define('YII_ENV', 'prod');
 
 require(__DIR__ . '/../../vendor/autoload.php');
 require(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
diff --git a/apps/advanced/environments/prod/yii b/apps/advanced/environments/prod/yii
index 7f738bd..c1e3f01 100644
--- a/apps/advanced/environments/prod/yii
+++ b/apps/advanced/environments/prod/yii
@@ -8,12 +8,12 @@
  * @license http://www.yiiframework.com/license/
  */
 
-defined('YII_DEBUG') or define('YII_DEBUG', false);
-defined('YII_ENV') or define('YII_ENV', 'prod');
+defined('YII_DEBUG') ?: define('YII_DEBUG', false);
+defined('YII_ENV') ?: define('YII_ENV', 'prod');
 
 // fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
+defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r'));
+defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w'));
 
 require(__DIR__ . '/vendor/autoload.php');
 require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
diff --git a/apps/advanced/frontend/tests/_bootstrap.php b/apps/advanced/frontend/tests/_bootstrap.php
index 09f11dd..edee52b 100644
--- a/apps/advanced/frontend/tests/_bootstrap.php
+++ b/apps/advanced/frontend/tests/_bootstrap.php
@@ -2,14 +2,14 @@
 
 // the entry script URL (without host info) for functional and acceptance tests
 // PLEASE ADJUST IT TO THE ACTUAL ENTRY SCRIPT URL
-defined('TEST_ENTRY_URL') or define('TEST_ENTRY_URL', '/frontend/web/index-test.php');
+defined('TEST_ENTRY_URL') ?: define('TEST_ENTRY_URL', '/frontend/web/index-test.php');
 
 // the entry script file path for functional and acceptance tests
-defined('TEST_ENTRY_FILE') or define('TEST_ENTRY_FILE', dirname(__DIR__) . '/web/index-test.php');
+defined('TEST_ENTRY_FILE') ?: define('TEST_ENTRY_FILE', dirname(__DIR__) . '/web/index-test.php');
 
-defined('YII_DEBUG') or define('YII_DEBUG', true);
+defined('YII_DEBUG') ?: define('YII_DEBUG', true);
 
-defined('YII_ENV') or define('YII_ENV', 'test');
+defined('YII_ENV') ?: define('YII_ENV', 'test');
 
 require_once(__DIR__ . '/../../vendor/autoload.php');
 
diff --git a/apps/advanced/frontend/tests/_console.php b/apps/advanced/frontend/tests/_console.php
index b38c84e..2486123 100644
--- a/apps/advanced/frontend/tests/_console.php
+++ b/apps/advanced/frontend/tests/_console.php
@@ -8,12 +8,12 @@
  */
 
 // fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
+defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r'));
+defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w'));
 
 require_once(__DIR__ . '/../../vendor/autoload.php');
 require_once(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
 require_once(__DIR__ . '/../../common/config/aliases.php');
 
-defined('YII_DEBUG') or define('YII_DEBUG', true);
-defined('YII_ENV') or define('YII_ENV', 'test');
+defined('YII_DEBUG') ?: define('YII_DEBUG', true);
+defined('YII_ENV') ?: define('YII_ENV', 'test');
diff --git a/apps/advanced/frontend/tests/acceptance/yii b/apps/advanced/frontend/tests/acceptance/yii
index a348a9a..2c5d280 100644
--- a/apps/advanced/frontend/tests/acceptance/yii
+++ b/apps/advanced/frontend/tests/acceptance/yii
@@ -9,8 +9,8 @@
  */
 
 // fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
+defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r'));
+defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w'));
 
 require_once(__DIR__ . '/../_console.php');
 
diff --git a/apps/advanced/frontend/tests/functional/yii b/apps/advanced/frontend/tests/functional/yii
index a348a9a..2c5d280 100644
--- a/apps/advanced/frontend/tests/functional/yii
+++ b/apps/advanced/frontend/tests/functional/yii
@@ -9,8 +9,8 @@
  */
 
 // fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
+defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r'));
+defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w'));
 
 require_once(__DIR__ . '/../_console.php');
 
diff --git a/apps/advanced/frontend/tests/unit/yii b/apps/advanced/frontend/tests/unit/yii
index a348a9a..2c5d280 100644
--- a/apps/advanced/frontend/tests/unit/yii
+++ b/apps/advanced/frontend/tests/unit/yii
@@ -9,8 +9,8 @@
  */
 
 // fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
+defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r'));
+defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w'));
 
 require_once(__DIR__ . '/../_console.php');
 
diff --git a/apps/basic/mail/layouts/html.php b/apps/basic/mail/layouts/html.php
index 2e6b615..8e2707d 100644
--- a/apps/basic/mail/layouts/html.php
+++ b/apps/basic/mail/layouts/html.php
@@ -1,10 +1,9 @@
 <?php
 use yii\helpers\Html;
-use yii\mail\BaseMessage;
 
 /**
  * @var \yii\web\View $this
- * @var BaseMessage $content
+ * @var \yii\mail\BaseMessage $content
  */
 ?>
 <?php $this->beginPage() ?>
diff --git a/apps/basic/tests/_bootstrap.php b/apps/basic/tests/_bootstrap.php
index 4890b3e..7db3cfd 100644
--- a/apps/basic/tests/_bootstrap.php
+++ b/apps/basic/tests/_bootstrap.php
@@ -2,14 +2,14 @@
 
 // the entry script URL (without host info) for functional and acceptance tests
 // PLEASE ADJUST IT TO THE ACTUAL ENTRY SCRIPT URL
-defined('TEST_ENTRY_URL') or define('TEST_ENTRY_URL', '/basic/web/index-test.php');
+defined('TEST_ENTRY_URL') ?: define('TEST_ENTRY_URL', '/basic/web/index-test.php');
 
 // the entry script file path for functional and acceptance tests
-defined('TEST_ENTRY_FILE') or define('TEST_ENTRY_FILE', dirname(__DIR__) . '/web/index-test.php');
+defined('TEST_ENTRY_FILE') ?: define('TEST_ENTRY_FILE', dirname(__DIR__) . '/web/index-test.php');
 
-defined('YII_DEBUG') or define('YII_DEBUG', true);
+defined('YII_DEBUG') ?: define('YII_DEBUG', true);
 
-defined('YII_ENV') or define('YII_ENV', 'test');
+defined('YII_ENV') ?: define('YII_ENV', 'test');
 
 require_once(__DIR__ . '/../vendor/autoload.php');
 
diff --git a/apps/basic/tests/_console_bootstrap.php b/apps/basic/tests/_console_bootstrap.php
index 81287f3..1eb0644 100644
--- a/apps/basic/tests/_console_bootstrap.php
+++ b/apps/basic/tests/_console_bootstrap.php
@@ -1,12 +1,12 @@
 <?php
 
-defined('YII_DEBUG') or define('YII_DEBUG', true);
+defined('YII_DEBUG') ?: define('YII_DEBUG', true);
 
-defined('YII_ENV') or define('YII_ENV', 'test');
+defined('YII_ENV') ?: define('YII_ENV', 'test');
 
 // fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
+defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r'));
+defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w'));
 
 require(__DIR__ . '/../vendor/autoload.php');
 require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
diff --git a/apps/basic/web/index-test.php b/apps/basic/web/index-test.php
index b5ed695..5709d21 100644
--- a/apps/basic/web/index-test.php
+++ b/apps/basic/web/index-test.php
@@ -5,8 +5,8 @@ if (!in_array(@$_SERVER['REMOTE_ADDR'], ['127.0.0.1', '::1'])) {
 	die('You are not allowed to access this file.');
 }
 
-defined('YII_DEBUG') or define('YII_DEBUG', true);
-defined('YII_ENV') or define('YII_ENV', 'test');
+defined('YII_DEBUG') ?: define('YII_DEBUG', true);
+defined('YII_ENV') ?: define('YII_ENV', 'test');
 
 require(__DIR__ . '/../vendor/autoload.php');
 require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
diff --git a/apps/basic/web/index.php b/apps/basic/web/index.php
index d1e070a..6e4b4d8 100644
--- a/apps/basic/web/index.php
+++ b/apps/basic/web/index.php
@@ -1,8 +1,8 @@
 <?php
 
 // comment out the following two lines when deployed to production
-defined('YII_DEBUG') or define('YII_DEBUG', true);
-defined('YII_ENV') or define('YII_ENV', 'dev');
+defined('YII_DEBUG') ?: define('YII_DEBUG', true);
+defined('YII_ENV') ?: define('YII_ENV', 'dev');
 
 require(__DIR__ . '/../vendor/autoload.php');
 require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
diff --git a/apps/basic/yii b/apps/basic/yii
index b032ebd..ad914bd 100755
--- a/apps/basic/yii
+++ b/apps/basic/yii
@@ -8,11 +8,11 @@
  * @license http://www.yiiframework.com/license/
  */
 
-defined('YII_DEBUG') or define('YII_DEBUG', true);
+defined('YII_DEBUG') ?: define('YII_DEBUG', true);
 
 // fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
+defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r'));
+defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w'));
 
 require(__DIR__ . '/vendor/autoload.php');
 require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
diff --git a/apps/benchmark/index.php b/apps/benchmark/index.php
index 2bcb252..c0c00b8 100644
--- a/apps/benchmark/index.php
+++ b/apps/benchmark/index.php
@@ -1,6 +1,6 @@
 <?php
 
-defined('YII_DEBUG') or define('YII_DEBUG', false);
+defined('YII_DEBUG') ?: define('YII_DEBUG', false);
 
 require(__DIR__ . '/protected/vendor/yiisoft/yii2/Yii.php');
 
diff --git a/build/build b/build/build
index 51949a9..36d13d2 100755
--- a/build/build
+++ b/build/build
@@ -9,8 +9,8 @@
  */
 
 // fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
+defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r'));
+defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w'));
 
 define('YII_DEBUG', true);
 
diff --git a/build/controllers/ClassmapController.php b/build/controllers/ClassmapController.php
index 706435a..5fd4e5f 100644
--- a/build/controllers/ClassmapController.php
+++ b/build/controllers/ClassmapController.php
@@ -52,7 +52,7 @@ class ClassmapController extends Controller
 		$files = FileHelper::findFiles($root, $options);
 		$map = [];
 		foreach ($files as $file) {
-			if (($pos = strpos($file, $root)) !== 0) {
+			if (strpos($file, $root) !== 0) {
 				die("Something wrong: $file\n");
 			}
 			$path = str_replace('\\', '/', substr($file, strlen($root)));
diff --git a/docs/guide/assets.md b/docs/guide/assets.md
index 17c6797..ca3b07c 100644
--- a/docs/guide/assets.md
+++ b/docs/guide/assets.md
@@ -81,18 +81,26 @@ following way:
 ```php
 class LanguageAsset extends AssetBundle
 {
-    public $sourcePath = '@app/assets/language';
-    public $js = [
-    ];
-
-    public function init()
-    {
-        $this->js[] = 'language-' . Yii::$app->language . '.js';
-        parent::init();
-    }
+	public $language;
+	public $sourcePath = '@app/assets/language';
+	public $js = [
+	];
+
+	public function registerAssetFiles($view)
+	{
+		$language = $this->language ? $this->language : Yii::$app->language;
+		$this->js[] = 'language-' . $language . '.js';
+		parent::registerAssetFiles($view);
+	}
 }
 ```
 
+In order to set language use the following code when registering an asset bundle in a view:
+
+```php
+LanguageAsset::register($this)->language = $language;
+```
+
 
 Registering asset bundle
 ------------------------
@@ -114,6 +122,10 @@ To register an asset inside of a widget, the view instance is available as `$thi
 AppAsset::register($this->view);
 ```
 
+> Note: If there is a need to modify third party asset bundles it is recommended to create your own bundles depending
+  on third party ones and use CSS and JavaScript features to modify behavior instead of editing files directly or
+  copying them over.
+
 
 Overriding asset bundles
 ------------------------
diff --git a/docs/guide/configuration.md b/docs/guide/configuration.md
index 4c82ecd..eca50a1 100644
--- a/docs/guide/configuration.md
+++ b/docs/guide/configuration.md
@@ -24,14 +24,14 @@ Like any resource in your Yii application, the bootstrap file can be edited to f
 The default bootstrap structure sets `YII_DEBUG` to `false` if not defined:
 
 ```php
-defined('YII_DEBUG') or define('YII_DEBUG', false);
+defined('YII_DEBUG') ?: define('YII_DEBUG', false);
 ```
 
 During development, you can change this to `true`:
 
 ```php
 define('YII_DEBUG', true); // Development only 
-defined('YII_DEBUG') or define('YII_DEBUG', false);
+defined('YII_DEBUG') ?: define('YII_DEBUG', false);
 ```
 
 Configuring the application instance
diff --git a/docs/guide/console.md b/docs/guide/console.md
index 91f2616..8b36eda 100644
--- a/docs/guide/console.md
+++ b/docs/guide/console.md
@@ -40,11 +40,11 @@ code like the following:
  * @license http://www.yiiframework.com/license/
  */
 
-defined('YII_DEBUG') or define('YII_DEBUG', true);
+defined('YII_DEBUG') ?: define('YII_DEBUG', true);
 
 // fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
+defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r'));
+defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w'));
 
 require(__DIR__ . '/vendor/autoload.php');
 require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
diff --git a/docs/guide/module-debug.md b/docs/guide/module-debug.md
index 916101c..0ecf347 100644
--- a/docs/guide/module-debug.md
+++ b/docs/guide/module-debug.md
@@ -76,7 +76,7 @@ return [
 By default it's automatically set to `3` if Yii is run in debug mode i.e. your `index.php` file contains the following:
 
 ```php
-defined('YII_DEBUG') or define('YII_DEBUG', true);
+defined('YII_DEBUG') ?: define('YII_DEBUG', true);
 ```
 
 > Note: Make sure to disable debug mode on production since it may have significan performance effect and expose sensible
diff --git a/docs/guide/performance.md b/docs/guide/performance.md
index 9eb8ccf..40eb380 100644
--- a/docs/guide/performance.md
+++ b/docs/guide/performance.md
@@ -28,7 +28,7 @@ is to disable debug mode. A Yii application runs in debug mode if the constant
 should be in your `index.php`:
 
 ```php
-defined('YII_DEBUG') or define('YII_DEBUG', false);
+defined('YII_DEBUG') ?: define('YII_DEBUG', false);
 ```
 
 Debug mode is very useful during development stage, but it would impact performance
diff --git a/docs/guide/theming.md b/docs/guide/theming.md
index e627f7c..037e70c 100644
--- a/docs/guide/theming.md
+++ b/docs/guide/theming.md
@@ -1,7 +1,12 @@
 Theming
 =======
 
-TBD
+A theme is a directory of view and layout files. Each file of the theme overrides corresponding file of an application
+when rendered. A single application may use multiple themes and each may provide totally different experience. At any
+time only one theme can be active.
+
+> Note: Themes usually do not meant to be redistributed since views are too application specific. If you want to
+  redistribute customized look and feel consider CSS and JavaScript files in form of [asset bundles](assets.md) instead.
 
 Configuring current theme
 -------------------------
@@ -18,4 +23,27 @@ be in your application config file:
 		],
 	],
 ],
-```
\ No newline at end of file
+```
+
+In the above `pathMap` defines where to look for view files while `baseUrl` defines base URL for resources referenced
+from these files. For example, if `pathMap` is `['/web/views' => '/web/themes/basic']`,  then the themed version
+for a view file `/web/views/site/index.php` will be `/web/themes/basic/site/index.php`.
+
+Using multiple paths
+--------------------
+
+It is possible to map a single path to multiple paths. For example,
+
+```php
+'pathMap' => [
+	'/web/views' => [
+		'/web/themes/christmas',
+		'/web/themes/basic',
+	],
+]
+```
+
+In this case, the view will be searched in `/web/themes/christmas/site/index.php` then if it's not found it will check
+`/web/themes/basic/site/index.php`. If there's no view there as well application view will be used.
+
+This ability is especially useful if you want to temporary or conditionally override some views.
diff --git a/extensions/apidoc/apidoc b/extensions/apidoc/apidoc
index 27a10af..40da46b 100755
--- a/extensions/apidoc/apidoc
+++ b/extensions/apidoc/apidoc
@@ -8,7 +8,7 @@
  * @license http://www.yiiframework.com/license/
  */
 
-defined('YII_DEBUG') or define('YII_DEBUG', false);
+defined('YII_DEBUG') ?: define('YII_DEBUG', false);
 
 $composerAutoload = [
 	__DIR__ . '/vendor/autoload.php', // standalone with "composer install" run
diff --git a/extensions/debug/views/default/panels/config/detail.php b/extensions/debug/views/default/panels/config/detail.php
index 88e96a1..b2cfde1 100644
--- a/extensions/debug/views/default/panels/config/detail.php
+++ b/extensions/debug/views/default/panels/config/detail.php
@@ -1,6 +1,4 @@
 <?php
-use yii\helpers\Html;
-
 /**
  * @var yii\debug\panels\ConfigPanel $panel
  */
diff --git a/extensions/debug/views/default/panels/config/summary.php b/extensions/debug/views/default/panels/config/summary.php
index af72260..bb3a6dd 100644
--- a/extensions/debug/views/default/panels/config/summary.php
+++ b/extensions/debug/views/default/panels/config/summary.php
@@ -1,7 +1,4 @@
 <?php
-
-use yii\helpers\Html;
-
 /**
  * @var yii\debug\panels\ConfigPanel $panel
  */
diff --git a/extensions/gii/CHANGELOG.md b/extensions/gii/CHANGELOG.md
index 8a7632d..f0afd7d 100644
--- a/extensions/gii/CHANGELOG.md
+++ b/extensions/gii/CHANGELOG.md
@@ -13,6 +13,7 @@ Yii Framework 2 gii extension Change Log
 - Enh #1897: diff markup is now copy paste friendly (samdark)
 - Enh #2327: better visual representation of changed files, added header and refresh button to diff modal (thiagotalma)
 - Enh #2491: Added support for using the same base class name of search model and data model in Gii (qiangxue)
+- Enh #2595: Browse through all generated files using right and left arrows (thiagotalma)
 
 2.0.0 alpha, December 1, 2013
 -----------------------------
diff --git a/extensions/gii/assets/gii.js b/extensions/gii/assets/gii.js
index c5a70ab..981327b 100644
--- a/extensions/gii/assets/gii.js
+++ b/extensions/gii/assets/gii.js
@@ -35,10 +35,13 @@ yii.gii = (function ($) {
 	};
 
 	var initPreviewDiffLinks = function () {
-		$('.preview-code, .diff-code, .modal-refresh').on('click', function () {
+		$('.preview-code, .diff-code, .modal-refresh, .modal-previous, .modal-next').on('click', function () {
 			var $modal = $('#preview-modal');
 			var $link = $(this);
-			$modal.find('.modal-refresh').attr('href', $link.prop('href'));
+			$modal.find('.modal-refresh').attr('href', $link.attr('href'));
+			if ($link.hasClass('preview-code') || $link.hasClass('diff-code')) {
+				$modal.data('action', ($link.hasClass('preview-code') ? 'preview-code' : 'diff-code'))
+			}
 			$modal.find('.modal-title').text($link.data('title'));
 			$modal.find('.modal-body').html('Loading ...');
 			$modal.modal('show');
@@ -48,6 +51,15 @@ yii.gii = (function ($) {
 				url: $link.prop('href'),
 				data: $('.default-view form').serializeArray(),
 				success: function (data) {
+					if (!$link.hasClass('modal-refresh')) {
+						var filesSelector = 'a.' + $modal.data('action');
+						var $files = $(filesSelector);
+						var index = $files.filter('[href="' + $link.attr('href') + '"]').index(filesSelector);
+						var $prev = $files.eq(index-1);
+						var $next = $files.eq((index+1 == $files.length ? 0 : index+1));
+						$modal.find('.modal-previous').attr('href', $prev.attr('href')).data('title', $prev.data('title'));
+						$modal.find('.modal-next').attr('href', $next.attr('href')).data('title', $next.data('title'));
+					}
 					$modal.find('.modal-body').html(data);
 					$modal.find('.content').css('max-height', ($(window).height() - 200) + 'px');
 				},
diff --git a/extensions/gii/generators/model/Generator.php b/extensions/gii/generators/model/Generator.php
index 538637c..893cd7f 100644
--- a/extensions/gii/generators/model/Generator.php
+++ b/extensions/gii/generators/model/Generator.php
@@ -471,7 +471,7 @@ class Generator extends \yii\gii\Generator
 	 */
 	public function validateTableName()
 	{
-		if (($pos = strpos($this->tableName, '*')) !== false && substr($this->tableName, -1) !== '*') {
+		if (strpos($this->tableName, '*') !== false && substr($this->tableName, -1) !== '*') {
 			$this->addError('tableName', 'Asterisk is only allowed as the last character.');
 			return;
 		}
diff --git a/extensions/gii/views/default/view/files.php b/extensions/gii/views/default/view/files.php
index 947c8f8..04075e4 100644
--- a/extensions/gii/views/default/view/files.php
+++ b/extensions/gii/views/default/view/files.php
@@ -81,7 +81,14 @@ use yii\gii\CodeFile;
 			<div class="modal-content">
 				<div class="modal-header">
 					<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
-					<h4><a class="modal-refresh glyphicon glyphicon-refresh" href="#"></a> <span class="modal-title">Modal title</span></h4>
+					<div class="btn-group pull-left">
+						<a class="modal-previous btn btn-xs btn-default" href="#"><span class="glyphicon glyphicon-arrow-left"></span></a>
+						<a class="modal-next btn btn-xs btn-default" href="#"><span class="glyphicon glyphicon-arrow-right"></span></a>
+						<a class="modal-refresh btn btn-xs btn-default" href="#"><span class="glyphicon glyphicon-refresh"></span></a>
+						&nbsp;
+					</div>
+					<strong class="modal-title pull-left">Modal title</strong>
+					<div class="clearfix"></div>
 				</div>
 				<div class="modal-body">
 					<p>Please wait ...</p>
diff --git a/extensions/jui/assets/jquery.ui.datepicker-i18n.js b/extensions/jui/assets/jquery.ui.datepicker-i18n.js
old mode 100755
new mode 100644
diff --git a/extensions/jui/assets/jquery.ui.effect-all.js b/extensions/jui/assets/jquery.ui.effect-all.js
old mode 100755
new mode 100644
diff --git a/extensions/jui/assets/theme/images/animated-overlay.gif b/extensions/jui/assets/theme/images/animated-overlay.gif
old mode 100755
new mode 100644
Binary files a/extensions/jui/assets/theme/images/animated-overlay.gif and b/extensions/jui/assets/theme/images/animated-overlay.gif differ
diff --git a/extensions/jui/assets/theme/images/ui-bg_flat_0_aaaaaa_40x100.png b/extensions/jui/assets/theme/images/ui-bg_flat_0_aaaaaa_40x100.png
old mode 100755
new mode 100644
Binary files a/extensions/jui/assets/theme/images/ui-bg_flat_0_aaaaaa_40x100.png and b/extensions/jui/assets/theme/images/ui-bg_flat_0_aaaaaa_40x100.png differ
diff --git a/extensions/jui/assets/theme/images/ui-bg_flat_75_ffffff_40x100.png b/extensions/jui/assets/theme/images/ui-bg_flat_75_ffffff_40x100.png
old mode 100755
new mode 100644
Binary files a/extensions/jui/assets/theme/images/ui-bg_flat_75_ffffff_40x100.png and b/extensions/jui/assets/theme/images/ui-bg_flat_75_ffffff_40x100.png differ
diff --git a/extensions/jui/assets/theme/images/ui-bg_glass_55_fbf9ee_1x400.png b/extensions/jui/assets/theme/images/ui-bg_glass_55_fbf9ee_1x400.png
old mode 100755
new mode 100644
Binary files a/extensions/jui/assets/theme/images/ui-bg_glass_55_fbf9ee_1x400.png and b/extensions/jui/assets/theme/images/ui-bg_glass_55_fbf9ee_1x400.png differ
diff --git a/extensions/jui/assets/theme/images/ui-bg_glass_65_ffffff_1x400.png b/extensions/jui/assets/theme/images/ui-bg_glass_65_ffffff_1x400.png
old mode 100755
new mode 100644
Binary files a/extensions/jui/assets/theme/images/ui-bg_glass_65_ffffff_1x400.png and b/extensions/jui/assets/theme/images/ui-bg_glass_65_ffffff_1x400.png differ
diff --git a/extensions/jui/assets/theme/images/ui-bg_glass_75_dadada_1x400.png b/extensions/jui/assets/theme/images/ui-bg_glass_75_dadada_1x400.png
old mode 100755
new mode 100644
Binary files a/extensions/jui/assets/theme/images/ui-bg_glass_75_dadada_1x400.png and b/extensions/jui/assets/theme/images/ui-bg_glass_75_dadada_1x400.png differ
diff --git a/extensions/jui/assets/theme/images/ui-bg_glass_75_e6e6e6_1x400.png b/extensions/jui/assets/theme/images/ui-bg_glass_75_e6e6e6_1x400.png
old mode 100755
new mode 100644
Binary files a/extensions/jui/assets/theme/images/ui-bg_glass_75_e6e6e6_1x400.png and b/extensions/jui/assets/theme/images/ui-bg_glass_75_e6e6e6_1x400.png differ
diff --git a/extensions/jui/assets/theme/images/ui-bg_glass_95_fef1ec_1x400.png b/extensions/jui/assets/theme/images/ui-bg_glass_95_fef1ec_1x400.png
old mode 100755
new mode 100644
Binary files a/extensions/jui/assets/theme/images/ui-bg_glass_95_fef1ec_1x400.png and b/extensions/jui/assets/theme/images/ui-bg_glass_95_fef1ec_1x400.png differ
diff --git a/extensions/jui/assets/theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/extensions/jui/assets/theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png
old mode 100755
new mode 100644
Binary files a/extensions/jui/assets/theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png and b/extensions/jui/assets/theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ
diff --git a/extensions/jui/assets/theme/images/ui-icons_222222_256x240.png b/extensions/jui/assets/theme/images/ui-icons_222222_256x240.png
old mode 100755
new mode 100644
Binary files a/extensions/jui/assets/theme/images/ui-icons_222222_256x240.png and b/extensions/jui/assets/theme/images/ui-icons_222222_256x240.png differ
diff --git a/extensions/jui/assets/theme/images/ui-icons_2e83ff_256x240.png b/extensions/jui/assets/theme/images/ui-icons_2e83ff_256x240.png
old mode 100755
new mode 100644
Binary files a/extensions/jui/assets/theme/images/ui-icons_2e83ff_256x240.png and b/extensions/jui/assets/theme/images/ui-icons_2e83ff_256x240.png differ
diff --git a/extensions/jui/assets/theme/images/ui-icons_454545_256x240.png b/extensions/jui/assets/theme/images/ui-icons_454545_256x240.png
old mode 100755
new mode 100644
Binary files a/extensions/jui/assets/theme/images/ui-icons_454545_256x240.png and b/extensions/jui/assets/theme/images/ui-icons_454545_256x240.png differ
diff --git a/extensions/jui/assets/theme/images/ui-icons_888888_256x240.png b/extensions/jui/assets/theme/images/ui-icons_888888_256x240.png
old mode 100755
new mode 100644
Binary files a/extensions/jui/assets/theme/images/ui-icons_888888_256x240.png and b/extensions/jui/assets/theme/images/ui-icons_888888_256x240.png differ
diff --git a/extensions/jui/assets/theme/images/ui-icons_cd0a0a_256x240.png b/extensions/jui/assets/theme/images/ui-icons_cd0a0a_256x240.png
old mode 100755
new mode 100644
Binary files a/extensions/jui/assets/theme/images/ui-icons_cd0a0a_256x240.png and b/extensions/jui/assets/theme/images/ui-icons_cd0a0a_256x240.png differ
diff --git a/extensions/jui/assets/theme/jquery.ui.css b/extensions/jui/assets/theme/jquery.ui.css
old mode 100755
new mode 100644
diff --git a/extensions/mongodb/Collection.php b/extensions/mongodb/Collection.php
index 38144bc..6f595f8 100644
--- a/extensions/mongodb/Collection.php
+++ b/extensions/mongodb/Collection.php
@@ -260,7 +260,7 @@ class Collection extends Object
 	}
 
 	/**
-	 * Returns a a single document.
+	 * Returns a single document.
 	 * @param array $condition query condition
 	 * @param array $fields fields to be selected
 	 * @return array|null the single document. Null is returned if the query results in nothing.
@@ -272,6 +272,32 @@ class Collection extends Object
 	}
 
 	/**
+	 * Updates a document and returns it.
+	 * @param array $condition query condition
+	 * @param array $update update criteria
+	 * @param array $fields fields to be returned
+	 * @param array $options list of options in format: optionName => optionValue.
+	 * @return array|null the original document, or the modified document when $options['new'] is set.
+	 * @throws Exception on failure.
+	 * @see http://www.php.net/manual/en/mongocollection.findandmodify.php
+	 */
+	public function findAndModify($condition, $update, $fields = [], $options = [])
+	{
+		$condition = $this->buildCondition($condition);
+		$token = $this->composeLogToken('findAndModify', [$condition, $update, $fields, $options]);
+		Yii::info($token, __METHOD__);
+		try {
+			Yii::beginProfile($token, __METHOD__);
+			$result = $this->mongoCollection->findAndModify($condition, $update, $fields, $options);
+			Yii::endProfile($token, __METHOD__);
+			return $result;
+		} catch (\Exception $e) {
+			Yii::endProfile($token, __METHOD__);
+			throw new Exception($e->getMessage(), (int)$e->getCode(), $e);
+		}
+	}
+
+	/**
 	 * Inserts new data into collection.
 	 * @param array|object $data data to be inserted.
 	 * @param array $options list of options in format: optionName => optionValue.
diff --git a/extensions/swiftmailer/Mailer.php b/extensions/swiftmailer/Mailer.php
index 891f2b5..8a87ba2 100644
--- a/extensions/swiftmailer/Mailer.php
+++ b/extensions/swiftmailer/Mailer.php
@@ -19,7 +19,7 @@ use yii\mail\BaseMailer;
  * ~~~
  * 'components' => [
  *     ...
- *     'email' => [
+ *     'mail' => [
  *         'class' => 'yii\swiftmailer\Mailer',
  *         'transport' => [
  *             'class' => 'Swift_SmtpTransport',
diff --git a/framework/BaseYii.php b/framework/BaseYii.php
index 9152afc..139aca2 100644
--- a/framework/BaseYii.php
+++ b/framework/BaseYii.php
@@ -14,37 +14,37 @@ use yii\log\Logger;
 /**
  * Gets the application start timestamp.
  */
-defined('YII_BEGIN_TIME') or define('YII_BEGIN_TIME', microtime(true));
+defined('YII_BEGIN_TIME') ?: define('YII_BEGIN_TIME', microtime(true));
 /**
  * This constant defines the framework installation directory.
  */
-defined('YII_PATH') or define('YII_PATH', __DIR__);
+defined('YII_PATH') ?: define('YII_PATH', __DIR__);
 /**
  * This constant defines whether the application should be in debug mode or not. Defaults to false.
  */
-defined('YII_DEBUG') or define('YII_DEBUG', false);
+defined('YII_DEBUG') ?: define('YII_DEBUG', false);
 /**
  * This constant defines in which environment the application is running. Defaults to 'prod', meaning production environment.
  * You may define this constant in the bootstrap script. The value could be 'prod' (production), 'dev' (development), 'test', 'staging', etc.
  */
-defined('YII_ENV') or define('YII_ENV', 'prod');
+defined('YII_ENV') ?: define('YII_ENV', 'prod');
 /**
  * Whether the the application is running in production environment
  */
-defined('YII_ENV_PROD') or define('YII_ENV_PROD', YII_ENV === 'prod');
+defined('YII_ENV_PROD') ?: define('YII_ENV_PROD', YII_ENV === 'prod');
 /**
  * Whether the the application is running in development environment
  */
-defined('YII_ENV_DEV') or define('YII_ENV_DEV', YII_ENV === 'dev');
+defined('YII_ENV_DEV') ?: define('YII_ENV_DEV', YII_ENV === 'dev');
 /**
  * Whether the the application is running in testing environment
  */
-defined('YII_ENV_TEST') or define('YII_ENV_TEST', YII_ENV === 'test');
+defined('YII_ENV_TEST') ?: define('YII_ENV_TEST', YII_ENV === 'test');
 
 /**
  * This constant defines whether error handling should be enabled. Defaults to true.
  */
-defined('YII_ENABLE_ERROR_HANDLER') or define('YII_ENABLE_ERROR_HANDLER', true);
+defined('YII_ENABLE_ERROR_HANDLER') ?: define('YII_ENABLE_ERROR_HANDLER', true);
 
 
 /**
@@ -356,7 +356,7 @@ class BaseYii
 			$config = array_merge(static::$objectConfig[$class], $config);
 		}
 
-		if (($n = func_num_args()) > 1) {
+		if (func_num_args() > 1) {
 			/** @var \ReflectionClass $reflection */
 			if (isset($reflections[$class])) {
 				$reflection = $reflections[$class];
diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md
index e705811..776e6ef 100644
--- a/framework/CHANGELOG.md
+++ b/framework/CHANGELOG.md
@@ -49,6 +49,9 @@ Yii Framework 2 Change Log
 - Bug #2502: Unclear error message when `$_SERVER['DOCUMENT_ROOT']` is empty (samdark)
 - Bug #2519: MessageSource removed translation messages when event handler was bound to `missingTranslation`-event (cebe)
 - Bug #2527: Source language for `app` message category was always `en` no matter which application `sourceLanguage` was used (samdark)
+- Bug #2559: Going back on browser history breaks GridView filtering with `Pjax` (tonydspaniard)
+- Bug #2607: `yii message` tool wasn't updating `message` table (mitalcoi)
+- Bug #2624: Html::textArea() should respect "name" option. (qiangxue)
 - Bug: Fixed `Call to a member function registerAssetFiles() on a non-object` in case of wrong `sourcePath` for an asset bundle (samdark)
 - Bug: Fixed incorrect event name for `yii\jui\Spinner` (samdark)
 - Bug: Json::encode() did not handle objects that implement JsonSerializable interface correctly (cebe)
diff --git a/framework/assets/pjax/jquery.pjax.js b/framework/assets/pjax/jquery.pjax.js
index 1934d80..7e6e642 100644
--- a/framework/assets/pjax/jquery.pjax.js
+++ b/framework/assets/pjax/jquery.pjax.js
@@ -44,6 +44,8 @@
 // event   - "click" jQuery.Event
 // options - pjax options
 //
+// If the click event target has 'data-pjax="0"' attribute, the event is ignored, and no pjax call is made.
+//
 // Examples
 //
 //   $(document).on('click', 'a', $.pjax.click)
@@ -61,6 +63,10 @@
 
 		var link = event.currentTarget
 
+		// Ignore links with data-pjax="0"
+		if ($(link).data('pjax')==0)
+			return
+
 		if (link.tagName.toUpperCase() !== 'A')
 			throw "$.fn.pjax or $.pjax.click requires an anchor element"
 
diff --git a/framework/assets/yii.gridView.js b/framework/assets/yii.gridView.js
index 496e3cd..ca2b99a 100644
--- a/framework/assets/yii.gridView.js
+++ b/framework/assets/yii.gridView.js
@@ -26,17 +26,18 @@
 		filterSelector: undefined
 	};
 
+	var gridData = {};
+
 	var methods = {
 		init: function (options) {
 			return this.each(function () {
 				var $e = $(this);
 				var settings = $.extend({}, defaults, options || {});
-				$e.data('yiiGridView', {
-					settings: settings
-				});
+				gridData[$e.prop('id')] = {settings: settings};
 
 				var enterPressed = false;
-				$(settings.filterSelector).on('change.yiiGridView keydown.yiiGridView', function (event) {
+				$(document).off('change.yiiGridView keydown.yiiGridView', settings.filterSelector)
+					.on('change.yiiGridView keydown.yiiGridView', settings.filterSelector, function (event) {
 					if (event.type === 'keydown') {
 						if (event.keyCode !== 13) {
 							return; // only react to enter key
@@ -60,7 +61,7 @@
 
 		applyFilter: function () {
 			var $grid = $(this);
-			var settings = $grid.data('yiiGridView').settings;
+			var settings = gridData[$grid.prop('id')].settings;
 			var data = {};
 			$.each($(settings.filterSelector).serializeArray(), function () {
 				data[this.name] = this.value;
@@ -85,15 +86,16 @@
 
 		setSelectionColumn: function (options) {
 			var $grid = $(this);
-			var data = $grid.data('yiiGridView');
-			data.selectionColumn = options.name;
+			var id = $(this).prop('id');
+			gridData[id].selectionColumn = options.name;
 			if (!options.multiple) {
 				return;
 			}
-			$grid.on('click.yiiGridView', "input[name='" + options.checkAll + "']", function () {
+			var inputs = "#" + id + " input[name='" + options.checkAll + "']";
+			$(document).off('click.yiiGridView', inputs).on('click.yiiGridView', inputs, function () {
 				$grid.find("input[name='" + options.name + "']:enabled").prop('checked', this.checked);
 			});
-			$grid.on('click.yiiGridView', "input[name='" + options.name + "']:enabled", function () {
+			$(document).off('click.yiiGridView', inputs + ":enabled").on('click.yiiGridView', inputs + ":enabled", function () {
 				var all = $grid.find("input[name='" + options.name + "']").length == $grid.find("input[name='" + options.name + "']:checked").length;
 				$grid.find("input[name='" + options.checkAll + "']").prop('checked', all);
 			});
@@ -101,7 +103,7 @@
 
 		getSelectedRows: function () {
 			var $grid = $(this);
-			var data = $grid.data('yiiGridView');
+			var data = gridData[$grid.prop('id')];
 			var keys = [];
 			if (data.selectionColumn) {
 				$grid.find("input[name='" + data.selectionColumn + "']:checked").each(function () {
@@ -118,8 +120,9 @@
 			});
 		},
 
-		data: function() {
-			return this.data('yiiGridView');
+		data: function () {
+			var id = $(this).prop('id');
+			return gridData[id];
 		}
 	};
 })(window.jQuery);
diff --git a/framework/base/Formatter.php b/framework/base/Formatter.php
index 78fdac8..80c08e1 100644
--- a/framework/base/Formatter.php
+++ b/framework/base/Formatter.php
@@ -442,17 +442,17 @@ class Formatter extends Component
 		
 		switch($position) {
 			case 0:
-				return $verbose ? Yii::t('yii','{n, plural, =1{# byte} other{# bytes}}', $params) : Yii::t('yii', '{n} B', $params);
+				return $verbose ? Yii::t('yii', '{n, plural, =1{# byte} other{# bytes}}', $params) : Yii::t('yii', '{n} B', $params);
 			case 1:
-				return $verbose ? Yii::t('yii','{n, plural, =1{# kilobyte} other{# kilobytes}}', $params) : Yii::t('yii','{n} KB', $params);
+				return $verbose ? Yii::t('yii', '{n, plural, =1{# kilobyte} other{# kilobytes}}', $params) : Yii::t('yii', '{n} KB', $params);
 			case 2:
-				return $verbose ? Yii::t('yii','{n, plural, =1{# megabyte} other{# megabytes}}', $params) : Yii::t('yii','{n} MB', $params);
+				return $verbose ? Yii::t('yii', '{n, plural, =1{# megabyte} other{# megabytes}}', $params) : Yii::t('yii', '{n} MB', $params);
 			case 3:
-				return $verbose ? Yii::t('yii','{n, plural, =1{# gigabyte} other{# gigabytes}}', $params) : Yii::t('yii','{n} GB', $params);
+				return $verbose ? Yii::t('yii', '{n, plural, =1{# gigabyte} other{# gigabytes}}', $params) : Yii::t('yii', '{n} GB', $params);
 			case 4:
-				return $verbose ? Yii::t('yii','{n, plural, =1{# terabyte} other{# terabytes}}', $params) : Yii::t('yii','{n} TB', $params);
+				return $verbose ? Yii::t('yii', '{n, plural, =1{# terabyte} other{# terabytes}}', $params) : Yii::t('yii', '{n} TB', $params);
 			default:
-				return $verbose ? Yii::t('yii','{n, plural, =1{# petabyte} other{# petabytes}}', $params) : Yii::t('yii','{n} PB', $params);
+				return $verbose ? Yii::t('yii', '{n, plural, =1{# petabyte} other{# petabytes}}', $params) : Yii::t('yii', '{n} PB', $params);
 		}
 	}
 }
diff --git a/framework/base/Request.php b/framework/base/Request.php
index b76886e..eb9f805 100644
--- a/framework/base/Request.php
+++ b/framework/base/Request.php
@@ -6,6 +6,7 @@
  */
 
 namespace yii\base;
+
 use Yii;
 
 /**
diff --git a/framework/base/Theme.php b/framework/base/Theme.php
index 01a6964..63382ad 100644
--- a/framework/base/Theme.php
+++ b/framework/base/Theme.php
@@ -13,7 +13,7 @@ use yii\helpers\FileHelper;
 /**
  * Theme represents an application theme.
  *
- * When [[View]] renders a view file, it will check the [[Application::theme|active theme]]
+ * When [[View]] renders a view file, it will check the [[View::theme|active theme]]
  * to see if there is a themed version of the view file exists. If so, the themed version will be rendered instead.
  *
  * A theme is a directory consisting of view files which are meant to replace their non-themed counterparts.
diff --git a/framework/caching/FileDependency.php b/framework/caching/FileDependency.php
index 11afde3..200cdde 100644
--- a/framework/caching/FileDependency.php
+++ b/framework/caching/FileDependency.php
@@ -6,6 +6,7 @@
  */
 
 namespace yii\caching;
+
 use yii\base\InvalidConfigException;
 
 /**
diff --git a/framework/caching/GroupDependency.php b/framework/caching/GroupDependency.php
index 1cf7869..bcac858 100644
--- a/framework/caching/GroupDependency.php
+++ b/framework/caching/GroupDependency.php
@@ -6,6 +6,7 @@
  */
 
 namespace yii\caching;
+
 use yii\base\InvalidConfigException;
 
 /**
diff --git a/framework/console/controllers/FixtureController.php b/framework/console/controllers/FixtureController.php
index 858f08f..c72efd2 100644
--- a/framework/console/controllers/FixtureController.php
+++ b/framework/console/controllers/FixtureController.php
@@ -64,7 +64,7 @@ class FixtureController extends Controller
 	public function globalOptions()
 	{
 		return array_merge(parent::globalOptions(), [
-			'namespace','globalFixtures'
+			'namespace', 'globalFixtures'
 		]);
 	}
 
@@ -74,6 +74,7 @@ class FixtureController extends Controller
 	 * whitespace between names. Note that if you are loading fixtures to storage, for example: database or nosql,
 	 * storage will not be cleared, data will be appended to already existed.
 	 * @param array $fixtures
+	 * @param array $except
 	 * @throws \yii\console\Exception
 	 */
 	public function actionLoad(array $fixtures, array $except = [])
@@ -99,7 +100,7 @@ class FixtureController extends Controller
 		}
 
 		$filtered = array_diff($foundFixtures, $except);
-		$fixtures = $this->getFixturesConfig(array_merge($this->globalFixtures ,$filtered));
+		$fixtures = $this->getFixturesConfig(array_merge($this->globalFixtures, $filtered));
 
 		if (!$fixtures) {
 			throw new Exception('No fixtures were found in namespace: "' . $this->namespace . '"' . '');
@@ -317,5 +318,4 @@ class FixtureController extends Controller
 	{
 		return Yii::getAlias('@' . str_replace('\\', '/', $this->namespace));
 	}
-
 }
diff --git a/framework/console/controllers/MessageController.php b/framework/console/controllers/MessageController.php
index 0345b69..cb34a38 100644
--- a/framework/console/controllers/MessageController.php
+++ b/framework/console/controllers/MessageController.php
@@ -134,11 +134,14 @@ class MessageController extends Controller
 				throw new Exception('The "db" option must refer to a valid database application component.');
 			}
 			$sourceMessageTable = isset($config['sourceMessageTable']) ? $config['sourceMessageTable'] : '{{%source_message}}';
+			$messageTable = isset($config['messageTable']) ? $config['messageTable'] : '{{%message}}';
 			$this->saveMessagesToDb(
 				$messages,
 				$db,
 				$sourceMessageTable,
-				$config['removeUnused']
+				$messageTable,
+				$config['removeUnused'],
+				$config['languages']
 			);
 		}
 	}
@@ -149,9 +152,11 @@ class MessageController extends Controller
 	 * @param array $messages
 	 * @param \yii\db\Connection $db
 	 * @param string $sourceMessageTable
+	 * @param string $messageTable
 	 * @param boolean $removeUnused
+	 * @param array $languages
 	 */
-	protected function saveMessagesToDb($messages, $db, $sourceMessageTable, $removeUnused)
+	protected function saveMessagesToDb($messages, $db, $sourceMessageTable, $messageTable, $removeUnused, $languages)
 	{
 		$q = new \yii\db\Query;
 		$current = [];
@@ -190,12 +195,17 @@ class MessageController extends Controller
 		echo "Inserting new messages...";
 		$savedFlag = false;
 
-		foreach ($new  as $category => $msgs) {
+		foreach ($new as $category => $msgs) {
 			foreach ($msgs as $m) {
 				$savedFlag = true;
 
 				$db->createCommand()
-					->insert($sourceMessageTable, ['category' => $category, 'message' => $m])->execute();
+				->insert($sourceMessageTable, ['category' => $category, 'message' => $m])->execute();
+				$lastId = $db->getLastInsertID();
+				foreach ($languages as $language) {
+					$db->createCommand()
+					->insert($messageTable, ['id' => $lastId, 'language' => $language])->execute();
+				}
 			}
 		}
 
@@ -207,15 +217,20 @@ class MessageController extends Controller
 		} else {
 			if ($removeUnused) {
 				$db->createCommand()
-					->delete($sourceMessageTable, ['in', 'id', $obsolete])->execute();
-			echo "deleted.\n";
+				->delete($sourceMessageTable, ['in', 'id', $obsolete])->execute();
+				echo "deleted.\n";
 			} else {
+				$last_id = $db->getLastInsertID();
 				$db->createCommand()
-					->update(
+				->update(
 						$sourceMessageTable,
 						['message' => new \yii\db\Expression("CONCAT('@@',message,'@@')")],
 						['in', 'id', $obsolete]
 					)->execute();
+				foreach ($languages as $language) {
+					$db->createCommand()
+					->insert($messageTable, ['id' => $last_id, 'language' => $language])->execute();
+				}
 				echo "updated.\n";
 			}
 		}
@@ -268,7 +283,7 @@ class MessageController extends Controller
 	{
 		echo "Saving messages to $fileName...";
 		if (is_file($fileName)) {
-			if($format === 'po'){
+			if ($format === 'po') {
 				$translated = file_get_contents($fileName);
 				preg_match_all('/(?<=msgid ").*(?="\n(#*)msgstr)/', $translated, $keys);
 				preg_match_all('/(?<=msgstr ").*(?="\n\n)/', $translated, $values);
@@ -285,7 +300,7 @@ class MessageController extends Controller
 			$merged = [];
 			$untranslated = [];
 			foreach ($messages as $message) {
-				if($format === 'po'){
+				if ($format === 'po') {
 					$message = preg_replace('/\"/', '\"', $message);
 				}
 				if (array_key_exists($message, $translated) && strlen($translated[$message]) > 0) {
@@ -317,9 +332,9 @@ class MessageController extends Controller
 			if (false === $overwrite) {
 				$fileName .= '.merged';
 			}
-			if ($format === 'po'){
+			if ($format === 'po') {
 				$output = '';
-				foreach ($merged as $k => $v){
+				foreach ($merged as $k => $v) {
 					$k = preg_replace('/(\")|(\\\")/', "\\\"", $k);
 					$v = preg_replace('/(\")|(\\\")/', "\\\"", $v);
 					if (substr($v, 0, 2) === '@@' && substr($v, -2) === '@@') {
@@ -338,7 +353,7 @@ class MessageController extends Controller
 			if ($format === 'po') {
 				$merged = '';
 				sort($messages);
-				foreach($messages as $message) {
+				foreach ($messages as $message) {
 					$message = preg_replace('/(\")|(\\\")/', '\\\"', $message);
 					$merged .= "msgid \"$message\"\n";
 					$merged .= "msgstr \"\"\n";
diff --git a/framework/db/ActiveQuery.php b/framework/db/ActiveQuery.php
index ee92f22..23e7f1f 100644
--- a/framework/db/ActiveQuery.php
+++ b/framework/db/ActiveQuery.php
@@ -120,7 +120,7 @@ class ActiveQuery extends Query implements ActiveQueryInterface
 			$this->findWith($this->with, $models);
 		}
 		if (!$this->asArray) {
-			foreach($models as $model) {
+			foreach ($models as $model) {
 				$model->afterFind();
 			}
 		}
diff --git a/framework/db/ActiveRelationTrait.php b/framework/db/ActiveRelationTrait.php
index ab06c16..32f6953 100644
--- a/framework/db/ActiveRelationTrait.php
+++ b/framework/db/ActiveRelationTrait.php
@@ -288,7 +288,7 @@ trait ActiveRelationTrait
 				foreach ($primaryModels as $i => $primaryModel) {
 					if ($primaryModels[$i][$primaryName] instanceof ActiveRecordInterface) {
 						$primaryModels[$i][$primaryName]->populateRelation($name, $primaryModel);
-					} elseif  (!empty($primaryModels[$i][$primaryName])) {
+					} elseif (!empty($primaryModels[$i][$primaryName])) {
 						$primaryModels[$i][$primaryName][$name] = $primaryModel;
 					}
 				}
diff --git a/framework/db/QueryBuilder.php b/framework/db/QueryBuilder.php
index e6b6e01..124848b 100644
--- a/framework/db/QueryBuilder.php
+++ b/framework/db/QueryBuilder.php
@@ -599,7 +599,7 @@ class QueryBuilder extends \yii\base\Object
 				if (strpos($column, '(') === false) {
 					$column = $this->db->quoteColumnName($column);
 				}
-				$columns[$i] = "$column AS " . $this->db->quoteColumnName($i);;
+				$columns[$i] = "$column AS " . $this->db->quoteColumnName($i);
 			} elseif (strpos($column, '(') === false) {
 				if (preg_match('/^(.*?)(?i:\s+as\s+|\s+)([\w\-_\.]+)$/', $column, $matches)) {
 					$columns[$i] = $this->db->quoteColumnName($matches[1]) . ' AS ' . $this->db->quoteColumnName($matches[2]);
diff --git a/framework/db/oci/Schema.php b/framework/db/oci/Schema.php
index e29a77b..1edbf6b 100644
--- a/framework/db/oci/Schema.php
+++ b/framework/db/oci/Schema.php
@@ -242,7 +242,7 @@ EOD;
 		} elseif (strpos($dbType, 'NUMBER') !== false || strpos($dbType, 'INTEGER') !== false) {
 			if (strpos($dbType, '(') && preg_match('/\((.*)\)/', $dbType, $matches)) {
 				$values = explode(',', $matches[1]);
-				if (isset($values[1]) and (((int)$values[1]) > 0)) {
+				if (isset($values[1]) && (((int)$values[1]) > 0)) {
 					$column->type = 'double';
 				} else {
 					$column->type = 'integer';
diff --git a/framework/grid/ActionColumn.php b/framework/grid/ActionColumn.php
index ffcfe0a..7d42bec 100644
--- a/framework/grid/ActionColumn.php
+++ b/framework/grid/ActionColumn.php
@@ -88,6 +88,7 @@ class ActionColumn extends Column
 			$this->buttons['view'] = function ($url, $model) {
 				return Html::a('<span class="glyphicon glyphicon-eye-open"></span>', $url, [
 					'title' => Yii::t('yii', 'View'),
+					'data-pjax' => '0',
 				]);
 			};
 		}
@@ -95,6 +96,7 @@ class ActionColumn extends Column
 			$this->buttons['update'] = function ($url, $model) {
 				return Html::a('<span class="glyphicon glyphicon-pencil"></span>', $url, [
 					'title' => Yii::t('yii', 'Update'),
+					'data-pjax' => '0',
 				]);
 			};
 		}
@@ -104,6 +106,7 @@ class ActionColumn extends Column
 					'title' => Yii::t('yii', 'Delete'),
 					'data-confirm' => Yii::t('yii', 'Are you sure to delete this item?'),
 					'data-method' => 'post',
+					'data-pjax' => '0',
 				]);
 			};
 		}
diff --git a/framework/grid/DataColumn.php b/framework/grid/DataColumn.php
index a8ef9ad..7b0f493 100644
--- a/framework/grid/DataColumn.php
+++ b/framework/grid/DataColumn.php
@@ -152,7 +152,7 @@ class DataColumn extends Column
 			return parent::getDataCellContent($model, $key, $index);
 		}
 		return $value;
-	}	 
+	}
 
 	/**
 	 * @inheritdoc
diff --git a/framework/helpers/BaseFileHelper.php b/framework/helpers/BaseFileHelper.php
index c544a91..6da4712 100644
--- a/framework/helpers/BaseFileHelper.php
+++ b/framework/helpers/BaseFileHelper.php
@@ -147,6 +147,7 @@ class BaseFileHelper
 	 * @param string $src the source directory
 	 * @param string $dst the destination directory
 	 * @param array $options options for directory copy. Valid options are:
+	 * @throws \yii\base\InvalidParamException if unable to open directory
 	 *
 	 * - dirMode: integer, the permission to be set for newly copied directories. Defaults to 0775.
 	 * - fileMode:  integer, the permission to be set for newly copied files. Defaults to the current environment setting.
@@ -280,14 +281,14 @@ class BaseFileHelper
 			$options['basePath'] = realpath($dir);
 			// this should also be done only once
 			if (isset($options['except'])) {
-				foreach($options['except'] as $key=>$value) {
+				foreach ($options['except'] as $key => $value) {
 					if (is_string($value)) {
 						$options['except'][$key] = static::parseExcludePattern($value);
 					}
 				}
 			}
 			if (isset($options['only'])) {
-				foreach($options['only'] as $key=>$value) {
+				foreach ($options['only'] as $key => $value) {
 					if (is_string($value)) {
 						$options['only'][$key] = static::parseExcludePattern($value);
 					}
@@ -397,7 +398,7 @@ class BaseFileHelper
 			if ($pattern === $baseName) {
 				return true;
 			}
-		} else if ($flags & self::PATTERN_ENDSWITH) {
+		} elseif ($flags & self::PATTERN_ENDSWITH) {
 			/* "*literal" matching against "fooliteral" */
 			$n = StringHelper::byteLength($pattern);
 			if (StringHelper::byteSubstr($pattern, 1, $n) === StringHelper::byteSubstr($baseName, -$n, $n)) {
@@ -472,7 +473,7 @@ class BaseFileHelper
 	 */
 	private static function lastExcludeMatchingFromList($basePath, $path, $excludes)
 	{
-		foreach(array_reverse($excludes) as $exclude) {
+		foreach (array_reverse($excludes) as $exclude) {
 			if (is_string($exclude)) {
 				$exclude = self::parseExcludePattern($exclude);
 			}
@@ -508,13 +509,14 @@ class BaseFileHelper
 		if (!is_string($pattern)) {
 			throw new InvalidParamException('Exclude/include pattern must be a string.');
 		}
-		$result = array(
+		$result = [
 			'pattern' => $pattern,
 			'flags' => 0,
 			'firstWildcard' => false,
-		);
-		if (!isset($pattern[0]))
+		];
+		if (!isset($pattern[0])) {
 			return $result;
+		}
 
 		if ($pattern[0] == '!') {
 			$result['flags'] |= self::PATTERN_NEGATIVE;
@@ -526,11 +528,13 @@ class BaseFileHelper
 			$len--;
 			$result['flags'] |= self::PATTERN_MUSTBEDIR;
 		}
-		if (strpos($pattern, '/') === false)
+		if (strpos($pattern, '/') === false) {
 			$result['flags'] |= self::PATTERN_NODIR;
+		}
 		$result['firstWildcard'] = self::firstWildcardInPattern($pattern);
-		if ($pattern[0] == '*' && self::firstWildcardInPattern(StringHelper::byteSubstr($pattern, 1, StringHelper::byteLength($pattern))) === false)
+		if ($pattern[0] == '*' && self::firstWildcardInPattern(StringHelper::byteSubstr($pattern, 1, StringHelper::byteLength($pattern))) === false) {
 			$result['flags'] |= self::PATTERN_ENDSWITH;
+		}
 		$result['pattern'] = $pattern;
 		return $result;
 	}
@@ -542,8 +546,8 @@ class BaseFileHelper
 	 */
 	private static function firstWildcardInPattern($pattern)
 	{
-		$wildcards = array('*','?','[','\\');
-		$wildcardSearch = function($r, $c) use ($pattern) {
+		$wildcards = ['*', '?', '[', '\\'];
+		$wildcardSearch = function ($r, $c) use ($pattern) {
 			$p = strpos($pattern, $c);
 			return $r===false ? $p : ($p===false ? $r : min($r, $p));
 		};
diff --git a/framework/helpers/BaseHtml.php b/framework/helpers/BaseHtml.php
index 01151ec..8585c97 100644
--- a/framework/helpers/BaseHtml.php
+++ b/framework/helpers/BaseHtml.php
@@ -1140,12 +1140,12 @@ class BaseHtml
 	 * about attribute expression.
 	 * @param array $options the tag options in terms of name-value pairs. These will be rendered as
 	 * the attributes of the resulting tag. The values will be HTML-encoded using [[encode()]].
-	 * See [[renderTagAttributes()]] for details on how these are beeing rendered.
+	 * See [[renderTagAttributes()]] for details on how these are being rendered.
 	 * @return string the generated textarea tag
 	 */
 	public static function activeTextarea($model, $attribute, $options = [])
 	{
-		$name = static::getInputName($model, $attribute);
+		$name = isset($options['name']) ? $options['name'] : static::getInputName($model, $attribute);
 		$value = static::getAttributeValue($model, $attribute);
 		if (!array_key_exists('id', $options)) {
 			$options['id'] = static::getInputId($model, $attribute);
@@ -1579,7 +1579,7 @@ class BaseHtml
 	{
 		if (isset($options['class'])) {
 			$classes = ' ' . $options['class'] . ' ';
-			if (($pos = strpos($classes, ' ' . $class . ' ')) === false) {
+			if (strpos($classes, ' ' . $class . ' ') === false) {
 				$options['class'] .= ' ' . $class;
 			}
 		} else {
diff --git a/framework/helpers/BaseMarkdown.php b/framework/helpers/BaseMarkdown.php
index a22e45e..c72e079 100644
--- a/framework/helpers/BaseMarkdown.php
+++ b/framework/helpers/BaseMarkdown.php
@@ -86,7 +86,7 @@ class BaseMarkdown
 		/** @var \cebe\markdown\Markdown $parser */
 		if (!isset(static::$flavors[$flavor])) {
 			throw new InvalidParamException("Markdown flavor '$flavor' is not defined.'");
-		} elseif(!is_object($config = static::$flavors[$flavor])) {
+		} elseif (!is_object($config = static::$flavors[$flavor])) {
 			$parser = Yii::createObject($config);
 			if (is_array($config)) {
 				foreach ($config as $name => $value) {
diff --git a/framework/helpers/BaseSecurity.php b/framework/helpers/BaseSecurity.php
index d9459d9..8750a54 100644
--- a/framework/helpers/BaseSecurity.php
+++ b/framework/helpers/BaseSecurity.php
@@ -107,10 +107,10 @@ class BaseSecurity
 	*/
 	protected static function stripPadding($data)
 	{
-		$end = StringHelper::byteSubstr($data, -1, NULL);
+		$end = StringHelper::byteSubstr($data, -1, null);
 		$last = ord($end);
 		$n = StringHelper::byteLength($data) - $last;
-		if (StringHelper::byteSubstr($data, $n, NULL) == str_repeat($end, $last)) {
+		if (StringHelper::byteSubstr($data, $n, null) == str_repeat($end, $last)) {
 			return StringHelper::byteSubstr($data, 0, $n);
 		}
 		return false;
diff --git a/framework/i18n/GettextMessageSource.php b/framework/i18n/GettextMessageSource.php
index 8da8edc..fc6d87f 100644
--- a/framework/i18n/GettextMessageSource.php
+++ b/framework/i18n/GettextMessageSource.php
@@ -70,9 +70,9 @@ class GettextMessageSource extends MessageSource
 
 			if ($messages === null && $fallbackMessages === null && $fallbackLanguage != $this->sourceLanguage) {
 				Yii::error("The message file for category '$category' does not exist: $messageFile Fallback file does not exist as well: $fallbackMessageFile", __METHOD__);
-			} else if (empty($messages)) {
+			} elseif (empty($messages)) {
 				return $fallbackMessages;
-			} else if (!empty($fallbackMessages)) {
+			} elseif (!empty($fallbackMessages)) {
 				foreach ($fallbackMessages as $key => $value) {
 					if (!empty($value) && empty($messages[$key])) {
 						$messages[$key] = $fallbackMessages[$key];
diff --git a/framework/i18n/I18N.php b/framework/i18n/I18N.php
index d0bbfcc..6be3899 100644
--- a/framework/i18n/I18N.php
+++ b/framework/i18n/I18N.php
@@ -126,7 +126,7 @@ class I18N extends Component
 		}
 
 		$p = [];
-		foreach($params as $name => $value) {
+		foreach ($params as $name => $value) {
 			$p['{' . $name . '}'] = $value;
 		}
 		return strtr($message, $p);
diff --git a/framework/i18n/MessageFormatter.php b/framework/i18n/MessageFormatter.php
index 4ea7083..c3d8c56 100644
--- a/framework/i18n/MessageFormatter.php
+++ b/framework/i18n/MessageFormatter.php
@@ -143,7 +143,7 @@ class MessageFormatter extends Component
 			return false;
 		}
 		$map = [];
-		foreach($tokens as $i => $token) {
+		foreach ($tokens as $i => $token) {
 			if (is_array($token)) {
 				$param = trim($token[0]);
 				if (!isset($map[$param])) {
@@ -169,7 +169,7 @@ class MessageFormatter extends Component
 			return false;
 		} else {
 			$values = [];
-			foreach($result as $key => $value) {
+			foreach ($result as $key => $value) {
 				$values[$map[$key]] = $value;
 			}
 			return $values;
@@ -190,7 +190,7 @@ class MessageFormatter extends Component
 		if (($tokens = self::tokenizePattern($pattern)) === false) {
 			return false;
 		}
-		foreach($tokens as $i => $token) {
+		foreach ($tokens as $i => $token) {
 			if (!is_array($token)) {
 				continue;
 			}
@@ -210,7 +210,7 @@ class MessageFormatter extends Component
 			}
 			$type = isset($token[1]) ? trim($token[1]) : 'none';
 			// replace plural and select format recursively
-			if ($type == 'plural' || $type == 'select')	{
+			if ($type == 'plural' || $type == 'select') {
 				if (!isset($token[2])) {
 					return false;
 				}
@@ -244,7 +244,7 @@ class MessageFormatter extends Component
 			$this->_errorMessage = "Message pattern is invalid.";
 			return false;
 		}
-		foreach($tokens as $i => $token) {
+		foreach ($tokens as $i => $token) {
 			if (is_array($token)) {
 				if (($tokens[$i] = $this->parseToken($token, $args, $locale)) === false) {
 					$this->_errorCode = -1;
diff --git a/framework/i18n/PhpMessageSource.php b/framework/i18n/PhpMessageSource.php
index 2e611f5..7866511 100644
--- a/framework/i18n/PhpMessageSource.php
+++ b/framework/i18n/PhpMessageSource.php
@@ -73,9 +73,9 @@ class PhpMessageSource extends MessageSource
 
 			if ($messages === null && $fallbackMessages === null && $fallbackLanguage != $this->sourceLanguage) {
 				Yii::error("The message file for category '$category' does not exist: $messageFile Fallback file does not exist as well: $fallbackMessageFile", __METHOD__);
-			} else if (empty($messages)) {
+			} elseif (empty($messages)) {
 				return $fallbackMessages;
-			} else if (!empty($fallbackMessages)) {
+			} elseif (!empty($fallbackMessages)) {
 				foreach ($fallbackMessages as $key => $value) {
 					if (!empty($value) && empty($messages[$key])) {
 						$messages[$key] = $fallbackMessages[$key];
diff --git a/framework/mail/BaseMailer.php b/framework/mail/BaseMailer.php
index 139b4af..01f6635 100644
--- a/framework/mail/BaseMailer.php
+++ b/framework/mail/BaseMailer.php
@@ -348,5 +348,4 @@ abstract class BaseMailer extends Component implements MailerInterface, ViewCont
 		$event = new MailEvent(['message' => $message, 'isSuccessful' => $isSuccessful]);
 		$this->trigger(self::EVENT_AFTER_SEND, $event);
 	}
-
 }
diff --git a/framework/test/Fixture.php b/framework/test/Fixture.php
index 5a38ae5..e22a139 100644
--- a/framework/test/Fixture.php
+++ b/framework/test/Fixture.php
@@ -82,4 +82,3 @@ class Fixture extends Component
 	{
 	}
 }
-
diff --git a/framework/validators/ImageValidator.php b/framework/validators/ImageValidator.php
index 52fb235..fa9587d 100644
--- a/framework/validators/ImageValidator.php
+++ b/framework/validators/ImageValidator.php
@@ -124,7 +124,7 @@ class ImageValidator extends FileValidator
 		}
 		if ($this->underHeight === null) {
 			$this->underHeight = Yii::t('yii', 'The image "{file}" is too small. The height cannot be smaller than {limit, number} {limit, plural, one{pixel} other{pixels}}.');
-		}		
+		}
 		if ($this->overWidth === null) {
 			$this->overWidth = Yii::t('yii', 'The image "{file}" is too large. The width cannot be larger than {limit, number} {limit, plural, one{pixel} other{pixels}}.');
 		}
diff --git a/framework/validators/PunycodeAsset.php b/framework/validators/PunycodeAsset.php
index c0c1e2b..5f6a411 100644
--- a/framework/validators/PunycodeAsset.php
+++ b/framework/validators/PunycodeAsset.php
@@ -6,6 +6,7 @@
  */
 
 namespace yii\validators;
+
 use yii\web\AssetBundle;
 
 /**
diff --git a/framework/validators/ValidationAsset.php b/framework/validators/ValidationAsset.php
index 14d7ad0..e9bb79d 100644
--- a/framework/validators/ValidationAsset.php
+++ b/framework/validators/ValidationAsset.php
@@ -6,6 +6,7 @@
  */
 
 namespace yii\validators;
+
 use yii\web\AssetBundle;
 
 /**
diff --git a/framework/web/AssetConverter.php b/framework/web/AssetConverter.php
index 1b7d1c8..23062d9 100644
--- a/framework/web/AssetConverter.php
+++ b/framework/web/AssetConverter.php
@@ -82,7 +82,7 @@ class AssetConverter extends Component implements AssetConverterInterface
 		$proc = proc_open($command, $descriptor, $pipes, $basePath);
 		$stdout = stream_get_contents($pipes[1]);
 		$stderr = stream_get_contents($pipes[2]);
-		foreach($pipes as $pipe) {
+		foreach ($pipes as $pipe) {
 			fclose($pipe);
 		}
 		$status = proc_close($proc);
diff --git a/framework/widgets/ActiveFormAsset.php b/framework/widgets/ActiveFormAsset.php
index 5acb5e1..94b00e5 100644
--- a/framework/widgets/ActiveFormAsset.php
+++ b/framework/widgets/ActiveFormAsset.php
@@ -6,6 +6,7 @@
  */
 
 namespace yii\widgets;
+
 use yii\web\AssetBundle;
 
 /**
diff --git a/framework/widgets/LinkPager.php b/framework/widgets/LinkPager.php
index a2c905c..22cfdf0 100644
--- a/framework/widgets/LinkPager.php
+++ b/framework/widgets/LinkPager.php
@@ -128,7 +128,7 @@ class LinkPager extends Widget
 	protected function registerLinkTags()
 	{
 		$view = $this->getView();
-		foreach($this->pagination->getLinks() as $rel => $href) {
+		foreach ($this->pagination->getLinks() as $rel => $href) {
 			$view->registerLinkTag(['rel' => $rel, 'href' => $href], $rel);
 		}
 	}
diff --git a/framework/widgets/Pjax.php b/framework/widgets/Pjax.php
index 1d7046c..825a4ac 100644
--- a/framework/widgets/Pjax.php
+++ b/framework/widgets/Pjax.php
@@ -25,6 +25,8 @@ use yii\web\Response;
  * You may configure [[linkSelector]] to specify which links should trigger pjax, and configure [[formSelector]]
  * to specify which form submission may trigger pjax.
  *
+ * You may disable pjax for a specific link inside the container by adding `data-pjax="0"` attribute to this link.
+ *
  * The following example shows how to use Pjax with the [[\yii\gridview\GridView]] widget so that the grid pagination,
  * sorting and filtering can be done via pjax:
  *
diff --git a/framework/yii b/framework/yii
index 6964ce5..036962a 100755
--- a/framework/yii
+++ b/framework/yii
@@ -8,11 +8,11 @@
  * @license http://www.yiiframework.com/license/
  */
 
-defined('YII_DEBUG') or define('YII_DEBUG', true);
+defined('YII_DEBUG') ?: define('YII_DEBUG', true);
 
 // fcgi doesn't have STDIN and STDOUT defined by default
-defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
-defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
+defined('STDIN') ?: define('STDIN', fopen('php://stdin', 'r'));
+defined('STDOUT') ?: define('STDOUT', fopen('php://stdout', 'w'));
 
 require(__DIR__ . '/Yii.php');
 
diff --git a/tests/unit/extensions/mongodb/CollectionTest.php b/tests/unit/extensions/mongodb/CollectionTest.php
index 3eb97b6..9a0c0b4 100644
--- a/tests/unit/extensions/mongodb/CollectionTest.php
+++ b/tests/unit/extensions/mongodb/CollectionTest.php
@@ -187,6 +187,60 @@ class CollectionTest extends MongoDbTestCase
 		$this->assertNotEmpty($result[0]['items']);
 	}
 
+	public function testFindAndModify()
+	{
+		$collection = $this->getConnection()->getCollection('customer');
+		$rows = [
+			[
+				'name' => 'customer 1',
+				'status' => 1,
+				'amount' => 100,
+			],
+			[
+				'name' => 'customer 2',
+				'status' => 1,
+				'amount' => 200,
+			],
+		];
+		$collection->batchInsert($rows);
+
+		// increment field
+		$result = $collection->findAndModify(['name' => 'customer 1'], ['$inc' => ['status' => 1]]);
+		$this->assertEquals('customer 1', $result['name']);
+		$this->assertEquals(1, $result['status']);
+		$newResult = $collection->findOne(['name' => 'customer 1']);
+		$this->assertEquals(2, $newResult['status']);
+
+		// $set and return modified document
+		$result = $collection->findAndModify(
+			['name' => 'customer 2'],
+			['$set' => ['status' => 2]],
+			[],
+			['new' => true]
+		);
+		$this->assertEquals('customer 2', $result['name']);
+		$this->assertEquals(2, $result['status']);
+
+		// Full update document
+		$data = [
+			'name' => 'customer 3',
+			'city' => 'Minsk'
+		];
+		$result = $collection->findAndModify(
+			['name' => 'customer 2'],
+			$data,
+			[],
+			['new' => true]
+		);
+		$this->assertEquals('customer 3', $result['name']);
+		$this->assertEquals('Minsk', $result['city']);
+		$this->assertTrue(!isset($result['status']));
+
+		// Test exceptions
+		$this->setExpectedException('\yii\mongodb\Exception');
+		$collection->findAndModify(['name' => 'customer 1'], ['$wrongOperator' => ['status' => 1]]);
+	}
+
 	/**
 	 * @depends testBatchInsert
 	 */
@@ -240,54 +294,54 @@ class CollectionTest extends MongoDbTestCase
 		$this->assertEquals($expectedRows, $rows);
 	}
 
-    /**
-     * @depends testMapReduce
-     */
-    public function testMapReduceInline()
-    {
-        $collection = $this->getConnection()->getCollection('customer');
-        $rows = [
-            [
-                'name' => 'customer 1',
-                'status' => 1,
-                'amount' => 100,
-            ],
-            [
-                'name' => 'customer 2',
-                'status' => 1,
-                'amount' => 200,
-            ],
-            [
-                'name' => 'customer 2',
-                'status' => 2,
-                'amount' => 400,
-            ],
-            [
-                'name' => 'customer 2',
-                'status' => 3,
-                'amount' => 500,
-            ],
-        ];
-        $collection->batchInsert($rows);
-
-        $result = $collection->mapReduce(
-            'function () {emit(this.status, this.amount)}',
-            'function (key, values) {return Array.sum(values)}',
-            ['inline' => true],
-            ['status' => ['$lt' => 3]]
-        );
-        $expectedRows = [
-            [
-                '_id' => 1,
-                'value' => 300,
-            ],
-            [
-                '_id' => 2,
-                'value' => 400,
-            ],
-        ];
-        $this->assertEquals($expectedRows, $result);
-    }
+	/**
+	 * @depends testMapReduce
+	 */
+	public function testMapReduceInline()
+	{
+		$collection = $this->getConnection()->getCollection('customer');
+		$rows = [
+			[
+				'name' => 'customer 1',
+				'status' => 1,
+				'amount' => 100,
+			],
+			[
+				'name' => 'customer 2',
+				'status' => 1,
+				'amount' => 200,
+			],
+			[
+				'name' => 'customer 2',
+				'status' => 2,
+				'amount' => 400,
+			],
+			[
+				'name' => 'customer 2',
+				'status' => 3,
+				'amount' => 500,
+			],
+		];
+		$collection->batchInsert($rows);
+
+		$result = $collection->mapReduce(
+			'function () {emit(this.status, this.amount)}',
+			'function (key, values) {return Array.sum(values)}',
+			['inline' => true],
+			['status' => ['$lt' => 3]]
+		);
+		$expectedRows = [
+			[
+				'_id' => 1,
+				'value' => 300,
+			],
+			[
+				'_id' => 2,
+				'value' => 400,
+			],
+		];
+		$this->assertEquals($expectedRows, $result);
+	}
 
 	public function testCreateIndex()
 	{
diff --git a/tests/unit/framework/base/ExceptionTest.php b/tests/unit/framework/base/ExceptionTest.php
index 635b55c..136fc28 100644
--- a/tests/unit/framework/base/ExceptionTest.php
+++ b/tests/unit/framework/base/ExceptionTest.php
@@ -15,7 +15,7 @@ class ExceptionTest extends TestCase
 		$this->assertEquals('bar', $array['message']);
 		$this->assertEquals('foo', $array['previous']['message']);
 		
-		$e = new InvalidCallException('bar', 0 ,new UserException('foo'));
+		$e = new InvalidCallException('bar', 0, new UserException('foo'));
 		$array = $e->toArray();
 		$this->assertEquals('bar', $array['message']);
 		$this->assertEquals('foo', $array['previous']['message']);