123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671 |
- <?php
- /* For licensing terms, see /vendor/license.txt */
- /**
- * Class Clockworksms
- * This script handles incoming SMS information, process it and sends an SMS if everything is right
- *
- * @package chamilo.plugin.clockworksms.lib
- * @author Imanol Losada <imanol.losada@beeznest.com>
- *
- * Clockworksms-Chamilo connector class
- */
- class Clockworksms implements SmsPluginLibraryInterface
- {
- public $apiKey;
- public $api;
- public $plugin_enabled = false;
- /**
- * Constructor (generates a connection to the API)
- * @param string Clockworksms API key required to use the plugin
- * @return void
- */
- public function __construct($apiKey = null)
- {
- $plugin = ClockworksmsPlugin::create();
- $clockWorkSMSPlugin = $plugin->get('tool_enable');
- if (empty($apiKey)) {
- $clockWorkSMSApiKey = $plugin->get('api_key');
- } else {
- $clockWorkSMSApiKey = $apiKey;
- }
- $this->table = Database::get_main_table('user_field_values');
- if ($clockWorkSMSPlugin == true) {
- $this->apiKey = $clockWorkSMSApiKey;
- // Setting Clockworksms api
- if (!defined('CONFIG_SECURITY_API_KEY')) {
- define('CONFIG_SECURITY_API_KEY', $this->apiKey);
- }
- $trimmedApiKey = trim(CONFIG_SECURITY_API_KEY);
- if (!empty($trimmedApiKey)) {
- $this->api = new Clockwork(CONFIG_SECURITY_API_KEY);
- } else {
- $this->api = new Clockwork(' ');
- $recipient_name = api_get_person_name(
- api_get_setting('admin.administrator_name'),
- api_get_setting('admin.administrator_surname'),
- null,
- PERSON_NAME_EMAIL_ADDRESS
- );
- $email_form = api_get_setting('admin.administrator_email');
- $emailsubject = 'Clockworksms error';
- $emailbody = 'Key cannot be blank';
- $sender_name = $recipient_name;
- $email_admin = $email_form;
- api_mail_html(
- $recipient_name,
- $email_form,
- $emailsubject,
- $emailbody,
- $sender_name,
- $email_admin
- );
- }
- $this->plugin_enabled = true;
- }
- }
- /**
- * @inheritdoc
- */
- public function getMobilePhoneNumberById($userId)
- {
- $mobilePhoneNumberExtraField = new ExtraField('user');
- $mobilePhoneNumberExtraField = $mobilePhoneNumberExtraField->get_handler_field_info_by_field_variable('mobile_phone_number');
- $mobilePhoneNumberExtraFieldValue = new ExtraFieldValue('user');
- $mobilePhoneNumberExtraFieldValue = $mobilePhoneNumberExtraFieldValue->get_values_by_handler_and_field_id($userId, $mobilePhoneNumberExtraField['id']);
- return $mobilePhoneNumberExtraFieldValue['value'];
- }
- /**
- * send (sends an SMS to the user)
- * @param array Data needed to send the SMS. It is mandatory to include the
- * 'smsType' and 'userId' (or 'mobilePhoneNumber') fields at least.
- * More data may be neccesary depending on the message type
- * Example: $additional_parameters = array(
- * 'smsType' => EXAMPLE_SMS_TYPE,
- * 'userId' => $userId,
- * 'moreData' => $moreData
- * );
- * @return void
- */
- public function send($additionalParameters)
- {
- $trimmedKey = trim(CONFIG_SECURITY_API_KEY);
- if (!empty($trimmedKey)) {
- $phoneExists = array_key_exists("mobilePhoneNumber", $additionalParameters);
- $to = $phoneExists ? $additionalParameters['mobilePhoneNumber'] : $this->getMobilePhoneNumberById($additionalParameters['userId']);
- $message = array(
- "to" => $to,
- "message" => $this->getSms($additionalParameters)
- );
- if (!empty($message['message'])) {
- $result = $this->api->send($message);
- // Commented for future message logging / tracking purposes
- /*if ($result["success"]) {
- echo "Message sent - ID: " . $result["id"];
- } else {
- echo "Message failed - Error: " . $result["error_message"];
- }*/
- }
- }
- }
- /**
- * buildSms (builds an SMS from a template and data)
- * @param object ClockworksmsPlugin object
- * @param object Template object
- * @param string Template file name
- * @param string Text key from lang file
- * @param array Data to fill message variables (if any)
- * @return object Template object with message property updated
- */
- public function buildSms($plugin, $tpl, $templateName, $messageKey, $parameters = null)
- {
- $result = Database::select(
- 'selected_value',
- 'settings_current',
- array(
- 'where'=> array('variable = ?' => array('clockworksms_message'.$messageKey))
- )
- );
- //if (empty($result)) {
- if (0) {
- $tpl->assign('message', '');
- } else {
- $templatePath = 'clockworksms/sms_templates/';
- $content = $tpl->fetch($templatePath.$templateName);
- $message = $plugin->get_lang($messageKey);
- if ($parameters !== null) {
- $message = vsprintf($message, $parameters);
- }
- $tpl->assign('message', $message);
- }
- return $tpl->params['message'];
- }
- /**
- * getSms (returns an SMS message depending of its type)
- * @param array Data needed to send the SMS. It is mandatory to include the
- * 'smsType' and 'userId' (or 'mobilePhoneNumber') fields at least.
- * More data may be neccesary depending on the message type
- * Example: $additional_parameters = array(
- * 'smsType' => EXAMPLE_SMS_TYPE,
- * 'userId' => $userId,
- * 'moreData' => $moreData
- * );
- * @return string A ready to be sent SMS
- */
- public function getSms($additionalParameters)
- {
- $plugin = ClockworksmsPlugin::create();
- $tool_name = $plugin->get_lang('plugin_title');
- $tpl = new Template($tool_name);
- switch ($additionalParameters['smsType']) {
- case SmsPlugin::WELCOME_LOGIN_PASSWORD:
- $userInfo = api_get_user_info($additionalParameters['userId']);
- return $this->buildSms(
- $plugin,
- $tpl,
- 'welcome_login_password.tpl',
- 'WelcomeXLoginXPasswordX',
- array(
- api_get_setting('platform.site_name'),
- $userInfo['username'],
- $additionalParameters['password']
- )
- );
- break;
- case SmsPlugin::NEW_FILE_SHARED_COURSE_BY:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'new_file_shared_course_by.tpl',
- 'XNewFileSharedCourseXByX',
- array(
- api_get_setting('platform.site_name'),
- $additionalParameters['courseTitle'],
- $additionalParameters['userUsername']
- )
- );
- break;
- case SmsPlugin::ACCOUNT_APPROVED_CONNECT:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'account_approved_connect.tpl',
- 'XAccountApprovedConnectX',
- array(
- api_get_setting('platform.site_name'),
- $tpl->params['_p']['web']
- )
- );
- break;
- case SmsPlugin::NEW_COURSE_BEEN_CREATED:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'new_course_been_created.tpl',
- 'XNewCourseXBeenCreatedX',
- array(
- api_get_setting('platform.site_name'),
- $additionalParameters['courseName'],
- $additionalParameters['creatorUsername']
- )
- );
- break;
- case SmsPlugin::NEW_USER_SUBSCRIBED_COURSE:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'new_user_subscribed_course.tpl',
- 'XNewUserXSubscribedCourseX',
- array(
- api_get_setting('platform.site_name'),
- $additionalParameters['userUsername'],
- $additionalParameters['courseCode']
- )
- );
- break;
- case SmsPlugin::NEW_COURSE_SUGGESTED_TEACHER:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'new_course_suggested_teacher.tpl',
- 'XNewCourseSuggestedTeacherX',
- array(
- api_get_setting('platform.site_name'),
- $additionalParameters['userUsername']
- )
- );
- break;
- case SmsPlugin::COURSE_OPENING_REQUEST_CODE_REGISTERED:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'course_opening_request_code_registered.tpl',
- 'XCourseOpeningRequestCodeXRegistered',
- array(
- api_get_setting('platform.site_name'),
- $additionalParameters['courseCode']
- )
- );
- break;
- case SmsPlugin::COURSE_OPENING_REQUEST_CODE_APPROVED:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'course_opening_request_course_code_approved.tpl',
- 'XCourseOpeningRequestCourseCodeXApproved',
- array(
- api_get_setting('platform.site_name'),
- $additionalParameters['courseCode']
- )
- );
- break;
- case SmsPlugin::COURSE_OPENING_REQUEST_CODE_REJECTED:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'request_open_course_code_rejected.tpl',
- 'XRequestOpenCourseCodeXReject',
- array(
- api_get_setting('platform.site_name'),
- $additionalParameters['courseCode']
- )
- );
- break;
- case SmsPlugin::COURSE_OPENING_REQUEST_CODE:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'course_opening_request_course_code.tpl',
- 'XCourseOpeningRequestCourseCodeX',
- array(
- api_get_setting('platform.site_name'),
- $additionalParameters['courseCode']
- )
- );
- break;
- case SmsPlugin::BEEN_SUBSCRIBED_COURSE:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'been_subscribed_course.tpl',
- 'XBeenSubscribedCourseX',
- array(
- api_get_setting('platform.site_name'),
- $additionalParameters['courseTitle']
- )
- );
- break;
- case SmsPlugin::ASSIGNMENT_BEEN_CREATED_COURSE:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'assignment_been_created_course.tpl',
- 'XAssignmentBeenCreatedCourseX',
- array(
- api_get_setting('platform.site_name'),
- $additionalParameters['courseTitle']
- )
- );
- break;
- // Message types to be implemented. Fill the array parameter with arguments.
- /*case SmsPlugin::ACCOUNT_CREATED_UPDATED_LOGIN_PASSWORD:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'account_created_updated_login_password.tpl',
- 'XAccountCreatedUpdatedLoginXPasswordX',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::PASSWORD_UPDATED_LOGIN_PASSWORD:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'password_updated_login_password.tpl',
- 'XPasswordUpdatedLoginXPasswordX',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::REQUESTED_PASSWORD_CHANGE:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'requested_password_change.tpl',
- 'XPasswordUpdatedLoginXPasswordX',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::RECEIVED_NEW_PERSONAL_MESSAGES:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'received_new_personal_messages.tpl',
- 'XReceivedNewPersonalMessages',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::NEW_USER_PENDING_APPROVAL:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'new_user_pending_approval.tpl',
- 'XNewUserXPendingApproval',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::POSTED_FORUM_COURSE:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'posted_forum_course.tpl',
- 'XXPostedForumXCourseX',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::CHECK_EMAIL_CONNECT_MORE_INFO:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'check_email_connect_more_info.tpl',
- 'XXXCheckEmailConnectMoreInfo',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::STUDENT_ANSWERED_TEST:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'student_answered_test.tpl',
- 'XXStudentXAnsweredTestX',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::STUDENT_ANSWERED_TEST_OPEN_QUESTION:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'student_answered_test_open_question.tpl',
- 'XXStudentXAnsweredTestXOpenQuestion',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::STUDENT_ANSWERED_TEST_VOICE_QUESTION:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'student_answered_test_voice_question.tpl',
- 'XXStudentXAnsweredTestXVoiceQuestion',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::ANSWER_OPEN_QUESTION_TEST_REVIEWED:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'answer_open_question_test_reviewed.tpl',
- 'XXAnswerOpenQuestionTestXReviewed',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::NEW_THREAD_STARTED_FORUM:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'new_thread_started_forum.tpl',
- 'XXNewThreadXStartedForumX',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::NEW_ANSWER_POSTED_FORUM:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'new_answer_posted_forum.tpl',
- 'XXNewAnswerPostedXForumX',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::NEW_SYSTEM_ANNOUNCEMENT_ADDED:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'new_system_announcement_added.tpl',
- 'XXNewSystemAnnouncementAdded',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::TEST_NEW_SYSTEM_ANNOUNCEMENT_ADDED:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'test_new_system_announcement_added.tpl',
- 'XTestXNewSystemAnnouncementAdded',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::SYSTEM_ANNOUNCEMENT_UPDATE:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'system_announcement_update.tpl',
- 'XXSystemAnnouncementUpdate',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::TEST_SYSTEM_ANNOUNCEMENT_UPDATE:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'test_system_announcement_update.tpl',
- 'XXSystemAnnouncementUpdate',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::USER_UPLOADED_ASSIGNMENT_COURSE_STUDENT_SUBMITS_PAPER:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'user_uploaded_assignment_course_student_submits_paper.tpl',
- 'XUserXUploadedAssignmentXCourseXStudentSubmitsPaper',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::USER_UPLOADED_ASSIGNMENT_CHECK_STUDENT_SUBMITS_PAPER:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'user_uploaded_assignment_check_student_submits_paper.tpl',
- 'XUserXUploadedAssignmentXCheckXStudentSubmitsPaper',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::USER_UPLOADED_ASSIGNMENT_COURSE:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'user_uploaded_assignment_course.tpl',
- 'XUserXUploadedAssignmentXCourseX',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::USER_UPLOADED_ASSIGNMENT_CHECK:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'user_uploaded_assignment_check.tpl',
- 'XUserXUploadedAssignmentXCheckX',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::SUBSCRIBED_SESSION:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'subscribed_session.tpl',
- 'XSubscribedSessionX',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::SUBSCRIBED_SESSION_CSV:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'subscribed_session_csv.tpl',
- 'XSubscribedSessionXCSV',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::USER_SUGGESTED_BE_FRIENDS:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'user_suggested_be_friends.tpl',
- 'XUserXSuggestedBeFriends',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::USER_ANSWERED_INBOX_MESSAGE:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'user_answered_inbox_message.tpl',
- 'XUserXAnsweredInboxMessage',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::BEEN_INVITED_JOIN_GROUP:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'been_invited_join_group.tpl',
- 'XBeenInvitedJoinGroupX',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::MESSAGES_SENT_EDITED_GROUP_EDITED:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'messages_sent_edited_group_edited.tpl',
- 'XMessagesSentEditedGroupXEdited',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::MESSAGES_SENT_EDITED_GROUP_ADDED:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'messages_sent_edited_group_added.tpl',
- 'XMessagesSentEditedGroupXAdded',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::BEEN_INVITED_COMPLETE_SURVEY_COURSE:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'been_invited_complete_survey_course.tpl',
- 'XBeenInvitedCompleteSurveyXCourseX',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::REMINDER_ASSIGNMENT_COURSE_DUE:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'reminder_assignment_course_due.tpl',
- 'XReminderAssignmentXCourseXDue',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- /*case SmsPlugin::USER_DETAILS_MODIFIED:
- return $this->buildSms(
- $plugin,
- $tpl,
- 'user_details_modified.tpl',
- 'XUserDetailsModified',
- array(
- api_get_setting('platform.site_name')
- )
- );
- break;*/
- default:
- return '';
- }
- }
- }
|