Просмотр исходного кода

Merge pull request #788 from AngelFQC/BT9896

Send email when user has been subscribed - refs BT#9896 #TMI
Angel Fernando Quiroz Campos 9 лет назад
Родитель
Сommit
10ae9a061a

+ 41 - 0
app/Migrations/Schema/V110/Version20150805161000.php

@@ -0,0 +1,41 @@
+<?php
+
+/* For licensing terms, see /license.txt */
+
+namespace Application\Migrations\Schema\V110;
+
+use Application\Migrations\AbstractMigrationChamilo;
+use Doctrine\DBAL\Schema\Schema;
+
+/**
+ * Class Version20150713132630
+ *
+ * @package Application\Migrations\Schema\V11010
+ */
+class Version20150805161000 extends AbstractMigrationChamilo
+{
+
+    /**
+     * @param Schema $schema
+     */
+    public function up(Schema $schema)
+    {
+        $sessionTable = $schema->getTable('session');
+
+        $sessionTable->addColumn(
+            'send_subscription_notification',
+            \Doctrine\DBAL\Types\Type::BOOLEAN,
+            ['default' => false]
+        );
+    }
+
+    /**
+     * @param Schema $schema
+     */
+    public function down(Schema $schema)
+    {
+        $sessionTable = $schema->getTable('session');
+        $sessionTable->dropColumn('send_subscription_notification');
+    }
+
+}

+ 70 - 48
main/inc/lib/sessionmanager.lib.php

@@ -1,3 +1,4 @@
+
 <?php
 /* For licensing terms, see /license.txt */
 
@@ -63,6 +64,8 @@ class SessionManager
      * @param   int     $showDescription Optional. Whether show the session description
      * @param   array   $extraFields
      * @param   int     $sessionAdminId Optional. If this sessions was created by a session admin, assign it to him
+     * @param boolean $sendSubscritionNotification Optional.
+     *          Whether send a mail notification to users being subscribed
      * @todo use an array to replace all this parameters or use the model.lib.php ...
      * @return mixed       Session ID on success, error message otherwise
      * */
@@ -82,7 +85,8 @@ class SessionManager
         $description = null,
         $showDescription = 0,
         $extraFields = array(),
