mirrored from git://git.moodle.org/moodle.git
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MDL-16962 New formslib element for dropdowns with a link to another p…
…age. Applied to outcome item and outcome edit pages.
- Loading branch information
nicolasconnault
committed
Oct 22, 2008
1 parent
2bc741e
commit b75bb79
Showing
1 changed file
with
163 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,163 @@ | ||
<?php | ||
require_once('HTML/QuickForm/select.php'); | ||
|
||
/** | ||
* HTML class for a select type element | ||
* | ||
* @author Jamie Pratt | ||
* @access public | ||
*/ | ||
class MoodleQuickForm_selectwithlink extends HTML_QuickForm_select{ | ||
/** | ||
* html for help button, if empty then no help | ||
* | ||
* @var string | ||
*/ | ||
var $_helpbutton=''; | ||
var $_hiddenLabel=false; | ||
var $_link=null; | ||
var $_linklabel=null; | ||
var $_linkreturn=null; | ||
|
||
function MoodleQuickForm_selectwithlink($elementName=null, $elementLabel=null, $options=null, $attributes=null, $linkdata=null) | ||
{ | ||
if (!empty($linkdata['link']) && !empty($linkdata['label'])) { | ||
$this->_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 = '<label class="accesshide" for="'.$this->getAttribute('id').'" >'. | ||
$this->getLabel().'</label>'.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 .= '<a style="margin-left: 5px" href="'.$this->_link.'">'.$this->_linklabel.'</a>'; | ||
} | ||
|
||
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'; | ||
} | ||
} | ||
} | ||
?> |