Fixing plugin course settings see #7051

1.9.x
Julio Montoya 12 years ago
parent 41e5779784
commit 2075bb2221
  1. 10
      main/admin/configure_plugin.php
  2. 61
      main/course_info/infocours.php
  3. 19
      main/inc/lib/course.lib.php
  4. 2
      main/inc/lib/course_home.lib.php
  5. 27
      main/inc/lib/plugin.class.php
  6. 212
      main/inc/lib/plugin.lib.php

@ -16,7 +16,7 @@ api_protect_admin_script();
$plugin_name = $_GET['name'];
$plugin_obj = new AppPlugin();
$plugin_info = $plugin_obj->get_plugin_info($plugin_name, true);
$plugin_info = $plugin_obj->getPluginInfo($plugin_name, true);
if (empty($plugin_info)) {
api_not_allowed();
@ -33,7 +33,7 @@ global $_configuration;
$content = null;
if (isset($plugin_info['settings_form'])) {
$form = $plugin_info['settings_form'];
$form = $plugin_info['settings_form'];
if (isset($form)) {
//We override the form attributes
$attributes = array('action'=>api_get_self().'?name='.$plugin_name, 'method'=>'POST');
@ -48,7 +48,7 @@ if (isset($plugin_info['settings_form'])) {
if (isset($form)) {
if ($form->validate()) {
$values = $form->exportValues();
//api_delete_category_settings_by_subkey($plugin_name);
$access_url_id = api_get_current_access_url_id();
api_delete_settings_params(array('category = ? AND access_url = ? AND subkey = ? AND type = ? and variable <> ?' =>
@ -56,7 +56,7 @@ if (isset($form)) {
foreach ($values as $key => $value) {
$key = Database::escape_string($plugin_name.'_'.$key);
api_add_setting($value, $key, $plugin_name, 'setting', 'Plugins', $plugin_name, null, null, null, $_configuration['access_url'], 1);
}
$message = Display::return_message(get_lang('Updated'), 'success');
}
@ -65,4 +65,4 @@ $tpl = new Template($tool_name, true, true, false, true, false);
$tpl->assign('actions', $actions);
$tpl->assign('message', $message);
$tpl->assign('content', $content);
$tpl->display_one_col_template();
$tpl->display_one_col_template();

@ -357,8 +357,8 @@ if (api_get_setting('allow_public_certificates')=='true') {
// Plugin course settings
$app_plugin = new AppPlugin();
$app_plugin->add_course_settings_form($form);
$appPlugin = new AppPlugin();
$appPlugin->add_course_settings_form($form);
// Get all the course information
$all_course_information = CourseManager::get_course_information($_course['sysCode']);
@ -380,19 +380,21 @@ $values['course_registration_password'] = $all_course_information['registration_
$values['legal'] = $all_course_information['legal'];
$values['activate_legal'] = $all_course_information['activate_legal'];
$courseSettings = CourseManager::getCourseSettingVariables();
$courseSettings = CourseManager::getCourseSettingVariables($appPlugin);
foreach ($courseSettings as $setting) {
$values[$setting] = api_get_course_setting($setting);
$result = api_get_course_setting($setting);
if ($result != '-1') {
$values[$setting] = $result;
}
}
$app_plugin->set_course_settings_defaults($values);
$form->setDefaults($values);
// Validate form
if ($form->validate() && is_settings_editable()) {
$update_values = $form->exportValues();
$updateValues = $form->exportValues();
$pdf_export_watermark_path = isset($_FILES['pdf_export_watermark_path']) ? $_FILES['pdf_export_watermark_path'] : null
$pdf_export_watermark_path = isset($_FILES['pdf_export_watermark_path']) ? $_FILES['pdf_export_watermark_path'] : null;
if (!empty($pdf_export_watermark_path['name'])) {
$pdf_export_watermark_path_result = PDF::upload_watermark(
@ -400,7 +402,7 @@ if ($form->validate() && is_settings_editable()) {
$pdf_export_watermark_path['tmp_name'],
$course_code
);
unset($update_values['pdf_export_watermark_path']);
unset($updateValues['pdf_export_watermark_path']);
}
//Variables that will be saved in the TABLE_MAIN_COURSE table
@ -418,39 +420,38 @@ if ($form->validate() && is_settings_editable()) {
'legal',
'activate_legal'
);
foreach ($update_values as $index =>$value) {
$update_values[$index] = Database::escape_string($value);
foreach ($updateValues as $index =>$value) {
$updateValues[$index] = Database::escape_string($value);
}
$table_course = Database :: get_main_table(TABLE_MAIN_COURSE);
$sql = "UPDATE $table_course SET
title = '".$update_values['title']."',
course_language = '".$update_values['course_language']."',
category_code = '".$update_values['category_code']."',
department_name = '".$update_values['department_name']."',
department_url = '".$update_values['department_url']."',
visibility = '".$update_values['visibility']."',
subscribe = '".$update_values['subscribe']."',
unsubscribe = '".$update_values['unsubscribe']."',
legal = '".$update_values['legal']."',
activate_legal = '".$update_values['activate_legal']."',
registration_code = '".$update_values['course_registration_password']."'
title = '".$updateValues['title']."',
course_language = '".$updateValues['course_language']."',
category_code = '".$updateValues['category_code']."',
department_name = '".$updateValues['department_name']."',
department_url = '".$updateValues['department_url']."',
visibility = '".$updateValues['visibility']."',
subscribe = '".$updateValues['subscribe']."',
unsubscribe = '".$updateValues['unsubscribe']."',
legal = '".$updateValues['legal']."',
activate_legal = '".$updateValues['activate_legal']."',
registration_code = '".$updateValues['course_registration_password']."'
WHERE code = '".$course_code."'";
Database::query($sql);
// Insert/Updates course_settings table
foreach ($courseSettings as $setting) {
if (isset($update_values[$setting])) {
CourseManager::saveCourseConfigurationSetting(
$setting,
$update_values[$setting],
api_get_course_int_id()
);
}
$value = isset($updateValues[$setting]) ? $updateValues[$setting] : null;
CourseManager::saveCourseConfigurationSetting(
$appPlugin,
$setting,
$value,
api_get_course_int_id()
);
}
$app_plugin->save_course_settings($update_values);
$appPlugin->saveCourseSettingsHook($update_values);
$cidReset = true;
$cidReq = $course_code;
require '../inc/local.inc.php';

@ -4450,11 +4450,13 @@ class CourseManager
/**
* Course available settings variables see c_course_setting table
* @param AppPlugin $appPlugin
* @return array
*/
public static function getCourseSettingVariables()
public static function getCourseSettingVariables(AppPlugin $appPlugin)
{
return array(
$pluginCourseSettings = $appPlugin->getAllPluginCourseSettings();
$courseSettings = array(
// Get allow_learning_path_theme from table
'allow_learning_path_theme',
// Get allow_open_chat_window from table
@ -4486,17 +4488,26 @@ class CourseManager
'pdf_export_watermark_text',
'show_system_folders'
);
if (!empty($pluginCourseSettings)) {
$courseSettings = array_merge(
$courseSettings,
$pluginCourseSettings
);
}
return $courseSettings;
}
/**
* @param AppPlugin $appPlugin
* @param string $variable
* @param string $value
* @param int $courseId
* @return bool
*/
public static function saveCourseConfigurationSetting($variable, $value, $courseId)
public static function saveCourseConfigurationSetting(AppPlugin $appPlugin, $variable, $value, $courseId)
{
$settingList = self::getCourseSettingVariables();
$settingList = self::getCourseSettingVariables($appPlugin);
if (!in_array($variable, $settingList)) {
return false;
}

@ -741,7 +741,7 @@ class CourseHome
// Creating title and the link
if (isset($tool['category']) && $tool['category'] == 'plugin') {
$plugin_info = $app_plugin->get_plugin_info($tool['name']);
$plugin_info = $app_plugin->getPluginInfo($tool['name']);
if (isset($plugin_info) && isset($plugin_info['title'])) {
$tool_name = $plugin_info['title'];
}

@ -222,7 +222,11 @@ class Plugin
public function get_settings()
{
if (is_null($this->settings)) {
$settings = api_get_settings_params(array("subkey = ? AND category = ? AND type = ? " => array($this->get_name(), 'Plugins', 'setting')));
$settings = api_get_settings_params(
array(
"subkey = ? AND category = ? AND type = ? " => array($this->get_name(), 'Plugins', 'setting')
)
);
$this->settings = $settings;
}
@ -421,6 +425,27 @@ class Plugin
}
}
/**
* @return array
*/
public function getCourseSettings()
{
$settings = array();
if (is_array($this->course_settings)) {
foreach ($this->course_settings as $item) {
if (isset($item['group'])) {
if (!in_array($item['group'], $settings)) {
$settings[] = $item['group'];
}
} else {
$settings[] = $item['name'];
}
}
}
return $settings;
}
/**
* Method to be extended when changing the setting in the course
* configuration should trigger the use of a callback method

@ -25,6 +25,9 @@ class AppPlugin
'course_tool_plugin'
);
public $installedPluginListName = array();
public $installedPluginListObject = array();
public function __construct()
{
}
@ -67,6 +70,48 @@ class AppPlugin
return $plugins;
}
/**
* @return array
*/
public function getInstalledPluginListName()
{
if (empty($this->installedPluginListName)) {
$this->installedPluginListName = $this->get_installed_plugins();
}
return $this->installedPluginListName;
}
/**
* @return array List of Plugin
*/
public function getInstalledPluginListObject()
{
if (empty($this->installedPluginListObject)) {
$this->setInstalledPluginListObject();
}
return $this->installedPluginListObject;
}
/**
* @return array
*/
public function setInstalledPluginListObject()
{
$pluginListName = $this->getInstalledPluginListName();
$pluginList = array();
if (!empty($pluginListName)) {
foreach ($pluginListName as $pluginName) {
$plugin_info = $this->getPluginInfo($pluginName);
if (isset($plugin_info['plugin_class'])) {
$pluginList[] = $plugin_info['plugin_class']::create();
}
}
}
$this->installedPluginListObject = $pluginList;
}
/**
* @return array
*/
@ -272,7 +317,7 @@ class AppPlugin
foreach ($_plugins[$region] as $plugin_name) {
//The plugin_info variable is available inside the plugin index
$plugin_info = $this->get_plugin_info($plugin_name, $forced);
$plugin_info = $this->getPluginInfo($plugin_name, $forced);
//We also know where the plugin is
$plugin_info['current_region'] = $region;
@ -329,7 +374,7 @@ class AppPlugin
* @todo filter setting_form
* @return array
*/
public function get_plugin_info($plugin_name, $forced = false)
public function getPluginInfo($plugin_name, $forced = false)
{
static $plugin_data = array();
@ -344,8 +389,11 @@ class AppPlugin
}
//extra options
$plugin_settings = api_get_settings_params(array("subkey = ? AND category = ? AND type = ? " =>
array($plugin_name, 'Plugins','setting')));
$plugin_settings = api_get_settings_params(
array(
"subkey = ? AND category = ? AND type = ? " => array($plugin_name, 'Plugins','setting')
)
);
$settings_filtered = array();
foreach ($plugin_settings as $item) {
$settings_filtered[$item['variable']] = $item['selected_value'];
@ -363,7 +411,7 @@ class AppPlugin
*/
public function get_templates_list($pluginName)
{
$plugin_info = $this->get_plugin_info($pluginName);
$plugin_info = $this->getPluginInfo($pluginName);
if (isset($plugin_info) && isset($plugin_info['templates'])) {
return $plugin_info['templates'];
} else {
@ -398,19 +446,21 @@ class AppPlugin
}
/**
* @param int $course_id
* @param int $courseId
*/
public function install_course_plugins($course_id)
public function install_course_plugins($courseId)
{
$plugin_list = $this->get_installed_plugins();
$pluginList = $this->getInstalledPluginListObject();
if (!empty($plugin_list)) {
foreach ($plugin_list as $plugin_name) {
$plugin_path = api_get_path(SYS_PLUGIN_PATH).$plugin_name.'/plugin.php';
if (!empty($pluginList)) {
/** @var Plugin $obj */
foreach ($pluginList as $obj) {
$pluginName = $obj->get_name();
$plugin_path = api_get_path(SYS_PLUGIN_PATH).$pluginName.'/plugin.php';
if (file_exists($plugin_path)) {
require_once $plugin_path;
if (isset($plugin_info) && isset($plugin_info['plugin_class'])) {
$plugin_info['plugin_class']::create()->course_install($course_id);
$obj->course_install($courseId);
}
}
}
@ -422,63 +472,53 @@ class AppPlugin
*/
public function add_course_settings_form($form)
{
$plugin_list = $this->get_installed_plugins();
foreach ($plugin_list as $plugin_name) {
$plugin_info = $this->get_plugin_info($plugin_name);
if (isset($plugin_info['plugin_class'])) {
$obj = $plugin_info['plugin_class']::create();
if (!empty($obj->course_settings)) {
$icon = Display::return_icon($plugin_name.'.png', Security::remove_XSS($plugin_info['title']),'', ICON_SIZE_SMALL);
//$icon = null;
$form->addElement('html', '<div><h3>'.$icon.' '.Security::remove_XSS($plugin_info['title']).'</h3><div>');
$groups = array();
foreach ($obj->course_settings as $setting) {
if ($setting['type'] != 'checkbox') {
$form->addElement($setting['type'], $setting['name'], $obj->get_lang($setting['name']));
} else {
//if (isset($groups[$setting['group']])) {
$element = & $form->createElement($setting['type'], $setting['name'], '', $obj->get_lang($setting['name']));
if ($setting['init_value'] == 1) {
$element->setChecked(true);
}
$groups[$setting['group']][] = $element;
//}
$pluginList = $this->getInstalledPluginListObject();
/** @var Plugin $obj */
foreach ($pluginList as $obj) {
$plugin_name = $obj->get_name();
$pluginTitle = $obj->get_title();
if (!empty($obj->course_settings)) {
$icon = Display::return_icon($plugin_name.'.png', Security::remove_XSS($pluginTitle),'', ICON_SIZE_SMALL);
//$icon = null;
$form->addElement('html', '<div><h3>'.$icon.' '.Security::remove_XSS($pluginTitle).'</h3><div>');
$groups = array();
foreach ($obj->course_settings as $setting) {
if ($setting['type'] != 'checkbox') {
$form->addElement($setting['type'], $setting['name'], $obj->get_lang($setting['name']));
} else {
$element = & $form->createElement($setting['type'], $setting['name'], '', $obj->get_lang($setting['name']));
if ($setting['init_value'] == 1) {
$element->setChecked(true);
}
$groups[$setting['group']][] = $element;
}
foreach ($groups as $k => $v) {
$form->addGroup($groups[$k], $k, array($obj->get_lang($k)));
}
$form->addElement('style_submit_button', null, get_lang('SaveSettings'), 'class="save"');
$form->addElement('html', '</div></div>');
}
foreach ($groups as $k => $v) {
$form->addGroup($groups[$k], $k, array($obj->get_lang($k)));
}
$form->addElement('style_submit_button', null, get_lang('SaveSettings'), 'class="save"');
$form->addElement('html', '</div></div>');
}
}
}
/**
* @param array $values
* Get all course settings from all installed plugins.
* @return array
*/
public function set_course_settings_defaults(& $values)
public function getAllPluginCourseSettings()
{
$plugin_list = $this->get_installed_plugins();
foreach ($plugin_list as $plugin_name) {
$plugin_info = $this->get_plugin_info($plugin_name);
if (isset($plugin_info['plugin_class'])) {
$obj = $plugin_info['plugin_class']::create();
if (!empty($obj->course_settings)) {
foreach ($obj->course_settings as $setting) {
if (isset($setting['name'])) {
$result = api_get_course_setting($setting['name']);
if ($result != '-1') {
$values[$setting['name']] = $result;
}
}
}
}
$pluginList = $this->getInstalledPluginListObject();
/** @var Plugin $obj */
$courseSettings = array();
if (!empty($pluginList)) {
foreach ($pluginList as $obj) {
$pluginCourseSetting = $obj->getCourseSettings();
$courseSettings = array_merge($courseSettings, $pluginCourseSetting);
}
}
return $courseSettings;
}
/**
@ -487,56 +527,26 @@ class AppPlugin
* @param array The new settings the user just saved
* @return void
*/
public function save_course_settings($values)
public function saveCourseSettingsHook($values)
{
$plugin_list = $this->get_installed_plugins();
foreach ($plugin_list as $plugin_name) {
$settings = $this->get_plugin_course_settings($plugin_name);
$subvalues = array();
$i = 0;
foreach ($settings as $v) {
if (isset($values[$v])) {
$subvalues[$v] = $values[$v];
$i++;
}
}
if ($i>0) {
$plugin_info = $this->get_plugin_info($plugin_name);
$pluginList = $this->getInstalledPluginListObject();
if (isset($plugin_info['plugin_class'])) {
$obj = $plugin_info['plugin_class']::create();
$obj->course_settings_updated($subvalues);
}
}
}
}
/** @var Plugin $obj */
foreach ($pluginList as $obj) {
$settings = $obj->getCourseSettings();
/**
* Gets a nice array of keys for just the plugin's course settings
* @param string The plugin ID
* @return array Nice array of keys for course settings
*/
public function get_plugin_course_settings($plugin_name)
{
$settings = array();
if (empty($plugin_name)) { return $settings; }
$plugin_info = $this->get_plugin_info($plugin_name);
if (isset($plugin_info['plugin_class'])) {
$obj = $plugin_info['plugin_class']::create();
if (is_array($obj->course_settings)) {
foreach ($obj->course_settings as $item) {
if (isset($item['group'])) {
if (!in_array($item['group'],$settings)) {
$settings[] = $item['group'];
}
} else {
$settings[] = $item['name'];
$subValues = array();
if (!empty($settings)) {
foreach ($settings as $v) {
if (isset($values[$v])) {
$subValues[$v] = $values[$v];
}
}
}
unset($obj); unset($plugin_info);
if (!empty($subValues)) {
$obj->course_settings_updated($subValues);
}
}
return $settings;
}
}

Loading…
Cancel
Save