예제 #1
0
파일: Users.php 프로젝트: suyuanen/trotri
 /**
  * 通过多个字段名和值,查询多条记录
  * @param array $params
  * @param string $order
  * @param integer $limit
  * @param integer $offset
  * @param string $option
  * @return array
  */
 public function findAll(array $params = array(), $order = '', $limit = 0, $offset = 0, $option = '')
 {
     $limit = min(max((int) $limit, 1), Constant::FIND_MAX_LIMIT);
     $offset = max((int) $offset, 0);
     if (isset($params['ip_registered'])) {
         $ipRegistered = trim($params['ip_registered']);
         unset($params['ip_registered']);
         if ($ipRegistered !== '') {
             $ipRegistered = strpos($ipRegistered, '.') !== false ? Clean::ip2long($ipRegistered) : (int) $ipRegistered;
             if ($ipRegistered !== false) {
                 $params['ip_registered'] = $ipRegistered;
             }
         }
     }
     $rows = $this->getDb()->findAll($params, $order, $limit, $offset, $option);
     return $rows;
 }
예제 #2
0
파일: Account.php 프로젝트: suyuanen/trotri
 /**
  * 验证用户登录
  * @param array $users
  * @param boolean $update
  * @return array
  */
 public function checkLogin(array $users, $update = true)
 {
     $userId = isset($users['user_id']) ? (int) $users['user_id'] : 0;
     $loginName = isset($users['login_name']) ? $users['login_name'] : '';
     $loginType = isset($users['login_type']) ? $users['login_type'] : '';
     $password = isset($users['password']) ? $users['password'] : '';
     $salt = isset($users['salt']) ? $users['salt'] : '';
     $userName = isset($users['user_name']) ? $users['user_name'] : '';
     $userMail = isset($users['user_mail']) ? $users['user_mail'] : '';
     $userPhone = isset($users['user_phone']) ? $users['user_phone'] : '';
     $dtRegistered = isset($users['dt_registered']) ? $users['dt_registered'] : '';
     $dtLastLogin = isset($users['dt_last_login']) ? $users['dt_last_login'] : '';
     $dtLastRepwd = isset($users['dt_last_repwd']) ? $users['dt_last_repwd'] : '';
     $ipRegistered = isset($users['ip_registered']) ? (int) $users['ip_registered'] : 0;
     $ipLastLogin = isset($users['ip_last_login']) ? (int) $users['ip_last_login'] : 0;
     $ipLastRepwd = isset($users['ip_last_repwd']) ? (int) $users['ip_last_repwd'] : 0;
     $loginCount = isset($users['login_count']) ? (int) $users['login_count'] : 0;
     $repwdCount = isset($users['repwd_count']) ? (int) $users['repwd_count'] : 0;
     $groupIds = isset($users['group_ids']) ? (array) $users['group_ids'] : array();
     $validMail = $users['valid_mail'] === DataUsers::VALID_MAIL_Y ? true : false;
     $validPhone = $users['valid_phone'] === DataUsers::VALID_PHONE_Y ? true : false;
     $trash = $users['trash'] === DataUsers::TRASH_N ? false : true;
     $forbidden = $users['forbidden'] === DataUsers::FORBIDDEN_N ? false : true;
     $data = array('user_id' => $userId, 'login_name' => $loginName, 'login_type' => $loginType, 'password' => $password, 'salt' => $salt, 'user_name' => $userName, 'user_mail' => $userMail, 'user_phone' => $userPhone, 'dt_registered' => $dtRegistered, 'dt_last_login' => $dtLastLogin, 'dt_last_repwd' => $dtLastRepwd, 'ip_registered' => $ipRegistered, 'ip_last_login' => $ipLastLogin, 'ip_last_repwd' => $ipLastRepwd, 'login_count' => $loginCount, 'repwd_count' => $repwdCount, 'group_ids' => $groupIds, 'valid_mail' => $validMail, 'valid_phone' => $validPhone, 'trash' => $trash, 'forbidden' => $forbidden);
     if ($userId <= 0 || $loginName === '') {
         $errNo = DataAccount::ERROR_LOGIN_FAILED;
         Log::warning(sprintf('Account user_id and login_name must be not empty, user_id "%d", login_name "%s"', $userId, $loginName), $errNo, __METHOD__);
         return array('err_no' => $errNo, 'data' => array());
     }
     if ($trash) {
         $errNo = DataAccount::ERROR_USER_TRASH;
         Log::warning(sprintf('Account user has been trashed, user_id "%d", login_name "%s"', $userId, $loginName), $errNo, __METHOD__);
         return array('err_no' => $errNo, 'data' => $data);
     }
     if ($forbidden) {
         $errNo = DataAccount::ERROR_USER_FORBIDDEN;
         Log::warning(sprintf('Account user has been forbidden, user_id "%d", login_name "%s"', $userId, $loginName), $errNo, __METHOD__);
         return array('err_no' => $errNo, 'data' => $data);
     }
     if ($update) {
         $dtLastLogin = date('Y-m-d H:i:s');
         $ipLastLogin = Clean::ip2long(Ap::getRequest()->getClientIp());
         $loginCount += 1;
         $params = array('dt_last_login' => $dtLastLogin, 'ip_last_login' => $ipLastLogin, 'login_count' => $loginCount);
         $rowCount = $this->_users->modifyByPk($userId, $params);
         if ($rowCount) {
             $data['dt_last_login'] = $dtLastLogin;
             $data['ip_last_login'] = $ipLastLogin;
             $data['login_count'] = $loginCount;
         } else {
             Log::warning(sprintf('Account update dt_last_login|ip_last_login|login_count Failed, user_id "%d", login_name "%s"', $userId, $loginName), DataAccount::ERROR_MODIFY_LAST_LOGIN, __METHOD__);
         }
     }
     $errNo = DataAccount::SUCCESS_LOGIN_NUM;
     return array('err_no' => $errNo, 'data' => $data);
 }
