/** * The first step of creating page * Use the createBasic scenario **/ public function actionCreate() { $params = $this->getParams(); $accesstoken = $this->getAccessToken(); $token = Token::getToken($accesstoken); $page = new Page(['scenario' => 'createBasic']); $page->attributes = $params; $page->_id = new \MongoId(); $page->accountId = $token->accountId; $userId = $token->userId; $user = User::findByPk($userId); $page->creator = ['id' => $userId, 'name' => $user->name]; $page->url = Yii::$app->request->hostinfo . '/msite/page/' . $page->_id; $shortUrl = Yii::$app->urlService->shortenUrl($page->url); $page->shortUrl = $shortUrl['Short']; if ($page->validate()) { // all inputs are valid if ($page->save()) { return $page; } else { throw new ServerErrorHttpException(Yii::t('common', 'save_fail')); } } else { // valid fail, return errors $errors = array_keys($page->errors); throw new InvalidParameterException([$errors[0] => Yii::t("microSite", $errors[0] . '_field_not_empty')]); } }
/** * Returns the list of all rules of ChatConversation. * This method must be overridden by child classes to define available attributes. * * @return array list of rules. */ public function rules() { $currentUser = User::findByPk(new \MongoId(CURRENT_USER_ID)); //get default channel if (empty($this->accountId)) { throw new ServerErrorHttpException('Account id of article cannot be blank'); } $defaultChannel = ArticleChannel::getDefault($this->accountId); if (empty($defaultChannel)) { throw new ServerErrorHttpException('Can not found default channel'); } return array_merge(parent::rules(), [[['name', 'content', 'url'], 'required'], ['createdBy', 'default', 'value' => $currentUser->name], ['fields', 'default', 'value' => []], ['fields', 'validateFields'], ['channel', 'default', 'value' => $defaultChannel->_id], ['channel', 'toMongoId']]); }
/** * exchange the promotioncode */ public function actionExchange() { $params = $this->getParams(); if (empty($params['code']) || empty($params['memberId'])) { throw new BadRequestHttpException(Yii::t('common', 'parameters_missing')); } //get email for user $accesstoken = $this->getAccessToken(); $tokenInfo = Token::findOne(['accessToken' => $accesstoken]); $userInfo = User::findByPk($tokenInfo['userId']); $params['operaterEmail'] = empty($userInfo['email']) ? '' : $userInfo['email']; $params['userInfo'] = empty($userInfo) ? null : ['id' => $userInfo->_id, 'name' => $userInfo->name]; $memberId = $params['memberId']; $params['memberId'] = new MongoId($memberId); if (!empty($params['exchangeTime'])) { $params['exchangeTime'] = TimeUtil::ms2sTime($params['exchangeTime']); } //exchange the promotion code $accountId = $this->getAccountId(); if (is_array($params['code'])) { //exchaneg code offline $codes = $params['code']; $successCode = []; foreach ($codes as $code) { $params['code'] = strtoupper($code); $result = PromotionCode::exchangeCampaignCode($params, $accountId, self::EXCHANEG_TYPE_OFFLINE); if ('success' == $result['result']) { $successCode[] = $code; } } list($codeNumber, $score) = CampaignLog::getCodeRecord($successCode); if (!empty($params['useWebhook'])) { $eventData = ['type' => Webhook::EVENT_PROMOTION_CODE_REDEEMED, 'member_id' => $memberId, 'codes' => $params['code'], 'redeemed_codes' => $successCode, 'score' => $score, 'origin' => Member::PORTAL, 'account_id' => (string) $accountId, 'created_at' => TimeUtil::msTime2String($params['exchangeTime'], \DateTime::ATOM)]; Yii::$app->webhook->triggerEvent($eventData); } //fix data $this->fixData($accountId, $params['memberId'], $successCode); return ['result' => 'success', 'codeNumber' => $codeNumber, 'totalScore' => $score, 'codes' => $successCode]; } else { $params['code'] = strtoupper($params['code']); $result = PromotionCode::exchangeCampaignCode($params, $accountId, self::EXCHANEG_TYPE_MOBILE); if ('error' == $result['result']) { throw new InvalidParameterException($result['message']); } else { return $result; } } }
/** * Give points to member * * <b>Request Type: </b>POST<br/> * <b>Request Endpoint: </b>http://{server-domain}/api/member/score/give<br/> * <b>Content-type: </b>application/json<br/> * <b>Summary: </b>This api is for give scores to specific members or conditions to filter member.<br/> * * <b>Request Parameters: </b> * scores: int, the value of the scores to give, required<br/> * filterType: string, the type of the filter, "name" or "number" or "tag", required<br/> * names: array<string>, the array of the names for filter, required only if the filterType is "name"<br/> * numbers: array<string>, the array of the numbers to filter members, required only if the filterType is "number"<br/> * tags: array<string>, the array of the tags fo filter members, required only if the filterType is "tag"<br/> * description: string, the description. optional. <br/> * * <b>Request Example</b><br/> * <pre> * {"score":100, "filterType":"name", "names":["Zhang San", "Li Si"]} * </pre> * */ public function actionGive() { $filterType = $this->getParams('filterType'); $score = $this->getParams('score'); $description = $this->getParams('description'); if (empty($filterType) || empty($score)) { throw new BadRequestHttpException('Missing required parameters'); } $userId = $this->getUserId(); $user = User::findByPk($userId); $user = ['id' => $userId, 'name' => $user->name]; $filterKey = $filterType . 's'; $filterValue = $this->getParams($filterKey); if (empty($filterValue)) { throw new BadRequestHttpException("Missing required parameters"); } $function = "giveScoreBy" . $filterKey; $memberList = Member::$function($score, $filterValue); if (empty($memberList)) { throw new InvalidParameterException(['member-' . $filterType => \Yii::t('member', 'no_member_find')]); } if ($memberList) { foreach ($memberList as $member) { $scoreHistory = new ScoreHistory(); $scoreHistory->assigner = ScoreHistory::ASSIGNER_ADMIN; $scoreHistory->increment = $score; $scoreHistory->memberId = $member; $scoreHistory->brief = $score >= 0 ? ScoreHistory::ASSIGNER_ADMIN_ISSUE_SCORE : ScoreHistory::ASSIGNER_ADMIN_DEDUCT_SCORE; $scoreHistory->description = $description; $scoreHistory->channel = ['origin' => ScoreHistory::PORTAL]; $scoreHistory->user = $user; $scoreHistory->accountId = $this->getAccountId(); if (!$scoreHistory->save()) { LogUtil::error(['message' => 'save scoreHistory failed', 'data' => $scoreHistory->toArray()], 'member'); } } return ['status' => 'ok']; } }
public function actionUpdate($id) { $params = $this->getParams(); $user = User::findByPk($id); $token = $this->getAccessToken(); $name = $this->getParams('name'); if (empty($name)) { throw new InvalidParameterException(['name' => Yii::t('common', 'required_filed')]); } $user->load($params, ''); $lauguage = $user->language; if ($user->save() && Token::channgeLanguage($token, $lauguage)) { $user->_id .= ''; return $user; } else { throw new ServerErrorHttpException('Fail to update user'); } }
public function actionResetpassword() { $code = $this->getParams('code'); $newPassword = $this->getParams('password'); $result = Validation::validateCode($code); if ($result == Validation::LINK_INVALID) { throw new BadRequestHttpException(Yii::t('common', 'link_invalid')); } else { if ($result == Validation::LINK_EXPIRED) { throw new BadRequestHttpException(Yii::t('common', 'link_expired')); } } $userId = $result; $user = User::findByPk($userId); if (empty($user)) { throw new BadRequestHttpException(Yii::t('commmon', 'incorrect_userid')); } // update the user password $user->password = User::encryptPassword($newPassword, $user->salt); if (!$user->save()) { throw new ServerErrorHttpException("Save user failed!"); } Validation::deleteAll(['userId' => $userId]); return ['status' => 'ok']; }
public function actionOfflineExchange() { $params = $this->getParams(); if (empty($params['goods']) || empty($params['memberId']) || !isset($params['usedScore']) || empty($params['address']) || empty($params['receiveMode'])) { throw new BadRequestHttpException(Yii::t('common', 'parameters_missing')); } $userId = $this->getUserId(); $user = User::findByPk($userId); $user = ['id' => $user->_id, 'name' => $user->name]; if ($params['usedScore'] < 0) { throw new BadRequestHttpException(Yii::t('common', 'data_error')); } $member = Member::findByPk(new \MongoId($params['memberId'])); if (empty($member) || $member->isDisabled) { throw new InvalidParameterException(Yii::t('member', 'invalid_member_id')); } $goodsExchangeMap = []; $goodsIds = []; foreach ($params['goods'] as $item) { if ($item['count'] <= 0) { throw new BadRequestHttpException(Yii::t('common', 'data_error')); } $goodsExchangeMap[$item['id']] = $item['count']; $goodsIds[] = new \MongoId($item['id']); } $allExchangeGoods = Goods::getByIds($goodsIds); if (count($allExchangeGoods) != count($goodsIds)) { throw new InvalidParameterException(Yii::t('product', 'product_deleted')); } $usedScore = $params['usedScore']; $expectedScore = 0; $exchanges = []; foreach ($allExchangeGoods as $goods) { $exchangeCount = $goodsExchangeMap[(string) $goods->_id]; if ($goods->total === 0) { throw new InvalidParameterException([(string) $goods->_id => Yii::t('product', 'goods_sold_out')]); } else { if (!empty($goods->total) && $exchangeCount > $goods->total) { throw new InvalidParameterException([(string) $goods->_id => Yii::t('product', 'goods_not_enough')]); } } $expectedScore += $goods->score * $exchangeCount; $exchanges[] = ['goods' => $goods, 'count' => $exchangeCount]; } $params['expectedScore'] = $expectedScore; if ($member->score < $usedScore) { throw new InvalidParameterException(Yii::t('product', 'member_score_not_enough')); } $successExchange = []; foreach ($exchanges as $exchangeItem) { $goods = $exchangeItem['goods']; $count = $exchangeItem['count']; $goodsCondition = ['_id' => $goods->_id]; $goodsModifier = ['$inc' => ['usedCount' => $count]]; $goodsRollbackModifier = ['$inc' => ['usedCount' => 0 - $count]]; if ($goods->total !== '') { $goodsCondition['total'] = ['$gte' => $count]; $goodsModifier['$inc']['total'] = 0 - $count; $goodsRollbackModifier['$inc']['total'] = $count; } $goodsUpdatedCount = Goods::updateAll($goodsModifier, $goodsCondition); if ($goodsUpdatedCount !== 1) { $this->_rollBackUsedCount($successExchange); throw new InvalidParameterException([(string) $goods->_id => Yii::t('product', 'goods_not_enough')]); } else { $goodsId = (string) $goods->_id; $successExchange[$goodsId] = $goodsRollbackModifier; } } $memberUpdatedCount = Member::updateAll(['$inc' => ['score' => 0 - $usedScore]], ['_id' => $member->_id, 'score' => ['$gte' => $usedScore]]); if ($memberUpdatedCount === 1) { $this->_saveLog($member, $exchanges, $params, $user); if (!empty($params['useWebhook'])) { $eventData = ['type' => Webhook::EVENT_PRODUCT_REDEEMED, 'member_id' => $params['memberId'], 'products' => $params['goods'], 'address' => $params['address'], 'postcode' => $params['postcode'], 'used_score' => $params['usedScore'], 'origin' => Member::PORTAL, 'account_id' => (string) $member->accountId, 'created_at' => TimeUtil::msTime2String(time() * TimeUtil::MILLI_OF_SECONDS, \DateTime::ATOM)]; Yii::$app->webhook->triggerEvent($eventData); } } else { $this->_rollBackUsedCount($successExchange); throw new InvalidParameterException(Yii::t('product', 'member_score_not_enough')); } }