From fd5b3df7e52b52ffd56bd2bc6ec2e8b64e54e1c2 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Tue, 8 Jan 2019 22:38:42 +0100 Subject: [PATCH] started working on psql connection --- php/psql.php | 540 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 540 insertions(+) create mode 100644 php/psql.php diff --git a/php/psql.php b/php/psql.php new file mode 100644 index 0000000..cccef03 --- /dev/null +++ b/php/psql.php @@ -0,0 +1,540 @@ +<!DOCTYPE html> + +<?php +include_once('getLanguageJSON.php'); +include_once('mysql.php'); + +if(!isset($_GET['id'])) +{ + header('Location: overview.php'); + exit; +} + +$ID = $_GET['id']; +if(!is_numeric($ID) || $ID < 1) +{ + header('Location: error.php?message=error_param_invalid'); + exit; +} + +$db = new DB(); +$db->createTables(); + +$projectName = $db->getRoadmap($ID); +if($projectName == false) +{ + header('Location: error.php?message=error_roadmap_not_existing'); + exit; +} +$projectName = $projectName["Projectname"]; + +$milestones = $db->getMilestones($ID); +if($milestones == false) +{ + header('Location: error.php?message=error_no_milestones'); + exit; +} + +$numberOfMilestones = sizeof($milestones); + +$numberofOpenMilestones = $db->getNumberOfOpenMilestones($ID); +if($numberofOpenMilestones == false) +{ + header('Location: error.php?message=error_database_connection'); + exit; +} + +$numberofOpenMilestones = $numberofOpenMilestones['count']; +?> +<html xmlns="http://www.w3.org/1999/html"> + <head> + <meta charset="UTF-8"/> + <title>Roadmap - <?php echo $projectName;?></title> + <!--Import Google Icon Font--> + <link href="https://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"> + <a class="btn-flat right" href="admin/login.php">Login</a> + <div style="clear: both;"></div> + <div id="main"> + <div class="container"> + <h2 class="center-align" id="headline"><?php echo $projectName;?> Roadmap</h2> + <div class="row"> + <div class="col s12"> + <div class="row"> + <div class="col s1 m2 l2 offset-m1 offset-l1 no-padding"> + <div class="hide-on-small-only trainmap"> + <?php + createTrainmapMedAndUp($numberofOpenMilestones, $numberOfMilestones); + ?> + </div> + <div class="hide-on-med-and-up trainmap-small"> + <?php + createTrainmapSmall($numberofOpenMilestones, $numberOfMilestones); + ?> + </div> + </div> + <div class="col s11 m7 l6"> + + <?php + $isFirstMilestone = true; + for($i = 0; $i < $numberOfMilestones; $i++) + { + $currentMilestone = $milestones[$i]; + + //Milestone is inDev + if($currentMilestone['Status'] == 0) + { + $color = 'blue lighten-2'; + + $dueDate = $currentMilestone['DueDate']; + if($dueDate == "2000-01-01") + { + $dueDate = "-"; + } + else + { + $dueDate = date_create($dueDate); + $dueDate = date_format($dueDate, "d.m.Y"); + } + + $tasks = $db->getTasks($currentMilestone['ID']); + if($tasks == false) + { + printMilestoneIndevAndNoTasks($color, $currentMilestone, $dueDate, $languageJSON); + } + else + { + printMilestoneIndevWithTasks($currentMilestone, $db, $tasks, $color, $languageJSON); + } + } + //Milestone is done + else + { + if($isFirstMilestone) + { + $color = 'amber lighten-2'; + } + else + { + $color = 'grey lighten-2'; + } + + $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"); + + $tasks = $db->getTasks($currentMilestone['ID']); + if($tasks == false) + { + printMilestoneDoneAndNoTasks($color, $currentMilestone, $isFirstMilestone, $languageJSON, $dueDate, $completionDate); + } + else + { + printMilestoneDoneWithTasks($color, $currentMilestone, $isFirstMilestone, $languageJSON, $dueDate, $completionDate, $tasks, $db); + } + + if($isFirstMilestone) + { + $isFirstMilestone = false; + } + } + } + ?> + </div> + </div> + </div> + </div> + </div> + </body> +</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">'; + if($currentMilestone['VersionName'] == $currentMilestone['Title']) + { + echo '<span class="card-title bold padding-left-and-right truncate">' . $currentMilestone['Title'] . '</span>'; + + } + else + { + echo '<span class="card-title bold padding-left-and-right truncate">' . $currentMilestone['VersionName'] . ' - ' . $currentMilestone['Title'] . '</span>'; + } + echo '</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 = ((sizeof($tasks) - $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">'; + if($currentMilestone['VersionName'] == $currentMilestone['Title']) + { + echo '<span class="card-title bold padding-left-and-right truncate">' . $currentMilestone['Title'] . '</span>'; + + } + else + { + echo '<span class="card-title bold padding-left-and-right truncate">' . $currentMilestone['VersionName'] . ' - ' . $currentMilestone['Title'] . '</span>'; + } + echo '</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 truncate"><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 truncate"><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 == 0) + { + echo '<li>' . + '<div class="collapsible-header bold"><i class="material-icons green-text">check</i>'.$currentTask['Title'].'<span class="right">' . (sizeof($subtasks) - $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>'.$currentTask['Title'].'<span class="right">' . (sizeof($subtasks) - $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">'; + if($currentMilestone['VersionName'] == $currentMilestone['Title']) + { + echo '<span class="card-title bold padding-left-and-right truncate">' . $currentMilestone['Title'] . '</span>'; + + } + else + { + echo '<span class="card-title bold padding-left-and-right truncate">' . $currentMilestone['VersionName'] . ' - ' . $currentMilestone['Title'] . '</span>'; + } + echo '</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">'; + if($currentMilestone['VersionName'] == $currentMilestone['Title']) + { + echo '<span class="card-title bold padding-left-and-right truncate">' . $currentMilestone['Title'] . '</span>'; + + } + else + { + echo '<span class="card-title bold padding-left-and-right truncate">' . $currentMilestone['VersionName'] . ' - ' . $currentMilestone['Title'] . '</span>'; + } + echo '</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 truncate"><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 == 0) + { + echo '<li>' . + '<div class="collapsible-header bold"><i class="material-icons green-text">check</i>'.$currentTask['Title'].'<span class="right">' . sizeof($subtasks) . '/' . 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>'.$currentTask['Title'].'<span class="right">' . (sizeof($subtasks) - $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 truncate"><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 truncate"><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 -- GitLab