/** * Активация бонус кода */ public function actionBonusCode() { $model = new BonusCodes('activated_code'); if (isset($_POST['BonusCodes'])) { $model->setAttributes($_POST['BonusCodes']); if ($model->validate()) { $criteria = new CDbCriteria(array('condition' => 'code = :code', 'params' => array(':code' => $model->code), 'scopes' => array('opened'), 'with' => array('bonusInfo' => array('scopes' => array('opened'))))); $bonus = BonusCodes::model()->find($criteria); if ($bonus === NULL) { $model->addError('code', Yii::t('main', 'Неверный код.')); } else { $bonusId = $bonus->getPrimaryKey(); $userId = user()->getId(); $bonusActivatedCount = db()->createCommand("SELECT COUNT(0) FROM {{bonus_codes_activated_logs}} WHERE code_id = :code_id")->bindParam('code_id', $bonusId, PDO::PARAM_INT)->queryScalar(); if ($bonus->limit > 0 && $bonusActivatedCount >= $bonus->limit) { $model->addError('code', Yii::t('main', 'Код не действителен.')); } elseif ($bonus->bonusInfo->date_end != '' && strtotime($bonus->bonusInfo->date_end) < time()) { $model->addError('code', Yii::t('main', 'Время действия кода закончено.')); } else { // Проверка чтобы юзер заюзал код только один раз $user = db()->createCommand("SELECT created_at FROM {{bonus_codes_activated_logs}} WHERE code_id = :code_id AND user_id = :user_id LIMIT 1")->bindParam('code_id', $bonusId, PDO::PARAM_INT)->bindParam('user_id', $userId, PDO::PARAM_INT)->queryrow(); if ($user) { user()->setFlash(FlashConst::MESSAGE_ERROR, Yii::t('main', 'Вы уже активировали этот код (дата активации: :date_activation).', array(':date_activation' => $user['created_at']))); } else { $tr = db()->beginTransaction(); try { $userBonuses = new UserBonuses(); $userBonuses->bonus_id = $bonus->bonus_id; $userBonuses->user_id = user()->getId(); $userBonuses->save(FALSE); // Логирую активацию $log = new BonusCodesActivatedLogs(); $log->code_id = $bonus->getPrimaryKey(); $log->user_id = user()->getId(); $log->save(FALSE); $tr->commit(); // Логирую действие юзера if (app()->params['user_actions_log']) { $log = new UserActionsLog(); $log->user_id = user()->getId(); $log->action_id = UserActionsLog::ACTION_ACTIVATED_BONUS_CODE; $log->params = json_encode($bonus->getAttributes()); $log->save(FALSE); } user()->setFlash(FlashConst::MESSAGE_SUCCESS, Yii::t('main', 'Бонус код активирован.')); } catch (Exception $e) { $tr->rollback(); user()->setFlash(FlashConst::MESSAGE_ERROR, Yii::t('main', 'Произошла ошибка! Попробуйте повторить позже.')); Yii::log("Не удалось активировать бонус код\nBonus id: " . $bonusId . "\nError: " . $e->getMessage() . "\n", CLogger::LEVEL_ERROR, 'activation_bonus_code'); } } $this->refresh(); } } } } $this->render('//cabinet/bonuses/bonus-code', array('model' => $model)); }
/** * Изменения статуса коду * * @param int $code_id */ public function actionCodeAllow($code_id) { $model = BonusCodes::model()->findByPk($code_id); if ($model === NULL) { user()->setFlash(FlashConst::MESSAGE_ERROR, Yii::t('backend', 'Код не найден.')); $this->redirectBack(); } $status = $model->status == ActiveRecord::STATUS_ON ? ActiveRecord::STATUS_OFF : ActiveRecord::STATUS_ON; $model->setAttribute('status', $status); if ($model->save(FALSE, array('status'))) { user()->setFlash(FlashConst::MESSAGE_SUCCESS, Yii::t('backend', 'Статус изменен на <b>:status</b>.', array(':status' => $model->getStatus()))); } $this->redirectBack(); }