The followings are the available columns in table '{{user_tokens}}':
Inheritance: extends yupe\models\YModel
Exemplo n.º 1
0
 public function checkSecurity($authToken = true, $userToken = false, $mustBeOfficial = false)
 {
     if ($authToken) {
         if (empty($this->authToken)) {
             return $this->replyError('Missing authToken');
         }
         $tokenClass = new AuthToken();
         try {
             $app = $tokenClass->validate($this->authToken);
         } catch (Exception $e) {
             return $this->replyError('Invalid authToken');
         }
         $this->app = $app;
         if ($mustBeOfficial && !$this->app->isOfficial()) {
             return $this->replyError('Permission denied');
         }
     }
     if ($userToken) {
         if (empty($this->authToken)) {
             return $this->replyError('Missing userToken');
         }
         $token = new UserToken();
         $tokenData = $token->get($this->userToken);
         if (!$tokenData || $tokenData->app != $this->app->id) {
             return $this->replyError('Invalid userToken');
         }
         $userClass = new User();
         $user = $userClass->get($tokenData->uid);
         $this->user = $user;
     }
     return true;
 }
Exemplo n.º 2
0
 /**
  * Logs a user in.
  *
  * @param   string   $user : user email
  * @param   string   password
  * @param   boolean  enable autologin
  * @return  boolean
  */
 protected function _login($user, $password, $remember)
 {
     if (!is_object($user)) {
         $q = Doctrine_Query::create()->from('User u')->innerJoin('u.Roles r')->addWhere('u.email=?', $user)->addWhere('u.password=?', $password);
     }
     //die($q->getSqlQuery());
     $user = $q->fetchOne();
     //die(print_r($user->toArray()));
     if ($user && $this->_is_in_db('login', $user->Roles, 'name')) {
         if ($remember === TRUE) {
             // Create a new autologin token
             //$token = ORM::factory('user_token');
             $token = new UserToken();
             // Set token data
             $token->user_id = $user->id;
             $token->expires = time() + $this->_config['lifetime'];
             $token->token = Text::random('alnum', 32);
             $token->created = time();
             $token->user_agent = sha1(Request::$user_agent);
             $token->save();
             $user->UserToken[] = $token;
             // Set the autologin cookie
             Cookie::set('authautologin', $token->token, $this->_config['lifetime']);
         }
         //update lastlogin
         $user->logins++;
         $user->last_login = time();
         $user->save();
         // Finish the login
         $this->complete_login($user);
         return TRUE;
     }
     // Login failed
     return FALSE;
 }
 function submitLogin()
 {
     try {
         if (empty($_POST['username']) || empty($_POST['password'])) {
             throw new Exception("Username or password missing");
         }
         $user = new UserToken();
         if (!$user->verifyLogin($_POST['username'], $_POST['password'])) {
             throw new Exception("Username or password incorrect");
         }
         $_SESSION['user'] = serialize($user);
         if ($user->isFlaggedForPwReset) {
             header("Location: admin?action=firstTimeReset");
         } else {
             if (!empty($user->availiblePeriod)) {
                 if (!empty($user->appraisee) || !empty($user->appraisee)) {
                     header('Location: survey');
                 } else {
                     header('Location: survey?action=renderForm&r=self&uid=' . $user->availiblePeriod['uid'] . '&u=' . $user->username);
                 }
             } else {
                 if ($user->isAdmin) {
                     header('Location: report');
                 } else {
                     throw new Exception('All surveys are closed at the moment. Please try again later.');
                 }
             }
         }
     } catch (Exception $ex) {
         header('HTTP/1.0 403 Forbidden', TRUE, 403);
         $this->requestLogin($ex);
     }
 }
Exemplo n.º 4
0
 public function activate(UserToken $token, $invalidate = true)
 {
     $token->status = UserToken::STATUS_ACTIVATE;
     if ($token->save()) {
         if ($invalidate) {
             UserToken::model()->deleteAll('id != :id AND user_id = :user_id AND type = :type', array(':user_id' => $token->user_id, ':type' => $token->type, ':id' => $token->id));
         }
         return true;
     }
     throw new CDbException(Yii::t('UserModule.user', 'Error activate token!'));
 }
 public function loadModel($id)
 {
     if (($model = UserToken::model()->findByPk($id)) === null) {
         throw new CHttpException(404, 'Страница не найдена');
     }
     return $model;
 }
 /**
  * Returns the data model based on the primary key given in the GET variable.
  * If the data model is not found, an HTTP exception will be raised.
  *
  * @param int $id - record ID
  *
  * @return UserToken
  *
  * @throws CHttpException
  */
 public function loadModel($id)
 {
     if (($model = UserToken::model()->findByPk($id)) === null) {
         throw new CHttpException(404, Yii::t('UserModule.user', 'requested page was not found!'));
     }
     return $model;
 }
 /**
  * Returns the data model based on the primary key given in the GET variable.
  * If the data model is not found, an HTTP exception will be raised.
  * 
  * @param int $id - record ID
  * 
  * @return UserToken
  *
  * @throws CHttpException
  */
 public function loadModel($id)
 {
     if ($this->_model === null || $this->_model instanceof UserToken && $this->_model->id !== $id) {
         if (($this->_model = UserToken::model()->findbyPk($id)) === null) {
             throw new CHttpException(404, 'Страница не найдена');
         }
     }
     return $this->_model;
 }
