Index: branches/5.3.x/core/units/forms/forms/forms_eh.php =================================================================== diff -u -N -r15677 -r15698 --- branches/5.3.x/core/units/forms/forms/forms_eh.php (.../forms_eh.php) (revision 15677) +++ branches/5.3.x/core/units/forms/forms/forms_eh.php (.../forms_eh.php) (revision 15698) @@ -1,6 +1,6 @@ permMapping = array_merge($this->permMapping, $permissions); } - function OnCreateSubmissionNodes($event) + protected function OnCreateSubmissionNodes(kEvent $event) { - if (defined('IS_INSTALL') && IS_INSTALL) { + if ( defined('IS_INSTALL') && IS_INSTALL ) { // skip any processing, because Forms table doesn't exists until install is finished - return ; + return; } $forms = $this->getForms(); - if (!$forms) { - return ; + if ( !$forms ) { + return; } - $form_subsection = Array( - 'parent' => 'in-portal:forms', - 'icon' => 'form_submission', - 'label' => '', - 'url' => Array('t' => 'submissions/submissions_list', 'pass' => 'm,form'), - 'permissions' => Array('view', 'add', 'edit', 'delete'), - 'priority' => 1, - 'type' => stTREE, + $form_subsection = Array ( + 'parent' => 'in-portal:forms', + 'icon' => 'form_submission', + 'label' => '', + 'url' => Array ('t' => 'submissions/submissions_list', 'pass' => 'm,form'), + 'permissions' => Array ('view', 'add', 'edit', 'delete'), + 'priority' => 1, + 'type' => stTREE, ); $priority = 1; - $sections = $this->Application->getUnitOption($event->Prefix, 'Sections'); + $config = $event->getUnitConfig(); foreach ($forms as $form_id => $form_name) { $this->Application->Phrases->AddCachedPhrase('form_sub_label_'.$form_id, $form_name); $this->Application->Phrases->AddCachedPhrase('la_description_in-portal:submissions:'.$form_id, $form_name.' Submissions'); + $form_subsection['label'] = 'form_sub_label_'.$form_id; $form_subsection['url']['form_id'] = $form_id; $form_subsection['priority'] = $priority++; - $sections['in-portal:submissions:'.$form_id] = $form_subsection; - } - $this->Application->setUnitOption($event->Prefix, 'Sections', $sections); + $config->addSections($form_subsection, 'in-portal:submissions:' . $form_id); + } } - function getForms() + protected function getForms() { $cache_key = 'forms[%FormSerial%]'; $forms = $this->Application->getCache($cache_key); - if ($forms === false) { + if ( $forms === false ) { $this->Conn->nextQueryCachable = true; $sql = 'SELECT Title, FormId FROM ' . TABLE_PREFIX . 'Forms @@ -184,11 +184,11 @@ $object = $event->getObject(); /* @var $object kDBItem */ - $fields = explode(',',$this->Application->GetVar('fields')); + $fields = explode(',', $this->Application->GetVar('fields')); $required_fields = explode(',', $this->Application->GetVar('required_fields')); $fields_params = $this->Application->GetVar('fields_params'); - $virtual_fields = $this->Application->getUnitOption($event->Prefix, 'VirtualFields'); + $virtual_fields = $event->getUnitConfig()->getVirtualFields(); foreach ($fields as $field) { $virtual_fields[$field] = Array (); @@ -218,7 +218,7 @@ $checkboxes = explode(',', $this->Application->GetVar('checkbox_fields')); // MailingList,In-Link,In-Newz,In-Bulletin foreach ($checkboxes as $checkbox) { - if (isset($field_values[$checkbox])) { + if ( isset($field_values[$checkbox]) ) { $field_values[$checkbox] = 1; } else { @@ -415,15 +415,13 @@ */ function _processMailbox($event, $bounce_mode = false) { + $config = $event->getUnitConfig(); $this->Application->SetVar('client_mode', 1); - $id_field = $this->Application->getUnitOption($event->Prefix, 'IDField'); - $table_name = $this->Application->getUnitOption($event->Prefix, 'TableName'); - $sql = 'SELECT * - FROM ' . $table_name . ' + FROM ' . $config->getTableName() . ' WHERE EnableEmailCommunication = 1'; - $forms = $this->Conn->Query($sql, $id_field); + $forms = $this->Conn->Query($sql, $config->getIDField()); $mailbox_helper = $this->Application->recallObject('MailboxHelper'); /* @var $mailbox_helper MailboxHelper */ @@ -433,7 +431,7 @@ foreach ($forms as $form_id => $form_info) { $recipient_email = $bounce_mode ? $form_info['BounceEmail'] : $form_info['ReplyFromEmail']; - if (!$recipient_email) { + if ( !$recipient_email ) { continue; } @@ -487,27 +485,27 @@ function processEmail($params, &$fields_hash) { - if ($params['bounce_mode']) { + if ( $params['bounce_mode'] ) { // mark original message as bounced $mailbox_helper = $this->Application->recallObject('MailboxHelper'); /* @var $mailbox_helper MailboxHelper */ - if (!array_key_exists('attachments', $mailbox_helper->parsedMessage)) { + if ( !array_key_exists('attachments', $mailbox_helper->parsedMessage) ) { // for now only parse bounces based on attachments, skip other bounce types return false; } for ($i = 0; $i < count($mailbox_helper->parsedMessage['attachments']); $i++) { $attachment =& $mailbox_helper->parsedMessage['attachments'][$i]; - switch ($attachment['headers']['content-type']) { + switch ( $attachment['headers']['content-type'] ) { case 'message/delivery-status': // save as BounceInfo $mime_decode_helper = $this->Application->recallObject('MimeDecodeHelper'); /* @var $mime_decode_helper MimeDecodeHelper */ - $charset = $mailbox_helper->parsedMessage[ $fields_hash['MessageType'] ][0]['charset']; + $charset = $mailbox_helper->parsedMessage[$fields_hash['MessageType']][0]['charset']; $fields_hash['Message'] = $mime_decode_helper->convertEncoding($charset, $attachment['data']); break; @@ -519,21 +517,23 @@ } } - if (!preg_match('/^(.*) #verify(.*)$/', $fields_hash['Subject'], $regs)) { + if ( !preg_match('/^(.*) #verify(.*)$/', $fields_hash['Subject'], $regs) ) { // incorrect subject, no verification code $form_info = $params['form_info']; - if ($form_info['ProcessUnmatchedEmails'] && ($fields_hash['FromEmail'] != $params['recipient_email'])) { + if ( $form_info['ProcessUnmatchedEmails'] && ($fields_hash['FromEmail'] != $params['recipient_email']) ) { // it's requested to convert unmatched emails to new submissions $form_id = $form_info['FormId']; $this->Application->SetVar('form_id', $form_id); - $sql = 'SELECT ' . $this->Application->getUnitOption('formsubs', 'IDField') . ' - FROM ' . $this->Application->getUnitOption('formsubs', 'TableName') . ' + $form_submission_config = $this->Application->getUnitConfig('formsubs'); + + $sql = 'SELECT ' . $form_submission_config->getIDField() . ' + FROM ' . $form_submission_config->getTableName() . ' WHERE MessageId = ' . $this->Conn->qstr($fields_hash['MessageId']); $found = $this->Conn->GetOne($sql); - if ($found) { + if ( $found ) { // don't process same message twice return false; } @@ -554,12 +554,12 @@ $submission_fields = Array (); foreach ($role_mapping as $role => $email_field) { - if (array_key_exists($role, $form_fields)) { - $submission_fields[ 'fld_' . $form_fields[$role]['FormFieldId'] ] = $fields_hash[$email_field]; + if ( array_key_exists($role, $form_fields) ) { + $submission_fields['fld_' . $form_fields[$role]['FormFieldId']] = $fields_hash[$email_field]; } } - if ($submission_fields) { + if ( $submission_fields ) { // remove object, because it's linked to single form upon creation forever $this->Application->removeObject('formsubs.-item'); @@ -574,19 +574,22 @@ $form_submission->SetDBField('SubmissionTime_date', adodb_mktime()); $form_submission->SetDBField('SubmissionTime_time', adodb_mktime()); $form_submission->SetDBField('ReferrerURL', $this->Application->Phrase('la_Text_Email')); + return $form_submission->Create(); } } return false; } - $sql = 'SELECT ' . $this->Application->getUnitOption('submission-log', 'IDField') . ' - FROM ' . $this->Application->getUnitOption('submission-log', 'TableName') . ' + $submission_log_config = $this->Application->getUnitConfig('submission-log'); + + $sql = 'SELECT ' . $submission_log_config->getIDField() . ' + FROM ' . $submission_log_config->getTableName() . ' WHERE MessageId = ' . $this->Conn->qstr($fields_hash['MessageId']); $found = $this->Conn->GetOne($sql); - if ($found) { + if ( $found ) { // don't process same message twice return false; } @@ -595,12 +598,13 @@ /* @var $reply_to kDBItem */ $reply_to->Load($regs[2], 'VerifyCode'); - if (!$reply_to->isLoaded()) { + + if ( !$reply_to->isLoaded() ) { // fake verification code OR feedback, containing submission log was deleted return false; } - if ($params['bounce_mode']) { + if ( $params['bounce_mode'] ) { // mark original message as bounced $reply_to->SetDBField('BounceInfo', $fields_hash['Message']); $reply_to->SetDBField('BounceDate_date', TIMENOW);