[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 18 /** 19 * Filepicker form element 20 * 21 * Contains HTML class for a single filepicker form element 22 * 23 * @package core_form 24 * @copyright 2009 Dongsheng Cai <dongsheng@moodle.com> 25 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 26 */ 27 28 global $CFG; 29 30 require_once("HTML/QuickForm/button.php"); 31 require_once($CFG->dirroot.'/repository/lib.php'); 32 33 /** 34 * Filepicker form element 35 * 36 * HTML class for a single filepicker element (based on button) 37 * 38 * @package core_form 39 * @category form 40 * @copyright 2009 Dongsheng Cai <dongsheng@moodle.com> 41 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 42 */ 43 class MoodleQuickForm_filepicker extends HTML_QuickForm_input { 44 /** @var string html for help button, if empty then no help will icon will be dispalyed. */ 45 public $_helpbutton = ''; 46 47 /** @var array options provided to initalize filemanager */ 48 // PHP doesn't support 'key' => $value1 | $value2 in class definition 49 // We cannot do $_options = array('return_types'=> FILE_INTERNAL | FILE_REFERENCE); 50 // So I have to set null here, and do it in constructor 51 protected $_options = array('maxbytes'=>0, 'accepted_types'=>'*', 'return_types'=>null); 52 53 /** 54 * Constructor 55 * 56 * @param string $elementName (optional) name of the filepicker 57 * @param string $elementLabel (optional) filepicker label 58 * @param array $attributes (optional) Either a typical HTML attribute string 59 * or an associative array 60 * @param array $options set of options to initalize filepicker 61 */ 62 public function __construct($elementName=null, $elementLabel=null, $attributes=null, $options=null) { 63 global $CFG, $PAGE; 64 65 $options = (array)$options; 66 foreach ($options as $name=>$value) { 67 if (array_key_exists($name, $this->_options)) { 68 $this->_options[$name] = $value; 69 } 70 } 71 if (empty($options['return_types'])) { 72 $this->_options['return_types'] = FILE_INTERNAL; 73 } 74 $fpmaxbytes = 0; 75 if (!empty($options['maxbytes'])) { 76 $fpmaxbytes = $options['maxbytes']; 77 } 78 $coursemaxbytes = 0; 79 if (!empty($PAGE->course->maxbytes)) { 80 $coursemaxbytes = $PAGE->course->maxbytes; 81 } 82 $this->_options['maxbytes'] = get_user_max_upload_file_size($PAGE->context, $CFG->maxbytes, $coursemaxbytes, $fpmaxbytes); 83 $this->_type = 'filepicker'; 84 parent::__construct($elementName, $elementLabel, $attributes); 85 } 86 87 /** 88 * Old syntax of class constructor. Deprecated in PHP7. 89 * 90 * @deprecated since Moodle 3.1 91 */ 92 public function MoodleQuickForm_filepicker($elementName=null, $elementLabel=null, $attributes=null, $options=null) { 93 debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER); 94 self::__construct($elementName, $elementLabel, $attributes, $options); 95 } 96 97 /** 98 * Returns html for help button. 99 * 100 * @return string html for help button 101 */ 102 function getHelpButton() { 103 return $this->_helpbutton; 104 } 105 106 /** 107 * Returns type of filepicker element 108 * 109 * @return string 110 */ 111 function getElementTemplateType() { 112 if ($this->_flagFrozen){ 113 return 'nodisplay'; 114 } else { 115 return 'default'; 116 } 117 } 118 119 /** 120 * Returns HTML for filepicker form element. 121 * 122 * @return string 123 */ 124 function toHtml() { 125 global $CFG, $COURSE, $USER, $PAGE, $OUTPUT; 126 $id = $this->_attributes['id']; 127 $elname = $this->_attributes['name']; 128 129 if ($this->_flagFrozen) { 130 return $this->getFrozenHtml(); 131 } 132 if (!$draftitemid = (int)$this->getValue()) { 133 // no existing area info provided - let's use fresh new draft area 134 $draftitemid = file_get_unused_draft_itemid(); 135 $this->setValue($draftitemid); 136 } 137 138 if ($COURSE->id == SITEID) { 139 $context = context_system::instance(); 140 } else { 141 $context = context_course::instance($COURSE->id); 142 } 143 144 $client_id = uniqid(); 145 146 $args = new stdClass(); 147 // need these three to filter repositories list 148 $args->accepted_types = $this->_options['accepted_types']?$this->_options['accepted_types']:'*'; 149 $args->return_types = $this->_options['return_types']; 150 $args->itemid = $draftitemid; 151 $args->maxbytes = $this->_options['maxbytes']; 152 $args->context = $PAGE->context; 153 $args->buttonname = $elname.'choose'; 154 $args->elementname = $elname; 155 156 $html = $this->_getTabs(); 157 $fp = new file_picker($args); 158 $options = $fp->options; 159 $options->context = $PAGE->context; 160 $html .= $OUTPUT->render($fp); 161 $html .= '<input type="hidden" name="'.$elname.'" id="'.$id.'" value="'.$draftitemid.'" class="filepickerhidden"/>'; 162 163 $module = array('name'=>'form_filepicker', 'fullpath'=>'/lib/form/filepicker.js', 'requires'=>array('core_filepicker', 'node', 'node-event-simulate', 'core_dndupload')); 164 $PAGE->requires->js_init_call('M.form_filepicker.init', array($fp->options), true, $module); 165 166 $nonjsfilepicker = new moodle_url('/repository/draftfiles_manager.php', array( 167 'env'=>'filepicker', 168 'action'=>'browse', 169 'itemid'=>$draftitemid, 170 'subdirs'=>0, 171 'maxbytes'=>$options->maxbytes, 172 'maxfiles'=>1, 173 'ctx_id'=>$PAGE->context->id, 174 'course'=>$PAGE->course->id, 175 'sesskey'=>sesskey(), 176 )); 177 178 // non js file picker 179 $html .= '<noscript>'; 180 $html .= "<div><object type='text/html' data='$nonjsfilepicker' height='160' width='600' style='border:1px solid #000'></object></div>"; 181 $html .= '</noscript>'; 182 183 return $html; 184 } 185 186 /** 187 * export uploaded file 188 * 189 * @param array $submitValues values submitted. 190 * @param bool $assoc specifies if returned array is associative 191 * @return array 192 */ 193 function exportValue(&$submitValues, $assoc = false) { 194 global $USER; 195 196 $draftitemid = $this->_findValue($submitValues); 197 if (null === $draftitemid) { 198 $draftitemid = $this->getValue(); 199 } 200 201 // make sure max one file is present and it is not too big 202 if (!is_null($draftitemid)) { 203 $fs = get_file_storage(); 204 $usercontext = context_user::instance($USER->id); 205 if ($files = $fs->get_area_files($usercontext->id, 'user', 'draft', $draftitemid, 'id DESC', false)) { 206 $file = array_shift($files); 207 if ($this->_options['maxbytes'] 208 and $this->_options['maxbytes'] !== USER_CAN_IGNORE_FILE_SIZE_LIMITS 209 and $file->get_filesize() > $this->_options['maxbytes']) { 210 211 // bad luck, somebody tries to sneak in oversized file 212 $file->delete(); 213 } 214 foreach ($files as $file) { 215 // only one file expected 216 $file->delete(); 217 } 218 } 219 } 220 221 return $this->_prepareValue($draftitemid, true); 222 } 223 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Aug 11 10:00:09 2016 | Cross-referenced by PHPXref 0.7.1 |