PageRenderTime 43ms CodeModel.GetById 9ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/tasks/includes/tasks.inc.php

https://bitbucket.org/websightdesigns/project-manager
PHP | 393 lines | 373 code | 8 blank | 12 comment | 69 complexity | b90fd2df499f673c7179736837e0a626 MD5 | raw file
  1. <div class="navbar">
  2. <div class="navbar-inner">
  3. <div class="container">
  4. <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-tasks-collapse">
  5. <span class="icon-bar"></span>
  6. <span class="icon-bar"></span>
  7. <span class="icon-bar"></span>
  8. </a>
  9. <a class="brand" href="<?php echo $basehref; ?>tasks/">Tasks</a>
  10. <div class="nav-tasks-collapse nav-collapse collapse">
  11. <ul class="nav nav-pills">
  12. <li class="active"><a href="#incomplete" data-toggle="tab">Incomplete</a></li>
  13. <li><a href="#pastdue" data-toggle="tab">Past Due <span class="badge badge-important">6</span></a></li>
  14. <li><a href="#duethisweek" data-toggle="tab">Due This Week <span class="badge badge-important">3</span></a></li>
  15. <li><a href="#completed" data-toggle="tab">Completed <span class="badge badge-success">26</span></a></li>
  16. <li><a href="#milestones" data-toggle="tab">Milestones</a></li>
  17. <li><a href="#calendar" data-toggle="tab">Calendar</a></li>
  18. </ul>
  19. <div class="pull-right">
  20. <form class="navbar-search">
  21. <input type="text" id="searchbox" class="search-query" placeholder="Search Tasks" data-provide="typeahead">
  22. </form>
  23. </div>
  24. </div>
  25. </div>
  26. </div>
  27. </div>
  28. <div class="row">
  29. <div class="span6 pull-left">
  30. <?php $clocked_in = checkIfClockedIn(); ?>
  31. <form action="">
  32. <div class="timeclock">
  33. <input type="submit" id="timeclock" value="<?php if($clocked_in): ?>Clock Out<? else: ?>Clock In<? endif; ?>" class="btn">
  34. <span id="stopwatch"><?php if($clocked_in) echo getDuration(); else echo '00:00:00'; ?></span>
  35. </div>
  36. </form>
  37. </div>
  38. <div class="span6 pull-right">
  39. <button href="#addTask" role="button" class="btn btn-success pull-right" type="button" data-toggle="modal"><i class="icon-plus icon-white"></i> Add A New Task</button>
  40. </div>
  41. </div>
  42. <br clear="all" /><br clear="all" />
  43. <?php
  44. if(!isset($_POST['doAddTask'])) $_POST['doAddTask'] = "0";
  45. if($_POST['doAddTask'] == "1" && $_POST['projectid'] && $link) {
  46. // check if we should add a new project
  47. if($_POST['projectid'] == "0") {
  48. $project_sql = "INSERT INTO projects (
  49. `project_name`,
  50. `project_payment_type`,
  51. `project_hourly_rate`,
  52. `project_onetime_cost`,
  53. `project_half_upfront`,
  54. `created`,
  55. `clientid`,
  56. `userid`
  57. ) VALUES (
  58. '" . $_POST['new_project'] . "',
  59. '" . $_POST['project_payment_type'] . "',
  60. '" . $_POST['project_hourly_rate'] . "',
  61. '" . $_POST['project_onetime_cost'] . "',
  62. '" . $_POST['project_half_upfront'] . "',
  63. NOW(),
  64. '" . $_POST['clientid'] . "',
  65. '" . $_SESSION['userid_auth'] . "'
  66. )";
  67. $project_q = mysql_query($project_sql);
  68. $projectid = mysql_insert_id();
  69. } elseif($_POST['projectid'] != "X") {
  70. $projectid = $_POST['projectid'];
  71. }
  72. // add the task
  73. if($_POST['startdate']) $created = $_POST['startdate'];
  74. else $created = "NOW()";
  75. $insert_sql = "INSERT INTO tasks (
  76. `task_title`,
  77. `task_describe`,
  78. `created`,
  79. `userid`,
  80. `milestoneid`,
  81. `priority`,
  82. `duedate`,
  83. `projectid`
  84. ) VALUES (
  85. '" . $_POST['task_title'] . "',
  86. '" . $_POST['task_describe'] . "',
  87. $created,
  88. '" . $_SESSION['userid_auth'] . "',
  89. '0',
  90. '" . $_POST['priority'] . "',
  91. '" . $_POST['duedate'] . "',
  92. '" . $projectid . "'
  93. )";
  94. //echo $insert_sql . "<br />";
  95. $q = mysql_query($insert_sql);
  96. //$_SESSION["command_results"]["addtask"] = "Your task was added to the list.";
  97. //display_command_results("addtask");
  98. }
  99. // set date format
  100. if(getSetting("dateFormat", $_SESSION['userid_auth']) == "0") {
  101. $date_format_setting = "%b %e %Y";
  102. } else {
  103. $date_format_setting = getSetting("dateFormat", $_SESSION['userid_auth']);
  104. }
  105. if(!isset($_POST['search'])) $_POST['search'] = "";
  106. if ($_POST['search']) {
  107. $level_auth = getCurrentUserAccessLevel();
  108. $group_auth = getCurrentUserGroupID();
  109. $search_project = "Project: ";
  110. $search_client = "Client: ";
  111. // PROJECTS SECTION
  112. if(substr($_POST['search'], 0, strlen($search_project)) == $search_project) {
  113. $project_sql = "SELECT id FROM projects WHERE project_name LIKE '%" . str_replace($search_project, "", $_POST['search']) . "%'";
  114. $project_q = mysql_query($project_sql);
  115. while($i = mysql_fetch_object($project_q)) {
  116. $project_id = $i->id;
  117. }
  118. $sql = "SELECT tasks.`id` AS `id`,
  119. tasks.`task_title` AS `task_title`,
  120. tasks.`task_describe` AS `task_describe`,
  121. DATE_FORMAT(tasks.`created`, '" . $date_format_setting . ", %l:%i %p') AS `fcreated`,
  122. DATE_FORMAT(tasks.`modified`, '" . $date_format_setting . ", %l:%i %p') AS `fmodified`,
  123. DATE_FORMAT(tasks.`duedate`, '" . $date_format_setting . "') AS `fduedate`,
  124. tasks.`modified` AS `modified`,
  125. tasks.`duedate` AS `duedate`,
  126. tasks.`milestoneid` AS `milestoneid`,
  127. tasks.`projectid` AS `projectid`
  128. FROM tasks, projects, users
  129. WHERE projects.`userid`='" . $_SESSION['userid_auth'] . "'
  130. AND projects.`id` = tasks.`projectid`
  131. AND tasks.milestoneid='0'
  132. AND tasks.completed='0'
  133. AND tasks.projectid='" . $project_id . "'
  134. AND users.id=projects.userid";
  135. if($level_auth < "11" || ($level_auth == "11" && getSetting("onlyShowProjectsInMyGroup", $_SESSION['userid_auth']) == "1"))
  136. $sql .= "
  137. AND users.groupid = '" . $group_auth . "'";
  138. $sql .= " ORDER BY tasks.modified, tasks.priority ASC, tasks.created ASC";
  139. $search_text = "Tasks for the project <span id=\"searchcriteria\">Project: </span><span id=\"searchterm\">".str_replace($search_project, "", $_POST['search'])."</span>";
  140. // CLIENTS SECTION
  141. } elseif(substr($_POST['search'], 0, strlen($search_client)) == $search_client) {
  142. $client_sql = "SELECT id FROM clients WHERE fullname LIKE '%" . str_replace($search_client, "", $_POST['search']) . "%'";
  143. $client_q = mysql_query($client_sql);
  144. while($i = mysql_fetch_object($client_q)) {
  145. $clientid = $i->id;
  146. }
  147. $sql = "SELECT tasks.`id` AS `id`,
  148. tasks.`task_title` AS `task_title`,
  149. tasks.`task_describe` AS `task_describe`,
  150. DATE_FORMAT(tasks.`created`, '" . $date_format_setting . ", %l:%i %p') AS `fcreated`,
  151. DATE_FORMAT(tasks.`modified`, '" . $date_format_setting . ", %l:%i %p') AS `fmodified`,
  152. DATE_FORMAT(tasks.`duedate`, '" . $date_format_setting . "') AS `fduedate`,
  153. tasks.`modified` AS `modified`,
  154. tasks.`duedate` AS `duedate`,
  155. tasks.`projectid` AS `projectid`
  156. FROM tasks, projects, clients, users
  157. WHERE tasks.projectid=projects.id
  158. AND projects.clientid=clients.id
  159. AND clients.id='" . $clientid . "'
  160. AND projects.`userid`='" . $_SESSION['userid_auth'] . "'
  161. AND tasks.milestoneid='0'
  162. AND tasks.completed='0'
  163. AND users.id=projects.userid";
  164. if($level_auth < "11" || ($level_auth == "11" && getSetting("onlyShowProjectsInMyGroup", $_SESSION['userid_auth']) == "1"))
  165. $sql .= "
  166. AND users.groupid = '" . $group_auth . "'";
  167. $sql .= "
  168. ORDER BY tasks.modified, tasks.priority ASC, tasks.created ASC";
  169. $search_text = "Tasks for the client <span id=\"searchcriteria\">Project: </span><span id=\"searchterm\">".str_replace($search_client, "", $_POST['search'])."</span>";
  170. // TASKS SECTION
  171. } else {
  172. $sql = "SELECT tasks.`id` AS `id`,
  173. `task_title`,
  174. `task_describe`,
  175. completed,
  176. DATE_FORMAT(tasks.`created`, '" . $date_format_setting . ", %l:%i %p') AS `fcreated`,
  177. DATE_FORMAT(tasks.`modified`, '" . $date_format_setting . ", %l:%i %p') AS `fmodified`,
  178. tasks.`modified` AS `modified`,
  179. DATE_FORMAT(tasks.`duedate`, '" . $date_format_setting . "') AS `fduedate`,
  180. tasks.`duedate` AS `duedate`,
  181. milestoneid,
  182. projectid
  183. FROM tasks, projects, users
  184. WHERE projects.`userid`='" . $_SESSION['userid_auth'] . "'";
  185. if($level_auth < "11" || ($level_auth == "11" && getSetting("onlyShowProjectsInMyGroup", $_SESSION['userid_auth']) == "1"))
  186. $sql .= "
  187. AND users.groupid = '" . $group_auth . "'";
  188. $sql .= "
  189. AND users.id=projects.userid
  190. AND milestoneid='0'
  191. AND completed='0'
  192. AND task_title LIKE '%" . $_POST['search'] . "%'
  193. ORDER BY tasks.modified, tasks.priority ASC, tasks.created ASC";
  194. $search_text = "Search results for the search term <span id=\"searchcriteria\"></span><span id=\"searchterm\">".$_POST['search']."</span>";
  195. }
  196. // NO SEARCH, LOAD EVERYTHING
  197. } else {
  198. $sql = "SELECT tasks.`id`,
  199. tasks.`task_title`,
  200. tasks.`task_describe`,
  201. tasks.`completed`,
  202. DATE_FORMAT(tasks.`created`, '" . $date_format_setting . ", %l:%i %p') AS `fcreated`,
  203. DATE_FORMAT(tasks.`modified`, '" . $date_format_setting . ", %l:%i %p') AS `fmodified`,
  204. tasks.`modified` AS `modified`,
  205. DATE_FORMAT(tasks.`duedate`, '" . $date_format_setting . "') AS `fduedate`,
  206. tasks.`duedate` AS `duedate`,
  207. tasks.`milestoneid`,
  208. tasks.`projectid`
  209. FROM tasks, projects, users
  210. WHERE projects.id=tasks.projectid
  211. AND users.id=projects.userid";
  212. if($level_auth < "11" || ($level_auth == "11" && getSetting("onlyShowProjectsInMyGroup", $_SESSION['userid_auth']) == "1"))
  213. $sql .= "
  214. AND users.groupid = '" . $group_auth . "'";
  215. $sql .= "
  216. AND tasks.milestoneid='0'
  217. AND tasks.completed='0'
  218. ORDER BY tasks.sort ASC, tasks.priority ASC, tasks.created DESC";
  219. }
  220. //if($debugmode) echo "<div><pre>sql:<br />".$sql."</pre><br /></div>";
  221. $q = mysql_query($sql) or die("SQL Error: " . mysql_error());
  222. $total_numrows = mysql_num_rows($q);
  223. if($_POST['search']) echo "<p><strong>" . $search_text . "</strong></p>";
  224. ?>
  225. <div class="tab-content">
  226. <div class="tab-pane active" id="incomplete">
  227. <table id="tasks" class="table table-striped table-bordered table-condensed table-hover table-pager">
  228. <thead>
  229. <tr>
  230. <th>&nbsp;</th>
  231. <th>&nbsp;</th>
  232. <th>Task</th>
  233. <th>Milestone</th>
  234. <th>Project</th>
  235. <th>Due</th>
  236. <th>Last Updated</th>
  237. <th>&nbsp;</th>
  238. <th>&nbsp;</th>
  239. </tr>
  240. </thead>
  241. <tbody><?php
  242. if(($_POST['search'] && $total_numrows) || $total_numrows) {
  243. $j = 0;
  244. while($i = mysql_fetch_object($q)) {
  245. $id = $i->id;
  246. $task_title = $i->task_title;
  247. $completed = $i->completed;
  248. $fcreated = $i->fcreated;
  249. $fmodified = $i->fmodified;
  250. $modified = $i->modified;
  251. $fduedate = $i->fduedate;
  252. $duedate = $i->duedate;
  253. $project_name = getProjectName($i->projectid);
  254. if($j % 2 == 0) $rowcolor = "row"; else $rowcolor = "altrow";
  255. ?>
  256. <tr id="item_<?php echo $id; ?>">
  257. <td><input type="checkbox"<?php if($completed) echo ' checked="checked"'; ?> id="<? echo $id; ?>" title="Mark Completed"></td>
  258. <td><input type="radio" id="<?php echo $id; ?>" name="timeclock"<? if($clocked_in == $id) echo ' checked="checked" title="Clock Out"'; else echo ' title="Clock In"'; ?>></td>
  259. <td><a href="/modules/tasks/ajax/get_task.php?id=<?php echo $id; ?>" class="lightbox" rel="lightbox"><? echo $task_title; ?></a></td>
  260. <td><?php echo $milestone_name; ?></td>
  261. <td><?php echo $project_name; ?></td>
  262. <td><?php if($duedate != "0000-00-00" && $duedate != "") echo $fduedate; else echo '-'; ?></td>
  263. <td><?php if($modified == "0000-00-00 00:00:00") echo $fcreated; else echo $fmodified; ?></td>
  264. <td><button class="btn btn-danger pull-right delete" type="button" id="<?php echo $id; ?>"><i class="icon-trash icon-white"></i></button></td>
  265. <td><?php if(!$_POST['search']): ?><a class="btn pull-right drag" type="button"><i class="icon-align-justify icon-white"></i></a><? endif; ?></td>
  266. </tr>
  267. <?php
  268. $j++;
  269. }
  270. } elseif($_POST['search'] && !$total_numrows) {
  271. ?><tr class="notice"><td colspan="9">There are no incomplete tasks matching your search.</td></tr><?php
  272. } elseif(!$total_numrows) {
  273. ?><tr class="notice"><td colspan="9">No incomplete tasks. Time for a break!</td></tr><?php
  274. }
  275. ?>
  276. </tbody>
  277. <?php if($total_numrows > "10") pagination('8'); ?>
  278. </table>
  279. </div>
  280. <div class="tab-pane" id="pastdue">
  281. <h3>Past Due</h3>
  282. </div>
  283. <div class="tab-pane" id="duethisweek">
  284. <h3>Due This Week</h3>
  285. </div>
  286. <div class="tab-pane" id="completed">
  287. <h3>Completed</h3>
  288. </div>
  289. <div class="tab-pane" id="milestones">
  290. <h3>Milestones</h3>
  291. </div>
  292. <div class="tab-pane" id="calendar">
  293. <h3>Calendar</h3>
  294. </div>
  295. </div>
  296. <!-- Modal -->
  297. <div id="addTask" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="addTaskLabel" aria-hidden="true">
  298. <form method="post" action="<? echo $basehref; ?>tasks/" class="form-horizontal">
  299. <div class="modal-header">
  300. <button type="button" class="close" data-dismiss="modal" aria-hidden="true">?&#x2014;</button>
  301. <h3 id="addTaskLabel">Add A New Task</h3>
  302. </div>
  303. <div class="modal-body">
  304. <div class="control-group">
  305. <label class="control-label" for="task_title">Task Title</label>
  306. <div class="controls">
  307. <input type="text" id="task_title" name="task_title" placeholder="Task Title">
  308. </div>
  309. </div>
  310. <div class="control-group">
  311. <label class="control-label" for="task_describe">Description</label>
  312. <div class="controls">
  313. <textarea id="task_describe" name="task_describe" class="blurred" cols="52" rows="4" placeholder="Description"></textarea>
  314. </div>
  315. </div>
  316. <div class="control-group">
  317. <label class="control-label" for="startdate">Start</label>
  318. <div class="controls">
  319. <input type="text" name="fstartdate" id="startdate" placeholder="Start">
  320. </div>
  321. </div>
  322. <div class="control-group">
  323. <label class="control-label" for="duedate">Due</label>
  324. <div class="controls">
  325. <input type="text" name="fduedate" id="duedate" placeholder="Due">
  326. </div>
  327. </div>
  328. <div class="control-group">
  329. <label class="control-label" for="duedate">Priority</label>
  330. <div class="controls">
  331. <select id="prioritydropdown" name="priority">
  332. <option value="1">High</option>
  333. <option value="2" selected="selected">Normal</option>
  334. <option value="3">Low</option>
  335. </select>
  336. </div>
  337. </div>
  338. <div id="project" class="control-group">
  339. <label class="control-label" for="projectsdropdown">Project</label>
  340. <div class="controls">
  341. <select id="projectsdropdown" name="projectid">
  342. <option value="X">Please select...</option>
  343. <option value="0">Add A New Project</option>
  344. <?php
  345. $projects = getProjectsDropdown($seldb);
  346. // dbug($projects, 'projects: ', $debugmode);
  347. foreach($projects AS $project) {
  348. echo $project;
  349. }
  350. ?>
  351. </select>
  352. </div>
  353. </div>
  354. <div id="new_project" class="control-group">
  355. <label class="control-label" for="new_project_title">New Project Name</label>
  356. <div class="controls">
  357. <input type="text" id="new_project_name" name="new_project_name" placeholder="New Project Name">
  358. </div>
  359. </div>
  360. <div id="payment_type" class="control-group">
  361. <label class="control-label" for="paymenttypedropdown">Payment Type</label>
  362. <div class="controls">
  363. <select id="paymenttypedropdown" name="project_payment_type">
  364. <option value="hourly" selected="selected">Hourly</option>
  365. <option value="onetime">One-Time</option>
  366. <option value="none">None</option>
  367. </select>
  368. </div>
  369. </div>
  370. <div id="onetime_half_upfront" class="control-group">
  371. <div class="controls">
  372. <label class="checkbox">
  373. <input type="checkbox"> Payment of half up-front
  374. </label>
  375. </div>
  376. </div>
  377. </div>
  378. <div class="modal-footer">
  379. <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
  380. <button type="submit" class="btn btn-primary">Add Task</button>
  381. <input type="hidden" name="doAddTask" value="1" />
  382. </div>
  383. </form>
  384. </div>
  385. <? mysql_close($link); ?>