Exemplo n.º 8
0
 static function Create($username, $password)
 {
     //Step1: 生成随机串
     $randomString = UserToken::GetRandomString(32);
     //Step2: 组合随机串,用户名和密码
     $tempArray = array($randomString, $username, $password);
     sort($tempArray, SORT_STRING);
     $tempString = implode($tempArray);
     //Step3: 生成Token
     $token = sha1($tempString);
     return $token;
 }
 public static function deleteByUidAndSid($uid, $sid)
 {
     $all = UserToken::getByUidAndSid($uid, $sid);
     if ($all instanceof UserToken) {
         $all->delete();
     }
     if ($all instanceof ObjectSet) {
         foreach ($all as $a) {
             $a->delete();
         }
     }
 }
Exemplo n.º 10
0
 function renderNewForm($username)
 {
     $userToken = new UserToken();
     $userToken->constructUserInfo($username);
     $statement = "INSERT INTO pa_form_data " . "(form_username, survey_uid, staff_name, is_senior, staff_department, staff_position, " . "staff_office, survey_commencement_date, appraiser_name, countersigner_name, survey_period, survey_type, countersigner_1_name, " . "countersigner_2_name) " . "VALUES (:username, :uid, :fullName, :isSenior, :department, :position, :office, :commenceDate, :appraiserFullName, :bothCounter, :survey_period, :survey_type, :counter1, :counter2)";
     $query = $this->dbConnection->prepare($statement);
     $query->bindValue(':username', $userToken->username);
     $query->bindValue(':uid', $this->uid);
     $query->bindValue(':fullName', $userToken->fullName);
     $query->bindValue(':isSenior', $userToken->isSenior);
     $query->bindValue(':department', $userToken->department);
     $query->bindValue(':position', $userToken->position);
     $query->bindValue(':office', $userToken->office);
     $query->bindValue(':commenceDate', $userToken->commenceDate);
     $query->bindValue(':appraiserFullName', $userToken->appraiserFullName);
     $query->bindValue(':counter1', $userToken->countersignerFullName1);
     $query->bindValue(':counter2', $userToken->countersignerFullName2);
     if (!empty($userToken->countersignerFullName1) && !empty($userToken->countersignerFullName2)) {
         $jointString = $userToken->countersignerFullName1 . " & " . $userToken->countersignerFullName2;
     } else {
         $jointString = $userToken->countersignerFullName1 . $userToken->countersignerFullName2;
     }
     $query->bindValue(':bothCounter', $jointString);
     $query->bindValue(':survey_period', $userToken->availiblePeriod['period']);
     //Need to throw an Exception here later if there is not active survey
     $query->bindValue(':survey_type', $userToken->availiblePeriod['type']);
     $query->execute();
     $statement = "INSERT IGNORE INTO pa_part_a SET form_username = :username, survey_uid = :uid, question_no = :no";
     $query = $this->dbConnection->prepare($statement);
     $query->bindValue(':username', $userToken->username);
     $query->bindValue(':uid', $this->uid);
     $query->bindParam(':no', $i);
     for ($i = 1; $i <= 3; $i++) {
         $query->execute();
     }
 }
Exemplo n.º 11
0
 public function destroy()
 {
     if (count($_COOKIE) > 0) {
         foreach ($_COOKIE as $key => $value) {
             if ($key == 'frmauth') {
                 $val = explode('_', $_COOKIE['frmauth']);
                 $token = UserToken::getUserToken($val[0], $val[1], $val[2]);
                 if ($token) {
                     $token->delete();
                 }
             }
             setcookie($key, false, time() - 10000, '/', '.' . $_SERVER['SERVER_NAME']);
             setcookie($key, false, time() - 10000, '/', $_SERVER['SERVER_NAME']);
         }
     }
     return session_destroy();
 }