예제 #3
0
파일: Portal.php 프로젝트: suyuanen/trotri
 /**
  * 通过主键,编辑多条记录
  * @param array|integer $memberIds
  * @param array $params
  * @return integer
  */
 public function batchModifyByPk($memberIds, array $params = array())
 {
     $memberIds = Clean::positiveInteger($memberIds);
     if ($memberIds === false) {
         return false;
     }
     if (is_array($memberIds)) {
         $memberIds = implode(', ', $memberIds);
     }
     $attributes = array();
     if (isset($params['valid_mail'])) {
         $validMail = trim($params['valid_mail']);
         if ($validMail !== '') {
             $attributes['valid_mail'] = $validMail;
         } else {
             return false;
         }
     }
     if (isset($params['valid_phone'])) {
         $validPhone = trim($params['valid_phone']);
         if ($validPhone !== '') {
             $attributes['valid_phone'] = $validPhone;
         } else {
             return false;
         }
     }
     if (isset($params['forbidden'])) {
         $forbidden = trim($params['forbidden']);
         if ($forbidden !== '') {
             $attributes['forbidden'] = $forbidden;
         } else {
             return false;
         }
     }
     if (isset($params['trash'])) {
         $trash = trim($params['trash']);
         if ($trash !== '') {
             $attributes['trash'] = $trash;
         } else {
             return false;
         }
     }
     $rowCount = 0;
     if ($attributes === array()) {
         return $rowCount;
     }
     $tableName = $this->getTblprefix() . TableNames::getPortal();
     $condition = '`member_id` IN (' . $memberIds . ')';
     $sql = $this->getCommandBuilder()->createUpdate($tableName, array_keys($attributes), $condition);
     $rowCount = $this->update($sql, $attributes);
     return $rowCount;
 }
예제 #4
0
 /**
  * 清理正整数数据,如果为负数则返回false
  * @param integer|array $value
  * @return mixed
  */
 public function cleanPositiveInteger($value)
 {
     $result = Clean::positiveInteger($value);
     if ($result === false) {
         $isArr = is_array($value);
         Log::warning(sprintf('AbstractService cleanPositiveInteger ARGS Error, "%s" "%s" must be greater than 0', $isArr ? 'PKs' : 'PK', $isArr ? serialize($value) : $value));
     }
     return $result;
 }
