From 2b5e4108f0aa19716329dc41d7c8b81555ccdfae Mon Sep 17 00:00:00 2001 From: Siddhant Rajagopalan Date: Sat, 26 Jul 2014 19:05:44 +0530 Subject: [PATCH] Working Tokens and some apis --- CRM/Mailing/Info.php | 3 + api/v3/Mailing.php | 119 ++++++++++++++++++++++++++++++++ api/v3/MailingEventQueue.php | 77 +++++++++++++++++++++ js/angular-newMailing.js | 42 ++++++++++- partials/crmMailingType/ht.html | 14 ++-- 5 files changed, 248 insertions(+), 7 deletions(-) create mode 100644 api/v3/MailingEventQueue.php diff --git a/CRM/Mailing/Info.php b/CRM/Mailing/Info.php index 2e81537206..feeb4eab06 100644 --- a/CRM/Mailing/Info.php +++ b/CRM/Mailing/Info.php @@ -77,6 +77,8 @@ class CRM_Mailing_Info extends CRM_Core_Component_Info { 'id' => array('>' => 58), )); $mailGrp = civicrm_api3('MailingGroup','get', array()); + $mailTokens = civicrm_api3('Mailing', 'get_token', array( 'usage' => 'Mailing')); + CRM_Core_Resources::singleton()->addSetting(array( @@ -89,6 +91,7 @@ class CRM_Mailing_Info extends CRM_Core_Component_Info { 'mesTemplate' => array_values($mesTemplate['values']), 'emailAdd' => array_values($emailAdd['values']), 'mailGrp' => array_values($mailGrp['values']), + 'mailTokens' => array_values($mailTokens), ), )); return $result; diff --git a/api/v3/Mailing.php b/api/v3/Mailing.php index 116a4b021c..553a86bce6 100644 --- a/api/v3/Mailing.php +++ b/api/v3/Mailing.php @@ -53,6 +53,32 @@ function civicrm_api3_mailing_create($params, $ids = array()) { return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); } +function civicrm_api3_mailing_get_token($params) { + if (!array_key_exists("usage", $params)) { + throw new API_Exception('Mandatory keys missing from params array: entity'); + } + + $tokens = CRM_Core_SelectValues::contactTokens(); + switch ($params['usage']) { + case 'Mailing' : + $tokens = array_merge(CRM_Core_SelectValues::mailingTokens(), $tokens); + break; + case 'ScheduleEventReminder' : + $tokens = array_merge(CRM_Core_SelectValues::activityTokens(), $tokens); + $tokens = array_merge(CRM_Core_SelectValues::eventTokens(), $tokens); + $tokens = array_merge(CRM_Core_SelectValues::membershipTokens(), $tokens); + break; + case 'ManageEventScheduleReminder' : + $tokens = array_merge(CRM_Core_SelectValues::eventTokens(), $tokens); + break; + } + + return CRM_Utils_Token::formatTokensForDisplay($tokens); + +} + + + /** * Adjust Metadata for Create action * @@ -282,4 +308,97 @@ function civicrm_api3_mailing_update_email_resetdate($params) { return civicrm_api3_create_success(); } +function civicrm_api3_mailing_preview($params) { + civicrm_api3_verify_mandatory($params, + 'CRM_Mailing_DAO_Mailing', + array('id'), + FALSE + ); + $session = CRM_Core_Session::singleton(); + $mailing = new CRM_Mailing_BAO_Mailing(); + $mailing->id = $params['id']; + $mailing->find(TRUE); + CRM_Mailing_BAO_Mailing::tokenReplace($mailing); + // get and format attachments + $attachments = CRM_Core_BAO_File::getEntityFile('civicrm_mailing', $mailing->id); + $returnProperties = $mailing->getReturnProperties(); + $contactID = CRM_Utils_Array::value('contact_id', $params); + if (!$contactID) { + $contactID = $session->get('userID'); + } + $mailingParams = array('contact_id' => $contactID); + $details = CRM_Utils_Token::getTokenDetails($mailingParams, $returnProperties, TRUE, TRUE, NULL, $mailing->getFlattenedTokens()); + $mime = &$mailing->compose(NULL, NULL, NULL, $session->get('userID'), $fromEmail, $fromEmail, + TRUE, $details[0][$session->get('userID')], $attachments + ); + return array('html' => $mime->getHTMLBody(), 'text' => $mime->getTXTBody()); +} +function civicrm_api3_mailing_send_test($params) { + if (!array_key_exists('test_group', $params) && !array_key_exists('test_email', $params)) { + throw new API_Exception("Mandatory key(s) missing from params array: test_group and/or test_email field are required" ); + } + civicrm_api3_verify_mandatory($params, + 'CRM_Mailing_DAO_MailingJob', + array('mailing_id'), + FALSE + ); + $testEmailParams = _civicrm_api3_generic_replace_base_params($params); + $job = civicrm_api3('MailingJob', 'create', array('mailing_id' => $testEmailParams['mailing_id'], 'is_test' => 1)); + $testEmailParams['job_id'] = $job['id']; + $testEmailParams['emails'] = explode(',', $testEmailParams['test_email']); + if (!empty($params['test_email'])) { + $query = " +SELECT e.id, e.contact_id, e.email +FROM civicrm_email e +INNER JOIN civicrm_contact c ON e.contact_id = c.id +WHERE e.email IN ('" . implode("','", $testEmailParams['emails']) . "') +AND e.on_hold = 0 +AND c.is_opt_out = 0 +AND c.do_not_email = 0 +AND c.is_deceased = 0 +GROUP BY e.id +ORDER BY e.is_bulkmail DESC, e.is_primary DESC +"; + $dao = CRM_Core_DAO::executeQuery($query); + $emailDetail = array(); + // fetch contact_id and email id for all existing emails + while ($dao->fetch()) { + $emailDetail[$dao->email] = array( + 'contact_id' => $dao->contact_id, + 'email_id' => $dao->id, + ); + } + $dao->free(); + foreach ($testEmailParams['emails'] as $key => $email) { + $email = trim($email); + $contactId = $emailId = NULL; + if (array_key_exists($email, $emailDetail)) { + $emailId = $emailDetail[$email]['email_id']; + $contactId = $emailDetail[$email]['contact_id']; + } + if (!$contactId) { + //create new contact. + $contact = civicrm_api3('Contact', 'create', + array('contact_type' => 'Individual', + 'email' => $email, + 'api.Email.get' => array('return' => 'id') + ) + ); + $contactId = $contact['id']; + $emailId = $contact['values'][$contactId]['api.Email.get']['id']; + } + civicrm_api3('MailingEventQueue', 'create', + array('job_id' => $job['id'], + 'email_id' => $emailId, + 'contact_id' => $contactId + ) + ); + } + } + $isComplete = FALSE; + while (!$isComplete) { + $isComplete = CRM_Mailing_BAO_MailingJob::runJobs($testEmailParams); + } + return $isComplete; +} diff --git a/api/v3/MailingEventQueue.php b/api/v3/MailingEventQueue.php new file mode 100644 index 0000000000..7ac20a42bb --- /dev/null +++ b/api/v3/MailingEventQueue.php @@ -0,0 +1,77 @@ +id]); + return civicrm_api3_create_success($mailingEventQueueArray); +} + +/** + * Adjust Metadata for Create action + * + * The metadata is used for setting defaults, documentation & validation + * @param array $params array or parameters determined by getfields + */ +function _civicrm_api3_mailing_event_queue_create_spec(&$params) { + $params['job_id']['api.required'] = 1; + $params['contact_id']['api.required'] = 1; +} diff --git a/js/angular-newMailing.js b/js/angular-newMailing.js index 0a9ffaaec1..49502a4bee 100644 --- a/js/angular-newMailing.js +++ b/js/angular-newMailing.js @@ -7,7 +7,7 @@ var crmMailing = angular.module('crmMailing', ['ngRoute', 'ui.utils']); var chck = []; //to fill the group variable $scope.incGroup var chck2= []; // to get id and text in the required format - + var mltokens = []; //------------------------------------------------------------------------------------------------------- crmMailing.config(['$routeProvider', function($routeProvider) { @@ -72,10 +72,13 @@ $scope.tmpList = CRM.crmMailing.mesTemplate; $scope.mailingGrp = CRM.crmMailing.mailGrp; $scope.currentMailing = selectedMail; + mltokens = CRM.crmMailing.mailTokens; + console.log(mltokens); $scope.testGroup = ""; window.ct = $scope.currentMailing; $scope.param = {}; $scope.tst=""; + $scope.token = ""; chck = []; chck2 = []; $scope.mailid = []; @@ -431,6 +434,7 @@ $(element).select2({ width:"400px", + placeholder: "Choose Recipients", formatResult: format, formatSelection: format, escapeMarkup: function(m) { return m; }, @@ -464,6 +468,42 @@ }; }); + crmMailing.directive('groupselect',function(){ + return { + restrict : 'AE', + link: function(scope,element, attrs){ + $(element).select2({width:"200px", data: mltokens, placeholder:"Insert Token"}); + + + $(element).on('select2-selecting', function(e) { + scope.$evalAsync('_resetSelection()');console.log(mltokens); + /* if(scope.currentMailing.body_html == null){ + scope.currentMailing.body_html = e.val; + } + else + scope.currentMailing.body_html = scope.currentMailing.body_html + e.val; +*/ + var msg = document.getElementById("body_html").value; + var cursorlen = document.getElementById("body_html").selectionStart; + console.log(cursorlen); + var textlen = msg.length; + document.getElementById("body_html").value = msg.substring(0, cursorlen) + e.val + msg.substring(cursorlen, textlen); + scope.currentMailing.body_html = msg.substring(0, cursorlen) + e.val + msg.substring(cursorlen, textlen); + console.log(document.getElementById("body_html").value); + console.log(scope.currentMailing.body_html); + var cursorPos = (cursorlen + e.val.length); + document.getElementById("body_html").selectionStart = cursorPos; + document.getElementById("body_html").selectionEnd = cursorPos; + document.getElementById("body_html").focus(); + scope.$apply(); + e.preventDefault(); + }) + + } + }; + + }); + // Used for the select date option. This is used for giving scheduled_date its date value crmMailing.directive('chsdate',function(){ return { diff --git a/partials/crmMailingType/ht.html b/partials/crmMailingType/ht.html index ee84fdd054..e69b9c3bcf 100644 --- a/partials/crmMailingType/ht.html +++ b/partials/crmMailingType/ht.html @@ -1,10 +1,12 @@ - +
+                                                +                                                +                                + + +

        - +

-- 2.25.1