Exemplo n.º 12
0
 protected function authenticate($username, $password, $remember_me = false)
 {
     $db = DB::getInstance();
     $username = $db->db_escape_string($username);
     $password = $db->db_escape_string($password);
     $user = User::getUserByUsername($username);
     if (!is_null($user) && $user->authenticate($password)) {
         $context = Context::getInstance();
         $context->session->regenerate();
         $context->session->userID = (int) $user->id;
         $context->user = $user;
         if ($remember_me) {
             UserToken::setCookieToken($user, Utils::genRandom(10));
         }
         return true;
     }
     return false;
 }
Exemplo n.º 13
0
 public function checkCookieToken()
 {
     $context = Context::getInstance();
     if (isset($_COOKIE['frmauth']) && $context->session->userID == User::GUEST) {
         $val = explode('_', $_COOKIE['frmauth']);
         $token = UserToken::getUserToken($val[0], $val[1], $val[2]);
         if ($token) {
             $context->session->userID = (int) $val[0];
             $context->user = User::getUserById($val[0]);
             $token->delete();
             UserToken::setCookieToken($context->user, $val[1]);
         } else {
             $token = UserToken::getByUidAndSid($val[0], $val[1]);
             if ($token) {
                 //possible cookie theft
                 UserToken::deleteByUidAndSid($val[0], $val[1]);
                 $context->session->destroy();
                 echo 'cookie hijacked';
                 exit;
             }
         }
     }
 }
Exemplo n.º 14
0
 /**
  * Returns the data model based on the primary key given in the GET variable.
  * If the data model is not found, an HTTP exception will be raised.
  *
  * @param int $id - record ID
  *
  * @return UserToken
  *
  * @throws CHttpException
  */
 public function loadModel($id)
 {
     if ($this->_model === null || $this->_model instanceof UserToken && $this->_model->id !== $id) {
         if (($this->_model = UserToken::model()->findbyPk($id)) === null) {
             throw new CHttpException(404, Yii::t('UserModule.user', 'requested page was not found!'));
         }
     }
     return $this->_model;
 }
 public function safeUp()
 {
     UserToken::model()->deleteAll();
     $this->addColumn('{{user_tokens}}', 'expire', 'datetime NOT NULL');
 }
Exemplo n.º 16
0
 /**
  * 学员在APP中对自己的课时进行请假或者取消请假的操作
  * @param $userId
  * @param $token
  * @param $memberId
  * @param $lessonStudentId
  * @param $leaveType
  * @return array|int
  */
 public function lessonStudentLeave($userId, $token, $memberId, $lessonStudentId, $leaveType)
 {
     $nowTime = date("Y-m-d H-i-s");
     $data = array();
     try {
         // 用户ID验证
         $user = User::model()->IsUserId($userId);
         if (!$user) {
             return 20008;
             // MSG_ERR_FAIL_USER
         }
         // 用户token验证
         $userToken = UserToken::model()->IsToken($userId, $token);
         //            var_dump($userToken);exit;
         if (!$userToken) {
             return 20007;
             // MSG_ERR_FAIL_TOKEN
         }
         $isExistUserMemberId = UserMember::model()->IsExistMemberId($userId, $memberId);
         if (!$isExistUserMemberId) {
             return 20017;
             // MSG_ERR_FAIL_MEMBER
         }
         $isLessonStudentId = self::IsLessonStudentId($memberId, $lessonStudentId);
         if (!$isLessonStudentId) {
             return 20021;
             // MSG_ERR_LESSON_STUDENT_ID
         }
         // step 状态  0 - 等待确认,1 - 取消请假,3 - 锁定,2 - 请假完成
         $aStep = array(0, 1, 2, 3);
         // 学员请假
         if ($leaveType == 1) {
             $reminder = self::getHtReminder($memberId, $lessonStudentId);
             // 测试memberId = 410, lessonStudentId = 82
             if ($reminder) {
                 // 请假记录存在
                 $step = $reminder['step'];
                 if ($step == 1) {
                     // 学员请假后,客服未处理。学员又取消了请假,此时可以请假
                     self::setStep($memberId, $lessonStudentId, 0);
                     // 设置请假状态 为请假
                 } else {
                     return 20032;
                     //MSG_ERR_NO_LEAVE
                 }
             } else {
                 // 请假记录不存在
                 self::insertLeave($memberId, $lessonStudentId);
                 // 增加请假记录
             }
             //                var_dump($reminder['step']);
         } elseif ($leaveType == 2) {
             $reminder = self::getHtReminder($memberId, $lessonStudentId);
             if (!$reminder) {
                 // 请假记录不存在,当然不能取消请假
                 return 20033;
                 // MSG_ERR_NO_CANCEL_LEAVE
             } else {
                 // 请假记录存在,且 step = 0 则可以取消请假
                 $step = $reminder['step'];
                 if ($step == 0) {
                     self::setStep($memberId, $lessonStudentId, 1);
                     // 设置请假状态 为取消请假
                 } else {
                     return 20033;
                     // MSG_ERR_NO_CANCEL_LEAVE
                 }
             }
             //                var_dump(7);
         } else {
             return 20031;
         }
     } catch (Exception $e) {
         error_log($e);
     }
     return $data;
 }
