r1138: Changed array casting to be is_array()
[bugdar.git] / editreport.php
1 <?php
2 /*=====================================================================*\
3 || ###################################################################
4 || # Bugdar [#]version[#]
5 || # Copyright ©2002-[#]year[#] Blue Static
6 || #
7 || # This program is free software; you can redistribute it and/or modify
8 || # it under the terms of the GNU General Public License as published by
9 || # the Free Software Foundation; version [#]gpl[#] of the License.
10 || #
11 || # This program is distributed in the hope that it will be useful, but
12 || # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 || # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 || # more details.
15 || #
16 || # You should have received a copy of the GNU General Public License along
17 || # with this program; if not, write to the Free Software Foundation, Inc.,
18 || # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
19 || ###################################################################
20 \*=====================================================================*/
21
22 define('SVN', '$Id$');
23
24 $focus['showreport'] = 'focus';
25
26 require_once('./global.php');
27 require_once('./includes/functions_product.php');
28 require_once('./includes/class_notification.php');
29 require_once('./includes/api_bug.php');
30 require_once('./includes/api_comment.php');
31
32 require_once('./includes/class_api_error.php');
33 APIError(array(new API_Error_Handler($message), 'user_cumulative'));
34
35 $bug = $db->query_first("
36 SELECT bugvaluefill.*, bug.*, user.email, user.displayname, user.showemail
37 FROM " . TABLE_PREFIX . "bug AS bug
38 LEFT JOIN " . TABLE_PREFIX . "user AS user
39 ON (bug.userid = user.userid)
40 LEFT JOIN " . TABLE_PREFIX . "bugvaluefill AS bugvaluefill
41 ON (bug.bugid = bugvaluefill.bugid)
42 WHERE bug.bugid = " . $bugsys->input_clean('bugid', TYPE_UINT)
43 );
44
45 if (!$bug)
46 {
47 $message->error($lang->getlex('error_invalid_id'));
48 }
49
50 if (!check_bug_permissions($bug))
51 {
52 $message->error_permission();
53 }
54
55 // setup logging
56 require_once('./includes/class_logging.php');
57 $log = new Logging;
58 $log->set_bugid($bug['bugid']);
59
60 $bugfields = array(
61 'duplicateof',
62 'dependency',
63 'hidden',
64 'summary',
65 'status',
66 'severity',
67 'priority',
68 'version',
69 'assignedto' => 'assignto',
70 'resolution',
71 'product',
72 'component'
73 );
74
75 $notif = new NotificationCenter;
76
77 $bugapi = new BugAPI($bugsys);
78 $bugapi->set('bugid', $bugsys->in['bugid']);
79 $bugapi->set_condition();
80 $bugapi->dorelations = array();
81 $bugapi->fetch();
82
83 // ###################################################################
84
85 if ($_POST['do'] == 'kill')
86 {
87 if (!can_perform('candeletedata', $bug['product']))
88 {
89 $message->error_permission();
90 }
91
92 $bugapi->delete();
93
94 $message->redirect(_('The entire bug has been deleted.'), 'index.php');
95 }
96
97 // ###################################################################
98
99 if ($_REQUEST['do'] == 'delete')
100 {
101 if (!can_perform('candeletedata', $bug['product']))
102 {
103 $message->error_permission();
104 }
105
106 $message->confirm(_('Are you sure you want to delete this bug? Doing so will <strong>destroy</strong> all associated data, including comments, attachments, and votes. We strongly recommend only deleting span records and nothing else as users may wish to go back and look at any bug to check its status.'), 'editreport.php', 'kill', _('Delete Bug Permanently'), 'showreport.php?bugid=' . $bug['bugid'], array('bugid' => $bug['bugid']));
107 }
108
109 // ###################################################################
110
111 if ($_POST['do'] == 'update')
112 {
113 if (!((can_perform('caneditown', $bug['product']) AND $bugsys->userinfo['userid'] == $bug['userid']) OR (can_perform('caneditother', $bug['product']) AND $bugsys->userinfo['userid'] != $bug['userid'])) AND !can_perform('canpostcomments', $bug['product']))
114 {
115 $message->error_permission();
116 }
117
118 $log->add_data(true, $bugapi->objdata, $bugfields);
119
120 // -------------------------------------------------------------------
121 // handle autoaction
122 $autoaction = $db->query_first("SELECT * FROM " . TABLE_PREFIX . "autoaction WHERE actionid = " . $bugsys->input_clean('autoaction', TYPE_UINT));
123 if ($autoaction)
124 {
125 $autoaction['fields'] = unserialize($autoaction['fieldchanges']);
126
127 if (is_array($autoaction['fields']['builtin']))
128 {
129 foreach ($autoaction['fields']['builtin'] AS $field => $value)
130 {
131 $bugsys->in["$field"] = $value;
132 }
133 }
134
135 if (is_array($autoaction['fields']['custom']))
136 {
137 foreach ($autoaction['fields']['custom'] AS $field => $value)
138 {
139 $bugsys->in["field$field"] = $value;
140 }
141 }
142 }
143
144 // -------------------------------------------------------------------
145 // do update stuff
146 $pcv = parse_pcv_select($bugsys->in['pcv_select'], true);
147
148 $dependencies = preg_split('#([^0-9].*?)#', $bugsys->in['dependency'], -1, PREG_SPLIT_NO_EMPTY);
149 $dependencies = ((sizeof($dependencies) < 1) ? '' : implode(', ', $dependencies));
150
151 $bugapi->set('summary', $bugsys->in['summary']);
152 $bugapi->set('severity', $bugsys->in['severity']);
153 $bugapi->set('duplicateof', $bugsys->in['duplicateof']);
154 $bugapi->set('dependency', $dependencies);
155 $bugapi->set('product', $pcv['product']);
156 $bugapi->set('component', $pcv['component']);
157 $bugapi->set('version', $pcv['version']);
158 $bugapi->set('hidden', $bugsys->in['hidden']);
159
160 if (can_perform('canchangestatus', $bug['product']))
161 {
162 $bugapi->set('priority', $bugsys->in['priority']);
163 $bugapi->set('status', $bugsys->in['status']);
164 $bugapi->set('resolution', $bugsys->in['resolution']);
165 }
166 if (can_perform('canassign', $bug['product']))
167 {
168 $bugapi->set('assignedto', $bugsys->in['assignedto']);
169 }
170
171 $notif->set_bug_data($bugapi->objdata, $bugapi->values);
172
173 // -------------------------------------------------------------------
174 // process comment stuff
175 if ($bugsys->in['comment'])
176 {
177 if (!empty($bugsys->in['comment']) AND $autoaction['comment'])
178 {
179 $commenttext = $bugsys->in['comment'] . "\n\n" . _('--------------- AUTOMATIC RESPONSE ---------------') . "\n" . $autoaction['comment'];
180 }
181 else if (empty($bugsys->in['comment']) AND $autoaction['comment'])
182 {
183 $commenttext = $autoaction['comment'];
184 }
185 else
186 {
187 $commenttext = $bugsys->in['comment'];
188 }
189
190 $comment = new CommentAPI($bugsys);
191 $comment->set('bugid', $bugsys->in['bugid']);
192 $comment->set('userid', $bugsys->userinfo['userid']);
193 $comment->set('comment', $commenttext);
194 $comment->insert();
195
196 $notif->send_new_comment_notice($comment->values);
197
198 $bugapi->set('lastposttime', $comment->values['dateline']);
199 $bugapi->set('lastpostby', $bugsys->userinfo['userid']);
200 $bugapi->set('lastpostbyname', $bugsys->userinfo['displayname']);
201 $bugapi->set('hiddenlastposttime', $comment->values['dateline']);
202 $bugapi->set('hiddenlastpostby', $bugsys->userinfo['userid']);
203 $bugapi->set('hiddenlastpostbyname', $bugsys->userinfo['displayname']);
204
205 if (!((can_perform('caneditown', $bug['product']) AND $bugsys->userinfo['userid'] == $bug['userid']) OR (can_perform('caneditother', $bug['product']) AND $bugsys->userinfo['userid'] != $bug['userid'])))
206 {
207 $bugapi->update();
208 $message->redirect(_('Your reply has been added to the comment list.'), "showreport.php?bugid=$bug[bugid]");
209 }
210 }
211
212 // -------------------------------------------------------------------
213 // handle logging and perform updates
214
215 if ($fields = $db->query_first("SELECT * FROM " . TABLE_PREFIX . "bugvaluefill WHERE bugid = $bug[bugid]"))
216 {
217 $log->add_data(true, $fields, array('bugid'), true, 'custom');
218 }
219
220 $log->add_data(false, $bugapi->values, $bugfields);
221
222 process_custom_fields($bug['bugid']);
223
224 $bugapi->update();
225
226 // -------------------------------------------------------------------
227 // do diff history
228
229 $fieldsnew = (array)$db->query_first("SELECT * FROM " . TABLE_PREFIX . "bugvaluefill WHERE bugid = $bug[bugid]");
230 $log->add_data(false, $fieldsnew, array('bugid'), true, 'custom');
231
232 $log->update_history();
233
234 $notif->send_bug_changes_notice($fields, $fieldsnew);
235
236 $notif->finalize();
237
238 $message->redirect(_('Your changes to the bug have been saved.'), "showreport.php?bugid=$bug[bugid]");
239 }
240
241 /*=====================================================================*\
242 || ###################################################################
243 || # $HeadURL$
244 || # $Id$
245 || ###################################################################
246 \*=====================================================================*/
247 ?>