예제 #5
0
파일: Vote.php 프로젝트: suyuanen/trotri
 /**
  * 投票-支持会员或游客、支持单选或多选
  * @param string $pollKey
  * @param string $value
  * @param integer $memberId
  * @param integer $rankId
  * @return array
  */
 public function addVote($pollKey, $value, $memberId, $rankId)
 {
     $row = Service::getInstance('Polls', 'poll')->findByPollKey($pollKey, false);
     if (!$row || !is_array($row) || !isset($row['poll_id']) || !isset($row['is_published'])) {
         $errNo = DataVote::ERROR_FAILED;
         return array('err_no' => $errNo, 'err_msg' => DataVote::getErrMsgByErrNo($errNo));
     }
     if (!$row['is_published']) {
         $errNo = DataVote::ERROR_DT_PUBLISH_DOWN_WRONG;
         return array('err_no' => $errNo, 'err_msg' => DataVote::getErrMsgByErrNo($errNo));
     }
     $nowTime = date('Y-m-d H:i:s');
     if ($nowTime < $row['dt_publish_up']) {
         $errNo = DataVote::ERROR_DT_PUBLISH_UP_WRONG;
         return array('err_no' => $errNo, 'err_msg' => DataVote::getErrMsgByErrNo($errNo, $row['dt_publish_up']));
     }
     if ($row['dt_publish_down'] !== '0000-00-00 00:00:00' && $nowTime > $row['dt_publish_down']) {
         $errNo = DataVote::ERROR_DT_PUBLISH_DOWN_WRONG;
         return array('err_no' => $errNo, 'err_msg' => DataVote::getErrMsgByErrNo($errNo));
     }
     $checked = array();
     foreach (explode(',', $value) as $_v) {
         if (($_v = (int) $_v) > 0 && !in_array($_v, $checked)) {
             $checked[] = $_v;
         }
     }
     $memberId = (int) $memberId;
     $rankId = (int) $rankId;
     $pollId = (int) $row['poll_id'];
     $optIds = array();
     $visitorIp = Clean::ip2long(Ap::getRequest()->getClientIp());
     $allowUnregistered = $row['allow_unregistered'];
     $isMultiple = $row['is_multiple'];
     $maxChoices = (int) $row['max_choices'];
     $joinType = isset($row['join_type']) ? $row['join_type'] : '';
     $interval = isset($row['interval']) ? (int) $row['interval'] : 0;
     $mRankIds = isset($row['m_rank_ids']) ? (array) $row['m_rank_ids'] : array();
     if ($allowUnregistered) {
         $memberId = 0;
         $rankId = 0;
     } else {
         if ($memberId <= 0) {
             $errNo = DataVote::ERROR_ALLOW_UNREGISTERED_WRONG;
             return array('err_no' => $errNo, 'err_msg' => DataVote::getErrMsgByErrNo($errNo));
         }
         if ($mRankIds !== array() && !in_array($rankId, $mRankIds)) {
             $errNo = DataVote::ERROR_M_RANK_ID_WRONG;
             return array('err_no' => $errNo, 'err_msg' => DataVote::getErrMsgByErrNo($errNo));
         }
     }
     if ($checked === array()) {
         $errNo = DataVote::ERROR_POLLOPTIONS_EMPTY;
         return array('err_no' => $errNo, 'err_msg' => DataVote::getErrMsgByErrNo($errNo));
     }
     if ($isMultiple) {
         if ($maxChoices > 0 && count($checked) > $maxChoices) {
             $errNo = DataVote::ERROR_POLLOPTIONS_WRONG;
             return array('err_no' => $errNo, 'err_msg' => DataVote::getErrMsgByErrNo($errNo, $maxChoices));
         }
     }
     $options = Service::getInstance('Polloptions', 'poll')->findAllByPollId($pollId);
     foreach ($options as $row) {
         $optId = isset($row['option_id']) ? (int) $row['option_id'] : 0;
         if (in_array($optId, $checked)) {
             $optIds[] = $optId;
         }
     }
     if ($optIds === array()) {
         $errNo = DataVote::ERROR_POLLOPTIONS_NOT_EXISTS;
         return array('err_no' => $errNo, 'err_msg' => DataVote::getErrMsgByErrNo($errNo));
     }
     if (!$isMultiple) {
         $optIds = array_shift($optIds);
     }
     $row = array();
     if ($memberId > 0) {
         $row = $this->getMemberLogs($pollId, $memberId);
     } else {
         $row = $this->getVisitorLogs($pollId, $visitorIp);
     }
     if ($row && is_array($row) && isset($row['ts_last_modified'])) {
         if (($tsLastModified = (int) $row['ts_last_modified']) > 0) {
             $errNo = DataVote::SUCCESS_NUM;
             switch ($joinType) {
                 case DataPolls::JOIN_TYPE_FOREVER:
                     $errNo = DataVote::ERROR_JOIN_TYPE_FOREVER_WRONG;
                     break;
                 case DataPolls::JOIN_TYPE_YEAR:
                     if (date('Y', $tsLastModified) === date('Y')) {
                         $errNo = DataVote::ERROR_JOIN_TYPE_YEAR_WRONG;
                     }
                     break;
                 case DataPolls::JOIN_TYPE_MONTH:
                     if (date('Ym', $tsLastModified) === date('Ym')) {
                         $errNo = DataVote::ERROR_JOIN_TYPE_MONTH_WRONG;
                     }
                     break;
                 case DataPolls::JOIN_TYPE_DAY:
                     if (date('Ymd', $tsLastModified) === date('Ymd')) {
                         $errNo = DataVote::ERROR_JOIN_TYPE_DAY_WRONG;
                     }
                     break;
                 case DataPolls::JOIN_TYPE_HOUR:
                     if (date('YmdH', $tsLastModified) === date('YmdH')) {
                         $errNo = DataVote::ERROR_JOIN_TYPE_HOUR_WRONG;
                     }
                     break;
                 case DataPolls::JOIN_TYPE_INTERVAL:
                 default:
                     if (time() - $tsLastModified <= $interval) {
                         $errNo = DataVote::ERROR_JOIN_TYPE_INTERVAL_WRONG;
                     }
             }
             if ($errNo !== DataVote::SUCCESS_NUM) {
                 return array('err_no' => $errNo, 'err_msg' => DataVote::getErrMsgByErrNo($errNo, $interval));
             }
         }
     }
     if (!$this->getDb()->addVote($pollId, $optIds, $visitorIp, $memberId)) {
         $errNo = DataVote::ERROR_FAILED;
         return array('err_no' => $errNo, 'err_msg' => DataVote::getErrMsgByErrNo($errNo));
     }
     $errNo = DataVote::SUCCESS_NUM;
     return array('err_no' => $errNo, 'err_msg' => DataVote::getErrMsgByErrNo($errNo));
 }
