/** * Indexes a file. * * @param string $uriPath The URI path fo the file to index. * * @return AssetFileModel|bool|null */ protected function indexFile($uriPath) { $extension = IOHelper::getExtension($uriPath); if (IOHelper::isExtensionAllowed($extension)) { $parts = explode('/', $uriPath); $fileName = array_pop($parts); $searchFullPath = join('/', $parts) . (empty($parts) ? '' : '/'); if (empty($searchFullPath)) { $parentId = ':empty:'; } else { $parentId = false; } $parentFolder = craft()->assets->findFolder(array('sourceId' => $this->model->id, 'path' => $searchFullPath, 'parentId' => $parentId)); if (empty($parentFolder)) { return false; } $folderId = $parentFolder->id; $fileModel = craft()->assets->findFile(array('folderId' => $folderId, 'filename' => $fileName)); if (is_null($fileModel)) { $fileModel = new AssetFileModel(); $fileModel->sourceId = $this->model->id; $fileModel->folderId = $folderId; $fileModel->filename = $fileName; $fileModel->kind = IOHelper::getFileKind($extension); craft()->assets->storeFile($fileModel); } return $fileModel; } return false; }
/** * Submit Entry * */ public function actionSubmitEntry() { $this->requirePostRequest(); // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // VARIABLES // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ $files = ''; $ajax = false; $passedValidation = true; $validationErrors = []; $submissionErrorMessage = []; $customSuccessMessage = ''; $customErrorMessage = ''; // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // FORM // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ $form = craft()->formBuilder2_entry->getFormByHandle(craft()->request->getPost('formHandle')); // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // FORM SUBMISSION // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ $formFields = $form->fieldLayout->getFieldLayout()->getFields(); // Get all form fields $submission = craft()->request->getPost(); // Get all values from the submitted form $submissionData = $this->filterSubmissionKeys($submission); // Fillter out unused submission data // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // FORM ATTRIBUTES // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ $attributes = $form->getAttributes(); $formSettings = $attributes['formSettings']; $spamProtectionSettings = $attributes['spamProtectionSettings']; $messageSettings = $attributes['messageSettings']; $notificationSettings = $attributes['notificationSettings']; // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // FORM SETTINGS ||| (1) Custom Redirect, (2) File Uploads, (3) Ajax Submissions // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // (1) Custom Redirect if ($formSettings['formRedirect']['customRedirect'] != '') { $redirectUrl = $formSettings['formRedirect']['customRedirectUrl']; } // (2) File Uploads if ($formSettings['hasFileUploads'] == '1') { foreach ($formFields as $key => $value) { $field = $value->getField(); switch ($field->type) { case 'Assets': foreach ($_FILES as $key => $value) { if (!$value['tmp_name'] == '') { $fileModel = new AssetFileModel(); $folderId = $field->settings['singleUploadLocationSource'][0]; $sourceId = $field->settings['singleUploadLocationSource'][0]; $fileModel->originalName = $value['tmp_name']; $fileModel->sourceId = $sourceId; $fileModel->folderId = $folderId; $fileModel->filename = IOHelper::getFileName($value['name']); $fileModel->kind = IOHelper::getFileKind(IOHelper::getExtension($value['name'])); $fileModel->size = filesize($value['tmp_name']); if ($value['tmp_name']) { $fileModel->dateModified = IOHelper::getLastTimeModified($value['tmp_name']); } if ($fileModel->kind == 'image') { list($width, $height) = ImageHelper::getImageSize($value['tmp_name']); $fileModel->width = $width; $fileModel->height = $height; } $files[$key] = $fileModel; } } break; } } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // FORM CUSTOM MESSAGES ||| (1) Success Message (2) Error Message // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // (1) Success Message $customSuccessMessage = $messageSettings['successMessage'] ? $messageSettings['successMessage'] : Craft::t('Submission was successful.'); // (2) Error Message $customErrorMessage = $messageSettings['errorMessage'] ? $messageSettings['errorMessage'] : Craft::t('There was a problem with your submission.'); // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // (3) Ajax Submissions if ($formSettings['ajaxSubmit'] == '1') { $this->requireAjaxRequest(); $ajax = true; } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // FORM SPAM PROTECTION ||| (1) Timed Method (2) Honeypot Method // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // (1) Timed Method if ($spamProtectionSettings['spamTimeMethod'] == '1') { $formSubmissionTime = (int) craft()->request->getPost('spamTimeMethod'); $submissionDuration = time() - $formSubmissionTime; $allowedTime = (int) $spamProtectionSettings['spamTimeMethodTime']; if ($submissionDuration < $allowedTime) { if ($ajax) { $this->returnJson(['validationErrors' => [Craft::t('You submitted too fast, you are robot!')], 'customErrorMessage' => $customErrorMessage]); } else { $spamTimedMethod = false; $submissionErrorMessage[] = Craft::t('You submitted too fast, you are robot!'); } } else { $spamTimedMethod = true; } } else { $spamTimedMethod = true; } // (2) Honeypot Method if ($spamProtectionSettings['spamHoneypotMethod'] == '1') { $honeypotField = craft()->request->getPost('email-address-new'); if ($honeypotField != '') { if ($ajax) { $this->returnJson(['validationErrors' => [Craft::t('You tried the honey, you are robot bear!')], 'customErrorMessage' => $customErrorMessage]); } else { $spamHoneypotMethod = false; $submissionErrorMessage[] = Craft::t('You tried the honey, you are robot bear!'); } } else { $spamHoneypotMethod = true; } } else { $spamHoneypotMethod = true; } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // NEW FORM MODEL // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ $submissionEntry = new FormBuilder2_EntryModel(); $submissionEntry->formId = $form->id; $submissionEntry->title = $form->name; $submissionEntry->files = $files; $submissionEntry->submission = $submissionData; // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // FAILED SUBMISSION REDIRECT W/MESSAGES (Spam Protection) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if ($submissionErrorMessage) { craft()->userSession->setFlash('error', $customErrorMessage); craft()->urlManager->setRouteVariables(array('errors' => $submissionErrorMessage)); } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // VALIDATE SUBMISSION DATA // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ $validation = craft()->formBuilder2_entry->validateEntry($form, $submissionData); // if ($validation != '') { if (!empty($validation)) { if ($ajax) { $this->returnJson(['passedValidation' => false, 'validationErrors' => $validation, 'customErrorMessage' => $customErrorMessage]); } else { craft()->userSession->setFlash('error', $customErrorMessage); $passedValidation = false; return craft()->urlManager->setRouteVariables(['value' => $submissionData, 'errors' => $validation]); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // PROCESS SUBMISSION ENTRY // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if (!$submissionErrorMessage && $passedValidation && $spamTimedMethod && $spamHoneypotMethod) { $submissionResponseId = craft()->formBuilder2_entry->processSubmissionEntry($submissionEntry); if ($submissionResponseId) { // Notify Admin of Submission if ($notificationSettings['notifySubmission'] == '1') { $this->notifyAdminOfSubmission($submissionResponseId, $form); } // Successful Submission Messages if ($ajax) { $this->returnJson(['success' => true, 'customSuccessMessage' => $customSuccessMessage]); } else { craft()->userSession->setFlash('success', $customSuccessMessage); if ($formSettings['formRedirect']['customRedirect'] != '') { $this->redirect($redirectUrl); } else { $this->redirectToPostedUrl(); } } } else { // Submission Error Messages if ($ajax) { $this->returnJson(['error' => true, 'customErrorMessage' => $customErrorMessage]); } else { craft()->userSession->setFlash('error', $customErrorMessage); return craft()->urlManager->setRouteVariables(['value' => $submissionData, 'errors' => $validation]); } } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }
/** * Validates that temp file is actually an image file * * @param string $remoteImagePath url of remote image * @param string $tempLocalImage file pointer to temp image * * @return boolean */ private function _validateImage($remoteImagePath, $tempLocalImage) { // Check to make sure the asset is an image if (IOHelper::getFileKind(IOHelper::getExtension($tempLocalImage)) === 'image' && substr(IOHelper::getMimeType($tempLocalImage), 0, 5) === 'image') { return true; } return false; }
/** * Merge a conflicting uploaded file. * * @param string $conflictResolution User response to conflict. * @param int $theNewFileId The id of the new file that is conflicting. * @param string $fileName The filename that is in the conflict. * * @return AssetOperationResponseModel */ private function _mergeUploadedFiles($conflictResolution, $theNewFileId, $fileName) { $theNewFile = $this->getFileById($theNewFileId); $folder = $theNewFile->getFolder(); $source = craft()->assetSources->getSourceTypeById($folder->sourceId); $fileId = null; switch ($conflictResolution) { case AssetConflictResolution::Replace: // Replace the actual file $targetFile = $this->findFile(array('folderId' => $folder->id, 'filename' => $fileName)); // If the file doesn't exist in the index, but just in the source, // quick-index it, so we have a File Model to work with. if (!$targetFile) { $targetFile = new AssetFileModel(); $targetFile->sourceId = $folder->sourceId; $targetFile->folderId = $folder->id; $targetFile->filename = $fileName; $targetFile->kind = IOHelper::getFileKind(IOHelper::getExtension($fileName)); $this->storeFile($targetFile); } $source->replaceFile($targetFile, $theNewFile); $fileId = $targetFile->id; // Falling through to delete the file // Falling through to delete the file case AssetConflictResolution::Cancel: $this->deleteFiles($theNewFileId); break; default: $fileId = $theNewFileId; break; } $response = new AssetOperationResponseModel(); $response->setSuccess(); if ($fileId) { $response->setDataItem('fileId', $fileId); } return $response; }
/** * Submit Entry * */ public function actionSubmitEntry() { $form = craft()->formBuilder2_entry->getFormByHandle(craft()->request->getPost('formHandle')); // Set Up Form Submission $formFields = $form->fieldLayout->getFieldLayout()->getFields(); $submission = craft()->request->getPost(); $submissionData = $this->filterSubmissionKeys($submission); // Defaults $attributes = $form->getAttributes(); $formSettings = $attributes['formSettings']; $spamProtectionSettings = $attributes['spamProtectionSettings']; $messageSettings = $attributes['messageSettings']; $notificationSettings = $attributes['notificationSettings']; $files = ''; $errorMessage = []; // Prepare submissionEntry for processing $submissionEntry = new FormBuilder2_EntryModel(); // Using Ajax if ($formSettings['ajaxSubmit'] == '1') { $this->requireAjaxRequest(); } else { $this->requirePostRequest(); } // Custom Redirect if ($formSettings['formRedirect']['customRedirect'] != '') { $redirectUrl = $formSettings['formRedirect']['customRedirectUrl']; } // Spam Protection | Timed Method if ($spamProtectionSettings['spamTimeMethod'] == '1') { $formSubmissionTime = (int) craft()->request->getPost('spamTimeMethod'); $submissionDuration = time() - $formSubmissionTime; $allowedTime = (int) $spamProtectionSettings['spamTimeMethodTime']; if ($submissionDuration < $allowedTime) { $spamMethodOne = false; $errorMessage[] = Craft::t('You submitted too fast, you are robot!'); } else { $spamMethodOne = true; } } else { $spamMethodOne = true; } // Spam Protection | Honeypot Method if ($spamProtectionSettings['spamHoneypotMethod'] == '1') { $honeypotField = craft()->request->getPost('email-address-new'); if ($honeypotField != '') { $spamMethodTwo = false; $errorMessage[] = Craft::t('You tried the honey, you are robot bear!'); } else { $spamMethodTwo = true; } } else { $spamMethodTwo = true; } // Validate Required Fields $validateRequired = craft()->formBuilder2_entry->validateEntry($form, $submissionData); // File Uploads if ($formSettings['hasFileUploads'] == '1') { foreach ($formFields as $key => $value) { $field = $value->getField(); switch ($field->type) { case 'Assets': foreach ($_FILES as $key => $value) { if (!$value['tmp_name'] == '') { $fileModel = new AssetFileModel(); $folderId = $field->settings['singleUploadLocationSource'][0]; $sourceId = $field->settings['singleUploadLocationSource'][0]; $fileModel->originalName = $value['tmp_name']; $fileModel->sourceId = $sourceId; $fileModel->folderId = $folderId; $fileModel->filename = IOHelper::getFileName($value['name']); $fileModel->kind = IOHelper::getFileKind(IOHelper::getExtension($value['name'])); $fileModel->size = filesize($value['tmp_name']); if ($value['tmp_name']) { $fileModel->dateModified = IOHelper::getLastTimeModified($value['tmp_name']); } if ($fileModel->kind == 'image') { list($width, $height) = ImageHelper::getImageSize($value['tmp_name']); $fileModel->width = $width; $fileModel->height = $height; } $files[$key] = $fileModel; } } break; } } } $submissionEntry->formId = $form->id; $submissionEntry->title = $form->name; $submissionEntry->files = $files; $submissionEntry->submission = $submissionData; // Process Errors if ($errorMessage) { craft()->urlManager->setRouteVariables(array('errors' => $errorMessage)); } // Process Submission Entry if (!$errorMessage && $spamMethodOne && $spamMethodTwo && $validateRequired) { $submissionResponseId = craft()->formBuilder2_entry->processSubmissionEntry($submissionEntry); // Notify Admin of Submission if ($notificationSettings['notifySubmission'] == '1') { $this->notifyAdminOfSubmission($submissionResponseId, $form); } // Messages if ($formSettings['ajaxSubmit'] == '1') { $this->returnJson(['success' => true, 'message' => $messageSettings['successMessage'], 'form' => $form]); } else { craft()->userSession->setFlash('success', $messageSettings['successMessage']); if ($formSettings['formRedirect']['customRedirect'] != '') { $this->redirect($redirectUrl); } else { $this->redirectToPostedUrl(); } } } else { if ($formSettings['ajaxSubmit'] == '1') { $this->returnJson(['error' => true, 'message' => $messageSettings['errorMessage'], 'form' => $form]); } else { craft()->userSession->setFlash('error', $messageSettings['errorMessage']); } } }
public function actionSaveFormEntry() { $ajax = false; $redirect = false; $formBuilderHandle = craft()->request->getPost('formHandle'); if (!$formBuilderHandle) { throw new HttpException(404); } $form = craft()->formBuilder_entries->getFormByHandle($formBuilderHandle); if (!$form) { throw new HttpException(404); } $ajaxSubmit = $form->ajaxSubmit; $formRedirect = $form->successPageRedirect; $formRedirectUrl = $form->redirectUrl; if ($ajaxSubmit) { $ajax = true; $this->requirePostRequest(); $this->requireAjaxRequest(); } else { $this->requirePostRequest(); } $data = craft()->request->getPost(); $postData = $this->_filterPostKeys($data); $formBuilderEntry = new FormBuilder_EntryModel(); $fileupload = true; $validExtension = false; if ($form->hasFileUploads) { if (isset(array_values($_FILES)[0])) { $filename = array_values($_FILES)[0]['name']; $file = array_values($_FILES)[0]['tmp_name']; $extension = IOHelper::getFileKind(IOHelper::getExtension($filename)); if (!in_array($extension, $this->valid_extensions)) { $fileupload = false; $validExtension = false; } else { $validExtension = true; } if ($validExtension) { // Create formbuilder directory inside craft/storage if one doesn't exist $storagePath = craft()->path->getStoragePath(); $myStoragePath = $storagePath . 'formbuilder/'; IOHelper::ensureFolderExists($myStoragePath); $uploadDir = $myStoragePath; // Rename each file with unique name $uniqe_filename = uniqid() . '-' . $filename; foreach ($_FILES as $key => $value) { $fileUploadHandle = $key; } $postData[$fileUploadHandle] = $uniqe_filename; } } } $formBuilderEntry->formId = $form->id; $formBuilderEntry->title = $form->name; $formBuilderEntry->data = $postData; // Use reCaptcha $useCaptcha = $form->useReCaptcha; if ($useCaptcha && !DEV_MODE) { $captchaPlugin = craft()->plugins->getPlugin('recaptcha'); if ($captchaPlugin && $captchaPlugin->isEnabled) { $captcha = craft()->request->getPost('g-recaptcha-response'); $verified = craft()->recaptcha_verify->verify($captcha); } else { $verified = false; } } else { $verified = true; } // Save Form Entry if ($verified && $fileupload && craft()->formBuilder_entries->saveFormEntry($formBuilderEntry)) { // Save Uploaded File if ($validExtension) { if (move_uploaded_file($file, $uploadDir . $uniqe_filename)) { IOHelper::deleteFile($file); $file = $uploadDir . $uniqe_filename; $fileModel = new AssetFileModel(); $fileModel->sourceId = $form->uploadSource; $fileModel->folderId = $this->assetFolderId; $fileModel->filename = IOHelper::getFileName($uniqe_filename); $fileModel->originalName = IOHelper::getFileName($filename); $fileModel->kind = IOHelper::getFileKind(IOHelper::getExtension($uniqe_filename)); $fileModel->size = filesize($file); $fileModel->dateModified = IOHelper::getLastTimeModified($file); if ($fileModel->kind == 'image') { list($width, $height) = ImageHelper::getImageSize($file); $fileModel->width = $width; $fileModel->height = $height; } craft()->assets->storeFile($fileModel); } else { $fileupload = false; } } // Valid extension if ($form->notifyFormAdmin && $form->toEmail != '') { $this->_sendEmailNotification($formBuilderEntry, $form); } if ($form->notifyRegistrant && $form->notificationFieldHandleName != '') { $emailField = craft()->fields->getFieldByHandle($form->notificationFieldHandleName); $submitterEmail = $formBuilderEntry->data[$emailField->handle]; $this->_sendRegistrantEmailNotification($formBuilderEntry, $form, $submitterEmail); } if (!empty($form->successMessage)) { $successMessage = $form->successMessage; } else { $successMessage = Craft::t('Thank you, we have received your submission and we\'ll be in touch shortly.'); } craft()->userSession->setFlash('success', $successMessage); if ($ajax) { $this->returnJson(['success' => true, 'message' => $successMessage]); } else { if ($formRedirect) { $this->redirect($formRedirectUrl); } } } else { if (!$verified) { if (!$captchaPlugin) { craft()->userSession->setFlash('error', 'Please enable reCaptcha plugin!'); $this->redirectToPostedUrl(); } craft()->userSession->setFlash('error', 'Please check captcha!'); $this->redirectToPostedUrl(); } if (!empty($form->errorMessage)) { $errorMessage = $form->errorMessage; } else { $errorMessage = Craft::t('We\'re sorry, but something has gone wrong.'); } if ($ajax) { $this->returnJson(['error' => true, 'message' => $errorMessage]); } else { if ($formRedirect) { $this->redirectToPostedUrl(); } else { craft()->userSession->setFlash('error', $errorMessage); } } } }
/** * Submit Entry * */ public function actionSubmitEntry() { $this->requirePostRequest(); // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // VARIABLES // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ $files = ''; $ajax = false; $passedValidation = true; $validationErrors = []; $submissionErrorMessage = []; $customSuccessMessage = ''; $customErrorMessage = ''; // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // FORM // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ $form = craft()->formBuilder2_entry->getFormByHandle(craft()->request->getPost('formHandle')); // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // FORM SUBMISSION // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ $formFields = $form->fieldLayout->getFieldLayout()->getFields(); // Get all form fields $submission = craft()->request->getPost(); // Get all values from the submitted form $submissionData = $this->filterSubmissionKeys($submission); // Fillter out unused submission data // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // FORM ATTRIBUTES // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ $attributes = $form->getAttributes(); $formSettings = $attributes['formSettings']; $spamProtectionSettings = $attributes['spamProtectionSettings']; $messageSettings = $attributes['messageSettings']; $notificationSettings = $attributes['notificationSettings']; // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // FORM SETTINGS ||| (1) Custom Redirect, (2) File Uploads, (3) Ajax Submissions // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // (1) Custom Redirect if ($formSettings['formRedirect']['customRedirect'] != '') { $redirectUrl = $formSettings['formRedirect']['customRedirectUrl']; } // (2) File Uploads if ($formSettings['hasFileUploads'] == '1') { foreach ($formFields as $key => $value) { $field = $value->getField(); switch ($field->type) { case 'Assets': $uploadedFiles = UploadedFile::getInstancesByName($field->handle); $allowedKinds = []; if ($field->settings['restrictFiles']) { $allowedKinds = $field->settings['allowedKinds']; } foreach ($uploadedFiles as $file) { $fileKind = IOHelper::getFileKind(IOHelper::getExtension($file->getName())); if (in_array($fileKind, $allowedKinds)) { $files[] = array('folderId' => $field->settings['singleUploadLocationSource'][0], 'sourceId' => $field->settings['singleUploadLocationSource'][0], 'filename' => $file->getName(), 'location' => $file->getTempName(), 'type' => $file->getType(), 'kind' => $fileKind); } else { $submissionErrorMessage[] = Craft::t('File type is not allowed!'); } } break; } } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // FORM CUSTOM MESSAGES ||| (1) Success Message (2) Error Message // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // (1) Success Message $customSuccessMessage = $messageSettings['successMessage'] ? $messageSettings['successMessage'] : Craft::t('Submission was successful.'); // (2) Error Message $customErrorMessage = $messageSettings['errorMessage'] ? $messageSettings['errorMessage'] : Craft::t('There was a problem with your submission.'); // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // (3) Ajax Submissions if ($formSettings['ajaxSubmit'] == '1') { $this->requireAjaxRequest(); $ajax = true; } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // FORM SPAM PROTECTION ||| (1) Timed Method (2) Honeypot Method // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // (1) Timed Method if ($spamProtectionSettings['spamTimeMethod'] == '1') { $formSubmissionTime = (int) craft()->request->getPost('spamTimeMethod'); $submissionDuration = time() - $formSubmissionTime; $allowedTime = (int) $spamProtectionSettings['spamTimeMethodTime']; if ($submissionDuration < $allowedTime) { if ($ajax) { $this->returnJson(['validationErrors' => [Craft::t('You submitted too fast, you are robot!')], 'customErrorMessage' => $customErrorMessage]); } else { $spamTimedMethod = false; $submissionErrorMessage[] = Craft::t('You submitted too fast, you are robot!'); } } else { $spamTimedMethod = true; } } else { $spamTimedMethod = true; } // (2) Honeypot Method if ($spamProtectionSettings['spamHoneypotMethod'] == '1') { $honeypotField = craft()->request->getPost('email-address-new'); if ($honeypotField != '') { if ($ajax) { $this->returnJson(['validationErrors' => [Craft::t('You tried the honey, you are robot bear!')], 'customErrorMessage' => $customErrorMessage]); } else { $spamHoneypotMethod = false; $submissionErrorMessage[] = Craft::t('You tried the honey, you are robot bear!'); } } else { $spamHoneypotMethod = true; } } else { $spamHoneypotMethod = true; } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // NEW FORM MODEL // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ $submissionEntry = new FormBuilder2_EntryModel(); $submissionEntry->formId = $form->id; $submissionEntry->title = $form->name; $submissionEntry->submission = $submissionData; // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // FAILED SUBMISSION REDIRECT W/MESSAGES (Spam Protection) // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if ($submissionErrorMessage) { craft()->userSession->setFlash('error', $customErrorMessage); craft()->urlManager->setRouteVariables(array('errors' => $submissionErrorMessage)); } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // VALIDATE SUBMISSION DATA // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ $validation = craft()->formBuilder2_entry->validateEntry($form, $submissionData, $files); // if ($validation != '') { if (!empty($validation)) { if ($ajax) { $this->returnJson(['passedValidation' => false, 'validationErrors' => $validation, 'customErrorMessage' => $customErrorMessage]); } else { craft()->userSession->setFlash('error', $customErrorMessage); $passedValidation = false; return craft()->urlManager->setRouteVariables(['value' => $submissionData, 'errors' => $validation]); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // PROCESS SUBMISSION ENTRY // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if (!$submissionErrorMessage && $passedValidation && $spamTimedMethod && $spamHoneypotMethod) { // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // FILE UPLOADS // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ $fileIds = []; $fileCollection = []; $tempPath = []; if ($files) { foreach ($files as $key => $file) { $tempPath = AssetsHelper::getTempFilePath($file['filename']); move_uploaded_file($file['location'], $tempPath); $response = craft()->assets->insertFileByLocalPath($tempPath, $file['filename'], $file['folderId'], AssetConflictResolution::KeepBoth); $fileIds[] = $response->getDataItem('fileId'); $fileCollection[] = ['tempPath' => $tempPath, 'filename' => $file['filename'], 'type' => $file['type']]; } $submissionEntry->files = $fileIds; } $submissionResponseId = craft()->formBuilder2_entry->processSubmissionEntry($submissionEntry); if ($submissionResponseId) { // Notify Admin of Submission if (isset($notificationSettings['notifySubmission'])) { if ($notificationSettings['notifySubmission'] == '1') { $this->notifyAdminOfSubmission($submissionResponseId, $fileCollection, $form); } } // Notify Submitter of Submission if (isset($notificationSettings['notifySubmitter'])) { if ($notificationSettings['notifySubmitter'] == '1') { $this->notifySubmitterOfSubmission($submissionResponseId, $form); } } foreach ($fileCollection as $file) { IOHelper::deleteFile($file['tempPath'], true); } // Successful Submission Messages if ($ajax) { $this->returnJson(['success' => true, 'customSuccessMessage' => $customSuccessMessage]); } else { craft()->userSession->setFlash('success', $customSuccessMessage); $cookie = new HttpCookie('formBuilder2SubmissionId', $submissionEntry->attributes['id']); craft()->request->getCookies()->add($cookie->name, $cookie); $this->redirectToPostedUrl(); } } else { // Submission Error Messages if ($ajax) { $this->returnJson(['error' => true, 'customErrorMessage' => $customErrorMessage]); } else { craft()->userSession->setFlash('error', $customErrorMessage); return craft()->urlManager->setRouteVariables(['value' => $submissionData, 'errors' => $validation]); } } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }