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');
?>