<?php
class Auth_UserController extends Ec_Controller_Action
{
    public function preDispatch()
    {
        $this->tplDirectory = "auth/views/user/";
        $this->serviceClass = new Service_User();
    }

    public function listAction()
    {
        $statusArray = Common_Type::status('auto');
        $departmentArray = Common_DataCache::getDepartment();
        $positionArray = Common_DataCache::getUserPosition();
        if ($this->_request->isPost()) {
            $page = $this->_request->getParam('page', 1);
            $pageSize = $this->_request->getParam('pageSize', 20);

            $page = $page ? $page : 1;
            $pageSize = $pageSize ? $pageSize : 20;

            $return = array(
                "state" => 0,
                "message" => "No Data"
                );

            $params = $this->_request->getParams();

            $condition = $this->serviceClass->getMatchFields($params);

            $count = $this->serviceClass->getByCondition($condition, 'count(*)');
            $return['total'] = $count;

            if ($count) {
                $showFields = array(
                    'user_code',
                    'user_name',
                    'user_name_en',
                    'user_status',
                    'ud_id',
                    'up_id',
                    'user_mobile_phone',
                    'user_last_login',
                    'user_id',
                    );
                $showFields = $this->serviceClass->getFieldsAlias($showFields);
                $rows = $this->serviceClass->getByCondition($condition, $showFields, $pageSize, $page, array('user_id asc'));
                $language = Ec::getLang(1);
                foreach ($rows as $key => $val) {
                    $rows[$key]['E7'] = isset($departmentArray[$val['E7']]['ud_name' . $language]) ? $departmentArray[$val['E7']]['ud_name' . $language] : '';
                    $rows[$key]['E8'] = isset($positionArray[$val['E8']]['up_name' . $language]) ? $positionArray[$val['E8']]['up_name' . $language] : '';
                    $rows[$key]['E5'] = $statusArray[$val['E5']];
                }
                $return['data'] = $rows;
                $return['state'] = 1;
                $return['message'] = "";
            }
            die(Zend_Json::encode($return));
        }
        $this->view->warehouse = Service_Warehouse::getAll();
        $language = Ec::getLang();
        $this->view->status = $statusArray;
        $this->view->department = $departmentArray;
        $this->view->position = $positionArray;
        $this->view->statusArr = Common_Type::status($language);
        $this->view->userArr = Service_User::getByCondition(array(),array('user_id','user_name','user_name_en'));
        echo Ec::renderTpl($this->tplDirectory . "user_index.tpl", 'layout2');
    }

