This commit is contained in:
2020-10-06 14:27:47 +07:00
commit 586be80cf6
16613 changed files with 3274099 additions and 0 deletions

View File

@@ -0,0 +1,81 @@
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace yii\debug\components\search;
use yii\base\Component;
use yii\debug\components\search\matchers\MatcherInterface;
/**
* Provides array filtering capabilities.
*
* @author Mark Jebri <mark.github@yandex.ru>
* @since 2.0
*/
class Filter extends Component
{
/**
* @var array rules for matching filters in the way: [:fieldName => [rule1, rule2,..]]
*/
protected $rules = [];
/**
* Adds data filtering rule.
*
* @param string $name attribute name
* @param MatcherInterface $rule
*/
public function addMatcher($name, MatcherInterface $rule)
{
if ($rule->hasValue()) {
$this->rules[$name][] = $rule;
}
}
/**
* Applies filter on a given array and returns filtered data.
*
* @param array $data data to filter
* @return array filtered data
*/
public function filter(array $data)
{
$filtered = [];
foreach ($data as $row) {
if ($this->passesFilter($row)) {
$filtered[] = $row;
}
}
return $filtered;
}
/**
* Checks if the given data satisfies filters.
*
* @param array $row data
* @return bool if data passed filtering
*/
private function passesFilter(array $row)
{
foreach ($row as $name => $value) {
if (isset($this->rules[$name])) {
// check all rules for a given attribute
foreach ($this->rules[$name] as $rule) {
/* @var $rule MatcherInterface */
if (!$rule->match($value)) {
return false;
}
}
}
}
return true;
}
}

View File

@@ -0,0 +1,41 @@
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace yii\debug\components\search\matchers;
use yii\base\Component;
/**
* Base class for matchers that are used in a filter.
*
* @author Mark Jebri <mark.github@yandex.ru>
* @since 2.0
*/
abstract class Base extends Component implements MatcherInterface
{
/**
* @var mixed base value to check
*/
protected $baseValue;
/**
* @inheritdoc
*/
public function setValue($value)
{
$this->baseValue = $value;
}
/**
* @inheritdoc
*/
public function hasValue()
{
return !empty($this->baseValue) || ($this->baseValue === '0');
}
}

View File

@@ -0,0 +1,25 @@
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace yii\debug\components\search\matchers;
/**
* Checks if the given value is greater than the base one.
*
* @author Mark Jebri <mark.github@yandex.ru>
* @since 2.0
*/
class GreaterThan extends Base
{
/**
* @inheritdoc
*/
public function match($value)
{
return ($value > $this->baseValue);
}
}

View File

@@ -0,0 +1,25 @@
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace yii\debug\components\search\matchers;
/**
* Checks if the given value is greater than or equal the base one.
*
* @author Dmitriy Bashkarev <dmitriy@bashkarev.com>
* @since 2.0.7
*/
class GreaterThanOrEqual extends Base
{
/**
* @inheritdoc
*/
public function match($value)
{
return $value >= $this->baseValue;
}
}

View File

@@ -0,0 +1,25 @@
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace yii\debug\components\search\matchers;
/**
* Checks if the given value is lower than the base one.
*
* @author Mark Jebri <mark.github@yandex.ru>
* @since 2.0
*/
class LowerThan extends Base
{
/**
* @inheritdoc
*/
public function match($value)
{
return ($value < $this->baseValue);
}
}

View File

@@ -0,0 +1,39 @@
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace yii\debug\components\search\matchers;
/**
* MatcherInterface should be implemented by all matchers that are used in a filter.
*
* @author Mark Jebri <mark.github@yandex.ru>
* @since 2.0
*/
interface MatcherInterface
{
/**
* Checks if the value passed matches base value.
*
* @param mixed $value value to be matched
* @return bool if there is a match
*/
public function match($value);
/**
* Sets base value to match against
*
* @param mixed $value
*/
public function setValue($value);
/**
* Checks if base value is set
*
* @return bool if base value is set
*/
public function hasValue();
}

View File

@@ -0,0 +1,40 @@
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace yii\debug\components\search\matchers;
use yii\helpers\VarDumper;
/**
* Checks if the given value is exactly or partially same as the base one.
*
* @author Mark Jebri <mark.github@yandex.ru>
* @since 2.0
*/
class SameAs extends Base
{
/**
* @var boolean if partial match should be used.
*/
public $partial = false;
/**
* @inheritdoc
*/
public function match($value)
{
if (!is_scalar($value)) {
$value = VarDumper::export($value);
}
if ($this->partial) {
return mb_stripos($value, $this->baseValue, 0, \Yii::$app->charset) !== false;
}
return strcmp(mb_strtoupper($this->baseValue, \Yii::$app->charset), mb_strtoupper($value, \Yii::$app->charset)) === 0;
}
}