PageRenderTime 50ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/include/class.timetracker.php

https://bitbucket.org/icarito/pmc
PHP | 417 lines | 323 code | 42 blank | 52 comment | 27 complexity | fe67990525d04d9683829f6b57b2db04 MD5 | raw file
Possible License(s): GPL-3.0, LGPL-2.1
  1. <?php
  2. /**
  3. * This class provides methods to realize timetracking
  4. *
  5. * @author Open Dynamics <info@o-dyn.de>
  6. * @name timetracker
  7. * @version 0.4.7
  8. * @package Collabtive
  9. * @link http://www.o-dyn.de
  10. * @license http://opensource.org/licenses/gpl-license.php GNU General Public License v3 or later
  11. */
  12. class timetracker
  13. {
  14. private $mylog;
  15. /**
  16. * Constructor
  17. * Initialize the event log
  18. */
  19. function __construct()
  20. {
  21. $this->mylog = new mylog;
  22. }
  23. /**
  24. * Add timetracker entry
  25. *
  26. * @param int $user User ID the timetrack belongs to
  27. * @param int $project Project ID the timetrack belongs to
  28. * @param int $task Task ID the timetrack belongs to
  29. * @param string $comment Comment on the timetrack
  30. * @param string $started Startdate of the tracked time period
  31. * @param string $ended Enddate of the tracked time period
  32. * @return int $insid Mysql ID of the inserted timetrack
  33. */
  34. function add($user, $project, $task, $comment, $started, $ended, $logday = "")
  35. {
  36. $started = mysql_real_escape_string($started);
  37. $ended = mysql_real_escape_string($ended);
  38. $comment = mysql_real_escape_string($comment);
  39. $username = $_SESSION['username'];
  40. $user = (int) $user;
  41. $project = (int) $project;
  42. $task = (int) $task;
  43. if(!$logday)
  44. {
  45. $startdate = date("d.m.Y");
  46. }
  47. else
  48. {
  49. $startdate = $logday;
  50. }
  51. $started = $startdate . " " . $started;
  52. $started = strtotime($started);
  53. $ended = $startdate . " " . $ended;
  54. $ended = strtotime($ended);
  55. $hours = $ended - $started;
  56. $hours = $hours / 3600;
  57. $hours = round($hours, 2);
  58. if ($started >= $ended)
  59. {
  60. return false;
  61. }
  62. $ins = mysql_query("INSERT INTO timetracker (user,project,task,comment,started,ended,hours,pstatus) VALUES ($user,$project,$task,'$comment','$started','$ended','$hours',0)");
  63. if ($ins)
  64. {
  65. $insid = mysql_insert_id();
  66. $title = $username . " " . $hours . "h";
  67. $this->mylog->add($title, "track", 1, $project);
  68. return $insid;
  69. }
  70. else
  71. {
  72. return false;
  73. }
  74. }
  75. /**
  76. * Edit timetracker entry
  77. *
  78. * @param int $id Timetrack ID to edit
  79. * @param int $task Task ID the timetrack belongs to
  80. * @param string $comment Comment on the timetrack
  81. * @param string $started Startdate of the tracked time period
  82. * @param string $ended Enddate of the tracked time period
  83. * @return bool
  84. */
  85. function edit($id, $task, $comment, $started, $ended)
  86. {
  87. $comment = mysql_real_escape_string($comment);
  88. $started = (int) $started;
  89. $ended = (int) $ended;
  90. $id = (int) $id;
  91. $task = (int) $task;
  92. if ($started >= $ended)
  93. {
  94. return false;
  95. }
  96. $hours = $ended - $started;
  97. $hours = $hours / 3600;
  98. $hours = round($hours, 2);
  99. $upd = mysql_query("UPDATE timetracker SET task='$task',comment='$comment',started='$started',ended='$ended',hours='$hours' WHERE ID = $id");
  100. if ($upd)
  101. {
  102. return true;
  103. }
  104. else
  105. {
  106. return false;
  107. }
  108. }
  109. /**
  110. * Delete timetracker entry
  111. *
  112. * @return bool
  113. */
  114. function del($id)
  115. {
  116. $id = (int) $id;
  117. $del = mysql_query("DELETE FROM timetracker WHERE ID = $id");
  118. if ($del)
  119. {
  120. return true;
  121. }
  122. else
  123. {
  124. return false;
  125. }
  126. }
  127. function setPaystatus($pstatus, $id)
  128. {
  129. $pstatus = (int) $pstatus;
  130. $id = (int) $id;
  131. $upd = mysql_query("UPDATE timetracker SET pstatus = $pstatus WHERE ID = $id");
  132. if ($upd)
  133. {
  134. return true;
  135. }
  136. else
  137. {
  138. return false;
  139. }
  140. }
  141. /**
  142. * Return a timetrack
  143. *
  144. * @param int $id Timetrack ID
  145. * @return array $track
  146. */
  147. function getTrack($id)
  148. {
  149. $id = (int) $id;
  150. $sel = mysql_query("SELECT * FROM timetracker WHERE ID = $id");
  151. $track = array();
  152. $track = mysql_fetch_array($sel);
  153. if (!empty($track))
  154. {
  155. if (isset($track["started"]) and isset($track["ended"]))
  156. {
  157. $hours = $track["ended"] - $track["started"];
  158. $hours = $hours / 3600;
  159. $hours = round($hours, 2);
  160. $track["hours"] = $hours;
  161. $day = date("d.m.Y", $track["started"]);
  162. $track["started"] = date("H:i", $track["started"]);
  163. $track["ended"] = date("H:i", $track["ended"]);
  164. $track["day"] = $day;
  165. }
  166. if (isset($track["comment"]))
  167. {
  168. $track["comment"] = stripslashes($track["comment"]);
  169. }
  170. return $track;
  171. }
  172. else
  173. {
  174. return false;
  175. }
  176. }
  177. function getUserTrack($user, $project = 0, $task = 0, $start = 0, $end = 0 , $lim = 25)
  178. {
  179. $start = mysql_real_escape_string($start);
  180. $end = mysql_real_escape_string($end);
  181. $user = (int) $user;
  182. $project = (int) $project;
  183. $lim = (int) $lim;
  184. if ($project > 0)
  185. {
  186. $sql = "SELECT * FROM timetracker WHERE user = $user AND project = $project";
  187. $num = "SELECT COUNT(*) FROM timetracker WHERE project = $project AND user = $user";
  188. $order = " ORDER BY ended ASC";
  189. }
  190. else
  191. {
  192. $sql = "SELECT * FROM timetracker WHERE user = $user";
  193. $num = "SELECT COUNT(*) FROM timetracker WHERE user = $user";
  194. $order = " ORDER BY ended ASC";
  195. }
  196. if ($task > 0)
  197. {
  198. $sql .= " AND task = $task";
  199. $num .= " AND task = $task";
  200. }
  201. if ($start > 0 and $end > 0)
  202. {
  203. $start = strtotime($start);
  204. $end = strtotime($end);
  205. $sql .= " AND ended >=$start AND ended<=$end ";
  206. $num .= " AND ended >=$start AND ended<=$end ";
  207. }
  208. if ($num)
  209. {
  210. $num = mysql_fetch_row(mysql_query($num));
  211. $num = $num[0];
  212. }
  213. else
  214. {
  215. $num = 0;
  216. }
  217. $sql = $sql . $order;
  218. SmartyPaginate::connect();
  219. SmartyPaginate::setLimit($lim);
  220. SmartyPaginate::setTotal($num);
  221. $start = SmartyPaginate::getCurrentIndex();
  222. $lim = SmartyPaginate::getLimit();
  223. $limi = " LIMIT $start,$lim";
  224. $sql = $sql . $limi;
  225. $sel = mysql_query($sql);
  226. $track = array();
  227. $ttask = new task();
  228. if (isset($sel))
  229. {
  230. while ($data = @mysql_fetch_array($sel))
  231. {
  232. $endstring = date("H:i", $data["ended"]);
  233. $startstring = date("H:i", $data["started"]);
  234. $daystring = date("d.m.y", $data["ended"]);
  235. $tasks = $ttask->getTask($data["task"]);
  236. if (!empty($tasks))
  237. {
  238. $tasks = $tasks["title"];
  239. $data["tname"] = $tasks;
  240. }
  241. $pname = mysql_query("SELECT name FROM projekte WHERE ID = $data[project]");
  242. $pname = mysql_fetch_row($pname);
  243. $pname = stripslashes($pname[0]);
  244. $uname = mysql_query("SELECT name FROM user WHERE ID = $data[user]");
  245. $uname = mysql_fetch_row($uname);
  246. $uname = stripslashes($uname[0]);
  247. $data["endstring"] = $endstring;
  248. $data["startstring"] = $startstring;
  249. $data["daystring"] = $daystring;
  250. $data["uname"] = $uname;
  251. $data["pname"] = $pname;
  252. $data["comment"] = stripslashes($data["comment"]);
  253. $data["comment"] = nl2br($data["comment"]);
  254. array_push($track, $data);
  255. }
  256. }
  257. if (!empty($track))
  258. {
  259. return $track;
  260. }
  261. else
  262. {
  263. return false;
  264. }
  265. }
  266. function getProjectTrack($project, $user = 0, $task = 0, $start = 0, $end = 0, $lim = 25)
  267. {
  268. $start = mysql_real_escape_string($start);
  269. $end = mysql_real_escape_string($end);
  270. $project = (int) $project;
  271. $user = (int) $user;
  272. $lim = (int) $lim;
  273. if ($user > 0)
  274. {
  275. $sql = "SELECT * FROM timetracker WHERE project = $project AND user = $user";
  276. $num = "SELECT COUNT(*) FROM timetracker WHERE project = $project AND user = $user";
  277. $order = " ORDER BY ended ASC";
  278. }
  279. else
  280. {
  281. $sql = "SELECT * FROM timetracker WHERE project = $project";
  282. $num = "SELECT COUNT(*) FROM timetracker WHERE project = $project";
  283. $order = " ORDER BY ended ASC";
  284. }
  285. if ($task > 0)
  286. {
  287. $sql .= " AND task = $task";
  288. $num .= " AND task = $task";
  289. }
  290. if ($start > 0 and $end > 0)
  291. {
  292. $start = strtotime($start);
  293. $end = strtotime($end . " +1 day");
  294. $end = $end - 1;
  295. $sql .= " AND ended >=$start AND ended<=$end ";
  296. $num .= " AND ended >=$start AND ended<=$end ";
  297. }
  298. if ($num)
  299. {
  300. $num = mysql_fetch_row(mysql_query($num));
  301. $num = $num[0];
  302. }
  303. else
  304. {
  305. $num = 0;
  306. }
  307. SmartyPaginate::connect();
  308. SmartyPaginate::setLimit($lim);
  309. SmartyPaginate::setTotal($num);
  310. $start = SmartyPaginate::getCurrentIndex();
  311. $lim = SmartyPaginate::getLimit();
  312. $limi = " LIMIT $start,$lim ";
  313. $sql = $sql . $limi;
  314. $sel = mysql_query($sql);
  315. $track = array();
  316. $ttask = new task();
  317. if (isset($sel))
  318. {
  319. while ($data = @mysql_fetch_array($sel))
  320. {
  321. $endstring = date("H:i", $data["ended"]);
  322. $startstring = date("H:i", $data["started"]);
  323. $daystring = date("d.m.y", $data["ended"]);
  324. $tasks = $ttask->getTask($data["task"]);
  325. if (!empty($tasks))
  326. {
  327. $tasks = $tasks["title"];
  328. $data["tname"] = $tasks;
  329. }
  330. $pname = mysql_query("SELECT name FROM projekte WHERE ID = $data[project]");
  331. $pname = mysql_fetch_row($pname);
  332. $pname = stripslashes($pname[0]);
  333. $uname = mysql_query("SELECT name FROM user WHERE ID = $data[user]");
  334. $uname = mysql_fetch_row($uname);
  335. $uname = stripslashes($uname[0]);
  336. $data["endstring"] = $endstring;
  337. $data["startstring"] = $startstring;
  338. $data["daystring"] = $daystring;
  339. $data["uname"] = $uname;
  340. $data["pname"] = $pname;
  341. $data["comment"] = stripslashes($data["comment"]);
  342. $data["comment"] = nl2br($data["comment"]);
  343. array_push($track, $data);
  344. }
  345. }
  346. if (!empty($track))
  347. {
  348. return $track;
  349. }
  350. else
  351. {
  352. return false;
  353. }
  354. }
  355. /**
  356. * Get total time spent on a given timetrack
  357. *
  358. * @param array $track Timetrack to evaluate
  359. * @return float $totaltime Total time spent on the timetrack
  360. */
  361. function getTotalTrackTime(array $track)
  362. {
  363. $totaltime = 0;
  364. foreach($track as $data)
  365. {
  366. $totaltime = $totaltime + $data["hours"];
  367. }
  368. if (!($totaltime > 0))
  369. {
  370. $totaltime = 0;
  371. }
  372. return $totaltime;
  373. }
  374. }
  375. ?>