* Copyright (c) 2004 Platon SDG, http://platon.sk/ * Licensed under terms of GNU General Public License. * All rights reserved. * * Changelog: * 2004-06-20 - created * */ /* $Platon$ */ require_once 'DB.php'; class Project { function get($project_id = 0) /* {{{ */ { global $cfg, $dbh; $project_id = intval($project_id); $get_all = ! ($project_id > 0); $query = sprintf('SELECT p.*, c.name AS customer_name' .' FROM %s p LEFT JOIN %s c ON p.customer_id = c.id' .' WHERE %s ORDER BY p.started DESC', $cfg['tables']['projects'], $cfg['tables']['customers'], $get_all ? '1 = 1' : 'p.id = '.$project_id); $ret_ar = $dbh->getAll($query); return $get_all ? $ret_ar : $ret_ar[0]; } /* }}} */ function getList() /* {{{ */ { return Project::get(0); } /* }}} */ function getExtended($project_id = 0) /* {{{ */ { global $cfg, $dbh; $ret_ar = Project::get($project_id); $project_id = intval($project_id); $get_all = ! ($project_id > 0); if (! $get_all) { $ret_ar = array($ret_ar); } $query_done = sprintf('SELECT project_id, COUNT(*), SUM(duration)' .' FROM %s WHERE %s AND state = "done"' .' GROUP BY project_id', $cfg['tables']['tasks'], $get_all ? '1 = 1' : 'project_id = '.$project_id); $query_opened = sprintf('SELECT project_id, COUNT(*), SUM(duration),' .' MIN(deadline), UNIX_TIMESTAMP(MIN(deadline))' .' FROM %s WHERE %s AND state != "done" AND state != "abandoned"' .' GROUP BY project_id', $cfg['tables']['tasks'], $get_all ? '1 = 1' : 'project_id = '.$project_id); $counts_done = $dbh->getAssoc($query_done, false, array(), DB_FETCHMODE_ORDERED); $counts_opened = $dbh->getAssoc($query_opened, false, array(), DB_FETCHMODE_ORDERED); $counts_done_keys = array_keys($counts_done); $counts_opened_keys = array_keys($counts_opened); foreach ($ret_ar as $key => $val) { if (in_array($val['id'], $counts_done_keys)) { $ret_ar[$key]['tasks_done'] = $counts_done[$val['id']][0]; $ret_ar[$key]['duration_done'] = $counts_done[$val['id']][1]; } else { $ret_ar[$key]['tasks_done'] = 0; $ret_ar[$key]['duration_done'] = 0; } if (in_array($val['id'], $counts_opened_keys)) { $ret_ar[$key]['tasks_opened'] = $counts_opened[$val['id']][0]; $ret_ar[$key]['duration_opened'] = $counts_opened[$val['id']][1]; $ret_ar[$key]['min_deadline'] = $counts_opened[$val['id']][2]; $ret_ar[$key]['min_deadline_ts'] = $counts_opened[$val['id']][3]; } else { $ret_ar[$key]['tasks_opened'] = 0; $ret_ar[$key]['duration_opened'] = 0; $ret_ar[$key]['min_deadline'] = ''; $ret_ar[$key]['min_deadline_ts'] = 0; } } return $get_all ? $ret_ar : $ret_ar[0]; } /* }}} */ function getListExtended() /* {{{ */ { return Project::getExtended(0); } /* }}} */ } /* Modeline for ViM {{{ * vim: set ts=4: * vim600: fdm=marker fdl=0 fdc=0: * }}} */ ?>