diff --git a/grade/edit/outcome/edit_form.php b/grade/edit/outcome/edit_form.php index e68ab9d0e87..ec6b4f1146b 100644 --- a/grade/edit/outcome/edit_form.php +++ b/grade/edit/outcome/edit_form.php @@ -46,7 +46,8 @@ class edit_outcome_form extends moodleform { $options = array(); - $mform->addElement('select', 'scaleid', get_string('scale'), $options); + $mform->addElement('selectwithlink', 'scaleid', get_string('scale'), $options, null, + array('link' => $CFG->wwwroot.'/grade/edit/scale/edit.php?courseid='.$COURSE->id, 'label' => get_string('scalescustomcreate'))); $mform->setHelpButton('scaleid', array('scaleid', get_string('scale'), 'grade')); $mform->addRule('scaleid', get_string('required'), 'required'); diff --git a/grade/edit/tree/outcomeitem_form.php b/grade/edit/tree/outcomeitem_form.php index 0a405753c3e..3fbb0dbb8a1 100644 --- a/grade/edit/tree/outcomeitem_form.php +++ b/grade/edit/tree/outcomeitem_form.php @@ -50,7 +50,8 @@ class edit_outcomeitem_form extends moodleform { $options[$outcome->id] = $outcome->get_name(); } } - $mform->addElement('select', 'outcomeid', get_string('outcome', 'grades'), $options); + $mform->addElement('selectwithlink', 'outcomeid', get_string('outcome', 'grades'), $options, null, + array('link' => $CFG->wwwroot.'/grade/edit/outcome/course.php?id='.$COURSE->id, 'label' => get_string('outcomeassigntocourse', 'grades'))); $mform->setHelpButton('outcomeid', array('outcomeid', get_string('outcomeid', 'grades'), 'grade'), true); $mform->addRule('outcomeid', get_string('required'), 'required'); diff --git a/lang/en_utf8/grades.php b/lang/en_utf8/grades.php index b72a3a56f39..1b261ee3957 100644 --- a/lang/en_utf8/grades.php +++ b/lang/en_utf8/grades.php @@ -359,6 +359,7 @@ $string['onascaleof'] = ' on a scale of $a->grademin to $a->grademax'; $string['operations'] = 'Operations'; $string['options'] = 'Options'; $string['outcome'] = 'Outcome'; +$string['outcomeassigntocourse'] = 'Assign another outcome to this course'; $string['outcomecategory'] = 'Create outcomes in category'; $string['outcomecategorynew'] = 'New category'; $string['outcomeconfirmdelete'] = 'Are you sure you wish to delete the outcome \"$a\"?'; diff --git a/lib/form/selectwithlink.php b/lib/form/selectwithlink.php new file mode 100755 index 00000000000..5e697a7d815 --- /dev/null +++ b/lib/form/selectwithlink.php @@ -0,0 +1,163 @@ +_link = $linkdata['link']; + $this->_linklabel = $linkdata['label']; + } + + if (!empty($linkdata['return'])) { + $this->_linkreturn = $linkdata['return']; + } + + parent::HTML_QuickForm_select($elementName, $elementLabel, $options, $attributes); + } //end constructor + + function setHiddenLabel($hiddenLabel){ + $this->_hiddenLabel = $hiddenLabel; + } + function toHtml(){ + $retval = ''; + if ($this->_hiddenLabel){ + $this->_generateId(); + $retval = ''.parent::toHtml(); + } else { + $retval = parent::toHtml(); + } + + if (!empty($this->_link)) { + if (!empty($this->_linkreturn) && is_array($this->_linkreturn)) { + $appendchar = '?'; + if (strstr($this->_link, '?')) { + $appendchar = '&'; + } + + foreach ($this->_linkreturn as $key => $val) { + $this->_link .= $appendchar."$key=$val"; + $appendchar = '&'; + } + } + + $retval .= ''.$this->_linklabel.''; + } + + return $retval; + } + /** + * Automatically generates and assigns an 'id' attribute for the element. + * + * Currently used to ensure that labels work on radio buttons and + * checkboxes. Per idea of Alexander Radivanovich. + * Overriden in moodleforms to remove qf_ prefix. + * + * @access private + * @return void + */ + function _generateId() + { + static $idx = 1; + + if (!$this->getAttribute('id')) { + $this->updateAttributes(array('id' => 'id_'. substr(md5(microtime() . $idx++), 0, 6))); + } + } // end func _generateId + /** + * set html for help button + * + * @access public + * @param array $help array of arguments to make a help button + * @param string $function function name to call to get html + */ + function setHelpButton($helpbuttonargs, $function='helpbutton'){ + if (!is_array($helpbuttonargs)){ + $helpbuttonargs=array($helpbuttonargs); + }else{ + $helpbuttonargs=$helpbuttonargs; + } + //we do this to to return html instead of printing it + //without having to specify it in every call to make a button. + if ('helpbutton' == $function){ + $defaultargs=array('', '', 'moodle', true, false, '', true); + $helpbuttonargs=$helpbuttonargs + $defaultargs ; + } + $this->_helpbutton=call_user_func_array($function, $helpbuttonargs); + } + /** + * get html for help button + * + * @access public + * @return string html for help button + */ + function getHelpButton(){ + return $this->_helpbutton; + } + /** + * Removes an OPTION from the SELECT + * + * @param string $value Value for the OPTION to remove + * @since 1.0 + * @access public + * @return void + */ + function removeOption($value) + { + $key=array_search($value, $this->_values); + if ($key!==FALSE and $key!==null) { + unset($this->_values[$key]); + } + foreach ($this->_options as $key=>$option){ + if ($option['attr']['value']==$value){ + unset($this->_options[$key]); + return; + } + } + } // end func removeOption + /** + * Removes all OPTIONs from the SELECT + * + * @param string $value Value for the OPTION to remove + * @since 1.0 + * @access public + * @return void + */ + function removeOptions() + { + $this->_options = array(); + } // end func removeOption + /** + * Slightly different container template when frozen. Don't want to use a label tag + * with a for attribute in that case for the element label but instead use a div. + * Templates are defined in renderer constructor. + * + * @return string + */ + function getElementTemplateType(){ + if ($this->_flagFrozen){ + return 'static'; + } else { + return 'default'; + } + } +} +?> diff --git a/lib/formslib.php b/lib/formslib.php index d9b55a51c77..568876d2245 100644 --- a/lib/formslib.php +++ b/lib/formslib.php @@ -2073,4 +2073,5 @@ MoodleQuickForm::registerElementType('questioncategory', "$CFG->libdir/form/ques MoodleQuickForm::registerElementType('advcheckbox', "$CFG->libdir/form/advcheckbox.php", 'MoodleQuickForm_advcheckbox'); MoodleQuickForm::registerElementType('recaptcha', "$CFG->libdir/form/recaptcha.php", 'MoodleQuickForm_recaptcha'); MoodleQuickForm::registerElementType('warning', "$CFG->libdir/form/warning.php", 'MoodleQuickForm_warning'); +MoodleQuickForm::registerElementType('selectwithlink', "$CFG->libdir/form/selectwithlink.php", 'MoodleQuickForm_selectwithlink'); ?>