feed580a6aea8000a179998c11b540ce6cff2ad7
[moodle.git] / admin / repository.php
1 <?php
3 require_once(dirname(dirname(__FILE__)) . '/config.php');
4 require_once($CFG->dirroot . '/repository/lib.php');
5 require_once($CFG->libdir . '/adminlib.php');
7 $repository    = optional_param('repos', '', PARAM_FORMAT);
8 $action        = optional_param('action', '', PARAM_ALPHA);
9 $sure          = optional_param('sure', '', PARAM_ALPHA);
11 $display = true; // fall through to normal display
13 $pagename = 'repositorycontroller';
15 if ($action == 'edit') {
16     $pagename = 'repositorysettings' . $repository;
17 } else if ($action == 'delete') {
18     $pagename = 'repositorydelete';
19 } else if (($action == 'newon') || ($action == 'newoff')) {
20     $pagename = 'repositorynew';
21 }
23 // Need to remember this for form
24 $formaction = $action;
26 // Check what visibility to show the new repository
27 if ($action == 'newon') {
28     $action = 'new';
29     $visible = true;
30 } else if ($action == 'newoff') {
31     $action = 'new';
32     $visible = false;
33 }
35 require_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM));
36 admin_externalpage_setup($pagename);
38 $sesskeyurl = $CFG->wwwroot.'/'.$CFG->admin.'/repository.php?sesskey=' . sesskey();
39 $baseurl    = $CFG->wwwroot.'/'.$CFG->admin.'/settings.php?section=managerepositories';
41 $configstr  = get_string('manage', 'repository');
43 $return = true;
45 if (($action == 'edit') || ($action == 'new')) {
46     $pluginname = '';
47     if ($action == 'edit') {
48         $repositorytype = repository::get_type_by_typename($repository);
49         $classname = 'repository_' . $repositorytype->get_typename();
50         $configs = call_user_func(array($classname, 'get_type_option_names'));
51         $plugin = $repositorytype->get_typename();
52         // looking for instance to edit plugin name
53         $instanceoptions = call_user_func(array($classname, 'get_instance_option_names'));
54         if (empty($instanceoptions)) {
55             $params = array();
56             $params['type'] = $plugin;
57             $instances = repository::get_instances($params);
58             if ($instance = array_pop($instances)) {
59                 // use the one form db record
60                 $pluginname = $instance->instance->name;
61             }
62         }
64     } else {
65         $repositorytype = null;
66         $plugin = $repository;
67         $typeid = $repository;
68     }
69     $PAGE->set_pagetype('admin-repository-' . $plugin);
70     // display the edit form for this instance
71     $mform = new repository_type_form('', array('pluginname'=>$pluginname, 'plugin' => $plugin, 'instance' => $repositorytype, 'action' => $formaction));
72     $fromform = $mform->get_data();
74     //detect if we create a new type without config (in this case if don't want to display a setting page during creation)
75     $nosettings = false;
76     if ($action == 'new') {
77         $adminconfignames = repository::static_function($repository, 'get_type_option_names');
78         $nosettings = empty($adminconfignames);
79     }
80     // end setup, begin output
82     if ($mform->is_cancelled()){
83         redirect($baseurl);
84     } else if (!empty($fromform) || $nosettings) {
85         require_sesskey();
86         if ($action == 'edit') {
87             $settings = array();
88             foreach($configs as $config) {
89                 if (!empty($fromform->$config)) {
90                     $settings[$config] = $fromform->$config;
91                 } else {
92                     // if the config name is not appear in $fromform
93                     // empty this config value
94                     $settings[$config] = '';
95                 }
96             }
97             $instanceoptionnames = repository::static_function($repository, 'get_instance_option_names');
98             if (!empty($instanceoptionnames)) {
99                 if (array_key_exists('enablecourseinstances', $fromform)) {
100                     $settings['enablecourseinstances'] = $fromform->enablecourseinstances;
101                 }
102                 else {
103                     $settings['enablecourseinstances'] = 0;
104                 }
105                 if (array_key_exists('enableuserinstances', $fromform)) {
106                     $settings['enableuserinstances'] = $fromform->enableuserinstances;
107                 }
108                 else {
109                     $settings['enableuserinstances'] = 0;
110                 }
111             }
112             $success = $repositorytype->update_options($settings);
113         } else {
114             $type = new repository_type($plugin, (array)$fromform, $visible);
115             $type->create();
116             $success = true;
117             $data = data_submitted();
118         }
119         if ($success) {
120             // configs saved
121             redirect($baseurl);
122         } else {
123             print_error('instancenotsaved', 'repository', $baseurl);
124         }
125         exit;
126     } else {
127         echo $OUTPUT->header();
128         echo $OUTPUT->heading(get_string('configplugin', 'repository_'.$plugin));
129         $displaysettingform = true;
130         if ($action == 'edit') {
131             $typeoptionnames = repository::static_function($repository, 'get_type_option_names');
132             $instanceoptionnames = repository::static_function($repository, 'get_instance_option_names');
133             if (empty($typeoptionnames) && empty($instanceoptionnames)) {
134                 $displaysettingform = false;
135             }
136         }
137         if ($displaysettingform){
138             $OUTPUT->box_start();
139             $mform->display();
140             $OUTPUT->box_end();
141         }
142         $return = false;
144         // Display instances list and creation form
145         if ($action == 'edit') {
146            $instanceoptionnames = repository::static_function($repository, 'get_instance_option_names');
147            if (!empty($instanceoptionnames)) {
148                repository::display_instances_list(get_context_instance(CONTEXT_SYSTEM), $repository);
149            }
150         }
151     }
152 } else if ($action == 'show') {
153     if (!confirm_sesskey()) {
154         print_error('confirmsesskeybad', '', $baseurl);
155     }
156     $repositorytype = repository::get_type_by_typename($repository);
157     if (empty($repositorytype)) {
158         print_error('invalidplugin', 'repository', '', $repository);
159     }
160     $repositorytype->update_visibility(true);
161     $return = true;
162 } else if ($action == 'hide') {
163     if (!confirm_sesskey()) {
164         print_error('confirmsesskeybad', '', $baseurl);
165     }
166     $repositorytype = repository::get_type_by_typename($repository);
167     if (empty($repositorytype)) {
168         print_error('invalidplugin', 'repository', '', $repository);
169     }
170     $repositorytype->update_visibility(false);
171     $return = true;
172 } else if ($action == 'delete') {
173     $repositorytype = repository::get_type_by_typename($repository);
174     if ($sure) {
175         $PAGE->set_pagetype('admin-repository-' . $repository);
176         if (!confirm_sesskey()) {
177             print_error('confirmsesskeybad', '', $baseurl);
178         }
179         if ($repositorytype->delete()) {
180             redirect($baseurl);
181         } else {
182             print_error('instancenotdeleted', 'repository', $baseurl);
183         }
184         exit;
185     } else {
186         echo $OUTPUT->header();
187         echo $OUTPUT->confirm(get_string('confirmremove', 'repository', $repositorytype->get_readablename()), $sesskeyurl . '&action=delete&repos=' . $repository . '&sure=yes', $baseurl);
188         $return = false;
189     }
190 } else if ($action == 'moveup') {
191     $repositorytype = repository::get_type_by_typename($repository);
192     $repositorytype->move_order('up');
193 } else if ($action == 'movedown') {
194     $repositorytype = repository::get_type_by_typename($repository);
195     $repositorytype->move_order('down');
198 if (!empty($return)) {
199     redirect($baseurl);
201 echo $OUTPUT->footer();