/** * @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()]]); }
/** * 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]]; }