diff --git a/CRM/Petitionemail/Upgrader.php b/CRM/Petitionemail/Upgrader.php index 88c208d30aa5a5d1184847aafa31e81e900f88c1..f1c4cabc99afe5d111122c04c6c25cf0dd6603d9 100644 --- a/CRM/Petitionemail/Upgrader.php +++ b/CRM/Petitionemail/Upgrader.php @@ -51,4 +51,13 @@ class CRM_Petitionemail_Upgrader extends CRM_Petitionemail_Upgrader_Base { if(!$this->executeSqlFile('sql/Petitionemail_1001_upgrade.sql')) return FALSE; return TRUE; } + + /** + * Add field to allow user to specify custom subject line. + */ + function upgrade_1002() { + if(!$this->executeSqlFile('sql/Petitionemail_1002_upgrade.sql')) return FALSE; + return TRUE; + } + } diff --git a/petitionemail.js b/petitionemail.js index 0ff2ed0f4d286195dea89342fc3b150d2483c140..0298acc5288e271c0ccd14d23de4ba4dda1bc567 100644 --- a/petitionemail.js +++ b/petitionemail.js @@ -1,23 +1,28 @@ cj(document).ready( function() { showHideEmailPetition(); - populateUserMessageFieldOptions(); + populateUserFieldOptions(); cj("input#email_petition").click( function() { showHideEmailPetition(); }); - cj("#profile_id").change( function() { populateUserMessageFieldOptions(); }); + cj("#profile_id").change( function() { populateUserFieldOptions(); }); }); -function populateUserMessageFieldOptions() { +function populateUserFieldOptions() { var actProfile = cj("#profile_id").val(); - var selected = cj('#message_field').val(); + var selected_message = cj('#message_field').val(); + var selected_subject = cj('#subject_field').val(); var options = {}; cj('#message_field').empty(); + cj('#subject_field').empty(); if(actProfile) { CRM.api("UFField","get",{ "uf_group_id" : actProfile },{ success:function (data) { if(data['is_error'] == 0) { cj('#message_field').append(''); + cj('#subject_field').append(''); cj.each(data["values"], function(key, value) { cj('#message_field').append(''); + cj('#subject_field').append(''); }); - cj('#message_field').val(selected); + cj('#message_field').val(selected_message); + cj('#subject_field').val(selected_subject); } }}); } diff --git a/petitionemail.php b/petitionemail.php index 709b8822af470d01391c358f2da93afebe4bc41b..93132a399bcca90b9b9bfe7cf933408fac44512a 100644 --- a/petitionemail.php +++ b/petitionemail.php @@ -88,7 +88,9 @@ function petitionemail_civicrm_buildForm( $formName, &$form ) { if ($survey_id) { $sql = "SELECT petition_id, default_message, + subject, message_field, + subject_field, subject FROM civicrm_petition_email WHERE petition_id = %1"; @@ -101,7 +103,9 @@ function petitionemail_civicrm_buildForm( $formName, &$form ) { return; } $message_field = $dao->message_field; + $subject_field = $dao->subject_field; $defaults[$message_field] = $dao->default_message; + $defaults[$subject_field] = $dao->subject; $form->setDefaults($defaults); } } @@ -114,6 +118,7 @@ function petitionemail_civicrm_buildForm( $formName, &$form ) { $sql = "SELECT petition_id, default_message, message_field, + subject_field, subject, recipients, location_type_id @@ -128,6 +133,7 @@ function petitionemail_civicrm_buildForm( $formName, &$form ) { $defaults['recipients'] = $dao->recipients; $defaults['default_message'] = $dao->default_message; $defaults['message_field'] = $dao->message_field; + $defaults['subject_field'] = $dao->subject_field; $defaults['subject'] = $dao->subject; $defaults['location_type_id'] = $dao->location_type_id; @@ -176,17 +182,17 @@ function petitionemail_civicrm_buildForm( $formName, &$form ) { $profile_ids[] = $join_value['uf_group_id']; } } - $custom_fields = petitionemail_get_textarea_fields($profile_ids); + $custom_fields = petitionemail_get_text_fields($profile_ids); - $custom_message_field_options = array(); + $custom_field_options = array(); if(count($custom_fields) == 0) { - $custom_message_field_options = array( + $custom_field_options = array( '' => t('- No Text or TextArea fields defined in your profiles -') ); } else { - $custom_message_field_options = array('' => t('- Select -')); - $custom_message_field_options = $custom_message_field_options + $custom_fields; + $custom_field_options = array('' => t('- Select -')); + $custom_field_options = $custom_field_options + $custom_fields; } $choose_one = array('0' => ts('--choose one--')); $group_options = $choose_one + CRM_Core_PseudoConstant::group('Mailing'); @@ -219,9 +225,11 @@ function petitionemail_civicrm_buildForm( $formName, &$form ) { $form->add('select', 'location_type_id', ts('Email'), $location_options); $form->add('textarea', 'recipients', ts("Send petitions to")); $form->add('select', 'message_field', ts('Custom Message Field'), - $custom_message_field_options); + $custom_field_options); + $form->add('select', 'subject_field', ts('Custom Subject Field'), + $custom_field_options); $form->add('textarea', 'default_message', ts('Default Message'), 'rows=20'); - $form->add('text', 'subject', ts('Email Subject Line'), array('size' => 70)); + $form->add('text', 'subject', ts('Default Email Subject Line'), array('size' => 70)); $form->add('textarea', 'links', ts('Links to sign the petition'), 'rows=5')->freeze(); @@ -371,7 +379,7 @@ function petitionemail_civicrm_validateForm($formName, &$fields, &$files, &$form /** * Given an array of profile ids, list all text area fields */ -function petitionemail_get_textarea_fields($profile_ids) { +function petitionemail_get_text_fields($profile_ids) { // Now get all fields in this profile $custom_fields = array(); while(list(,$uf_group_id) = each($profile_ids)) { @@ -435,6 +443,7 @@ function petitionemail_civicrm_postProcess( $formName, &$form ) { $default_message = $form->_submitValues['default_message']; $message_field = $form->_submitValues['message_field']; + $subject_field = $form->_submitValues['subject_field']; $subject = $form->_submitValues['subject']; $recipients = $form->_submitValues['recipients']; $location_type_id = $form->_submitValues['location_type_id']; @@ -443,6 +452,7 @@ function petitionemail_civicrm_postProcess( $formName, &$form ) { petition_id, default_message, message_field, + subject_field, subject, recipients, location_type_id @@ -452,15 +462,17 @@ function petitionemail_civicrm_postProcess( $formName, &$form ) { %3, %4, %5, - %6 + %6, + %7 )"; $params = array( 1 => array( $survey_id, 'Integer' ), 2 => array( $default_message, 'String' ), 3 => array( $message_field, 'String' ), - 4 => array( $subject, 'String' ), - 5 => array( $recipients, 'String' ), - 6 => array( $location_type_id, 'Integer' ), + 4 => array( $subject_field, 'String' ), + 5 => array( $subject, 'String' ), + 6 => array( $recipients, 'String' ), + 7 => array( $location_type_id, 'Integer' ), ); $petitionemail = CRM_Core_DAO::executeQuery( $sql, $params ); @@ -532,6 +544,7 @@ function petitionemail_get_petition_details($petition_id) { $ret = array(); $sql = "SELECT default_message, message_field, + subject_field, subject, location_type_id, recipients @@ -550,6 +563,7 @@ function petitionemail_get_petition_details($petition_id) { $ret['subject'] = $petition_email->subject; $ret['location_type_id'] = $petition_email->location_type_id; $ret['message_field'] = $petition_email->message_field; + $ret['subject_field'] = $petition_email->subject_field; $ret['recipients'] = $petition_email->recipients; // Now retrieve the matching fields, if any @@ -577,27 +591,46 @@ function petitionemail_process_signature($activity_id) { return; } $default_message = $petition_vars['default_message']; - $subject = $petition_vars['subject']; + $default_subject = $petition_vars['subject']; $message_field = $petition_vars['message_field']; + $subject_field = $petition_vars['subject_field']; - // Figure out whether to use the user-supplied message or the default - // message. + // Figure out whether to use the user-supplied message/subject or the default + // message/subject. $petition_message = NULL; + $subject = NULL; // If the petition has specified a message field if(!empty($message_field)) { // Retrieve the value of the field for this activity - $params = array('id' => $activity_id, - 'return' => array($message_field, 'activity_type_id')); + $params = array( + 'id' => $activity_id, + 'return' => $message_field + ); $result = civicrm_api3('Activity', 'getsingle', $params); if(!empty($result[$message_field])) { $petition_message = $result[$message_field]; } } - - // No user supplied message, use the default + // If the petition has specified a subject field + if(!empty($subject_field)) { + // Retrieve the value of the field for this activity + $params = array( + 'id' => $activity_id, + 'return' => $subject_field + ); + $result = civicrm_api3('Activity', 'getsingle', $params); + if(!empty($result[$subject_field])) { + $subject = $result[$subject_field]; + } + } + // No user supplied message/subject, use the default if(is_null($petition_message)) { $petition_message = $default_message; } + if(is_null($subject)) { + $subject = $default_subject; + } + $activity = civicrm_api3("Activity", "getsingle", array ('id' => $activity_id)); $contact_id = $activity['source_contact_id']; $contact = civicrm_api3("Contact", "getsingle", array ('id' => $contact_id)); diff --git a/sql/Petitionemail_1002_upgrade.sql b/sql/Petitionemail_1002_upgrade.sql new file mode 100644 index 0000000000000000000000000000000000000000..1bcc21db98a538f1af976a510c9f860239a97484 --- /dev/null +++ b/sql/Petitionemail_1002_upgrade.sql @@ -0,0 +1,4 @@ +-- +-- SQL statements to handle the 1002 upgrade + +ALTER TABLE civicrm_petition_email ADD COLUMN `subject_field` varchar(255) DEFAULT NULL COMMENT "The custom field used to store the petition signer's personal subject." AFTER default_message; diff --git a/sql/Petitionemail_base_install.sql b/sql/Petitionemail_base_install.sql index a23dae6fcd9c3449eac64635543c85af7ecab15d..7cc64792086091f32b49c921ed0279aa4ebb2ea1 100644 --- a/sql/Petitionemail_base_install.sql +++ b/sql/Petitionemail_base_install.sql @@ -7,6 +7,7 @@ CREATE TABLE IF NOT EXISTS `civicrm_petition_email` ( `location_type_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'The location type that should be used when selecting the target email address.', `default_message` text COMMENT 'The default message for the petition', `message_field` varchar(128) COMMENT 'The name of the custom field used for petition messages.', + `subject_field` varchar(255) DEFAULT NULL COMMENT "The custom field used to store the petition signer's personal subject.", `subject` varchar(128) DEFAULT NULL COMMENT 'The subject line for outgoing emails.', `recipients` text COMMENT 'The name and email address of additional targets that should receive a copy of all petitions signed, separated by line breaks.', PRIMARY KEY (`petition_id`), diff --git a/templates/CRM/Campaign/Form/Petitionemail.tpl b/templates/CRM/Campaign/Form/Petitionemail.tpl index 8e9668eddde23832680a5afe97237ebb7adc9a62..b27645aca58e51f776612d3a49db5f1d25e96b2d 100644 --- a/templates/CRM/Campaign/Form/Petitionemail.tpl +++ b/templates/CRM/Campaign/Form/Petitionemail.tpl @@ -8,6 +8,11 @@