diff --git a/css/style.css b/css/style.css index 640dd417790e969d9d5bbff33283ac262e60e02f..7795a0b0b4e3c5419bdb85c739056dae4ac21182 100644 --- a/css/style.css +++ b/css/style.css @@ -35,6 +35,10 @@ margin-top: 20px !important;; } +.margin-top-huge{ + margin-top: 10rem !important;; +} + .margin-bottom{ margin-bottom: 20px !important; } diff --git a/php/error.php b/php/error.php new file mode 100644 index 0000000000000000000000000000000000000000..630f6d69d85aa1e82b94920fde87b8c18bf7e049 --- /dev/null +++ b/php/error.php @@ -0,0 +1,56 @@ +<!DOCTYPE html> + +<?php +include_once('getLanguageJSON.php'); +?> +<html xmlns="http://www.w3.org/1999/html"> + <head> + <meta charset="UTF-8"/> + <title>Roadmap</title> + <!--Import Google Icon Font--> + <link href="http://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> + <!--Import materialize.css--> + <link type="text/css" rel="stylesheet" href="../materialize/css/materialize.min.css" media="screen,projection"/> + <link type="text/css" rel="stylesheet" href="../css/style.css"/> + + <!--Import jQuery before materialize.js--> + <script type="text/javascript" src="../js/jquery-2.2.4.min.js"></script> + <script type="text/javascript" src="../materialize/js/materialize.min.js"></script> + <script type="text/javascript" src="../js/main.js"></script> + <script type="text/javascript" src="../js/ResizeSensor.js"></script> + <script type="text/javascript" src="../js/ElementQueries.js"></script> + + <!--Let browser know website is optimized for mobile--> + <meta name="viewport" content="width=device-width, initial-scale=1.0"/> + </head> + + <body class="grey lighten-3"> + <main> + <div class="container"> + <div class="row"> + <div class="s6 offset-s3 center-align margin-top-huge"> + <h5> + <?php + if(isset($_GET['message'])) + { + if($languageJSON->{$_GET['message']}) + { + echo $languageJSON->{$_GET['message']}; + } + else + { + echo $languageJSON->error_general; + } + } + else + { + echo $languageJSON->error_general; + } + ?> + </h5> + </div> + </div> + </div> + </main> + </body> +</html> \ No newline at end of file diff --git a/php/index.php b/php/index.php index 994258c0d9af369fd1f6acf7e1bc30437664a3ea..84a465828410a5bb166b20569a509c4b2a4894cc 100644 --- a/php/index.php +++ b/php/index.php @@ -6,15 +6,15 @@ include_once('mysql.php'); if(!isset($_GET['id'])) { - //TODO - die("get param missing"); + header('Location: error.php?message=error_param_missing'); + exit; } $ID = $_GET['id']; if(!is_numeric($ID) || $ID < 1) { - //TODO - die("param is not numeric or less than 1"); + header('Location: error.php?message=error_param_invalid'); + exit; } $db = new DB(); @@ -23,16 +23,16 @@ $db->createTables(); $projectName = $db->getRoadmap($ID); if($projectName == false) { - //TODO - die("no roadmap with this ID existing"); + header('Location: error.php?message=error_roadmap_not_existing'); + exit; } $projectName = $projectName["Projectname"]; $milestones = $db->getMilestones($ID); if($milestones == false) { - //TODO - die("no milestones for this roadmap"); + header('Location: error.php?message=error_no_milestones'); + exit; } $numberOfMilestones = sizeof($milestones); @@ -40,8 +40,8 @@ $numberOfMilestones = sizeof($milestones); $numberofOpenMilestones = $db->getNumberOfOpenMilestones($ID); if($numberofOpenMilestones == false) { - //TODO - die("error getting open milestones"); + header('Location: error.php?message=error_database_connection'); + exit; } $numberofOpenMilestones = $numberofOpenMilestones['count']; @@ -77,48 +77,12 @@ $numberofOpenMilestones = $numberofOpenMilestones['count']; <div class="col s1 m2 l2 offset-m1 offset-l1 no-padding"> <div class="hide-on-small-only trainmap"> <?php - for($i = 0; $i < $numberofOpenMilestones; $i++) - { - echo '<div class="train-circle train-circle-light"></div>'; - - if($numberofOpenMilestones != $numberOfMilestones || $i != ($numberofOpenMilestones-1)) - { - echo '<div class="train-line dotted"></div>'; - } - } - - for($i = 0; $i < ($numberOfMilestones - $numberofOpenMilestones); $i++) - { - echo '<div class="train-circle blue"></div>'; - - if($i != (($numberOfMilestones - $numberofOpenMilestones) - 1)) - { - echo '<div class="train-line"></div>'; - } - } + createTrainmapMedAndUp($numberofOpenMilestones, $numberOfMilestones); ?> </div> <div class="hide-on-med-and-up trainmap-small"> <?php - for($i = 0; $i < $numberofOpenMilestones; $i++) - { - echo '<div class="train-circle train-circle-light train-circle-small"></div>'; - - if($numberofOpenMilestones != $numberOfMilestones || $i != ($numberofOpenMilestones-1)) - { - echo '<div class="train-line dotted-small train-line-small"></div>'; - } - } - - for($i = 0; $i < ($numberOfMilestones - $numberofOpenMilestones); $i++) - { - echo '<div class="train-circle blue train-circle-small"></div>'; - - if($i != (($numberOfMilestones - $numberofOpenMilestones) - 1)) - { - echo '<div class="train-line train-line-small"></div>'; - } - } + createTrainmapSmall($numberofOpenMilestones, $numberOfMilestones); ?> </div> </div> @@ -149,159 +113,11 @@ $numberofOpenMilestones = $numberofOpenMilestones['count']; $tasks = $db->getTasks($currentMilestone['ID']); if($tasks == false) { - echo '<div class="card padding white milestone">' . - '<div class="card-content">' . - '<div class="'.$color.' center-align milestone-title">' . - '<span class="card-title bold padding-left-and-right truncate">' . $currentMilestone['VersionName'] . ' - ' . $currentMilestone['Title'] . '</span>' . - '</div>' . - '<div class="milestone-content margin-top">' . - '<div class="white progress-container">'. - '<div class="progress grey lighten-2 high-progress margin-bottom">'. - '<div class="determinate green" style="width: 0%"></div>'. - '</div>'. - '</div>'. - '<div class="row">' . - '<div class="col s6 valign-wrapper">' . - '<i class="material-icons valign">event</i><span class="valign margin-left">' . $languageJSON->due_by . ' ' . $dueDate . '</span>' . - '</div>' . - '<div class="col s6 valign-wrapper">' . - '<i class="material-icons valign">event</i><span class="valign margin-left">0% ' . $languageJSON->done . '</span>' . - '</div>' . - '</div>' . - '</div>' . - '</div>' . - '</div>'; + printMilestoneIndevAndNoTasks($color, $currentMilestone, $dueDate, $languageJSON); } else { - $dueDate = $currentMilestone['DueDate']; - if($dueDate == "2000-01-01") - { - $dueDate = "-"; - } - else - { - $dueDate = date_create($dueDate); - $dueDate = date_format($dueDate, "d.m.Y"); - } - - $completionDate = $currentMilestone['CompletionDate']; - $completionDate = date_create($completionDate); - $completionDate = date_format($completionDate, "d.m.Y"); - - $numberOfOpenTasks = $db->getNumberOfOpenTasks($currentMilestone['ID']); - if($numberOfOpenTasks == false) - { - //TODO - } - else - { - $numberOfOpenTasks = $numberOfOpenTasks['count']; - $percentage = ($numberOfOpenTasks / sizeof($tasks))*100; - $percentage = round($percentage); - - echo '<div class="card padding white milestone">' . - '<div class="card-content">' . - '<div class="'.$color.' center-align milestone-title">' . - '<span class="card-title bold padding-left-and-right truncate">' . $currentMilestone['VersionName'] . ' - ' . $currentMilestone['Title'] . '</span>' . - '</div>' . - '<div class="milestone-content margin-top">' . - '<div class="white progress-container">'. - '<div class="progress grey lighten-2 high-progress margin-bottom">'. - '<div class="determinate green" style="width: '.$percentage.'%"></div>'. - '</div>'. - '</div>'. - '<div class="row">' . - '<div class="col s6 valign-wrapper">' . - '<i class="material-icons valign">event</i><span class="valign margin-left">' . $languageJSON->due_by . ' ' . $dueDate . '</span>' . - '</div>' . - '<div class="col s6 valign-wrapper">' . - '<i class="material-icons valign">event</i><span class="valign margin-left">'.$percentage.'% ' . $languageJSON->done .'</span>' . - '</div>' . - '</div>' . - '<ul class="collapsible white" data-collapsible="accordion">'; - for($k = 0; $k < sizeof($tasks); $k++) - { - $currentTask = $tasks[$k]; - - $subtasks = $db->getSubtasks($currentTask['ID']); - if($subtasks == false) - { - //inDev - if($currentTask['Status'] == 0) - { - echo '<li>' . - '<div class="collapsible-header bold"><i class="material-icons red-text">build</i>' . $currentTask['Title'] . '</div>' . - '<div class="collapsible-body"><p>' . $currentTask['Description'] . '</p></div>' . - '</li>'; - } - //done - else - { - echo '<li>' . - '<div class="collapsible-header bold"><i class="material-icons green-text">check</i>' . $currentTask['Title'] . '</div>' . - '<div class="collapsible-body"><p>' . $currentTask['Description'] . '</p></div>' . - '</li>'; - } - } - else - { - $numberOfOpenSubtasks = $db->getNumberOfOpenSubtasks($currentTask['ID']); - if($numberOfOpenSubtasks == false) - { - //TODO - } - else - { - $numberOfOpenSubtasks = $numberOfOpenSubtasks['count']; - if($numberOfOpenSubtasks == sizeof($subtasks)) - { - echo '<li>' . - '<div class="collapsible-header bold"><i class="material-icons green-text">check</i>Layout<span class="right">' . $numberOfOpenSubtasks . '/' . sizeof($subtasks) . '</span></div>' . - '<div class="collapsible-body">' . - '<ul class="collapsible white margin-left-and-right no-shadow margin-top-and-bottom" data-collapsible="accordion">'; - } - else - { - echo '<li>' . - '<div class="collapsible-header bold"><i class="material-icons red-text">build</i>Layout<span class="right">' . $numberOfOpenSubtasks . '/' . sizeof($subtasks) . '</span></div>' . - '<div class="collapsible-body">' . - '<ul class="collapsible white margin-left-and-right no-shadow margin-top-and-bottom" data-collapsible="accordion">'; - } - - for($m = 0; $m < sizeof($subtasks); $m++) - { - $currentSubTask = $subtasks[$m]; - //inDev - if($currentSubTask['Status'] == 0) - { - echo '<li>' . - '<div class="collapsible-header bold"><span class="left">' . ($m + 1) . '</span><i class="material-icons red-text margin-left">build</i>' . $currentSubTask['Title'] . '</div>' . - '<div class="collapsible-body"><p>' . $currentSubTask['Description'] . '</p></div>' . - '</li>'; - } - //done - else - { - echo '<li>' . - '<div class="collapsible-header bold"><span class="left">' . ($m + 1) . '</span><i class="material-icons green-text margin-left">check</i>' . $currentSubTask['Title'] . '</div>' . - '<div class="collapsible-body"><p>' . $currentSubTask['Description'] . '</p></div>' . - '</li>'; - } - } - - echo '</ul>' . - '</div>' . - '</li>'; - } - } - } - - echo '</ul>' . - '</div>' . - '</div>' . - '</div>'; - } + printMilestoneIndevWithTasks($currentMilestone, $db, $tasks, $color, $languageJSON); } } //Milestone is done @@ -334,124 +150,11 @@ $numberofOpenMilestones = $numberofOpenMilestones['count']; $tasks = $db->getTasks($currentMilestone['ID']); if($tasks == false) { - echo '<div class="card padding white milestone">' . - '<div class="card-content">' . - '<div class="'.$color.' center-align milestone-title">' . - '<span class="card-title bold padding-left-and-right truncate">' . $currentMilestone['VersionName'] . ' - ' . $currentMilestone['Title'] . '</span>' . - '</div>'; - - if($isFirstMilestone) - { - echo '<div class="milestone-content margin-top init-as-expanded">'; - } - else - { - echo '<div class="milestone-content margin-top">'; - } - - echo '<div class="row">' . - '<div class="col s6 valign-wrapper">' . - '<i class="material-icons valign">event</i><span class="valign margin-left">' . $languageJSON->due_by . ' ' . $dueDate . '</span>' . - '</div>' . - '<div class="col s6 valign-wrapper">' . - '<i class="material-icons valign">event</i><span class="valign margin-left">' . $languageJSON->done_at . ' ' . $completionDate . '</span>' . - '</div>' . - '</div>' . - '</div>' . - '</div>' . - '</div>'; + printMilestoneDoneAndNoTasks($color, $currentMilestone, $isFirstMilestone, $languageJSON, $dueDate, $completionDate); } else { - echo '<div class="card padding white milestone">' . - '<div class="card-content">' . - '<div class="'.$color.' center-align milestone-title">' . - '<span class="card-title bold padding-left-and-right truncate">' . $currentMilestone['VersionName'] . ' - ' . $currentMilestone['Title'] . '</span>' . - '</div>'; - - if($isFirstMilestone) - { - echo '<div class="milestone-content margin-top init-as-expanded">'; - } - else - { - echo '<div class="milestone-content margin-top">'; - } - - echo '<div class="row">' . - '<div class="col s6 valign-wrapper">' . - '<i class="material-icons valign">event</i><span class="valign margin-left">' . $languageJSON->due_by . ' ' . $dueDate . '</span>' . - '</div>' . - '<div class="col s6 valign-wrapper">' . - '<i class="material-icons valign">event</i><span class="valign margin-left">' . $languageJSON->done_at . ' ' . $completionDate . '</span>' . - '</div>' . - '</div>' . - '<ul class="collapsible white" data-collapsible="accordion">'; - for($k = 0; $k < sizeof($tasks); $k++) - { - $currentTask = $tasks[$k]; - - $subtasks = $db->getSubtasks($currentTask['ID']); - if($subtasks == false) - { - echo '<li>' . - '<div class="collapsible-header bold"><i class="material-icons green-text">check</i>' . $currentTask['Title'] . '</div>' . - '<div class="collapsible-body"><p>' . $currentTask['Description'] . '</p></div>' . - '</li>'; - } - else - { - $numberOfOpenSubtasks = $db->getNumberOfOpenSubtasks($currentTask['ID']); - if($numberOfOpenSubtasks != false) - { - $numberOfOpenSubtasks = $numberOfOpenSubtasks['count']; - if($numberOfOpenSubtasks == sizeof($subtasks)) - { - echo '<li>' . - '<div class="collapsible-header bold"><i class="material-icons green-text">check</i>Layout<span class="right">' . $numberOfOpenSubtasks . '/' . sizeof($subtasks) . '</span></div>' . - '<div class="collapsible-body">' . - '<ul class="collapsible white margin-left-and-right no-shadow margin-top-and-bottom" data-collapsible="accordion">'; - } - else - { - echo '<li>' . - '<div class="collapsible-header bold"><i class="material-icons red-text">build</i>Layout<span class="right">' . $numberOfOpenSubtasks . '/' . sizeof($subtasks) . '</span></div>' . - '<div class="collapsible-body">' . - '<ul class="collapsible white margin-left-and-right no-shadow margin-top-and-bottom" data-collapsible="accordion">'; - } - - for($m = 0; $m < sizeof($subtasks); $m++) - { - $currentSubTask = $subtasks[$m]; - //inDev - if($currentSubTask['Status'] == 0) - { - echo '<li>' . - '<div class="collapsible-header bold"><span class="left">' . ($m + 1) . '</span><i class="material-icons red-text margin-left">build</i>' . $currentSubTask['Title'] . '</div>' . - '<div class="collapsible-body"><p>' . $currentSubTask['Description'] . '</p></div>' . - '</li>'; - } - //done - else - { - echo '<li>' . - '<div class="collapsible-header bold"><span class="left">' . ($m + 1) . '</span><i class="material-icons green-text margin-left">check</i>' . $currentSubTask['Title'] . '</div>' . - '<div class="collapsible-body"><p>' . $currentSubTask['Description'] . '</p></div>' . - '</li>'; - } - } - - echo '</ul>' . - '</div>' . - '</li>'; - } - } - } - - echo '</ul>' . - '</div>' . - '</div>' . - '</div>'; + printMilestoneDoneWithTasks($color, $currentMilestone, $isFirstMilestone, $languageJSON, $dueDate, $completionDate, $tasks, $db); } if($isFirstMilestone) @@ -467,4 +170,337 @@ $numberofOpenMilestones = $numberofOpenMilestones['count']; </div> </div> </body> -</html> \ No newline at end of file +</html> + + + +<?php +function createTrainmapMedAndUp($numberofOpenMilestones, $numberOfMilestones) +{ + for($i = 0; $i < $numberofOpenMilestones; $i++) + { + echo '<div class="train-circle train-circle-light"></div>'; + + if($numberofOpenMilestones != $numberOfMilestones || $i != ($numberofOpenMilestones-1)) + { + echo '<div class="train-line dotted"></div>'; + } + } + + for($i = 0; $i < ($numberOfMilestones - $numberofOpenMilestones); $i++) + { + echo '<div class="train-circle blue"></div>'; + + if($i != (($numberOfMilestones - $numberofOpenMilestones) - 1)) + { + echo '<div class="train-line"></div>'; + } + } +} + +function createTrainmapSmall($numberofOpenMilestones, $numberOfMilestones) +{ + for($i = 0; $i < $numberofOpenMilestones; $i++) + { + echo '<div class="train-circle train-circle-light train-circle-small"></div>'; + + if($numberofOpenMilestones != $numberOfMilestones || $i != ($numberofOpenMilestones-1)) + { + echo '<div class="train-line dotted-small train-line-small"></div>'; + } + } + + for($i = 0; $i < ($numberOfMilestones - $numberofOpenMilestones); $i++) + { + echo '<div class="train-circle blue train-circle-small"></div>'; + + if($i != (($numberOfMilestones - $numberofOpenMilestones) - 1)) + { + echo '<div class="train-line train-line-small"></div>'; + } + } +} + +function printMilestoneIndevAndNoTasks($color, $currentMilestone, $dueDate, $languageJSON) +{ + echo '<div class="card padding white milestone">' . + '<div class="card-content">' . + '<div class="'.$color.' center-align milestone-title">' . + '<span class="card-title bold padding-left-and-right truncate">' . $currentMilestone['VersionName'] . ' - ' . $currentMilestone['Title'] . '</span>' . + '</div>' . + '<div class="milestone-content margin-top">' . + '<div class="white progress-container">'. + '<div class="progress grey lighten-2 high-progress margin-bottom">'. + '<div class="determinate green" style="width: 0%"></div>'. + '</div>'. + '</div>'. + '<div class="row">' . + '<div class="col s6 valign-wrapper">' . + '<i class="material-icons valign">event</i><span class="valign margin-left">' . $languageJSON->due_by . ' ' . $dueDate . '</span>' . + '</div>' . + '<div class="col s6 valign-wrapper">' . + '<i class="material-icons valign">event</i><span class="valign margin-left">0% ' . $languageJSON->done . '</span>' . + '</div>' . + '</div>' . + '</div>' . + '</div>' . + '</div>'; +} + +function printMilestoneIndevWithTasks($currentMilestone, $db, $tasks, $color, $languageJSON) +{ + $dueDate = $currentMilestone['DueDate']; + if($dueDate == "2000-01-01") + { + $dueDate = "-"; + } + else + { + $dueDate = date_create($dueDate); + $dueDate = date_format($dueDate, "d.m.Y"); + } + + $numberOfOpenTasks = $db->getNumberOfOpenTasks($currentMilestone['ID']); + if($numberOfOpenTasks == false) + { + header('Location: error.php?message=error_database_connection'); + exit; + } + else + { + $numberOfOpenTasks = $numberOfOpenTasks['count']; + $percentage = ($numberOfOpenTasks / sizeof($tasks))*100; + $percentage = round($percentage); + + echo '<div class="card padding white milestone">' . + '<div class="card-content">' . + '<div class="'.$color.' center-align milestone-title">' . + '<span class="card-title bold padding-left-and-right truncate">' . $currentMilestone['VersionName'] . ' - ' . $currentMilestone['Title'] . '</span>' . + '</div>' . + '<div class="milestone-content margin-top">' . + '<div class="white progress-container">'. + '<div class="progress grey lighten-2 high-progress margin-bottom">'. + '<div class="determinate green" style="width: '.$percentage.'%"></div>'. + '</div>'. + '</div>'. + '<div class="row">' . + '<div class="col s6 valign-wrapper">' . + '<i class="material-icons valign">event</i><span class="valign margin-left">' . $languageJSON->due_by . ' ' . $dueDate . '</span>' . + '</div>' . + '<div class="col s6 valign-wrapper">' . + '<i class="material-icons valign">event</i><span class="valign margin-left">'.$percentage.'% ' . $languageJSON->done .'</span>' . + '</div>' . + '</div>' . + '<ul class="collapsible white" data-collapsible="accordion">'; + for($k = 0; $k < sizeof($tasks); $k++) + { + $currentTask = $tasks[$k]; + + $subtasks = $db->getSubtasks($currentTask['ID']); + if($subtasks == false) + { + //inDev + if($currentTask['Status'] == 0) + { + echo '<li>' . + '<div class="collapsible-header bold"><i class="material-icons red-text">build</i>' . $currentTask['Title'] . '</div>' . + '<div class="collapsible-body"><p>' . $currentTask['Description'] . '</p></div>' . + '</li>'; + } + //done + else + { + echo '<li>' . + '<div class="collapsible-header bold"><i class="material-icons green-text">check</i>' . $currentTask['Title'] . '</div>' . + '<div class="collapsible-body"><p>' . $currentTask['Description'] . '</p></div>' . + '</li>'; + } + } + else + { + printSubTasksDone($currentTask, $subtasks, $db); + } + } + + echo '</ul>' . + '</div>' . + '</div>' . + '</div>'; + } +} + +function printSubTasksDone($currentTask, $subtasks, $db) +{ + $numberOfOpenSubtasks = $db->getNumberOfOpenSubtasks($currentTask['ID']); + if($numberOfOpenSubtasks == false) + { + header('Location: error.php?message=error_database_connection'); + exit; + } + else + { + $numberOfOpenSubtasks = $numberOfOpenSubtasks['count']; + if($numberOfOpenSubtasks == sizeof($subtasks)) + { + echo '<li>' . + '<div class="collapsible-header bold"><i class="material-icons green-text">check</i>Layout<span class="right">' . $numberOfOpenSubtasks . '/' . sizeof($subtasks) . '</span></div>' . + '<div class="collapsible-body">' . + '<ul class="collapsible white margin-left-and-right no-shadow margin-top-and-bottom" data-collapsible="accordion">'; + } + else + { + echo '<li>' . + '<div class="collapsible-header bold"><i class="material-icons red-text">build</i>Layout<span class="right">' . $numberOfOpenSubtasks . '/' . sizeof($subtasks) . '</span></div>' . + '<div class="collapsible-body">' . + '<ul class="collapsible white margin-left-and-right no-shadow margin-top-and-bottom" data-collapsible="accordion">'; + } + + for($m = 0; $m < sizeof($subtasks); $m++) + { + $currentSubTask = $subtasks[$m]; + //inDev + if($currentSubTask['Status'] == 0) + { + echo '<li>' . + '<div class="collapsible-header bold"><span class="left">' . ($m + 1) . '</span><i class="material-icons red-text margin-left">build</i>' . $currentSubTask['Title'] . '</div>' . + '<div class="collapsible-body"><p>' . $currentSubTask['Description'] . '</p></div>' . + '</li>'; + } + //done + else + { + echo '<li>' . + '<div class="collapsible-header bold"><span class="left">' . ($m + 1) . '</span><i class="material-icons green-text margin-left">check</i>' . $currentSubTask['Title'] . '</div>' . + '<div class="collapsible-body"><p>' . $currentSubTask['Description'] . '</p></div>' . + '</li>'; + } + } + + echo '</ul>' . + '</div>' . + '</li>'; + } +} + +function printMilestoneDoneAndNoTasks($color, $currentMilestone, $isFirstMilestone, $languageJSON, $dueDate, $completionDate) +{ + echo '<div class="card padding white milestone">' . + '<div class="card-content">' . + '<div class="'.$color.' center-align milestone-title">' . + '<span class="card-title bold padding-left-and-right truncate">' . $currentMilestone['VersionName'] . ' - ' . $currentMilestone['Title'] . '</span>' . + '</div>'; + + if($isFirstMilestone) + { + echo '<div class="milestone-content margin-top init-as-expanded">'; + } + else + { + echo '<div class="milestone-content margin-top">'; + } + + echo '<div class="row">' . + '<div class="col s6 valign-wrapper">' . + '<i class="material-icons valign">event</i><span class="valign margin-left">' . $languageJSON->due_by . ' ' . $dueDate . '</span>' . + '</div>' . + '<div class="col s6 valign-wrapper">' . + '<i class="material-icons valign">event</i><span class="valign margin-left">' . $languageJSON->done_at . ' ' . $completionDate . '</span>' . + '</div>' . + '</div>' . + '</div>' . + '</div>' . + '</div>'; +} + +function printMilestoneDoneWithTasks($color, $currentMilestone, $isFirstMilestone, $languageJSON, $dueDate, $completionDate, $tasks, $db) +{ + echo '<div class="card padding white milestone">' . + '<div class="card-content">' . + '<div class="'.$color.' center-align milestone-title">' . + '<span class="card-title bold padding-left-and-right truncate">' . $currentMilestone['VersionName'] . ' - ' . $currentMilestone['Title'] . '</span>' . + '</div>'; + + if($isFirstMilestone) + { + echo '<div class="milestone-content margin-top init-as-expanded">'; + } + else + { + echo '<div class="milestone-content margin-top">'; + } + + echo '<div class="row">' . + '<div class="col s6 valign-wrapper">' . + '<i class="material-icons valign">event</i><span class="valign margin-left">' . $languageJSON->due_by . ' ' . $dueDate . '</span>' . + '</div>' . + '<div class="col s6 valign-wrapper">' . + '<i class="material-icons valign">event</i><span class="valign margin-left">' . $languageJSON->done_at . ' ' . $completionDate . '</span>' . + '</div>' . + '</div>' . + '<ul class="collapsible white" data-collapsible="accordion">'; + for($k = 0; $k < sizeof($tasks); $k++) + { + $currentTask = $tasks[$k]; + + $subtasks = $db->getSubtasks($currentTask['ID']); + if($subtasks == false) + { + echo '<li>' . + '<div class="collapsible-header bold"><i class="material-icons green-text">check</i>' . $currentTask['Title'] . '</div>' . + '<div class="collapsible-body"><p>' . $currentTask['Description'] . '</p></div>' . + '</li>'; + } + else + { + $numberOfOpenSubtasks = $db->getNumberOfOpenSubtasks($currentTask['ID']); + if($numberOfOpenSubtasks != false) + { + $numberOfOpenSubtasks = $numberOfOpenSubtasks['count']; + if($numberOfOpenSubtasks == sizeof($subtasks)) + { + echo '<li>' . + '<div class="collapsible-header bold"><i class="material-icons green-text">check</i>Layout<span class="right">' . $numberOfOpenSubtasks . '/' . sizeof($subtasks) . '</span></div>' . + '<div class="collapsible-body">' . + '<ul class="collapsible white margin-left-and-right no-shadow margin-top-and-bottom" data-collapsible="accordion">'; + } + else + { + echo '<li>' . + '<div class="collapsible-header bold"><i class="material-icons red-text">build</i>Layout<span class="right">' . $numberOfOpenSubtasks . '/' . sizeof($subtasks) . '</span></div>' . + '<div class="collapsible-body">' . + '<ul class="collapsible white margin-left-and-right no-shadow margin-top-and-bottom" data-collapsible="accordion">'; + } + + for($m = 0; $m < sizeof($subtasks); $m++) + { + $currentSubTask = $subtasks[$m]; + //inDev + if($currentSubTask['Status'] == 0) + { + echo '<li>' . + '<div class="collapsible-header bold"><span class="left">' . ($m + 1) . '</span><i class="material-icons red-text margin-left">build</i>' . $currentSubTask['Title'] . '</div>' . + '<div class="collapsible-body"><p>' . $currentSubTask['Description'] . '</p></div>' . + '</li>'; + } + //done + else + { + echo '<li>' . + '<div class="collapsible-header bold"><span class="left">' . ($m + 1) . '</span><i class="material-icons green-text margin-left">check</i>' . $currentSubTask['Title'] . '</div>' . + '<div class="collapsible-body"><p>' . $currentSubTask['Description'] . '</p></div>' . + '</li>'; + } + } + + echo '</ul>' . + '</div>' . + '</li>'; + } + } + } + + echo '</ul>' . + '</div>' . + '</div>' . + '</div>'; +} \ No newline at end of file diff --git a/php/language.json b/php/language.json index 0b0ef12702c3f5477c94b3886081525385a213ce..25d2f82359ef0f268366d7166428064ad0cef098 100644 --- a/php/language.json +++ b/php/language.json @@ -1,5 +1,11 @@ { "due_by": "Due by", "done": "Done", - "done_at": "Done at" + "done_at": "Done at", + "error_general": "An error occured", + "error_param_missing": "ERROR: parameter missing", + "error_param_invalid": "ERROR: parameter is not numeric or less than 1", + "error_roadmap_not_existing": "ERROR: no roadmap with this ID existing", + "error_no_milestones": "ERROR: no milestones for this roadmap", + "error_database_connection" : "An error occurred while getting data from the server." } \ No newline at end of file