예제 #6
0
파일: Posts.php 프로젝트: suyuanen/trotri
 /**
  * 通过主键,编辑多条记录
  * @param array|integer $postId
  * @param array $params
  * @return integer
  */
 public function batchModifyByPk($postIds, array $params = array())
 {
     $postIds = Clean::positiveInteger($postIds);
     if ($postIds === false) {
         return false;
     }
     if (is_array($postIds)) {
         $postIds = implode(', ', $postIds);
     }
     $attributes = array();
     if (isset($params['sort'])) {
         $sort = (int) $params['sort'];
         if ($sort > 0) {
             $attributes['sort'] = $sort;
         } else {
             return false;
         }
     }
     if (isset($params['is_head'])) {
         $isHead = trim($params['is_head']);
         if ($isHead !== '') {
             $attributes['is_head'] = $isHead;
         } else {
             return false;
         }
     }
     if (isset($params['is_recommend'])) {
         $isRecommend = trim($params['is_recommend']);
         if ($isRecommend !== '') {
             $attributes['is_recommend'] = $isRecommend;
         } else {
             return false;
         }
     }
     if (isset($params['is_published'])) {
         $isPublished = trim($params['is_published']);
         if ($isPublished !== '') {
             $attributes['is_published'] = $isPublished;
         } else {
             return false;
         }
     }
     if (isset($params['dt_publish_up'])) {
         $dtPublishUp = trim($params['dt_publish_up']);
         if ($dtPublishUp !== '') {
             $attributes['dt_publish_up'] = $dtPublishUp;
         } else {
             return false;
         }
     }
     if (isset($params['dt_publish_down'])) {
         $dtPublishDown = trim($params['dt_publish_down']);
         if ($dtPublishDown !== '') {
             $attributes['dt_publish_down'] = $dtPublishDown;
         } else {
             return false;
         }
     }
     if (isset($params['comment_status'])) {
         $commentStatus = trim($params['comment_status']);
         if ($commentStatus !== '') {
             $attributes['comment_status'] = $commentStatus;
         } else {
             return false;
         }
     }
     if (isset($params['allow_other_modify'])) {
         $allowOtherModify = trim($params['allow_other_modify']);
         if ($allowOtherModify !== '') {
             $attributes['allow_other_modify'] = $allowOtherModify;
         } else {
             return false;
         }
     }
     if (isset($params['trash'])) {
         $trash = trim($params['trash']);
         if ($trash !== '') {
             $attributes['trash'] = $trash;
         } else {
             return false;
         }
     }
     $rowCount = 0;
     if ($attributes === array()) {
         return $rowCount;
     }
     $tableName = $this->getTblprefix() . TableNames::getPosts();
     $condition = '`post_id` IN (' . $postIds . ')';
     $sql = $this->getCommandBuilder()->createUpdate($tableName, array_keys($attributes), $condition);
     $rowCount = $this->update($sql, $attributes);
     return $rowCount;
 }
