Deleted clockwork unused plugin #2661

pull/2715/head
Julio 7 years ago
parent 0d7a092af2
commit 8cd209ad8d
  1. 10
      .codeclimate.yml
  2. 2
      .php_cs.dist
  3. 10
      .scrutinizer.yml
  4. 6
      plugin/clockworksms/README.md
  5. 15
      plugin/clockworksms/config.php
  6. 1
      plugin/clockworksms/index.php
  7. 13
      plugin/clockworksms/install.php
  8. 102
      plugin/clockworksms/lang/english.php
  9. 102
      plugin/clockworksms/lang/spanish.php
  10. 676
      plugin/clockworksms/lib/clockworksms.lib.php
  11. 50
      plugin/clockworksms/lib/clockworksms_plugin.class.php
  12. 5
      plugin/clockworksms/license.txt
  13. 11
      plugin/clockworksms/plugin.php
  14. 1
      plugin/clockworksms/sms_templates/account_approved_connect.tpl
  15. 1
      plugin/clockworksms/sms_templates/account_created_updated_login_password.tpl
  16. 1
      plugin/clockworksms/sms_templates/answer_open_question_test_reviewed.tpl
  17. 1
      plugin/clockworksms/sms_templates/assignment_been_created_course.tpl
  18. 1
      plugin/clockworksms/sms_templates/been_invited_complete_survey_course.tpl
  19. 1
      plugin/clockworksms/sms_templates/been_invited_join_group.tpl
  20. 1
      plugin/clockworksms/sms_templates/been_subscribed_course.tpl
  21. 1
      plugin/clockworksms/sms_templates/certificate_notification.tpl
  22. 1
      plugin/clockworksms/sms_templates/check_email_connect_more_info.tpl
  23. 1
      plugin/clockworksms/sms_templates/course_opening_request_code_registered.tpl
  24. 1
      plugin/clockworksms/sms_templates/course_opening_request_course_code.tpl
  25. 1
      plugin/clockworksms/sms_templates/course_opening_request_course_code_approved.tpl
  26. 1
      plugin/clockworksms/sms_templates/messages_sent_edited_group_added.tpl
  27. 1
      plugin/clockworksms/sms_templates/messages_sent_edited_group_edited.tpl
  28. 1
      plugin/clockworksms/sms_templates/new_answer_posted_forum.tpl
  29. 1
      plugin/clockworksms/sms_templates/new_course_been_created.tpl
  30. 1
      plugin/clockworksms/sms_templates/new_course_suggested_teacher.tpl
  31. 1
      plugin/clockworksms/sms_templates/new_file_shared_course_by.tpl
  32. 1
      plugin/clockworksms/sms_templates/new_system_announcement_added.tpl
  33. 1
      plugin/clockworksms/sms_templates/new_thread_started_forum.tpl
  34. 1
      plugin/clockworksms/sms_templates/new_user_pending_approval.tpl
  35. 1
      plugin/clockworksms/sms_templates/new_user_subscribed_course.tpl
  36. 1
      plugin/clockworksms/sms_templates/password_updated_login_password.tpl
  37. 1
      plugin/clockworksms/sms_templates/posted_forum_course.tpl
  38. 1
      plugin/clockworksms/sms_templates/received_new_personal_messages.tpl
  39. 1
      plugin/clockworksms/sms_templates/reminder_assignment_course_due.tpl
  40. 1
      plugin/clockworksms/sms_templates/request_open_course_code_rejected.tpl
  41. 1
      plugin/clockworksms/sms_templates/requested_password_change.tpl
  42. 1
      plugin/clockworksms/sms_templates/student_answered_test.tpl
  43. 1
      plugin/clockworksms/sms_templates/student_answered_test_open_question.tpl
  44. 1
      plugin/clockworksms/sms_templates/student_answered_test_voice_question.tpl
  45. 1
      plugin/clockworksms/sms_templates/subscribed_session.tpl
  46. 1
      plugin/clockworksms/sms_templates/subscribed_session_csv.tpl
  47. 1
      plugin/clockworksms/sms_templates/system_announcement_update.tpl
  48. 1
      plugin/clockworksms/sms_templates/test_new_system_announcement_added.tpl
  49. 1
      plugin/clockworksms/sms_templates/test_system_announcement_update.tpl
  50. 1
      plugin/clockworksms/sms_templates/user_answered_inbox_message.tpl
  51. 1
      plugin/clockworksms/sms_templates/user_details_modified.tpl
  52. 1
      plugin/clockworksms/sms_templates/user_suggested_be_friends.tpl
  53. 1
      plugin/clockworksms/sms_templates/user_uploaded_assignment_check.tpl
  54. 1
      plugin/clockworksms/sms_templates/user_uploaded_assignment_check_student_submits_paper.tpl
  55. 1
      plugin/clockworksms/sms_templates/user_uploaded_assignment_course.tpl
  56. 1
      plugin/clockworksms/sms_templates/user_uploaded_assignment_course_student_submits_paper.tpl
  57. 1
      plugin/clockworksms/sms_templates/welcome_login_password.tpl
  58. 14
      plugin/clockworksms/uninstall.php
  59. 22
      plugin/clockworksms/vendor/changelog.md
  60. 643
      plugin/clockworksms/vendor/clockworksms_api.php
  61. 27
      plugin/clockworksms/vendor/exception.php
  62. 14
      plugin/clockworksms/vendor/license.txt
  63. 253
      plugin/clockworksms/vendor/readme.md

