/** * 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; }
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(); }