Jelajahi Sumber

Merge pull request #492 from ilosada/BT8939a

Kannel SMS
Yannick Warnier 10 tahun lalu
induk
melakukan
d440fae8bc
66 mengubah file dengan 1212 tambahan dan 21 penghapusan
  1. 10 5
      main/admin/user_add.php
  2. 2 1
      main/dropbox/dropbox_functions.inc.php
  3. 2 1
      main/inc/ajax/user_manager.ajax.php
  4. 2 1
      main/inc/lib/add_course.lib.inc.php
  5. 3 2
      main/inc/lib/api.lib.php
  6. 2 1
      main/inc/lib/course.lib.php
  7. 10 5
      main/inc/lib/course_request.lib.php
  8. 3 2
      main/inc/lib/mail.lib.inc.php
  9. 14 0
      main/inc/lib/plugin.lib.php
  10. 2 1
      main/inc/lib/usermanager.lib.php
  11. 2 1
      main/user/user_add.php
  12. 2 1
      main/work/work.lib.php
  13. 15 0
      plugin/kannelsms/config.php
  14. 1 0
      plugin/kannelsms/index.php
  15. 15 0
      plugin/kannelsms/install.php
  16. 105 0
      plugin/kannelsms/lang/english.php
  17. 105 0
      plugin/kannelsms/lang/spanish.php
  18. 654 0
      plugin/kannelsms/lib/kannelsms.lib.php
  19. 186 0
      plugin/kannelsms/lib/kannelsms_plugin.class.php
  20. 5 0
      plugin/kannelsms/license.txt
  21. 10 0
      plugin/kannelsms/plugin.php
  22. 3 0
      plugin/kannelsms/readme.txt
  23. 1 0
      plugin/kannelsms/sms_templates/account_approved_connect.tpl
  24. 1 0
      plugin/kannelsms/sms_templates/account_created_updated_login_password.tpl
  25. 1 0
      plugin/kannelsms/sms_templates/answer_open_question_test_reviewed.tpl
  26. 1 0
      plugin/kannelsms/sms_templates/assignment_been_created_course.tpl
  27. 1 0
      plugin/kannelsms/sms_templates/been_invited_complete_survey_course.tpl
  28. 1 0
      plugin/kannelsms/sms_templates/been_invited_join_group.tpl
  29. 1 0
      plugin/kannelsms/sms_templates/been_subscribed_course.tpl
  30. 1 0
      plugin/kannelsms/sms_templates/check_email_connect_more_info.tpl
  31. 1 0
      plugin/kannelsms/sms_templates/course_opening_request_code_registered.tpl
  32. 1 0
      plugin/kannelsms/sms_templates/course_opening_request_course_code.tpl
  33. 1 0
      plugin/kannelsms/sms_templates/course_opening_request_course_code_approved.tpl
  34. 1 0
      plugin/kannelsms/sms_templates/messages_sent_edited_group_added.tpl
  35. 1 0
      plugin/kannelsms/sms_templates/messages_sent_edited_group_edited.tpl
  36. 1 0
      plugin/kannelsms/sms_templates/new_answer_posted_forum.tpl
  37. 1 0
      plugin/kannelsms/sms_templates/new_course_been_created.tpl
  38. 1 0
      plugin/kannelsms/sms_templates/new_course_suggested_teacher.tpl
  39. 1 0
      plugin/kannelsms/sms_templates/new_file_shared_course_by.tpl
  40. 1 0
      plugin/kannelsms/sms_templates/new_system_announcement_added.tpl
  41. 1 0
      plugin/kannelsms/sms_templates/new_thread_started_forum.tpl
  42. 1 0
      plugin/kannelsms/sms_templates/new_user_pending_approval.tpl
  43. 1 0
      plugin/kannelsms/sms_templates/new_user_subscribed_course.tpl
  44. 1 0
      plugin/kannelsms/sms_templates/password_updated_login_password.tpl
  45. 1 0
      plugin/kannelsms/sms_templates/posted_forum_course.tpl
  46. 1 0
      plugin/kannelsms/sms_templates/received_new_personal_messages.tpl
  47. 1 0
      plugin/kannelsms/sms_templates/reminder_assignment_course_due.tpl
  48. 1 0
      plugin/kannelsms/sms_templates/request_open_course_code_rejected.tpl
  49. 1 0
      plugin/kannelsms/sms_templates/requested_password_change.tpl
  50. 1 0
      plugin/kannelsms/sms_templates/student_answered_test.tpl
  51. 1 0
      plugin/kannelsms/sms_templates/student_answered_test_open_question.tpl
  52. 1 0
      plugin/kannelsms/sms_templates/student_answered_test_voice_question.tpl
  53. 1 0
      plugin/kannelsms/sms_templates/subscribed_session.tpl
  54. 1 0
      plugin/kannelsms/sms_templates/subscribed_session_csv.tpl
  55. 1 0
      plugin/kannelsms/sms_templates/system_announcement_update.tpl
  56. 1 0
      plugin/kannelsms/sms_templates/test_new_system_announcement_added.tpl
  57. 1 0
      plugin/kannelsms/sms_templates/test_system_announcement_update.tpl
  58. 1 0
      plugin/kannelsms/sms_templates/user_answered_inbox_message.tpl
  59. 1 0
      plugin/kannelsms/sms_templates/user_details_modified.tpl
  60. 1 0
      plugin/kannelsms/sms_templates/user_suggested_be_friends.tpl
  61. 1 0
      plugin/kannelsms/sms_templates/user_uploaded_assignment_check.tpl
  62. 1 0
      plugin/kannelsms/sms_templates/user_uploaded_assignment_check_student_submits_paper.tpl
  63. 1 0
      plugin/kannelsms/sms_templates/user_uploaded_assignment_course.tpl
  64. 1 0
      plugin/kannelsms/sms_templates/user_uploaded_assignment_course_student_submits_paper.tpl
  65. 1 0
      plugin/kannelsms/sms_templates/welcome_login_password.tpl
  66. 16 0
      plugin/kannelsms/uninstall.php

