117 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * @link http://www.yiiframework.com/
 | 
						|
 * @copyright Copyright (c) 2008 Yii Software LLC
 | 
						|
 * @license http://www.yiiframework.com/license/
 | 
						|
 */
 | 
						|
 | 
						|
namespace yii\debug\models\search;
 | 
						|
 | 
						|
use yii\base\Model;
 | 
						|
use yii\data\ActiveDataProvider;
 | 
						|
use yii\db\ActiveRecord;
 | 
						|
 | 
						|
/**
 | 
						|
 * Search model for implementation of IdentityInterface
 | 
						|
 *
 | 
						|
 * @author Semen Dubina <yii2debug@sam002.net>
 | 
						|
 * @since 2.0.10
 | 
						|
 */
 | 
						|
class User extends Model
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var Model implementation of IdentityInterface
 | 
						|
     */
 | 
						|
    public $identityImplement = null;
 | 
						|
 | 
						|
 | 
						|
    /**
 | 
						|
     * @inheritdoc
 | 
						|
     */
 | 
						|
    public function init()
 | 
						|
    {
 | 
						|
        if (\Yii::$app->user && \Yii::$app->user->identityClass) {
 | 
						|
            $identityImplementation = new \Yii::$app->user->identityClass();
 | 
						|
            if ($identityImplementation instanceof Model) {
 | 
						|
                $this->identityImplement = $identityImplementation;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        parent::init();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @inheritdoc
 | 
						|
     */
 | 
						|
    public function __get($name)
 | 
						|
    {
 | 
						|
        return $this->identityImplement->__get($name);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @inheritdoc
 | 
						|
     */
 | 
						|
    public function __set($name, $value)
 | 
						|
    {
 | 
						|
        return $this->identityImplement->__set($name, $value);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @inheritdoc
 | 
						|
     */
 | 
						|
    public function rules()
 | 
						|
    {
 | 
						|
        return [[array_keys($this->identityImplement->getAttributes()), 'safe']];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @inheritdoc
 | 
						|
     */
 | 
						|
    public function attributes()
 | 
						|
    {
 | 
						|
        return $this->identityImplement->attributes();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @inheritdoc
 | 
						|
     */
 | 
						|
    public function search($params)
 | 
						|
    {
 | 
						|
        if ($this->identityImplement instanceof ActiveRecord) {
 | 
						|
            return $this->serachActiveDataProvider($params);
 | 
						|
        }
 | 
						|
 | 
						|
        return null;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Search method for ActiveRecord
 | 
						|
     * @param array $params the data array to load model.
 | 
						|
     * @return ActiveDataProvider
 | 
						|
     */
 | 
						|
    private function serachActiveDataProvider($params)
 | 
						|
    {
 | 
						|
        /** @var ActiveRecord $model */
 | 
						|
        $model = $this->identityImplement;
 | 
						|
        $query = $model::find();
 | 
						|
 | 
						|
        $dataProvider = new ActiveDataProvider([
 | 
						|
            'query' => $query,
 | 
						|
        ]);
 | 
						|
 | 
						|
        if (!($this->load($params) && $this->validate())) {
 | 
						|
            return $dataProvider;
 | 
						|
        }
 | 
						|
 | 
						|
        foreach ($model::getTableSchema()->columns as $attribute => $column) {
 | 
						|
            if ($column->phpType === 'string') {
 | 
						|
                $query->andFilterWhere(['like', $attribute, $model->getAttribute($attribute)]);
 | 
						|
            } else {
 | 
						|
                $query->andFilterWhere([$attribute => $model->getAttribute($attribute)]);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return $dataProvider;
 | 
						|
    }
 | 
						|
 | 
						|
}
 |