--- /dev/null
+<?php
+require_once("HTML/QuickForm/text.php");
+
+/**
+ * HTML class for a texturl type element
+ *
+ * @author Jamie Pratt
+ * @access public
+ */
+class MoodleQuickForm_texturl extends HTML_QuickForm_text{
+ /**
+ * html for help button, if empty then no help
+ *
+ * @var string
+ */
+ var $_helpbutton='';
+ var $_hiddenLabel=false;
+
+ function MoodleQuickForm_texturl($elementName=null, $elementLabel=null, $attributes=null, $options=null) {
+ global $CFG;
+ require_once("$CFG->dirroot/repository/lib.php");
+ $options = (array)$options;
+ foreach ($options as $name=>$value) {
+ $this->_options[$name] = $value;
+ }
+ parent::HTML_QuickForm_text($elementName, $elementLabel, $attributes);
+ repository_head_setup();
+ }
+
+ function setHiddenLabel($hiddenLabel){
+ $this->_hiddenLabel = $hiddenLabel;
+ }
+ function toHtml(){
+ global $CFG, $COURSE, $USER, $PAGE;
+ $strsaved = get_string('filesaved', 'repository');
+ $straddlink = get_string('choosealink', 'repository');
+ if ($COURSE->id == SITEID) {
+ $context = get_context_instance(CONTEXT_SYSTEM);
+ } else {
+ $context = get_context_instance(CONTEXT_COURSE, $COURSE->id);
+ }
+ $client_id = uniqid();
+
+ $repojs = repository_get_client($context, $client_id, '*', 'link');
+
+ $PAGE->requires->js('lib/form/texturl.js');
+
+ $id = $this->_attributes['id'];
+ $elname = $this->_attributes['name'];
+
+ $str = $repojs;
+ if ($this->_hiddenLabel) {
+ $this->_generateId();
+ $str .= '<label class="accesshide" for="'.$this->getAttribute('id').'" >'.
+ $this->getLabel().'</label>'.parent::toHtml();
+ } else {
+ $str .= parent::toHtml();
+ }
+ $str .= <<<EOD
+<button id="filepicker-btn-{$client_id}" style="display:none" onclick="return texturl_launch_filepicker('$id', '$client_id', 0)">$straddlink</button>
+EOD;
+ // hide the button if javascript is not enabled
+ $str .= $PAGE->requires->js_function_call('show_item', array("filepicker-btn-{$client_id}"))->asap();
+ return $str;
+ }
+ /**
+ * 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;
+ }
+ /**
+ * 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';
+ }
+ }
+}