Example #1
0
 /**
  * @inheritdoc
  */
 public function rules()
 {
     return ArrayHelper::merge(parent::rules(), [[['created_by', 'updated_by', 'created_at', 'updated_at', 'result_count', 'pages'], 'integer'], [['data_server', 'data_session', 'data_cookie', 'data_request'], 'string'], [['phrase'], 'string', 'max' => 255], [['ip'], 'string', 'max' => 32], [['site_code'], 'string', 'max' => 15], ['data_request', 'default', 'value' => $_REQUEST], ['data_server', 'default', 'value' => $_SERVER], ['data_cookie', 'default', 'value' => $_COOKIE], ['data_session', 'default', 'value' => function (self $model, $attribute) {
         \Yii::$app->session->open();
         return $_SESSION;
     }], ['session_id', 'default', 'value' => function (self $model, $attribute) {
         \Yii::$app->session->open();
         return \Yii::$app->session->id;
     }], [['site_code'], 'default', 'value' => function (self $model, $attribute) {
         if (\Yii::$app->cms->site) {
             return \Yii::$app->cms->site->code;
         }
         return null;
     }], ['ip', 'default', 'value' => \skeeks\cms\helpers\Request::getRealUserIp()]]);
 }
Example #2
0
 /**
  * Session write handler.
  * Do not call this method directly.
  * @param string $id session ID
  * @param string $data session data
  * @return boolean whether session write is successful
  */
 public function writeSession($id, $data)
 {
     // exception must be caught in session write handler
     // http://us.php.net/manual/en/function.session-set-save-handler.php
     try {
         $expire = time() + $this->getTimeout();
         $query = new Query();
         $exists = $query->select(['id'])->from($this->sessionTable)->where(['id' => $id])->createCommand($this->db)->queryScalar();
         if ($exists === false) {
             $this->db->createCommand()->insert($this->sessionTable, ['id' => $id, 'data' => serialize($data), 'expire' => $expire, 'created_at' => \Yii::$app->formatter->asTimestamp(time()), 'updated_at' => \Yii::$app->formatter->asTimestamp(time()), 'ip' => Request::getRealUserIp(), 'data_server' => Json::encode($_SERVER), 'data_cookie' => Json::encode($_COOKIE)])->execute();
         } else {
             $this->db->createCommand()->update($this->sessionTable, ['data' => $data, 'updated_at' => \Yii::$app->formatter->asTimestamp(time()), 'ip' => Request::getRealUserIp(), 'data_server' => Json::encode($_SERVER), 'data_cookie' => Json::encode($_COOKIE), 'expire' => $expire], ['id' => $id])->execute();
         }
     } catch (\Exception $e) {
         $exception = ErrorHandler::convertExceptionToString($e);
         // its too late to use Yii logging here
         error_log($exception);
         echo $exception;
         return false;
     }
     return true;
 }
 public function actionSubmit()
 {
     $rr = new RequestResponse();
     $model = new Comments2Message();
     if ($rr->isRequestOnValidateAjaxForm()) {
         return $rr->ajaxValidateForm($model);
     }
     if ($rr->isRequestAjaxPost()) {
         $model->scenario = Comments2Message::SCENARIO_SITE_INSERT;
         $model->page_url = \Yii::$app->request->referrer;
         if ($model->load(\Yii::$app->request->post())) {
             //Проверка на максимальное количество комментариев к одному посту от одного пользователя.
             $messagesFind = Comments2Message::find();
             if (\Yii::$app->user->isGuest) {
                 $messagesFind->andWhere(['ip' => Request::getRealUserIp()]);
             } else {
                 $messagesFind->andWhere(['created_by' => \Yii::$app->user->identity->id]);
             }
             $messagesFind2 = clone $messagesFind;
             $messagesFind->andWhere(['status' => Comments2Message::STATUS_ALLOWED])->andWhere(['element_id' => $model->element_id]);
             if (\Yii::$app->comments2->maxCountMessagesForUser != 0) {
                 if ($messagesFind->count() >= \Yii::$app->comments2->maxCountMessagesForUser) {
                     $rr->success = false;
                     $rr->message = \skeeks\cms\comments2\Module::t('app', 'You have already added a comment on this post before.');
                     return $rr;
                 }
             }
             //Проверка частоты добавления комментариев
             if (\Yii::$app->comments2->securityEnabledRateLimit == Cms::BOOL_Y) {
                 $messagesFind2 = Comments2Message::find();
                 if (\Yii::$app->user->isGuest) {
                     $messagesFind2->andWhere(['ip' => Request::getRealUserIp()]);
                 } else {
                     $messagesFind2->andWhere(['created_by' => \Yii::$app->user->identity->id]);
                 }
                 $lastTime = \Yii::$app->formatter->asTimestamp(time()) - (int) \Yii::$app->comments2->securityRateLimitTime;
                 $messagesFind2->andWhere(['>=', 'created_at', $lastTime]);
                 //print_r($messagesFind2->createCommand()->rawSql);die;
                 if ($messagesFind2->count() >= \Yii::$app->comments2->securityRateLimitRequests) {
                     $rr->success = false;
                     $rr->message = \skeeks\cms\comments2\Module::t('app', 'You too often add comments.');
                     return $rr;
                 }
             }
             if ($model->save()) {
                 $rr->success = true;
                 if (\Yii::$app->comments2->enabledBeforeApproval == Cms::BOOL_Y) {
                     $rr->message = \Yii::$app->comments2->messageSuccessBeforeApproval;
                 } else {
                     $rr->message = \Yii::$app->comments2->messageSuccess;
                     //Отключена предмодерация, сразу публикуем
                     $model->status = Comments2Message::STATUS_ALLOWED;
                     $model->scenario = ActiveRecord::SCENARIO_DEFAULT;
                     $model->save();
                 }
                 $model->notifyCreate();
             } else {
                 $rr->success = false;
                 $rr->message = \skeeks\cms\comments2\Module::t('app', 'You comments not added') . ": " . implode(",", $model->getFirstErrors());
             }
         } else {
             $rr->success = false;
             $rr->message = \skeeks\cms\comments2\Module::t('app', 'You comments not added') . ": " . implode(",", $model->getFirstErrors());
         }
     }
     return $rr;
 }
 /**
  * @inheritdoc
  */
 public function rules()
 {
     return [[['created_by', 'updated_by', 'created_at', 'updated_at', 'element_id', 'content_id', 'status'], 'integer'], [['element_id'], 'required'], [['comments'], 'string'], [['comments'], 'required'], [['ip'], 'string', 'max' => 32], [['page_url'], 'string'], [['site_code'], 'string', 'max' => 15], [['user_name', 'user_email', 'user_phone', 'user_city'], 'string', 'max' => 255], [['status'], 'in', 'range' => array_keys(self::$statuses)], ['site_code', 'default', 'value' => \Yii::$app->cms->site->code], ['published_at', 'integer'], ['processed_at', 'integer'], ['processed_by', 'integer'], ['user_email', 'email'], ['data_request', 'default', 'value' => $_REQUEST], ['data_server', 'default', 'value' => $_SERVER], ['data_cookie', 'default', 'value' => $_COOKIE], ['data_session', 'default', 'value' => function (self $model, $attribute) {
         \Yii::$app->session->open();
         return $_SESSION;
     }], ['content_id', 'default', 'value' => function (self $model, $attribute) {
         return $model->element->cmsContent->id;
     }], ['ip', 'default', 'value' => Request::getRealUserIp()], ['verifyCode', CaptchaValidator::className(), 'skipOnEmpty' => $this->_skipOnEmptyVerifyCode(), 'on' => self::SCENARIO_SITE_INSERT]];
 }