    public function editAction()
    {
        $return = array(
            'state' => 0,
            'message' => '',
            'errorMessage' => array('Fail.')
            );

        if ($this->_request->isPost()) {
            $params = $this->_request->getParams();
            $row = array(
                'user_id' => '',
                'user_code' => '',
                'user_password' => '',
                'user_name' => '',
                'user_name_en' => '',
                'user_status' => '',
                'user_email' => '',
                'ud_id' => '',
                'up_id' => '',
                'user_phone' => '',
                'user_mobile_phone' => '',
                'user_note' => '',
                'user_supervisor_id' => '',
                'warehouse_id' => '',
                'customer_code' =>  '',
                );
            $row = $this->serviceClass->getMatchEditFields($params, $row);
            $paramId = $row['user_id'];
            if (!empty($row['user_id'])) {
                unset($row['user_id']);
            }
            $errorArr = $this->serviceClass->validator($row);

            if (!empty($errorArr)) {
                $return = array(
                    'state' => 0,
                    'message' => '',
                    'errorMessage' => $errorArr
                    );
                die(Zend_Json::encode($return));
            }
            $row['user_update_time']=date('Y-m-d H:i:s');
            if (!empty($row['user_password'])) {
                $row['user_password'] = Ec_Password::getHash($row['user_password']);
            }else{
                unset($row['user_password']);
            }
            if($row['customer_code'] != ''){
                $row['customer_code'] = strtoupper($row['customer_code']);
                if(false !== strpos($row['customer_code'],";")){
                    $customerCode = explode(";",$row['customer_code']);
                    foreach($customerCode as $val){
                        $customerRow    =   Service_Customer::getByField($val , 'customer_code' , ['customer_id','customer_code','customer_status']);
                        if(!(isset($customerRow['customer_id']) && $customerRow['customer_id'] > 0)){
                            $return['errorMessage'] = array($val.'客户代码不存在！');
                            die(Zend_Json::encode($return));
                        }
                        if($customerRow['customer_status']!="2"){
                            $return['errorMessage'] = array($val.'不是正常状态！');
                            die(Zend_Json::encode($return));
                        }
                    }
                }else{
                    $customerRow    =   Service_Customer::getByField($row['customer_code'] , 'customer_code' , ['customer_id','customer_code','customer_status']);
                    if(!(isset($customerRow['customer_id']) && $customerRow['customer_id'] > 0)){
                        $return['errorMessage'] = array($row['customer_code'].'客户代码不存在！');
                        die(Zend_Json::encode($return));
                    }
                    if($customerRow['customer_status']!="2"){
                        $return['errorMessage'] = array($val.'不是正常状态！');
                        die(Zend_Json::encode($return));
                    }
                }

            }
            if (!empty($paramId)) {
                if(!empty($row['customer_code'])){
                    $customerCodeArr = explode(';', $row['customer_code']);
                    if(is_array($customerCodeArr) && !empty($customerCodeArr)){
                        if(Service_UserCustomerPriv::delete($paramId) !== false){
                            foreach ($customerCodeArr as $customerCode) {
                                Service_UserCustomerPriv::add(array('user_id'=>$paramId, 'customer_code'=>$customerCode));
                            }
                        }
                    }
                }
                $result = $this->serviceClass->update($row, $paramId);
            } else {
                if (!empty($row['user_code'])) {
                    if(Service_User::getByField($row['user_code'],'user_code')){
                        //$return['state'] = 0;
                        $return['errorMessage'] = array('用户账户已经存在');
                        die(Zend_Json::encode($return));
                    }
                }
                $result = $this->serviceClass->add($row);
                if(!empty($row['customer_code'])){
                    $customerCodeArr = explode(';', $row['customer_code']);
                    if(is_array($customerCodeArr) && !empty($customerCodeArr)){
                        foreach ($customerCodeArr as $customerCode) {
                            Service_UserCustomerPriv::add(array('user_id'=>$result, 'customer_code'=>$customerCode));
                        }
                    }
                }
            }
            if ($result) {
                $return['state'] = 1;
                $return['message'] = array('Success.');
            }

        }
        die(Zend_Json::encode($return));
    }

    public function getByJsonAction()
    {
        $result = array('state' => 0, 'message' => 'Fail', 'data' => array());
        $paramId = $this->_request->getParam('paramId', '');
        if (!empty($paramId) && $rows = $this->serviceClass->getByField($paramId, 'user_id')) {
            $rows = $this->serviceClass->getVirtualFields($rows);
            $rows['E2'] = '';
            //unset($rows['E2']);
            $result = array('state' => 1, 'message' => '', 'data' => $rows);
        }
        die(Zend_Json::encode($result));
    }

    public function deleteAction()
    {
        $result = array(
            "state" => 0,
            "message" => "Fail."
            );
        if ($this->_request->isPost()) {
            $paramId = $this->_request->getPost('paramId');
            if (!empty($paramId)) {
                if ($this->serviceClass->delete($paramId)) {
                    $result['state'] = 1;
                    $result['message'] = 'Success.';
                }
            }
        }
        die(Zend_Json::encode($result));
    }

    public function getRightAction()
    {
        $result = array(
            "state" => 0,
            "data" => array(),
            "ids" => array(),
            "message" => Ec::Lang('operationFail')
            );
        if ($this->_request->isPost()) {
            $paramId = $this->_request->getPost('paramId');
            if(!empty($paramId)){
                $result=$this->serviceClass->getUserRightByUserId($paramId);
            }
        }
        die(Zend_Json::encode($result));
    }

