From 4a65c39a46d22c142c4a79ee15bf4fa00e879184 Mon Sep 17 00:00:00 2001 From: dongsheng Date: Wed, 13 Aug 2008 04:09:13 +0000 Subject: [PATCH] MDL-15402, add admin setting page, to meet requirement, make some changes to repository base class. --- admin/repository.php | 119 +++++ admin/settings/plugins.php | 31 +- lang/en_utf8/repository.php | 7 +- lib/adminlib.php | 94 +++- .../boxnet/lang/en_utf8/repository_boxnet.php | 1 + repository/boxnet/repository.class.php | 21 +- .../flickr/lang/en_utf8/repository_flickr.php | 1 + repository/flickr/repository.class.php | 18 +- repository/lib.php | 414 ++++++++++++------ repository/local/repository.class.php | 2 +- user/repository.php | 6 +- user/tabs.php | 2 +- 12 files changed, 575 insertions(+), 141 deletions(-) create mode 100644 admin/repository.php diff --git a/admin/repository.php b/admin/repository.php new file mode 100644 index 0000000000..3805b09141 --- /dev/null +++ b/admin/repository.php @@ -0,0 +1,119 @@ +dirroot . '/repository/lib.php'); +require_once($CFG->libdir . '/adminlib.php'); + + +$CFG->pagepath = 'admin/managerepositories'; + +// id of repository +$edit = optional_param('edit', 0, PARAM_INT); +$new = optional_param('new', '', PARAM_FORMAT); +$hide = optional_param('hide', 0, PARAM_INT); +$delete = optional_param('delete', 0, PARAM_INT); +$sure = optional_param('sure', '', PARAM_ALPHA); + +$display = true; // fall through to normal display + +$pagename = 'repositorycontroller'; + +if ($edit) { + $pagename = 'repositorysettings' . $edit; +} else if ($delete) { + $pagename = 'repositorydelete'; +} else if ($new) { + $pagename = 'repositorynew'; +} +admin_externalpage_setup($pagename); +require_login(SITEID, false); +require_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM)); + +$sesskeyurl = $CFG->wwwroot . '/' . $CFG->admin . '/repository.php?sesskey=' . sesskey(); +$baseurl = $CFG->wwwroot . '/admin/settings.php?section=managerepositories'; + +$configstr = get_string('managerepositories', 'repository'); + +$return = true; + +if (!empty($edit) || !empty($new)) { + if (!empty($edit)) { + $instance = repository_instance($edit); + $configs = $instance->get_option_names(); + $plugin = $instance->type; + } else { + $plugin = $new; + $instance = null; + } + $CFG->pagepath = 'admin/managerepository/' . $plugin; + // display the edit form for this instance + $mform = new repository_admin_form('', array('plugin' => $plugin, 'instance' => $instance)); + // end setup, begin output + + if ($mform->is_cancelled()){ + redirect($baseurl); + exit; + } else if ($fromform = $mform->get_data()){ + if (!confirm_sesskey()) { + print_error('confirmsesskeybad', '', $baseurl); + } + if ($edit) { + $settings = array(); + $settings['name'] = $fromform->name; + foreach($configs as $config) { + $settings[$config] = $fromform->$config; + } + $success = $instance->set_option($settings); + } else { + $success = repository_static_function($plugin, 'create', $plugin, 0, get_system_context(), $fromform); + $data = data_submitted(); + } + if ($success) { + $savedstr = get_string('configsaved', 'repository'); + admin_externalpage_print_header(); + print_heading($savedstr); + redirect($baseurl, $savedstr, 3); + } else { + print_error('instancenotsaved', 'repository', $baseurl); + } + exit; + } else { + admin_externalpage_print_header(); + print_heading(get_string('configplugin', 'repository_'.$plugin)); + print_simple_box_start(); + $mform->display(); + print_simple_box_end(); + $return = false; + } +} else if (!empty($hide)) { + if (!confirm_sesskey()) { + print_error('confirmsesskeybad', '', $baseurl); + } + $instance = repository_instance($hide); + $instance->hide(); + $return = true; +} else if (!empty($delete)) { + admin_externalpage_print_header(); + $instance = repository_instance($delete); + if ($sure) { + if (!confirm_sesskey()) { + print_error('confirmsesskeybad', '', $baseurl); + } + if ($instance->delete()) { + $deletedstr = get_string('instancedeleted', 'repository'); + print_heading($deletedstr); + redirect($baseurl, $deletedstr, 3); + } else { + print_error('instancenotdeleted', 'repository', $baseurl); + } + exit; + } + notice_yesno(get_string('confirmdelete', 'repository', $instance->name), $sesskeyurl . '&delete=' . $delete . '&sure=yes', $baseurl); + $return = false; +} + + +if (!empty($return)) { + redirect($baseurl); +} +admin_externalpage_print_footer(); diff --git a/admin/settings/plugins.php b/admin/settings/plugins.php index 20bf0f9196..75cb575ed8 100644 --- a/admin/settings/plugins.php +++ b/admin/settings/plugins.php @@ -174,5 +174,34 @@ if ($hassiteconfig) { $url . ' ?edit=' . $portfolio->get('id') ); } + + // repository setting + require_once("$CFG->dirroot/repository/lib.php"); + $catname =get_string('repositories', 'repository'); + $manage = get_string('manage', 'repository'); + $url = "$CFG->wwwroot/$CFG->admin/repository.php"; + $ADMIN->add('modules', new admin_category('repositorysettings', $catname)); + $temp = new admin_settingpage('managerepositories', $manage); + $temp->add(new admin_setting_managerepository()); + $ADMIN->add('repositorysettings', $temp); + $ADMIN->add('repositorysettings', new admin_externalpage('repositorynew', + get_string('createrepository', 'repository'), $url, 'moodle/site:config', true), + '', $url); + $ADMIN->add('repositorysettings', new admin_externalpage('repositorydelete', + get_string('deleterepository', 'repository'), $url, 'moodle/site:config', true), + '', $url); + $ADMIN->add('repositorysettings', new admin_externalpage('repositorycontroller', + get_string('managerepositories', 'repository'), $url, 'moodle/site:config', true), + '', $url); + foreach (repository_instances(get_context_instance(CONTEXT_SYSTEM), + null, false) as $repository) + { + if ($repository->has_admin_config()) { + $ADMIN->add('repositorysettings', + new admin_externalpage('repositorysettings'.$repository->id, + $repository->name, + $url . '?edit=' . $repository->id), + 'moodle/site:config'); + } + } } -?> diff --git a/lang/en_utf8/repository.php b/lang/en_utf8/repository.php index 21d671ac65..2ca3155f11 100644 --- a/lang/en_utf8/repository.php +++ b/lang/en_utf8/repository.php @@ -1,14 +1,19 @@ baseurl = $CFG->wwwroot . '/' . $CFG->admin . '/repository.php?sesskey=' . sesskey(); + } + + function get_setting() { + return true; + } + + function get_defaultsetting() { + return true; + } + + function get_full_name() { + return 's_managerepository'; + } + + function write_setting($data) { + $url = $this->baseurl . '&new=' . $data; + // TODO + // Should not use redirect and exit here + // Find a better way to do this. + // redirect($url); + // exit; + } + + function is_related($query) { + if (parent::is_related($query)) { + return true; + } + + $textlib = textlib_get_instance(); + $repositories= get_list_of_plugins('repository'); + foreach ($repositories as $p) { + if (strpos($p, $query) !== false) { + return true; + } + } + foreach (repository_instances(get_context_instance(CONTEXT_SYSTEM), null, false) as $instance) { + $title = $instance->name; + if (strpos($textlib->strtolower($title), $query) !== false) { + return true; + } + } + return false; + } + + function output_html($data, $query='') { + global $CFG, $USER; + $output = print_simple_box_start(true); + $namestr = get_string('name'); + $pluginstr = get_string('plugin', 'repository'); + $plugins = get_list_of_plugins('repository'); + $instances = repository_instances(get_context_instance(CONTEXT_SYSTEM), null, false); + $alreadyplugins = array(); + $table = new StdClass; + $table->head = array($namestr, $pluginstr, ''); + $table->data = array(); + + foreach ($instances as $i) { + $row = ''; + $row .= '' . get_string('edit') . '' . "\n"; + $row .= '' . get_string('delete') . '' . "\n"; + $row .= ' ' . get_string($i->visible ? 'hide' : 'show') . '' . "\n"; + $table->data[] = array($i->name, $i->type, $row); + if (!in_array($i->type, $alreadyplugins)) { + $alreadyplugins[] = $i->name; + } + } -?> + $output .= print_table($table, true); + $instancehtml = '

