From c5d2d0dd7ca10240cef3defe6353e518d84b057a Mon Sep 17 00:00:00 2001 From: jerome Date: Thu, 31 Jul 2008 06:01:12 +0000 Subject: [PATCH] MDL-15402 implementation of repositories administration. Administrator can hide/show/sort/setup repositories. This code has been commited in order to be used by FilePicker. Because it's doing the same thing than the filter manager, the code is similar. Some generic code need to be done (filter and repository code should use the same function, and the current generic filter lib should be refactor, at least their name). Optimization of original code should also be done if necessary. --- admin/repositories.php | 102 +++++++++++++ admin/settings/plugins.php | 53 +++++++ lang/en_utf8/admin.php | 2 + lang/en_utf8/moodle.php | 2 + lang/en_utf8/repositories.php | 2 + lib/adminlib.php | 214 +++++++++++++++++++++++---- repository/boxnet/pluginsettings.php | 7 + 7 files changed, 352 insertions(+), 30 deletions(-) create mode 100644 admin/repositories.php create mode 100644 lang/en_utf8/repositories.php create mode 100644 repository/boxnet/pluginsettings.php diff --git a/admin/repositories.php b/admin/repositories.php new file mode 100644 index 0000000000..45d45060e8 --- /dev/null +++ b/admin/repositories.php @@ -0,0 +1,102 @@ +wwwroot/$CFG->admin/settings.php?section=managereps"; + + if (!confirm_sesskey()) { + redirect($returnurl); + } + + // get a list of installed repositories + $installedrepositories = array(); + $repositorylocations = array('repository'); + foreach ($repositorylocations as $repositorylocation) { + $plugins = get_list_of_plugins($repositorylocation); + foreach ($plugins as $plugin) { + $pluginpath = "$CFG->dirroot/$repositorylocation/$plugin/version.php"; + if (is_readable($pluginpath)) { + $installedrepositories["$repositorylocation/$plugin"] = "$repositorylocation/$plugin"; + } + } + } + + // get all the currently selected repositories + if (!empty($CFG->textfilters)) { + $activerepositories = explode(',', $CFG->textfilters); + } else { + $activerepositories = array(); + } + + //====================== + // Process Actions + //====================== + + switch ($action) { + + case 'hide': + $key=array_search($repositorypath, $activerepositories); + // check repositorypath is valid + if ($key===false) { + break; + } + // just delete it + unset($activerepositories[$key]); + break; + + case 'show': + // check repositorypath is valid + if (!array_key_exists($repositorypath, $installedrepositories)) { + print_error('filternotinstalled', 'error', $url, $repositorypath); + } elseif (array_search($repositorypath,$activerepositories)) { + // repositorypath is already active - doubleclick?? + } else { + // add it to installed filters + $activerepositories[] = $repositorypath; + $activerepositories = array_unique($activerepositories); + } + break; + + case 'down': + $key=array_search($repositorypath, $activerepositories); + // check repositorypath is valid + if ($key===false) { + print_error("filternotactive", 'error', $url, $repositorypath ); + } elseif ($key>=(count($activerepositories)-1)) { + // cannot be moved any further down - doubleclick?? + } else { + // swap with $key+1 + $fsave = $activerepositories[$key]; + $activerepositories[$key] = $activerepositories[$key+1]; + $activerepositories[$key+1] = $fsave; + } + break; + + case 'up': + $key=array_search($repositorypath, $activerepositories); + // check repositorypath is valid + if ($key===false) { + print_error("filternotactive", 'error', $url, $repositorypath ); + } elseif ($key<1) { + //cannot be moved any further up - doubleclick?? + } else { + // swap with $key-1 + $fsave = $activerepositories[$key]; + $activerepositories[$key] = $activerepositories[$key-1]; + $activerepositories[$key-1] = $fsave; + } + break; + } + + // save, reset cache and return + set_config('textfilters', implode(',', $activerepositories)); + reset_text_filters_cache(); + redirect($returnurl); + +?> diff --git a/admin/settings/plugins.php b/admin/settings/plugins.php index 1a487a7ac7..f36b2fb82c 100644 --- a/admin/settings/plugins.php +++ b/admin/settings/plugins.php @@ -68,6 +68,59 @@ if ($hassiteconfig) { } } + //"Repositories" menu (inside "Site Administration block" > "Modules menu") + $ADMIN->add('modules', new admin_category('repsettings', get_string('repositories'))); + + $temp = new admin_settingpage('managereps', get_string('repsettings', 'admin')); + + if ($ADMIN->fulltree) { + $items = array(); + $items[] = new admin_setting_managerepositories(); + foreach ($items as $item) { + $temp->add($item); + } + } + + $ADMIN->add('repsettings', $temp); + + if (empty($CFG->textfilters)) { + $activerepositories = array(); + } else { + $activerepositories = explode(',', $CFG->textfilters); + } + + $replocations = array('repository'); + foreach ($replocations as $replocation) { + $repositories = get_list_of_plugins($replocation); + + $repbyname = array(); + + foreach ($repositories as $repository) { + $strrepname = get_string('repositoryname', "repository_$repository",null,"$CFG->dirroot/$replocation/$plugin/lang/"); + + if ($strrepname == '[[repositoryname]]') { + $textlib = textlib_get_instance(); + $strrepname = $textlib->strtotitle($repository); + } + $repbyname[$strrepname] = "$replocation/$repository"; + } + ksort($repbyname); + + foreach ($repbyname as $strrepname=>$repositoryfull) { + if (file_exists("$CFG->dirroot/$repositoryfull/pluginsettings.php")) { + + $settings = new admin_settingpage('version'.str_replace('/', '', $repositoryfull), $strrepname, 'moodle/site:config', !in_array($repositoryfull, $activerepositories)); + + if ($ADMIN->fulltree) { + include("$CFG->dirroot/$repositoryfull/pluginsettings.php"); + } + $ADMIN->add('repsettings', $settings); + + } + } + } + //end of admin repositories menu + $ADMIN->add('modules', new admin_category('filtersettings', get_string('managefilters'))); // "filtersettings" settingpage $temp = new admin_settingpage('managefilters', get_string('filtersettings', 'admin')); diff --git a/lang/en_utf8/admin.php b/lang/en_utf8/admin.php index 201aef701e..004ed39a51 100644 --- a/lang/en_utf8/admin.php +++ b/lang/en_utf8/admin.php @@ -621,6 +621,8 @@ $string['recaptchaprivatekey'] = 'ReCAPTCHA private key'; $string['releasenoteslink'] = 'For information about this version of Moodle, please see the online Release Notes'; $string['remotelangnotavailable'] = 'Because Moodle can not connect to download.moodle.org, we are unable to do language pack installation automatically. Please download the appropriate zip file(s) from the list below, copy them to your $a directory and unzip them manually.'; $string['renameerrors'] = 'Rename errors'; +$string['repsettings'] = 'Manage Repositories'; +$string['repsettingsgeneral'] = 'General repositories settings'; $string['requiredtemplate'] = 'Required. You may use template syntax here (%%l = lastname, %%f = firstname, %%u = username). See help for details and examples.'; $string['restrictbydefault'] = 'Restrict modules by default'; $string['restrictmodulesfor'] = 'Restrict modules for'; diff --git a/lang/en_utf8/moodle.php b/lang/en_utf8/moodle.php index fa11b80c92..6ee7018c6b 100644 --- a/lang/en_utf8/moodle.php +++ b/lang/en_utf8/moodle.php @@ -1249,6 +1249,8 @@ $string['rename'] = 'Rename'; $string['renamefileto'] = 'Rename $a to'; $string['report'] = 'Report'; $string['reports'] = 'Reports'; +$string['repositories'] = 'Repositories'; +$string['repositoriesmanage'] = 'Manage Repositories'; $string['requestcourse'] = 'Request a course'; $string['requestedby'] = 'Requested by'; $string['requestreason'] = 'Reason for course request'; diff --git a/lang/en_utf8/repositories.php b/lang/en_utf8/repositories.php new file mode 100644 index 0000000000..e2b1a559d3 --- /dev/null +++ b/lang/en_utf8/repositories.php @@ -0,0 +1,2 @@ +dirroot.'/'.$CFG->admin.'/report/'.$plugin.'/db'; } } - + /// Now quiz report plugins (mod/quiz/report/xxx/db) if ($plugins = get_list_of_plugins('mod/quiz/report', 'db')) { foreach ($plugins as $plugin) { @@ -1883,7 +1883,7 @@ class admin_setting_configtext extends admin_setting { $data = 0; } // $data is a string - $validated = $this->validate($data); + $validated = $this->validate($data); if ($validated !== true) { return $validated; } @@ -1944,7 +1944,7 @@ class admin_setting_configtextarea extends admin_setting_configtext { $defaultinfo = $default; if (!is_null($default) and $default !== '') { $defaultinfo = "\n".$default; - } + } return format_admin_setting($this, $this->visiblename, '
', @@ -2221,7 +2221,7 @@ class admin_setting_configmulticheckbox extends admin_setting { } } } - + $options = array(); $defaults = array(); foreach($this->choices as $key=>$description) { @@ -2258,7 +2258,7 @@ class admin_setting_configmulticheckbox extends admin_setting { $return .= ''; return format_admin_setting($this, $this->visiblename, $return, $this->description, false, '', $defaultinfo, $query); - + } } @@ -2353,7 +2353,7 @@ class admin_setting_configselect extends admin_setting { if (strpos($textlib->strtolower($value), $query) !== false) { return true; } - } + } return false; } @@ -2588,7 +2588,7 @@ class admin_setting_configtime extends admin_setting { class admin_setting_configiplist extends admin_setting_configtextarea { function validate($data) { if(!empty($data)) { - $ips = explode("\n", $data); + $ips = explode("\n", $data); } else { return true; } @@ -2800,7 +2800,7 @@ class admin_setting_sitesettext extends admin_setting_configtext { function write_setting($data) { global $DB; $data = trim($data); - $validated = $this->validate($data); + $validated = $this->validate($data); if ($validated !== true) { return $validated; } @@ -3469,7 +3469,7 @@ class admin_setting_regradingcheckbox extends admin_setting_configcheckbox { } return $return; - } + } } /** @@ -3586,7 +3586,7 @@ class admin_setting_gradecat_combo extends admin_setting { $defaultinfo[] = get_string('advanced'); } $defaultinfo = implode(', ', $defaultinfo); - + } else { $defaultinfo = NULL; } @@ -3726,7 +3726,7 @@ class admin_page_managemods extends admin_externalpage { * Enrolment manage page */ class admin_enrolment_page extends admin_externalpage { - public function admin_enrolment_page() { + public function admin_enrolment_page() { global $CFG; parent::admin_externalpage('enrolment', get_string('enrolments'), $CFG->wwwroot . '/'.$CFG->admin.'/enrol.php'); } @@ -4250,7 +4250,7 @@ class admin_setting_manageportfolio extends admin_setting { $output .= print_table($table, true); - //$instancehtml = '
' + //$instancehtml = '
' $instancehtml = get_string('addnewportfolio', 'portfolio') . ':