Browse Source

Merge pull request #1416 from yiisoft/helpers-renames

Helpers refactoring
tags/2.0.0-beta
Qiang Xue 11 years ago
parent
commit
4df9b6cb0e
  1. 2
      extensions/elasticsearch/ActiveRecord.php
  2. 2
      extensions/gii/generators/module/Generator.php
  3. 3
      extensions/redis/ActiveRecord.php
  4. 4
      extensions/sphinx/ActiveRecord.php
  5. 2
      framework/yii/caching/Cache.php
  6. 7
      framework/yii/db/ActiveRecord.php
  7. 6
      framework/yii/helpers/BaseFileHelper.php
  8. 22
      framework/yii/helpers/BaseSecurity.php
  9. 6
      framework/yii/helpers/BaseStringHelper.php
  10. 6
      framework/yii/web/Response.php
  11. 8
      tests/unit/framework/helpers/StringHelperTest.php
  12. 2
      tests/unit/framework/web/ResponseTest.php

2
extensions/elasticsearch/ActiveRecord.php

@ -9,8 +9,6 @@ namespace yii\elasticsearch;
use yii\base\InvalidCallException; use yii\base\InvalidCallException;
use yii\base\InvalidConfigException; use yii\base\InvalidConfigException;
use yii\base\NotSupportedException;
use yii\db\ActiveRecordInterface;
use yii\db\BaseActiveRecord; use yii\db\BaseActiveRecord;
use yii\helpers\Inflector; use yii\helpers\Inflector;
use yii\helpers\Json; use yii\helpers\Json;

2
extensions/gii/generators/module/Generator.php