Exemplo n.º 17
0
 public function login($LoginName, $SessionKey)
 {
     try {
         // 解密
         //$password = AES::Decrypt($SessionKey);
         $password = $SessionKey;
         $consumer = R::getRow('SELECT id, smallportraiturl FROM consumer WHERE loginname=? AND password=?', array($LoginName, $password));
         if (!isset($consumer) || empty($consumer)) {
             throw new RecordNotFoundException("Record not found, LoginName:" . $LoginName);
         }
         $token = UserToken::Create($LoginName, $password);
         $RDB = R::dispense('usersession');
         $RDB->sessionid = $token;
         $RDB->lastmodifiedtime = now();
         R::store($RDB);
         $this->_app->response->headers->set("UserSessionId", $token);
         //echo json_encode($consumer, JSON_UNESCAPED_SLASHES);
         echo ResponseJsonHandler::normalizeJsonResponse($consumer);
     } catch (Exception $ex) {
         return ExceptionHandler::Response($ex, $this->_app);
     }
 }
Exemplo n.º 18
0
 public function login($LoginName, $SessionKey)
 {
     try {
         //echo "Login<br>";
         //flush();
         // 解密
         //$password = AES::Decrypt($SessionKey);
         //echo "loginname:" . $LoginName ."<br>";
         //echo "password:"******"<br>";
         //flush();
         $password = $SessionKey;
         $producer = R::getRow('SELECT id, smallportraiturl FROM producer WHERE loginname=? AND password=?', array($LoginName, $password));
         if (!isset($producer) || empty($producer)) {
             throw new RecordNotFoundException("Record not found, LoginName:" . $LoginName);
         }
         $token = UserToken::Create($LoginName, $password);
         $RDB = R::dispense('usersession');
         $RDB->sessionid = $token;
         $RDB->lastmodifiedtime = now();
         R::store($RDB);
         $this->_app->response->headers->set("UserSessionId", $token);
         //echo json_encode($producer, JSON_UNESCAPED_SLASHES);
         echo ResponseJsonHandler::normalizeJsonResponse($producer);
         /*
         $bottles = R::find( 'whisky' );
         if ( !count( $bottles ) ) die( "The cellar is empty!\n" );
         foreach( $bottles as $b )
         {
         	echo "* #{$b->id}: {$b->name}\n";
         }
         */
         /*
         			$w = R::load( 'whisky', $opts['attach-to'] );
         			if (!$w->id) die( "No such bottle.\n" );
         */
     } catch (Exception $ex) {
         //echo $ex;
         //flush();
         return ExceptionHandler::Response($ex, $this->_app);
     }
 }
Exemplo n.º 19
0
 /**
  * 学员对上过的课时进行评价和打分
  * @param $userId                   -- 用户ID
  * @param $token                    -- 用户验证token
  * @param $memberId                 -- 用户当前绑定的学员对对应的ID
  * @param $lessonStudentId          -- 课时唯一编号
  * @param $score                    -- 学员给课时的评分,1-5分
  * @param $stateComment             -- 课时评价,可以为空
  * @return array|int
  */
 public function lessonStudent($userId, $token, $memberId, $lessonStudentId, $score, $stateComment)
 {
     $data = array();
     try {
         // 用户ID验证
         $user = User::model()->IsUserId($userId);
         if (!$user) {
             return 10010;
             // MSG_ERR_FAIL_USER
         }
         // 用户token验证
         $userToken = UserToken::model()->IsToken($userId, $token);
         //            var_dump($userToken);exit;
         if (!$userToken) {
             return 10009;
             // MSG_ERR_FAIL_TOKEN
         }
         $isExistUserMemberId = UserMember::model()->IsExistMemberId($userId, $memberId);
         if (!$isExistUserMemberId) {
             return 40003;
             // MSG_ERR_FAIL_MEMBER
         }
         $isLessonStudentId = self::IsLessonStudentId($memberId, $lessonStudentId);
         if (!$isLessonStudentId) {
             return 60002;
         }
         if ($score < 0 || $score > 5) {
             return 70001;
         }
         $result = Yii::app()->cnhutong->createCommand()->update('ht_lesson_student', array('student_rating' => $score, 'student_comment' => $stateComment), 'student_id = :studentId And id = :id', array(':studentId' => $memberId, ':id' => $lessonStudentId));
         if (empty($result)) {
             $data[] = [];
         }
         //            $data = $result;
     } catch (Exception $e) {
         error_log($e);
     }
     return $data;
 }