예제 #7
0
 /**
  * (non-PHPdoc)
  * @see \libsrv\FormProcessor::_cleanPreProcess()
  */
 protected function _cleanPreProcess(array $params)
 {
     if (isset($params['trash'])) {
         unset($params['trash']);
     }
     if ($this->isInsert()) {
         if (isset($params['salt'])) {
             unset($params['salt']);
         }
         if (isset($params['relation_member_id'])) {
             unset($params['relation_member_id']);
         }
         if (isset($params['dt_last_repwd'])) {
             unset($params['dt_last_repwd']);
         }
         if (isset($params['ip_last_repwd'])) {
             unset($params['ip_last_repwd']);
         }
         if (isset($params['repwd_count'])) {
             unset($params['repwd_count']);
         }
         $params['dt_registered'] = $params['dt_last_login'] = date('Y-m-d H:i:s');
         $params['ip_registered'] = $params['ip_last_login'] = Clean::ip2long(Ap::getRequest()->getClientIp());
         $params['login_count'] = 1;
         $params['salt'] = $this->_object->getSalt();
         $params['login_name'] = $loginName = isset($params['login_name']) ? trim($params['login_name']) : '';
         $params['login_type'] = $loginType = $this->_object->getLoginType($loginName);
         if ($this->_object->isMailLogin($loginType)) {
             if (!isset($params['member_mail']) || trim($params['member_mail']) === '') {
                 $params['member_mail'] = $loginName;
             }
         } elseif ($this->_object->isPhoneLogin($loginType)) {
             if (!isset($params['member_phone']) || trim($params['member_phone']) === '') {
                 $params['member_phone'] = $loginName;
             }
         }
         if (!isset($params['member_name']) || trim($params['member_name']) === '') {
             if ($this->_object->isMailLogin($loginType)) {
                 $params['member_name'] = strstr($loginName, '@', true);
             } else {
                 $params['member_name'] = $loginName;
             }
         }
     } else {
         $row = $this->_object->findByPk($this->id);
         if (!$row || !is_array($row) || !isset($row['repwd_count'])) {
             Log::warning(sprintf('FpPortal is unable to find the result by id "%d"', $this->id), ErrorNo::ERROR_DB_SELECT, __METHOD__);
             return false;
         }
         if (isset($params['login_name'])) {
             unset($params['login_name']);
         }
         if (isset($params['login_type'])) {
             unset($params['login_type']);
         }
         if (isset($params['salt'])) {
             unset($params['salt']);
         }
         if (isset($params['dt_registered'])) {
             unset($params['dt_registered']);
         }
         if (isset($params['ip_registered'])) {
             unset($params['ip_registered']);
         }
         $password = isset($params['password']) ? trim($params['password']) : '';
         if ($password !== '') {
             if (!isset($params['repassword'])) {
                 $params['repassword'] = '';
             }
             $params['salt'] = $this->_object->getSalt();
             $params['dt_last_repwd'] = date('Y-m-d H:i:s');
             $params['ip_last_repwd'] = Clean::ip2long(Ap::getRequest()->getClientIp());
             $params['repwd_count'] = (int) $row['repwd_count'] + 1;
         } else {
             if (isset($params['password'])) {
                 unset($params['password']);
             }
             if (isset($params['repassword'])) {
                 unset($params['repassword']);
             }
             if (isset($params['dt_last_repwd'])) {
                 unset($params['dt_last_repwd']);
             }
             if (isset($params['ip_last_repwd'])) {
                 unset($params['ip_last_repwd']);
             }
             if (isset($params['repwd_count'])) {
                 unset($params['repwd_count']);
             }
         }
     }
     $rules = array('login_name' => 'trim', 'login_type' => 'trim', 'password' => 'trim', 'repassword' => 'trim', 'salt' => 'trim', 'member_name' => 'trim', 'member_mail' => 'trim', 'member_phone' => 'trim', 'relation_member_id' => 'intval', 'dt_registered' => 'trim', 'dt_last_login' => 'trim', 'dt_last_repwd' => 'trim', 'ip_registered' => 'intval', 'ip_last_login' => 'intval', 'ip_last_repwd' => 'intval', 'login_count' => 'intval', 'repwd_count' => 'intval', 'valid_mail' => 'trim', 'valid_phone' => 'trim', 'forbidden' => 'trim');
     $ret = $this->clean($rules, $params);
     return $ret;
 }
