314ebc9903e676ed014362c0fcb22a7c2b39baaa
[moodle.git] / lib / uploadlib.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  * uploadlib.php - This class handles all aspects of fileuploading
20  *
21  * @package    core
22  * @subpackage file
23  * @copyright  1999 onwards Martin Dougiamas  {@link http://moodle.com}
24  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
25  */
27 defined('MOODLE_INTERNAL') || die();
29 /**
30  * This class handles all aspects of fileuploading
31  *
32  * @deprecated since 2.7 - use new file pickers instead
33  *
34  * @package   moodlecore
35  * @copyright 1999 onwards Martin Dougiamas  {@link http://moodle.com}
36  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
37  */
38 class upload_manager {
40     /**
41      * Constructor, sets up configuration stuff so we know how to act.
42      *
43      * Note: destination not taken as parameter as some modules want to use the insertid in the path and we need to check the other stuff first.
44      *
45      * @deprecated since 2.7 - use new file pickers instead
46      *
47      */
48     function __construct($inputname='', $deleteothers=false, $handlecollisions=false, $course=null, $recoverifmultiple=false, $modbytes=0, $silent=false, $allownull=false, $allownullmultiple=true) {
49         throw new coding_exception('upload_manager class can not be used any more, please use file picker instead');
50     }
51 }
53 /**************************************************************************************
54 THESE FUNCTIONS ARE OUTSIDE THE CLASS BECAUSE THEY NEED TO BE CALLED FROM OTHER PLACES.
55 FOR EXAMPLE CLAM_HANDLE_INFECTED_FILE AND CLAM_REPLACE_INFECTED_FILE USED FROM CRON
56 UPLOAD_PRINT_FORM_FRAGMENT DOESN'T REALLY BELONG IN THE CLASS BUT CERTAINLY IN THIS FILE
57 ***************************************************************************************/
59 /**
60  * Deals with an infected file - either moves it to a quarantinedir
61  * (specified in CFG->quarantinedir) or deletes it.
62  *
63  * If moving it fails, it deletes it.
64  *
65  * @deprecated since 2.7 - to be removed together with the upload_manager above
66  *
67  */
68 function clam_handle_infected_file($file, $userid=0, $basiconly=false) {
69     throw new coding_exception('clam_handle_infected_file() can not be used any more, please use file picker instead');
70 }
72 /**
73  * If $CFG->runclamonupload is set, we scan a given file. (called from {@link preprocess_files()})
74  *
75  * @deprecated since 2.7 - to be removed together with the upload_manager above
76  *
77  */
78 function clam_scan_moodle_file(&$file, $course) {
79     throw new coding_exception('clam_scan_moodle_file() can not be used any more, please use file picker instead');
80 }
82 /**
83  * Emails admins about a clam outcome
84  *
85  * @param string $notice The body of the email to be sent.
86  */
87 function clam_message_admins($notice) {
89     $site = get_site();
91     $subject = get_string('clamemailsubject', 'moodle', format_string($site->fullname));
92     $admins = get_admins();
93     foreach ($admins as $admin) {
94         $eventdata = new stdClass();
95         $eventdata->component         = 'moodle';
96         $eventdata->name              = 'errors';
97         $eventdata->userfrom          = get_admin();
98         $eventdata->userto            = $admin;
99         $eventdata->subject           = $subject;
100         $eventdata->fullmessage       = $notice;
101         $eventdata->fullmessageformat = FORMAT_PLAIN;
102         $eventdata->fullmessagehtml   = '';
103         $eventdata->smallmessage      = '';
104         message_send($eventdata);
105     }
108 /**
109  * Returns the string equivalent of a numeric clam error code
110  *
111  * @param int $returncode The numeric error code in question.
112  * @return string The definition of the error code
113  */
114 function get_clam_error_code($returncode) {
115     $returncodes = array();
116     $returncodes[0] = 'No virus found.';
117     $returncodes[1] = 'Virus(es) found.';
118     $returncodes[2] = ' An error occured'; // specific to clamdscan
119     // all after here are specific to clamscan
120     $returncodes[40] = 'Unknown option passed.';
121     $returncodes[50] = 'Database initialization error.';
122     $returncodes[52] = 'Not supported file type.';
123     $returncodes[53] = 'Can\'t open directory.';
124     $returncodes[54] = 'Can\'t open file. (ofm)';
125     $returncodes[55] = 'Error reading file. (ofm)';
126     $returncodes[56] = 'Can\'t stat input file / directory.';
127     $returncodes[57] = 'Can\'t get absolute path name of current working directory.';
128     $returncodes[58] = 'I/O error, please check your filesystem.';
129     $returncodes[59] = 'Can\'t get information about current user from /etc/passwd.';
130     $returncodes[60] = 'Can\'t get information about user \'clamav\' (default name) from /etc/passwd.';
131     $returncodes[61] = 'Can\'t fork.';
132     $returncodes[63] = 'Can\'t create temporary files/directories (check permissions).';
133     $returncodes[64] = 'Can\'t write to temporary directory (please specify another one).';
134     $returncodes[70] = 'Can\'t allocate and clear memory (calloc).';
135     $returncodes[71] = 'Can\'t allocate memory (malloc).';
136     if ($returncodes[$returncode])
137        return $returncodes[$returncode];
138     return get_string('clamunknownerror');