MDL-14741: adding a setting to choose default htmleditor, and begin work on possibili...
[moodle.git] / lib / form / htmleditor.php
1 <?php
2 global $CFG;
3 require_once("$CFG->libdir/form/textarea.php");
5 /**
6  * HTML class for htmleditor type element
7  *
8  * @author       Jamie Pratt
9  * @access       public
10  */
11 class MoodleQuickForm_htmleditor extends MoodleQuickForm_textarea{
12     var $_type;
13     var $_canUseHtmlEditor;
14     var $_options=array('canUseHtmlEditor'=>'detect','rows'=>10, 'cols'=>45, 'width'=>0,'height'=>0, 'course'=>0);
15     function MoodleQuickForm_htmleditor($elementName=null, $elementLabel=null, $options=array(), $attributes=null){
16         parent::MoodleQuickForm_textarea($elementName, $elementLabel, $attributes);
17         // set the options, do not bother setting bogus ones
18         if (is_array($options)) {
19             foreach ($options as $name => $value) {
20                 if (isset($this->_options[$name])) {
21                     if (is_array($value) && is_array($this->_options[$name])) {
22                         $this->_options[$name] = @array_merge($this->_options[$name], $value);
23                     } else {
24                         $this->_options[$name] = $value;
25                     }
26                 }
27             }
28         }
29         if ($this->_options['canUseHtmlEditor']=='detect'){
30             $this->_options['canUseHtmlEditor']=can_use_html_editor();
31         }
32         if ($this->_options['canUseHtmlEditor']){
33             $this->_type='htmleditor';
34             //$this->_elementTemplateType='wide';
35         }else{
36             $this->_type='textarea';
37         }
38         $this->_canUseHtmlEditor = $this->_options['canUseHtmlEditor'];
39     }
40     /**
41      * set html for help button
42      *
43      * @access   public
44      * @param array $help array of arguments to make a help button
45      * @param string $function function name to call to get html
46      */
47     function setHelpButton($helpbuttonargs, $function='helpbutton'){
48         if (!$this->_canUseHtmlEditor){
49             if ('editorhelpbutton' == $function){
50                 $key = array_search('richtext', $helpbuttonargs);
51                 if ($key !== FALSE){
52                     array_splice($helpbuttonargs, $key, 1, array('text', 'emoticons'));
53                 }
54             } elseif ('helpbutton' == $function && $helpbuttonargs[0] == 'richtext' && ((!isset($helpbuttonargs[2])) || $helpbuttonargs[2] == 'moodle')){
55                 //replace single 'richtext' help button with text and emoticon button when htmleditor off.
56                 return $this->setHelpButton(array('text', 'emoticons'), 'editorhelpbutton');
57             }
58         }
59         return parent::setHelpButton($helpbuttonargs, $function);
60     }
62     function toHtml(){
63         if ($this->_canUseHtmlEditor && !$this->_flagFrozen){
64             ob_start();
65             use_html_editor($this->getName(), '', $this->getAttribute('id'));
66             $script=ob_get_clean();
67         } else {
68             $script='';
69         }
70         if ($this->_flagFrozen) {
71             return $this->getFrozenHtml();
72         } else {
73             return $this->_getTabs() .
74                     print_textarea($this->_canUseHtmlEditor,
75                                     $this->_options['rows'],
76                                     $this->_options['cols'],
77                                     $this->_options['width'],
78                                     $this->_options['height'],
79                                     $this->getName(),
80                                     preg_replace("/(\r\n|\n|\r)/", '&#010;',$this->getValue()),
81                                     $this->_options['course'],
82                                     true,
83                                     $this->getAttribute('id')).$script;
84         }
85     } //end func toHtml
87     /**
88      * What to display when element is frozen.
89      *
90      * @access    public
91      * @return    string
92      */
93     function getFrozenHtml()
94     {
95         $html = format_text($this->getValue());
96         return $html . $this->_getPersistantData();
97     } //end func getFrozenHtml
98 }
99 ?>