parent
0a921c4b5f
commit
0c77db9dd5
@ -0,0 +1,4 @@ |
||||
Advanced subscription plugin for Chamilo LMS |
||||
======================================= |
||||
@TODO:Edit README.md |
||||
|
@ -0,0 +1,15 @@ |
||||
<?php |
||||
/* For licensing terms, see /license.txt */ |
||||
/** |
||||
* Config the plugin |
||||
* @author Daniel Alejandro Barreto Alva <daniel.barreto@beeznest.com> |
||||
* @package chamilo.plugin.advanced_subscription |
||||
*/ |
||||
|
||||
define('TABLE_ADV_SUB_QUEUE', 'plugin_advsub_queue'); |
||||
define('TABLE_ADV_SUB_MAIL', 'plugin_advsub_mail'); |
||||
define('TABLE_ADV_SUB_MAIL_TYPE', 'plugin_advsub_mail_type'); |
||||
define('TABLE_ADV_SUB_MAIL_STATUS', 'plugin_advsub_mail_status'); |
||||
require_once __DIR__ . '/../../main/inc/global.inc.php'; |
||||
require_once api_get_path(LIBRARY_PATH) . 'plugin.class.php'; |
||||
require_once api_get_path(PLUGIN_PATH) . 'advancedsubscription/src/advanced_subscription_plugin.class.php'; |
@ -0,0 +1,7 @@ |
||||
<?php |
||||
/* For license terms, see /license.txt */ |
||||
/** |
||||
* Show form |
||||
*/ |
||||
require_once('config.php'); |
||||
require_once('src/index.php'); |
@ -0,0 +1,15 @@ |
||||
<?php |
||||
/* For license terms, see /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.buycourses |
||||
*/ |
||||
/** |
||||
* Initialization |
||||
*/ |
||||
require_once dirname(__FILE__) . '/config.php'; |
||||
if (!api_is_platform_admin()) { |
||||
die ('You must have admin permissions to install plugins'); |
||||
} |
||||
AdvancedSubscriptionPlugin::create()->install(); |
@ -0,0 +1,21 @@ |
||||
<?php |
||||
|
||||
/* Strings for settings */ |
||||
$strings['plugin_title'] = 'Inscripción Avanzada'; |
||||
$strings['plugin_comment'] = 'Plugin que permite gestionar la inscripción en cola a sesiones con comunicación a a un portal externo'; |
||||
$strings['uit_value'] = 'Valor de la Unidad Impositiva Tributaria (UIT)'; |
||||
$strings['ws_url'] = 'URL del Webservice'; |
||||
$strings['min_profile_percentage'] = 'Porcentaje mínimo de perfil completado'; |
||||
$strings['max_expended_uit'] = 'Limite anual de cursos en UIT por año(Medido en UIT)'; |
||||
$strings['max_expended_num'] = 'Limite anual de cursos en horas por año(Medido en UIT)'; |
||||
$strings['max_course_times'] = 'Limite anual de cantidad de cursos por año'; |
||||
$strings['check_induction'] = 'Activar requerimiento de curso inducción'; |
||||
|
||||
/* String for error message about requirements */ |
||||
$strings['AdvancedSubscriptionNotConnected'] = "Usted no está conectado en la plataforma. Por favor ingrese su usuario / constraseña para poder inscribirse"; |
||||
$strings['AdvancedSubscriptionProfileIncomplete'] = "Su perfil no es lo suficientemente completo para poder inscribirse al curso. Por favor complete su perfil"; |
||||
$strings['AdvancedSubscriptionIncompleteInduction'] = "Usted aún no ha completado el curso de inducción. Por favor complete el curso inducción"; |
||||
$strings['AdvancedSubscriptionCostXLimitReached'] = "Lo sentimos, usted ya ha alcanzado el límite anual de %s UIT para los cursos que ha seguido este año"; |
||||
$strings['AdvancedSubscriptionTimeXLimitReached'] = "Lo sentimos, usted ya ha alcanzado el límite anual de %s horas para los cursos que ha seguido este año"; |
||||
$strings['AdvancedSubscriptionCourseXLimitReached'] = "Lo sentimos, usted ya ha alcanzado el límite anual de %s cursos que ha seguido este año"; |
||||
$strings['AdvancedSubscriptionNotMoreAble'] = "Lo sentimos, usted ya no cumple con las condiciones iniciales para poder inscribirse al curso"; |
@ -0,0 +1,21 @@ |
||||
<?php |
||||
|
||||
/* Strings for settings */ |
||||
$strings['plugin_title'] = 'Inscripción Avanzada'; |
||||
$strings['plugin_comment'] = 'Plugin que permite gestionar la inscripción en cola a sesiones con comunicación a a un portal externo'; |
||||
$strings['uit_value'] = 'Valor de la Unidad Impositiva Tributaria (UIT)'; |
||||
$strings['ws_url'] = 'URL del Webservice'; |
||||
$strings['min_profile_percentage'] = 'Porcentaje mínimo de perfil completado'; |
||||
$strings['max_expended_uit'] = 'Limite anual de cursos en UIT por año(Medido en UIT)'; |
||||
$strings['max_expended_num'] = 'Limite anual de cursos en horas por año(Medido en UIT)'; |
||||
$strings['max_course_times'] = 'Limite anual de cantidad de cursos por año'; |
||||
$strings['check_induction'] = 'Activar requerimiento de curso inducción'; |
||||
|
||||
/* String for error message about requirements */ |
||||
$strings['AdvancedSubscriptionNotConnected'] = "Usted no está conectado en la plataforma. Por favor ingrese su usuario / constraseña para poder inscribirse"; |
||||
$strings['AdvancedSubscriptionProfileIncomplete'] = "Su perfil no es lo suficientemente completo para poder inscribirse al curso. Por favor complete su perfil"; |
||||
$strings['AdvancedSubscriptionIncompleteInduction'] = "Usted aún no ha completado el curso de inducción. Por favor complete el curso inducción"; |
||||
$strings['AdvancedSubscriptionCostXLimitReached'] = "Lo sentimos, usted ya ha alcanzado el límite anual de %s UIT para los cursos que ha seguido este año"; |
||||
$strings['AdvancedSubscriptionTimeXLimitReached'] = "Lo sentimos, usted ya ha alcanzado el límite anual de %s horas para los cursos que ha seguido este año"; |
||||
$strings['AdvancedSubscriptionCourseXLimitReached'] = "Lo sentimos, usted ya ha alcanzado el límite anual de %s cursos que ha seguido este año"; |
||||
$strings['AdvancedSubscriptionNotMoreAble'] = "Lo sentimos, usted ya no cumple con las condiciones iniciales para poder inscribirse al curso"; |
@ -0,0 +1,21 @@ |
||||
<?php |
||||
|
||||
/* Strings for settings */ |
||||
$strings['plugin_title'] = 'Inscripción Avanzada'; |
||||
$strings['plugin_comment'] = 'Plugin que permite gestionar la inscripción en cola a sesiones con comunicación a a un portal externo'; |
||||
$strings['uit_value'] = 'Valor de la Unidad Impositiva Tributaria (UIT)'; |
||||
$strings['ws_url'] = 'URL del Webservice'; |
||||
$strings['min_profile_percentage'] = 'Porcentaje mínimo de perfil completado'; |
||||
$strings['max_expended_uit'] = 'Limite anual de cursos en UIT por año(Medido en UIT)'; |
||||
$strings['max_expended_num'] = 'Limite anual de cursos en horas por año(Medido en UIT)'; |
||||
$strings['max_course_times'] = 'Limite anual de cantidad de cursos por año'; |
||||
$strings['check_induction'] = 'Activar requerimiento de curso inducción'; |
||||
|
||||
/* String for error message about requirements */ |
||||
$strings['AdvancedSubscriptionNotConnected'] = "Usted no está conectado en la plataforma. Por favor ingrese su usuario / constraseña para poder inscribirse"; |
||||
$strings['AdvancedSubscriptionProfileIncomplete'] = "Su perfil no es lo suficientemente completo para poder inscribirse al curso. Por favor complete su perfil"; |
||||
$strings['AdvancedSubscriptionIncompleteInduction'] = "Usted aún no ha completado el curso de inducción. Por favor complete el curso inducción"; |
||||
$strings['AdvancedSubscriptionCostXLimitReached'] = "Lo sentimos, usted ya ha alcanzado el límite anual de %s UIT para los cursos que ha seguido este año"; |
||||
$strings['AdvancedSubscriptionTimeXLimitReached'] = "Lo sentimos, usted ya ha alcanzado el límite anual de %s horas para los cursos que ha seguido este año"; |
||||
$strings['AdvancedSubscriptionCourseXLimitReached'] = "Lo sentimos, usted ya ha alcanzado el límite anual de %s cursos que ha seguido este año"; |
||||
$strings['AdvancedSubscriptionNotMoreAble'] = "Lo sentimos, usted ya no cumple con las condiciones iniciales para poder inscribirse al curso"; |
@ -0,0 +1,12 @@ |
||||
<?php |
||||
/* For license terms, see /license.txt */ |
||||
/** |
||||
* This script is a configuration file for the date plugin. You can use it as a master for other platform plugins (course plugins are slightly different). |
||||
* These settings will be used in the administration interface for plugins (Chamilo configuration settings->Plugins) |
||||
* @package chamilo.plugin.advanced_subscription |
||||
*/ |
||||
/** |
||||
* Plugin details (must be present) |
||||
*/ |
||||
require_once __DIR__ . '/config.php'; |
||||
$plugin_info = AdvancedSubscriptionPlugin::create()->get_info(); |
@ -0,0 +1,2 @@ |
||||
Advanced subscription plugin<br/><br/> |
||||
@TODO: Complete readme.txt |
@ -0,0 +1,286 @@ |
||||
<?php |
||||
/* For licensing terms, see /license.txt */ |
||||
/** |
||||
* @TODO: Improve description |
||||
* This class is used to add an advanced subscription allowing the admin to |
||||
* create user queues requesting a subscribe to a session |
||||
* @package chamilo.plugin.advanced_subscription |
||||
*/ |
||||
|
||||
class AdvancedSubscriptionPlugin extends Plugin |
||||
{ |
||||
/** |
||||
* Constructor |
||||
*/ |
||||
function __construct() |
||||
{ |
||||
$parameters = array( |
||||
'uit_value' => 'boolean', |
||||
'ws_url' => 'text', |
||||
'min_profile_percentage' => 'text', |
||||
'max_expended_uit' => 'text', |
||||
'max_expended_num' => 'text', |
||||
'max_course_times' => 'text', |
||||
'check_induction' => 'boolean', |
||||
'confirmation_message' => 'wysiwyg' |
||||
); |
||||
|
||||
parent::__construct('1.0', 'Daniel Alejandro Barreto Alva', $parameters); |
||||
} |
||||
|
||||
/** |
||||
* Instance the plugin |
||||
* @staticvar null $result |
||||
* @return AdvancedSubscriptionPlugin |
||||
*/ |
||||
static function create() |
||||
{ |
||||
static $result = null; |
||||
|
||||
return $result ? $result : $result = new self(); |
||||
} |
||||
|
||||
/** |
||||
* Install the plugin |
||||
* @return void |
||||
*/ |
||||
public function install() |
||||
{ |
||||
$this->installDatabase(); |
||||
} |
||||
|
||||
/** |
||||
* Uninstall the plugin |
||||
* @return void |
||||
*/ |
||||
public function uninstall() |
||||
{ |
||||
$this->unistallDatabase(); |
||||
} |
||||
|
||||
/** |
||||
* Create the database tables for the plugin |
||||
* @return void |
||||
*/ |
||||
private function installDatabase() |
||||
{ |
||||
$pAdvSubQueueTable = Database::get_main_table(TABLE_ADV_SUB_QUEUE); |
||||
$pAdvSubMailTable = Database::get_main_table(TABLE_ADV_SUB_MAIL); |
||||
$pAdvSubMailTypeTable = Database::get_main_table(TABLE_ADV_SUB_MAIL_TYPE); |
||||
$pAdvSubMailStatusTable = Database::get_main_table(TABLE_ADV_SUB_MAIL_STATUS); |
||||
|
||||
$sql = "CREATE TABLE IF NOT EXISTS $pAdvSubQueueTable (" . |
||||
"id int UNSIGNED NOT NULL AUTO_INCREMENT, " . |
||||
"session_id varchar(255) NOT NULL, " . |
||||
"user_id int UNSIGNED NOT NULL, " . |
||||
"status int UNSIGNED NOT NULL, " . |
||||
"created_at datetime NOT NULL, " . |
||||
"updated_at datetime NULL, " . |
||||
"PRIMARY KEY PK_tour_log (id)); "; |
||||
|
||||
$sql .= "CREATE TABLE $pAdvSubMailTypeTable ( " . |
||||
"id int UNSIGNED NOT NULL AUTO_INCREMENT, " . |
||||
"description char(20), " . |
||||
"PRIMARY KEY PK_advsub_mail_type (id) " . |
||||
"); "; |
||||
$sql .= "CREATE TABLE $pAdvSubMailTable ( " . |
||||
"id int UNSIGNED NOT NULL AUTO_INCREMENT, " . |
||||
"message_id, mail_type_id, mail_status_id, " . |
||||
"PRIMARY KEY PK_advsub_mail (id) " . |
||||
"); "; |
||||
|
||||
$sql .= "CREATE TABLE $pAdvSubMailStatusTable ( " . |
||||
"id int UNSIGNED NOT NULL AUTO_INCREMENT, " . |
||||
"description char(20), " . |
||||
"PRIMARY KEY PK_advsub_mail_status (id) " . |
||||
"); "; |
||||
|
||||
echo $sql; |
||||
//Database::query($sql); |
||||
} |
||||
|
||||
/** |
||||
* Drop the database tables for the plugin |
||||
* @return void |
||||
*/ |
||||
private function unistallDatabase() |
||||
{ |
||||
$pAdvSubQueueTable = Database::get_main_table(TABLE_ADV_SUB_QUEUE); |
||||
$pAdvSubMailTable = Database::get_main_table(TABLE_ADV_SUB_MAIL); |
||||
$pAdvSubMailTypeTable = Database::get_main_table(TABLE_ADV_SUB_MAIL_TYPE); |
||||
$pAdvSubMailStatusTable = Database::get_main_table(TABLE_ADV_SUB_MAIL_STATUS); |
||||
|
||||
$sql = "DROP TABLE IF EXISTS $pAdvSubQueueTable; "; |
||||
$sql .= "DROP TABLE IF EXISTS $pAdvSubMailTable; "; |
||||
$sql .= "DROP TABLE IF EXISTS $pAdvSubMailTypeTable; "; |
||||
$sql .= "DROP TABLE IF EXISTS $pAdvSubMailStatusTable; "; |
||||
|
||||
Database::query($sql); |
||||
} |
||||
|
||||
/** |
||||
* Return true if user is able to be added to queue for session subscription |
||||
* @param $userId |
||||
* @throws Exception |
||||
* @return bool |
||||
*/ |
||||
public function isAbleToRequest($userId) |
||||
{ |
||||
$isAble = false; |
||||
$advSubPlugin = self::create(); |
||||
$wsUrl = $advSubPlugin->get('ws_url'); |
||||
// @TODO: Get connection status from user by WS |
||||
$isConnected = true; |
||||
if ($isConnected) { |
||||
$profileCompletedMin = $advSubPlugin->get('min_profile_percentage'); |
||||
// @TODO: Get completed profile percentage by WS |
||||
$profileCompleted = 100.0; |
||||
if ($profileCompleted > $profileCompletedMin) { |
||||
$checkInduction = $advSubPlugin->get('check_induction'); |
||||
// @TODO: check if user have completed at least one induction session |
||||
$completedInduction = true; |
||||
if (!$checkInduction || $completedInduction) { |
||||
$uitMax = $advSubPlugin->get('uit_value'); |
||||
$uitMax *= $advSubPlugin->get('max_expended_uit'); |
||||
// @TODO: Get UIT completed by user this year by WS |
||||
$uitUser = 0; |
||||
if ($uitMax > $uitUser) { |
||||
$expendedTimeMax = $advSubPlugin->get('max_expended_time'); |
||||
// @TODO: Get Expended time from user data |
||||
$expendedTime = 0; |
||||
if ($expendedTimeMax > $expendedTime) { |
||||
$expendedNumMax = $advSubPlugin->get('max_expended_num'); |
||||
// @TODO: Get Expended num from user |
||||
$expendedNum = 0; |
||||
if ($expendedNumMax > $expendedNum) { |
||||
$isAble = true; |
||||
} else { |
||||
throw new \Exception(get_lang('AdvancedSubscriptionCourseXLimitReached')); |
||||
} |
||||
} else { |
||||
throw new \Exception(get_lang('AdvancedSubscriptionTimeXLimitReached')); |
||||
} |
||||
} else { |
||||
throw new \Exception(get_lang('AdvancedSubscriptionCostXLimitReached')); |
||||
} |
||||
} else { |
||||
throw new \Exception(get_lang('AdvancedSubscriptionIncompleteInduction')); |
||||
} |
||||
} else { |
||||
throw new \Exception(get_lang('AdvancedSubscriptionProfileIncomplete')); |
||||
} |
||||
} else { |
||||
throw new \Exception(get_lang('AdvancedSubscriptionNotConnected')); |
||||
} |
||||
|
||||
return $isAble; |
||||
} |
||||
|
||||
/** |
||||
* @param $userId |
||||
* @param $sessionId |
||||
*/ |
||||
public function addToQueue($userId, $sessionId) |
||||
{ |
||||
$now = api_get_utc_datetime(); |
||||
$pAdvSubQueueTable = Database::get_main_table(TABLE_ADV_SUB_QUEUE); |
||||
$sql = "INSERT INTO $pAdvSubQueueTable ( " . |
||||
"session_id, user_id, status, created_at, updated_at " . |
||||
") VALUES ( " . |
||||
"$sessionId, $userId, 0, $now, NULL "; |
||||
"); "; |
||||
|
||||
} |
||||
|
||||
/** |
||||
* @param $userId |
||||
* @param $sessionId |
||||
* @return bool|string |
||||
*/ |
||||
public function startSubscription($userId, $sessionId) |
||||
{ |
||||
$result = false; |
||||
$advSub = self::create(); |
||||
try { |
||||
if ($advSub->isAbleToRequest($userId)) { |
||||
$advSub->addToQueue($userId, $sessionId); |
||||
$result = true; |
||||
} else { |
||||
throw new \Exception(get_lang('AdvancedSubscriptionNotMoreAble')); |
||||
} |
||||
} catch (Exception $e) { |
||||
$result = $e->getMessage(); |
||||
} |
||||
|
||||
return $result; |
||||
} |
||||
|
||||
/** |
||||
* Check whether the tour should be displayed to the user |
||||
* @param string $currentPageClass The class of the current page |
||||
* @param int $userId The user id |
||||
* @return boolean If the user has seen the tour return false, otherwise return true |
||||
*/ |
||||
public function checkTourForUser($currentPageClass, $userId) |
||||
{ |
||||
$pAdvSubQueueTable = Database::get_main_table(TABLE_ADV_SUB_QUEUE); |
||||
$pAdvSubMailTable = Database::get_main_table(TABLE_ADV_SUB_MAIL); |
||||
$pAdvSubMailTypeTable = Database::get_main_table(TABLE_ADV_SUB_MAIL_TYPE); |
||||
$pAdvSubMailStatusTable = Database::get_main_table(TABLE_ADV_SUB_MAIL_STATUS); |
||||
$pluginTourLogTable = Database::get_main_table(TABLE_TOUR_LOG); |
||||
|
||||
$checkResult = Database::select('count(1) as qty', $pluginTourLogTable, array( |
||||
'where' => array( |
||||
"page_class = '?' AND " => $currentPageClass, |
||||
"user_id = ?" => intval($userId) |
||||
)), 'first'); |
||||
|
||||
if ($checkResult !== false) { |
||||
if ($checkResult['qty'] > 0) { |
||||
return false; |
||||
} |
||||
} |
||||
|
||||
return true; |
||||
} |
||||
|
||||
/** |
||||
* Set the tour as seen |
||||
* @param string $currentPageClass The class of the current page |
||||
* @param int $userId The user id |
||||
* @return void |
||||
*/ |
||||
public function saveCompletedTour($currentPageClass, $userId) |
||||
{ |
||||
$pAdvSubQueueTable = Database::get_main_table(TABLE_ADV_SUB_QUEUE); |
||||
$pAdvSubMailTable = Database::get_main_table(TABLE_ADV_SUB_MAIL); |
||||
$pAdvSubMailTypeTable = Database::get_main_table(TABLE_ADV_SUB_MAIL_TYPE); |
||||
$pAdvSubMailStatusTable = Database::get_main_table(TABLE_ADV_SUB_MAIL_STATUS); |
||||
$pluginTourLogTable = Database::get_main_table(TABLE_TOUR_LOG); |
||||
|
||||
Database::insert($pluginTourLogTable, array( |
||||
'page_class' => $currentPageClass, |
||||
'user_id' => intval($userId), |
||||
'visualization_datetime' => api_get_utc_datetime() |
||||
)); |
||||
} |
||||
|
||||
/** |
||||
* Get the configuration to show the tour in pages |
||||
* @return array The config data |
||||
*/ |
||||
public function getTourConfig() |
||||
{ |
||||
$pAdvSubQueueTable = Database::get_main_table(TABLE_ADV_SUB_QUEUE); |
||||
$pAdvSubMailTable = Database::get_main_table(TABLE_ADV_SUB_MAIL); |
||||
$pAdvSubMailTypeTable = Database::get_main_table(TABLE_ADV_SUB_MAIL_TYPE); |
||||
$pAdvSubMailStatusTable = Database::get_main_table(TABLE_ADV_SUB_MAIL_STATUS); |
||||
$pluginPath = api_get_path(PLUGIN_PATH) . 'tour/'; |
||||
|
||||
$jsonContent = file_get_contents($pluginPath . 'config/tour.json'); |
||||
|
||||
$jsonData = json_decode($jsonContent, true); |
||||
|
||||
return $jsonData; |
||||
} |
||||
} |
@ -0,0 +1 @@ |
||||
<?php |
@ -0,0 +1,16 @@ |
||||
<?php |
||||
/* For license terms, see /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.buycourses |
||||
*/ |
||||
/** |
||||
* Queries |
||||
*/ |
||||
require_once dirname(__FILE__) . '/config.php'; |
||||
if (!api_is_platform_admin()) { |
||||
die ('You must have admin permissions to install plugins'); |
||||
} |
||||
AdvancedSubscriptionPlugin::create()->uninstall(); |
Loading…
Reference in new issue