예제 #8
0
 /**
  * (non-PHPdoc)
  * @see \libsrv\FormProcessor::_cleanPreProcess()
  */
 protected function _cleanPreProcess(array $params)
 {
     if ($this->isInsert()) {
         if (isset($params['last_modifier_id'])) {
             unset($params['last_modifier_id']);
         }
         if (isset($params['last_modifier_name'])) {
             unset($params['last_modifier_name']);
         }
         $params['dt_created'] = $params['dt_last_modified'] = date('Y-m-d H:i:s');
         $params['ip_created'] = $params['ip_last_modified'] = Clean::ip2long(Ap::getRequest()->getClientIp());
         $params['good_count'] = $params['bad_count'] = 0;
         $postId = isset($params['post_id']) ? (int) $params['post_id'] : 0;
         if ($postId <= 0) {
             $this->addError('post_id', Lang::_('SRV_FILTER_POST_COMMENTS_POST_ID_EXISTS'));
             return false;
         }
         $row = Service::getInstance('Posts', 'posts')->findByPk($postId);
         if (!$row || !is_array($row) || !isset($row['comment_status'])) {
             $this->addError('post_id', Lang::_('SRV_FILTER_POST_COMMENTS_POST_ID_EXISTS'));
             return false;
         }
         switch (true) {
             case $row['comment_status'] === DataPosts::COMMENT_STATUS_DRAFT:
                 $params['is_published'] = DataComments::IS_PUBLISHED_N;
                 break;
             case $row['comment_status'] === DataPosts::COMMENT_STATUS_PUBLISH:
                 $params['is_published'] = DataComments::IS_PUBLISHED_Y;
                 break;
             default:
                 $this->addError('post_id', Lang::_('SRV_FILTER_POST_COMMENTS_POST_ID_POWER'));
                 return false;
         }
     } else {
         if (isset($params['creator_id'])) {
             unset($params['creator_id']);
         }
         if (isset($params['creator_name'])) {
             unset($params['creator_name']);
         }
         if (isset($params['dt_created'])) {
             unset($params['dt_created']);
         }
         if (isset($params['ip_created'])) {
             unset($params['ip_created']);
         }
         $params['dt_last_modified'] = date('Y-m-d H:i:s');
         $params['ip_last_modified'] = Clean::ip2long(Ap::getRequest()->getClientIp());
     }
     $rules = array('comment_pid' => 'intval', 'post_id' => 'intval', 'author_name' => 'trim', 'author_mail' => 'trim', 'author_url' => 'trim', 'is_published' => 'trim', 'good_count' => 'intval', 'bad_count' => 'intval', 'creator_id' => 'intval', 'creator_name' => 'trim', 'last_modifier_id' => 'intval', 'last_modifier_name' => 'trim', 'dt_created' => 'trim', 'dt_last_modified' => 'trim', 'ip_created' => 'intval', 'ip_last_modified' => 'intval');
     $ret = $this->clean($rules, $params);
     return $ret;
 }
예제 #9
0
 /**
  * (non-PHPdoc)
  * @see \libsrv\FormProcessor::_cleanPostProcess()
  */
 protected function _cleanPostProcess()
 {
     $this->index_row_btns = Clean::join($this->index_row_btns);
     return true;
 }
