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; }
/** * 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); } }
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; }
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(); } } }
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(); } }
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(); }
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; }
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; } } } }
/** * 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'); }
/** * 学员在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; }
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); } }
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); } }
/** * 学员对上过的课时进行评价和打分 * @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; }
/** * 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); }
/** * 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; }
/** * 用户解除绑定学员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; }
/** * 用户忘记密码后使用手机号获得验证码重置密码 * @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; }
/** * 用户完成测试试卷后提交试卷 * @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; }
/** * 用户获取试卷进行测试,获取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; }
/** * 更改订单状态时,向手机端(包括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); } }