Exemplo n.º 20
0
 /**
  * action_id : 2114
  * 用户在app中获取积分历史
  * @token $token string     --登录token
  * @userId $userId int      --用户id
  * @return result          调用返回结果
  * @return msg             调用返回结果说明
  * @return data             调用返回数据
  */
 public function actionGetUserPointHistory()
 {
     if (!isset($_REQUEST['token']) || !isset($_REQUEST['userId']) || !isset($_REQUEST['historyId'])) {
         $this->_return('MSG_ERR_LESS_PARAM');
     }
     $token = Yii::app()->request->getParam('token', NULL);
     $userId = Yii::app()->request->getParam('userId', NULL);
     $historyId = Yii::app()->request->getParam('historyId', NULL);
     if (!ctype_digit($userId)) {
         $this->_return('MSG_ERR_FAIL_USER');
     }
     if (!ctype_digit($historyId)) {
         $this->_return('MSG_ERR_HISTORY_ID');
     }
     // 用户user/token验证
     $userToken = UserToken::model()->IsToken($userId, $token);
     if (!$userToken) {
         $this->_return('MSG_ERR_FAIL_TOKEN');
         // MSG_ERR_FAIL_TOKEN
     }
     $data = UserScoreHistory::model()->userPointHistory($userId, $historyId);
     if ($data === 20030) {
         $this->_return('MSG_ERR_NULL_HISTORY');
     }
     // TODO : add log
     $actionId = 2114;
     $params = '';
     foreach ($_REQUEST as $key => $value) {
         $params .= $key . '=' . $value . '&';
     }
     LogUserAction::model()->userAction($userId, $actionId, $params);
     $this->_return('MSG_SUCCESS', $data);
 }
Exemplo n.º 21
0
 /**
  * Checks the token and authenticates the users if present.
  *
  * @param [type] $token [description]
  *
  * @return [type] [description]
  */
 public function check($token)
 {
     $userToken = UserToken::where('token', '=', $token)->first();
     if (!$userToken) {
         return false;
     }
     $date = new DateTime($userToken->updated_at);
     $timestamp = $date->format('U');
     $delay = time() - $timestamp;
     $timeInMinutes = $delay / 60;
     $expires = Session::get('token_expires');
     if ($expires && $timeInMinutes < $expires) {
         $user = Sentry::findUserById($userToken->user_id);
         if ($user) {
             return true;
         }
     }
     return false;
 }
Exemplo n.º 22
0
 /**
  * 用户解除绑定学员id
  * @param $userId
  * @param $token
  * @param $memberId
  * @return array
  */
 public function removeMember($userId, $token, $memberId)
 {
     $data = array();
     try {
         // 验证userId
         $user = User::model()->IsUserId($userId);
         if (!$user) {
             return 20008;
             // MSG_ERR_FAIL_USER
         }
         // 验证token
         $userToken = UserToken::model()->IsToken($userId, $token);
         if (!$userToken) {
             return 20007;
             // MSG_ERR_FAIL_TOKEN
         }
         // 验证要删除的memberId 是否存在
         $userMemberId = self::IsExistMemberId($userId, $memberId);
         if (!$userMemberId) {
             return 20017;
             // MSG_ERR_FAIL_MEMBER
         }
         // 验证通过后,解除学员id的绑定
         $delete_member = Yii::app()->cnhutong_user->createCommand()->update('user_member', array('status' => 9), 'user_id = :userId And member_id = :memberId', array(':userId' => $userId, ':memberId' => $memberId));
         //members
         $data['members'] = self::getMembers($userId);
         if (!$data['members']) {
             $data['members'] = [];
         }
     } catch (Exception $e) {
         error_log($e);
     }
     return $data;
 }
Exemplo n.º 23
0
 /**
  * 用户忘记密码后使用手机号获得验证码重置密码
  * @param $mobile
  * @param $password
  * @param $checkNum
  * @return array|int
  */
 public function resetPassword($mobile, $password, $checkNum)
 {
     //        $passwordMd5 = md5($password);
     $data = array();
     try {
         $userId = self::getUserByMobile($mobile);
         if (!$userId) {
             return 10006;
             //  MSG_ERR_UN_REGISTER_MOBILE
         }
         $mobile_checkcode = LogMobileCheckcode::model()->checkCode($mobile, $checkNum);
         if (!$mobile_checkcode) {
             return 10005;
             //  MSG_ERR_CODE_OVER_TIME
         }
         //手机号码已注册且验证码正确  update
         Yii::app()->cnhutong_user->createCommand()->update('user', array('password' => $password), 'mobile = :mobile', array(':mobile' => $mobile));
         //修改成功,验证码使用后改变验证码status状态
         Yii::app()->cnhutong_user->createCommand()->update('log_mobile_checkcode', array('status' => 1), 'mobile = :mobile', array(':mobile' => $mobile));
         //userId
         $data['userId'] = $userId;
         //token
         $data['token'] = UserToken::model()->getToken($userId);
         //用户昵称,积分,等级
         $userMessage = self::getUserMessageByUserId($userId);
         $data['mobile'] = $userMessage['mobile'];
         $data['nickname'] = $userMessage['username'];
         $data['points'] = $userMessage['score'];
         $data['level'] = $userMessage['level'];
         //members
         $data['members'] = UserMember::model()->getMembers($userId);
         if (!$data['members']) {
             $data['members'] = [];
         }
     } catch (Exception $e) {
         error_log($e);
     }
     return $data;
 }
