diff --git a/admin/external_forms.php b/admin/external_forms.php new file mode 100644 index 00000000000..9d77469cec1 --- /dev/null +++ b/admin/external_forms.php @@ -0,0 +1,70 @@ +. + +/** + * Web services admin UI forms + * + * @package webservice + * @copyright 2009 Moodle Pty Ltd (http://moodle.com) + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +require_once $CFG->libdir.'/formslib.php'; + +class external_service_form extends moodleform { + function definition() { + global $CFG, $USER; + + $mform = $this->_form; + $service = $this->_customdata; + + $mform->addElement('header', 'extservice', get_string('externalservice', 'webservice')); + + $mform->addElement('text', 'name', get_string('name')); + $mform->addRule('name', get_string('required'), 'required', null, 'client'); + $mform->addElement('advcheckbox', 'enabled', get_string('enabled', 'webservice')); + $mform->addElement('text', 'requiredcapability', get_string('requiredcapability', 'webservice')); + // TODO: change to capability selection or even better if new forms element used, + // we also need to indicate if current capability does not exist in system! + $mform->addElement('advcheckbox', 'restrictedusers', get_string('restrictedusers', 'webservice')); + + $mform->addElement('hidden', 'id'); + $mform->setType('id', PARAM_INT); + + $this->add_action_buttons(true); + + $this->set_data($service); + } + + function definition_after_data() { + $mform = $this->_form; + $service = $this->_customdata; + + if (!empty($service->component)) { + // built-in components must not be modified except the enabled flag!! + $mform->hardFreeze('name,requiredcapability,restrictedusers'); + } + } + + function validation($data, $files) { + $errors = parent::validation($data, $files); + + //TODO: better make sure the service name is unique + + return $errors; + } +} \ No newline at end of file diff --git a/admin/external_service.php b/admin/external_service.php index 5ed89b4b440..089ef3fada9 100644 --- a/admin/external_service.php +++ b/admin/external_service.php @@ -25,6 +25,7 @@ require_once('../config.php'); require_once($CFG->libdir.'/adminlib.php'); +require_once('external_forms.php'); $id = required_param('id', PARAM_INT); $action = optional_param('action', '', PARAM_ACTION); @@ -42,8 +43,7 @@ if ($id) { $service = null; } -// delete a service -if (!empty($action) and $action == 'delete' and confirm_sesskey() and $service and empty($service->component)) { +if ($action == 'delete' and confirm_sesskey() and $service and empty($service->component)) { if (!$confirm) { admin_externalpage_print_header(); $optionsyes = array('id'=>$id, 'action'=>'delete', 'confirm'=>1, 'sesskey'=>sesskey()); @@ -60,137 +60,25 @@ if (!empty($action) and $action == 'delete' and confirm_sesskey() and $service a redirect($returnurl); } -$clear = optional_param('clearbutton', false, PARAM_BOOL); -$servicename = optional_param('servicename', '', PARAM_TEXT); -$enableservice = optional_param('enableservice', 0, PARAM_BOOL); -$restrictedusers = optional_param('restrictedusers', 0, PARAM_BOOL); -$capability = optional_param('capability', '', PARAM_CAPABILITY); +$mform = new external_service_form(null, $service); -// clear the capability field -if (!empty($clear)) { - $service->name = $servicename; - $service->enabled = $enableservice; - $service->requiredcapability = ""; - $service->restrictedusers = $restrictedusers; -} else { -// add/update a service - if ((!empty($action) and ($action == 'add' || $action == 'update') and confirm_sesskey())) { - - if (!empty($servicename)) { - $tempservice = new object(); - $tempservice->name = $servicename; - $tempservice->enabled = $enableservice; - $tempservice->requiredcapability = $capability; - $tempservice->restrictedusers = $restrictedusers; +if ($mform->is_cancelled()) { + redirect($returnurl); - if ($action == 'add') { - $DB->insert_record('external_services', $tempservice); - } - else { - $tempservice->id = $service->id; - $DB->update_record('external_services', $tempservice); - } +} else if ($data = $mform->get_data()) { + $data = (object)$data; - redirect($returnurl); - - } - //administrator has omitted service name => display error message - else { - $service->name = $servicename; - $service->enabled = $enableservice; - $service->requiredcapability = $capability; - $service->restrictedusers = $restrictedusers; - $errormessage = get_string('emptyname', 'webservice'); - } + //TODO: add timecreated+modified and maybe logging too + if (empty($data->id)) { + $DB->insert_record('external_services', $data); + } else { + $DB->update_record('external_services', $data); } -} - - -admin_externalpage_print_header(); -if (!empty($errormessage)) { - echo $OUTPUT->notification($errormessage); + redirect($returnurl); } - -// Prepare the list of capabilites to choose from - $systemcontext = get_context_instance(CONTEXT_SYSTEM); - $allcapabilities = fetch_context_capabilities($systemcontext); - $capabilitychoices = array(); - foreach ($allcapabilities as $cap) { - $capabilitychoices[$cap->name] = $cap->name . ': ' . get_capability_string($cap->name); - } - -// Javascript for the capability search/selection fields - $PAGE->requires->yui_lib('event'); - $PAGE->requires->js('admin/webservice/script.js'); - $PAGE->requires->js_function_call('capability_service.cap_filter_init', array(get_string('search'))); - -// UI - $capability = optional_param('capability', '', PARAM_CAPABILITY); - echo $OUTPUT->box_start('generalbox boxwidthwide boxaligncenter centerpara'); - - $action = (empty($id))?'add':'update'; //if 'id' GET parameter = 0 we're adding a service, otherwise updating - - //the service form - $form = new html_form(); - $form->url = new moodle_url('/admin/external_service.php', array('id' => $id, 'action' => $action)); // Required - $form->button = new html_button(); - $form->button->id = 'settingssubmit'; - $form->button->text = get_string('saveservice', 'webservice'); // Required - $form->button->disabled = false; - $form->button->title = get_string('saveservice', 'webservice'); - $form->method = 'post'; - $form->id = 'settingsform'; - - echo $OUTPUT->heading(get_string('externalservice', 'webservice')); - //service name field - $namefield = ""; - $nametextfield = new html_field(); - $nametextfield->name = 'servicename'; - $nametextfield->value = empty($service->name)?"":$service->name; - $nametextfield->style = 'width: 30em;'; - $namefield .= $OUTPUT->textfield($nametextfield); - $contents = $namefield; - //enable field - $servicecheckbox = new html_select_option(); - $servicecheckbox->value = true; - $servicecheckbox->selected = empty($service->enabled)?false:true; - $servicecheckbox->text = get_string('enabled', 'webservice'); - $servicecheckbox->label->text = get_string('enabled', 'webservice'); - $servicecheckbox->alt = get_string('enabled', 'webservice'); - $contents .= $OUTPUT->checkbox($servicecheckbox, 'enableservice'); - //help text - $contents .= '
'. get_string('addservicehelp', 'webservice') . '
'; - //restricted users option - $restricteduserscheckbox = new html_select_option(); - $restricteduserscheckbox->value = true; - $restricteduserscheckbox->selected = empty($service->restrictedusers)?false:true; - $restricteduserscheckbox->text = get_string('restrictedusers', 'webservice'); - $restricteduserscheckbox->label->text = get_string('restrictedusers', 'webservice'); - $restricteduserscheckbox->alt = get_string('restrictedusers', 'webservice'); - $contents .= $OUTPUT->checkbox($restricteduserscheckbox, 'restrictedusers'); - //capability section (search field + selection field) - $contents .= ' '; - $capabilityname = new html_field(); - $capabilityname->name = 'capabilityname'; - $capabilityname->id = 'capabilityname'; - $capabilityname->value = empty($service->requiredcapability)?"":$service->requiredcapability; - $capabilityname->disabled = true; - $capabilityname->style = 'width: 20em;'; - $capability = empty($service->requiredcapability)?"":$service->requiredcapability; - $select = html_select::make($capabilitychoices, 'capability', $capability); - $select->nothingvalue = ''; - $select->listbox = true; - $select->tabindex = 0; - $contents .= $OUTPUT->select($select); - $contents .= '