예제 #10
0
파일: Account.php 프로젝트: suyuanen/trotri
 /**
  * 第三方账号登录
  * @param string $partner
  * @param string $openid
  * @return array
  */
 public function loginByPartner($partner, $openid)
 {
     if (($partner = trim($partner)) === '') {
         $errNo = DataAccount::ERROR_PARTNER_EMPTY;
         return array('err_no' => $errNo, 'err_msg' => DataAccount::getErrMsgByErrNo($errNo), 'data' => array());
     }
     if (($openid = trim($openid)) === '') {
         $errNo = DataAccount::ERROR_OPENID_EMPTY;
         return array('err_no' => $errNo, 'err_msg' => DataAccount::getErrMsgByErrNo($errNo), 'data' => array());
     }
     if (!in_array($partner, DataAccount::$partners)) {
         $errNo = DataAccount::ERROR_PARTNER_WRONG;
         return array('err_no' => $errNo, 'err_msg' => DataAccount::getErrMsgByErrNo($errNo), 'data' => array());
     }
     $loginName = $partner . '_' . $openid;
     $row = $this->_portal->findByLoginName($loginName);
     if (!$row || !is_array($row) || !isset($row['member_id'])) {
         $salt = $this->_portal->getSalt();
         $password = $this->_portal->encrypt(String::randStr(12), $salt);
         $params = array('login_name' => $loginName, 'login_type' => DataPortal::LOGIN_TYPE_PARTNER, 'password' => $password, 'salt' => $salt, 'member_name' => mt_rand(100000000, 999999999), 'ip_registered' => Clean::ip2long(Ap::getRequest()->getClientIp()));
         if (!$this->_portal->getDb()->create($params)) {
             Log::warning(sprintf('Account db create failed, login_name "%s", login_type "%s"', $loginName, DataPortal::LOGIN_TYPE_PARTNER), 0, __METHOD__);
         }
     }
     $ret = $this->checkName($loginName);
     $ret['err_msg'] = DataAccount::getErrMsgByErrNo($ret['err_no']);
     if ($ret['err_no'] !== DataAccount::SUCCESS_LOGIN_NUM) {
         return $ret;
     }
     $ret = $this->checkLogin($ret['data'], true);
     $ret['err_msg'] = DataAccount::getErrMsgByErrNo($ret['err_no']);
     if ($ret['err_no'] !== DataAccount::SUCCESS_LOGIN_NUM) {
         return $ret;
     }
     $ret = $this->setIdentity($ret['data'], false);
     $ret['err_msg'] = DataAccount::getErrMsgByErrNo($ret['err_no']);
     return $ret;
 }
예제 #11
0
파일: FpPosts.php 프로젝트: suyuanen/trotri
 /**
  * (non-PHPdoc)
  * @see \libsrv\FormProcessor::_cleanPreProcess()
  */
 protected function _cleanPreProcess(array $params)
 {
     if (isset($params['trash'])) {
         unset($params['trash']);
     }
     if (isset($params['category_name'])) {
         unset($params['category_name']);
     }
     if (isset($params['creator_name'])) {
         unset($params['creator_name']);
     }
     if (isset($params['last_modifier_name'])) {
         unset($params['last_modifier_name']);
     }
     if ($this->isInsert()) {
         if (isset($params['last_modifier_id'])) {
             unset($params['last_modifier_id']);
         }
         if (isset($params['last_modifier_name'])) {
             unset($params['last_modifier_name']);
         }
         $params['dt_created'] = $params['dt_last_modified'] = date('Y-m-d H:i:s');
         $params['ip_created'] = $params['ip_last_modified'] = Clean::ip2long(Ap::getRequest()->getClientIp());
         if (!isset($params['sort'])) {
             $params['sort'] = 10000;
         }
     } else {
         $row = $this->_object->findByPk($this->id);
         if (!$row || !is_array($row) || !isset($row['creator_id']) || !isset($row['allow_other_modify'])) {
             Log::warning(sprintf('FpPosts is unable to find the result by id "%d"', $this->id), ErrorNo::ERROR_DB_SELECT, __METHOD__);
             return false;
         }
         $creatorId = isset($row['creator_id']) ? (int) $row['creator_id'] : 0;
         $lastModifierId = isset($params['last_modifier_id']) ? (int) $params['last_modifier_id'] : 0;
         if ($creatorId !== $lastModifierId) {
             if ($row['allow_other_modify'] !== DataPosts::ALLOW_OTHER_MODIFY_Y) {
                 $this->addError('allow_other_modify', Lang::_('SRV_FILTER_POSTS_ALLOW_OTHER_MODIFY_POWER'));
             }
         }
         if (isset($params['creator_id'])) {
             unset($params['creator_id']);
         }
         if (isset($params['creator_name'])) {
             unset($params['creator_name']);
         }
         if (isset($params['dt_created'])) {
             unset($params['dt_created']);
         }
         if (isset($params['ip_created'])) {
             unset($params['ip_created']);
         }
         if (isset($params['module_id'])) {
             unset($params['module_id']);
         }
         $params['dt_last_modified'] = date('Y-m-d H:i:s');
         $params['ip_last_modified'] = Clean::ip2long(Ap::getRequest()->getClientIp());
     }
     $rules = array('title' => 'trim', 'alias' => 'trim', 'keywords' => 'trim', 'sort' => 'intval', 'category_id' => 'intval', 'module_id' => 'intval', 'password' => 'trim', 'picture' => 'trim', 'is_head' => 'trim', 'is_recommend' => 'trim', 'is_jump' => 'trim', 'jump_url' => 'trim', 'is_published' => 'trim', 'dt_publish_up' => 'trim', 'dt_publish_down' => 'trim', 'comment_status' => 'trim', 'allow_other_modify' => 'trim', 'hits' => 'intval', 'praise_count' => 'intval', 'comment_count' => 'intval', 'creator_id' => 'intval', 'last_modifier_id' => 'intval');
     $ret = $this->clean($rules, $params);
     return $ret;
 }
