function show() { global $page, $db, $fs, $proj, $user; $page->setTitle($fs->prefs['page_title'] . L('roadmap')); // Get milestones $list_id = $db->x->GetOne('SELECT list_id FROM {fields} WHERE field_id = ?', null, $proj->prefs['roadmap_field']); $milestones = array(); if ($list_id) { $milestones = $db->x->getAll('SELECT list_item_id AS version_id, item_name AS version_name FROM {list_items} li WHERE list_id = ? AND version_tense = 3 ORDER BY list_position ASC', null, $list_id); } $data = array(); foreach ($milestones as $row) { // Get all tasks related to a milestone $all_tasks = $db->x->getAll('SELECT percent_complete, is_closed, t.* FROM {tasks} t LEFT JOIN {field_values} fv ON (fv.task_id = t.task_id AND field_id = ?) WHERE field_value = ? AND project_id = ?', null, array($proj->prefs['roadmap_field'], $row['version_id'], $proj->id)); $all_tasks = array_filter($all_tasks, array($user, 'can_view_task')); $percent_complete = 0; foreach ($all_tasks as $task) { if ($task['is_closed']) { $percent_complete += 100; } else { $percent_complete += $task['percent_complete']; } } $percent_complete = round($percent_complete / max(count($all_tasks), 1)); if (count($all_tasks)) { $tasks = $db->x->getAll('SELECT t.task_id, item_summary, detailed_desc, mark_private, fs.field_value AS field' . $fs->prefs['color_field'] . ', opened_by, content, task_token, t.project_id, prefix_id FROM {tasks} t LEFT JOIN {cache} ca ON (t.task_id = ca.topic AND ca.type = ? AND t.last_edited_time <= ca.last_updated) LEFT JOIN {field_values} f ON f.task_id = t.task_id LEFT JOIN {field_values} fs ON (fs.task_id = t.task_id AND fs.field_id = ?) WHERE f.field_value = ? AND f.field_id = ? AND t.project_id = ? AND is_closed = 0', null, array('rota', $fs->prefs['color_field'], $row['version_id'], $proj->prefs['roadmap_field'], $proj->id)); $count = count($tasks); for ($i = 0; $i < $count; $i++) { if (!$user->can_view_task($tasks[$i])) { unset($tasks[$i]); } } } $data[] = array('id' => $row['version_id'], 'open_tasks' => isset($tasks) ? $tasks : array(), 'percent_complete' => $percent_complete, 'all_tasks' => $all_tasks ? $all_tasks : array(), 'name' => $row['version_name']); unset($tasks); } if (Get::val('txt')) { $page = new FSTpl(); header('Content-Type: text/plain; charset=UTF-8'); $page->assign('data', $data); $page->display('roadmap.text.tpl'); exit; } else { $page->assign('data', $data); $page->pushTpl('roadmap.tpl'); } }
function show() { global $page, $db, $fs, $proj, $user; $page->setTitle($fs->prefs['page_title'] . L('changelog')); // Get milestones $list_id = $db->x->GetOne('SELECT list_id FROM {fields} WHERE field_id = ?', null, $proj->prefs['roadmap_field']); if (!$list_id) { trigger_error('Roadmap / changelog has not been configured in the project management area.', E_USER_ERROR); } $milestones = $db->x->getAll('SELECT list_item_id AS version_id, item_name AS version_name FROM {list_items} li WHERE list_id = ? AND (version_tense = 1 OR version_tense = 2) AND show_in_list = 1 ORDER BY list_position ASC', null, $list_id); $data = array(); $reasons = implode(',', explode(' ', $proj->prefs['changelog_reso'])); while ((list(, $row) = each($milestones)) && $reasons) { $tasks = $db->x->getAll('SELECT t.task_id, percent_complete, item_summary, detailed_desc, mark_private, fs.field_value AS field' . $fs->prefs['color_field'] . ', opened_by, task_token, t.project_id, prefix_id, li.item_name AS res_name, li.list_item_id AS res_id FROM {tasks} t LEFT JOIN {field_values} f ON f.task_id = t.task_id LEFT JOIN {field_values} fs ON (fs.task_id = t.task_id AND fs.field_id = ?) LEFT JOIN {list_items} li ON t.resolution_reason = li.list_item_id WHERE f.field_value = ? AND f.field_id = ? AND t.project_id = ? AND is_closed = 1 AND t.resolution_reason IN (' . $reasons . ') ORDER BY t.resolution_reason DESC', null, array($fs->prefs['color_field'], $row['version_id'], $proj->prefs['roadmap_field'], $proj->id)); $tasks = array_filter($tasks, array($user, 'can_view_task')); if (count($tasks)) { $resolutions = array(); foreach ($tasks as $task) { $resolutions[$task['res_name']] = isset($resolutions[$task['res_name']]) ? $resolutions[$task['res_name']] + 1 : 1; } $data[] = array('tasks' => $tasks, 'name' => $row['version_name'], 'resolutions' => $resolutions); } } if (Get::val('txt')) { $page = new FSTpl(); header('Content-Type: text/plain; charset=UTF-8'); $page->assign('data', $data); $page->display('changelog.text.tpl'); exit; } else { $page->assign('data', $data); $page->pushTpl('changelog.tpl'); } }
function tpl_userselect($name, $value = null, $id = '', $attrs = array()) { global $db, $user; if (!$id) { $id = $name; } if ($value && ctype_digit($value)) { $sql = $db->Query('SELECT user_name FROM {users} WHERE user_id = ?', array($value)); $value = $db->FetchOne($sql); } if (!$value) { $value = ''; } $page = new FSTpl(); $page->assign('name', $name); $page->assign('id', $id); $page->assign('value', $value); $page->assign('attrs', $attrs); $page->display('common.userselect.tpl'); }
<?php /* This script gets the history of a task and returns it for HTML display in a page. */ define('IN_FS', true); header('Content-type: text/html; charset=utf-8'); require_once '../../header.php'; $baseurl = dirname(dirname($baseurl)) . '/'; $user->save_search(); $page = new FSTpl(); $page->display('links.searches.tpl');
// Initialise user if (Cookie::has('flyspray_userid') && Cookie::has('flyspray_passhash')) { $user = new User(Cookie::val('flyspray_userid')); $user->check_account_ok(); } else { $user = new User(0, $proj); } // Check permissions if (!$user->perms('view_history')) { die; } // Load translations load_translations(); if ($details = Get::num('details')) { $details = " AND h.history_id = {$details}"; } else { $details = null; } $sql = get_events(Get::num('task_id'), $details); $histories = $db->fetchAllArray($sql); $page = new FSTpl(); $page->setTheme($proj->prefs['theme_style']); $page->uses('histories', 'details'); if ($details) { event_description($histories[0]); // modifies global variables $page->assign('details_previous', $GLOBALS['details_previous']); $page->assign('details_new', $GLOBALS['details_new']); } $page->display('details.tabs.history.callback.tpl');
foreach ($all_tasks as $task) { if ($task['is_closed']) { $percent_complete += 100; } else { $percent_complete += $task['percent_complete']; } } $percent_complete = round($percent_complete / max(count($all_tasks), 1)); $tasks = $db->Query('SELECT task_id, item_summary, detailed_desc, item_status, task_severity, task_priority, task_type, mark_private, opened_by, content, task_token, t.project_id,estimated_effort FROM {tasks} t LEFT JOIN {cache} ca ON (t.task_id = ca.topic AND ca.type = \'rota\' AND t.last_edited_time <= ca.last_updated) WHERE closedby_version = ? AND t.project_id = ? AND is_closed = 0', array($row['version_id'], $proj->id)); $tasks = $db->fetchAllArray($tasks); $count = count($tasks); for ($i = 0; $i < $count; $i++) { if (!$user->can_view_task($tasks[$i])) { unset($tasks[$i]); } } $data[] = array('id' => $row['version_id'], 'open_tasks' => $tasks, 'percent_complete' => $percent_complete, 'all_tasks' => $all_tasks, 'name' => $row['version_name']); } if (Get::val('txt')) { $page = new FSTpl(); header('Content-Type: text/plain; charset=UTF-8'); $page->uses('data', 'page'); $page->display('roadmap.text.tpl'); exit; } else { $page->uses('data', 'page'); $page->pushTpl('roadmap.tpl'); }
break; case 'assignedto': // additional permission check is needed if (!$user->perms('edit_assignments')) { header('HTTP/1.1 400 Bad Request'); exit; } $field = 'assigned_to'; $page = new FSTpl(); $page->assign('id', 'task' . $task['task_id'] . '_' . $field); $list = $db->x->getCol('SELECT u.user_name FROM {assigned} a, {users} u WHERE a.user_id = u.user_id AND task_id = ? ORDER BY u.user_name DESC', null, $task['task_id']); $page->assign('userlist', $list); $page->display('common.multiuserselect.tpl'); break; default: // consider custom fields $field_id = substr($field, 5); $f = new Field($field_id); if ($f->id) { echo $f->edit(!USE_DEFAULT, !LOCK_FIELD, $task, array(), array(), 'task' . $task['task_id'] . '_qe'); $field = 'qe' . $field; } else { header('HTTP/1.1 400 Bad Request'); exit; } break; } $args = sprintf("%s, '%s'", $task['task_id'], $field);
function tpl_userselect($input_name, $value = null, $input_id = '', $attrs = array()) { global $db, $user; if (!$input_id) { $input_id = $input_name; } if ($value && is_numeric($value)) { $value = $db->x->GetOne('SELECT user_name FROM {users} WHERE user_id = ?', null, $value); } if (!$value) { $value = ''; } $page = new FSTpl(); $page->assign('name', $input_name); $page->assign('id', $input_id); $page->assign('value', $value); $page->assign('attrs', $attrs); $page->display('common.userselect.tpl'); }