/** * 通过多个字段名和值,查询多条记录 * @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; }
/** * 验证用户登录 * @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); }
/** * 通过主键,编辑多条记录 * @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; }
/** * 清理正整数数据,如果为负数则返回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; }
/** * 投票-支持会员或游客、支持单选或多选 * @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)); }
/** * 通过主键,编辑多条记录 * @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; }
/** * (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; }
/** * (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; }
/** * (non-PHPdoc) * @see \libsrv\FormProcessor::_cleanPostProcess() */ protected function _cleanPostProcess() { $this->index_row_btns = Clean::join($this->index_row_btns); return true; }
/** * 第三方账号登录 * @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; }
/** * (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; }
/** * 通过主键,删除多条记录 * @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; }
/** * 基于配置清理表单提交的数据 * <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); }
/** * 过滤数组(只保留指定的字段)、清理数据并且清除空数据(空字符,负数) * @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; } } }