3 * FusionForge Documentation Manager
5 * Copyright 2000, Quentin Cregan/Sourceforge
6 * Copyright 2002-2003, Tim Perdue/GForge, LLC
7 * Copyright 2010-2011, Franck Villaume - Capgemini
8 * Copyright 2011, Roland Mas
9 * Copyright (C) 2011 Alain Peyrat - Alcatel-Lucent
10 * http://fusionforge.org
12 * This file is part of FusionForge. FusionForge is free software;
13 * you can redistribute it and/or modify it under the terms of the
14 * GNU General Public License as published by the Free Software
15 * Foundation; either version 2 of the Licence, or (at your option)
18 * FusionForge is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
23 * You should have received a copy of the GNU General Public License along
24 * with FusionForge; if not, write to the Free Software Foundation, Inc.,
25 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
28 /* please do not add require here : use www/docman/index.php to add require */
29 /* global variables used */
30 global $g; //group object
31 global $group_id; // id of group
34 $doc_group = getIntFromRequest('doc_group');
35 $title = getStringFromRequest('title');
36 $description = getStringFromRequest('description');
37 $file_url = getStringFromRequest('file_url');
38 $uploaded_data = getUploadedFile('uploaded_data');
39 $manual_path = getStringFromRequest('manual_path');
40 $type = getStringFromRequest('type');
41 $name = getStringFromRequest('name');
42 $stateid = getIntFromRequest('stateid');
48 $baseurl = '/docman/?group_id='.$group_id;
49 $redirecturl = $baseurl.'&view=listfile&dirid='.$doc_group;
51 // plugin projects-hierarchy handler
52 $childgroup_id = getIntFromRequest('childgroup_id');
54 $redirecturl .= '&childgroup_id='.$childgroup_id;
55 if (!forge_check_perm('docman', $childgroup_id, 'submit')) {
56 $return_msg = _('Document Manager Action Denied.');
57 session_redirect($redirecturl.'&warning_msg='.urlencode($return_msg));
59 $g = group_get_object($childgroup_id);
62 if (!forge_check_perm('docman', $g->getID(), 'submit')) {
63 $return_msg = _('Document Manager Action Denied.');
64 session_redirect($redirecturl.'&warning_msg='.urlencode($return_msg));
68 session_redirect($baseurl.'&error_msg='.urlencode($error_msg));
71 if (!$doc_group || $doc_group == 100) {
72 //cannot add a doc unless an appropriate group is provided
73 $return_msg = _('No valid Directory was selected.');
74 session_redirect($baseurl.'&error_msg='.urlencode($return_msg));
77 if (!$title || !$description || (!$uploaded_data && !$file_url && (!$editor && !$name))) {
78 $missing_params = array();
80 $missing_params[] = 'title';
83 $missing_params[] = 'description';
85 exit_missing_param($_SERVER['HTTP_REFERER'], $missing_params, 'docman');
88 $d = new Document($g);
90 if (!$d || !is_object($d)) {
91 $return_msg= _('Error getting blank document.');
92 session_redirect($baseurl.'&error_msg='.urlencode($return_msg));
93 } elseif ($d->isError()) {
94 session_redirect($baseurl.'&error_msg='.urlencode($d->getErrorMessage()));
99 $data = getStringFromRequest('details');
100 $uploaded_data_name = $name;
101 $sanitizer = new TextSanitizer();
102 $data = $sanitizer->SanitizeHtml($data);
103 if (strlen($data)<1) {
104 $return_msg = _('Error getting blank document.');
105 session_redirect($baseurl.'&error_msg='.urlencode($return_msg));
107 $uploaded_data_type = 'text/html';
112 $uploaded_data_name = $file_url;
113 $uploaded_data_type = 'URL';
116 case 'httpupload' : {
117 if (!is_uploaded_file($uploaded_data['tmp_name'])) {
118 $return_msg = _('Invalid file name.');
119 session_redirect($baseurl.'&error_msg='.urlencode($return_msg));
121 if (function_exists('finfo_open')) {
122 $finfo = finfo_open(FILEINFO_MIME_TYPE);
123 $uploaded_data_type = finfo_file($finfo, $uploaded_data['tmp_name']);
125 $uploaded_data_type = $uploaded_data['type'];
127 $data = fread(fopen($uploaded_data['tmp_name'], 'r'), $uploaded_data['size']);
129 $uploaded_data_name = $uploaded_data['name'];
132 case 'manualupload' : {
133 if (!forge_get_config('use_manual_uploads')) {
134 $return_msg = _('Manual uploads disabled.');
135 session_redirect($baseurl.'&error_msg='.urlencode($return_msg));
138 $incoming = forge_get_config('groupdir_prefix')."/".$g->getUnixName()."/incoming";
139 $filename = $incoming.'/'.$manual_path;
141 if (!util_is_valid_filename($manual_path) || !is_file($filename)) {
142 $return_msg = _('Invalid file name.');
143 session_redirect($baseurl.'&error_msg='.urlencode($return_msg));
146 if (function_exists('finfo_open')) {
147 $finfo = finfo_open(FILEINFO_MIME_TYPE);
148 $uploaded_data_type = finfo_file($finfo, $filename);
150 $uploaded_data_type = 'application/binary';
152 $stat = stat($filename);
153 $data = fread(fopen($filename, 'r'), $stat['size']);
155 $uploaded_data_name = $manual_path;
159 $return_msg = _('Unknown type submission.');
160 session_redirect($baseurl.'&error_msg='.urlencode($return_msg));
164 if (!$d->create($uploaded_data_name, $uploaded_data_type, $data, $doc_group, $title, $description, $stateid)) {
165 if (forge_check_perm('docman', $group_id, 'approve')) {
166 session_redirect($redirecturl.'&error_msg='.urlencode($d->getErrorMessage()));
168 session_redirect($baseurl.'&error_msg='.urlencode($d->getErrorMessage()));
171 if ($type == 'editor') {
172 //release the cookie for the document contents (should expire at the end of the session anyway)
173 setcookie("gforgecurrentdocdata", "", time() - 3600);
175 if (forge_check_perm('docman', $group_id, 'approve')) {
176 $return_msg = sprintf(_('Document %s submitted successfully.'),$d->getFilename());
177 session_redirect($redirecturl.'&feedback='.urlencode($return_msg));
179 $return_msg = sprintf(_('Document %s has been successfully uploaded and is waiting to be approved.'),$d->getFilename());
180 session_redirect($baseurl.'&feedback='.urlencode($return_msg));