"MDL-23894 fixed user quota limit"
[moodle.git] / repository / upload / lib.php
1 <?php
3 // This file is part of Moodle - http://moodle.org/
4 //
5 // Moodle is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // Moodle is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
18 /**
19  * A repository plugin to allow user uploading files
20  *
21  * @since 2.0
22  * @package moodlecore
23  * @subpackage repository
24  * @copyright 2009 Dongsheng Cai
25  * @author Dongsheng Cai <dongsheng@moodle.com>
26  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
27  */
29 class repository_upload extends repository {
30     private $mimetypes = array();
32     /**
33      * Print a upload form
34      * @return array
35      */
36     public function print_login() {
37         return $this->get_listing();
38     }
40     /**
41      * Process uploaded file
42      * @return array|bool
43      */
44     public function upload() {
45         global $USER, $CFG;
47         $types = optional_param('accepted_types', '*', PARAM_RAW);
48         if ((is_array($types) and in_array('*', $types)) or $types == '*') {
49             $this->mimetypes = '*';
50         } else {
51             foreach ($types as $type) {
52                 $this->mimetypes[] = mimeinfo('type', $type);
53             }
54         }
56         $record = new stdclass;
57         $record->filearea = 'draft';
58         $record->component = 'user';
59         $record->filepath = optional_param('savepath', '/', PARAM_PATH);
60         $record->itemid   = optional_param('itemid', 0, PARAM_INT);
61         $record->license  = optional_param('license', $CFG->sitedefaultlicense, PARAM_TEXT);
62         $record->author   = optional_param('author', '', PARAM_TEXT);
64         $context = get_context_instance(CONTEXT_USER, $USER->id);
65         $elname = 'repo_upload_file';
67         $fs = get_file_storage();
68         $sm = get_string_manager();
70         if ($record->filepath !== '/') {
71             $record->filepath = file_correct_filepath($record->filepath);
72         }
74         if (!isset($_FILES[$elname])) {
75             throw new moodle_exception('nofile');
76         }
78         if (!empty($_FILES[$elname]['error'])) {
79             throw new moodle_exception('maxbytes');
80         }
82         if (empty($record->filename)) {
83             $record->filename = clean_param($_FILES[$elname]['name'], PARAM_FILE);
84         }
86         if ($this->mimetypes != '*') {
87             // check filetype
88             $filemimetype = mimeinfo('type', $_FILES[$elname]['name']);
89             if (!in_array($filemimetype, $this->mimetypes)) {
90                 if ($sm->string_exists($filemimetype, 'mimetypes')) {
91                     $filemimetype = get_string($filemimetype, 'mimetypes');
92                 }
93                 throw new moodle_exception('invalidfiletype', 'repository', '', $filemimetype);
94             }
95         }
97         if (empty($record->itemid)) {
98             $record->itemid = 0;
99         }
101         if ($file = $fs->get_file($context->id, $record->component, $record->filearea, $record->itemid, $record->filepath, $record->filename)) {
102             return array(
103                 'url'=>moodle_url::make_draftfile_url($file->get_itemid(), $file->get_filepath(), $file->get_filename())->out(),
104                 'id'=>$file->get_itemid(),
105                 'file'=>$file->get_filename()
106             );
107         }
109         $record->contextid = $context->id;
110         $record->userid    = $USER->id;
111         $record->source    = '';
113         $stored_file = $fs->create_file_from_pathname($record, $_FILES[$elname]['tmp_name']);
115         return array(
116             'url'=>moodle_url::make_draftfile_url($record->itemid, $record->filepath, $record->filename)->out(),
117             'id'=>$record->itemid,
118             'file'=>$record->filename);
119     }
121     /**
122      * Return a upload form
123      * @return array
124      */
125     public function get_listing() {
126         global $CFG;
127         $ret = array();
128         $ret['nologin']  = true;
129         $ret['nosearch'] = true;
130         $ret['norefresh'] = true;
131         $ret['list'] = array();
132         $ret['dynload'] = false;
133         $ret['upload'] = array('label'=>get_string('attachment', 'repository'), 'id'=>'repo-form');
134         return $ret;
135     }
137     /**
138      * supported return types
139      * @return int
140      */
141     public function supported_returntypes() {
142         return FILE_INTERNAL;
143     }
145     /**
146      * Upload file to local filesystem pool
147      * @param string $elname name of element
148      * @param string $filearea
149      * @param string $filepath
150      * @param string $filename - use specified filename, if not specified name of uploaded file used
151      * @param bool $override override file if exists
152      * @return mixed stored_file object or false if error; may throw exception if duplicate found
153      */
154     public function upload_to_filepool($elname, $record, $override = true) {
155     }