'; + $addable = 0; + $instancehtml .= get_string('add', 'repository'); + $instancehtml .= '

'; + $addable = 0; + foreach ($plugins as $p) { + $instancehtml .= ''.$p.'
'; + $addable++; + } + + if ($addable) { + $instancehtml .= '
'; + $output .= $instancehtml; + } + + $output .= print_simple_box_end(true); + + return highlight($query, $output); + } +} diff --git a/repository/boxnet/lang/en_utf8/repository_boxnet.php b/repository/boxnet/lang/en_utf8/repository_boxnet.php index 184380bd89..ae13cab9dc 100644 --- a/repository/boxnet/lang/en_utf8/repository_boxnet.php +++ b/repository/boxnet/lang/en_utf8/repository_boxnet.php @@ -1,4 +1,5 @@ dirroot.'/repository/boxnet/'.'boxlibphp5.php'); class repository_boxnet extends repository{ private $box; - public $type = 'boxnet'; public function __construct($repositoryid, $context = SITEID, $options = array()){ global $SESSION, $action; @@ -23,6 +22,9 @@ class repository_boxnet extends repository{ // reset session $reset = optional_param('reset', 0, PARAM_INT); if(!empty($reset)) { + // TODO + // think about muliti-instance + // must improve! unset($SESSION->box_token); } // do login @@ -58,7 +60,7 @@ class repository_boxnet extends repository{ public function get_login(){ global $DB; - if ($entry = $DB->get_record('repository', array('id'=>$this->repositoryid))) { + if ($entry = $DB->get_record('repository', array('id'=>$this->id))) { $ret->username = $entry->username; $ret->password = $entry->password; } else { @@ -121,7 +123,7 @@ class repository_boxnet extends repository{ $str .= '
'; $str .= ''; - $str .= ''; + $str .= ''; $str .= '