/** * @inheritdoc * @param int $id * @return int|mixed * @throws NotFoundHttpException */ public function run($id) { /** @var Form|HasProperties $form */ if (null === ($form = Form::findById($id))) { throw new NotFoundHttpException(); } $post = Yii::$app->request->post(); $form->abstractModel->setAttrubutesValues($post); /** @var AbstractModel|SpamCheckerBehavior $model */ $model = $form->getAbstractModel(); if (Yii::$app->request->isAjax && isset($post['ajax'])) { Yii::$app->response->format = Response::FORMAT_JSON; return ActiveForm::validate($model); } /** @var \app\models\Object $object */ $object = Object::getForClass(Form::className()); $propGroups = ObjectPropertyGroup::find()->where(['and', 'object_id = :object', 'object_model_id = :id'], [':object' => $object->id, ':id' => $id])->asArray()->all(); $propIds = ArrayHelper::getColumn($propGroups, 'property_group_id'); // Spam checking $activeSpamChecker = SpamChecker::getActive(); $data = []; $haveSpam = false; if ($activeSpamChecker !== null && !empty($activeSpamChecker->api_key)) { $data[$activeSpamChecker->name]['class'] = $activeSpamChecker->behavior; $data[$activeSpamChecker->name]['value']['key'] = $activeSpamChecker->api_key; $properties = Property::getForGroupId($propIds[0]); foreach ($properties as $prop) { if (!isset($activeSpamChecker->{$prop->interpret_as}) || empty($activeSpamChecker->{$prop->interpret_as})) { continue; } $data[$activeSpamChecker->name]['value'][$activeSpamChecker->{$prop->interpret_as}] = is_array($post[$form->abstractModel->formName()][$prop->key]) ? implode(' ', $post[$form->abstractModel->formName()][$prop->key]) : $post[$form->abstractModel->formName()][$prop->key]; } $model->attachBehavior('spamChecker', ['class' => SpamCheckerBehavior::className(), 'data' => $data]); $haveSpam = $model->isSpam(); } $date = new \DateTime(); /** @var Submission|HasProperties $submission */ $submission = new Submission(['form_id' => $form->id, 'date_received' => $date->format('Y-m-d H:i:s'), 'ip' => Yii::$app->request->userIP, 'user_agent' => Yii::$app->request->userAgent, 'spam' => (int) $haveSpam]); if (false === Yii::$app->user->isGuest) { $submission->processed_by_user_id = Yii::$app->user->identity->getId(); } if (!($form->abstractModel->validate() && $submission->save())) { return "0"; } if (isset($post[$form->abstractModel->formName()])) { $data = ['AddPropetryGroup' => [$submission->formName() => array_keys($form->getPropertyGroups())], $submission->abstractModel->formName() => $post[$form->abstractModel->formName()]]; if (isset($_FILES[$form->abstractModel->formName()])) { $_FILES[$submission->abstractModel->formName()] = $_FILES[$form->abstractModel->formName()]; } $submission->saveProperties($data); } return $submission->id; }
public function init() { FormAsset::register($this->view); $this->model = \app\models\Form::findById($this->formId); if ($this->model === null) { throw new \InvalidArgumentException(); } if ($this->isModal) { $this->modal = Modal::begin(['id' => 'modal-form-' . $this->id, 'header' => $this->model->name]); } $this->setId('frm' . $this->formId); }
public function actionView($id, $show_deleted = 0) { $form = Form::findById($id); $propertyGroups = $form->getPropertyGroups(); $submission = new Submission(); $dynamicModel = new DynamicSearchModel($submission, $propertyGroups); $data = $dynamicModel->search(Yii::$app->request->get()); $data->query->andWhere('form_id = :form_id', [':form_id' => $form->id]); $data->query->andWhere(['is_deleted' => $show_deleted]); $data->query->andFilterWhere(['like', 'ip', $dynamicModel->ip]); $data->query->andFilterWhere(['like', 'user_agent', $dynamicModel->user_agent]); return $this->render('view', ['searchModel' => $dynamicModel, 'dataProvider' => $data, 'form' => $form]); }
public function handleAfterInsert(Event $event) { $review = $this->owner; if (null === ($form = Form::findById(1))) { return; } $submission = new Submission(); $submission->loadDefaultValues(); $submission->form_id = $form->id; $submission->user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/45.0.2454.101 Chrome/45.0.2454.101 Safari/537.36'; $submission->date_received = Date("Y-m-d H:i:s"); $submission->ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '127.0.0.1'; $submission->submission_referrer = 'localhost'; if (true === $submission->save()) { $submission->addPropertyGroup(3, true, true); $review->submission_id = $submission->id; $review->parent_id = 0; $review->root_id = $review->id; $review->save(true, ['submission_id', 'root_id', 'parent_id']); } }
/** * @inheritdoc */ public function run() { if (null === ($form = Form::findById($this->formId)) || null === $this->model || null === $this->model->object) { throw new InvalidParamException(); } if ($this->registerCanonical === true) { $this->getView()->registerLinkTag(['rel' => 'canonical', 'href' => ObjectRule::canonical($this->additionalParams)], 'canonical'); } $formObject = Object::getForClass(Form::className()); $groups = PropertyGroup::getForModel($formObject->id, $form->id); $models = Review::getForObjectModel($this->model->id, $this->model->object->id, $form->id); $review = new Review(['scenario' => 'check']); $review->useCaptcha = $this->useCaptcha; /** @var $module \app\modules\review\ReviewModule */ $module = Yii::$app->getModule('review'); $maxPerPage = $module->maxPerPage; $pageSize = $module->pageSize; if ($pageSize > $maxPerPage) { $pageSize = $maxPerPage; } $this->additionalParams['review-page'] = Yii::$app->request->get('review-page'); $this->additionalParams['review-per-page'] = Yii::$app->request->get('review-per-page'); return $this->render($this->viewFile, ['reviews' => new ArrayDataProvider(['id' => 'review', 'allModels' => $models, 'pagination' => ['pageSize' => $pageSize, 'params' => $this->additionalParams], 'sort' => ['attributes' => ['submission_id'], 'defaultOrder' => ['submission_id' => $this->sort]]]), 'objectModel' => $this->model, 'model' => $form, 'review' => $review, 'groups' => $groups, 'ratingGroupName' => $this->ratingGroupName, 'useCaptcha' => $this->useCaptcha, 'additionalParams' => $this->additionalParams]); }
<div class="col-md-10"> <?php echo Yii::$app->formatter->asDatetime($review->submission->date_received); ?> </div> <div class="col-md-offset-2 col-md-10"></div> </div> <div class="form-group field-page-name"> <p class="control-label col-md-2" ><?php echo Yii::t('app', 'Form'); ?> </p> <div class="col-md-10"> <?php $form = Form::findById($review->submission->form_id); ?> <?php if (null !== $form) { ?> <?php echo Html::encode($form->name); ?> <?php } ?> </div> <div class="col-md-offset-2 col-md-10"></div> </div> <div class="form-group field-page-name">
/** * @param int $id * @return int|mixed * @throws NotFoundHttpException */ public function run($id) { /** @var Form|HasProperties $form */ if (null === ($form = Form::findById($id))) { throw new NotFoundHttpException(); } $post = \Yii::$app->request->post(); $form->abstractModel->setAttrubutesValues($post); /** @var AbstractModel|SpamCheckerBehavior $model */ $model = $form->getAbstractModel(); if (\Yii::$app->request->isAjax && isset($post['ajax'])) { \Yii::$app->response->format = Response::FORMAT_JSON; return ActiveForm::validate($model); } /** @var \app\models\Object $object */ $object = Object::getForClass(Form::className()); $propGroups = ObjectPropertyGroup::find()->where(['and', 'object_id = :object', 'object_model_id = :id'], [':object' => $object->id, ':id' => $id])->asArray()->all(); $propIds = ArrayHelper::getColumn($propGroups, 'property_group_id'); // Spam checking $activeSpamChecker = SpamChecker::getActive(); $data = []; $spamResult = []; if ($activeSpamChecker !== null && !empty($activeSpamChecker->api_key)) { $data[$activeSpamChecker->name]['class'] = $activeSpamChecker->behavior; $data[$activeSpamChecker->name]['value']['key'] = $activeSpamChecker->api_key; $properties = Property::getForGroupId($propIds[0]); foreach ($properties as $prop) { if (!isset($activeSpamChecker->{$prop->interpret_as}) || empty($activeSpamChecker->{$prop->interpret_as})) { continue; } $data[$activeSpamChecker->name]['value'][$activeSpamChecker->{$prop->interpret_as}] = is_array($post[$form->abstractModel->formName()][$prop->key]) ? implode(' ', $post[$form->abstractModel->formName()][$prop->key]) : $post[$form->abstractModel->formName()][$prop->key]; } $model->attachBehavior('spamChecker', ['class' => SpamCheckerBehavior::className(), 'data' => $data]); $spamResult = $model->check(); } $haveSpam = false; if (is_array($spamResult) === true) { foreach ($spamResult as $result) { if (ArrayHelper::getValue($result, 'ok', false) === true) { $haveSpam = $haveSpam || ArrayHelper::getValue($result, 'is_spam', false); } } } $date = new \DateTime(); /** @var Submission|HasProperties $submission */ $submission = new Submission(['form_id' => $form->id, 'date_received' => $date->format('Y-m-d H:i:s'), 'ip' => Yii::$app->request->userIP, 'user_agent' => Yii::$app->request->userAgent, 'spam' => (int) $haveSpam]); if (false === Yii::$app->user->isGuest) { $submission->processed_by_user_id = Yii::$app->user->identity->getId(); } if (!($form->abstractModel->validate() && $submission->save())) { return "0"; } if (isset($post[$form->abstractModel->formName()])) { $data = ['AddPropetryGroup' => [$submission->formName() => array_keys($form->getPropertyGroups())], $submission->abstractModel->formName() => $post[$form->abstractModel->formName()]]; if (isset($_FILES[$form->abstractModel->formName()])) { $_FILES[$submission->abstractModel->formName()] = $_FILES[$form->abstractModel->formName()]; } $submission->saveProperties($data); } if ($haveSpam === false) { if (!empty($form->email_notification_addresses)) { try { $emailView = !empty($form->email_notification_view) ? $form->email_notification_view : '@app/widgets/form/views/email-template.php'; Yii::$app->mail->compose($emailView, ['form' => $form, 'submission' => $submission])->setTo(explode(',', $form->email_notification_addresses))->setFrom(Yii::$app->mail->getMailFrom())->setSubject($form->name . ' #' . $submission->id)->send(); } catch (\Exception $e) { // do nothing } } } return $submission->id; }