Skip to content
Snippets Groups Projects
Select Git revision
  • bcc5e99c1aed136297ec1540bf138c530824ad5c
  • master default
  • v1.1.0
  • v1.0.0
4 results

index.php

Blame
  • index.php 17.20 KiB
    <!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="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">
    		<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>Layout<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>Layout<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>';
    }