@ -62,7 +62,6 @@ plugins:
enabled: false enabled: false
exclude_patterns: exclude_patterns:
- cli-config.php
- var/cache/ - var/cache/
- var/log/ - var/log/
- app/config/ - app/config/
@ -72,9 +71,6 @@ exclude_patterns:
- app/Resources/ - app/Resources/
- main/admin/db.php - main/admin/db.php
- main/admin/ldap_synchro.php - main/admin/ldap_synchro.php
- main/auth/cas/lib/
- main/auth/shibboleth
- main/auth/openid
- main/chat/emoji_strategy.php - main/chat/emoji_strategy.php
- main/default_course_document - main/default_course_document
- main/document/Wami.swf - main/document/Wami.swf
@ -89,17 +85,13 @@ exclude_patterns:
- main/inc/lib/nusoap/ - main/inc/lib/nusoap/
- main/inc/lib/opengraph/* - main/inc/lib/opengraph/*
- main/inc/lib/ppt2png/ - main/inc/lib/ppt2png/
- main/inc/lib/phpseclib
- main/inc/lib/pear/ - main/inc/lib/pear/
- main/inc/lib/phpmailer/
- main/inc/lib/phpseclib/
- main/inc/lib/svg-edit/ - main/inc/lib/svg-edit/
- main/inc/lib/swfobject/ - main/inc/lib/swfobject/
- main/inc/lib/wami-recorder/ - main/inc/lib/wami-recorder/
- main/inc/lib/xajax/ - main/inc/lib/xajax/
- main/lp/packaging/ - main/lp/packaging/
- main/template/ - main/template/
- main/img/
- main/lang/ - main/lang/
- public/libs/ - public/libs/
- public/img/ - public/img/
@ -108,8 +100,6 @@ exclude_patterns:
- plugin/buycourses/src/Requests.php - plugin/buycourses/src/Requests.php
- plugin/buycourses/src/paypalfunctions.php - plugin/buycourses/src/paypalfunctions.php
- plugin/vchamilo/cli/ - plugin/vchamilo/cli/
- plugin/kannelsms/vendor/
- plugin/clockworksms/vendor/
- plugin/pens/lib - plugin/pens/lib
- plugin/bbb/lib/bbb_api.php - plugin/bbb/lib/bbb_api.php
- plugin/ims_lti/OAuthSimple.php - plugin/ims_lti/OAuthSimple.php

@ -69,8 +69,6 @@ $finder = PhpCsFixer\Finder::create()
->exclude('plugin/buycourses/src/Culqi') ->exclude('plugin/buycourses/src/Culqi')
->exclude('plugin/buycourses/src/Requests') ->exclude('plugin/buycourses/src/Requests')
->exclude('plugin/vchamilo/cli') ->exclude('plugin/vchamilo/cli')
->exclude('plugin/kannelsms/vendor')
->exclude('plugin/clockworksms/vendor')
->exclude('plugin/pens/lib') ->exclude('plugin/pens/lib')
->exclude('plugin/bbb/lib') ->exclude('plugin/bbb/lib')
->exclude('plugin/ims_lti') ->exclude('plugin/ims_lti')

@ -24,9 +24,6 @@ filter:
- 'app/Resources/*' - 'app/Resources/*'
- 'main/admin/db.php' - 'main/admin/db.php'
- 'main/admin/ldap_synchro.php' - 'main/admin/ldap_synchro.php'
- 'main/auth/cas/lib/*'
- 'main/auth/shibboleth/*'
- 'main/auth/openid/*'
- 'main/chat/emoji_strategy.php' - 'main/chat/emoji_strategy.php'
- 'main/default_course_document' - 'main/default_course_document'
- 'main/document/Wami.swf' - 'main/document/Wami.swf'
@ -41,26 +38,19 @@ filter:
- 'main/inc/lib/nusoap/*' - 'main/inc/lib/nusoap/*'
- 'main/inc/lib/opengraph/*' - 'main/inc/lib/opengraph/*'
- 'main/inc/lib/ppt2png/*' - 'main/inc/lib/ppt2png/*'
- 'main/inc/lib/phpseclib'
- 'main/inc/lib/pear/*' - 'main/inc/lib/pear/*'
- 'main/inc/lib/phpmailer/*'
- 'main/inc/lib/phpseclib/*'
- 'main/inc/lib/portfolio.class.php'
- 'main/inc/lib/svg-edit/*' - 'main/inc/lib/svg-edit/*'
- 'main/inc/lib/swfobject/*' - 'main/inc/lib/swfobject/*'
- 'main/inc/lib/wami-recorder/*' - 'main/inc/lib/wami-recorder/*'
- 'main/inc/lib/xajax/*' - 'main/inc/lib/xajax/*'
- 'main/lp/packaging/*' - 'main/lp/packaging/*'
- 'main/template/*' - 'main/template/*'
- 'main/img/*'
- 'main/lang/*' - 'main/lang/*'
- 'plugin/buycourses/src/Culqi/*' - 'plugin/buycourses/src/Culqi/*'
- 'plugin/buycourses/src/Requests/*' - 'plugin/buycourses/src/Requests/*'
- 'plugin/buycourses/src/paypalfunctions.php' - 'plugin/buycourses/src/paypalfunctions.php'
- 'plugin/buycourses/src/Requests.php' - 'plugin/buycourses/src/Requests.php'
- 'plugin/vchamilo/cli/*' - 'plugin/vchamilo/cli/*'
- 'plugin/kannelsms/vendor/*'
- 'plugin/clockworksms/vendor/*'
- 'plugin/pens/lib/' - 'plugin/pens/lib/'
- 'plugin/bbb/lib/bbb_api.php' - 'plugin/bbb/lib/bbb_api.php'
- 'plugin/ims_lti/OAuthSimple.php' - 'plugin/ims_lti/OAuthSimple.php'

@ -1,6 +0,0 @@
Clockworks SMS plugin
===
This plugin enables Chamilo to send SMS messages to Chamilo users when a notification email is sent.
SMS message types (a new course is created, an account is approved and so on) can be enabled or disabled from it's plugin configuration option.

@ -1,15 +0,0 @@
<?php
/* For licensing terms, see /vendor/license.txt */
/**
* Clockwork parameters that will be registered in the current settings.
*
* @package chamilo.plugin.clockworksms
*
* @author Imanol Losada <imanol.losada@beeznest.com>
*/
require_once __DIR__.'/../../main/inc/global.inc.php';
require_once 'lib/clockworksms.lib.php';
require_once 'vendor/clockworksms_api.php';
require_once 'lib/clockworksms_plugin.class.php';

@ -1,13 +0,0 @@
<?php
/* For licensing terms, see /vendor/license.txt */
/**
* This script is included by main/admin/settings.lib.php and generally
* includes things to execute in the main database (settings_current table).
*
* @package chamilo.plugin.clockworksms
*
* @author Imanol Losada <imanol.losada@beeznest.com>
*/
require_once __DIR__.'/config.php';
ClockworksmsPlugin::create()->install();

