parent
5cb082885a
commit
05ae9e78b1
@ -0,0 +1,4 @@ |
|||||||
|
Resubscription |
||||||
|
============== |
||||||
|
|
||||||
|
Limit session resubscriptions |
||||||
@ -0,0 +1,9 @@ |
|||||||
|
<?php |
||||||
|
/* For licensing terms, see /license.txt */ |
||||||
|
/** |
||||||
|
* Config the plugin |
||||||
|
* @author Imanol Losada Oriol <imanol.losada@beeznest.com> |
||||||
|
* @package chamilo.plugin.resubscription |
||||||
|
*/ |
||||||
|
|
||||||
|
require_once api_get_path(SYS_PATH) . 'main/inc/global.inc.php'; |
||||||
@ -0,0 +1,8 @@ |
|||||||
|
<?php |
||||||
|
/* For licensing terms, see /license.txt */ |
||||||
|
/** |
||||||
|
* Config the plugin |
||||||
|
* @author Imanol Losada Oriol <imanol.losada@beeznest.com> |
||||||
|
* @package chamilo.plugin.resubscription |
||||||
|
*/ |
||||||
|
require_once __DIR__ . '/config.php'; |
||||||
@ -0,0 +1,10 @@ |
|||||||
|
<?php |
||||||
|
/* For licensing terms, see /license.txt */ |
||||||
|
/** |
||||||
|
* Initialization install |
||||||
|
* @author Imanol Losada Oriol <imanol.losada@beeznest.com> |
||||||
|
* @package chamilo.plugin.resubscription |
||||||
|
*/ |
||||||
|
require_once __DIR__ . '/config.php'; |
||||||
|
|
||||||
|
Resubscription::create()->install(); |
||||||
@ -0,0 +1,13 @@ |
|||||||
|
<?php |
||||||
|
/* For licensing terms, see /license.txt */ |
||||||
|
/** |
||||||
|
* Strings to english L10n |
||||||
|
* @author Imanol Losada Oriol <imanol.losada@beeznest.com> |
||||||
|
* @package chamilo.plugin.resubscription |
||||||
|
*/ |
||||||
|
$strings['plugin_title'] = 'Resubscription'; |
||||||
|
$strings['plugin_comment'] = 'This plugin limits session resubscription.'; |
||||||
|
|
||||||
|
$strings['resubscription_limit'] = 'Resubscription limit'; |
||||||
|
$strings['resubscription_limit_help'] = 'This limits how often a user can be resubscribed'; |
||||||
|
$strings['CanResubscribeFromX'] = 'Subscription available from %s'; |
||||||
@ -0,0 +1,13 @@ |
|||||||
|
<?php |
||||||
|
/* For licensing terms, see /license.txt */ |
||||||
|
/** |
||||||
|
* Strings to spanish L10n |
||||||
|
* @author Imanol Losada Oriol <imanol.losada@beeznest.com> |
||||||
|
* @package chamilo.plugin.resubscription |
||||||
|
*/ |
||||||
|
$strings['plugin_title'] = 'Reinscripción'; |
||||||
|
$strings['plugin_comment'] = 'Este plugin limita las reinscripiones a sesiones.'; |
||||||
|
|
||||||
|
$strings['resubscription_limit'] = 'Límite de reinscripción'; |
||||||
|
$strings['resubscription_limit_help'] = 'Esto limita cada cuánto puede reinscribirse un usuario'; |
||||||
|
$strings['CanResubscribeFromX'] = 'Inscripción posible a partir del %s'; |
||||||
@ -0,0 +1,10 @@ |
|||||||
|
<?php |
||||||
|
/* For licensing terms, see /license.txt */ |
||||||
|
/** |
||||||
|
* Get the plugin info |
||||||
|
* @author Imanol Losada Oriol <imanol.losada@beeznest.com> |
||||||
|
* @package chamilo.plugin.resubscription |
||||||
|
*/ |
||||||
|
require_once __DIR__.'/config.php'; |
||||||
|
|
||||||
|
$plugin_info = Resubscription::create()->get_info(); |
||||||
@ -0,0 +1,2 @@ |
|||||||
|
<h1>Resubscription</h1> |
||||||
|
<p>Limit session resubscriptions</p> |
||||||
@ -0,0 +1,98 @@ |
|||||||
|
<?php |
||||||
|
/* For licensing terms, see /license.txt */ |
||||||
|
|
||||||
|
/** |
||||||
|
* Hook to limit session resubscriptions |
||||||
|
* |
||||||
|
* @author Imanol Losada Oriol <imanol.losada@beeznest.com> |
||||||
|
* @package chamilo.plugin.resubscription |
||||||
|
*/ |
||||||
|
class HookResubscription extends HookObserver implements HookResubscribeObserverInterface |
||||||
|
{ |
||||||
|
|
||||||
|
/** |
||||||
|
* Class constructor |
||||||
|
*/ |
||||||
|
public function __construct() |
||||||
|
{ |
||||||
|
parent::__construct( |
||||||
|
'plugin/resubscription/src/Resubscription.php', 'resubscription' |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 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'); |
||||||
|
$limitDate = gmdate('Y-m-d', strtotime(gmdate('Y-m-d')." -$resubscriptionLimit year")); |
||||||
|
|
||||||
|
$join = " INNER JOIN ".Database::get_main_table(TABLE_MAIN_SESSION)."ON id = id_session"; |
||||||
|
|
||||||
|
// User sessions and courses |
||||||
|
$userSessions = Database::select( |
||||||
|
'id_session, date_end', |
||||||
|
Database::get_main_table(TABLE_MAIN_SESSION_USER).$join, |
||||||
|
array( |
||||||
|
'where' => array( |
||||||
|
'id_user = ? AND date_end >= ?' => array( |
||||||
|
api_get_user_id(), |
||||||
|
$limitDate |
||||||
|
) |
||||||
|
), |
||||||
|
'order' => 'date_end DESC' |
||||||
|
) |
||||||
|
); |
||||||
|
$userSessionCourses = array(); |
||||||
|
foreach ($userSessions as $userSession) { |
||||||
|
$userSessionCourseResult = Database::select( |
||||||
|
'course_code', |
||||||
|
Database::get_main_table(TABLE_MAIN_SESSION_COURSE), |
||||||
|
array( |
||||||
|
'where' => array( |
||||||
|
'id_session = ?' => array( |
||||||
|
$userSession['id_session'] |
||||||
|
) |
||||||
|
) |
||||||
|
) |
||||||
|
); |
||||||
|
foreach ($userSessionCourseResult as $userSessionCourse) { |
||||||
|
if (!isset($userSessionCourses[$userSessionCourse['course_code']])) { |
||||||
|
$userSessionCourses[$userSessionCourse['course_code']] = $userSession['date_end']; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// Current session and courses |
||||||
|
$currentSessionCourseResult = Database::select( |
||||||
|
'course_code', |
||||||
|
Database::get_main_table(TABLE_MAIN_SESSION_COURSE), |
||||||
|
array( |
||||||
|
'where' => array( |
||||||
|
'id_session = ?' => array( |
||||||
|
$data['session_id'] |
||||||
|
) |
||||||
|
) |
||||||
|
) |
||||||
|
); |
||||||
|
|
||||||
|
// Check if current course code matches with one of the users |
||||||
|
foreach ($currentSessionCourseResult as $currentSessionCourse) { |
||||||
|
if (isset($userSessionCourses[$currentSessionCourse['course_code']])) { |
||||||
|
$endDate = $userSessionCourses[$currentSessionCourse['course_code']]; |
||||||
|
$resubscriptionDate = gmdate('Y-m-d', strtotime($endDate." +$resubscriptionLimit year")); |
||||||
|
|
||||||
|
$icon = Display::return_icon('students.gif', get_lang('Student')); |
||||||
|
$canResubscribeFrom = sprintf(get_plugin_lang('CanResubscribeFromX', 'resubscription'), $resubscriptionDate); |
||||||
|
$data['result'] = Display::label($icon . ' ' . $canResubscribeFrom, "info"); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,72 @@ |
|||||||
|
<?php |
||||||
|
/* For licensing terms, see /license.txt */ |
||||||
|
|
||||||
|
/** |
||||||
|
* Limit session resubscriptions |
||||||
|
* |
||||||
|
* @author Imanol Losada Oriol <imanol.losada@beeznest.com> |
||||||
|
* @package chamilo.plugin.resubscription |
||||||
|
*/ |
||||||
|
class Resubscription extends Plugin implements HookPluginInterface |
||||||
|
{ |
||||||
|
|
||||||
|
/** |
||||||
|
* Class constructor |
||||||
|
*/ |
||||||
|
protected function __construct() |
||||||
|
{ |
||||||
|
$parameters = array( |
||||||
|
'resubscription_limit' => 'text' |
||||||
|
); |
||||||
|
|
||||||
|
parent::__construct('0.1', 'Imanol Losada Oriol', $parameters); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Instance the plugin |
||||||
|
* @staticvar null $result |
||||||
|
* @return Resubscription |
||||||
|
*/ |
||||||
|
static function create() |
||||||
|
{ |
||||||
|
static $result = null; |
||||||
|
|
||||||
|
return $result ? $result : $result = new self(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Install the plugin |
||||||
|
*/ |
||||||
|
public function install() |
||||||
|
{ |
||||||
|
$this->installHook(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Uninstall the plugin |
||||||
|
* @return void |
||||||
|
*/ |
||||||
|
public function uninstall() |
||||||
|
{ |
||||||
|
$this->uninstallHook(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Install the Resubscription hook |
||||||
|
*/ |
||||||
|
public function installHook() |
||||||
|
{ |
||||||
|
$hook = HookResubscription::create(); |
||||||
|
HookResubscribe::create()->attach($hook); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Uninstall the Resubscription hook |
||||||
|
*/ |
||||||
|
public function uninstallHook() |
||||||
|
{ |
||||||
|
$hook = HookResubscription::create(); |
||||||
|
HookResubscribe::create()->detach($hook); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,10 @@ |
|||||||
|
<?php |
||||||
|
/* For licensing terms, see /license.txt */ |
||||||
|
/** |
||||||
|
* Initialization uninstall |
||||||
|
* @author Imanol Losada Oriol <imanol.losada@beeznest.com> |
||||||
|
* @package chamilo.plugin.resubscription |
||||||
|
*/ |
||||||
|
require_once __DIR__ . '/config.php'; |
||||||
|
|
||||||
|
Resubscription::create()->uninstall(); |
||||||
Loading…
Reference in new issue