Exemplo n.º 24
0
 /**
  * 用户完成测试试卷后提交试卷
  * @param $userId
  * @param $token
  * @param $testId
  * @param $answer
  * @return array
  */
 public function postTestAnswer($userId, $token, $testId, $answer)
 {
     $nowTime = date("Y-m-d H-i-s", strtotime("now"));
     //当前时间;
     $data = array();
     try {
         // 用户ID验证
         $user = User::model()->IsUserId($userId);
         if (!$user) {
             return 20008;
             // MSG_ERR_FAIL_USER
         }
         // 用户token验证
         $userToken = UserToken::model()->IsToken($userId, $token);
         //            var_dump($userToken);exit;
         if (!$userToken) {
             return 20007;
             // MSG_ERR_FAIL_TOKEN
         }
         // 测试编号testId验证
         $userTestId = self::IsTestId($testId);
         if (!$userTestId) {
             return 20012;
             // MSG_ERR_FAIL_TESTID
         }
         // 3-2|2-1|4-1234 拆分为 数组 3-2,2-1,4-1234
         $question_answer = explode("|", $answer);
         //            var_dump($question_answer);
         $len = count($question_answer);
         //            var_dump($len);
         // 一维数组 3-1,2-1,4-1234 拆分为二位数组
         $questions = array();
         for ($i = 0; $i < $len; $i++) {
             $questions[$i] = explode('-', $question_answer[$i]);
         }
         $q = '';
         $a = '';
         // $q 题目ID字符串 以‘|’连接
         // $a 题目答案字符串 以 ‘|’ 连接
         for ($j = 0; $j < count($questions); $j++) {
             $q .= $questions[$j][0] . '|';
             $a .= $questions[$j][1] . '|';
         }
         $q = rtrim($q, "|");
         $a = rtrim($a, "|");
         //            var_dump($questions);
         //            var_dump($q);
         //            var_dump($a);
         $rightAnswer = '';
         $rightAnswer = Yii::app()->cnhutong_user->createCommand()->select('question_id, answers')->from('user_question_history')->where('id = :testId And user_id = :userId', array(':testId' => $testId, ':userId' => $userId))->queryRow();
         //            var_dump($rightAnswer);exit;
         // 答案数组
         $aAnswer = explode('|', $a);
         //            var_dump($aAnswer);
         // 题目ID数组
         $aQuestion = explode('|', $q);
         // 比对生成题目ID的顺序与提交题目ID的顺序是否相同,如果不同,报错
         // 正确答案数组
         $aRightAnswer = explode('|', $rightAnswer['answers']);
         //            var_dump($aRightAnswer);exit;
         // 正确题目ID数组
         $aRightQuestion = explode('|', $rightAnswer['question_id']);
         //            var_dump($aRightQuestion);
         //            var_dump($aQuestion);
         // 比对题目数组交集
         $count = count(array_intersect_assoc($aRightQuestion, $aQuestion));
         //            var_dump(array_intersect_assoc($aRightQuestion, $aQuestion));
         //            var_dump($count);
         // 实际题目数量
         $num = count($aQuestion);
         //            var_dump($num);
         if ($count !== $num) {
             return 20023;
         }
         // 比对答案得出分数
         $score = count(array_intersect_assoc($aRightAnswer, $aAnswer)) * 20;
         //            var_dump($score);
         //            var_dump(array_intersect_assoc($aRightAnswer, $aAnswer));
         // 提交答案比对生成题库答案,得出分数score,更新得分等数据
         $scoreResult = Yii::app()->cnhutong_user->createCommand()->update('user_question_history', array('update_ts' => $nowTime, 'post_answer' => $a, 'score' => $score), 'id = :testId And user_id = :userId', array(':testId' => $testId, ':userId' => $userId));
         // 答题得积分 (用户每天首轮答题,1题2积分)
         $point = count(array_intersect_assoc($aRightAnswer, $aAnswer)) * 2;
         // 答对题数获得的积分,1题2分
         $count = count(self::IssetQuestion($userId));
         if ($count > 1) {
             $pointChange = 0;
         } else {
             $pointChange = $point;
         }
         $change = $pointChange;
         $reason = 6;
         // 积分变化类型 scoreChangeByReason($reason) 获得类型
         $scoreRest = UserScoreHistory::model()->getPoint($userId) + $pointChange;
         $createTs = $nowTime;
         $memo = null;
         // 积分变化记录历史
         $scoreHistory = UserScoreHistory::model()->insertScoreHistory($userId, $change, $reason, $scoreRest, $createTs, $memo);
         $scoreUpdate = UserScoreHistory::model()->updateUserScore($userId, $scoreRest);
         // 获得此课程类型的所有答题分数
         $scores = self::getAllScores($testId);
         // 得分在分数组中位置
         $num = array_search($score, $scores) + 1;
         // 课程答题人数
         $testUsers = self::testUsers($testId);
         $percent = $num / $testUsers * 10000;
         $percent = explode(".", $percent);
         //            $data['scores'] = $scores;
         $data['percent'] = $percent[0];
         $data['testScore'] = $score;
         $data['point'] = $pointChange;
     } catch (Exception $e) {
         error_log($e);
     }
     return $data;
 }
