/** * Limit session resubscription when a Chamilo user is resubscribed to a session * @param HookCreateUserEventInterface $hook The hook */ public function hookResubscribe(HookResubscribeEventInterface $hook) { $data = $hook->getEventData(); if ($data['type'] === HOOK_EVENT_TYPE_PRE) { $resubscriptionLimit = Resubscription::create()->get('resubscription_limit'); // Initialize variables as a calendar year by default $limitDateFormat = 'Y-01-01'; $limitDate = gmdate($limitDateFormat); $resubscriptionOffset = "1 year"; // No need to use a 'switch' with only two options so an 'if' is enough. // However this could change if the number of options increases if ($resubscriptionLimit === 'natural_year') { $limitDateFormat = 'Y-m-d'; $limitDate = gmdate($limitDateFormat); $limitDate = gmdate($limitDateFormat, strtotime("{$limitDate} -{$resubscriptionOffset}")); } $join = " INNER JOIN " . Database::get_main_table(TABLE_MAIN_SESSION) . "ON id = session_id"; // User sessions and courses $userSessions = Database::select('session_id, date_end', Database::get_main_table(TABLE_MAIN_SESSION_USER) . $join, array('where' => array('user_id = ? AND date_end >= ?' => array(api_get_user_id(), $limitDate)), 'order' => 'date_end DESC')); $userSessionCourses = array(); foreach ($userSessions as $userSession) { $userSessionCourseResult = Database::select('c_id', Database::get_main_table(TABLE_MAIN_SESSION_COURSE), array('where' => array('session_id = ?' => array($userSession['session_id'])))); foreach ($userSessionCourseResult as $userSessionCourse) { if (!isset($userSessionCourses[$userSessionCourse['c_id']])) { $userSessionCourses[$userSessionCourse['c_id']] = $userSession['date_end']; } } } // Current session and courses $currentSessionCourseResult = Database::select('c_id', Database::get_main_table(TABLE_MAIN_SESSION_COURSE), array('where' => array('session_id = ?' => array($data['session_id'])))); // Check if current course code matches with one of the users foreach ($currentSessionCourseResult as $currentSessionCourse) { if (isset($userSessionCourses[$currentSessionCourse['c_id']])) { $endDate = $userSessionCourses[$currentSessionCourse['c_id']]; $resubscriptionDate = gmdate($limitDateFormat, strtotime($endDate . " +{$resubscriptionOffset}")); $icon = Display::return_icon('students.gif', get_lang('Student')); $canResubscribeFrom = sprintf(get_plugin_lang('CanResubscribeFromX', 'resubscription'), $resubscriptionDate); throw new Exception(Display::label($icon . ' ' . $canResubscribeFrom, "info")); } } } }
<?php /* For licensing terms, see /license.txt */ /** * Initialization install * @author Imanol Losada Oriol <*****@*****.**> * @package chamilo.plugin.resubscription */ require_once __DIR__ . '/config.php'; Resubscription::create()->install();
<?php /* For licensing terms, see /license.txt */ /** * Get the plugin info * @author Imanol Losada Oriol <*****@*****.**> * @package chamilo.plugin.resubscription */ require_once __DIR__ . '/config.php'; $plugin_info = Resubscription::create()->get_info();