@ -1,102 +0,0 @@
<?php
$strings['plugin_title'] = "SMS Sending";
$strings['plugin_comment'] = "When enabled and an email sent successfully, a text message is sent to the user.";
$strings['api_key'] = "Clockwork SMS key";
$strings['api_key_help'] = "This is the Clockwork SMS server security key. <a target='_blank' href='http://www.clockworksms.com/platforms/chamilo/'>Click here</a> to get it.";
$strings['tool_enable'] = "Enable SMS sending";
$strings['tool_enable_help'] = "Choose if you want to enable SMS sending tool.
Once enabled, they will be sent along with an email the selected SMS message types to the users who had filled their mobile phone number field in their profile<br />";
$strings['type'] = "Send SMS when";
$strings['mobile_phone_number'] = "Mobile Phone (include country dialing code only)";
$strings['MessageWelcomeXLoginXPasswordX'] = "A user is added to the platform";
$strings['MessageXNewFileSharedCourseXByX'] = "A file is added to dropbox";
$strings['MessageXAccountApprovedConnectX'] = "An account is approved";
$strings['MessageXNewCourseXBeenCreatedX'] = "A new course is created";
$strings['MessageXNewUserXSubscribedCourseX'] = "A user is subscribed to a course";
$strings['MessageXNewCourseSuggestedTeacherX'] = "A new course is suggested";
$strings['MessageXCourseOpeningRequestCodeXRegistered'] = "A new course opening request is registered";
$strings['MessageXCourseOpeningRequestCourseCodeXApproved'] = "A new course opening request is approved";
$strings['MessageXRequestOpenCourseCodeXReject'] = "A new course opening request is rejected";
$strings['MessageXCourseOpeningRequestCourseCodeX'] = "Additional information is required for a new course opening request";
$strings['MessageXBeenSubscribedCourseX'] = "A user is added to the course but not registered to it yet";
$strings['MessageXAssignmentBeenCreatedCourseX'] = "Homework is created";
$strings['MessageXAccountCreatedUpdatedLoginXPasswordX'] = "A user account is created or updated";
$strings['MessageXPasswordUpdatedLoginXPasswordX'] = "A user password is updated";
$strings['MessageXRequestedPasswordChange'] = "A user requests a password change";
$strings['MessageXReceivedNewPersonalMessages'] = "New personal messages are received in user's inbox or forum";
$strings['MessageXNewUserXPendingApproval'] = "A new user registration is pending for approval";
$strings['MessageXXPostedForumXCourseX'] = "A user posts in forum";
$strings['MessageXXXCheckEmailConnectMoreInfo'] = "An announcement is sent";
$strings['MessageXXStudentXAnsweredTestX'] = "A student solves an exercise";
$strings['MessageXXStudentXAnsweredTestXOpenQuestion'] = "A student solves an open question";
$strings['MessageXXStudentXAnsweredTestXVoiceQuestion'] = "A student solves a voice question";
$strings['MessageXXAnswerOpenQuestionTestXReviewed'] = "An open question answer is reviewed";
$strings['MessageXXNewThreadXStartedForumX'] = "A new thread is started in forum";
$strings['MessageXXNewAnswerPostedXForumX'] = "A new answer is posted in forum";
$strings['MessageXXNewSystemAnnouncementAdded'] = "A new system announcement is added and the user does not want to send a test email";
$strings['MessageXTestXNewSystemAnnouncementAdded'] = "A new system announcement is added and the user wants to send a test email";
$strings['MessageXXSystemAnnouncementUpdate'] = "A new system announcement is updated and the user does not want to send a test email";
$strings['MessageXTestXSystemAnnouncementUpdate'] = "A new system announcement is updated and the user wants to send a test email";
$strings['MessageXUserXUploadedAssignmentXCourseXStudentSubmitsPaper'] = "An assignment is uploaded and there is no current session (this will be sent only to coaches)";
$strings['MessageXUserXUploadedAssignmentXCheckXStudentSubmitsPaper'] = "An assignment is uploaded (this will be sent only to teachers)";
$strings['MessageXUserXUploadedAssignmentXCourseX'] = "... and there is no current session (this will be sent only to coaches)";
$strings['MessageXUserXUploadedAssignmentXCheckX'] = "... (this will be sent only to teachers)";
$strings['MessageXSubscribedSessionX'] = "A session is created or updated and new users are subscribed";
$strings['MessageXSubscribedSessionXCSV'] = "New users are subscribed to a session importing a CSV file";
$strings['MessageXUserXSuggestedBeFriends'] = "A friendship invitation is received";
$strings['MessageXUserXAnsweredInboxMessage'] = "A message reply is received in inbox";
$strings['MessageXBeenInvitedJoinGroupX'] = "A group join invitation is received";
$strings['MessageXMessagesSentEditedGroupXEdited'] = "A group topic message is updated";
$strings['MessageXMessagesSentEditedGroupXAdded'] = "A group topic message is added";
$strings['MessageXBeenInvitedCompleteSurveyXCourseX'] = "A new survey is created";
$strings['MessageXReminderAssignmentXCourseXDue'] = "A reminder is sent to students who have not uploaded their assignment yet";
$strings['MessageXUserDetailsModified'] = "User details have been updated";
$strings['WelcomeXLoginXPasswordX'] = "Welcome to %s. Here are your user account details: login: %s, password: %s";
$strings['XNewFileSharedCourseXByX'] = "%s: A new file has been shared with you in course %s by %s";
$strings['XAccountApprovedConnectX'] = "%s: Your account has been approved by an administrator. You can now connect to %s";
$strings['XNewCourseXBeenCreatedX'] = "%s: A new course (%s) has been created by %s";
$strings['XNewUserXSubscribedCourseX'] = "%s: A new user (%s) has just subscribed to your course (%s)";
$strings['XNewCourseSuggestedTeacherX'] = "%s: A new course has been suggested by teacher (%s). Please connect to the admin page to review it";
$strings['XCourseOpeningRequestCodeXRegistered'] = "%s: Your course opening request (code %s) has been registered. You will be informed when it is approved";
$strings['XCourseOpeningRequestCourseCodeXApproved'] = "%s: Your course opening request for course code %s has been approved. Connect to your portal to use it";
$strings['XRequestOpenCourseCodeXReject'] = "%s: We are sorry to inform you that your request to open course code %s has been rejected";
$strings['XCourseOpeningRequestCourseCodeX'] = "%s: Your course opening request for course code %s requires more information. Check e-mail for more info";
$strings['XBeenSubscribedCourseX'] = "%s: You have been subscribed to course %s";
$strings['XAssignmentBeenCreatedCourseX'] = "%s: A new assignment has been created in course %s. Please connect for more info";
$strings['XAccountCreatedUpdatedLoginXPasswordX'] = "%s: Your account has been created or updated. You can now login as %s, password: %s";
$strings['XPasswordUpdatedLoginXPasswordX'] = "%s: Your password has been updated. You can now login as %s, password: %s";
$strings['XRequestedPasswordChange'] = "%s: You have requested a password change. Please check your e-mail for more information";
$strings['XReceivedNewPersonalMessages'] = "%s: You have received new personal messages in your inbox or in the forum. Please check your e-mail for more info";
$strings['XNewUserXPendingApproval'] = "%s: A new user (%s) registration is pending your approval. Please connect to the admin panel to review";
$strings['XXPostedForumXCourseX'] = "%s: %s just posted on forum %s in course %s";
$strings['XXXCheckEmailConnectMoreInfo'] = "%s: %s: %s. Check your e-mail or connect for more info";
$strings['XXStudentXAnsweredTestX'] = "%s: %s: Student %s has just answered test %s";
$strings['XXStudentXAnsweredTestXOpenQuestion'] = "%s: %s: Student %s answered test %s's open question. Please connect to review";
$strings['XXStudentXAnsweredTestXVoiceQuestion'] = "%s: %s: Student %s answered test %s's voice question. Please connect to review";
$strings['XXAnswerOpenQuestionTestXReviewed'] = "%s: %s: Your answer to an open question in test %s has been reviewed";
$strings['XXNewThreadXStartedForumX'] = "%s: %s: A new thread (%s) has been started in forum %s";
$strings['XXNewAnswerPostedXForumX'] = "%s: %s: A new answer has been posted to (%s) in forum %s";
$strings['XXNewSystemAnnouncementAdded'] = "%s: %s";
$strings['XTestXNewSystemAnnouncementAdded'] = "%s (test): %s";
$strings['XXSystemAnnouncementUpdate'] = "%s: %s (update)";
$strings['XTestXSystemAnnouncementUpdate'] = "%s (test): %s";
$strings['XUserXUploadedAssignmentXCourseXStudentSubmitsPaper'] = "%s: User %s uploaded assignment %s in course %s";
$strings['XUserXUploadedAssignmentXCheckXStudentSubmitsPaper'] = "%s: User %s uploaded assignment %s. Check %s";
$strings['XUserXUploadedAssignmentXCourseX'] = "%s: User %s uploaded assignment %s in course %s";
$strings['XUserXUploadedAssignmentXCheckX'] = "%s: User %s uploaded assignment %s. Check %s";
$strings['XSubscribedSessionX'] = "%s: You have been subscribed to session %s";
$strings['XSubscribedSessionXCSV'] = "%s: You have been subscribed to session %s";
$strings['XUserXSuggestedBeFriends'] = "%s: User %s suggested you should be friends. Check your inbox or e-mail for details";
$strings['XUserXAnsweredInboxMessage'] = "%s: User %s just answered your Inbox message";
$strings['XBeenInvitedJoinGroupX'] = "%s: you have been invited to join group %s. Check your Inbox for details";
$strings['XMessagesSentEditedGroupXEdited'] = "%s: Messages sent or edited in group %s. Check your Inbox for details";
$strings['XMessagesSentEditedGroupXAdded'] = "%s: Messages sent or edited in group %s. Check your Inbox for details";
$strings['XBeenInvitedCompleteSurveyXCourseX'] = "%s: You have been invited to complete survey %s in course %s";
$strings['XReminderAssignmentXCourseXDue'] = "%s: This is a simple reminder that your assignment (%s) in course %s is still due";
$strings['XUserDetailsModified'] = "%s: Your user details have been modified. Please check your e-mail for more information";

