* * 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 */ 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('administratorName'), api_get_setting('administratorSurname'), null, PERSON_NAME_EMAIL_ADDRESS ); $email_form = api_get_setting('emailAdministrator'); $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('siteName'), $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('siteName'), $additionalParameters['courseTitle'], $additionalParameters['userUsername'] ) ); break; case SmsPlugin::ACCOUNT_APPROVED_CONNECT: return $this->buildSms( $plugin, $tpl, 'account_approved_connect.tpl', 'XAccountApprovedConnectX', array( api_get_setting('siteName'), $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('siteName'), $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('siteName'), $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('siteName'), $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('siteName'), $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('siteName'), $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('siteName'), $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('siteName'), $additionalParameters['courseCode'] ) ); break; case SmsPlugin::BEEN_SUBSCRIBED_COURSE: return $this->buildSms( $plugin, $tpl, 'been_subscribed_course.tpl', 'XBeenSubscribedCourseX', array( api_get_setting('siteName'), $additionalParameters['courseTitle'] ) ); break; case SmsPlugin::ASSIGNMENT_BEEN_CREATED_COURSE: return $this->buildSms( $plugin, $tpl, 'assignment_been_created_course.tpl', 'XAssignmentBeenCreatedCourseX', array( api_get_setting('siteName'), $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('siteName') ) ); break;*/ /*case SmsPlugin::PASSWORD_UPDATED_LOGIN_PASSWORD: return $this->buildSms( $plugin, $tpl, 'password_updated_login_password.tpl', 'XPasswordUpdatedLoginXPasswordX', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::REQUESTED_PASSWORD_CHANGE: return $this->buildSms( $plugin, $tpl, 'requested_password_change.tpl', 'XPasswordUpdatedLoginXPasswordX', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::RECEIVED_NEW_PERSONAL_MESSAGES: return $this->buildSms( $plugin, $tpl, 'received_new_personal_messages.tpl', 'XReceivedNewPersonalMessages', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::NEW_USER_PENDING_APPROVAL: return $this->buildSms( $plugin, $tpl, 'new_user_pending_approval.tpl', 'XNewUserXPendingApproval', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::POSTED_FORUM_COURSE: return $this->buildSms( $plugin, $tpl, 'posted_forum_course.tpl', 'XXPostedForumXCourseX', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::CHECK_EMAIL_CONNECT_MORE_INFO: return $this->buildSms( $plugin, $tpl, 'check_email_connect_more_info.tpl', 'XXXCheckEmailConnectMoreInfo', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::STUDENT_ANSWERED_TEST: return $this->buildSms( $plugin, $tpl, 'student_answered_test.tpl', 'XXStudentXAnsweredTestX', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::STUDENT_ANSWERED_TEST_OPEN_QUESTION: return $this->buildSms( $plugin, $tpl, 'student_answered_test_open_question.tpl', 'XXStudentXAnsweredTestXOpenQuestion', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::STUDENT_ANSWERED_TEST_VOICE_QUESTION: return $this->buildSms( $plugin, $tpl, 'student_answered_test_voice_question.tpl', 'XXStudentXAnsweredTestXVoiceQuestion', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::ANSWER_OPEN_QUESTION_TEST_REVIEWED: return $this->buildSms( $plugin, $tpl, 'answer_open_question_test_reviewed.tpl', 'XXAnswerOpenQuestionTestXReviewed', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::NEW_THREAD_STARTED_FORUM: return $this->buildSms( $plugin, $tpl, 'new_thread_started_forum.tpl', 'XXNewThreadXStartedForumX', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::NEW_ANSWER_POSTED_FORUM: return $this->buildSms( $plugin, $tpl, 'new_answer_posted_forum.tpl', 'XXNewAnswerPostedXForumX', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::NEW_SYSTEM_ANNOUNCEMENT_ADDED: return $this->buildSms( $plugin, $tpl, 'new_system_announcement_added.tpl', 'XXNewSystemAnnouncementAdded', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::TEST_NEW_SYSTEM_ANNOUNCEMENT_ADDED: return $this->buildSms( $plugin, $tpl, 'test_new_system_announcement_added.tpl', 'XTestXNewSystemAnnouncementAdded', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::SYSTEM_ANNOUNCEMENT_UPDATE: return $this->buildSms( $plugin, $tpl, 'system_announcement_update.tpl', 'XXSystemAnnouncementUpdate', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::TEST_SYSTEM_ANNOUNCEMENT_UPDATE: return $this->buildSms( $plugin, $tpl, 'test_system_announcement_update.tpl', 'XXSystemAnnouncementUpdate', array( api_get_setting('siteName') ) ); 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('siteName') ) ); 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('siteName') ) ); break;*/ /*case SmsPlugin::USER_UPLOADED_ASSIGNMENT_COURSE: return $this->buildSms( $plugin, $tpl, 'user_uploaded_assignment_course.tpl', 'XUserXUploadedAssignmentXCourseX', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::USER_UPLOADED_ASSIGNMENT_CHECK: return $this->buildSms( $plugin, $tpl, 'user_uploaded_assignment_check.tpl', 'XUserXUploadedAssignmentXCheckX', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::SUBSCRIBED_SESSION: return $this->buildSms( $plugin, $tpl, 'subscribed_session.tpl', 'XSubscribedSessionX', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::SUBSCRIBED_SESSION_CSV: return $this->buildSms( $plugin, $tpl, 'subscribed_session_csv.tpl', 'XSubscribedSessionXCSV', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::USER_SUGGESTED_BE_FRIENDS: return $this->buildSms( $plugin, $tpl, 'user_suggested_be_friends.tpl', 'XUserXSuggestedBeFriends', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::USER_ANSWERED_INBOX_MESSAGE: return $this->buildSms( $plugin, $tpl, 'user_answered_inbox_message.tpl', 'XUserXAnsweredInboxMessage', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::BEEN_INVITED_JOIN_GROUP: return $this->buildSms( $plugin, $tpl, 'been_invited_join_group.tpl', 'XBeenInvitedJoinGroupX', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::MESSAGES_SENT_EDITED_GROUP_EDITED: return $this->buildSms( $plugin, $tpl, 'messages_sent_edited_group_edited.tpl', 'XMessagesSentEditedGroupXEdited', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::MESSAGES_SENT_EDITED_GROUP_ADDED: return $this->buildSms( $plugin, $tpl, 'messages_sent_edited_group_added.tpl', 'XMessagesSentEditedGroupXAdded', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::BEEN_INVITED_COMPLETE_SURVEY_COURSE: return $this->buildSms( $plugin, $tpl, 'been_invited_complete_survey_course.tpl', 'XBeenInvitedCompleteSurveyXCourseX', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::REMINDER_ASSIGNMENT_COURSE_DUE: return $this->buildSms( $plugin, $tpl, 'reminder_assignment_course_due.tpl', 'XReminderAssignmentXCourseXDue', array( api_get_setting('siteName') ) ); break;*/ /*case SmsPlugin::USER_DETAILS_MODIFIED: return $this->buildSms( $plugin, $tpl, 'user_details_modified.tpl', 'XUserDetailsModified', array( api_get_setting('siteName') ) ); break;*/ default: return ''; } } }