function send_newsletter($send_id) { checkPerm('view'); require_once _base_ . '/lib/lib.json.php'; $json = new Services_JSON(); $path = '/appCore/newsletter/'; //access control $nl_sendpercycle = $GLOBALS["framework"]["nl_sendpercycle"]; //-TP// funAdminAccess('OP'); //@set_time_limit(60*15); // 15 minutes! $out =& $GLOBALS['page']; $out->setWorkingZone("content"); $lang =& DoceboLanguage::createInstance('admin_newsletter', 'framework'); $out->add(getTitleArea($lang->def("_NEWSLETTER"), "newsletter")); $out->add("<div class=\"std_block\">\n"); $info = get_send_info($send_id); $sel_groups = $info["sel_groups"]; $sel_lang = $info["sel_lang"]; $tot = $info["tot"]; $sub = $info["sub"]; $msg = $info["msg"]; $msg = str_replace("{site_base_url}", getSiteBaseUrl(), $msg); $fromemail = $info["fromemail"]; $file_array = $json->decode($info['file']); $attach = array(); foreach ($file_array as $file) { $attach[] = '../files' . $path . $file; } $cycle = (int) $_GET["cycle"]; // Items per cycle $ipc = $nl_sendpercycle; if (($cycle + 1) * $ipc < $tot) { $sendcomplete = 0; } else { $sendcomplete = 1; } $limit = $cycle * $ipc . ", " . $ipc; $arr_st = getSendToIdst($send_id, $limit); $acl_manager = Docebo::user()->getAclManager(); if (!empty($sel_lang) && $sel_lang != _ANY_LANG_CODE) { $user_info = $acl_manager->getUsersByLanguage($sel_lang, $arr_st); } else { // Send to all languages $user_info = $acl_manager->getUsers($arr_st); } $send_type = $info["send_type"]; switch ($send_type) { case "email": $tempemail = array(); foreach ($user_info as $info) { // collect recipients email addresses: ------------------------------ $email = $info[ACL_INFO_EMAIL]; if ($email != "") { $tempemail[] = $email; } // ---------------------------------------------- } //send all mails require_once _base_ . '/lib/lib.mailer.php'; $mailer = DoceboMailer::getInstance(); if (count($attach)) { $mailer->SendMail($fromemail, $tempemail, $sub, $msg, $attach, array(MAIL_REPLYTO => $fromemail, MAIL_SENDER_ACLNAME => false)); } else { $mailer->SendMail($fromemail, $tempemail, $sub, $msg, false, array(MAIL_REPLYTO => $fromemail, MAIL_SENDER_ACLNAME => false)); } break; case "sms": // Collect users sms numbers require_once $GLOBALS["where_framework"] . "/lib/lib.field.php"; $acl_man =& Docebo::user()->getACLManager(); $field_man = new FieldList(); $arr_sms_recipients = array(); $send_to_field = Get::sett('sms_cell_num_field'); $users_sms = $field_man->showFieldForUserArr($arr_st, array($send_to_field)); $users_info = $acl_man->getUsers($arr_st); while (list(, $user_dett) = each($users_info)) { // recover media setting $idst_user = $user_dett[ACL_INFO_IDST]; if ($users_sms[$idst_user][$send_to_field] != '') { $arr_sms_recipients[$idst_user] = $users_sms[$idst_user][$send_to_field]; } } require_once $GLOBALS["where_framework"] . "/lib/lib.sms.php"; $sms_manager = new SmsManager(); $sms_manager->sendSms($msg, $arr_sms_recipients); break; } if ($sendcomplete) { require_once _base_ . '/lib/lib.upload.php'; if (count($attach)) { foreach ($attach as $file) { sl_open_fileoperations(); sl_unlink(str_replace('../files', '', $file)); sl_close_fileoperations(); } } $url = "index.php?modname=public_newsletter_admin&op=complete"; Util::jump_to($url); } else { $url = "index.php?modname=public_newsletter_admin&op=pause&ipc=" . $ipc . "&cycle=" . ($cycle + 1) . "&id_send=" . $send_id; Util::jump_to($url); } $out->add("</div><br />\n"); $out->add("<form action=\"index.php?modname=public_newsletter_admin&op=newsletter\" method=\"post\">\n"); $out->add("<div class=\"std_block\">\n" . '<input type="hidden" id="authentic_request_pubr" name="authentic_request" value="' . Util::getSignature() . '" />'); $out->add("<input class=\"button\" type=\"submit\" value=\"" . $lang->def("_BACK") . "\" />\n"); $out->add("</div>\n"); $out->add("</form>\n"); }
function getMappedFields($field_list, $id) { $res = array(); $debug = FALSE; require_once $GLOBALS["where_framework"] . "/lib/lib.field.php"; $fl = new FieldList(); $field_map_info = $this->getFieldMap(); $field_map = $field_map_info["map"]; $map_custom_fields = $field_map_info["custom_fields"]; if ($debug) { echo "<pre>\n"; print_r($field_map_info); } //--DEBUG--// unset($field_map_info); $fl->setFieldEntryTable($this->_getMapFromTable()); $user_field_arr = $fl->showFieldForUserArr(array($id), $field_list); // to cache: arr[id]=res if ($debug) { print_r($user_field_arr); } //--DEBUG--// if (is_array($user_field_arr[$id])) { $field_val = $user_field_arr[$id]; } else { $field_val = array(); } // This way we are going to load only the information // about the fields we really need. $field_list = $field_list + $map_custom_fields; if ($debug) { print_r($field_list); } //--DEBUG--// $field_info = $fl->getFieldsFromArray($field_list); // to cache? maybe one for all if ($debug) { print_r($field_info); } //--DEBUG--// // $mro: Map Resource Object (array) // We'll use this later to read predefined fields names $mro = array(); foreach ($this->getResourceList("list") as $code => $resource) { require_once $resource["class_path"] . $resource["class_file"]; $mro[$code] = new $resource["class_name"](); } // Creating empty schema that will contain useful information // like field description.. foreach ($mro as $resource => $resource_obj) { foreach ($resource_obj->getRawPredefinedFields() as $code) { $res[$resource]["predefined"][$code]["description"] = $resource_obj->getPredefinedFieldLabel($code); $res[$resource]["predefined"][$code]["value"] = ""; } } foreach ($field_info as $field_id => $info) { if (isset($field_map[$field_id])) { $type = $field_map[$field_id]["type"]; $resource = $field_map[$field_id]["resource"]; $new_id = $field_map[$field_id]["map_to"]; if ($type == "custom") { $res[$resource][$type][$new_id]["description"] = $field_info[$new_id][FIELD_INFO_TRANSLATION]; } $res[$resource][$type][$new_id]["value"] = $field_val[$field_id]; } else { if (!isset($field_map[$field_id]) && !in_array($field_id, $map_custom_fields)) { $resource = "_not_mapped"; $type = "custom"; $res[$resource][$type][$field_id]["description"] = $field_info[$field_id][FIELD_INFO_TRANSLATION]; $res[$resource][$type][$field_id]["value"] = $field_val[$field_id]; if ($debug && empty($field_val[$field_id])) { echo $field_id . " :: "; } } } } if ($debug) { print_r($res); echo "\n</pre>\n"; } //--DEBUG--// return $res; }
function actionEvent(&$event) { parent::actionEvent($event); // initializing require_once _adm_ . '/lib/lib.field.php'; $acl_man =& Docebo::user()->getACLManager(); $field_man = new FieldList(); $send_to_field = Get::sett('sms_cell_num_field'); $arr_mail_recipients = array(); $arr_sms_recipients = array(); // recover event information $arr_recipients = explode(',', $event->getProperty('recipientid')); $msg_composer = unserialize(urldecode($event->getProperty('MessageComposer'))); $msg_composer->after_unserialize(); $force_email_send = $event->getProperty('force_email_send'); if (!is_array($arr_recipients) || empty($arr_recipients)) { return; } // recover user info and convert to idst if required if (is_numeric($arr_recipients[0])) { $idst_users =& $arr_recipients; } else { $idst_users = $acl_man->fromUseridToIdst($arr_recipients); } $users_info =& $acl_man->getUsers($idst_users); // recove setting $users_lang = $acl_man->getSettingValueOfUsers('ui.language', false, true); $users_sms = $field_man->showFieldForUserArr($idst_users, array($send_to_field)); // scan all users if (!is_array($users_info) || empty($users_info)) { return; } while (list(, $user_dett) = each($users_info)) { if ($user_dett[ACL_INFO_VALID] == '1') { // recover media setting $idst_user = $user_dett[ACL_INFO_IDST]; $media = usernotifier_getUserEventChannel($idst_user, $event->getClassName()); $lang = isset($users_lang[$idst_user]) && $users_lang[$idst_user] !== NULL ? $users_lang[$idst_user] : getDefaultLanguage(); if (in_array('email', $media) || $force_email_send == 'true') { if ($user_dett[ACL_INFO_EMAIL] != '') { $arr_mail_recipients[$lang][$idst_user] = $user_dett[ACL_INFO_EMAIL]; } } if (in_array('sms', $media)) { if ($users_sms[$idst_user][$send_to_field] != '') { $arr_sms_recipients[$lang][$idst_user] = $users_sms[$idst_user][$send_to_field]; } } } } if (!empty($arr_mail_recipients)) { $lang_mail = array_keys($arr_mail_recipients); foreach ($lang_mail as $lang_code) { reset($arr_mail_recipients[$lang_code]); $this->_sendMail($msg_composer->getSubject('email', $lang_code), $msg_composer->getBody('email', $lang_code), $arr_mail_recipients[$lang_code], $users_info); } } if (!empty($arr_sms_recipients)) { $lang_sms = array_keys($arr_sms_recipients); foreach ($lang_sms as $lang_code) { reset($arr_sms_recipients[$lang_sms]); $this->_sendSms($msg_composer->getBody('sms', $lang_code), $arr_sms_recipients[$lang_code], $users_info); } } return true; }