@ -7,9 +7,9 @@
namespace yii\gii\generators\module; namespace yii\gii\generators\module;
use Yii;
use yii\gii\CodeFile; use yii\gii\CodeFile;
use yii\helpers\Html; use yii\helpers\Html;
use Yii;
use yii\helpers\StringHelper; use yii\helpers\StringHelper;
/** /**

3
extensions/redis/ActiveRecord.php

@ -8,7 +8,6 @@
namespace yii\redis; namespace yii\redis;
use yii\base\InvalidConfigException; use yii\base\InvalidConfigException;
use yii\base\NotSupportedException;
use yii\db\BaseActiveRecord; use yii\db\BaseActiveRecord;
use yii\helpers\Inflector; use yii\helpers\Inflector;
use yii\helpers\StringHelper; use yii\helpers\StringHelper;
@ -288,7 +287,7 @@ class ActiveRecord extends BaseActiveRecord
if (is_numeric($key)) { if (is_numeric($key)) {
return $key; return $key;
} elseif (is_string($key)) { } elseif (is_string($key)) {
return ctype_alnum($key) && StringHelper::strlen($key) <= 32 ? $key : md5($key); return ctype_alnum($key) && StringHelper::byteLength($key) <= 32 ? $key : md5($key);
} elseif (is_array($key)) { } elseif (is_array($key)) {
if (count($key) == 1) { if (count($key) == 1) {
return self::buildKey(reset($key)); return self::buildKey(reset($key));

4
extensions/sphinx/ActiveRecord.php

@ -8,13 +8,13 @@
namespace yii\sphinx; namespace yii\sphinx;
use yii\base\InvalidConfigException; use yii\base\InvalidConfigException;
use yii\db\BaseActiveRecord;
use yii\base\NotSupportedException; use yii\base\NotSupportedException;
use yii\db\ActiveRelationInterface; use yii\db\ActiveRelationInterface;
use yii\db\BaseActiveRecord;
use yii\db\StaleObjectException; use yii\db\StaleObjectException;
use yii\helpers\Inflector; use yii\helpers\Inflector;
use yii\helpers\StringHelper;
use Yii; use Yii;
use yii\helpers\StringHelper;
/** /**
* ActiveRecord is the base class for classes representing relational data in terms of objects. * ActiveRecord is the base class for classes representing relational data in terms of objects.

2
framework/yii/caching/Cache.php

@ -100,7 +100,7 @@ abstract class Cache extends Component implements \ArrayAccess
protected function buildKey($key) protected function buildKey($key)
{ {
if (is_string($key)) { if (is_string($key)) {
$key = ctype_alnum($key) && StringHelper::strlen($key) <= 32 ? $key : md5($key); $key = ctype_alnum($key) && StringHelper::byteLength($key) <= 32 ? $key : md5($key);
} else { } else {
$key = md5(json_encode($key)); $key = md5(json_encode($key));
} }

7
framework/yii/db/ActiveRecord.php

@ -9,13 +9,8 @@
namespace yii\db; namespace yii\db;
use yii\base\InvalidConfigException; use yii\base\InvalidConfigException;
use yii\base\Model;
use yii\base\InvalidParamException;
use yii\base\ModelEvent;
use yii\base\UnknownMethodException;
use yii\base\InvalidCallException;
use yii\helpers\StringHelper;
use yii\helpers\Inflector; use yii\helpers\Inflector;
use yii\helpers\StringHelper;
/** /**
* ActiveRecord is the base class for classes representing relational data in terms of objects. * ActiveRecord is the base class for classes representing relational data in terms of objects.

6
framework/yii/helpers/BaseFileHelper.php

@ -292,11 +292,11 @@ class BaseFileHelper
if ($isDir = is_dir($path)) { if ($isDir = is_dir($path)) {
$path .= '/'; $path .= '/';
} }
$n = StringHelper::strlen($path); $n = StringHelper::byteLength($path);
if (!empty($options['except'])) { if (!empty($options['except'])) {
foreach ($options['except'] as $name) { foreach ($options['except'] as $name) {
if (StringHelper::substr($path, -StringHelper::strlen($name), $n) === $name) { if (StringHelper::byteSubstr($path, -StringHelper::byteLength($name), $n) === $name) {
return false; return false;
} }
} }
@ -304,7 +304,7 @@ class BaseFileHelper
if (!$isDir && !empty($options['only'])) { if (!$isDir && !empty($options['only'])) {
foreach ($options['only'] as $name) { foreach ($options['only'] as $name) {
if (StringHelper::substr($path, -StringHelper::strlen($name), $n) === $name) { if (StringHelper::byteSubstr($path, -StringHelper::byteLength($name), $n) === $name) {
return true; return true;
} }
} }

22
framework/yii/helpers/BaseSecurity.php

@ -80,10 +80,10 @@ class BaseSecurity
} }
$module = static::openCryptModule(); $module = static::openCryptModule();
$ivSize = mcrypt_enc_get_iv_size($module); $ivSize = mcrypt_enc_get_iv_size($module);
$iv = StringHelper::substr($data, 0, $ivSize); $iv = StringHelper::byteSubstr($data, 0, $ivSize);
$key = static::deriveKey($password, $iv); $key = static::deriveKey($password, $iv);
mcrypt_generic_init($module, $key, $iv); mcrypt_generic_init($module, $key, $iv);
$decrypted = mdecrypt_generic($module, StringHelper::substr($data, $ivSize, StringHelper::strlen($data))); $decrypted = mdecrypt_generic($module, StringHelper::byteSubstr($data, $ivSize, StringHelper::byteLength($data)));
mcrypt_generic_deinit($module); mcrypt_generic_deinit($module);
mcrypt_module_close($module); mcrypt_module_close($module);
return static::stripPadding($decrypted); return static::stripPadding($decrypted);
@ -96,7 +96,7 @@ class BaseSecurity
*/ */
protected static function addPadding($data) protected static function addPadding($data)
{ {
$pad = self::CRYPT_BLOCK_SIZE - (StringHelper::strlen($data) % self::CRYPT_BLOCK_SIZE); $pad = self::CRYPT_BLOCK_SIZE - (StringHelper::byteLength($data) % self::CRYPT_BLOCK_SIZE);
return $data . str_repeat(chr($pad), $pad); return $data . str_repeat(chr($pad), $pad);
} }
@ -107,11 +107,11 @@ class BaseSecurity
*/ */
protected static function stripPadding($data) protected static function stripPadding($data)
{ {
$end = StringHelper::substr($data, -1, NULL); $end = StringHelper::byteSubstr($data, -1, NULL);
$last = ord($end); $last = ord($end);
$n = StringHelper::strlen($data) - $last; $n = StringHelper::byteLength($data) - $last;
if (StringHelper::substr($data, $n, NULL) == str_repeat($end, $last)) { if (StringHelper::byteSubstr($data, $n, NULL) == str_repeat($end, $last)) {
return StringHelper::substr($data, 0, $n); return StringHelper::byteSubstr($data, 0, $n);
} }
return false; return false;
} }
@ -164,11 +164,11 @@ class BaseSecurity
*/ */
public static function validateData($data, $key, $algorithm = 'sha256') public static function validateData($data, $key, $algorithm = 'sha256')
{ {
$hashSize = StringHelper::strlen(hash_hmac($algorithm, 'test', $key)); $hashSize = StringHelper::byteLength(hash_hmac($algorithm, 'test', $key));
$n = StringHelper::strlen($data); $n = StringHelper::byteLength($data);
if ($n >= $hashSize) { if ($n >= $hashSize) {
$hash = StringHelper::substr($data, 0, $hashSize); $hash = StringHelper::byteSubstr($data, 0, $hashSize);
$data2 = StringHelper::substr($data, $hashSize, $n - $hashSize); $data2 = StringHelper::byteSubstr($data, $hashSize, $n - $hashSize);
return $hash === hash_hmac($algorithm, $data2, $key) ? $data2 : false; return $hash === hash_hmac($algorithm, $data2, $key) ? $data2 : false;
} else { } else {
return false; return false;

6
framework/yii/helpers/BaseStringHelper.php

@ -26,7 +26,7 @@ class BaseStringHelper
* @param string $string the string being measured for length * @param string $string the string being measured for length
* @return integer the number of bytes in the given string. * @return integer the number of bytes in the given string.
*/ */
public static function strlen($string) public static function byteLength($string)
{ {
return mb_strlen($string, '8bit'); return mb_strlen($string, '8bit');
} }
@ -40,7 +40,7 @@ class BaseStringHelper
* @return string the extracted part of string, or FALSE on failure or an empty string. * @return string the extracted part of string, or FALSE on failure or an empty string.
* @see http://www.php.net/manual/en/function.substr.php * @see http://www.php.net/manual/en/function.substr.php
*/ */
public static function substr($string, $start, $length) public static function byteSubstr($string, $start, $length)
{ {
return mb_substr($string, $start, $length, '8bit'); return mb_substr($string, $start, $length, '8bit');
} }
@ -52,6 +52,7 @@ class BaseStringHelper
* This method was mainly created to work on php namespaces. When working with real * This method was mainly created to work on php namespaces. When working with real
* file paths, php's `basename()` should work fine for you. * file paths, php's `basename()` should work fine for you.
* Note: this method is not aware of the actual filesystem, or path components such as "..". * Note: this method is not aware of the actual filesystem, or path components such as "..".
*
* @param string $path A path string. * @param string $path A path string.
* @param string $suffix If the name component ends in suffix this will also be cut off. * @param string $suffix If the name component ends in suffix this will also be cut off.
* @return string the trailing name component of the given path. * @return string the trailing name component of the given path.
@ -73,6 +74,7 @@ class BaseStringHelper
* Returns parent directory's path. * Returns parent directory's path.
* This method is similar to `dirname()` except that it will treat * This method is similar to `dirname()` except that it will treat
* both \ and / as directory separators, independent of the operating system. * both \ and / as directory separators, independent of the operating system.
*
* @param string $path A path string. * @param string $path A path string.
* @return string the parent directory's path. * @return string the parent directory's path.
* @see http://www.php.net/manual/en/function.basename.php * @see http://www.php.net/manual/en/function.basename.php

6
framework/yii/web/Response.php

@ -382,7 +382,7 @@ class Response extends \yii\base\Response
public function sendContentAsFile($content, $attachmentName, $mimeType = 'application/octet-stream') public function sendContentAsFile($content, $attachmentName, $mimeType = 'application/octet-stream')
{ {
$headers = $this->getHeaders(); $headers = $this->getHeaders();
$contentLength = StringHelper::strlen($content); $contentLength = StringHelper::byteLength($content);
$range = $this->getHttpRange($contentLength); $range = $this->getHttpRange($contentLength);
if ($range === false) { if ($range === false) {
$headers->set('Content-Range', "bytes */$contentLength"); $headers->set('Content-Range', "bytes */$contentLength");
@ -395,14 +395,14 @@ class Response extends \yii\base\Response
->setDefault('Content-Type', $mimeType) ->setDefault('Content-Type', $mimeType)
->setDefault('Cache-Control', 'must-revalidate, post-check=0, pre-check=0') ->setDefault('Cache-Control', 'must-revalidate, post-check=0, pre-check=0')
->setDefault('Content-Transfer-Encoding', 'binary') ->setDefault('Content-Transfer-Encoding', 'binary')
->setDefault('Content-Length', StringHelper::strlen($content)) ->setDefault('Content-Length', StringHelper::byteLength($content))
->setDefault('Content-Disposition', "attachment; filename=\"$attachmentName\""); ->setDefault('Content-Disposition', "attachment; filename=\"$attachmentName\"");
list($begin, $end) = $range; list($begin, $end) = $range;
if ($begin !=0 || $end != $contentLength - 1) { if ($begin !=0 || $end != $contentLength - 1) {
$this->setStatusCode(206); $this->setStatusCode(206);
$headers->set('Content-Range', "bytes $begin-$end/$contentLength"); $headers->set('Content-Range', "bytes $begin-$end/$contentLength");
$this->content = StringHelper::substr($content, $begin, $end - $begin + 1); $this->content = StringHelper::byteSubstr($content, $begin, $end - $begin + 1);
} else { } else {
$this->setStatusCode(200); $this->setStatusCode(200);
$this->content = $content; $this->content = $content;

8
tests/unit/framework/helpers/StringHelperTest.php

@ -12,14 +12,14 @@ class StringHelperTest extends TestCase
{ {
public function testStrlen() public function testStrlen()
{ {
$this->assertEquals(4, StringHelper::strlen('this')); $this->assertEquals(4, StringHelper::byteLength('this'));
$this->assertEquals(6, StringHelper::strlen('это')); $this->assertEquals(6, StringHelper::byteLength('это'));
} }
public function testSubstr() public function testSubstr()
{ {
$this->assertEquals('th', StringHelper::substr('this', 0, 2)); $this->assertEquals('th', StringHelper::byteSubstr('this', 0, 2));
$this->assertEquals('э', StringHelper::substr('это', 0, 2)); $this->assertEquals('э', StringHelper::byteSubstr('это', 0, 2));
} }
public function testBasename() public function testBasename()

2
tests/unit/framework/web/ResponseTest.php

@ -57,7 +57,7 @@ class ResponseTest extends \yiiunit\TestCase
$this->assertEquals(206, $this->response->statusCode); $this->assertEquals(206, $this->response->statusCode);
$headers = $this->response->headers; $headers = $this->response->headers;
$this->assertEquals("bytes", $headers->get('Accept-Ranges')); $this->assertEquals("bytes", $headers->get('Accept-Ranges'));
$this->assertEquals("bytes " . $expectedHeader . '/' . StringHelper::strlen($fullContent), $headers->get('Content-Range')); $this->assertEquals("bytes " . $expectedHeader . '/' . StringHelper::byteLength($fullContent), $headers->get('Content-Range'));
$this->assertEquals('text/plain', $headers->get('Content-Type')); $this->assertEquals('text/plain', $headers->get('Content-Type'));
$this->assertEquals("$length", $headers->get('Content-Length')); $this->assertEquals("$length", $headers->get('Content-Length'));
} }

Loading…
Cancel
Save