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