PageRenderTime 49ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/include/class.milestone.php

https://bitbucket.org/icarito/pmc
PHP | 645 lines | 430 code | 74 blank | 141 comment | 34 complexity | 168372a02eb160107a9f70632d4a62d6 MD5 | raw file
Possible License(s): GPL-3.0, LGPL-2.1
  1. <?php
  2. /**
  3. * This class provides methods to realize milestones
  4. *
  5. * @author Open Dynamics <info@o-dyn.de>
  6. * @name milestone
  7. * @package Collabtive
  8. * @version 0.4.5
  9. * @link http://www.o-dyn.de
  10. * @license http://opensource.org/licenses/gpl-license.php GNU General Public License v3 or later
  11. * @global $mylog
  12. */
  13. class milestone
  14. {
  15. private $mylog;
  16. /**
  17. * Constructor
  18. * Initialize the event log
  19. */
  20. function __construct()
  21. {
  22. $this->mylog = new mylog;
  23. }
  24. /**
  25. * Add a milestone
  26. *
  27. * @param int $project ID of the associated project
  28. * @param string $name Name of the milestone
  29. * @param string $desc Description
  30. * @param string $end Day the milestone is due
  31. * @param int $status Status (0 = finished, 1 = open)
  32. * @return bool
  33. */
  34. function add($project, $name, $desc, $end, $status)
  35. {
  36. $project = (int) $project;
  37. $name = mysql_real_escape_string($name);
  38. $desc = mysql_real_escape_string($desc);
  39. $start = time();
  40. $end = strtotime($end);
  41. $status = (int) $status;
  42. $ins = mysql_query("INSERT INTO milestones (`project`,`name`,`desc`,`start`,`end`,`status`) VALUES ($project,'$name','$desc','$start','$end',$status)");
  43. if ($ins)
  44. {
  45. $insid = mysql_insert_id();
  46. $this->mylog->add($name, 'milestone' , 1, $project);
  47. return $insid;
  48. }
  49. else
  50. {
  51. return false;
  52. }
  53. }
  54. /**
  55. * Edit a milestone
  56. *
  57. * @param int $id Milestone ID
  58. * @param string $name Name
  59. * @param string $desc Description
  60. * @param string $end Day it is due
  61. * @return bool
  62. */
  63. function edit($id, $name, $desc, $end)
  64. {
  65. $id = (int) $id;
  66. $name = mysql_real_escape_string($name);
  67. $desc = mysql_real_escape_string($desc);
  68. $end = strtotime($end);
  69. $upd = mysql_query("UPDATE milestones SET `name`='$name', `desc`='$desc', `end`='$end' WHERE ID=$id");
  70. if ($upd)
  71. {
  72. $nam = mysql_query("SELECT project,name FROM milestones WHERE ID = $id");
  73. $nam = mysql_fetch_row($nam);
  74. $project = $nam[0];
  75. $name = $nam[1];
  76. $this->mylog->add($name, 'milestone' , 2, $project);
  77. return true;
  78. }
  79. else
  80. {
  81. return false;
  82. }
  83. }
  84. /**
  85. * Delete a milestone
  86. *
  87. * @param int $id Milestone ID
  88. * @return bool
  89. */
  90. function del($id)
  91. {
  92. $id = (int) $id;
  93. $nam = mysql_query("SELECT project,name FROM milestones WHERE ID = $id");
  94. $del = mysql_query("DELETE FROM milestones WHERE ID = $id");
  95. $del1 = mysql_query("DELETE FROM milestones_assigned WHERE milestone = $id");
  96. if ($del)
  97. {
  98. $nam = mysql_fetch_row($nam);
  99. $project = $nam[0];
  100. $name = $nam[1];
  101. $this->mylog->add($name, 'milestone', 3, $project);
  102. return true;
  103. }
  104. else
  105. {
  106. return false;
  107. }
  108. }
  109. /**
  110. * Mark a milestone as open / active
  111. *
  112. * @param int $id Milestone ID
  113. * @return bool
  114. */
  115. function open($id)
  116. {
  117. $id = (int) $id;
  118. $upd = mysql_query("UPDATE milestones SET status = 1 WHERE ID = $id");
  119. if ($upd)
  120. {
  121. $nam = mysql_query("SELECT project,name FROM milestones WHERE ID = $id");
  122. $nam = mysql_fetch_row($nam);
  123. $project = $nam[0];
  124. $name = $nam[1];
  125. $this->mylog->add($name, 'milestone', 4, $project);
  126. return true;
  127. }
  128. else
  129. {
  130. return false;
  131. }
  132. }
  133. /**
  134. * Marka milestone as finished
  135. *
  136. * @param int $id Milestone ID
  137. * @return bool
  138. */
  139. function close($id)
  140. {
  141. $id = (int) $id;
  142. $upd = mysql_query("UPDATE milestones SET status = 0 WHERE ID = $id");
  143. $tasklists = $this->getMilestoneTasklists($id);
  144. if (!empty($tasklists))
  145. {
  146. foreach ($tasklists as $tasklist)
  147. {
  148. $tl = new tasklist();
  149. $tasks = $tl->getTasksFromList($tasklist[ID]);
  150. foreach ($tasks as $task)
  151. {
  152. $close_task = mysql_query("UPDATE tasks SET status = 0 WHERE ID = $task[ID]");
  153. }
  154. $close_tasklist = mysql_query("UPDATE tasklist SET status = 0 WHERE ID = $tasklist[ID]");
  155. }
  156. }
  157. if ($upd)
  158. {
  159. $nam = mysql_query("SELECT project,name FROM milestones WHERE ID = $id");
  160. $nam = mysql_fetch_row($nam);
  161. $project = $nam[0];
  162. $name = $nam[1];
  163. $this->mylog->add($name, 'milestone', 5, $project);
  164. return true;
  165. }
  166. else
  167. {
  168. return false;
  169. }
  170. }
  171. /**
  172. * Assign a milestone to a user
  173. *
  174. * @param int $milestone Milestone ID
  175. * @param int $user User ID
  176. * @return bool
  177. */
  178. function assign($milestone, $user)
  179. {
  180. $milestone = (int) $milestone;
  181. $user = (int) $user;
  182. $upd = mysql_query("INSERT INTO milestones_assigned (NULL,$user,$milestone)");
  183. if ($upd)
  184. {
  185. $nam = mysql_query("SELECT project,name FROM milestones WHERE ID = $id");
  186. $nam = mysql_fetch_row($nam);
  187. $project = $nam[0];
  188. $name = $nam[1];
  189. $this->mylog->add($name, 'milestone', 6, $project);
  190. return true;
  191. }
  192. else
  193. {
  194. return false;
  195. }
  196. }
  197. /**
  198. * Delete the assignment of a milestone to a given user
  199. *
  200. * @param int $milestone Milestone ID
  201. * @param int $user User ID
  202. * @return bool
  203. */
  204. function deassign($milestone, $user)
  205. {
  206. $milestone = (int) $milestone;
  207. $user = (int) $user;
  208. $upd = mysql_query("DELETE FROM milestones_assigned WHERE user = $user AND milestone = $milestone");
  209. if ($upd)
  210. {
  211. $nam = mysql_query("SELECT project,name FROM milestones WHERE ID = $id");
  212. $nam = mysql_fetch_row($nam);
  213. $project = $nam[0];
  214. $name = $nam[1];
  215. $this->mylog->add($name, 'milestone', 7, $project);
  216. return true;
  217. }
  218. else
  219. {
  220. return false;
  221. }
  222. }
  223. /**
  224. * Return a milestone with its tasklists
  225. *
  226. * @param int $id Milestone ID
  227. * @return array $milestone Milestone details
  228. */
  229. function getMilestone($id)
  230. {
  231. $id = (int) $id;
  232. $sel = mysql_query("SELECT * FROM milestones WHERE ID = $id");
  233. $milestone = mysql_fetch_array($sel);
  234. if (!empty($milestone))
  235. {
  236. $endstring = date(CL_DATEFORMAT, $milestone["end"]);
  237. $milestone["endstring"] = $endstring;
  238. $milestone["fend"] = $endstring;
  239. $startstring = date(CL_DATEFORMAT, $milestone["start"]);
  240. $milestone["startstring"] = $startstring;
  241. $milestone["name"] = stripslashes($milestone["name"]);
  242. $milestone["desc"] = stripslashes($milestone["desc"]);
  243. $psel = mysql_query("SELECT name FROM projekte WHERE ID = $milestone[project]");
  244. $pname = mysql_fetch_row($psel);
  245. $pname = $pname[0];
  246. $milestone["pname"] = $pname;
  247. $milestone["pname"] = stripslashes($milestone["pname"]);
  248. $dayslate = $this->getDaysLeft($milestone["end"]);
  249. $dayslate = str_replace("-", "" , $dayslate);
  250. $milestone["dayslate"] = $dayslate;
  251. $milestone["daysleft"] = $dayslate;
  252. $tasks = $this->getMilestoneTasklists($milestone["ID"]);
  253. $milestone["tasks"] = $tasks;
  254. $messages = $this->getMilestoneMessages($milestone["ID"]);
  255. $milestone["messages"] = $messages;
  256. return $milestone;
  257. }
  258. else
  259. {
  260. return false;
  261. }
  262. }
  263. /**
  264. * Return the latest milestones
  265. *
  266. * @param int $status Status (0 = finished, 1 = open)
  267. * @param int $num Number of milestones to return
  268. * @return array $milestones Details of the milestones
  269. */
  270. function getMilestones($status = 1, $num = 10)
  271. {
  272. $status = (int) $status;
  273. $num = (int) $num;
  274. $milestones = array();
  275. $sel = mysql_query("SELECT ID FROM milestones WHERE `status`=$status LIMIT $num");
  276. while ($milestone = mysql_fetch_array($sel))
  277. {
  278. $themilestone = $this->getMilestone($milestone["ID"]);
  279. array_push($milestones, $themilestone);
  280. }
  281. if (!empty($milestones))
  282. {
  283. return $milestones;
  284. }
  285. else
  286. {
  287. return false;
  288. }
  289. }
  290. /**
  291. * Return all finished milestones of a given project
  292. *
  293. * @param int $project Project ID
  294. * @return array $stones Details of the milestones
  295. */
  296. function getDoneProjectMilestones($project)
  297. {
  298. $project = (int) $project;
  299. $sel = mysql_query("SELECT ID FROM milestones WHERE project = $project AND status = 0 ORDER BY ID ASC");
  300. $stones = array();
  301. while ($milestone = mysql_fetch_array($sel))
  302. {
  303. $themilestone = $this->getMilestone($milestone["ID"]);
  304. array_push($stones, $themilestone);
  305. }
  306. if (!empty($stones))
  307. {
  308. return $stones;
  309. }
  310. else
  311. {
  312. return false;
  313. }
  314. }
  315. /**
  316. * Return all milestones of a given project
  317. *
  318. * @param int $project Project ID
  319. * @param int $lim Number of milestones to return
  320. * @return array $milestones Dateils of the late milestones
  321. */
  322. function getLateProjectMilestones($project, $lim = 10)
  323. {
  324. $project = (int) $project;
  325. $lim = (int) $lim;
  326. $tod = date("d.m.Y");
  327. $now = strtotime($tod);
  328. $milestones = array();
  329. $sql = "SELECT ID FROM milestones WHERE project = $project AND end < $now AND status = 1 ORDER BY end ASC LIMIT $lim";
  330. $sel1 = mysql_query($sql);
  331. while ($milestone = mysql_fetch_array($sel1))
  332. {
  333. if (!empty($milestone))
  334. {
  335. $themilestone = $this->getMilestone($milestone["ID"]);
  336. array_push($milestones, $themilestone);
  337. }
  338. }
  339. if (!empty($milestones))
  340. {
  341. return $milestones;
  342. }
  343. else
  344. {
  345. return false;
  346. }
  347. }
  348. /**
  349. * Return all open milestones of a given project
  350. *
  351. * @param int $project Project ID
  352. * @param int $lim Number of milestones to return
  353. * @return array $milestones Details of the open milestones
  354. */
  355. function getAllProjectMilestones($project, $lim = 10)
  356. {
  357. $project = (int) $project;
  358. $lim = (int) $lim;
  359. $tod = date("d.m.Y");
  360. $now = strtotime($tod);
  361. $milestones = array();
  362. $sql = "SELECT ID FROM milestones WHERE project = $project AND status = 1 ORDER BY end ASC LIMIT $lim";
  363. $sel1 = mysql_query($sql);
  364. while ($milestone = mysql_fetch_array($sel1))
  365. {
  366. if (!empty($milestone))
  367. {
  368. $themilestone = $this->getMilestone($milestone["ID"]);
  369. array_push($milestones, $themilestone);
  370. }
  371. }
  372. if (!empty($milestones))
  373. {
  374. return $milestones;
  375. }
  376. else
  377. {
  378. return false;
  379. }
  380. }
  381. /**
  382. * Return all milestone of a given project, that are not late
  383. *
  384. * @param int $project Project ID
  385. * @param int $lim Number of milestones to return
  386. * @return array $milestones Details of the milestones
  387. */
  388. function getProjectMilestones($project, $lim = 10)
  389. {
  390. $project = (int) $project;
  391. $lim = (int) $lim;
  392. $now = time();
  393. $milestones = array();
  394. $sql = "SELECT * FROM milestones WHERE project = $project AND end > $now AND status = 1 ORDER BY end ASC LIMIT $lim";
  395. $sel1 = mysql_query($sql);
  396. while ($milestone = mysql_fetch_array($sel1))
  397. {
  398. $themilestone = $this->getMilestone($milestone["ID"]);
  399. array_push($milestones, $themilestone);
  400. }
  401. if (!empty($milestones))
  402. {
  403. return $milestones;
  404. }
  405. else
  406. {
  407. return false;
  408. }
  409. }
  410. /**
  411. * Return all milestones of a projects, that are due today
  412. *
  413. * @param int $project Project ID
  414. * @param int $lim Number of milestones to return
  415. * @return array $milestones Details of the milestones
  416. */
  417. function getTodayProjectMilestones($project, $lim = 10)
  418. {
  419. $project = (int) $project;
  420. $lim = (int) $lim;
  421. $tod = date("d.m.Y");
  422. $now = strtotime($tod);
  423. $milestones = array();
  424. $sel1 = mysql_query("SELECT * FROM milestones WHERE project = $project AND end = '$now' AND status = 1 ORDER BY end ASC LIMIT $lim");
  425. while ($milestone = mysql_fetch_array($sel1))
  426. {
  427. $themilestone = $this->getMilestone($milestone["ID"]);
  428. array_push($milestones, $themilestone);
  429. }
  430. if (!empty($milestones))
  431. {
  432. return $milestones;
  433. }
  434. else
  435. {
  436. return false;
  437. }
  438. }
  439. /**
  440. * Return all milestones of that belong to the loggedin user, due on a given day.
  441. * This method is needed for populating the calendar widget with data.
  442. *
  443. * @param int $m Month Month, without leading zero (e.g. 5 for march)
  444. * @param int $y Year Year in format yyyy
  445. * @param int $d Day Without leading zero (e.g. 1 for the 1st of the month $m in year $y)
  446. * @return array $milestones Details of the milestones
  447. */
  448. function getTodayMilestones($m, $y, $d, $project = 0)
  449. {
  450. $m = (int) $m;
  451. $y = (int) $y;
  452. if ($m > 9)
  453. {
  454. $startdate = date($d . "." . $m . "." . $y);
  455. }
  456. else
  457. {
  458. $startdate = date($d . ".0" . $m . "." . $y);
  459. }
  460. $starttime = strtotime($startdate);
  461. $user = (int) $_SESSION["userid"];
  462. $timeline = array();
  463. if ($project > 0)
  464. {
  465. $sel1 = mysql_query("SELECT * FROM milestones WHERE project = $project AND status=1 AND end = '$starttime'");
  466. }
  467. else
  468. {
  469. $sel1 = mysql_query("SELECT milestones.*,projekte_assigned.user FROM milestones,projekte_assigned WHERE milestones.project = projekte_assigned.projekt HAVING projekte_assigned.user = $user AND status=1 AND end = '$starttime'");
  470. }
  471. while ($stone = mysql_fetch_array($sel1))
  472. {
  473. $stone["daysleft"] = $this->getDaysLeft($stone["end"]);
  474. array_push($timeline, $stone);
  475. }
  476. if (!empty($timeline))
  477. {
  478. return $timeline;
  479. }
  480. else
  481. {
  482. return array();
  483. }
  484. }
  485. /**
  486. * Return all open tasklists associated to a given milestones
  487. *
  488. * @param int $milestone Milestone ID
  489. * @return array $lists Details of the tasklists
  490. */
  491. private function getMilestoneTasklists($milestone)
  492. {
  493. $milestone = (int) $milestone;
  494. $sel = mysql_query("SELECT * FROM tasklist WHERE milestone = $milestone AND status = 1");
  495. $lists = array();
  496. if ($milestone)
  497. {
  498. while ($list = mysql_fetch_array($sel))
  499. {
  500. $list["name"] = stripslashes($list["name"]);
  501. $list["desc"] = stripslashes($list["desc"]);
  502. array_push($lists, $list);
  503. }
  504. }
  505. if (!empty($lists))
  506. {
  507. return $lists;
  508. }
  509. else
  510. {
  511. return false;
  512. }
  513. }
  514. private function getMilestoneMessages($milestone)
  515. {
  516. $milestone = (int) $milestone;
  517. $sel = mysql_query("SELECT ID,title FROM messages WHERE milestone = $milestone");
  518. $msgs = array();
  519. while ($msg = mysql_fetch_array($sel))
  520. {
  521. array_push($msgs, $msg);
  522. }
  523. if (!empty($msgs))
  524. {
  525. return $msgs;
  526. }
  527. }
  528. /**
  529. * Return the days left from today until a given point in time
  530. *
  531. * @param int $end Point in time
  532. * @return int $days Days left
  533. */
  534. private function getDaysLeft($end)
  535. {
  536. $tod = date("d.m.Y");
  537. $now = strtotime($tod);
  538. $diff = $end - $now;
  539. $days = floor($diff / 86400);
  540. return $days;
  541. }
  542. /**
  543. * Format a milestone's timestamp
  544. *
  545. * @param int $milestones Milestone ID
  546. * @param int $format Wanted time format
  547. * @return array $milestones Milestone with the formatted timestamp
  548. */
  549. function formatdate(array $milestones)
  550. {
  551. $cou = 0;
  552. if ($milestones)
  553. {
  554. foreach($milestones as $stone)
  555. {
  556. $datetime = date(CL_DATEFORMAT, $stone[5]);
  557. $milestones[$cou]["due"] = $datetime;
  558. $cou = $cou + 1;
  559. }
  560. }
  561. if (!empty($milestones))
  562. {
  563. return $milestones;
  564. }
  565. else
  566. {
  567. return false;
  568. }
  569. }
  570. }
  571. ?>