5 * Copyright 2010 (c) FusionForge Team
6 * Copyright 2010 (c) Franck Villaume - Capgemini
7 * http://fusionforge.org
9 * This file is part of FusionForge. FusionForge is free software;
10 * you can redistribute it and/or modify it under the terms of the
11 * GNU General Public License as published by the Free Software
12 * Foundation; either version 2 of the Licence, or (at your option)
15 * FusionForge is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License along
21 * with FusionForge; if not, write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26 // Create an extra field
28 if (getStringFromRequest('add_extrafield')) {
29 $name = getStringFromRequest('name');
30 $field_type = getStringFromRequest('field_type');
31 $attribute1 = getStringFromRequest('attribute1');
32 $attribute2 = getStringFromRequest('attribute2');
33 $is_required = getStringFromRequest('is_required');
34 $alias = getStringFromRequest('alias');
36 $ab = new ArtifactExtraField($ath);
38 if (!$ab || !is_object($ab)) {
39 $error_msg .= _('Unable to create ArtifactExtraField Object');
40 // } elseif ($ab->isError())
41 // $error_msg .= $ab->getErrorMessage();
43 if (!$ab->create($name,$field_type,$attribute1,$attribute2,$is_required,$alias)) {
44 $error_msg .= _('Error inserting a custom field').': '.$ab->getErrorMessage();
47 $feedback .= _('Extra field inserted');
51 // Delete an extra field and its contents
53 } elseif (getStringFromRequest('deleteextrafield')) {
54 $id = getStringFromRequest('id');
55 $ab = new ArtifactExtraField($ath,$id);
57 if (!$ab || !is_object($ab)) {
58 $error_msg .= _('Unable to create ArtifactExtraField Object');
59 } elseif ($ab->isError()) {
60 $error_msg .= $ab->getErrorMessage();
62 $sure = getStringFromRequest('sure');
63 $really_sure = getStringFromRequest('really_sure');
64 if (!$ab->delete($sure,$really_sure)) {
65 $error_msg .= $ab->getErrorMessage();
67 $browse_list = $ath->getBrowseList();
68 $arr = explode(',', $browse_list);
69 $idx = array_search($id, $arr);
71 array_splice($arr, $idx, 1);
73 $ath->setBrowseList(join(',', $arr));
74 $feedback .= _('Custom Field Deleted');
75 $deleteextrafield=false;
76 session_redirect('/tracker/admin/?group_id='.$group_id.'&atid='.$atid.'&add_extrafield=1&feedback='.urlencode($feedback));
81 // Add an element to an extra field
83 } elseif (getStringFromRequest('add_opt')) {
84 $boxid = getStringFromRequest('boxid');
85 $ab = new ArtifactExtraField($ath,$boxid);
86 if (!$ab || !is_object($ab)) {
87 $error_msg .= _('Unable to create ArtifactExtraField Object');
88 } elseif ($ab->isError()) {
89 $error_msg .= $ab->getErrorMessage();
91 $ao = new ArtifactExtraFieldElement($ab);
92 if (!$ao || !is_object($ao)) {
93 $error_msg .= 'Unable to create ArtifactExtraFieldElement Object';
94 // } elseif ($ao->isError())
95 // $error_msg .= $ao->getErrorMessage();
97 $name = getStringFromRequest('name');
98 $status_id = getIntFromRequest('status_id');
99 if (!$ao->create($name,$status_id)) {
100 $error_msg .= _('Error inserting an element').': '.$ao->getErrorMessage();
103 $feedback .= _('Element inserted');
109 // Add a canned response
111 } elseif (getStringFromRequest('add_canned')) {
112 $title = getStringFromRequest('title');
113 $body = getStringFromRequest('body');
115 $acr = new ArtifactCanned($ath);
116 if (!$acr || !is_object($acr)) {
117 $error_msg .= _('Unable to create ArtifactCanned Object');
118 // } elseif ($acr->isError()) {
119 // $error_msg .= $acr->getErrorMessage();
121 if (!$acr->create($title,$body)) {
122 $error_msg .= _('Error inserting').' : '.$acr->getErrorMessage();
125 $feedback .= _('Canned Response Inserted');
130 // Update a canned response
132 } elseif (getStringFromRequest('update_canned')) {
133 $id = getStringFromRequest('id');
134 $title = getStringFromRequest('title');
135 $body = getStringFromRequest('body');
137 $acr = new ArtifactCanned($ath,$id);
138 if (!$acr || !is_object($acr)) {
139 $error_msg .= _('Unable to create ArtifactCanned Object');
140 } elseif ($acr->isError()) {
141 $error_msg .= $acr->getErrorMessage();
143 if (!$acr->update($title,$body)) {
144 $error_msg .= _('Error updating').' : '.$acr->getErrorMessage();
147 $feedback .= _('Canned Response Updated');
148 $next = 'add_canned';
155 } elseif (getStringFromRequest('copy_opt')) {
156 $copyid = getStringFromRequest('copyid');
157 $selectid = getStringFromRequest('selectid');
159 $copy_rows=count($copyid);
160 if ($copy_rows > 0) {
162 // create an object for each selected type
164 $result = db_query_params ('SELECT * FROM artifact_extra_field_list
165 WHERE extra_field_id=$1',
167 $typeid = db_result($result,0,'group_artifact_id');
168 $dest_tracker =& artifactType_get_object($typeid);
169 if (!$dest_tracker || !is_object($dest_tracker)) {
170 exit_error(_('ArtifactType could not be created'),'tracker');
171 } elseif ($dest_tracker->isError()) {
172 exit_error($dest_tracker->getErrorMessage(),'tracker');
175 // Copy elements into a field (box) for each tracker selected
177 $feedback .= _('Copy into Tracker: ');
178 $feedback .= $dest_tracker->getName();
179 $aef =new ArtifactExtraField($dest_tracker,$selectid);
180 if (!$aef || !is_object($aef)) {
181 $error_msg .= _('Unable to create ArtifactExtraField Object');
182 } elseif ($aef->isError()) {
183 $error_msg .= $aefe->getErrorMessage();
185 $feedback .= ', Box: ';
186 $feedback .= $aef->getName();
187 $feedback .= '<br />';
189 for ($k=0; $k < $copy_rows; $k++) {
190 $aefe = new ArtifactExtraFieldElement($aef);
191 if (!$aefe || !is_object($aefe)) {
192 $error_msg .= 'Unable to create ArtifactExtraFieldElement Object';
193 } elseif ($aefe->isError()) {
194 $error_msg .= $aefe->getErrorMessage();
196 $name=$ath->getElementName($copyid[$k]);
197 $status=$ath->getElementStatusID($copyid[$k]);
198 if (!$aefe->create($name,$status)) {
199 $error_msg .= _('Error inserting an element').': '.$aefe->getErrorMessage();
202 $feedback .= '- Copied choice:'. $name;
208 $feedback .= '<br />';
211 // Update an extra field
213 } elseif (getStringFromRequest('update_box')) {
214 $id = getStringFromRequest('id');
215 $name = getStringFromRequest('name');
216 $attribute1 = getStringFromRequest('attribute1');
217 $attribute2 = getStringFromRequest('attribute2');
218 $is_required = getStringFromRequest('is_required');
219 $alias = getStringFromRequest('alias');
221 $ac = new ArtifactExtraField($ath,$id);
222 if (!$ac || !is_object($ac)) {
223 $error_msg .= _('Unable to create ArtifactExtraField Object');
224 } elseif ($ac->isError()) {
225 $error_msg .= $ac->getErrorMessage();
227 if (!$ac->update($name,$attribute1,$attribute2,$is_required,$alias)) {
228 $error_msg .= _('Error updating a custom field').' : '.$ac->getErrorMessage();
231 $feedback .= _('Custom Field updated');
232 $next = 'add_extrafield';
239 } elseif (getStringFromRequest('update_opt')) {
240 $id = getStringFromRequest('id');
241 $name = getStringFromRequest('name');
242 $boxid = getStringFromRequest('boxid');
244 $ac = new ArtifactExtraField($ath,$boxid);
245 if (!$ac || !is_object($ac)) {
246 $error_msg .= _('Unable to create ArtifactExtraField Object');
247 } elseif ($ac->isError()) {
248 $error_msg .= $ac->getErrorMessage();
250 $ao = new ArtifactExtraFieldElement($ac,$id);
251 if (!$ao || !is_object($ao)) {
252 $error_msg .= _('Unable to create ArtifactExtraFieldElement Object');
253 } elseif ($ao->isError()) {
254 $error_msg .= $ao->getErrorMessage();
256 $name = getStringFromRequest('name');
257 $status_id = getIntFromRequest('status_id');
258 if (!$ao->update($name,$status_id)) {
259 $error_msg .= _('Error updating a custom field').' : '.$ao->getErrorMessage();
262 $feedback .= _('Element updated');
263 $next = 'add_extrafield';
269 // Clone a tracker's elements to this tracker
271 } elseif (getStringFromRequest('clone_tracker')) {
272 $clone_id = getIntFromRequest('clone_id');
275 exit_missing_param('',array(_('Clone ID')),'tracker');
277 if (!$ath->cloneFieldsFrom($clone_id)) {
278 exit_error(_('Error cloning fields: ').$ath->getErrorMessage(),'tracker');
280 $feedback .= _('Successfully Cloned Tracker Fields ');
287 } elseif (getStringFromRequest('update_type')) {
288 $name = getStringFromRequest('name');
289 $description = getStringFromRequest('description');
290 $email_all = getStringFromRequest('email_all');
291 $email_address = getStringFromRequest('email_address');
292 $due_period = getStringFromRequest('due_period');
293 $status_timeout = getStringFromRequest('status_timeout');
294 $use_resolution = getStringFromRequest('use_resolution');
295 $submit_instructions = getStringFromRequest('submit_instructions');
296 $browse_instructions = getStringFromRequest('browse_instructions');
298 if (!$ath->update($name,$description,$email_all,$email_address,
299 $due_period,$status_timeout,$use_resolution,$submit_instructions,$browse_instructions)) {
300 $error_msg .= _('Error updating').' : '.$ath->getErrorMessage();
303 $feedback .= _('Tracker Updated');
307 // Update the browse list of a tracker
309 } elseif (getStringFromRequest('customize_list')) {
310 $browse_fields = getArrayFromRequest('browse_fields');
311 foreach ($browse_fields as $name => $pos) {
313 $list_fields[$pos][] = $name;
316 $browse_fields = array();
317 foreach ($list_fields as $pos => $list_name) {
319 foreach ($list_name as $name)
320 $browse_fields[] = $name;
322 $browse_fields = join(',', $browse_fields);
323 if (!$ath->setBrowseList($browse_fields)) {
324 $error_msg .= _('Error updating').' : '.$ath->getErrorMessage();
327 $feedback .= _('Tracker Updated');
333 } elseif (getStringFromRequest('delete')) {
334 $sure = getStringFromRequest('sure');
335 $really_sure = getStringFromRequest('really_sure');
337 if (!$ath->delete($sure,$really_sure)) {
338 $error_msg .= _('Error updating').' : '.$ath->getErrorMessage();
340 session_redirect('/tracker/admin/?group_id='.$group_id.'&tracker_deleted=1');
346 } elseif (getStringFromRequest('uploadtemplate')) {
348 $input_file = getUploadedFile('input_file');
349 $size = $input_file['size'];
351 if (!util_check_fileupload($input_file['tmp_name'])) {
352 echo ('Invalid filename :'.$input_file['tmp_name']);
355 $input_data = addslashes(fread(fopen($input_file['tmp_name'], 'r'), $size));
357 db_query_params ('UPDATE artifact_group_list SET custom_renderer=$1 WHERE group_artifact_id=$2',
361 $feedback .= _('Renderer Uploaded');
363 $error_msg .= _('Renderer File empty');
366 // Up or down elements
368 } elseif (getStringFromRequest('updownorder_opt')) {
369 $boxid = getStringFromRequest('boxid');
370 $id = getIntFromRequest('id');
371 $new_pos = getStringFromRequest('new_pos');
372 $ac = new ArtifactExtraField($ath,$boxid);
373 if (!$ac || !is_object($ac)) {
374 $error_msg .= _('Unable to create ArtifactExtraField Object');
375 } elseif ($ac->isError()) {
376 $error_msg .= $ac->getErrorMessage();
378 if (!$ac->reorderValues($id, $new_pos)) {
379 $error_msg .= _('Error updating a custom field').' : '.$ac->getErrorMessage();
382 $feedback .= _('Tracker Updated');
387 // Change order of elements
389 } elseif (getStringFromRequest('post_changes_order')) {
390 $boxid = getStringFromRequest('boxid');
391 $order = getArrayFromRequest('order');
392 $ac = new ArtifactExtraField($ath,$boxid);
393 if (!$ac || !is_object($ac)) {
394 $error_msg .= _('Unable to create ArtifactExtraField Object');
395 } elseif ($ac->isError()) {
396 $error_msg .= $ac->getErrorMessage();
399 foreach ($order as $id => $new_pos) {
400 if ($new_pos == '') continue;
401 if (!$ac->reorderValues($id, $new_pos)) {
402 $error_msg .= _('Error updating a custom field').' : '.$ac->getErrorMessage();
411 $feedback .= _('Tracker Updated');
413 } elseif (getStringFromRequest('post_changes_alphaorder')) {
414 $boxid = getStringFromRequest('boxid');
415 $ac = new ArtifactExtraField($ath,$boxid);
416 if (!$ac || !is_object($ac)) {
417 $error_msg .= _('Unable to create ArtifactExtraField Object');
418 } elseif ($ac->isError()) {
419 $error_msg .= $ac->getErrorMessage();
421 if (!$ac->alphaorderValues($id)) {
422 $error_msg .= _('Error updating a custom field').' : '.$ac->getErrorMessage();
425 $feedback .= _('Tracker Updated');
429 // Configure workflow
431 } elseif (getStringFromRequest('workflow')) {
432 require_once $gfcommon.'tracker/ArtifactWorkflow.class.php';
433 $field_id = getIntFromRequest('field_id');
434 $wk = getArrayFromRequest('wk');
435 $atw = new ArtifactWorkflow($ath, $field_id);
437 if (!isset($wk[100])) {
438 $error_msg .= _('ERROR: Initial values not saved, no initial state given.').'<br />';
440 // Save values for the submit form (from=100).
441 $atw->saveNextNodes('100', array_keys($wk[100]));
442 $feedback .= _('Initial values saved.').'<br />';
445 $elearray = $ath->getExtraFieldElements($field_id);
446 foreach ($elearray as $e) {
447 $from = $e['element_id'];
448 $next = isset($wk[$from]) ? array_keys($wk[$from]) : array();
449 $atw->saveNextNodes($from, array_keys($wk[$from]));
451 $feedback .= _('Workflow saved');
452 } elseif (getStringFromRequest('workflow_roles')) {
453 require_once $gfcommon.'tracker/ArtifactWorkflow.class.php';
454 $field_id = getIntFromRequest('field_id');
455 $from = getIntFromRequest('from');
456 $next = getIntFromRequest('next');
457 $role = array_keys(getArrayFromRequest('role'));
458 $atw = new ArtifactWorkflow($ath, $field_id);
459 $atw->saveAllowedRoles($from, $next, $role);
460 $feedback .= _('Workflow saved');
461 } elseif (getStringFromRequest('delete_opt')) {
462 $sure = getStringFromRequest('sure');
463 $really_sure = getStringFromRequest('really_sure');
465 $id = getStringFromRequest('id');
466 $boxid = getStringFromRequest('boxid');
467 $ab = new ArtifactExtraField($ath,$boxid);
468 if (!$ab || !is_object($ab)) {
469 $error_msg .= _('Unable to create ArtifactExtraField Object');
470 } elseif ($ab->isError()) {
471 $error_msg .= $ab->getErrorMessage();
473 $ao = new ArtifactExtraFieldElement($ab,$id);
474 if (!$ao || !is_object($ao)) {
475 $error_msg .= _('Unable to create ArtifactExtraFieldElement Object');
477 if (!$sure || !$really_sure || !$ao->delete()) {
478 $error_msg .= _('Error deleting an element').': '.$ao->getErrorMessage();
481 $feedback .= _('Element deleted');
482 $next = 'add_extrafield';