@ -1,102 +0,0 @@
<?php
$strings['plugin_title'] = "Envío de SMS";
$strings['plugin_comment'] = "Ofrece la posibilidad de enviar SMS a celulares cuando se envían e-mails de notificación.";
$strings['api_key'] = "Clave Clockwork SMS";
$strings['api_key_help'] = "Ésta es la clave de seguridad de su servidor Clockwork SMS. Para obtenerla, <a target='_blank' href='http://www.clockworksms.com/platforms/chamilo/'>haga click aquí</a>";
$strings['tool_enable'] = "Activar envío de SMS";
$strings['tool_enable_help'] = "Escoja si desea activar la herramienta de envío de mensajes a celulares Clockwork SMS.
Una vez activada, se enviarán, simultaneamente con los correos, los tipos mensajes SMS seleccionados a los usuarios que hayan especificado un número de celular en su perfil.<br />";
$strings['sms_types'] = "Enviar un SMS cuando";
$strings['mobile_phone_number'] = "Celular (incluya sólo el código de llamada del país)";
$strings['MessageWelcomeXLoginXPasswordX'] = "Se añada un usuario a la plataforma";
$strings['MessageXNewFileSharedCourseXByX'] = "Un archivo se añada a dropbox";
$strings['MessageXAccountApprovedConnectX'] = "Se apruebe una cuenta de usuario";
$strings['MessageXNewCourseXBeenCreatedX'] = "Se cree un curso nuevo";
$strings['MessageXNewUserXSubscribedCourseX'] = "Un usuario se suscriba a un curso";
$strings['MessageXNewCourseSuggestedTeacherX'] = "Un profesor sugiera un curso nuevo";
$strings['MessageXCourseOpeningRequestCodeXRegistered'] = "Se registre una solicitud de apertura de curso";
$strings['MessageXCourseOpeningRequestCourseCodeXApproved'] = "Se apruebe una solicitud de apertura de curso";
$strings['MessageXRequestOpenCourseCodeXReject'] = "Se rechace una solicitud de apertura de curso";
$strings['MessageXCourseOpeningRequestCourseCodeX'] = "Se requiera más información de una solicitud de apertura de curso";
$strings['MessageXBeenSubscribedCourseX'] = "Se le suscriba a un curso a un usuario que aún no está registrado";
$strings['MessageXAssignmentBeenCreatedCourseX'] = "Se cree una nueva tarea en un curso";
$strings['MessageXAccountCreatedUpdatedLoginXPasswordX'] = "Se cree o actualice una cuenta de usuario";
$strings['MessageXPasswordUpdatedLoginXPasswordX'] = "Se actualice la contraseña de un usuario";
$strings['MessageXRequestedPasswordChange'] = "Un usuario solicite un cambio de contraseña";
$strings['MessageXReceivedNewPersonalMessages'] = "Se reciban mensajes personales nuevos en la bandeja de entrada o en el foro";
$strings['MessageXNewUserXPendingApproval'] = "Una inscripción de un nuevo usuario esté pendiente de aprobación";
$strings['MessageXXPostedForumXCourseX'] = "Un usuario escriba en el foro";
$strings['MessageXXXCheckEmailConnectMoreInfo'] = "Se envíe una notificación";
$strings['MessageXXStudentXAnsweredTestX'] = "Un estudiante resuelva un ejercicio de un examen";
$strings['MessageXXStudentXAnsweredTestXOpenQuestion'] = "Un estudiante conteste a una pregunta abierta de un examen";
$strings['MessageXXStudentXAnsweredTestXVoiceQuestion'] = "Un estudiante conteste a una pregunta de voz de un examen";
$strings['MessageXXAnswerOpenQuestionTestXReviewed'] = "Se revise una pregunta abierta de un examen";
$strings['MessageXXNewThreadXStartedForumX'] = "Se cree un hilo nuevo en el foro";
$strings['MessageXXNewAnswerPostedXForumX'] = "Se escriba una respuesta nueva en el foro";
$strings['MessageXXNewSystemAnnouncementAdded'] = "Se añada una notificación y el usuario no desee enviar un examen por correo electrónico";
$strings['MessageXTestXNewSystemAnnouncementAdded'] = "Se añada una notificación y el usuario desee enviar un examen por correo electrónico";
$strings['MessageXXSystemAnnouncementUpdate'] = "Se actualice una notificación y el usuario no desee enviar un examen por correo electrónico";
$strings['MessageXTestXSystemAnnouncementUpdate'] = "Se actualice una notificación y el usuario desee enviar un examen por correo electrónico";
$strings['MessageXUserXUploadedAssignmentXCourseXStudentSubmitsPaper'] = "Un estudiante suba su tarea y no exista una sesión (se enviará sólo a coordinadores)";
$strings['MessageXUserXUploadedAssignmentXCheckXStudentSubmitsPaper'] = "Un estudiante suba su tarea (se enviará sólo a profesores)";
$strings['MessageXUserXUploadedAssignmentXCourseX'] = "... y no exista una sesión (se enviará sólo a coordinadores)";
$strings['MessageXUserXUploadedAssignmentXCheckX'] = "... (se enviará sólo a profesores)";
$strings['MessageXSubscribedSessionX'] = "Se cree o edite una sesión nueva y se suscriban a usuarios nuevos";
$strings['MessageXSubscribedSessionXCSV'] = "Se suscriban a usuarios nuevos desde un archivo CSV";
$strings['MessageXUserXSuggestedBeFriends'] = "Se reciba una invitación de amistad";
$strings['MessageXUserXAnsweredInboxMessage'] = "Se reciba la contestación a un mensaje en la bandeja de entrada";
$strings['MessageXBeenInvitedJoinGroupX'] = "Se reciba una invitación para unirse a un grupo";
$strings['MessageXMessagesSentEditedGroupXEdited'] = "Se actualice un mensaje en un tema de grupo";
$strings['MessageXMessagesSentEditedGroupXAdded'] = "Se añada un mensaje en un tema de grupo";
$strings['MessageXBeenInvitedCompleteSurveyXCourseX'] = "Se cree una encuesta nueva";
$strings['MessageXReminderAssignmentXCourseXDue'] = "Se envíe un recordatorio a los estudiantes que no hayan enviado su tarea";
$strings['MessageXUserDetailsModified'] = "Se actualice información de un usuario";
$strings['WelcomeXLoginXPasswordX'] = "Bienvenido a %s. Éstos son sus datos de acceso: usuario: %s, contraseña: %s";
$strings['XNewFileSharedCourseXByX'] = "%s: Un nuevo archivo ha sido compartido contigo en el curso %s por %s";
$strings['XAccountApprovedConnectX'] = "%s: Su cuenta ha sido aprobada por un administrador. Ya puede conectarse a %s";
$strings['XNewCourseXBeenCreatedX'] = "%s: Un nuevo curso (%s) ha sido creado por %s";
$strings['XNewUserXSubscribedCourseX'] = "%s: Un nuevo usuario (%s) se ha suscrito a su curso (%s)";
$strings['XNewCourseSuggestedTeacherX'] = "%s: Un nuevo curso ha sido sugerido por el profesor (%s). Por favor, conéctese a la página de administración para revisarlo";
$strings['XCourseOpeningRequestCodeXRegistered'] = "%s: Su solicitud de apertura de curso (código %s) ha sido registrada. Será informado cuando ésta sea aprobada";
$strings['XCourseOpeningRequestCourseCodeXApproved'] = "%s: Su solicitud de apertura de curso para el código de curso %s ha sido aprobada. Conéctese a su portal para usarlo";
$strings['XRequestOpenCourseCodeXReject'] = "%s: Lamentamos informarle que su solicitud de apertura de curso para el código de curso %s ha sido rechazada";
$strings['XCourseOpeningRequestCourseCodeX'] = "%s: Su solicitud de apertura de curso para el código de curso %s requiere más información. Compruebe su e-mail para más información";
$strings['XBeenSubscribedCourseX'] = "%s: Ha sido suscrito al curso %s";
$strings['XAssignmentBeenCreatedCourseX'] = "%s: Una nueva tarea ha sido creada en el curso %s. Por favor, conéctese para más información";
$strings['XAccountCreatedUpdatedLoginXPasswordX'] = "%s: Su cuenta ha sido creada o actualizada. Ya puede conectarse como %s, contraseña: %s";
$strings['XPasswordUpdatedLoginXPasswordX'] = "%s: Su contraseña ha sido actualizada. Ya puede conectarse como %s, contraseña: %s";
$strings['XRequestedPasswordChange'] = "%s: Ha solicitado un cambio de contraseña. Por favor, compruebe su e-mail para más información";
$strings['XReceivedNewPersonalMessages'] = "%s: Ha recibido mensajes personales nuevos en su bandeja de entrada o en el foro. Por favor, compruebe su e-mail para más información";
$strings['XNewUserXPendingApproval'] = "%s: Una inscripción de un nuevo usuario (%s) está pendiente de su aprobación. Por favor, conéctese al panel de administración para revisarla";
$strings['XXPostedForumXCourseX'] = "%s: %s acaba de escribir en el foro %s del curso %s";
$strings['XXXCheckEmailConnectMoreInfo'] = "%s: %s: %s. Compruebe su e-mail o conéctese para más información";
$strings['XXStudentXAnsweredTestX'] = "%s: %s: El estudiante %s acaba de contestar al test %s";
$strings['XXStudentXAnsweredTestXOpenQuestion'] = "%s: %s: El estudiante %s contestó a la pregunta abierta del test %s. Por favor, conéctese para revisarla";
$strings['XXStudentXAnsweredTestXVoiceQuestion'] = "%s: %s: El estudiante %s contestó a la pregunta de voz del test %s. Por favor, conéctese para revisarla";
$strings['XXAnswerOpenQuestionTestXReviewed'] = "%s: %s: Su respuesta a la pregunta abierta en el test %s ha sido revisada.";
$strings['XXNewThreadXStartedForumX'] = "%s: %s: Se ha comenzado un nuevo hilo (%s) en el foro %s";
$strings['XXNewAnswerPostedXForumX'] = "%s: %s: Se ha escrito una nueva respuesta a (%s) en el foro %s";
$strings['XXNewSystemAnnouncementAdded'] = "%s: %s";
$strings['XTestXNewSystemAnnouncementAdded'] = "%s (prueba): %s";
$strings['XXSystemAnnouncementUpdate'] = "%s: %s (actualización)";
$strings['XTestXSystemAnnouncementUpdate'] = "%s (prueba): %s";
$strings['XUserXUploadedAssignmentXCourseXStudentSubmitsPaper'] = "%s: El usuario %s subió la tarea %s al curso %s";
$strings['XUserXUploadedAssignmentXCheckXStudentSubmitsPaper'] = "%s: El usuario %s subió la tarea %s. Compruébelo en %s";
$strings['XUserXUploadedAssignmentXCourseX'] = "%s: El usuario %s subió la tarea %s al curso %s";
$strings['XUserXUploadedAssignmentXCheckX'] = "%s: El usuario %s subió la tarea %s. Compruébelo en %s";
$strings['XSubscribedSessionX'] = "%s: Ha sido suscrito a la sesión %s";
$strings['XSubscribedSessionXCSV'] = "%s: Ha sido suscrito a la sesión %s";
$strings['XUserXSuggestedBeFriends'] = "%s: El usuario %s le sugirió que podrían ser amigos. Compruebe su bandeja de entrada o su e-mail para más detalles";
$strings['XUserXAnsweredInboxMessage'] = "%s: El usuario acaba de contestar a su mensaje de la bandeja de entrada";
$strings['XBeenInvitedJoinGroupX'] = "%s: Ha sido invitado a unirse al grupo %s. Compruebe su bandeja de entrada para más detalles";
$strings['XMessagesSentEditedGroupXEdited'] = "%s: Hay mensajes enviados o editados en el grupo %s. Compruebe su bandeja de entrada para más detalles";
$strings['XMessagesSentEditedGroupXAdded'] = "%s: Hay mensajes enviados o editados en el grupo %s. Compruebe su bandeja de entrada para más detalles";
$strings['XBeenInvitedCompleteSurveyXCourseX'] = "%s: Ha sido invitado a completar la encuesta %s del curso %s";
$strings['XReminderAssignmentXCourseXDue'] = "%s: Se le recuerda que su tarea (%s) del curso %s aún está pendiente";
$strings['XUserDetailsModified'] = "%s: Su información de usuario ha sido modificada. Compruebe su e-mail para más información";