예제 #12
0
 /**
  * 通过主键,删除多条记录
  * @param array|integer $commentIds
  * @return integer
  */
 public function batchRemoveByPk($commentIds, array $params = array())
 {
     $commentIds = Clean::positiveInteger($commentIds);
     if ($commentIds === false) {
         return false;
     }
     if (is_array($commentIds)) {
         $commentIds = implode(', ', $commentIds);
     }
     $tableName = $this->getTblprefix() . TableNames::getComments();
     $condition = '`comment_id` IN (' . $commentIds . ')';
     $sql = $this->getCommandBuilder()->createDelete($tableName, $condition);
     $rowCount = $this->delete($sql);
     return $rowCount;
 }
예제 #13
0
 /**
  * 基于配置清理表单提交的数据
  * <pre>
  * 一.清理规则:
  * $rules = array(
  *	 'user_loginname' => 'trim',
  *	 'user_interest' => array($foo, 'explode')
  * );
  * 参数:
  * $attributes = array(
  *	 'user_loginname' => '  abcdefghi  ',
  *	 'user_interest' => ' 1, 2'
  * );
  * 结果:
  * $result = array(
  *	 'user_loginname' => 'abcdefghi',
  *	 'user_interest' => array(1, 2)
  * );
  *
  * 二.清理规则:
  * $rules = array(
  *	 'user_password' => 'md5',
  *	 'user_interest' => array($foo, 'implode')
  * );
  * 参数:
  * $attributes = array(
  *	 'user_password' => '  1234  ',
  *	 'user_interest' => array(1, 2)
  * );
  * 结果:
  * $result = array(
  *	 'user_loginname' => '81dc9bdb52d04dc20036dbd8313ed055',
  *	 'user_interest' => '1,2'
  * );
  * </pre>
  * @param array $rules
  * @param array $attributes
  * @return array
  */
 public function clean(array $rules, array $attributes)
 {
     return Clean::rules($rules, $attributes);
 }
예제 #14
0
 /**
  * 过滤数组(只保留指定的字段)、清理数据并且清除空数据(空字符,负数)
  * @param array $attributes
  * @param array $rules
  * @return void
  */
 protected function filterCleanEmpty(array &$attributes = array(), array $rules = array())
 {
     $this->filterAttributes($attributes, array_keys($rules));
     $attributes = Clean::rules($rules, $attributes);
     foreach ($rules as $columnName => $funcName) {
         if (!isset($attributes[$columnName])) {
             continue;
         }
         if ($funcName === 'trim' && $attributes[$columnName] === '') {
             unset($attributes[$columnName]);
             continue;
         }
         if ($funcName === 'intval' && $attributes[$columnName] < 0) {
             unset($attributes[$columnName]);
             continue;
         }
     }
 }