-        $sessionAdminId = 0
+        $sessionAdminId = 0,
+        $sendSubscritionNotification = false
     ) {
         global $_configuration;
 
@@ -154,7 +158,8 @@ class SessionManager
                     'session_admin_id' => $sessionAdminId,
                     'visibility' => $visibility,
                     'description' => $description,
-                    'show_description' => intval($showDescription)
+                    'show_description' => intval($showDescription),
+                    'send_subscription_notification' => $sendSubscritionNotification
                 );
 
                 if (!empty($startDate)) {
@@ -1312,6 +1317,8 @@ class SessionManager
      * @param int       $duration
      * @param array     $extraFields
      * @param int       $sessionAdminId
+     * @param boolean $sendSubscritionNotification Optional.
+     *          Whether send a mail notification to users being subscribed
      * @return mixed
      */
     public static function edit_session(
@@ -1330,7 +1337,8 @@ class SessionManager
         $showDescription = 0,
         $duration = null,
         $extraFields = array(),
-        $sessionAdminId = 0
+        $sessionAdminId = 0,
+        $sendSubscritionNotification = false
     ) {
         $name = trim(stripslashes($name));
         $coachId = intval($coachId);
@@ -1373,7 +1381,8 @@ class SessionManager
                     'id_coach' => $coachId,
                     'description'=> $description,
                     'show_description' => intval($showDescription),
-                    'visibility' => $visibility
+                    'visibility' => $visibility,
+                    'send_subscription_notification' => $sendSubscritionNotification
                 ];
 
                 if (!empty($sessionAdminId)) {
@@ -1508,15 +1517,13 @@ class SessionManager
      * @param array $user_list
      * @param int $session_visibility
      * @param bool $empty_users
-     * @param bool $send_email
      * @return bool
      */
     public static function suscribe_users_to_session(
         $id_session,
         $user_list,
         $session_visibility = SESSION_VISIBLE_READ_ONLY,
-        $empty_users = true,
-        $send_email = false
+        $empty_users = true
     ) {
         if ($id_session != strval(intval($id_session))) {
             return false;
@@ -1533,12 +1540,12 @@ class SessionManager
         $tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER);
         $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
 
-        $session_info = api_get_session_info($id_session);
-        $session_name = $session_info['name'];
+        $entityManager = Database::getManager();
+        $session = $entityManager->find('ChamiloCoreBundle:Session', $id_session);
 
         // from function parameter
         if (empty($session_visibility)) {
-            $session_visibility = $session_info['visibility']; //loaded from DB
+            $session_visibility = $session->getVisibility();
             //default status loaded if empty
             if (empty($session_visibility))
                 $session_visibility = SESSION_VISIBLE_READ_ONLY; // by default readonly 1
@@ -1564,45 +1571,52 @@ class SessionManager
             $course_list[] = $row['c_id'];
         }
 
-        if ($send_email) {
+        if (
+            $session->getSendSubscriptionNotification() &&
+            is_array($user_list)
+        ) {
             // Sending emails only
-            if (is_array($user_list) && count($user_list) > 0) {
-                foreach ($user_list as $user_id) {
-                    if (!in_array($user_id, $existingUsers)) {
-                        $tplSubject = new Template(null, false, false, false, false, false);
-                        $tplSubject->assign('mailSiteName', api_get_setting('siteName'));
-                        $layoutSubject = $tplSubject->get_template('mail/subject_subscription_to_session_confirmation.tpl');
-                        $subject = $tplSubject->fetch($layoutSubject);
-
-                        $user_info = api_get_user_info($user_id);
-
-                        $tplContent = new Template(null, false, false, false, false, false);
-                        // Variables for default template
-                        $tplContent->assign('mailCompleteName', stripslashes($user_info['complete_name']));
-                        $tplContent->assign('mailSessionName', $session_name);
-                        $tplContent->assign('mailSiteName', api_get_setting('siteName'));
-                        $tplContent->assign('mailWebPath', api_get_path(WEB_PATH));
-                        $tplContent->assign('mailAdministratorName', api_get_setting('administratorName'));
-                        $tplContent->assign('mailAdministratorSurname', api_get_setting('administratorSurname'));
-                        $tplContent->assign('mailAdministratorTelephone', api_get_setting('administratorTelephone'));
-                        $tplContent->assign('mailEmailAdministrator', api_get_setting('emailAdministrator'));
-                        $layoutContent = $tplContent->get_template('mail/content_subscription_to_session_confirmation.tpl');
-                        $content = $tplContent->fetch($layoutContent);
-
-                        MessageManager::send_message(
-                            $user_id,
-                            $subject,
-                            $content,
-                            array(),
-                            array(),
-                            null,
-                            null,
-                            null,
-                            null,
-                            null
-                        );
-                    }
+            foreach ($user_list as $user_id) {
+                if (in_array($user_id, $existingUsers)) {
+                    continue;
                 }
+
+                $tplSubject = new Template(null, false, false, false, false, false);
+                $layoutSubject = $tplSubject->get_template(
+                    'mail/subject_subscription_to_session_confirmation.tpl'
+                );
+                $subject = $tplSubject->fetch($layoutSubject);
+
+                $user_info = api_get_user_info($user_id);
+
+                $tplContent = new Template(null, false, false, false, false, false);
+                // Variables for default template
+                $tplContent->assign(
+                    'complete_name',
+                    stripslashes($user_info['complete_name'])
+                );
+                $tplContent->assign('session_name', $session->getName());
+                $tplContent->assign(
+                    'session_coach',
+                    $session->getGeneralCoach()->getCompleteName()
+                );
+                $layoutContent = $tplContent->get_template(
+                    'mail/content_subscription_to_session_confirmation.tpl'
+                );
+                $content = $tplContent->fetch($layoutContent);
+
+                MessageManager::send_message(
+                    $user_id,
+                    $subject,
+                    $content,
+                    array(),
+                    array(),
+                    null,
+                    null,
+                    null,
+                    null,
+                    null
+                );
             }
         }
 
@@ -3674,7 +3688,7 @@ class SessionManager
             }
             $users = null;
             //Subscribing in read only mode
-            self::suscribe_users_to_session($sid, $short_users, SESSION_VISIBLE_READ_ONLY, true, false);
+            self::suscribe_users_to_session($sid, $short_users, SESSION_VISIBLE_READ_ONLY, true);
             $short_users = null;
         }
         return $sid;
@@ -6580,6 +6594,14 @@ class SessionManager
 
         $form->addElement('html', '</div>');
 
+        $form->addCheckBox(
+            'send_subscription_notification',
+            [
+                get_lang('SendSubscriptionNotification'),
+                get_lang('SendAnEmailWhenAUserBeingSubscribed')
+            ]
+        );
+
         // Extra fields
         $extra_field = new ExtraField('session');
         $extra = $extra_field->addElements($form, $sessionId);

+ 6 - 12
main/inc/lib/usermanager.lib.php

@@ -364,8 +364,9 @@ class UserManager
             if (!empty($email) && $send_mail) {
                 $recipient_name = api_get_person_name($firstName, $lastName, null, PERSON_NAME_EMAIL_ADDRESS);
                 $tplSubject = new Template(null, false, false, false, false, false);
-                $tplSubject->assign('mailSiteName', api_get_setting('siteName'));
-                $layoutSubject = $tplSubject->get_template('mail/subject_registration_platform.tpl');
+                $layoutSubject = $tplSubject->get_template(
+                    'mail/subject_registration_platform.tpl'
+                );
                 $emailSubject = $tplSubject->fetch($layoutSubject);
                 $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');
@@ -380,17 +381,10 @@ class UserManager
                 }
                 $tplContent = new Template(null, false, false, false, false, false);
                 // variables for the default template
-                $tplContent->assign('mailCompleteName', stripslashes(api_get_person_name($firstName, $lastName)));
-                $tplContent->assign('mailSiteName', api_get_setting('siteName'));
-                $tplContent->assign('mailLoginName', $loginName);
-                $tplContent->assign('mailOriginalPassword', stripslashes($original_password));
+                $tplContent->assign('complete_name', stripslashes(api_get_person_name($firstName, $lastName)));
+                $tplContent->assign('login_name', $loginName);
+                $tplContent->assign('original_password', stripslashes($original_password));
                 $tplContent->assign('mailWebPath', $url);
-                $tplContent->assign('mailAdministratorName', api_get_setting('administratorName'));
-                $tplContent->assign('mailAdministratorSurname', api_get_setting('administratorSurname'));
-                $tplContent->assign('mailAdministratorTelephone', api_get_setting('administratorTelephone'));
-                $tplContent->assign('mailEmailAdministrator', api_get_setting('emailAdministrator'));
-                // variables for others templates
-                $tplContent->assign('mailEmailAdministrator', api_get_setting('emailAdministrator'));
 
                 $layoutContent = $tplContent->get_template('mail/content_registration_platform.tpl');
                 $emailBody = $tplContent->fetch($layoutContent);

+ 4 - 1
main/session/session_add.php

@@ -173,6 +173,7 @@ if ($form->validate()) {
     $duration = isset($params['duration']) ? $params['duration'] : null;
     $description = $params['description'];
     $showDescription = isset($params['show_description']) ? 1: 0;
+    $sendSubscritionNotification = isset($params['send_subscription_notification']);
 
     $extraFields = array();
     foreach ($params as $key => $value) {
@@ -196,7 +197,9 @@ if ($form->validate()) {
         $duration,
         $description,
         $showDescription,
-        $extraFields
+        $extraFields,
+        null,
+        $sendSubscritionNotification
     );
 
     if ($return == strval(intval($return))) {

+ 4 - 2
main/session/session_edit.php

@@ -98,7 +98,6 @@ $(function() {
 
 $form->addButtonUpdate(get_lang('ModifyThisSession'));
 
-
 $formDefaults = $sessionInfo;
 
 $formDefaults['coach_username'] = $sessionInfo['id_coach'];
@@ -129,6 +128,7 @@ if ($form->validate()) {
     $duration = isset($params['duration']) ? $params['duration'] : null;
     $description = $params['description'];
     $showDescription = isset($params['show_description']) ? 1: 0;
+    $sendSubscritionNotification = isset($params['send_subscription_notification']);
 
     $extraFields = array();
     foreach ($params as $key => $value) {
@@ -152,7 +152,9 @@ if ($form->validate()) {
         $description,
         $showDescription,
         $duration,
-        $extraFields
+        $extraFields,
+        null,
+        $sendSubscritionNotification
     );
 
     if ($return == strval(intval($return))) {

+ 1 - 4
main/session/session_user_import.php

@@ -31,7 +31,6 @@ if (isset($_POST['formSent']) && $_POST['formSent']) {
         !empty($_FILES['import_file']['tmp_name'])
     ) {
         $form_sent = $_POST['formSent'];
-        $send_mail = $_POST['sendMail'] ? 1 : 0;
 
         // CSV
         $users = Import::csvToArray($_FILES['import_file']['tmp_name']);
@@ -49,8 +48,7 @@ if (isset($_POST['formSent']) && $_POST['formSent']) {
                 $session_id,
                 $user_list,
                 null,
-                false,
-                $send_mail
+                false
             );
             foreach ($user_list as & $user_id) {
                 $user_info = api_get_user_info($user_id);
@@ -85,7 +83,6 @@ $form = new FormValidator(
 );
 $form->addElement('hidden', 'formSent', 1);
 $form->addElement('file', 'import_file', get_lang('ImportCSVFileLocation'));
-$form->addElement('checkbox', 'sendMail', null, get_lang('SendMailToUsers'));
 $form->addButtonImport(get_lang('Import'));
 
 $form->display();

+ 11 - 12
main/template/default/mail/content_registration_platform.tpl

@@ -1,14 +1,13 @@
-{{ 'Dear' | get_lang}} {{ mailCompleteName }},
+{{ 'Dear'|get_lang }} {{ complete_name }},
 </br>
-{{ 'YouAreReg' | get_lang }} {{ mailSiteName }} {{ 'WithTheFollowingSettings' | get_lang }}</br>
-{{ 'Username' | get_lang }} : {{ mailLoginName }}
-{{ 'Pass' | get_lang }} : {{ mailOriginalPassword }}
+{{ 'YouAreReg'|get_lang }} {{ _s.site_name }} {{ 'WithTheFollowingSettings'|get_lang }}</br>
+{{ 'Username'|get_lang }} : {{ login_name }}
+{{ 'Pass'|get_lang }} : {{ original_password }}
 </br></br>
-{{ 'Address' | get_lang}} {{ mailSiteName }} {{ 'Is' | get_lang }} : {{ mailWebPath }}</br>
-{{ 'Problem' | get_lang}}</br>
-{{ 'SignatureFormula' | get_lang }}</br>
-{{ mailAdministratorName }}, {{ mailAdministratorSurname }}
-{{ 'Manager' | get_lang }} {{ mailSiteName }}
-T. {{ mailAdministratorTelephone}}
-</br>
-{{ 'Email' | get_lang }} : {{ emailAdministrator }}
+{{ 'Address'|get_lang }} {{ _s.site_name }} {{ 'Is'|get_lang }} : {{ mailWebPath }}</br>
+{{ 'Problem'|get_lang }}</br>
+{{ 'SignatureFormula'|get_lang }}</br>
+{{ _admin.name }}, {{ _admin.surname }}
+{{ 'Manager'|get_lang }} {{ _s.site_name }}
+{{ _admin.telephone ? 'T. ' ~ _admin.telephone ~ '<br>' }}
+{{ _admin.email ? 'Email'|get_lang ~ ': ' ~ _admin.email }}

+ 9 - 9
main/template/default/mail/content_subscription_to_session_confirmation.tpl

@@ -1,12 +1,12 @@
-{{ 'Dear' | get_lang}} {{ mailCompleteName }},
+{{ 'Dear'|get_lang }} {{ complete_name }},
 </br>
-{{ 'YouAreRegisterToSessionX' | get_lang | format(mailSessionName)}}
+{{ 'YouAreRegisterToSessionX'|get_lang|format(session_name) }}
 </br>
-{{ 'Address' | get_lang }}  {{ mailSiteName }} {{ 'Is' | get_lang }} : {{ mailWebPath }}</br>
-{{ 'Problem' | get_lang}}</br>
-{{ 'SignatureFormula' | get_lang }}</br>
-{{ mailAdministratorName }} {{ mailAdministratorSurname }}
-{{ 'Manager' | get_lang }} {{ mailSiteName }}
-T. {{ mailAdministratorTelephone}}
+{{ 'Address'|get_lang }}  {{ _s.site_name }} {{ 'Is'|get_lang }} : {{ _p.web }}
 </br>
-{{ 'Email' | get_lang }} : {{ emailAdministrator }}
+{{ 'Problem'|get_lang }}</br>
+{{ 'SignatureFormula'|get_lang }}</br>
+{{ _admin.name }} {{ _admin.surname }}
+{{ 'Manager'|get_lang }} {{ _s.site_name }}
+{{ _admin.telephone ? 'T. ' ~ _admin.telephone ~ '<br>' }}
+{{ _admin.email ? 'Email'|get_lang ~ ': ' ~ _admin.email }}

+ 1 - 1
main/template/default/mail/subject_registration_platform.tpl

@@ -1 +1 @@
-{{mailSiteName}} {{ 'YourReg' | get_lang}} {{mailSiteName}}
+{{ '[' ~ _s.site_name ~ '] ' ~ 'YourReg'|get_lang ~ ' ' ~ _s.site_name }}

+ 1 - 1
main/template/default/mail/subject_subscription_to_session_confirmation.tpl

@@ -1 +1 @@
-{{mailSiteName}} {{ 'YourReg' | get_lang}} {{mailSiteName}}
+{{ '[' ~ _s.site_name ~ '] ' ~ 'YourReg'|get_lang ~ ' ' ~ _s.site_name }}

+ 0 - 1
main/webservices/registration.soap.php

@@ -4915,7 +4915,6 @@ function WSSubscribeUserToSessionSimple($params) {
                 $session_id,
                 array($user_id),
                 SESSION_VISIBLE_READ_ONLY,
-                false,
                 false
             );
             if ($debug) error_log('User registered to the course: '.$session_id);

+ 28 - 0
src/Chamilo/CoreBundle/Entity/Session.php

@@ -196,6 +196,12 @@ class Session
      **/
     protected $currentCourse;
 
+    /**
+     * @var boolean
+     * @ORM\Column(name="send_subscription_notification", type="boolean", nullable=false, options={"default":false})
+     */
+    private $sendSubscriptionNotification;
+
     /**
      * Constructor
      */
@@ -959,4 +965,26 @@ class Session
         }
         return $this;
     }
+
+    /**
+     * Set $sendSubscriptionNotification
+     * @param boolean $sendNotification
+     * @return \Chamilo\CoreBundle\Entity\Session
+     */
+    public function setSendSubscriptionNotification($sendNotification)
+    {
+        $this->sendSubscriptionNotification = $sendNotification;
+
+        return $this;
+    }
+
+    /**
+     * Get $sendSubscriptionNotification
+     * @return boolean
+     */
+    public function getSendSubscriptionNotification()
+    {
+        return $this->sendSubscriptionNotification;
+    }
+
 }