<?php

/**
 * This is the model class for table "{{user_portal}}".
 *
 * The followings are the available columns in table '{{user_portal}}':
 * @property integer $id
 * @property integer $portal_id
 * @property integer $user_id
 * @property string $isActive
 */
class UserPortal extends CActiveRecord {

    /**
     * @return string the associated database table name
     */
    public function tableName() {
        return '{{user_portal}}';
    }

    /**
     * @return array validation rules for model attributes.
     */
    public function rules() {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('portal_id, user_id, isActive', 'required'),
            array('portal_id, user_id', 'numerical', 'integerOnly' => true),
            array('isActive', 'length', 'max' => 1),
            //array('portal_id', 'unique'),
            array('portal_id', 'CheckPortalUserUniqueness'),
            //array('user_id','CheckPortalUserUniqueness'),
            // The following rule is used by search().
            // @todo Please remove those attributes that should not be searched.
            array('id, portal_id, user_id, isActive, created_by, updated_datetime, updated_by', 'safe', 'on' => 'search'),
        );
    }

    /**
     * @return array relational rules.
     */
    public function relations() {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array(
            'portal_details' => [self::BELONGS_TO, 'MasPortal', 'portal_id'],
            'user_details' => [self::BELONGS_TO, 'User', 'user_id']
        );
    }

    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels() {
        return array(
            'id' => 'ID',
            'portal_id' => 'Portal',
            'user_id' => 'User',
            'isActive' => 'Is Active',
        );
    }

    /**
     * Retrieves a list of models based on the current search/filter conditions.
     *
     * Typical usecase:
     * - Initialize the model fields with values from filter form.
     * - Execute this method to get CActiveDataProvider instance which will filter
     * models according to data in model fields.
     * - Pass data provider to CGridView, CListView or any similar widget.
     *
     * @return CActiveDataProvider the data provider that can return the models
     * based on the search/filter conditions.
     */
    public function search() {
        // @todo Please modify the following code to remove attributes that should not be searched.

        $criteria = new CDbCriteria;

        $criteria->compare('id', $this->id);
        $criteria->compare('portal_id', $this->portal_id);
        $criteria->compare('user_id', $this->user_id);
        $criteria->compare('isActive', $this->isActive, true);

        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
        ));
    }

    /**
     * Returns the static model of the specified AR class.
     * Please note that you should have this exact method in all your CActiveRecord descendants!
     * @param string $className active record class name.
     * @return UserPortal the static model class
     */
    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    public function CheckPortalUserUniqueness($attribute, $params) {
        if ($this->id > 0) {
            $model = self::model()->with('user_details')->findAll('portal_id = "' . $this->portal_id . '" AND user_id = "' . $this->user_id . '" AND  t.id!=' . $this->id);
        } else {
            $model = self::model()->with('user_details')->findAll('portal_id = "' . $this->portal_id . '" AND user_id = "' . $this->user_id . '"');
        }
        if (count($model) > 0) {
            $this->addError('id', 'This Portal is already assigned for ' . $this->user_details->Fullname);
        }
    }

    public static function getHrUser() {
        $db_name = GeneralSettings::getValue("NIA_MAIN_DB");
        $sql = "SELECT * FROM $db_name.`erp_user` WHERE `employee_id` > 0 ";
        $user_data = [];
        $rawData = Yii::app()->db->createCommand($sql)->queryAll();
        foreach ($rawData as $key => $value) {
            $user_data[$value["id"]] = $value["first_name"] . " " . $value["first_name"];
        }
        return $user_data;
    }

}