@ -1,676 +0,0 @@
<?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
*/
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
* );
*/
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 = [
'to' => $to,
'message' => $this->getSms($additionalParameters),
];
if (!empty($message['message'])) {
$this->api->send($message);
}
}
}
/**
* buildSms (builds an SMS from a template and data).
*
* @param ClockworksmsPlugin $plugin
* @param Template $tpl
* @param string Template file name
* @param string $messageKey Text key from lang file
* @param array $parameters Data to fill message variables (if any)
*
* @return string
*/
public function buildSms(
$plugin,
$tpl,
$templateName,
$messageKey,
$parameters = []
) {
// Send direct message with out using plugin get_lang
if (isset($parameters['direct_message'])) {
return $parameters['direct_message'];
}
$message = $plugin->get_lang($messageKey);
if ($parameters !== null) {
$message = vsprintf($message, $parameters);
}
return $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',
[
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',
[
api_get_setting('siteName'),
$additionalParameters['courseTitle'],
$additionalParameters['userUsername'],
]
);
break;
case SmsPlugin::ACCOUNT_APPROVED_CONNECT:
return $this->buildSms(
$plugin,
$tpl,
'account_approved_connect.tpl',
'XAccountApprovedConnectX',
[
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',
[
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',
[
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',
[
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',
[
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',
[
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',
[
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',
[
api_get_setting('siteName'),
$additionalParameters['courseCode'],
]
);
break;
case SmsPlugin::BEEN_SUBSCRIBED_COURSE:
return $this->buildSms(
$plugin,
$tpl,
'been_subscribed_course.tpl',
'XBeenSubscribedCourseX',
[
api_get_setting('siteName'),
$additionalParameters['courseTitle'],
]
);
break;
case SmsPlugin::ASSIGNMENT_BEEN_CREATED_COURSE:
return $this->buildSms(
$plugin,
$tpl,
'assignment_been_created_course.tpl',
'XAssignmentBeenCreatedCourseX',
[
api_get_setting('siteName'),
$additionalParameters['courseTitle'],
]
);
break;
case SmsPlugin::CERTIFICATE_NOTIFICATION:
return $this->buildSms(
$plugin,
$tpl,
'certificate_notification.tpl',
'',
$additionalParameters
);
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 '';
}
}
}

@ -1,50 +0,0 @@
<?php
/* For licensing terms, see /vendor/license.txt */
/**
* Class ClockworksmsPlugin
* This script contains SMS type constants and basic plugin functions.
*
* @package chamilo.plugin.clockworksms.lib
*
* @author Imanol Losada <imanol.losada@beeznest.com>
* @author Julio Montoya - Refactor code
*/
class ClockworksmsPlugin extends SmsPlugin
{
/**
* Constructor.
*/
public function __construct()
{
$fields = ['tool_enable' => 'boolean', 'api_key' => 'text'];
$smsTypeOptions = $this->getSmsTypeOptions();
foreach ($smsTypeOptions as $smsTypeOption) {
$fields[$smsTypeOption] = 'checkbox';
}
parent::__construct('0.1', 'Imanol Losada', $fields);
}
/**
* create (a singleton function that ensures ClockworksmsPlugin instance is
* created only once. If it is already created, it returns the instance).
*
* @return object ClockworksmsPlugin instance
*/
public static function create()
{
static $result = null;
return $result ? $result : $result = new self();
}
/**
* install (uninstalls the plugin and removes all plugin's tables and/or rows).
*/
public function uninstall()
{
$tSettings = Database::get_main_table(TABLE_MAIN_SETTINGS_CURRENT);
$sql = "DELETE FROM $tSettings WHERE subkey = 'clockworksms'";
Database::query($sql);
}
}

@ -1,5 +0,0 @@
This plugin, as the rest of Chamilo, is released under the GNU/GPLv3 license.
The Clockworks library included is provided under the ICS license, compatible
with GNU/GPLv3. See https://github.com/mediaburst/clockwork-php/issues/3 for
details.

@ -1,11 +0,0 @@
<?php
/* For licensing terms, see /vendor/license.txt */
/**
* @package chamilo.plugin.clockworksms
*
* @author Imanol Losada <imanol.losada@beeznest.com>
*/
require_once __DIR__.'/config.php';
$plugin_info = ClockworksmsPlugin::create()->get_info();

@ -1,14 +0,0 @@
<?php
/* For licensing terms, see /vendor/license.txt */
/**
* This script is included by main/admin/settings.lib.php when unselecting a plugin
* and is meant to remove things installed by the install.php script in both
* the global database and the courses tables.
*
* @package chamilo.plugin.clockworksms
*
* @author Imanol Losada <imanol.losada@beeznest.com>
*/
require_once __DIR__.'/config.php';
ClockworksmsPlugin::create()->uninstall();

@ -1,22 +0,0 @@
# Changelog
## 1.0 (July 19th, 2012)
* Initial release. [JI/MS]
### 1.1 (August 21st, 2012)
* Added /get_key functionality to translate a legacy Mediaburst username and password into a new Clockwork API key. [JI]
* Deprecated `checkCredit()` and replaced with `checkBalance()` [JI]
### 1.2 (September 7th, 2012)
* Added various new Wordpress classes, including the Clockwork_Plugin class for writing plugins based on Clockwork. [JI]
### 1.3 (September 18th, 2012)
* Added `is_valid_msisdn()` method. [JI]
#### 1.3.1 (November 13th, 2012)
* Updated `is_valid_msisdn()` method to handle 9-digit phone numbers, e.g. Norway. [JI]

@ -1,643 +0,0 @@
<?php
/**
* Clockwork PHP API
*
* @package Clockwork
* @copyright Mediaburst Ltd 2012
* @license ISC
* @link http://www.clockworksms.com
* @version 1.3.0
*/
if ( !class_exists('ClockworkException') ) {
require_once('exception.php');
}
/**
* Main Clockwork API Class
*
* @package Clockwork
* @since 1.0
*/
class Clockwork {
/*
* Version of this class
*/
const VERSION = '1.3.1';
/**
* All Clockwork API calls start with BASE_URL
* @author Martin Steel
*/
const API_BASE_URL = 'api.clockworksms.com/xml/';
/**
* string to append to API_BASE_URL to check authentication
* @author Martin Steel
*/
const API_AUTH_METHOD = 'authenticate';
/**
* string to append to API_BASE_URL for sending SMS
* @author Martin Steel
*/
const API_SMS_METHOD = 'sms';
/**
* string to append to API_BASE_URL for checking message credit
* @author Martin Steel
*/
const API_CREDIT_METHOD = 'credit';
/**
* string to append to API_BASE_URL for checking account balance
* @author Martin Steel
*/
const API_BALANCE_METHOD = 'balance';
/**
* Clockwork API Key
*
* @var string
* @author Martin Steel
*/
public $key;
/**
* Use SSL when making HTTP requests
*
* If this is not set, SSL will be used where PHP supports it
*
* @var bool
* @author Martin Steel
*/
public $ssl;
/**
* Proxy server hostname (Optional)
*
* @var string
* @author Martin Steel
*/
public $proxy_host;
/**
* Proxy server port (Optional)
*
* @var integer
* @author Martin Steel
*/
public $proxy_port;
/**
* From address used on text messages
*
* @var string (11 characters or 12 numbers)
* @author Martin Steel
*/
public $from;
/**
* Allow long SMS messages (Cost up to 3 credits)
*
* @var bool
* @author Martin Steel
*/
public $long;
/**
* Truncate message text if it is too long
*
* @var bool
* @author Martin Steel
*/
public $truncate;
/**
* Enables various logging of messages when true.
*
* @var bool
* @author Martin Steel
*/
public $log;
/**
* What Clockwork should do if you send an invalid character
*
* Possible values:
* 'error' - Return an error (Messasge is not sent)
* 'remove' - Remove the invalid character(s)
* 'replace' - Replace invalid characters where possible, remove others
* @author Martin Steel
*/
public $invalid_char_action;
/**
* Create a new instance of the Clockwork wrapper
*
* @param string key Your Clockwork API Key
* @param array options Optional parameters for sending SMS
* @author Martin Steel
*/
public function __construct($key, array $options = array()) {
if (empty($key)) {
throw new ClockworkException("Key can't be blank");
} else {
$this->key = $key;
}
$this->ssl = (array_key_exists('ssl', $options)) ? $options['ssl'] : null;
$this->proxy_host = (array_key_exists('proxy_host', $options)) ? $options['proxy_host'] : null;
$this->proxy_port = (array_key_exists('proxy_port', $options)) ? $options['proxy_port'] : null;
$this->from = (array_key_exists('from', $options)) ? $options['from'] : null;
$this->long = (array_key_exists('long', $options)) ? $options['long'] : null;
$this->truncate = (array_key_exists('truncate', $options)) ? $options['truncate'] : null;
$this->invalid_char_action = (array_key_exists('invalid_char_action', $options)) ? $options['invalid_char_action'] : null;
$this->log = (array_key_exists('log', $options)) ? $options['log'] : false;
}
/**
* Send some text messages
*
*
* @author Martin Steel
*/
public function send(array $sms) {
if (!is_array($sms)) {
throw new ClockworkException("sms parameter must be an array");
}
$single_message = $this->is_assoc($sms);
if ($single_message) {
$sms = array($sms);
}
$req_doc = new DOMDocument('1.0', 'UTF-8');
$root = $req_doc->createElement('Message');
$req_doc->appendChild($root);
$user_node = $req_doc->createElement('Key');
$user_node->appendChild($req_doc->createTextNode($this->key));
$root->appendChild($user_node);
for ($i = 0; $i < count($sms); $i++) {
$single = $sms[$i];
$sms_node = $req_doc->createElement('SMS');
// Phone number
$sms_node->appendChild($req_doc->createElement('To', $single['to']));
// Message text
$content_node = $req_doc->createElement('Content');
$content_node->appendChild($req_doc->createTextNode($single['message']));
$sms_node->appendChild($content_node);
// From
if (array_key_exists('from', $single) || isset($this->from)) {
$from_node = $req_doc->createElement('From');
$from_node->appendChild($req_doc->createTextNode(array_key_exists('from', $single) ? $single['from'] : $this->from));
$sms_node->appendChild($from_node);
}
// Client ID
if (array_key_exists('client_id', $single)) {
$client_id_node = $req_doc->createElement('ClientID');
$client_id_node->appendChild($req_doc->createTextNode($single['client_id']));
$sms_node->appendChild($client_id_node);
}
// Long
if (array_key_exists('long', $single) || isset($this->long)) {
$long = array_key_exists('long', $single) ? $single['long'] : $this->long;
$long_node = $req_doc->createElement('Long');
$long_node->appendChild($req_doc->createTextNode($long ? 1 : 0));
$sms_node->appendChild($long_node);
}
// Truncate
if (array_key_exists('truncate', $single) || isset($this->truncate)) {
$truncate = array_key_exists('truncate', $single) ? $single['truncate'] : $this->truncate;
$trunc_node = $req_doc->createElement('Truncate');
$trunc_node->appendChild($req_doc->createTextNode($truncate ? 1 : 0));
$sms_node->appendChild($trunc_node);
}
// Invalid Char Action
if (array_key_exists('invalid_char_action', $single) || isset($this->invalid_char_action)) {
$action = array_key_exists('invalid_char_action', $single) ? $single['invalid_char_action'] : $this->invalid_char_action;
switch (strtolower($action)) {
case 'error':
$sms_node->appendChild($req_doc->createElement('InvalidCharAction', 1));
break;
case 'remove':
$sms_node->appendChild($req_doc->createElement('InvalidCharAction', 2));
break;
case 'replace':
$sms_node->appendChild($req_doc->createElement('InvalidCharAction', 3));
break;
default:
break;
}
}
// Wrapper ID
$sms_node->appendChild($req_doc->createElement('WrapperID', $i));
$root->appendChild($sms_node);
}
$req_xml = $req_doc->saveXML();
$resp_xml = $this->postToClockwork(self::API_SMS_METHOD, $req_xml);
$resp_doc = new DOMDocument();
$resp_doc->loadXML($resp_xml);
$response = array();
$err_no = null;
$err_desc = null;
foreach($resp_doc->documentElement->childNodes AS $doc_child) {
switch(strtolower($doc_child->nodeName)) {
case 'sms_resp':
$resp = array();
$wrapper_id = null;
foreach($doc_child->childNodes AS $resp_node) {
switch(strtolower($resp_node->nodeName)) {
case 'messageid':
$resp['id'] = $resp_node->nodeValue;
break;
case 'errno':
$resp['error_code'] = $resp_node->nodeValue;
break;
case 'errdesc':
$resp['error_message'] = $resp_node->nodeValue;
break;
case 'wrapperid':
$wrapper_id = $resp_node->nodeValue;
break;
}
}
if( array_key_exists('error_code', $resp ) )
{
$resp['success'] = 0;
} else {
$resp['success'] = 1;
}
$resp['sms'] = $sms[$wrapper_id];
array_push($response, $resp);
break;
case 'errno':
$err_no = $doc_child->nodeValue;
break;
case 'errdesc':
$err_desc = $doc_child->nodeValue;
break;
}
}
if (isset($err_no)) {
throw new ClockworkException($err_desc, $err_no);
}
if ($single_message) {
return $response[0];
} else {
return $response;
}
}
/**
* Check how many SMS credits you have available
*
* @return integer SMS credits remaining
* @deprecated Use checkBalance() instead
* @author Martin Steel
*/
public function checkCredit() {
// Create XML doc for request
$req_doc = new DOMDocument('1.0', 'UTF-8');
$root = $req_doc->createElement('Credit');
$req_doc->appendChild($root);
$root->appendChild($req_doc->createElement('Key', $this->key));
$req_xml = $req_doc->saveXML();
// POST XML to Clockwork
$resp_xml = $this->postToClockwork(self::API_CREDIT_METHOD, $req_xml);
// Create XML doc for response
$resp_doc = new DOMDocument();
$resp_doc->loadXML($resp_xml);
// Parse the response to find credit value
$credit;
$err_no = null;
$err_desc = null;
foreach ($resp_doc->documentElement->childNodes AS $doc_child) {
switch ($doc_child->nodeName) {
case "Credit":
$credit = $doc_child->nodeValue;
break;
case "ErrNo":
$err_no = $doc_child->nodeValue;
break;
case "ErrDesc":
$err_desc = $doc_child->nodeValue;
break;
default:
break;
}
}
if (isset($err_no)) {
throw new ClockworkException($err_desc, $err_no);
}
return $credit;
}
/**
* Check your account balance
*
* @return array Array of account balance:
* @author Martin Steel
*/
public function checkBalance() {
// Create XML doc for request
$req_doc = new DOMDocument('1.0', 'UTF-8');
$root = $req_doc->createElement('Balance');
$req_doc->appendChild($root);
$root->appendChild($req_doc->createElement('Key', $this->key));
$req_xml = $req_doc->saveXML();
// POST XML to Clockwork
$resp_xml = $this->postToClockwork(self::API_BALANCE_METHOD, $req_xml);
// Create XML doc for response
$resp_doc = new DOMDocument();
$resp_doc->loadXML($resp_xml);
// Parse the response to find balance value
$balance = null;
$err_no = null;
$err_desc = null;
foreach ($resp_doc->documentElement->childNodes as $doc_child) {
switch ($doc_child->nodeName) {
case "Balance":
$balance = number_format(floatval($doc_child->nodeValue), 2);
break;
case "Currency":
foreach ($doc_child->childNodes as $resp_node) {
switch ($resp_node->tagName) {
case "Symbol":
$symbol = $resp_node->nodeValue;
break;
case "Code":
$code = $resp_node->nodeValue;
break;
}
}
break;
case "ErrNo":
$err_no = $doc_child->nodeValue;
break;
case "ErrDesc":
$err_desc = $doc_child->nodeValue;
break;
default:
break;
}
}
if (isset($err_no)) {
throw new ClockworkException($err_desc, $err_no);
}
return array( 'symbol' => $symbol, 'balance' => $balance, 'code' => $code );
}
/**
* Check whether the API Key is valid
*
* @return bool True indicates a valid key
* @author Martin Steel
*/
public function checkKey() {
// Create XML doc for request
$req_doc = new DOMDocument('1.0', 'UTF-8');
$root = $req_doc->createElement('Authenticate');
$req_doc->appendChild($root);
$root->appendChild($req_doc->createElement('Key', $this->key));
$req_xml = $req_doc->saveXML();
// POST XML to Clockwork
$resp_xml = $this->postToClockwork(self::API_AUTH_METHOD, $req_xml);
// Create XML doc for response
$resp_doc = new DOMDocument();
$resp_doc->loadXML($resp_xml);
// Parse the response to see if authenticated
$cust_id;
$err_no = null;
$err_desc = null;
foreach ($resp_doc->documentElement->childNodes AS $doc_child) {
switch ($doc_child->nodeName) {
case "CustID":
$cust_id = $doc_child->nodeValue;
break;
case "ErrNo":
$err_no = $doc_child->nodeValue;
break;
case "ErrDesc":
$err_desc = $doc_child->nodeValue;
break;
default:
break;
}
}
if (isset($err_no)) {
throw new ClockworkException($err_desc, $err_no);
}
return isset($cust_id);
}
/**
* Make an HTTP POST to Clockwork
*
* @param string method Clockwork method to call (sms/credit)
* @param string data Content of HTTP POST
*
* @return string Response from Clockwork
* @author Martin Steel
*/
protected function postToClockwork($method, $data) {
if ($this->log) {
$this->logXML("API $method Request XML", $data);
}
if( isset( $this->ssl ) ) {
$ssl = $this->ssl;
} else {
$ssl = $this->sslSupport();
}
$url = $ssl ? 'https://' : 'http://';
$url .= self::API_BASE_URL . $method;
$response = $this->xmlPost($url, $data);
if ($this->log) {
$this->logXML("API $method Response XML", $response);
}
return $response;
}
/**
* Make a HTTP POST
*
* cURL will be used if available, otherwise tries the PHP stream functions
*
* @param string url URL to send to
* @param string data Data to POST
* @return string Response returned by server
* @author Martin Steel
*/
protected function xmlPost($url, $data) {
if(extension_loaded('curl')) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));
curl_setopt($ch, CURLOPT_USERAGENT, 'Clockwork PHP Wrapper/1.0' . self::VERSION);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
if (isset($this->proxy_host) && isset($this->proxy_port)) {
curl_setopt($ch, CURLOPT_PROXY, $this->proxy_host);
curl_setopt($ch, CURLOPT_PROXYPORT, $this->proxy_port);
}
$response = curl_exec($ch);
$info = curl_getinfo($ch);
if ($response === false || $info['http_code'] != 200) {
throw new Exception('HTTP Error calling Clockwork API - HTTP Status: ' . $info['http_code'] . ' - cURL Erorr: ' . curl_error($ch));
} elseif (curl_errno($ch) > 0) {
throw new Exception('HTTP Error calling Clockwork API - cURL Error: ' . curl_error($ch));
}
curl_close($ch);
return $response;
} elseif (function_exists('stream_get_contents')) {
// Enable error Track Errors
$track = ini_get('track_errors');
ini_set('track_errors',true);
$params = array('http' => array(
'method' => 'POST',
'header' => "Content-Type: text/xml\r\nUser-Agent: mediaburst PHP Wrapper/" . self::VERSION . "\r\n",
'content' => $data
));
if (isset($this->proxy_host) && isset($this->proxy_port)) {
$params['http']['proxy'] = 'tcp://'.$this->proxy_host . ':' . $this->proxy_port;
$params['http']['request_fulluri'] = True;
}
$ctx = stream_context_create($params);
$fp = @fopen($url, 'rb', false, $ctx);
if (!$fp) {
ini_set('track_errors',$track);
throw new Exception("HTTP Error calling Clockwork API - fopen Error: $php_errormsg");
}
$response = @stream_get_contents($fp);
if ($response === false) {
ini_set('track_errors',$track);
throw new Exception("HTTP Error calling Clockwork API - stream Error: $php_errormsg");
}
ini_set('track_errors',$track);
return $response;
} else {
throw new Exception("Clockwork requires PHP5 with cURL or HTTP stream support");
}
}
/**
* Does the server/HTTP wrapper support SSL
*
* This is a best guess effort, some servers have weird setups where even
* though cURL is compiled with SSL support is still fails to make
* any requests.
*
* @return bool True if SSL is supported
* @author Martin Steel
*/
protected function sslSupport() {
$ssl = false;
// See if PHP is compiled with cURL
if (extension_loaded('curl')) {
$version = curl_version();
$ssl = ($version['features'] & CURL_VERSION_SSL) ? true : false;
} elseif (extension_loaded('openssl')) {
$ssl = true;
}
return $ssl;
}
/**
* Log some XML, tidily if possible, in the PHP error log
*
* @param string log_msg The log message to prepend to the XML
* @param string xml An XML formatted string
*
* @return void
* @author Martin Steel
*/
protected function logXML($log_msg, $xml) {
// Tidy if possible
if (class_exists('tidy')) {
$tidy = new tidy;
$config = array(
'indent' => true,
'input-xml' => true,
'output-xml' => true,
'wrap' => 200
);
$tidy->parseString($xml, $config, 'utf8');
$tidy->cleanRepair();
$xml = $tidy;
}
// Output
error_log("Clockwork $log_msg: $xml");
}
/**
* Check if an array is associative
*
* @param array $array Array to check
* @return bool
* @author Martin Steel
*/
protected function is_assoc($array) {
return (bool)count(array_filter(array_keys($array), 'is_string'));
}
/**
* Check if a number is a valid MSISDN
*
* @param string $val Value to check
* @return bool True if valid MSISDN
* @author James Inman
* @since 1.3.0
* @todo Take an optional country code and check that the number starts with it
*/
public static function is_valid_msisdn($val) {
return preg_match( '/^[1-9][0-9]{7,12}$/', $val );
}
}

@ -1,27 +0,0 @@
<?php
/**
* Clockwork PHP API
*
* @package Clockwork
* @copyright Mediaburst Ltd 2012
* @license ISC
* @link http://www.clockworksms.com
*/
/*
* ClockworkException
*
* The Clockwork wrapper class will throw these if a general error
* occurs with your request, for example, an invalid API key.
*
* @package Clockwork
* @subpackage Exception
* @since 1.0
*/
class ClockworkException extends Exception {
public function __construct( $message, $code = 0 ) {
// make sure everything is assigned properly
parent::__construct( $message, $code );
}
}

@ -1,14 +0,0 @@
Copyright (c) 2011 - 2012, Mediaburst Ltd <hello@mediaburst.co.uk>
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

@ -1,253 +0,0 @@
# Clockwork SMS API Wrapper for PHP
This wrapper lets you interact with Clockwork without the hassle of having to create any XML or make HTTP calls.
## What's Clockwork?
[Clockwork][2] is Mediaburst's SMS API.
### Prerequisites
* A [Clockwork][2] account
## Usage
Require the Clockwork library:
```php
require 'class-Clockwork.php';
```
### Sending a message
```php
$clockwork = new Clockwork( $API_KEY );
$message = array( 'to' => '441234567891', 'message' => 'This is a test!' );
$result = $clockwork->send( $message );
```
### Sending multiple messages
We recommend you use batch sizes of 500 messages or fewer. By limiting the batch size it prevents any timeouts when sending.
```php
$clockwork = new Clockwork( $API_KEY );
$messages = array(
array( 'to' => '441234567891', 'message' => 'This is a test!' ),
array( 'to' => '441234567892', 'message' => 'This is a test 2!' )
);
$results = $clockwork->send( $messages );
```
### Handling the response
The responses come back as arrays, these contain the unique Clockwork message ID, whether the message worked (`success`), and the original SMS so you can update your database.
Array
(
[id] => VE_164732148
[success] => 1
[sms] => Array
(
[to] => 441234567891
[message] => This is a test!
)
)
If you send multiple SMS messages in a single send, you'll get back an array of results, one per SMS.
The result will look something like this:
Array
(
[0] => Array
(
[id] => VI_143228951
[success] => 1
[sms] => Array
(
[to] => 441234567891
[message] => This is a test!
)
)
[1] => Array
(
[id] => VI_143228952
[success] => 1
[sms] => Array
(
[to] => 441234567892
[message] => This is a test 2!
)
)
)
If a message fails, the reason for failure will be set in `error_code` and `error_message`.
For example, if you send to invalid phone number "abc":
Array
(
[error_code] => 10
[error_message] => Invalid 'To' Parameter
[success] => 0
[sms] => Array
(
[to] => abc
[message] => This is a test!
)
)
### Checking your balance
Check your available SMS balance:
```php
$clockwork = new Clockwork( $API_KEY );
$clockwork->checkBalance();
```
This will return:
Array
(
[symbol] => £
[balance] => 351.91
[code] => GBP
)
### Handling Errors
The Clockwork wrapper will throw a `ClockworkException` if the entire call failed.
```php
try
{
$clockwork = new Clockwork( 'invalid_key' );
$message = array( 'to' => 'abc', 'message' => 'This is a test!' );
$result = $clockwork->send( $message );
}
catch( ClockworkException $e )
{
print $e->getMessage();
// Invalid API Key
}
```
### Advanced Usage
This class has a few additional features that some users may find useful, if these are not set your account defaults will be used.
### Optional Parameters
See the [Clockwork Documentation](http://www.clockworksms.com/doc/clever-stuff/xml-interface/send-sms/) for full details on these options.
* $from [string]
The from address displayed on a phone when they receive a message
* $long [boolean]
Enable long SMS. A standard text can contain 160 characters, a long SMS supports up to 459.
* $truncate [nullable boolean]
Truncate the message payload if it is too long, if this is set to false, the message will fail if it is too long.
* $invalid_char_action [string]
What to do if the message contains an invalid character. Possible values are
* error - Fail the message
* remove - Remove the invalid characters then send
* replace - Replace some common invalid characters such as replacing curved quotes with straight quotes
* $ssl [boolean, default: true]
Use SSL when making an HTTP request to the Clockwork API
### Setting Options
#### Global Options
Options set on the API object will apply to all SMS messages unless specifically overridden.
In this example both messages will be sent from Clockwork:
```php
$options = array( 'from' => 'Clockwork' );
$clockwork = new Clockwork( $API_KEY, $options );
$messages = array(
array( 'to' => '441234567891', 'message' => 'This is a test!' ),
array( 'to' => '441234567892', 'message' => 'This is a test 2!' )
);
$results = $clockwork->send( $messages );
```
#### Per-message Options
Set option values individually on each message.
In this example, one message will be from Clockwork and the other from 84433:
```php
$clockwork = new Clockwork( $API_KEY, $options );
$messages = array(
array( 'to' => '441234567891', 'message' => 'This is a test!', 'from' => 'Clockwork' ),
array( 'to' => '441234567892', 'message' => 'This is a test 2!', 'from' => '84433' )
);
$results = $clockwork->send( $messages );
```
### SSL Errors
Due to the huge variety of PHP setups out there a small proportion of users may get PHP errors when making API calls due to their SSL configuration.
The errors will generally look something like this:
```
Fatal error:
Uncaught exception 'Exception' with message 'HTTP Error calling Clockwork API
HTTP Status: 0
cURL Erorr: SSL certificate problem, verify that the CA cert is OK.
Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed'
```
If you're seeing this error there are two fixes available, the first is easy, simply disable SSL on Clockwork calls. Alternatively you can setup your PHP install with the correct root certificates.
#### Disable SSL on Clockwork calls
```php
$options = array( 'ssl' => false );
$clockwork = new Clockwork( $API_KEY, $options );
```
#### Setup SSL root certificates on your server
This is much more complicated as it depends on your setup, however there are many guides available online.
Try a search term like "windows php curl root certificates" or "ubuntu update root certificates".
# License
This project is licensed under the ISC open-source license.
A copy of this license can be found in license.txt.
# Contributing
If you have any feedback on this wrapper drop us an email to [hello@clockworksms.com][1].
The project is hosted on GitHub at [https://github.com/mediaburst/clockwork-php][3].
If you would like to contribute a bug fix or improvement please fork the project
and submit a pull request.
[1]: mailto:hello@clockworksms.com
[2]: http://www.clockworksms.com/
[3]: https://github.com/mediaburst/clockwork-php
Loading…
Cancel
Save