+ 10 - 5
main/admin/user_add.php

@@ -312,7 +312,14 @@ if( $form->validate()) {
             $username = $email;
         }
 
-		$user_id = UserManager::create_user($firstname, $lastname, $status, $email, $username, $password, $official_code, $language, $phone, null, $auth_source, $expiration_date, $active, $hr_dept_id, null, null, $send_mail);
+        $extra = array();
+        foreach ($user as $key => $value) {
+            if (substr($key, 0, 6) == 'extra_') { //an extra field
+                $extra[substr($key, 6)] = $value;
+            }
+        }
+
+		$user_id = UserManager::create_user($firstname, $lastname, $status, $email, $username, $password, $official_code, $language, $phone, null, $auth_source, $expiration_date, $active, $hr_dept_id, $extra, null, $send_mail);
 
 		Security::clear_token();
 		$tok = Security::get_token();
@@ -330,10 +337,8 @@ if( $form->validate()) {
 				UserManager::update_user($user_id, $firstname, $lastname, $username, $password, $auth_source, $email, $status, $official_code, $phone, $picture_uri, $expiration_date, $active, null, $hr_dept_id, null, $language);
 			}
 
-			foreach ($user as $key => $value) {
-				if (substr($key, 0, 6) == 'extra_') { //an extra field
-					UserManager::update_extra_field_value($user_id, substr($key, 6), $value);
-				}
+			foreach ($extra as $key => $value) {
+				UserManager::update_extra_field_value($user_id, $key, $value);
 			}
 			if ($platform_admin) {
                 UserManager::add_user_as_admin($user_id);

+ 2 - 1
main/dropbox/dropbox_functions.inc.php

@@ -879,8 +879,9 @@ function store_add_dropbox()
     if ($b_send_mail) {
         foreach ($new_work_recipients as $recipient_id) {
             $recipent_temp = UserManager :: get_user_info_by_id($recipient_id);
+            $plugin = new AppPlugin();
             $additionalParameters = array(
-                'smsType' => ClockworksmsPlugin::NEW_FILE_SHARED_COURSE_BY,
+                'smsType' => constant($plugin->getSMSPluginName().'::NEW_FILE_SHARED_COURSE_BY'),
                 'userId' => $recipient_id,
                 'courseTitle' => $_course['title'],
                 'userUsername' => $recipent_temp['username']

+ 2 - 1
main/inc/ajax/user_manager.ajax.php

@@ -95,8 +95,9 @@ switch ($action) {
                     //$emailbody.=get_lang('Problem'). "\n\n". get_lang('SignatureFormula');
                     $emailbody.=api_get_person_name(api_get_setting('administratorName'), api_get_setting('administratorSurname'))."\n". get_lang('Manager'). " ".api_get_setting('siteName')."\nT. ".api_get_setting('administratorTelephone')."\n" .get_lang('Email') ." : ".api_get_setting('emailAdministrator');
 
+                    $plugin = new AppPlugin();
                      $additionalParameters = array(
-                        'smsType' => ClockworksmsPlugin::ACCOUNT_APPROVED_CONNECT,
+                        'smsType' => constant($plugin->getSMSPluginName().'::ACCOUNT_APPROVED_CONNECT'),
                         'userId' => $user_id
                     );
 

+ 2 - 1
main/inc/lib/add_course.lib.inc.php

@@ -2915,8 +2915,9 @@ function register_course($params)
                 $message .= get_lang('Language').' '.$course_language;
 
                 $userInfo = api_get_user_info($user_id);
+                $plugin = new AppPlugin();
                 $additionalParameters = array(
-                    'smsType' => ClockworksmsPlugin::NEW_COURSE_BEEN_CREATED,
+                    'smsType' => constant($plugin->getSMSPluginName().'::NEW_COURSE_BEEN_CREATED'),
                     'userId' => $user_id,
                     'courseName' => $title,
                     'creatorUsername' => $userInfo['username']

+ 3 - 2
main/inc/lib/api.lib.php

@@ -6076,8 +6076,9 @@ function api_send_mail($to, $subject, $message, $additional_headers = null, $add
     $installedPluginsList = $plugin->getInstalledPluginListObject();
     foreach ($installedPluginsList as $installedPlugin) {
         if ($installedPlugin->isMailPlugin and array_key_exists("smsType", $additionalParameters)) {
-            $clockworksmsObject = new Clockworksms();
-            $clockworksmsObject->send($additionalParameters);
+            $className = str_replace("Plugin", "", get_class($installedPlugin));
+            $smsObject = new $className;
+            $smsObject->send($additionalParameters);
         }
     }
 

+ 2 - 1
main/inc/lib/course.lib.php

@@ -2615,8 +2615,9 @@ class CourseManager
             $sender_name = api_get_person_name(api_get_setting('administratorName'), api_get_setting('administratorSurname'), null, PERSON_NAME_EMAIL_ADDRESS);
             $email_admin = api_get_setting('emailAdministrator');
 
+            $plugin = new AppPlugin();
             $additionalParameters = array(
-                'smsType' => ClockworksmsPlugin::NEW_USER_SUBSCRIBED_COURSE,
+                'smsType' => constant($plugin->getSMSPluginName().'::NEW_USER_SUBSCRIBED_COURSE'),
                 'userId' => $tutor['user_id'],
                 'userUsername' => $student['username'],
                 'courseCode' => $course_code

+ 10 - 5
main/inc/lib/course_request.lib.php

@@ -149,8 +149,10 @@ class CourseRequestManager
         $recipient_email_admin = get_setting('emailAdministrator');
 
         $userInfo = api_get_user_info($user_id);
+        $plugin = new AppPlugin();
+        $className = $plugin->getSMSPluginName();
         $additionalParameters = array(
-            'smsType' => ClockworksmsPlugin::NEW_COURSE_SUGGESTED_TEACHER,
+            'smsType' => constant($className.'::NEW_COURSE_SUGGESTED_TEACHER'),
             'userId' => $user_id,
             'userUsername' => $userInfo['username']
         );
@@ -187,7 +189,7 @@ class CourseRequestManager
         $recipient_email_teacher = $sender_email_teacher;
 
         $additionalParameters = array(
-            'smsType' => ClockworksmsPlugin::COURSE_OPENING_REQUEST_CODE_REGISTERED,
+            'smsType' => constant($className.'::COURSE_OPENING_REQUEST_CODE_REGISTERED'),
             'userId' => $user_info['user_id'],
             'courseCode' => $wanted_code
         );
@@ -467,8 +469,9 @@ class CourseRequestManager
             $recipient_email = $user_info['mail'];
             $extra_headers = 'Bcc: '.$sender_email;
 
+            $plugin = new AppPlugin();
             $additionalParameters = array(
-                'smsType' => ClockworksmsPlugin::COURSE_OPENING_REQUEST_CODE_APPROVED,
+                'smsType' => constant($plugin->getSMSPluginName().'::COURSE_OPENING_REQUEST_CODE_APPROVED'),
                 'userId' => $user_id,
                 'courseCode' => $course_info['code']
             );
@@ -545,8 +548,9 @@ class CourseRequestManager
         $recipient_email = $user_info['mail'];
         $extra_headers = 'Bcc: '.$sender_email;
 
+        $plugin = new AppPlugin();
         $additionalParameters = array(
-            'smsType' => ClockworksmsPlugin::COURSE_OPENING_REQUEST_CODE_REJECTED,
+            'smsType' => constant($plugin->getSMSPluginName().'::COURSE_OPENING_REQUEST_CODE_REJECTED'),
             'userId' => $user_id,
             'courseCode' => $code
         );
@@ -622,8 +626,9 @@ class CourseRequestManager
         $recipient_email = $user_info['mail'];
         $extra_headers = 'Bcc: '.$sender_email;
 
+        $plugin = new AppPlugin();
         $additionalParameters = array(
-            'smsType' => ClockworksmsPlugin::COURSE_OPENING_REQUEST_CODE,
+            'smsType' => constant($plugin->getSMSPluginName().'::COURSE_OPENING_REQUEST_CODE'),
             'userId' => $user_id,
             'courseCode' => $code
         );

+ 3 - 2
main/inc/lib/mail.lib.inc.php

@@ -227,8 +227,9 @@ function api_mail_html(
     $installedPluginsList = $plugin->getInstalledPluginListObject();
     foreach ($installedPluginsList as $installedPlugin) {
         if ($installedPlugin->isMailPlugin and array_key_exists("smsType", $additionalParameters)) {
-            $clockworksmsObject = new Clockworksms();
-            $clockworksmsObject->send($additionalParameters);
+            $className = str_replace("Plugin", "", get_class($installedPlugin));
+            $smsObject = new $className;
+            $smsObject->send($additionalParameters);
         }
     }
 

+ 14 - 0
main/inc/lib/plugin.lib.php

@@ -586,4 +586,18 @@ class AppPlugin
             }
         }
     }
+
+    /**
+     * Get first SMS plugin name
+     * @return string|boolean
+     */
+    public function getSMSPluginName() {
+        $installedPluginsList = $this->getInstalledPluginListObject();
+        foreach ($installedPluginsList as $installedPlugin) {
+            if ($installedPlugin->isMailPlugin) {
+                return get_class($installedPlugin);
+            }
+        }
+        return false;
+    }
 }

+ 2 - 1
main/inc/lib/usermanager.lib.php

@@ -212,8 +212,9 @@ class UserManager
                     EventsDispatcher::events('user_registration', $values);
                 } else {
                     $phoneNumber = isset($extra['mobile_phone_number']) ? $extra['mobile_phone_number'] : null;
+                    $plugin = new AppPlugin();
                     $additionalParameters = array(
-                        'smsType' => ClockworksmsPlugin::WELCOME_LOGIN_PASSWORD,
+                        'smsType' => constant($plugin->getSMSPluginName().'::WELCOME_LOGIN_PASSWORD'),
                         'userId' => $return,
                         'mobilePhoneNumber' => $phoneNumber,
                         'password' => $original_password

+ 2 - 1
main/user/user_add.php

@@ -202,8 +202,9 @@ if($register) {
             $message = stripslashes(api_get_person_name($firstname_form, $lastname_form))." ".get_lang('AddedU');
         }
 
+        $plugin = new AppPlugin();
         $additionalParameters = array(
-            'smsType' => ClockworksmsPlugin::BEEN_SUBSCRIBED_COURSE,
+            'smsType' => constant($plugin->getSMSPluginName().'::BEEN_SUBSCRIBED_COURSE'),
             'userId' => $user_id,
             'courseTitle' => $currentCourseName
         );

+ 2 - 1
main/work/work.lib.php

@@ -2537,8 +2537,9 @@ function send_email_on_homework_creation($course_id)
                 $emailbody .= get_lang('HomeworkHasBeenCreatedForTheCourse')." ".$course_id.". "."\n\n".get_lang('PleaseCheckHomeworkPage');
                 $emailbody .= "\n\n".api_get_person_name($currentUser["firstname"], $currentUser["lastname"]);
 
+                $plugin = new AppPlugin();
                 $additionalParameters = array(
-                    'smsType' => ClockworksmsPlugin::ASSIGNMENT_BEEN_CREATED_COURSE,
+                    'smsType' => constant($plugin->getSMSPluginName().'::ASSIGNMENT_BEEN_CREATED_COURSE'),
                     'userId' => $student["user_id"],
                     'courseTitle' => $course_id
                 );

+ 15 - 0
plugin/kannelsms/config.php

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

+ 1 - 0
plugin/kannelsms/index.php

@@ -0,0 +1 @@
+<?php

+ 15 - 0
plugin/kannelsms/install.php

@@ -0,0 +1,15 @@
+<?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.kannelsms
+ * @author  Imanol Losada <imanol.losada@beeznest.com>
+ */
+/**
+ * Initialization
+ */
+require_once dirname(__FILE__).'/config.php';
+KannelsmsPlugin::create()->install();

+ 105 - 0
plugin/kannelsms/lang/english.php

@@ -0,0 +1,105 @@
+<?php
+
+$strings['plugin_title']        = "Kannel SMS";
+$strings['plugin_comment']      = "When enabled and an email sent successfully, a text message is sent to the user.";
+
+$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['hostAddress'] = "Host address";
+$strings['hostAddress_help'] = "This is the address where your SMS gateway is hosted. Example: http://mobilegateway.com/tools/gateways/smssender";
+$strings['username'] = "Username";
+$strings['password'] = "Password";
+$strings['from'] = "Sender mobile number";
+
+$strings['sms_types'] = "Send SMS when";
+$strings['mobile_phone_number'] = "Mobile";
+
+$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";

+ 105 - 0
plugin/kannelsms/lang/spanish.php

@@ -0,0 +1,105 @@
+<?php
+
+$strings['plugin_title']        = "Kannel SMS";
+$strings['plugin_comment']      = "Ofrece la posibilidad de enviar SMS a celulares cuando se envían e-mails de notificación.";
+
+$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 Kannel 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['hostAddress'] = "Dirección del servidor";
+$strings['hostAddress_help'] = "Ésta es la dirección en donde se aloja su pasarela de SMS. Ejemplo: http://mobilegateway.com/tools/gateways/smssender";
+$strings['username'] = "Nombre de usuario";
+$strings['password'] = "Contraseña";
+$strings['from'] = "Número de móvil remitente";
+
+$strings['sms_types'] = "Enviar un SMS cuando";
+$strings['mobile_phone_number'] = "Móvil";
+
+$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";

+ 654 - 0
plugin/kannelsms/lib/kannelsms.lib.php

@@ -0,0 +1,654 @@
+<?php
+/* For licensing terms, see /vendor/license.txt */
+
+/**
+ * Class Kannelsms
+ * This script handles incoming SMS information, process it and sends an SMS if everything is right
+ * 
+ * @package chamilo.plugin.kannelsms.lib
+ * @author  Imanol Losada <imanol.losada@beeznest.com>
+ *
+ * Kannelsms-Chamilo connector class
+ */
+
+class Kannelsms
+{
+    public $api;
+    public $hostAddress;
+    public $username;
+    public $password;
+    public $from;
+    public $plugin_enabled = false;
+
+    /**
+     * Constructor (generates a connection to the API)
+     * @param   string  Kannelsms API key required to use the plugin
+     * @return  void
+     */
+    public function __construct($apiKey = null)
+    {
+        $plugin = KannelsmsPlugin::create();
+        $kannelSMSPlugin = $plugin->get('tool_enable');
+        $this->table = Database::get_main_table('user_field_values');
+        if ($kannelSMSPlugin == true) {
+            $this->api = new Kannel(' ');
+            $this->hostAddress = $plugin->get('hostAddress');
+            $this->username = $plugin->get('username');
+            $this->password = $plugin->get('password');
+            $this->from = $plugin->get('from');
+            $this->plugin_enabled = true;
+        }
+    }
+
+    /**
+     * getMobilePhoneNumberById (retrieves a user mobile phone number by user id)
+     * @param   int User id
+     * @return  int User's mobile phone number
+     */
+    private function getMobilePhoneNumberById($userId)
+    {
+        require_once api_get_path(LIBRARY_PATH).'extra_field.lib.php';
+        require_once api_get_path(LIBRARY_PATH).'extra_field_value.lib.php';
+
+        $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['field_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)) {
+            $message = array(
+                "to" => array_key_exists("mobilePhoneNumber",$additionalParameters) ?
+                    $additionalParameters['mobilePhoneNumber'] :
+                    $this->getMobilePhoneNumberById($additionalParameters['userId']),
+                "message" => $this->getSms($additionalParameters)
+            );
+
+            if (!empty($message['message'])) {
+                if(extension_loaded('curl')) {
+                    $url = $this->hostAddress.'?username='.
+                        $this->username.'&password='.$this->password.'&from='.
+                        $this->from.'&to='.$message['to'].'&msg='.urlencode($message['message']);
+                    $ch = curl_init($url);
+                    curl_exec($ch);
+                    curl_close($ch);
+                }
+
+                // 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  KannelsmsPlugin 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('kannelsms_message'.$messageKey))
+            )
+        );
+
+        if (empty($result)) {
+            $tpl->assign('message', '');
+        } else {
+            $templatePath = 'kannelsms/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 = KannelsmsPlugin::create();
+        $tool_name = $plugin->get_lang('plugin_title');
+        $tpl = new Template($tool_name);
+
+        switch ($additionalParameters['smsType']) {
+            case KannelsmsPlugin::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 KannelsmsPlugin::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 KannelsmsPlugin::ACCOUNT_APPROVED_CONNECT:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'account_approved_connect.tpl',
+                    'XAccountApprovedConnectX',
+                    array(
+                        api_get_setting('siteName'),
+                        $tpl->params['_p']['web']
+                    )
+                );
+                break;
+            case KannelsmsPlugin::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 KannelsmsPlugin::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 KannelsmsPlugin::NEW_COURSE_SUGGESTED_TEACHER:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'new_course_suggested_teacher.tpl',
+                    'XNewCourseSuggestedTeacherX',
+                    array(
+                        api_get_setting('siteName'),
+                        $additionalParameters['userUsername']
+                    )
+                );
+                break;
+            case KannelsmsPlugin::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 KannelsmsPlugin::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 KannelsmsPlugin::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 KannelsmsPlugin::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 KannelsmsPlugin::BEEN_SUBSCRIBED_COURSE:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'been_subscribed_course.tpl',
+                    'XBeenSubscribedCourseX',
+                    array(
+                        api_get_setting('siteName'),
+                        $additionalParameters['courseTitle']
+                    )
+                );
+                break;
+            case KannelsmsPlugin::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 KannelsmsPlugin::ACCOUNT_CREATED_UPDATED_LOGIN_PASSWORD:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'account_created_updated_login_password.tpl',
+                    'XAccountCreatedUpdatedLoginXPasswordX',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::PASSWORD_UPDATED_LOGIN_PASSWORD:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'password_updated_login_password.tpl',
+                    'XPasswordUpdatedLoginXPasswordX',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::REQUESTED_PASSWORD_CHANGE:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'requested_password_change.tpl',
+                    'XPasswordUpdatedLoginXPasswordX',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::RECEIVED_NEW_PERSONAL_MESSAGES:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'received_new_personal_messages.tpl',
+                    'XReceivedNewPersonalMessages',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::NEW_USER_PENDING_APPROVAL:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'new_user_pending_approval.tpl',
+                    'XNewUserXPendingApproval',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::POSTED_FORUM_COURSE:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'posted_forum_course.tpl',
+                    'XXPostedForumXCourseX',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::CHECK_EMAIL_CONNECT_MORE_INFO:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'check_email_connect_more_info.tpl',
+                    'XXXCheckEmailConnectMoreInfo',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::STUDENT_ANSWERED_TEST:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'student_answered_test.tpl',
+                    'XXStudentXAnsweredTestX',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::STUDENT_ANSWERED_TEST_OPEN_QUESTION:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'student_answered_test_open_question.tpl',
+                    'XXStudentXAnsweredTestXOpenQuestion',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::STUDENT_ANSWERED_TEST_VOICE_QUESTION:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'student_answered_test_voice_question.tpl',
+                    'XXStudentXAnsweredTestXVoiceQuestion',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::ANSWER_OPEN_QUESTION_TEST_REVIEWED:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'answer_open_question_test_reviewed.tpl',
+                    'XXAnswerOpenQuestionTestXReviewed',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::NEW_THREAD_STARTED_FORUM:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'new_thread_started_forum.tpl',
+                    'XXNewThreadXStartedForumX',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::NEW_ANSWER_POSTED_FORUM:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'new_answer_posted_forum.tpl',
+                    'XXNewAnswerPostedXForumX',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::NEW_SYSTEM_ANNOUNCEMENT_ADDED:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'new_system_announcement_added.tpl',
+                    'XXNewSystemAnnouncementAdded',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::TEST_NEW_SYSTEM_ANNOUNCEMENT_ADDED:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'test_new_system_announcement_added.tpl',
+                    'XTestXNewSystemAnnouncementAdded',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::SYSTEM_ANNOUNCEMENT_UPDATE:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'system_announcement_update.tpl',
+                    'XXSystemAnnouncementUpdate',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::TEST_SYSTEM_ANNOUNCEMENT_UPDATE:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'test_system_announcement_update.tpl',
+                    'XXSystemAnnouncementUpdate',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::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 KannelsmsPlugin::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 KannelsmsPlugin::USER_UPLOADED_ASSIGNMENT_COURSE:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'user_uploaded_assignment_course.tpl',
+                    'XUserXUploadedAssignmentXCourseX',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::USER_UPLOADED_ASSIGNMENT_CHECK:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'user_uploaded_assignment_check.tpl',
+                    'XUserXUploadedAssignmentXCheckX',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::SUBSCRIBED_SESSION:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'subscribed_session.tpl',
+                    'XSubscribedSessionX',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::SUBSCRIBED_SESSION_CSV:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'subscribed_session_csv.tpl',
+                    'XSubscribedSessionXCSV',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::USER_SUGGESTED_BE_FRIENDS:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'user_suggested_be_friends.tpl',
+                    'XUserXSuggestedBeFriends',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::USER_ANSWERED_INBOX_MESSAGE:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'user_answered_inbox_message.tpl',
+                    'XUserXAnsweredInboxMessage',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::BEEN_INVITED_JOIN_GROUP:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'been_invited_join_group.tpl',
+                    'XBeenInvitedJoinGroupX',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::MESSAGES_SENT_EDITED_GROUP_EDITED:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'messages_sent_edited_group_edited.tpl',
+                    'XMessagesSentEditedGroupXEdited',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::MESSAGES_SENT_EDITED_GROUP_ADDED:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'messages_sent_edited_group_added.tpl',
+                    'XMessagesSentEditedGroupXAdded',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::BEEN_INVITED_COMPLETE_SURVEY_COURSE:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'been_invited_complete_survey_course.tpl',
+                    'XBeenInvitedCompleteSurveyXCourseX',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::REMINDER_ASSIGNMENT_COURSE_DUE:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'reminder_assignment_course_due.tpl',
+                    'XReminderAssignmentXCourseXDue',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            /*case KannelsmsPlugin::USER_DETAILS_MODIFIED:
+                return $this->buildSms(
+                    $plugin,
+                    $tpl,
+                    'user_details_modified.tpl',
+                    'XUserDetailsModified',
+                    array(
+                        api_get_setting('siteName')
+                    )
+                );
+                break;*/
+            default:
+                return '';
+        }
+    }
+}

+ 186 - 0
plugin/kannelsms/lib/kannelsms_plugin.class.php

@@ -0,0 +1,186 @@
+<?php
+/* For licensing terms, see /vendor/license.txt */
+
+/**
+ * Class KannelsmsPlugin
+ * This script contains SMS type constants and basic plugin functions
+ * 
+ * @package chamilo.plugin.kannelsms.lib
+ * @author  Imanol Losada <imanol.losada@beeznest.com>
+ */
+class KannelsmsPlugin extends Plugin
+{
+    const WELCOME_LOGIN_PASSWORD = 0;
+    const NEW_FILE_SHARED_COURSE_BY = 1;
+    const ACCOUNT_APPROVED_CONNECT = 2;
+    const NEW_COURSE_BEEN_CREATED = 3;
+    const NEW_USER_SUBSCRIBED_COURSE = 4;
+    const NEW_COURSE_SUGGESTED_TEACHER = 5;
+    const COURSE_OPENING_REQUEST_CODE_REGISTERED = 6;
+    const COURSE_OPENING_REQUEST_CODE_APPROVED = 7;
+    const COURSE_OPENING_REQUEST_CODE_REJECTED = 8;
+    const COURSE_OPENING_REQUEST_CODE = 9;
+    const BEEN_SUBSCRIBED_COURSE = 10;
+    const ASSIGNMENT_BEEN_CREATED_COURSE = 11;
+    const ACCOUNT_CREATED_UPDATED_LOGIN_PASSWORD = 12;
+    const PASSWORD_UPDATED_LOGIN_PASSWORD = 13;
+    const REQUESTED_PASSWORD_CHANGE = 14;
+    const RECEIVED_NEW_PERSONAL_MESSAGES = 15;
+    const NEW_USER_PENDING_APPROVAL = 16;
+    const POSTED_FORUM_COURSE = 17;
+    const CHECK_EMAIL_CONNECT_MORE_INFO = 18;
+    const STUDENT_ANSWERED_TEST = 19;
+    const STUDENT_ANSWERED_TEST_OPEN_QUESTION = 20;
+    const STUDENT_ANSWERED_TEST_VOICE_QUESTION = 21;
+    const ANSWER_OPEN_QUESTION_TEST_REVIEWED = 22;
+    const NEW_THREAD_STARTED_FORUM = 23;
+    const NEW_ANSWER_POSTED_FORUM = 24;
+    const NEW_SYSTEM_ANNOUNCEMENT_ADDED = 25;
+    const TEST_NEW_SYSTEM_ANNOUNCEMENT_ADDED = 26;
+    const SYSTEM_ANNOUNCEMENT_UPDATE = 27;
+    const TEST_SYSTEM_ANNOUNCEMENT_UPDATE = 28;
+    const USER_UPLOADED_ASSIGNMENT_COURSE_STUDENT_SUBMITS_PAPER = 29;
+    const USER_UPLOADED_ASSIGNMENT_CHECK_STUDENT_SUBMITS_PAPER = 30;
+    const USER_UPLOADED_ASSIGNMENT_COURSE = 31;
+    const USER_UPLOADED_ASSIGNMENT_CHECK = 32;
+    const SUBSCRIBED_SESSION = 33;
+    const SUBSCRIBED_SESSION_CSV = 34;
+    const USER_SUGGESTED_BE_FRIENDS = 35;
+    const USER_ANSWERED_INBOX_MESSAGE = 36;
+    const BEEN_INVITED_JOIN_GROUP = 37;
+    const MESSAGES_SENT_EDITED_GROUP_EDITED = 38;
+    const MESSAGES_SENT_EDITED_GROUP_ADDED = 39;
+    const BEEN_INVITED_COMPLETE_SURVEY_COURSE = 40;
+    const REMINDER_ASSIGNMENT_COURSE_DUE = 41;
+    const USER_DETAILS_MODIFIED = 42;
+
+    public $isCoursePlugin = true;
+    public $isMailPlugin = true;
+
+    /**
+     * create (a singleton function that ensures KannelsmsPlugin instance is
+     * created only once. If it is already created, it returns the instance)
+     * @return  object  KannelsmsPlugin instance
+     */
+    public static function create()
+    {
+        static $result = null;
+        return $result ? $result : $result = new self();
+    }
+
+    /**
+     * Constructor
+     * @return  void
+     */
+    protected function __construct()
+    {
+        $fields = array(
+            'tool_enable' => 'boolean',
+            'hostAddress' => 'text',
+            'username' => 'text',
+            'password' => 'text',
+            'from' => 'text'
+        );
+        $smsTypeOptions = $this->getSmsTypeOptions();
+        foreach ($smsTypeOptions as $smsTypeOption) {
+            $fields[$smsTypeOption] = 'checkbox';
+        }
+        parent::__construct('0.1', 'Imanol Losada', $fields);
+    }
+
+    /**
+     * addMobilePhoneNumberField (adds a mobile phone number field if it is not
+     * already created)
+     * @return  void
+     */
+    private function addMobilePhoneNumberField()
+    {
+        $result = Database::select('mobile_phone_number', 'user_field');
+        if (empty($result)) {
+            require_once api_get_path(LIBRARY_PATH).'extra_field.lib.php';
+            $extraField = new Extrafield('user');
+            $extraField->save(array(
+                'field_type' => 1,
+                'field_variable' => 'mobile_phone_number',
+                'field_display_text' => $this->get_lang('mobile_phone_number'),
+                'field_default_value' => null,
+                'field_order' => 2,
+                'field_visible' => 1,
+                'field_changeable' => 1,
+                'field_filter' => null
+            ));
+        }
+    }
+
+    /**
+     * getSmsTypeOptions (returns all SMS types)
+     * @return  array   SMS types
+     */
+    private function getSmsTypeOptions()
+    {
+        return array(
+            'MessageWelcomeXLoginXPasswordX',
+            'MessageXNewFileSharedCourseXByX',
+            'MessageXAccountApprovedConnectX',
+            'MessageXNewCourseXBeenCreatedX',
+            'MessageXNewUserXSubscribedCourseX',
+            'MessageXNewCourseSuggestedTeacherX',
+            'MessageXCourseOpeningRequestCodeXRegistered',
+            'MessageXCourseOpeningRequestCourseCodeXApproved',
+            'MessageXRequestOpenCourseCodeXReject',
+            'MessageXCourseOpeningRequestCourseCodeX',
+            'MessageXBeenSubscribedCourseX',
+            'MessageXAssignmentBeenCreatedCourseX',
+            'MessageXAccountCreatedUpdatedLoginXPasswordX',
+            'MessageXPasswordUpdatedLoginXPasswordX',
+            'MessageXRequestedPasswordChange',
+            'MessageXReceivedNewPersonalMessages',
+            'MessageXNewUserXPendingApproval',
+            'MessageXXPostedForumXCourseX',
+            'MessageXXXCheckEmailConnectMoreInfo',
+            'MessageXXStudentXAnsweredTestX',
+            'MessageXXStudentXAnsweredTestXOpenQuestion',
+            'MessageXXStudentXAnsweredTestXVoiceQuestion',
+            'MessageXXAnswerOpenQuestionTestXReviewed',
+            'MessageXXNewThreadXStartedForumX',
+            'MessageXXNewAnswerPostedXForumX',
+            'MessageXXNewSystemAnnouncementAdded',
+            'MessageXTestXNewSystemAnnouncementAdded',
+            'MessageXXSystemAnnouncementUpdate',
+            'MessageXTestXSystemAnnouncementUpdate',
+            'MessageXUserXUploadedAssignmentXCourseXStudentSubmitsPaper',
+            'MessageXUserXUploadedAssignmentXCheckXStudentSubmitsPaper',
+            'MessageXUserXUploadedAssignmentXCourseX',
+            'MessageXUserXUploadedAssignmentXCheckX',
+            'MessageXSubscribedSessionX',
+            'MessageXSubscribedSessionXCSV',
+            'MessageXUserXSuggestedBeFriends',
+            'MessageXUserXAnsweredInboxMessage',
+            'MessageXBeenInvitedJoinGroupX',
+            'MessageXMessagesSentEditedGroupXEdited',
+            'MessageXMessagesSentEditedGroupXAdded',
+            'MessageXBeenInvitedCompleteSurveyXCourseX',
+            'MessageXReminderAssignmentXCourseXDue',
+            'MessageXUserDetailsModified'
+        );
+    }
+
+    /**
+     * install (installs the plugin)
+     * @return  void
+     */
+    public function install()
+    {
+        $this->addMobilePhoneNumberField();
+    }
+    /**
+     * install (uninstalls the plugin and removes all plugin's tables and/or rows)
+     * @return  void
+     */
+    public function uninstall()
+    {
+        $tSettings = Database::get_main_table(TABLE_MAIN_SETTINGS_CURRENT);
+        $sql = "DELETE FROM $tSettings WHERE subkey = 'kannelsms'";
+        Database::query($sql);
+    }
+}

+ 5 - 0
plugin/kannelsms/license.txt

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

+ 10 - 0
plugin/kannelsms/plugin.php

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

+ 3 - 0
plugin/kannelsms/readme.txt

@@ -0,0 +1,3 @@
+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 - 0
plugin/kannelsms/sms_templates/account_approved_connect.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/account_created_updated_login_password.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/answer_open_question_test_reviewed.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/assignment_been_created_course.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/been_invited_complete_survey_course.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/been_invited_join_group.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/been_subscribed_course.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/check_email_connect_more_info.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/course_opening_request_code_registered.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/course_opening_request_course_code.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/course_opening_request_course_code_approved.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/messages_sent_edited_group_added.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/messages_sent_edited_group_edited.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/new_answer_posted_forum.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/new_course_been_created.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/new_course_suggested_teacher.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/new_file_shared_course_by.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/new_system_announcement_added.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/new_thread_started_forum.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/new_user_pending_approval.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/new_user_subscribed_course.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/password_updated_login_password.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/posted_forum_course.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/received_new_personal_messages.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/reminder_assignment_course_due.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/request_open_course_code_rejected.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/requested_password_change.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/student_answered_test.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/student_answered_test_open_question.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/student_answered_test_voice_question.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/subscribed_session.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/subscribed_session_csv.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/system_announcement_update.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/test_new_system_announcement_added.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/test_system_announcement_update.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/user_answered_inbox_message.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/user_details_modified.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/user_suggested_be_friends.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/user_uploaded_assignment_check.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/user_uploaded_assignment_check_student_submits_paper.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/user_uploaded_assignment_course.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/user_uploaded_assignment_course_student_submits_paper.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 1 - 0
plugin/kannelsms/sms_templates/welcome_login_password.tpl

@@ -0,0 +1 @@
+{{ message }}

+ 16 - 0
plugin/kannelsms/uninstall.php

@@ -0,0 +1,16 @@
+<?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.kannelsms
+ * @author  Imanol Losada <imanol.losada@beeznest.com>
+ */
+/**
+ * Queries
+ */
+require_once dirname(__FILE__).'/config.php';
+KannelsmsPlugin::create()->uninstall();