<?php
/*
* lib/Project.php
*
* Developed by Ondrej Jombik <nepto@platon.sk>
* 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:
* }}} */
?>
Platon Group <platon@platon.sk> http://platon.sk/
|