From 8920edb85fda940f33a9aceb5bc99fbbad363fd1 Mon Sep 17 00:00:00 2001 From: Sean Harvey Date: Mon, 29 Sep 2008 03:18:23 +0000 Subject: [PATCH] ENHANCEMENT Moved UserDefinedForm and related code, templates, CSS and javascript out of cms and sapphire classes into userforms/trunk git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/cms/trunk@63249 467b73ca-7a2a-4603-9d3b-597d59a354a9 --- code/LeftAndMain.php | 3 - code/PageTypes/UserDefinedForm.php | 341 -------------------------- templates/email/SubmittedFormEmail.ss | 21 -- 3 files changed, 365 deletions(-) delete mode 100755 code/PageTypes/UserDefinedForm.php delete mode 100755 templates/email/SubmittedFormEmail.ss diff --git a/code/LeftAndMain.php b/code/LeftAndMain.php index 2a68aa0e..e47e3c7b 100644 --- a/code/LeftAndMain.php +++ b/code/LeftAndMain.php @@ -168,9 +168,6 @@ class LeftAndMain extends Controller { Requirements::javascript(SAPPHIRE_DIR . '/javascript/ToggleCompositeField.js'); Requirements::css(SAPPHIRE_DIR . '/css/SubmittedFormReportField.css'); - Requirements::javascript(SAPPHIRE_DIR . '/javascript/FieldEditor.js'); - Requirements::css(SAPPHIRE_DIR . '/css/FieldEditor.css'); - Requirements::css(SAPPHIRE_DIR . '/css/TableListField.css'); Requirements::css(SAPPHIRE_DIR . '/css/ComplexTableField.css'); Requirements::javascript(SAPPHIRE_DIR . '/javascript/TableListField.js'); diff --git a/code/PageTypes/UserDefinedForm.php b/code/PageTypes/UserDefinedForm.php deleted file mode 100755 index cd3dfc8d..00000000 --- a/code/PageTypes/UserDefinedForm.php +++ /dev/null @@ -1,341 +0,0 @@ - "Varchar", - "EmailOnSubmit" => "Boolean", - "SubmitButtonText" => "Varchar", - "OnCompleteMessage" => "HTMLText" - ); - - static $defaults = array( - "OnCompleteMessage" => "

Thanks, we've received your submission.

", - ); - - static $has_many = array( - "Fields" => "EditableFormField", - "Submissions" => "SubmittedForm" - ); - - protected $fields; - - function getCMSFields($cms) { - $fields = parent::getCMSFields($cms); - - $fields->addFieldToTab("Root."._t('UserDefinedForm.FORM', 'Form'), new FieldEditor("Fields", 'Fields', "", $this )); - $fields->addFieldToTab("Root."._t('UserDefinedForm.SUBMISSIONS','Submissions'), new SubmittedFormReportField( "Reports", _t('UserDefinedForm.RECEIVED', 'Received Submissions'), "", $this ) ); - $fields->addFieldToTab("Root.Content."._t('UserDefinedForm.ONCOMPLETE','On complete'), new HtmlEditorField( "OnCompleteMessage", _t('UserDefinedForm.ONCOMPLETELABEL', 'Show on completion'),3,"",_t('UserDefinedForm.ONCOMPLETEMESSAGE', $this->OnCompleteMessage), $this ) ); - - return $fields; - } - - function FilterForm() { - // Build fields - $fields = new FieldSet(); - $required = array(); - - foreach( $this->Fields() as $field ) { - $fields->push( $field->getFilterField() ); - } - - // Build actions - $actions = new FieldSet( - new FormAction( "filter", _t('UserDefinedForm.SUBMIT', 'Submit') ) - ); - - // set the name of the form - return new Form( $this, "Form", $fields, $actions ); - } - - /** - * Filter the submissions by the given criteria - */ - function filter( $data, $form ) { - - $filterClause = array( "`SubmittedForm`.`ParentID` = '{$this->ID}'" ); - - $keywords = preg_split( '/\s+/', $data['FilterKeyword'] ); - - $keywordClauses = array(); - - // combine all keywords into one clause - foreach( $keywords as $keyword ) { - - // escape %, \ and _ in the keyword. These have special meanings in a LIKE string - $keyword = preg_replace( '/([%_])/', '\\\\1', addslashes( $keyword ) ); - - $keywordClauses[] = "`Value` LIKE '%$keyword%'"; - } - - if( count( $keywordClauses ) > 0 ) { - $filterClause[] = "( " . implode( ' OR ', $keywordClauses ) . ")"; - $searchQuery = 'keywords \'' . implode( "', '", $keywords ) . '\' '; - } - - $fromDate = addslashes( $data['FilterFromDate'] ); - $toDate = addslashes( $data['FilterToDate'] ); - - // use date objects to convert date to value expected by database - if( ereg('^([0-9]+)/([0-9]+)/([0-9]+)$', $fromDate, $parts) ) - $fromDate = $parts[3] . '-' . $parts[2] . '-' . $parts[1]; - - if( ereg('^([0-9]+)/([0-9]+)/([0-9]+)$', $toDate, $parts) ) - $toDate = $parts[3] . '-' . $parts[2] . '-' . $parts[1]; - - if( $fromDate ) { - $filterClause[] = "`SubmittedForm`.`Created` >= '$fromDate'"; - $searchQuery .= 'from ' . $fromDate . ' '; - } - - if( $toDate ) { - $filterClause[] = "`SubmittedForm`.`Created` <= '$toDate'"; - $searchQuery .= 'to ' . $toDate; - } - - $submittedValues = DataObject::get( 'SubmittedFormField', implode( ' AND ', $filterClause ), "", "INNER JOIN `SubmittedForm` ON `SubmittedFormField`.`ParentID`=`SubmittedForm`.`ID`" ); - - if( !$submittedValues || $submittedValues->Count() == 0 ) - return _t('UserDefinedForm.NORESULTS', 'No matching results found'); - - $submissions = $submittedValues->groupWithParents( 'ParentID', 'SubmittedForm' ); - - if( !$submissions || $submissions->Count() == 0 ) - return _t('UserDefinedForm.NORESULTS', 'No matching results found'); - - return $submissions->customise( - array( 'Submissions' => $submissions ) - )->renderWith( 'SubmittedFormReportField_Reports' ); - } - - function ReportFilterForm() { - return new SubmittedFormReportField_FilterForm( $this, 'ReportFilterForm' ); - } - - function delete() { - // remove all the fields associated with this page - foreach( $this->Fields() as $field ) - $field->delete(); - - parent::delete(); - } - - public function customFormActions( $isReadonly = false ) { - return new FieldSet( new TextField( "SubmitButtonText", _t('UserDefinedForm.TEXTONSUBMIT', 'Text on submit button:'), $this->SubmitButtonText ) ); - } - - /** - * Duplicate this UserDefinedForm page, and its form fields. - * Submissions, on the other hand, won't be duplicated. - */ - public function duplicate() { - $page = parent::duplicate(); - foreach($this->Fields() as $field) { - $newField = $field->duplicate(); - $newField->ParentID = $page->ID; - $newField->write(); - } - return $page; - } -} - -/** - * Controller for the {@link UserDefinedForm} page type. - * @package cms - * @subpackage pagetypes - */ -class UserDefinedForm_Controller extends Page_Controller { - - function init() { - Requirements::javascript(THIRDPARTY_DIR . 'jsparty/prototype-safe.js'); - Requirements::javascript(THIRDPARTY_DIR . 'jsparty/behaviour.js'); - - parent::init(); - } - - function Form() { - // Build fields - $fields = new FieldSet(); - $required = array(); - - if( !$this->SubmitButtonText ) - $this->SubmitButtonText = 'Submit'; - - foreach( $this->Fields() as $field ) { - $fields->push( $field->getFormField() ); - if( $field->Required ) - $required[] = $field->Name; - } - - if(!isset($_SERVER['HTTP_REFERER'])) { - $_SERVER['HTTP_REFERER'] = ""; - } - - $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; - $fields->push( new HiddenField( "Referrer", "", $referer ) ); - - // Build actions - $actions = new FieldSet( - new FormAction( "process", $this->SubmitButtonText ) - ); - - // set the name of the form - $form = new Form( $this, "Form", $fields, $actions, new RequiredFields( $required ) ); - $form->loadDataFrom($this->failover); - return $form; - } - - function ReportFilterForm() { - return new SubmittedFormReportField_FilterForm( $this, 'ReportFilterForm' ); - } - - function process( $data, $form ) { - $submittedForm = new SubmittedForm(); - $submittedForm->SubmittedBy = Member::currentUser(); - $submittedForm->ParentID = $this->ID; - $submittedForm->Recipient = $this->EmailTo; - $submittedForm->write(); - - $values = array(); - $recipientAddresses = array(); - $sendCopy = false; - - $attachments = array(); - - $submittedFields = new DataObjectSet(); - foreach( $this->Fields() as $field ) { - $submittedField = new SubmittedFormField(); - $submittedField->ParentID = $submittedForm->ID; - $submittedField->Name = $field->Name; - $submittedField->Title = $field->Title; - - if( $field->hasMethod( 'getValueFromData' ) ) - $submittedField->Value = $field->getValueFromData( $data ); - else - if(isset($data[$field->Name])) $submittedField->Value = $data[$field->Name]; - - $submittedField->write(); - $submittedFields->push($submittedField); - - if(!empty( $data[$field->Name])){ - // execute the appropriate functionality based on the form field. - switch($field->ClassName){ - - case "EditableEmailField" : - - if($field->SendCopy){ - $recipientAddresses[] = $data[$field->Name]; - $sendCopy = true; - $values[$field->Title] = ''.$data[$field->Name].''; - } - - break; - - case "EditableFileField" : - - // Returns a file type which we attach to the email. - $submittedfile = $field->createSubmittedField($data[$field->Name], $submittedForm); - $file = $submittedfile->UploadedFile(); - - $filename = $file->getFilename(); - - // Attach the file if its less than 1MB, provide a link if its over. - if($file->getAbsoluteSize() < 1024*1024*1){ - $attachments[] = $file; - } - - // Always provide the link if present. - if($file->ID) { - $submittedField->Value = $values[$field->Title] = "Uploaded to: ". Director::absoluteBaseURL(). $filename . ""; - } else { - $submittedField->Value = $values[$field->Title] = ""; - } - - break; - } - - }elseif( $field->hasMethod( 'getValueFromData' ) ) { - $values[$field->Title] = Convert::linkIfMatch($field->getValueFromData( $data )); - - } else { - if(isset($data[$field->Name])) $values[$field->Title] = Convert::linkIfMatch($data[$field->Name]); - } - - } - - if( $this->EmailOnSubmit || $sendCopy ) { - $emailData = array( - "Recipient" => $this->EmailTo, - "Sender" => Member::currentUser(), - "Fields" => $submittedFields, - ); - - $email = new UserDefinedForm_SubmittedFormEmail($submittedFields); - $email->populateTemplate($emailData); - $email->setTo( $this->EmailTo ); - $email->setSubject( $this->Title ); - - // add attachments to email (<1MB) - if($attachments){ - foreach($attachments as $file){ - $email->attachFile($filename,$filename); - } - } - - $email->send(); - - // send to each of email fields - foreach( $recipientAddresses as $addr ) { - $email->setTo( $addr ); - $email->send(); - } - } - - $custom = $this->customise(array( - "Content" => $this->customise( array( 'Link' => $data['Referrer'] ) )->renderWith('ReceivedFormSubmission'), - "Form" => " ", - )); - - return $custom->renderWith('Page'); - } -} - -/** - * Email that gets sent when a submission is made. - * @package cms - * @subpackage pagetypes - */ -class UserDefinedForm_SubmittedFormEmail extends Email { - protected $ss_template = "SubmittedFormEmail"; - protected $from = '$Sender.Email'; - protected $to = '$Recipient.Email'; - protected $subject = 'Submission of form'; - protected $data; - - function __construct($values) { - $this->subject = _t('UserDefinedForm_SubmittedFormEmail.EMAILSUBJECT', 'Submission of form'); - parent::__construct(); - - $this->data = $values; - } - - function Data() { - return $this->data; - } -} - -?> diff --git a/templates/email/SubmittedFormEmail.ss b/templates/email/SubmittedFormEmail.ss deleted file mode 100755 index 40470c3b..00000000 --- a/templates/email/SubmittedFormEmail.ss +++ /dev/null @@ -1,21 +0,0 @@ - - - - -

$Subject

-

- <% _t('SUBMITTED','The following data was submitted to your website:') %> - -

- $Body - - - <% control Fields %> - - - - - <% end_control %> -
$Title$Value
- -