Exemplo n.º 25
0
 /**
  * 用户获取试卷进行测试,获取5题 进行测试
  * @param $userId
  * @param $token
  * @param $subject
  * @return array|int
  */
 public function getTestList($userId, $token, $subject)
 {
     $nowTime = date("Y-m-d H-i-s", strtotime("now"));
     $data = array();
     try {
         // 用户ID验证
         $user = User::model()->IsUserId($userId);
         if (!$user) {
             return 20008;
             // MSG_ERR_FAIL_USER
         }
         // 用户token验证
         $userToken = UserToken::model()->IsToken($userId, $token);
         //            var_dump($userToken);exit;
         if (!$userToken) {
             return 20007;
             // MSG_ERR_FAIL_TOKEN
         }
         // 验证测试类别
         $subjects = self::IsSubject();
         $userSubject = in_array($subject, $subjects);
         if (!$userSubject) {
             return 20010;
             // MSG_ERR_FAIL_SUBJECT
         }
         if ($subject == 1) {
             $result = Yii::app()->cnhutong_user->createCommand()->select('id, type, content, answer_a, answer_b, answer_c, answer_d, answer')->from('com_question')->order('rand()')->limit('5')->queryAll();
         } else {
             $result = Yii::app()->cnhutong_user->createCommand()->select('id, type, content, answer_a, answer_b, answer_c, answer_d, answer')->from('com_question')->where('subject = :subject', array(':subject' => $subject))->order('rand()')->limit('5')->queryAll();
         }
         $question_id = '';
         $answers = '';
         foreach ($result as $value) {
             $question_id .= $value['id'] . '|';
             $answers .= $value['answer'] . '|';
         }
         $question_id = rtrim($question_id, "|");
         $answers = rtrim($answers, "|");
         //            // 测试用
         //            $data['question_id']                  = $question_id;
         //            $data['answers']                  = $answers;
         // 生成题目记录到user_question_history
         $question_history = Yii::app()->cnhutong_user->createCommand()->insert('user_question_history', array('user_id' => $userId, 'question_id' => $question_id, 'answers' => $answers, 'create_ts' => $nowTime, 'score' => 0, 'subject' => $subject));
         // 取得插入题目的测试编号
         $testId = Yii::app()->cnhutong_user->getLastInsertID();
         $data['testId'] = $testId;
         foreach ($result as $row) {
             // 获取数据
             $questions = array();
             $questions['questionId'] = $row['id'];
             $questions['questionType'] = $row['type'];
             $questions['content'] = $row['content'];
             $questions['answerA'] = $row['answer_a'];
             $questions['answerB'] = $row['answer_b'];
             $questions['answerC'] = $row['answer_c'];
             $questions['answerD'] = $row['answer_d'];
             $question_filter = array_filter($questions);
             $data['questions'][] = $question_filter;
         }
         // 增加题库类型相应测试人数
         $testUsers = self::getTestUsers($subject);
         $testUsers++;
         // 测试人数相应加1
         $addTestUsers = Yii::app()->cnhutong_user->createCommand()->update('com_subject', array('testUsers' => $testUsers), 'id = :subject', array(':subject' => $subject));
     } catch (Exception $e) {
         error_log($e);
     }
     return $data;
 }