    public function editRightAction()
    {
        $result = array(
            "state" => 0,
            "message" => Ec::Lang('operationFail')
            );
        if ($this->_request->isPost()) {
            $permissionId = $this->_request->getPost('permissionId');
            $actions = $this->_request->getParam('actionId', array());
            if (!empty($permissionId) && Service_User::getByField($permissionId)) {
                $resultAction = Service_UserRightMap::getByCondition(array('user_id' => $permissionId), '*');
                $delRow = $oldIdArr = $insertRow = array();
                if (!empty($resultAction)) {
                    foreach ($resultAction as $key => $val) {
                        $oldIdArr[] = $val['ur_id'];
                    }
                    $delIdArr = array_diff($oldIdArr, $actions);
                    foreach ($delIdArr as $val) {
                        $rows=Service_UserRightMap::getByCondition(array('ur_id'=>$val,'user_id'=>$permissionId));
                        if(!empty($rows)){
                            $delRow[] = Table_UserRightMap::getInstance()->deleteByUserIdAndUrId($permissionId, $val);
                        }
                    }
                }

                $insertIdArr = array_diff($actions, $oldIdArr);

                if (!empty($insertIdArr)) {
                    foreach ($insertIdArr as $val) {
                        $row = array('user_id' => $permissionId, 'ur_id' => $val);
                        $insertRow[] = Service_UserRightMap::add($row);
                    }
                }
                if (count($delRow) || count($insertRow)) {
                    $result = array('state' => 1, 'message' => Ec::Lang('operationSuccess'));
                }
            }
        }
        die(Zend_Json::encode($result));
    }

    public function changePasswordAction() {
        $user = new Zend_Session_Namespace('userAuthorization');
        $user = $user->user;
        $message = array();

        if ($this->getRequest()->isPost()) {
            $user = Service_User::getByField($user['user_id'], 'user_id');
            $oldPassword = trim($this->getRequest()->getPost('old_password', ''));
            $newPassword = trim($this->getRequest()->getPost('new_password', ''));
            $repeatPassword = trim($this->getRequest()->getPost('repeat_passowrd', ''));

            if ('' === $oldPassword) {
                $message[] = '�����벻��Ϊ��';
            }
            elseif (!Ec_Password::comparePassword($oldPassword, $user['user_password'])) {
                $message[] = '����ľ�������ԭ���벻ƥ��';
            }

            if ('' === $newPassword) {
                $message[] = '�����벻��Ϊ��';
            }
            elseif (!preg_match('/^[\d\w]{6,18}$/', $newPassword)) {
                $message[] = '�����벻��С��6λ����18λ';
            }

            if ('' === $repeatPassword) {
                $message[] = 'ȷ�����벻��Ϊ��';
            }
            elseif (!preg_match('/^[\d\w]{6,18}$/', $repeatPassword)) {
                $message[] = 'ȷ�����벻��С��6λ����18λ';
            }
            elseif ($newPassword !== $repeatPassword) {
                $message[] = '�������ȷ�����벻һ��';
            }
            /*
            if (empty($message)) {
                Service_User::update(array(
                  'user_password' => Ec_Password::getHash($newPassword),
                  'user_password_update_time' => date('Y-m-d H:i:s'),
                ), Service_User::getUserId(), 'user_id');
                $message[] = '�����޸ĳɹ�';
            }*/
            if(empty($message)){
                Service_User::update(array(
                    'user_password' =>Ec_Password::getHash($newPassword),
                    'user_password_update_time' => date('Y-m-d H:i:s'),
                    ),Service_User::getUserId(),'user_id');
                $message[]= '�����޸ĳɹ�';
            }
        }

        $this->view->user = $user;
        $this->view->message = implode('��', $message);
        echo Ec::renderTpl($this->tplDirectory . 'change-password.tpl', 'layout');
       // echo "<pre>",($user['user_password']),"<pre>";
        //echo "<pre>",print_r($_SESSION),"<pre>";

    }


}