123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407 |
- <?php
- class AppPlugin {
- var $plugin_regions = array (
-
- 'login_top',
- 'login_bottom',
- 'menu_top',
- 'menu_bottom',
- 'content_top',
- 'content_bottom',
- 'header_main',
- 'header_center',
- 'header_left',
- 'header_right',
-
- 'footer_left',
- 'footer_center',
- 'footer_right',
- 'course_tool_plugin'
- );
- function __construct() {
- }
- function read_plugins_from_path() {
-
- $pluginpath = api_get_path(SYS_PLUGIN_PATH);
- $possible_plugins = array();
- $handle = @opendir($pluginpath);
- while (false !== ($file = readdir($handle))) {
- if ($file != '.' && $file != '..' && is_dir(api_get_path(SYS_PLUGIN_PATH).$file)) {
- $possible_plugins[] = $file;
- }
- }
- @closedir($handle);
- sort($possible_plugins);
- return $possible_plugins;
- }
- function get_installed_plugins_by_region(){
- $used_plugins = array();
-
- $result = api_get_settings('Plugins');
- foreach ($result as $row) {
- $used_plugins[$row['variable']][] = $row['selected_value'];
- }
- return $used_plugins;
- }
- function get_installed_plugins() {
- $installed_plugins = array();
- $plugin_array = api_get_settings_params(array("variable = ? AND selected_value = ? AND category = ? " =>
- array('status', 'installed', 'Plugins')));
- if (!empty($plugin_array)) {
- foreach ($plugin_array as $row) {
- $installed_plugins[$row['subkey']] = true;
- }
- $installed_plugins = array_keys($installed_plugins);
- }
- return $installed_plugins;
- }
- function install($plugin_name, $access_url_id = null) {
- if (empty($access_url_id)) {
- $access_url_id = api_get_current_access_url_id();
- } else {
- $access_url_id = intval($access_url_id);
- }
- api_add_setting('installed', 'status', $plugin_name, 'setting', 'Plugins', $plugin_name, null, null, null, $access_url_id, 1);
-
- $pluginpath = api_get_path(SYS_PLUGIN_PATH).$plugin_name.'/install.php';
- if (is_file($pluginpath) && is_readable($pluginpath)) {
-
- require $pluginpath;
- }
- }
- function uninstall($plugin_name, $access_url_id = null) {
- if (empty($access_url_id)) {
- $access_url_id = api_get_current_access_url_id();
- } else {
- $access_url_id = intval($access_url_id);
- }
- api_delete_settings_params(array('category = ? AND access_url = ? AND subkey = ? ' =>
- array('Plugins', $access_url_id, $plugin_name)));
- $pluginpath = api_get_path(SYS_PLUGIN_PATH).$plugin_name.'/uninstall.php';
- if (is_file($pluginpath) && is_readable($pluginpath)) {
-
- require $pluginpath;
- }
- }
- function get_areas_by_plugin($plugin_name) {
- $result = api_get_settings('Plugins');
- $areas = array();
- foreach ($result as $row) {
- if ($plugin_name == $row['selected_value']) {
- $areas[] = $row['variable'];
- }
- }
- return $areas;
- }
- function is_valid_plugin_location($location) {
- return in_array($location, $this->plugin_list);
- }
- function is_valid_plugin($plugin_name) {
- if (is_dir(api_get_path(SYS_PLUGIN_PATH).$plugin_name)) {
- if (is_file(api_get_path(SYS_PLUGIN_PATH).$plugin_name.'/index.php')) {
- return true;
- }
- }
- return false;
- }
- function get_plugin_regions() {
- sort($this->plugin_regions);
- return $this->plugin_regions;
- }
- function load_region($region, $main_template, $forced = false) {
- if ($region == 'course_tool_plugin') {
- return null;
- }
- ob_start();
- $this->get_all_plugin_contents_by_region($region, $main_template, $forced);
- $content = ob_get_contents();
- ob_end_clean();
- return $content;
- }
-
- function load_plugin_lang_variables($plugin_name) {
- global $language_interface;
- $root = api_get_path(SYS_PLUGIN_PATH);
-
- $english_path = $root.$plugin_name."/lang/english.php";
- if (is_readable($english_path)) {
- include $english_path;
-
- foreach ($strings as $key => $string) {
- $GLOBALS[$key] = $string;
- }
- }
-
- if ($language_interface != 'english') {
- $path = $root.$plugin_name."/lang/$language_interface.php";
- if (is_readable($path)) {
- include $path;
- if (!empty($strings)) {
- foreach ($strings as $key => $string) {
- $GLOBALS[$key] = $string;
- }
- }
- }
- }
- }
-
- function get_all_plugin_contents_by_region($region, $template, $forced = false) {
- global $_plugins;
- if (isset($_plugins[$region]) && is_array($_plugins[$region])) {
-
-
- foreach ($_plugins[$region] as $plugin_name) {
-
- $plugin_info = $this->get_plugin_info($plugin_name, $forced);
-
- $plugin_info['current_region'] = $region;
-
- $plugin_file = api_get_path(SYS_PLUGIN_PATH)."$plugin_name/index.php";
- if (file_exists($plugin_file)) {
-
- self::load_plugin_lang_variables($plugin_name);
-
- require $plugin_file;
-
- if (isset($_template)) {
- $_template['plugin_info'] = $plugin_info;
- } else {
- $_template = array();
- $_template['plugin_info'] = $plugin_info;
- }
-
- $template->assign($plugin_name, $_template);
-
- $template_list = array();
- if (isset($plugin_info) && isset($plugin_info['templates'])) {
- $template_list = $plugin_info['templates'];
- }
- if (!empty($template_list)) {
- foreach ($template_list as $plugin_tpl) {
- if (!empty($plugin_tpl)) {
-
- $template_plugin_file = "$plugin_name/$plugin_tpl";
- $template->display($template_plugin_file);
- }
- }
- }
- }
- }
- }
- return true;
- }
-
- function get_plugin_info($plugin_name, $forced = false) {
- static $plugin_data = array();
- if (isset($plugin_data[$plugin_name]) && $forced == false) {
- return $plugin_data[$plugin_name];
- } else {
- $plugin_file = api_get_path(SYS_PLUGIN_PATH)."$plugin_name/plugin.php";
- $plugin_info = array();
- if (file_exists($plugin_file)) {
- require $plugin_file;
- }
-
- $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'];
- }
- $plugin_info['settings'] = $settings_filtered;
- $plugin_data[$plugin_name] = $plugin_info;
- return $plugin_info;
- }
- }
-
- function get_templates_list($plugin_name) {
- $plugin_info = $this->get_plugin_info($plugin_name);
- if (isset($plugin_info) && isset($plugin_info['templates'])) {
- return $plugin_info['templates'];
- } else {
- return false;
- }
- }
-
- function remove_all_regions($plugin) {
- $access_url_id = api_get_current_access_url_id();
- if (!empty($plugin)) {
- api_delete_settings_params(array('category = ? AND type = ? AND access_url = ? AND subkey = ? ' =>
- array('Plugins', 'region', $access_url_id, $plugin)));
- }
- }
-
- function add_to_region($plugin, $region) {
- $access_url_id = api_get_current_access_url_id();
- api_add_setting($plugin, $region, $plugin, 'region', 'Plugins', $plugin, null, null, null, $access_url_id, 1);
- }
- function install_course_plugins($course_id) {
- $plugin_list = $this->get_installed_plugins();
- if (!empty($plugin_list)) {
- foreach ($plugin_list as $plugin_name) {
- $plugin_path = api_get_path(SYS_PLUGIN_PATH).$plugin_name.'/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);
- }
- }
- }
- }
- }
- 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);
-
- $form->addElement('html', '<div><h3>'.$icon.' '.Security::remove_XSS($plugin_info['title']).'</h3><div>');
- foreach ($obj->course_settings as $setting) {
- $form->addElement($setting['type'], $setting['name'], $obj->get_lang($setting['name']));
- }
- $form->addElement('style_submit_button', null, get_lang('SaveSettings'), 'class="save"');
- $form->addElement('html', '</div></div>');
- }
- }
- }
- }
- function set_course_settings_defaults(& $values) {
- $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;
- }
- }
- }
- }
- }
- }
- }
-
- function save_course_settings($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);
- $obj = $plugin_info['plugin_class']::create();
- $obj->course_settings_updated($subvalues);
- }
- }
- }
-
-
- public function get_plugin_course_settings($plugin_name) {
- $settings = array();
- if (empty($plugin_name)) { return $settings; }
- $plugin_info = $this->get_plugin_info($plugin_name);
- $obj = $plugin_info['plugin_class']::create();
- if (is_array($obj->course_settings)) {
- foreach ($obj->course_settings as $item) {
- $settings[] = $item['name'];
- }
- }
- unset($obj); unset($plugin_info);
- return $settings;
- }
- }
|