Exemplo n.º 26
0
 /**
  * 更改订单状态时,向手机端(包括Android和IOS)发送提醒信息
  * 
  * @param [object] $[shop] [店铺对象]
  * @param [object] $[mainOrder] [主订单]
  * @param [int] $[toBeStatus] [要改变状态]
  * 
  * @return Response
  */
 protected function pushOrderInfo($shop, $mainOrder, $toBeStatus)
 {
     //获取信鸽系统配置
     $accessId = Config::get('xinge.accessId');
     $secretKey = Config::get('xinge.secretKey');
     $xingeApp = new XingeApp($accessId, $secretKey);
     //根据mainorder中的userid获取token和设备类型
     $userTokens = UserToken::where('wy_user_id', $mainOrder->wy_user_id)->where('wy_user_type', USER_TYPE_1)->where('wy_status', LOGIN_STATUS_1)->get();
     if (!empty($userTokens->toArray())) {
         foreach ($userTokens as $index => $userToken) {
             if (DEVICE_TYPE_1 == $userToken->wy_device_type) {
                 //根据不同状态获取不同的模板信息
                 switch ($toBeStatus) {
                     case ORDER_STATE_2:
                         //接单
                         $orderMessage = Config::get('xinge.androidRecvMessage');
                         break;
                     case ORDER_STATE_3:
                         //配送中
                         $orderMessage = Config::get('xinge.androidDeliveryMessage');
                         break;
                     case ORDER_STATE_4:
                         //完成
                         $orderMessage = Config::get('xinge.androidFinishMessage');
                         break;
                     case ORDER_STATE_6:
                         //拒单
                         $orderMessage = Config::get('xinge.androidRefuseMessage');
                         break;
                     default:
                         break;
                 }
                 if (isset($orderMessage)) {
                     //单击动作
                     $action = new ClickAction();
                     $action->setActionType(ClickAction::TYPE_ACTIVITY);
                     $action->setActivity($orderMessage['activity']);
                     //显示样式
                     $styleParams = $orderMessage['style'];
                     $style = new Style($styleParams['builderId'], $styleParams['ring'], $styleParams['vibrate'], $styleParams['clearable'], $styleParams['nId'], $styleParams['lights'], $styleParams['iconType'], $styleParams['styleId']);
                     //Android平台的消息
                     $message = new Message();
                     $message->setTitle($orderMessage['title']);
                     $message->setContent($orderMessage['content']);
                     $message->setExpireTime($orderMessage['expireTime']);
                     $message->setType(Message::TYPE_NOTIFICATION);
                     $message->setStyle($style);
                     $message->setAction($action);
                 } else {
                     $context = array("errorCode" => -10054, "userID" => $mainOrder->wy_user_id, "toBeStatus" => $toBeStatus);
                     Log::error(Lang::get('errormessages.-10054'), $context);
                 }
             } elseif (DEVICE_TYPE_2 == $userToken->wy_device_type) {
                 //根据不同状态获取不同的模板信息
                 switch ($toBeStatus) {
                     case ORDER_STATE_2:
                         //接单
                         $orderMessage = Config::get('xinge.iosRecvMessage');
                         break;
                     case ORDER_STATE_3:
                         //配送中
                         $orderMessage = Config::get('xinge.iosDeliveryMessage');
                         break;
                     case ORDER_STATE_4:
                         //完成
                         $orderMessage = Config::get('xinge.iosFinishMessage');
                         break;
                     case ORDER_STATE_6:
                         //拒单
                         $orderMessage = Config::get('xinge.iosRefuseMessage');
                         break;
                     default:
                         break;
                 }
                 if (isset($orderMessage)) {
                     //IOS平台的消息,需要IOS文档
                     $message = new MessageIOS();
                     $message->setTitle($orderMessage['title']);
                 } else {
                     $context = array("errorCode" => -10055, "userID" => $mainOrder->wy_user_id, "toBeStatus" => $toBeStatus);
                     Log::error(Lang::get('errormessages.-10055'), $context);
                 }
             } else {
                 $context = array("errorCode" => -10056, "userID" => $mainOrder->wy_user_id, "deviceType" => $userToken->wy_device_type);
                 Log::error(Lang::get('errormessages.-10056'), $context);
             }
             //自定义参数,key-value形式的
             if (isset($message)) {
                 $custom = array('shop_name' => $shop->wy_shop_name, 'main_order_id' => $mainOrder->wy_main_order_id);
                 $message->setCustom($custom);
                 $result = $xingeApp->PushSingleDevice($userToken->wy_token, $message);
                 Log::info($result);
             } else {
                 $context = array("errorCode" => -10057, "userID" => $mainOrder->wy_user_id, "deviceType" => $userToken->wy_device_type, "toBeStatus" => $toBeStatus);
                 Log::error(Lang::get('errormessages.-10057'), $context);
             }
         }
     } else {
         $context = array("errorCode" => -10053, "userID" => $mainOrder->wy_user_id);
         Log::error(Lang::get('errormessages.-10053'), $context);
     }
 }