6d5a1de4318ccda53745bc132475faf970349593
[moodle.git] / lib / form / selectwithlink.php
1 <?php
2 require_once('HTML/QuickForm/select.php');
4 /**
5  * HTML class for a select type element
6  *
7  * @author       Jamie Pratt
8  * @access       public
9  */
10 class MoodleQuickForm_selectwithlink extends HTML_QuickForm_select{
11     /**
12      * html for help button, if empty then no help
13      *
14      * @var string
15      */
16     var $_helpbutton='';
17     var $_hiddenLabel=false;
18     var $_link=null;
19     var $_linklabel=null;
20     var $_linkreturn=null;
22     function MoodleQuickForm_selectwithlink($elementName=null, $elementLabel=null, $options=null, $attributes=null, $linkdata=null)
23     {
24         if (!empty($linkdata['link']) && !empty($linkdata['label'])) {
25             $this->_link = $linkdata['link'];
26             $this->_linklabel = $linkdata['label'];
27         }
29         if (!empty($linkdata['return'])) {
30             $this->_linkreturn = $linkdata['return'];
31         }
33         parent::HTML_QuickForm_select($elementName, $elementLabel, $options, $attributes);
34     } //end constructor
36     function setHiddenLabel($hiddenLabel){
37         $this->_hiddenLabel = $hiddenLabel;
38     }
39     function toHtml(){
40         $retval = '';
41         if ($this->_hiddenLabel){
42             $this->_generateId();
43             $retval = '<label class="accesshide" for="'.$this->getAttribute('id').'" >'.
44                         $this->getLabel().'</label>'.parent::toHtml();
45         } else {
46              $retval = parent::toHtml();
47         }
49         if (!empty($this->_link)) {
50             if (!empty($this->_linkreturn) && is_array($this->_linkreturn)) {
51                 $appendchar = '?';
52                 if (strstr($this->_link, '?')) {
53                     $appendchar = '&amp;';
54                 }
56                 foreach ($this->_linkreturn as $key => $val) {
57                     $this->_link .= $appendchar."$key=$val";
58                     $appendchar = '&amp;';
59                 }
60             }
62             $retval .= '<a style="margin-left: 5px" href="'.$this->_link.'">'.$this->_linklabel.'</a>';
63         }
65         return $retval;
66     }
67    /**
68     * Automatically generates and assigns an 'id' attribute for the element.
69     *
70     * Currently used to ensure that labels work on radio buttons and
71     * checkboxes. Per idea of Alexander Radivanovich.
72     * Overriden in moodleforms to remove qf_ prefix.
73     *
74     * @access private
75     * @return void
76     */
77     function _generateId()
78     {
79         static $idx = 1;
81         if (!$this->getAttribute('id')) {
82             $this->updateAttributes(array('id' => 'id_'. substr(md5(microtime() . $idx++), 0, 6)));
83         }
84     } // end func _generateId
85     /**
86      * set html for help button
87      *
88      * @access   public
89      * @param array $help array of arguments to make a help button
90      * @param string $function function name to call to get html
91      */
92     function setHelpButton($helpbuttonargs, $function='helpbutton'){
93         debugging('component setHelpButton() is not used any more, please use $mform->setHelpButton() instead');
94     }
95     /**
96      * get html for help button
97      *
98      * @access   public
99      * @return  string html for help button
100      */
101     function getHelpButton(){
102         return $this->_helpbutton;
103     }
104     /**
105      * Removes an OPTION from the SELECT
106      *
107      * @param     string    $value      Value for the OPTION to remove
108      * @since     1.0
109      * @access    public
110      * @return    void
111      */
112     function removeOption($value)
113     {
114         $key=array_search($value, $this->_values);
115         if ($key!==FALSE and $key!==null) {
116             unset($this->_values[$key]);
117         }
118         foreach ($this->_options as $key=>$option){
119             if ($option['attr']['value']==$value){
120                 unset($this->_options[$key]);
121                 return;
122             }
123         }
124     } // end func removeOption
125     /**
126      * Removes all OPTIONs from the SELECT
127      *
128      * @param     string    $value      Value for the OPTION to remove
129      * @since     1.0
130      * @access    public
131      * @return    void
132      */
133     function removeOptions()
134     {
135         $this->_options = array();
136     } // end func removeOption
137     /**
138      * Slightly different container template when frozen. Don't want to use a label tag
139      * with a for attribute in that case for the element label but instead use a div.
140      * Templates are defined in renderer constructor.
141      *
142      * @return string
143      */
144     function getElementTemplateType(){
145         if ($this->_flagFrozen){
146             return 'static';
147         } else {
148             return 'default';
149         }
150     }