From ec17e2408acd6457c03656a90bc118044898586d Mon Sep 17 00:00:00 2001 From: Yannick Warnier Date: Fri, 13 Jul 2012 04:00:03 -0500 Subject: [PATCH] Increased capabilities of plugins by adding the possibility to have checkbox-type settings - refs #4796 --- main/inc/lib/plugin.class.php | 31 ++++++++++++++++++++++++++----- main/inc/lib/plugin.lib.php | 24 ++++++++++++++++++++++-- 2 files changed, 48 insertions(+), 7 deletions(-) diff --git a/main/inc/lib/plugin.class.php b/main/inc/lib/plugin.class.php index ed05adcf18..f22d73b648 100644 --- a/main/inc/lib/plugin.class.php +++ b/main/inc/lib/plugin.class.php @@ -287,11 +287,29 @@ class Plugin { if (!empty($this->course_settings)) { foreach ($this->course_settings as $setting) { $variable = Database::escape_string($setting['name']); - $sql = "SELECT value FROM $t_course WHERE c_id = $course_id AND variable = '$variable' "; - $result = Database::query($sql); - if (!Database::num_rows($result)) { - $sql_course = "INSERT INTO $t_course (c_id, variable, value, category, subkey) VALUES ($course_id, '$variable','', 'plugins', '$plugin_name')"; - $r = Database::query($sql_course); + $value =''; + if (isset($setting['init_value'])) { + $value = Database::escape_string($setting['init_value']); + } + $type = 'textfield'; + if (isset($setting['type'])) { + $type = Database::escape_string($setting['type']); + } + if (isset($setting['group'])) { + $group = Database::escape_string($setting['group']); + $sql = "SELECT value FROM $t_course WHERE c_id = $course_id AND variable = '$group' AND subkey = '$variable' "; + $result = Database::query($sql); + if (!Database::num_rows($result)) { + $sql_course = "INSERT INTO $t_course (c_id, variable, subkey, value, category, type) VALUES ($course_id, '$group', '$variable', '$value', 'plugins', '$type')"; + $r = Database::query($sql_course); + } + } else { + $sql = "SELECT value FROM $t_course WHERE c_id = $course_id AND variable = '$variable' "; + $result = Database::query($sql); + if (!Database::num_rows($result)) { + $sql_course = "INSERT INTO $t_course (c_id, variable, value, category, subkey, type) VALUES ($course_id, '$variable','$value', 'plugins', '$plugin_name', '$type')"; + $r = Database::query($sql_course); + } } } } @@ -328,6 +346,9 @@ class Plugin { if (!empty($this->course_settings)) { foreach ($this->course_settings as $setting) { $variable = Database::escape_string($setting['name']); + if (!empty($setting['group'])) { + $variable = Database::escape_string($setting['group']); + } $sql_course = "DELETE FROM $t_course WHERE c_id = $course_id AND variable = '$variable'"; Database::query($sql_course); } diff --git a/main/inc/lib/plugin.lib.php b/main/inc/lib/plugin.lib.php index 36948341f1..34072f3507 100644 --- a/main/inc/lib/plugin.lib.php +++ b/main/inc/lib/plugin.lib.php @@ -332,8 +332,22 @@ class AppPlugin { //$icon = null; $form->addElement('html', '

'.$icon.' '.Security::remove_XSS($plugin_info['title']).'

'); + $groups = array(); foreach ($obj->course_settings as $setting) { - $form->addElement($setting['type'], $setting['name'], $obj->get_lang($setting['name'])); + 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; + //} + } + } + 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', '
'); @@ -398,7 +412,13 @@ class AppPlugin { $obj = $plugin_info['plugin_class']::create(); if (is_array($obj->course_settings)) { foreach ($obj->course_settings as $item) { - $settings[] = $item['name']; + if (isset($item['group'])) { + if (!in_array($item['group'],$settings)) { + $settings[] = $item['group']; + } + } else { + $settings[] = $item['name']; + } } } unset($obj); unset($plugin_info);