PageRenderTime 29ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/include/class.timetracker.php

https://gitlab.com/vectorci/Collabtive
PHP | 438 lines | 324 code | 62 blank | 52 comment | 27 complexity | a19f91d32244104add7486e394a89254 MD5 | raw file
  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.7.5
  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. return $insid;
  68. }
  69. else
  70. {
  71. return false;
  72. }
  73. }
  74. /**
  75. * Edit timetracker entry
  76. *
  77. * @param int $id Timetrack ID to edit
  78. * @param int $task Task ID the timetrack belongs to
  79. * @param string $comment Comment on the timetrack
  80. * @param string $started Startdate of the tracked time period
  81. * @param string $ended Enddate of the tracked time period
  82. * @return bool
  83. */
  84. function edit($id, $task, $comment, $started, $ended)
  85. {
  86. $comment = mysql_real_escape_string($comment);
  87. $started = (int) $started;
  88. $ended = (int) $ended;
  89. $id = (int) $id;
  90. $task = (int) $task;
  91. if ($started >= $ended)
  92. {
  93. return false;
  94. }
  95. $hours = $ended - $started;
  96. $hours = $hours / 3600;
  97. $hours = round($hours, 2);
  98. $upd = mysql_query("UPDATE timetracker SET task='$task',comment='$comment',started='$started',ended='$ended',hours='$hours' WHERE ID = $id");
  99. if ($upd)
  100. {
  101. return true;
  102. }
  103. else
  104. {
  105. return false;
  106. }
  107. }
  108. /**
  109. * Delete timetracker entry
  110. *
  111. * @return bool
  112. */
  113. function del($id)
  114. {
  115. $id = (int) $id;
  116. $del = mysql_query("DELETE FROM timetracker WHERE ID = $id");
  117. if ($del)
  118. {
  119. return true;
  120. }
  121. else
  122. {
  123. return false;
  124. }
  125. }
  126. function setPaystatus($pstatus, $id)
  127. {
  128. $pstatus = (int) $pstatus;
  129. $id = (int) $id;
  130. $upd = mysql_query("UPDATE timetracker SET pstatus = $pstatus WHERE ID = $id");
  131. if ($upd)
  132. {
  133. return true;
  134. }
  135. else
  136. {
  137. return false;
  138. }
  139. }
  140. /**
  141. * Return a timetrack
  142. *
  143. * @param int $id Timetrack ID
  144. * @return array $track
  145. */
  146. function getTrack($id)
  147. {
  148. $id = (int) $id;
  149. $sel = mysql_query("SELECT * FROM timetracker WHERE ID = $id");
  150. $track = array();
  151. $track = mysql_fetch_array($sel);
  152. if (!empty($track))
  153. {
  154. if (isset($track["started"]) and isset($track["ended"]))
  155. {
  156. $hours = $track["ended"] - $track["started"];
  157. $hours = $hours / 3600;
  158. $hours = round($hours, 2);
  159. $track["hours"] = $hours;
  160. $day = date("d.m.Y", $track["started"]);
  161. $track["started"] = date("H:i", $track["started"]);
  162. $track["ended"] = date("H:i", $track["ended"]);
  163. $track["day"] = $day;
  164. }
  165. if (isset($track["comment"]))
  166. {
  167. $track["comment"] = stripslashes($track["comment"]);
  168. }
  169. return $track;
  170. }
  171. else
  172. {
  173. return false;
  174. }
  175. }
  176. function getUserTrack($user, $project = 0, $task = 0, $start = 0, $end = 0 , $lim = 50)
  177. {
  178. $start = mysql_real_escape_string($start);
  179. $end = mysql_real_escape_string($end);
  180. $user = (int) $user;
  181. $project = (int) $project;
  182. $lim = (int) $lim;
  183. if ($project > 0)
  184. {
  185. $sql = "SELECT * FROM timetracker WHERE user = $user AND project = $project";
  186. $num = "SELECT COUNT(*) FROM timetracker WHERE project = $project AND user = $user";
  187. $order = " ORDER BY ended ASC";
  188. }
  189. else
  190. {
  191. $sql = "SELECT * FROM timetracker WHERE user = $user";
  192. $num = "SELECT COUNT(*) FROM timetracker WHERE user = $user";
  193. $order = " ORDER BY ended ASC";
  194. }
  195. if ($task > 0)
  196. {
  197. $sql .= " AND task = $task";
  198. $num .= " AND task = $task";
  199. }
  200. if ($start > 0 and $end > 0)
  201. {
  202. $start = strtotime($start);
  203. $end = strtotime($end . " +1 day");
  204. $end = $end - 1;
  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 = 50)
  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. $sql = $sql . $order;
  308. SmartyPaginate::connect();
  309. SmartyPaginate::setLimit($lim);
  310. SmartyPaginate::setTotal($num);
  311. $start = SmartyPaginate::getCurrentIndex();
  312. $lim = SmartyPaginate::getLimit();
  313. $limi = " LIMIT $start,$lim ";
  314. $sql = $sql . $limi;
  315. $sel = mysql_query($sql);
  316. $track = array();
  317. $ttask = new task();
  318. if (isset($sel))
  319. {
  320. while ($data = @mysql_fetch_array($sel))
  321. {
  322. $endstring = date("H:i", $data["ended"]);
  323. $startstring = date("H:i", $data["started"]);
  324. $daystring = date("d.m.y", $data["ended"]);
  325. $tasks = $ttask->getTask($data["task"]);
  326. if (!empty($tasks))
  327. {
  328. $tasks = $tasks["title"];
  329. $data["tname"] = $tasks;
  330. }
  331. $pname = mysql_query("SELECT name FROM projekte WHERE ID = $data[project]");
  332. $pname = mysql_fetch_row($pname);
  333. $pname = stripslashes($pname[0]);
  334. $uname = mysql_query("SELECT name FROM user WHERE ID = $data[user]");
  335. $uname = mysql_fetch_row($uname);
  336. $uname = stripslashes($uname[0]);
  337. $data["endstring"] = $endstring;
  338. $data["startstring"] = $startstring;
  339. $data["daystring"] = $daystring;
  340. $data["uname"] = $uname;
  341. $data["pname"] = $pname;
  342. $data["comment"] = stripslashes($data["comment"]);
  343. $data["comment"] = nl2br($data["comment"]);
  344. array_push($track, $data);
  345. }
  346. }
  347. if (!empty($track))
  348. {
  349. return $track;
  350. }
  351. else
  352. {
  353. return false;
  354. }
  355. }
  356. /**
  357. * Get total time spent on a given timetrack
  358. *
  359. * @param array $track Timetrack to evaluate
  360. * @return float $totaltime Total time spent on the timetrack
  361. */
  362. function getTotalTrackTime(array $track)
  363. {
  364. $totaltime = 0;
  365. foreach($track as $data)
  366. {
  367. $totaltime = $totaltime + $data["hours"];
  368. }
  369. if (!($totaltime > 0))
  370. {
  371. $totaltime = 0;
  372. }
  373. return $totaltime;
  374. }
  375. }
  376. ?>