diff --git a/Civi/GeotargetedPetitions/PetitionSubmission.php b/Civi/GeotargetedPetitions/PetitionSubmission.php index 06b73ae3b578b1db6baede504d0b0090ab928821..0fc2881c7699caf89c1e5fc0b532c66f4220d67f 100644 --- a/Civi/GeotargetedPetitions/PetitionSubmission.php +++ b/Civi/GeotargetedPetitions/PetitionSubmission.php @@ -44,7 +44,7 @@ class PetitionSubmission { $petitionForm['subject3'] ]; // Get a random subject from petition values - $subject = _randomizeSubject($subjects); + $randomSubject = _randomizeSubject($subjects); $assignee_contact_ids = []; $first_name = $submittedFields['Individual1'][0]['fields']['first_name']; $last_name = $submittedFields['Individual1'][0]['fields']['last_name']; @@ -106,7 +106,8 @@ class PetitionSubmission { 'from' => $updatedFromEmail, 'replyTo' => $replyTo, 'html' => $body, - 'subject' => $subject, + // Use submitted message subject as js has randomised it or if subject wasn't on the form use the php random subject + 'subject' => $fields['message_subject'] ?? $randomSubject, ]; if ($sandboxMode) { // SANDBOX MODE: send email to logged-in user @@ -138,7 +139,7 @@ class PetitionSubmission { } } Activity::create(FALSE) - ->addValue('subject', $subject) + ->addValue('subject', $fields['message_subject'] ?? $randomSubject) ->addValue('details', $body) ->addValue('activity_type_id:name', 'Petition Signature') ->addValue('source_contact_id', $event->getEntityIds('Individual1')[0]) diff --git a/lib/js/form.js b/lib/js/form.js index 9653eda41b9f383ced2615aa18052cc1d7e15d5a..398f912551bfdf8dd1f1aa44177507c6b118228a 100644 --- a/lib/js/form.js +++ b/lib/js/form.js @@ -18,6 +18,23 @@ function waitForElm(selector) { }); }); } +function shuffle(array) { + let currentIndex = array.length, randomIndex; + + // While there remain elements to shuffle. + while (currentIndex > 0) { + + // Pick a remaining element. + randomIndex = Math.floor(Math.random() * currentIndex); + currentIndex--; + + // And swap it with the current element. + [array[currentIndex], array[randomIndex]] = [ + array[randomIndex], array[currentIndex]]; + } + + return array; +} (function ($, angular) { let default_recipients_set = {}; let representatives = addRepresentativesSection(); @@ -66,7 +83,16 @@ function waitForElm(selector) { }).then(function (settings) { if (settings.length) { if (messageSubjectAfField.length) { - messageSubjectAfField.find('input').val(settings[0].subject1).trigger('change'); + let subjects = []; + let possiblesubjects = ['subject1', 'subject2', 'subject3']; + for (i=0; i < possiblesubjects.length; i++) { + if (settings[0][possiblesubjects[i]].length > 0) { + subjects.push(possiblesubjects[i]); + } + } + subjects = shuffle(subjects); + let randomNumber = Math.floor(Math.random() * subjects.length); + messageSubjectAfField.find('input').val(settings[0][subjects[randomNumber]]).trigger('change'); } // fill in the default message fields if (messageEditableAfField.length) {