Ejemplo n.º 1
0
 /**
  * Активация бонус кода
  */
 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));
 }
Ejemplo n.º 2
0
 /**
  * Изменения статуса коду
  *
  * @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();
 }