You can subscribe to this list here.
| 2005 |
Jan
(1) |
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2006 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: The A. <an...@an...> - 2007-05-26 00:49:20
|
After a year of small bugfixes and new features, mainly for Koumbit, I give you the 0.6 release, I hope it pleases the few of you. ;) It should show up on the sourceforge mirrors soon enough: http://sourceforge.net/project/showfiles.php?group_id=123294&package_id=134673&release_id=511289 89f6938aa9d1bcc4c5776d2db5326233 phptimetracker-0.6.tar.gz Release notes: http://sourceforge.net/project/shownotes.php?release_id=511289&group_id=123294 Excerpt of the CHANGES file: Release 0.6 - Fri May 25 20:25:34 EDT 2007 ========================================== This long-awaited release bundles a few bugfixes and quite a few new features. New features ------------ * audit trail (missing a user interface) * reports improvements: * details are now not shown by default for better performance, can be enabled with a checkbox * count the number of punches in projects * rounding is now a customizable per-user preference, defaulting to 15 minutes * 'summary mode' will list users and only their total punch time for the given period * totals can be clicked on to drill down in details * a clickable summary of punched hours is shown next to punch buttons (note, the summary isn't always exact and shouldn't be relied upon) Rejected features ----------------- * "rounded punches" (we round the reports instead) Database changes ---------------- To implement the audit trail mechanism, you must create a new table. To do that, you'll probably want to do something similar to: mysql -u timetracker -p timetracker < schemas/0.6.mysql Otherwise, remove the php/Audit.php file from your installation, the system should work without it. Bugfixes -------- * fix a corner case bug in which reports were inexact for december * when a time after midnight is entered in mode B, it's correctly interpreted as "tomorrow" Notable changes --------------- The page facture.php is now named rapports.php, sorry for breaking your links, but it just had to be done. The reporting tool has therefore been improved a bit. It's still an horrible mess, especially internally, but should be more usuable. The audit trail now makes obvious a security issue that has always been existing in the phptimetracker: now everyone can see what everyone is doing, regardless of allowed customers and so on. I suspect this issue was present in the rapports.php page (formerly known as factures.php). The non-working project creation field in the main view was removed. The performance-eating project totals and ETA in the project listing were removed. |
|
From: <an...@us...> - 2006-03-06 20:45:49
|
Revision: 193 Author: anarcat Date: 2006-03-06 12:45:40 -0800 (Mon, 06 Mar 2006) ViewCVS: http://svn.sourceforge.net/phptimetracker/?rev=193&view=rev Log Message: ----------- merge rapport.php into facture.php. the summary on top of facture.php was broken anyways and looks much better now. this commit inaugurates the migration to Subversion. Modified Paths: -------------- trunk/phptimetracker/facture.php trunk/phptimetracker/includes/menu_utils.php Removed Paths: ------------- trunk/phptimetracker/rapport.php Modified: trunk/phptimetracker/facture.php =================================================================== --- trunk/phptimetracker/facture.php 2006-01-28 00:39:56 UTC (rev 192) +++ trunk/phptimetracker/facture.php 2006-03-06 20:45:40 UTC (rev 193) @@ -106,11 +106,64 @@ if (!$user) { unset($user); } - $project = Project::top_level($customer->get('name')); -$total = 0; -while ($project->next()) { - print ecdStd::project_facture($project, 0, $bounds); + +// avoid sql injection +$where = ""; + +/* XXX: copy paste from Projec::listTimeEntries() */ +if (!is_null($bounds)) { + $st = new ecdDate($bounds[0], 'unixtimestamp'); + $end = new ecdDate($bounds[1], 'unixtimestamp'); + $where .= + "`start` >= '" .$st->datetime()."' AND ". + "`start` <= '".$end->datetime()."' AND "; } + +$p = new Project(array('id' => $_GET['project'])); $p->next(); +$project = $p->get('path'); +$join = " INNER JOIN `project` AS p ON p.id = timeentry.project "; + +$where .= "p.path LIKE '" . $project . "%' AND "; + +if ($_GET['user']) { + $where .= "timeentry.user = '" . addslashes($_GET['user']) . "' AND "; +} + +$where .= "1 GROUP BY user, project"; + +/* original query, reconstructed in TimeEntry below */ +/* $query = "SELECT SUM(end-start),user,project,path,name +FROM `timeentry` JOIN `project` $where +GROUP BY user, project ORDER BY user,path"; */ + +$track = new TimeEntry($where, null, null, + "user,path", /* order by */ + "SUM(UNIX_TIMESTAMP(end)-UNIX_TIMESTAMP(start)) AS time,user,project,path,name", /* select */ + $join); + +$current_user = null; +while ($track->next()) { + $style = ( $style != 'odd' ? 'odd' : 'even'); + + if ($current_user != $track->get('user')) { + + if (!is_null($current_user)) { + print "<tr class=\"$style\"><td><strong>".__('Total').":</strong></td>"; + print "<td style=\"text-align: right\">".ecdDate::how_much_time_str($total, HOURS, 30*MINUTES) . "</td>"; + print '</tr><tr><td colspan="2"></td></tr>'; + $total = 0; +} + print "<tr>"; + $current_user = $track->get('user'); + print '<td class="dateline" colspan="2">'.User::id_to_mail($current_user).'</td>'; + print "</tr>"; + } + print "<tr class=\"$style\">"; + print "<td>".$track->get('name')."</td>"; + $total += $time = $track->get('time'); + print "<td align=\"right\">".ecdDate::how_much_time_str($time, HOURS, 30 * MINUTES)."</td>"; + print "</tr>"; +} ?> <tr><td></td><td></td></tr> <tr class="even"><td><strong><?=__('Total')?>:</strong></td> Modified: trunk/phptimetracker/includes/menu_utils.php =================================================================== --- trunk/phptimetracker/includes/menu_utils.php 2006-01-28 00:39:56 UTC (rev 192) +++ trunk/phptimetracker/includes/menu_utils.php 2006-03-06 20:45:40 UTC (rev 193) @@ -17,7 +17,6 @@ <li<?=@$menu['profil.php']?>><a href="<?=add_get_array('profil.php', $_GET)?>"><?=__('Mon profil')?></a></li> <li<?=@$menu['liste_projets.php']?>><a href="<?=add_get_array('liste_projets.php', $_GET)?>"><?=__('Liste des projets')?></a></li> <li<?=@$menu['facture.php']?>><a href="<?=add_get_array('facture.php', $_GET)?>"><?=__('Factures')?></a></li> - <li<?=@$menu['rapport.php']?>><a href="<?=add_get_array('rapport.php', $_GET)?>"><?=__('Rapports')?></a></li> <li><a href="http://wiki/wiki/index.php/Accueil"><?=__('Wiki')?></a></li> <li><a href="<?=add_get_array('php/bin/logout.php', $_GET)?>"><?=__('Logout')?></a></li> Deleted: trunk/phptimetracker/rapport.php =================================================================== --- trunk/phptimetracker/rapport.php 2006-01-28 00:39:56 UTC (rev 192) +++ trunk/phptimetracker/rapport.php 2006-03-06 20:45:40 UTC (rev 193) @@ -1,178 +0,0 @@ -<?php - -/** - * Affichage de la facture - * - * $Id$ - */ - -/** - * page protected - */ -require_once('php/bin/login.php'); -require_once('php/Customer.php'); -require_once('php/ecdErrorBuffer.inc.php'); -require_once('php/ecdProfiler.inc.php'); -require_once('php/language.php'); -require_once('php/ecdStd.inc.php'); -require_once('php/ecdForms.inc.php'); -require_once('php/bin/project_edit.php'); -require_once('php/bin/profile_edit.php'); - -$auth = TimeAuth::instance(); - -?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - -<html> - - <head> - <meta http-equiv="content-type" content="text/html;charset=iso-8859-1"> - <title><?=__('Rapports')?></title> - <link href="css/espresso_timesheet.css" rel="stylesheet" type="text/css" media="screen" /> - <link href="css/plain.css" rel="alternate stylesheet" type="text/css" media="screen" title="plain" /> - <link href="css/facture_print.css" rel="stylesheet" type="text/css" media="print" /> - <style type="text/css" media="screen"></style> - <script type="text/javascript" src="js/datepick/ts_picker.js"></script> - <link rel="Shortcut Icon" href="http://www.espresso-com.com/favicon.ico" type="image/x-icon" /> - <script type="text/javascript" src="js/reload.js" language="javascript"></script> - </head> - - <body> - <div id="entete"> - <?php include ("includes/menu_utils.php"); ?> - <div id="titre"> - <h2><?=__('Rapports')?></h2> - </div> - </div> - <div id="container"> - <div id="side"> - <div id="calendar_container"> -<div id="calendar_a"> - <?php - print __("From").":"; - $from = new ecdDate($_GET['from'], 'datetime'); - $to = new ecdDate($_GET['to'], 'datetime'); - -print ecdDate::calendar_str(new Date($from->unixtimestamp()), 0, null, 'from'); -?> -</div> -<div id="calendar_b"> -<?php -print __("To").":"; -print ecdDate::calendar_str(new Date($to->unixtimestamp()), 0, null, 'to'); -?> -</div> -</div> - <div id="editor"> - - <!-- ceci sert \xE0 choisir le client duquel on liste les projets --> - <!-- si l'usager a acc\xE8s \xE0 plus d'un client, un listbox appara\xEEtra --> -<?php -$customer = new Customer(array('name' => ecdStd::current_customer())); -$customer->next(); - -print ecdStd::customer_listbox(); - -print ecdStd::user_listbox(null, 'user', $_GET, __('montrer tous'), array("onChange" => "change(this)")); - -print ecdStd::project_listbox(null, $_GET, 'project', false, true, true); -?> - </div> - </div> - <div id="result"> -<?php - $bounds = array($from->unixtimestamp(), $to->unixtimestamp()); - -?> - <h3><?=__('Temps du %s au %s', $from->getShortDate(sane_lang()), $to->getShortDate(sane_lang()))?></h3> - - <table width="100%"> - <tr class="header"> - <td><?=__('Projet')?></td> - <td style="text-align: right"><?=__('Time')?></td> - </tr> -<?php - -# XXX: this is evil. for some reason, project_facture() uses a global $user and -# defaults it only if it's not isset() (in opposition with is_null()). -$user = $_GET['id']; -if (!$user) { - unset($user); -} - -// avoid sql injection -$where = ""; - -/* XXX: copy paste from Projec::listTimeEntries() */ -if (!is_null($bounds)) { - $st = new ecdDate($bounds[0], 'unixtimestamp'); - $end = new ecdDate($bounds[1], 'unixtimestamp'); - $where .= - "`start` >= '" .$st->datetime()."' AND ". - "`start` <= '".$end->datetime()."' AND "; -} - -$p = new Project(array('id' => $_GET['project'])); $p->next(); -$project = $p->get('path'); -$join = " INNER JOIN `project` AS p ON p.id = timeentry.project "; - -$where .= "p.path LIKE '" . $project . "%' AND "; - -if ($_GET['user']) { - $where .= "timeentry.user = '" . addslashes($_GET['user']) . "' AND "; -} - -$where .= "1 GROUP BY user, project"; - -/* original query, reconstructed in TimeEntry below */ -/* $query = "SELECT SUM(end-start),user,project,path,name -FROM `timeentry` JOIN `project` $where -GROUP BY user, project ORDER BY user,path"; */ - -$track = new TimeEntry($where, null, null, - "user,path", /* order by */ - "SUM(UNIX_TIMESTAMP(end)-UNIX_TIMESTAMP(start)) AS time,user,project,path,name", /* select */ - $join); - -$current_user = null; -while ($track->next()) { - $style = ( $style != 'odd' ? 'odd' : 'even'); - - if ($current_user != $track->get('user')) { - - if (!is_null($current_user)) { - print "<tr class=\"$style\"><td><strong>".__('Total').":</strong></td>"; - print "<td style=\"text-align: right\">".ecdDate::how_much_time_str($total, HOURS, 30*MINUTES) . "</td>"; - print '</tr><tr><td colspan="2"></td></tr>'; - $total = 0; -} - print "<tr>"; - $current_user = $track->get('user'); - print '<td class="dateline" colspan="2">'.User::id_to_mail($current_user).'</td>'; - print "</tr>"; - } - print "<tr class=\"$style\">"; - print "<td>".$track->get('name')."</td>"; - $total += $time = $track->get('time'); - print "<td align=\"right\">".ecdDate::how_much_time_str($time, HOURS, 30 * MINUTES)."</td>"; - print "</tr>"; -} - $style = ( $style != 'odd' ? 'odd' : 'even'); - print "<tr class=\"$style\"><td><strong>".__('Total').":</strong></td>"; - print "<td style=\"text-align: right\">".ecdDate::how_much_time_str($total, HOURS, 30*MINUTES) . "</td>"; - print "</tr>"; - -?> - - - </table> - - - </div> - </div> -</form> - - </body> - -</html> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: The A. <an...@an...> - 2005-04-20 01:54:30
|
Salut tout le monde! Voici le nouveau release du timetracker, v0.4. Plusieurs petits bugfixes, mais surtout des factures plus flexibles et une traduction en anglais, gracieuset=E9 du nouveau d=E9veloppeur Chris Van Pelt. Tous les d=E9tails et downloads sur sourceforge: https://sourceforge.net/projects/phptimetracker/ N'oubliez pas de lire CHANGES avant de faire l'upgrade! -- Hi everyone! Here is the new release of the timetracker, v0.4. Many small bugfixes, but especially an english translation, done with the help of new developper Chris Van Pelt, and more control over the time spam of bills. All the details and downloads are, as usual, on sourceforge: https://sourceforge.net/projects/phptimetracker/ Don't forget to read CHANGES before the upgrade! Enjoy! A. |
|
From: The A. <an...@an...> - 2005-01-08 01:41:22
|
Salut tout le monde! =C7a y est! J'ai fini par sortir 0.3... Vous pouvez l'installer et le t=E9l=E9charger sur: https://sourceforge.net/projects/phptimetracker/ Il devrait =EAtre assez facile de mettre =E0 jour le timetracker, suivez simplement les instructions dans CHANGES. N'h=E9sitez pas =E0 me contacter si quelquechose n'est pas clair. Il est possible que cette mise-=E0-jour cr=E9=E9 des nouveaux bugs, car j'ai grandement optimis=E9 l'affichage des projets (ce qui devrait avoir un impact majeur avec les machines plus lentes...) Je vous sugg=E8re donc fortement de: 1- faire un backup des fichiers et des bases 2- faire l'upgrade! =E7a vaut la peine! J'ai d=E9ploy=E9 0.3 sur mes propres serveurs, et =E7a fonctionne suffisemment bien pour nos besoins, alors je crois pas qu'il va y avoir des probl=E8mes. Je vais enfin pouvoir commencer =E0 regarder vos nombreux features requests. :) A. --=20 If builders built houses the way programmers built programs, The first woodpecker to come along would destroy civilization. - Gerald Weinberg |