예제 #1
0
 /**
  * Hàm này đăng nhập người dùng dựa trên 1 SignInToken
  *
  * @param string $token SignInToken được truyền sang từ id.vatgia.com
  */
 function signInByToken($token)
 {
     $config = $this->getServiceLocator()->get('Config');
     $secretKey = $config['sso']['id.vatgia.com_IKI']['secretKey'];
     $publicKey = $config['oauths']['id.vatgia.com']['publicKey'];
     $s = new SignInToken(array(), $secretKey, $publicKey);
     if (SSOHelper::isRefererValid() && ($signinErr = $s->decrypt($token)) == SignInToken::ERROR_NONE) {
         // Header này chỉ định dành cho IE, để cho phép cross domain cookie
         header('P3P: CP="CAO PSA OUR"');
         $data = $s->getData();
         // dữ liệu của SignInToken
         $info = $data['info'];
         // Vì id.vatgia.com chỉ cung cấp Họ Đệm và Tên, bạn có thể lấy tên đầy đủ như dưới đây
         $info['name'] = trim($info['first_name'] . ' ' . $info['last_name']);
         /* @var $userMapper \User\Model\UserMapper */
         $userMapper = $this->getServiceLocator()->get('User\\Model\\UserMapper');
         if (($user = $userMapper->get(null, null, $info['email'])) == null) {
             $user = new \User\Model\User();
             $user->setEmail($info['email']);
             $user->setFullName($info['name']);
             $user->setAddress($info['address']);
             $user->setBirthday($info['dob']);
             $user->setMobile($info['phone']);
             $user->setActive(1);
             $user->setRegisteredDate(date('Y-m-d H:i:s'));
             $userMapper->save($user);
         }
         // TODO lưu lại thông tin OAuth2 Access Token dùng để xác thực tài khoản trước khi lấy thông tin bảo kim...
         //$this->setState('oauth2_access_token', $data['oauth2_access_token']);
         // hoặc : $_SESSION['oauth2_access_token'] = $data['oauth2_access_token'];
         // Lưu lại gsn vào cookie
         SSOHelper::saveGSN($data['gsn'], $data['expired_time']);
         return $user;
     } else {
         echo $signinErr;
     }
     return null;
 }
예제 #2
0
 public function officebncuserAction()
 {
     list($officeAdapter, $officeSql) = $this->createOfficeBNCAdapter();
     $dbSql = $this->getServiceLocator()->get('dbSql');
     $dbAdapter = $this->getServiceLocator()->get('dbAdapter');
     // lấy danh sach user có personel_id
     $select = $officeSql->select(['u' => 'users']);
     $select->where(['personnel_id IS NOT NULL']);
     $select->order(['id ASC']);
     $paginatorAdapter = new \Zend\Paginator\Adapter\DbSelect($select, $officeAdapter);
     $paginator = new \Zend\Paginator\Paginator($paginatorAdapter);
     $paginator->setItemCountPerPage(50);
     $page = $this->getRequest()->getQuery('page', 1);
     $totalUpdate = $this->getRequest()->getQuery('totalUpdate', 0);
     $totalInsert = $this->getRequest()->getQuery('totalInsert', 0);
     $paginator->setCurrentPageNumber($page);
     $employeeMapper = $this->getServiceLocator()->get('\\Hrm\\Model\\EmployeeMapper');
     foreach ($paginator as $row) {
         $row = (array) $row;
         // dùng personelId tham chiếu với bảng employee, lấy ra employee
         $employee = new \Hrm\Model\Employee();
         $employee->setOneofficeId($row['personnel_id']);
         $employee->setPrivateSource(\Home\Model\Consts::PRIVATE_SOURCE_OFFICEBNC);
         if (!$employeeMapper->isExistedOneofficeId($employee)) {
             continue;
         }
         // xem nếu employee đó đã có user thì bỏ qua
         if ($employee->getUserId()) {
             continue;
         }
         if (!$row['email']) {
             continue;
         }
         // nếu employee chưa gắn với user thfi tạo user
         $user = new \User\Model\User();
         $userMapper = $this->getServiceLocator()->get('\\User\\Model\\UserMapper');
         // lấy thông tin email, check user đã  tồn tại chưa
         $user = $userMapper->get(null, null, $row['email']);
         if ($user) {
             // nếu đã tồn tại, check xem user đó đã gắn với employee nào chưa
             $select = $dbSql->select(['e' => \Hrm\Model\EmployeeMapper::TABLE_NAME]);
             $select->where(['userId' => $user->getId()]);
             $rowEmployee = $dbAdapter->query($dbSql->buildSqlString($select), Adapter::QUERY_MODE_EXECUTE);
             // nếu đã tôn tại, continue
             if ($rowEmployee->count()) {
                 continue;
             }
             //nếu chưa thì gắn luôn với employee
             $employee->setUserId($user->getId());
             $employeeMapper->save($employee);
             $user->setOneofficeId($row['ID']);
             $userMapper->save($user);
             $totalUpdate++;
         } else {
             // nếu chưa tồn tại user, tạo mới rồi gắn với employee
             $user = new \User\Model\User();
             $username = $this->getValidUsername($row['username']);
             $user->setUsername($username);
             $user->setFullName($employee->getFullName());
             $user->setEmail($row['email']);
             $user->setRole(\User\Model\User::ROLE_MEMBER);
             $user->setGender($employee->getGender());
             $user->setFullName($employee->getFullName());
             $user->setBirthdate($employee->getBirthdate());
             $user->setActive(1);
             $user->setSalt($user->generateSalt());
             $user->setPassword($user->createPassword('vatgia.com'));
             if ($row['is_deleted'] == 'yes') {
                 $user->setLocked(1);
             }
             if ($row['date_created'] && $row['date_created'] != '0000-00-00 00:00:00') {
                 $user->setCreatedDateTime($row['date_created']);
                 $user->setCreatedDate(DateBase::toFormat($row['date_created'], DateBase::COMMON_DATE_FORMAT));
             } else {
                 $user->setCreatedDateTime(DateBase::getCurrentDateTime());
                 $user->setCreatedDate(DateBase::getCurrentDate());
             }
             $user->setCreatedById(1);
             $user->setEmployeeCode($employee->getCode());
             $user->setOneofficeId($row['ID']);
             $userMapper->save($user);
             $employee->setUserId($user->getId());
             $employeeMapper->save($employee);
             $totalInsert++;
         }
     }
     $this->getViewModel()->setTerminal(true);
     $this->getViewModel()->setVariable('paginator', $paginator);
     $this->getViewModel()->setVariable('page', $page);
     $this->getViewModel()->setVariable('totalPages', $paginator->count() + 1);
     $this->getViewModel()->setVariable('totalInsert', $totalInsert);
     $this->getViewModel()->setVariable('totalUpdate', $totalUpdate);
     if ($page <= $paginator->count()) {
         $this->getViewModel()->setVariable('redirectUri', Uri::build('/system/tool/officebncuser', ['page' => $page + 1, 'totalInsert' => $totalInsert, 'totalUpdate' => $totalUpdate]));
     }
     return $this->getViewModel();
 }