5 * Copyright 1999-2001 (c) VA Linux Systems
6 * Copyright 2010 Roland Mas
7 * Copyright (C) 2011-2012 Alain Peyrat - Alcatel-Lucent
8 * Copyright 2012-2013, Franck Villaume - TrivialDev
10 * This file is part of FusionForge. FusionForge is free software;
11 * you can redistribute it and/or modify it under the terms of the
12 * GNU General Public License as published by the Free Software
13 * Foundation; either version 2 of the Licence, or (at your option)
16 * FusionForge is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License along
22 * with FusionForge; if not, write to the Free Software Foundation, Inc.,
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26 require_once $gfcommon.'tracker/ArtifactFactory.class.php';
27 require_once $gfcommon.'tracker/ArtifactQuery.class.php';
34 // make sure this person has permission to view artifacts
36 session_require_perm ('tracker', $ath->getID(), 'read') ;
38 $query_id = getIntFromRequest('query_id');
39 $start = getIntFromRequest('start');
43 // The browse page can be powered by a pre-saved query
44 // or by select boxes chosen by the user
46 // If there is a $query_id coming from the request OR the pref
47 // was already saved, use the artifact factory that way.
49 // If the query_id = -1, unset the pref and use regular browse boxes
51 if (session_loggedin()) {
52 $u =& session_get_user();
53 if (getStringFromRequest('setpaging')) {
54 /* store paging preferences */
55 $paging = getIntFromRequest('nres');
59 $u->setPreference("paging", $paging);
63 if ($query_id == '-1') {
64 $u->setPreference('art_query'.$ath->getID(),'');
66 $aq = new ArtifactQuery($ath,$query_id);
67 if (!$aq || !is_object($aq)) {
68 exit_error($aq->getErrorMessage(),'tracker');
73 $query_id=$u->getPreference('art_query'.$ath->getID(),'');
75 } elseif ($query_id) {
76 // If user is not logged, then use a cookie to store the current query.
77 if (isset($_COOKIE["GFTrackerQuery"])) {
78 $gf_tracker = unserialize($_COOKIE["GFTrackerQuery"]);
80 $gf_tracker = array();
82 $gf_tracker[$ath->getID()] = $query_id;
83 // Send the query_id as a cookie to save it.
84 setcookie("GFTrackerQuery", serialize($gf_tracker));
85 $_COOKIE["GFTrackerQuery"] = serialize($gf_tracker);
86 } elseif (isset($_COOKIE["GFTrackerQuery"])) {
87 $gf_tracker = unserialize($_COOKIE["GFTrackerQuery"]);
88 $query_id = (int)$gf_tracker[$ath->getID()];
91 $af = new ArtifactFactory($ath);
93 if (!$af || !is_object($af)) {
94 exit_error(_('Could Not Get Factory'),'tracker');
95 } elseif ($af->isError()) {
96 exit_error($af->getErrorMessage(),'tracker');
99 if (!isset($_sort_col)) {
100 /* default sort order: highest priority first */
101 $_sort_col = 'priority';
104 $offset = getStringFromRequest('offset');
105 $_sort_col = getStringFromRequest('_sort_col',$_sort_col);
106 $_sort_ord = getStringFromRequest('_sort_ord',$_sort_ord);
107 $max_rows = getIntFromRequest('max_rows', 25);
108 $set = getStringFromRequest('set');
109 $_assigned_to = getIntFromRequest('_assigned_to');
110 $_status = getIntFromRequest('_status');
111 $_extra_fields = array() ;
112 $aux_extra_fields = array() ;
114 if ($set == 'custom') {
115 /* may be past in next/prev url */
116 $i = $ath->getCustomStatusField();
117 $tmp_extra_fields = getArrayFromRequest('extra_fields');
118 if (isset($tmp_extra_fields[$i])) {
119 $_extra_fields[$i] = $tmp_extra_fields[$i];
123 if (is_array($_extra_fields)){
124 $keys=array_keys($_extra_fields);
125 foreach ($keys as $key) {
126 if ($_extra_fields[$key] != 'Array') {
127 $aux_extra_fields[$key] = $_extra_fields[$key];
131 if (isset($_extra_fields)){
132 $aux_extra_fields = $_extra_fields;
134 $aux_extra_fields = '';
138 $af->setup($offset,$_sort_col,$_sort_ord,$paging,$set,$_assigned_to,$_status,$aux_extra_fields);
140 // These vals are sanitized and/or retrieved from ArtifactFactory stored settings
142 $_sort_col=$af->order_col;
143 $_sort_ord=$af->sort;
144 $_status=$af->status;
145 $_assigned_to=$af->assigned_to;
146 $_extra_fields=$af->extra_fields;
148 $art_arr = $af->getArtifacts();
150 if (!$art_arr && $af->isError()) {
151 exit_error($af->getErrorMessage(),'tracker');
154 //build page title to make bookmarking easier
155 //if a user was selected, add the user_name to the title
157 use_javascript('/tabber/tabber.js');
159 html_use_coolfieldset();
161 $ath->header(array('atid'=>$ath->getID(), 'title'=>$ath->getName()));
165 * Build the powerful browsing options pop-up boxes
170 // creating a custom technician box which includes "any" and "unassigned"
172 $engine = RBACEngine::getInstance () ;
173 $techs = $engine->getUsersByAllowedAction ('tracker', $ath->getID(), 'tech') ;
175 $tech_id_arr = array () ;
176 $tech_name_arr = array () ;
178 foreach ($techs as $tech) {
179 $tech_id_arr[] = $tech->getID() ;
180 $tech_name_arr[] = $tech->getRealName() ;
182 $tech_id_arr[]='0'; //this will be the 'any' row
183 $tech_name_arr[]=_('Any');
185 if (is_array($_assigned_to)) {
188 $tech_box=html_build_select_box_from_arrays ($tech_id_arr,$tech_name_arr,'_assigned_to',$_assigned_to,true,_('Unassigned'));
191 // custom order by arrays to build a pop-up box
193 $order_name_arr=array();
194 $order_name_arr[]=_('Id');
195 $order_name_arr[]=_('Priority');
196 $order_name_arr[]=_('Summary');
197 $order_name_arr[]=_('Open Date');
198 $order_name_arr[]=_('Last Modified Date');
199 $order_name_arr[]=_('Close Date');
200 $order_name_arr[]=_('Submitter');
201 $order_name_arr[]=_('Assignee');
204 $order_arr[]='artifact_id';
205 $order_arr[]='priority';
206 $order_arr[]='summary';
207 $order_arr[]='open_date';
208 $order_arr[]='last_modified_date';
209 $order_arr[]='close_date';
210 $order_arr[]='submitted_by';
211 $order_arr[]='assigned_to';
214 // custom sort arrays to build pop-up box
216 $sort_name_arr=array();
217 $sort_name_arr[]=_('Ascending');
218 $sort_name_arr[]=_('Descending');
225 // custom changed arrays to build pop-up box
227 $changed_name_arr=array();
228 $changed_name_arr[]=_('Any changes');
229 $changed_name_arr[]=_('Last 24 h');
230 $changed_name_arr[]=_('Last 7 days');
231 $changed_name_arr[]=_('Last 2 weeks');
232 $changed_name_arr[]=_('Last month');
234 $changed_arr=array();
235 $changed_arr[]= 0x7fffffff; // Any
236 $changed_arr[]= 3600 * 24; // 24 hour
237 $changed_arr[]= 3600 * 24 * 7; // 1 week
238 $changed_arr[]= 3600 * 24 * 14;// 2 week
239 $changed_arr[]= 3600 * 24 * 30;// 1 month
241 if ($art_arr && ($art_cnt = count($art_arr)) > 0) {
242 $focus = getIntFromRequest('focus');
249 if (session_loggedin()) {
250 /* logged in users get configurable paging */
251 $paging = $u->getPreference("paging");
252 echo '<form action="'. getStringFromServer('PHP_SELF') .'?group_id='.$group_id.'&atid='.$ath->getID().'&start='.
253 $start.'" method="post">'."\n";
260 for ($i = 0; $i < $art_cnt; ++$i)
261 if ($art_arr[$i]->getID() == $focus) {
266 $max = ($art_cnt > ($start + $paging)) ? ($start + $paging) : $art_cnt;
271 printf('<p>' . _('Displaying results %1$d‒%2$d out of %3$d total.'),
272 $start + 1, $max, $art_cnt);
273 if (session_loggedin()) {
274 printf(' ' . _('Displaying %2$s results.') . "\n\t<input " .
275 'type="submit" name="setpaging" value="%1$s" />' .
276 "\n</p>\n</form>\n", _('Change'),
277 html_build_select_box_from_array(array(
278 '10', '25', '50', '100', '1000'), 'nres', $paging, 1));
285 * Show the free-form text submitted by the project admin
287 echo $ath->renderBrowseInstructions();
290 // statuses can be custom in GForge 4.5+
292 if ($ath->usesCustomStatuses()) {
293 $aux_extra_fields = array();
294 if (is_array($_extra_fields)){
295 $keys=array_keys($_extra_fields);
296 foreach ($keys as $key) {
297 if (!is_array($_extra_fields[$key])) {
298 $aux_extra_fields[$key] = $_extra_fields[$key];
302 $aux_extra_fields = $_extra_fields;
304 $checked_status = isset($aux_extra_fields[$ath->getCustomStatusField()]) ? $aux_extra_fields[$ath->getCustomStatusField()] : '';
305 $status_box=$ath->renderSelect ($ath->getCustomStatusField(), $checked_status, false, '', true, _('Any'));
307 if (is_array($_status)) {
310 $status_box = $ath->statusBox('_status',$_status,true,_('Any'));
314 $proj_name = $group->getUnixName();
315 $proj_url = util_make_url_g($group->getUnixName(),$group_id);
316 // the tracker's URIs are constructed in order to support addition of an OSLC-CM REST server
317 // inside /tracker/cm/. There each tracker has a URL in the form .../project/PROJ_NAME/atid/ATID
318 $tracker_stdzd_uri = util_make_url('/tracker/cm/project/'. $proj_name .'/atid/'. $ath->getID());
319 print '<div about="'. $tracker_stdzd_uri
320 .'" typeof="sioc:Container">'."\n";
321 print '<span rel="http://www.w3.org/2002/07/owl#sameAs" resource="" />'."\n";
322 print '<span rev="doap:bug-database sioc:space_of" resource="'. $proj_url .'" />'."\n";
323 print "</div>\n"; // end of about
326 <div id="tabber" class="tabber">
327 <div class="tabbertab" title="'._('Advanced queries').'">';
329 if (session_loggedin()) {
330 $res = db_query_params ('SELECT artifact_query_id,query_name, CASE WHEN query_type>0 THEN 1 ELSE 0 END as type
332 WHERE group_artifact_id=$1 AND (user_id=$2 OR query_type>0)
333 ORDER BY type ASC, query_name ASC',
334 array ($ath->getID(),
337 $res = db_query_params ('SELECT artifact_query_id,query_name, CASE WHEN query_type>0 THEN 1 ELSE 0 END as type
339 WHERE group_artifact_id=$1 AND query_type>0
340 ORDER BY type ASC, query_name ASC',
341 array ($ath->getID()));
344 if (db_numrows($res)>0) {
345 echo '<form action="'. getStringFromServer('PHP_SELF') .'" method="get">';
346 echo '<input type="hidden" name="group_id" value="'.$group_id.'" />';
347 echo '<input type="hidden" name="atid" value="'.$ath->getID().'" />';
348 echo '<input type="hidden" name="power_query" value="1" />';
349 echo ' <table class="fullwidth">
353 $optgroup['key'] = 'type';
354 $optgroup['values'][0] = 'Private queries';
355 $optgroup['values'][1] = 'Project queries';
356 echo '<select name="query_id" id="query_id">';
357 echo '<option value="100">' . _('Select One') . '</option>';
359 $selected = $af->getDefaultQuery();
360 while ($row = db_fetch_array($res)) {
361 if ($current != $row['type']) {
364 $label = $row['type'] ? _('Project') : _('Private');
365 echo '<optgroup label="'.$label.'">';
366 $current = $row['type'];
368 echo '<option value="'.$row['artifact_query_id'].'"';
369 if ($row['artifact_query_id'] == $selected)
370 echo ' selected="selected"';
371 echo '>'. $row['query_name'] .'</option>'."\n";
376 <noscript><input type="submit" name="run" value="'._('Power Query').'" /></noscript>
377 <a href="/tracker/?atid='. $ath->getID().'&group_id='.$group_id.'&func=query">'.
378 _('Build Query').'</a>
382 <script type="text/javascript">/* <![CDATA[ */
383 $('#query_id').change(function() {
384 location.href = '<?php echo getStringFromServer('PHP_SELF') .'?group_id='.$group_id.'&atid='.$ath->getID().'&power_query=1&query_id=' ?>'+$('#query_id').val();
390 <a href="/tracker/?atid='. $ath->getID().'&group_id='.$group_id.'&func=query">'._('Build Query').'</a></strong>';
394 <div class="tabbertab'.($af->query_type == 'custom' ? ' tabbertabdefault' : '').'" title="'._('Simple Filtering and Sorting').'">
395 <form action="'. getStringFromServer('PHP_SELF') .'?group_id='.$group_id.'&atid='.$ath->getID().'" method="post">
396 <input type="hidden" name="query_id" value="-1" />
397 <input type="hidden" name="set" value="custom" />
398 <table class="fullwidth">
401 '._('Assignee')._(': '). $tech_box .'
403 <td class="align-center">
404 '._('State')._(': '). $status_box .'
406 <td class="align-right">';
408 // Compute the list of fields which can be sorted.
409 $efarr = $ath->getExtraFields(array(ARTIFACT_EXTRAFIELDTYPE_TEXT,
410 ARTIFACT_EXTRAFIELDTYPE_TEXTAREA,
411 ARTIFACT_EXTRAFIELDTYPE_INTEGER,
412 ARTIFACT_EXTRAFIELDTYPE_SELECT,
413 ARTIFACT_EXTRAFIELDTYPE_RADIO,
414 ARTIFACT_EXTRAFIELDTYPE_STATUS));
415 $keys=array_keys($efarr);
416 for ($k=0; $k<count($keys); $k++) {
418 $order_name_arr[] = $efarr[$i]['field_name'];
419 $order_arr[] = $efarr[$i]['extra_field_id'];
423 html_build_select_box_from_arrays($order_arr,$order_name_arr,'_sort_col',$_sort_col,false) .
424 html_build_select_box_from_arrays($sort_arr,$sort_name_arr,'_sort_ord',$_sort_ord,false) .
425 '<input type="submit" name="submit" value="'._('Quick Browse').'" />';
433 if ($af->query_type == 'default') {
434 echo '<div class="tabbertab tabbertabdefault" title="'._('Default').'">';
436 echo sprintf(_('Viewing only opened records by default, use “%1$s” or “%2$s” to change.'),
437 _('Advanced queries'),
438 _('Simple Filtering and Sorting'));
440 echo '</div>' . "\n";
442 echo '</div>' . "\n";
444 $art_cnt = count($art_arr);
445 if ($art_arr && $art_cnt > 0) {
448 $aq = new ArtifactQuery($ath,$query_id);
449 $has_bargraph = (in_array('bargraph', $aq->getQueryOptions()));
451 $has_bargraph = false;
455 // Display the roadmap block based on the values of the Status field.
456 $colors = array('#a71d16', '#ffa0a0', '#f5f5b5', '#bae0ba', '#16a716');
459 foreach($art_arr as $art) {
460 if ($ath->usesCustomStatuses()) {
461 $custom_id = $ath->getCustomStatusField();
462 $extra_data = $art->getExtraFieldDataText();
463 @$count[ $extra_data[$custom_id]['value'] ]++;
465 @$count[ $art->getStatusName()]++;
468 foreach($count as $n => $c) {
469 $percent[$n] = round(100*$c/$art_cnt);
471 if ($ath->getCustomStatusField()) {
472 $efarr = $ath->getExtraFields(array(ARTIFACT_EXTRAFIELDTYPE_STATUS));
473 $keys=array_keys($efarr);
474 $field_id = $keys[0];
475 $custom_states = $ath->getExtraFieldElements($field_id);
477 if (is_array($custom_states)) {
478 foreach($custom_states as $state) {
479 $states[] = $state['element_name'];
483 $colors = array('#ffa0a0', '#bae0ba');
484 $res = $ath->getStatuses();
485 while ($row = db_fetch_array($res)) {
486 $states[] = $row['status_name'];
493 if (is_array($states)) {
494 foreach($states as $name) {
496 $graph .= '<td style="background: '.$colors[$i].'; width: '.$percent[$name].'%;"> </td>';
497 $legend .= '<td style="white-space: nowrap; width: '.$percent[$name].'%;">'."<i>$name: $count[$name] ($percent[$name]%)</i></td>";
505 <table class="progress">
507 <tr><?php echo $graph; ?></tr>
510 <table class="progress_legend">
511 <tr><?php echo $legend ?></tr>
517 if ($set=='custom') {
518 $set .= '&_assigned_to='.$_assigned_to.'&_status='.$_status.'&_sort_col='.$_sort_col.'&_sort_ord='.$_sort_ord;
519 if (array_key_exists($ath->getCustomStatusField(),$_extra_fields)) {
520 $set .= '&extra_fields['.$ath->getCustomStatusField().']='.$_extra_fields[$ath->getCustomStatusField()];
525 $IS_ADMIN = forge_check_perm ('tracker', $ath->getID(), 'manager') ;
529 <form name="artifactList" action="'. getStringFromServer('PHP_SELF') .'?group_id='.$group_id.'&atid='.$ath->getID().'" method="post">
530 <input type="hidden" name="form_key" value="'.form_generate_key().'" />
531 <input type="hidden" name="func" value="massupdate" />';
537 <a href="javascript:checkAllArtifacts(1)">'._('Check all').'</a>
539 <a href="javascript:checkAllArtifacts(0)">'._('Clear all').'</a>';
544 $browse_fields = explode(',', "id,".$ath->getBrowseList());
546 foreach ($browse_fields as $f) {
548 if (intval($f) > 0) {
549 $title = $ath->getExtraFieldName($f);
556 $title=_('Description');
557 if ($f == 'open_date')
558 $title=_('Open Date');
559 if ($f == 'close_date')
560 $title=_('Close Date');
561 if ($f == 'status_id')
563 if ($f == 'priority')
564 $title=_('Priority');
565 if ($f == 'assigned_to')
566 $title=_('Assigned to');
567 if ($f == 'submitted_by')
568 $title=_('Submitted by');
569 if ($f == 'related_tasks')
570 $title=_('Related Tasks');
571 if ($f == 'last_modified_date')
572 $title=_('Last Modified Date');
574 $title_arr[] = $title;
578 echo $GLOBALS['HTML']->listTableTop ($title_arr);
581 $then=(time()-$ath->getDuePeriod());
583 for ($i=$start; $i<$max; $i++) {
584 $extra_data = $art_arr[$i]->getExtraFieldDataText();
586 <tr '. $HTML->boxGetAltRowStyle($i) . '>';
587 foreach ($browse_fields as $f) {
589 echo '<td style="white-space: nowrap;">'.
590 ($IS_ADMIN?'<input type="checkbox" name="artifact_id_list[]" value="'.
591 $art_arr[$i]->getID() .'" /> ':'').
592 '<a href="'.getStringFromServer('PHP_SELF').'?func=detail&aid='.
593 $art_arr[$i]->getID() .
594 '&group_id='. $group_id .'&atid='.
595 $ath->getID().'">'.$art_arr[$i]->getID() .
597 } elseif ($f == 'summary') {
598 echo '<td><a href="'.getStringFromServer('PHP_SELF').'?func=detail&aid='.
599 $art_arr[$i]->getID() .
600 '&group_id='. $group_id .'&atid='.
602 $art_arr[$i]->getSummary().
604 } elseif ($f == 'open_date') {
605 echo '<td>'. (($set != 'closed' && $art_arr[$i]->getOpenDate() < $then)?'* ':' ') .
606 date(_('Y-m-d H:i'),$art_arr[$i]->getOpenDate()) .'</td>';
607 } elseif ($f == 'status_id') {
608 echo '<td>'. $art_arr[$i]->getStatusName() .'</td>';
609 } elseif ($f == 'priority') {
610 echo '<td class="priority'.$art_arr[$i]->getPriority() .'">'. $art_arr[$i]->getPriority() .'</td>';
611 } elseif ($f == 'assigned_to') {
612 echo '<td>'. $art_arr[$i]->getAssignedRealName() .'</td>';
613 } elseif ($f == 'submitted_by') {
614 echo '<td>'. $art_arr[$i]->getSubmittedRealName() .'</td>';
615 } elseif ($f == 'close_date') {
616 echo '<td>'. ($art_arr[$i]->getCloseDate() ?
617 date(_('Y-m-d H:i'),$art_arr[$i]->getCloseDate()) :' ') .'</td>';
618 } elseif ($f == 'details') {
619 echo '<td>'. $art_arr[$i]->getDetails() .'</td>';
620 } elseif ($f == 'related_tasks') {
622 $tasks_res = $art_arr[$i]->getRelatedTasks();
624 while ($rest = db_fetch_array($tasks_res)) {
625 $link = '/pm/task.php?func=detailtask&project_task_id='.$rest['project_task_id'].
626 '&group_id='.$group_id.'&group_project_id='.$rest['group_project_id'];
627 $title = '[T'.$rest['project_task_id'].']';
628 if ($rest['status_id'] == 2) {
629 $title = '<span class="strike">'.$title.'</span>';
631 print $s.'<a href="'.$link.'" title="'.util_html_secure($rest['summary']).'">'.$title.'</a>';
635 } elseif ($f == 'last_modified_date') {
636 echo '<td>'. ($art_arr[$i]->getLastModifiedDate() ?
637 date(_('Y-m-d H:i'),$art_arr[$i]->getLastModifiedDate()) :' ') .'</td>';
638 } elseif (intval($f) > 0) {
639 // Now display extra-fields (fields are numbers).
640 $value = $extra_data[$f]['value'];
641 if ($extra_data[$f]['type'] == 9) {
642 $value = preg_replace('/\b(\d+)\b/e', "_artifactid2url('\\1')", $value);
643 } elseif ($extra_data[$f]['type'] == 7) {
644 if ($art_arr[$i]->getStatusID() == 2) {
645 $value = '<span class="strike">'.$value.'</span>';
649 echo '<td>' . $value .'</td>';
651 // Display ? for unknown values.
659 echo $GLOBALS['HTML']->listTableBottom();
661 $pages = $art_cnt / $paging;
662 $currentpage = intval($start / $paging);
665 $skipped_pages=false;
666 for ($j=0; $j<$pages; $j++) {
668 if ((($j > 4) && ($j < ($currentpage-5))) || (($j > ($currentpage+5)) && ($j < ($pages-5)))) {
669 if (!$skipped_pages) {
675 $skipped_pages=false;
678 if ($j * $paging == $start) {
679 echo '<strong>'.($j+1).'</strong> ';
681 echo '<a href="'.getStringFromServer('PHP_SELF')."?func=browse&group_id=".$group_id.'&atid='.$ath->getID().'&set='. $set.'&start='.($j*$paging).'"><strong>'.($j+1).'</strong></a> ';
686 echo '<div style="display:table;width:100%">';
687 echo '<div style="display:table-row">';
689 echo '<div style="display:table-cell">';
690 printf(_('* Denotes requests > %s Days Old'), ($ath->getDuePeriod()/86400));
693 if (in_array('priority', $browse_fields)) {
694 echo '<div style="display:table-cell;text-align:right">';
695 show_priority_colors_key();
700 echo '<div style="display:table-row">';
702 echo '<div style="display:table-cell">'.$check_all.'</div>';
703 echo '<div style="display:table-cell;text-align:right">'.$pager.'</div>'."\n";
712 echo '<fieldset id="fieldset1_closed" class="coolfieldset">
713 <legend>'._('Mass Update').'</legend>
715 <table class="fullwidth" id="admin_mass_update">
717 <p class="information">'._('If you wish to apply changes to all items selected above, use these controls to change their properties and click once on “Mass Update”.').'</p>
721 // build custom fields
723 $ef = $ath->getExtraFields(array(ARTIFACT_EXTRAFIELD_FILTER_INT));
724 $keys=array_keys($ef);
727 for ($i=0; $i<count($keys); $i++) {
728 if (($ef[$keys[$i]]['field_type']==ARTIFACT_EXTRAFIELDTYPE_CHECKBOX) || ($ef[$keys[$i]]['field_type']==ARTIFACT_EXTRAFIELDTYPE_MULTISELECT)) {
729 $sel[$keys[$i]]=array('100');
731 $sel[$keys[$i]]='100';
734 $ath->renderExtraFields($sel,true,_('No Change'),false,'', array(ARTIFACT_EXTRAFIELD_FILTER_INT),true);
736 <td><strong>'._('Priority')._(':').'</strong><br />';
737 build_priority_select_box ('priority', '100', true);
744 <td><strong>'._('Assigned to')._(':').'</strong><br />'.
745 $ath->technicianBox ('assigned_to','100.1',true,_('Nobody'),'100.1',_('No Change')) .'</td>
747 if (!$ath->usesCustomStatuses()) {
748 echo '<strong>'._('State')._(': ').'</strong>
749 <br />'. $ath->statusBox ('status_id','xzxz',true,_('No Change'));
754 echo '<tr><td colspan="2"><strong>'._('Canned Response')._(':').'</strong><br />'.
755 $ath->cannedResponseBox ('canned_response') .'</td></tr>
757 <tr><td colspan="3" class="align-center"><input type="submit" name="submit" value="'._('Mass Update').'" /></td></tr>
766 echo '<p class="information">'._('No items found').'</p>';
770 $ath->footer(array());
774 // c-file-style: "bsd"