diff --git a/php/example.php b/php/example.php new file mode 100644 index 0000000000000000000000000000000000000000..ec02655526951a65299369a92317b80af479bbd7 --- /dev/null +++ b/php/example.php @@ -0,0 +1,281 @@ +<!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"> + <div id="main"> + <div class="container"> + <h2 class="center-align" id="headline">PlayWall 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"> + <div class="train-circle train-circle-light"></div> + <div class="train-line dotted"></div> + <div class="train-circle blue"></div> + <div class="train-line"></div> + <div class="train-circle blue"></div> + <div class="train-line"></div> + <div class="train-circle blue"></div> + <div class="train-line"></div> + <div class="train-circle blue"></div> + </div> + <div class="hide-on-med-and-up trainmap-small"> + <div class="train-circle train-circle-light train-circle-small"></div> + <div class="train-line dotted-small train-line-small"></div> + <div class="train-circle blue train-circle-small"></div> + <div class="train-line train-line-small"></div> + <div class="train-circle blue train-circle-small"></div> + <div class="train-line train-line-small"></div> + <div class="train-circle blue train-circle-small"></div> + <div class="train-line train-line-small"></div> + <div class="train-circle blue train-circle-small"></div> + </div> + </div> + <div class="col s11 m7 l6"> + <div class="card padding white milestone"> + <div class="card-content"> + <div class="blue lighten-2 center-align milestone-title"> + <span class="card-title bold padding-left-and-right truncate">v1.6.0 - Next Version</span> + </div> + <div class="milestone-content margin-top init-as-expanded"> + <div class="white progress-container"> + <div class="progress grey lighten-2 high-progress margin-bottom"> + <div class="determinate green" style="width: 40%"></div> + </div> + </div> + <div class="row"> + <div class="col s6 valign-wrapper"> + <i class="material-icons valign">event</i><span class="valign margin-left"><?php echo $languageJSON->due_by?> 25.06.16</span> + </div> + <div class="col s6 valign-wrapper"> + <i class="material-icons valign">settings</i><span class="valign margin-left">40% <?php echo $languageJSON->done?></span> + </div> + </div> + <ul class="collapsible white" data-collapsible="accordion"> + <li> + <div class="collapsible-header bold"><i class="material-icons red-text">build</i>Layout<span class="right">1/3</span></div> + <div class="collapsible-body"> + + <ul class="collapsible white margin-left-and-right no-shadow margin-top-and-bottom" data-collapsible="accordion"> + <li> + <div class="collapsible-header bold"><span class="left">1</span><i class="material-icons green-text margin-left">check</i>Layout Einstellungen</div> + <div class="collapsible-body"><p>PlayWall ermöglicht es nun Audio und andere Medien im Hintergrund wiederzugeben, während eine andere Seite offen ist.</p></div> + </li> + <li> + <div class="collapsible-header bold"><span class="left">2</span><i class="material-icons red-text margin-left">build</i>Layout Cards</div> + <div class="collapsible-body"><p>PlayWall ermöglicht es nun Audio und andere Medien im Hintergrund wiederzugeben, während eine andere Seite offen ist.</p></div> + </li> + <li> + <div class="collapsible-header bold"><span class="left">3</span><i class="material-icons red-text margin-left">build</i>Layout Equalizer</div> + <div class="collapsible-body"><p>PlayWall ermöglicht es nun Audio und andere Medien im Hintergrund wiederzugeben, während eine andere Seite offen ist.</p></div> + </li> + </ul> + + </div> + </li> + <li> + <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> + <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> + </li> + <li> + <div class="collapsible-header bold"><i class="material-icons red-text">build</i>Trigger</div> + <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> + </li> + </ul> + </div> + </div> + </div> + + + <div class="card padding white milestone"> + <div class="card-content"> + <div class="amber lighten-2 center-align milestone-title"> + <span class="card-title bold padding-left-and-right truncate">v1.5.7 - Current Version</span> + </div> + <div class="milestone-content margin-top init-as-expanded"> + <div class="row"> + <div class="col s6 valign-wrapper"> + <i class="material-icons valign">event</i><span class="valign margin-left"><?php echo $languageJSON->due_by?> 25.06.16</span> + </div> + <div class="col s6 valign-wrapper"> + <i class="material-icons valign">event</i><span class="valign margin-left"><?php echo $languageJSON->done_at?> 25.06.16</span> + </div> + </div> + <ul class="collapsible white" data-collapsible="accordion"> + <li> + <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Play in Background</div> + <div class="collapsible-body"><p>PlayWall ermöglicht es nun Audio und andere Medien im Hintergrund wiederzugeben, während eine andere Seite offen ist.</p></div> + </li> + <li> + <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> + <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> + </li> + </ul> + </div> + </div> + </div> + + <div class="card padding white milestone"> + <div class="card-content"> + <div class="grey lighten-2 center-align milestone-title"> + <span class="card-title bold padding-left-and-right truncate">v1.3.0 - Third Version</span> + </div> + <div class="milestone-content margin-top"> + <div class="row"> + <div class="col s6 valign-wrapper"> + <i class="material-icons valign">event</i><span class="valign margin-left"><?php echo $languageJSON->due_by?> 25.06.16</span> + </div> + <div class="col s6 valign-wrapper"> + <i class="material-icons valign">event</i><span class="valign margin-left"><?php echo $languageJSON->done_at?> 25.06.16</span> + </div> + </div> + <ul class="collapsible white" data-collapsible="accordion"> + <li> + <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Play in Background</div> + <div class="collapsible-body"><p>PlayWall ermöglicht es nun Audio und andere Medien im Hintergrund wiederzugeben, während eine andere Seite offen ist.</p></div> + </li> + <li> + <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> + <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> + </li> + <li> + <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> + <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> + </li> + <li> + <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> + <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> + </li> + <li> + <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> + <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> + </li> + <li> + <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> + <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> + </li> + + </ul> + </div> + </div> + </div> + + <div class="card padding white milestone"> + <div class="card-content"> + <div class="grey lighten-2 center-align milestone-title"> + <span class="card-title bold padding-left-and-right truncate">v1.1.0 - Second Version</span> + </div> + <div class="milestone-content margin-top"> + <div class="row"> + <div class="col s6 valign-wrapper"> + <i class="material-icons valign">event</i><span class="valign margin-left"><?php echo $languageJSON->due_by?> 25.06.16</span> + </div> + <div class="col s6 valign-wrapper"> + <i class="material-icons valign">event</i><span class="valign margin-left"><?php echo $languageJSON->done_at?> 25.06.16</span> + </div> + </div> + <ul class="collapsible white" data-collapsible="accordion"> + <li> + <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Play in Background</div> + <div class="collapsible-body"><p>PlayWall ermöglicht es nun Audio und andere Medien im Hintergrund wiederzugeben, während eine andere Seite offen ist.</p></div> + </li> + <li> + <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> + <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> + </li> + <li> + <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> + <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> + </li> + <li> + <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> + <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> + </li> + <li> + <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> + <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> + </li> + <li> + <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> + <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> + </li> + + </ul> + </div> + </div> + </div> + + <div class="card padding white milestone"> + <div class="card-content"> + <div class="grey lighten-2 center-align milestone-title"> + <span class="card-title bold padding-left-and-right truncate">v1.0.0 - First Version</span> + </div> + <div class="milestone-content margin-top"> + <div class="row"> + <div class="col s6 valign-wrapper"> + <i class="material-icons valign">event</i><span class="valign margin-left"><?php echo $languageJSON->due_by?> 25.06.16</span> + </div> + <div class="col s6 valign-wrapper"> + <i class="material-icons valign">event</i><span class="valign margin-left"><?php echo $languageJSON->done_at?> 25.06.16</span> + </div> + </div> + <ul class="collapsible white" data-collapsible="accordion"> + <li> + <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Play in Background</div> + <div class="collapsible-body"><p>PlayWall ermöglicht es nun Audio und andere Medien im Hintergrund wiederzugeben, während eine andere Seite offen ist.</p></div> + </li> + <li> + <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> + <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> + </li> + <li> + <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> + <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> + </li> + <li> + <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> + <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> + </li> + <li> + <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> + <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> + </li> + <li> + <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> + <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> + </li> + </ul> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/php/index.php b/php/index.php index ec02655526951a65299369a92317b80af479bbd7..2db3a354a583bc30ea3cd0639317a2bb9c8cec64 100644 --- a/php/index.php +++ b/php/index.php @@ -2,11 +2,54 @@ <?php include_once('getLanguageJSON.php'); +include_once('mysql.php'); + +if(!isset($_GET['id'])) +{ + //TODO + die("get param missing"); +} + +$ID = $_GET['id']; +if(!is_numeric($ID) || $ID < 1) +{ + //TODO + die("param is not numeric or less than 1"); +} + +$db = new DB(); +$db->createTables(); + +$projectName = $db->getRoadmap($ID); +if($projectName == false) +{ + //TODO + die("no roadmap with this ID existing"); +} +$projectName = $projectName["Projectname"]; + +$milestones = $db->getMilestones($ID); +if($milestones == false) +{ + //TODO + die("no milestones for this roadmap"); +} + +$numberOfMilestones = sizeof($milestones); + +$numberofOpenMilestones = $db->getNumberOfOpenMilestones($ID); +if($numberofOpenMilestones == false) +{ + //TODO + die("error getting open milestones"); +} + +$numberofOpenMilestones = $numberofOpenMilestones['count']; ?> <html xmlns="http://www.w3.org/1999/html"> <head> <meta charset="UTF-8"/> - <title>Roadmap</title> + <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--> @@ -27,251 +70,401 @@ include_once('getLanguageJSON.php'); <body class="grey lighten-3"> <div id="main"> <div class="container"> - <h2 class="center-align" id="headline">PlayWall Roadmap</h2> + <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"> - <div class="train-circle train-circle-light"></div> - <div class="train-line dotted"></div> - <div class="train-circle blue"></div> - <div class="train-line"></div> - <div class="train-circle blue"></div> - <div class="train-line"></div> - <div class="train-circle blue"></div> - <div class="train-line"></div> - <div class="train-circle blue"></div> + <?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>'; + } + } + ?> </div> <div class="hide-on-med-and-up trainmap-small"> - <div class="train-circle train-circle-light train-circle-small"></div> - <div class="train-line dotted-small train-line-small"></div> - <div class="train-circle blue train-circle-small"></div> - <div class="train-line train-line-small"></div> - <div class="train-circle blue train-circle-small"></div> - <div class="train-line train-line-small"></div> - <div class="train-circle blue train-circle-small"></div> - <div class="train-line train-line-small"></div> - <div class="train-circle blue train-circle-small"></div> + <?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>'; + } + } + ?> </div> </div> <div class="col s11 m7 l6"> - <div class="card padding white milestone"> - <div class="card-content"> - <div class="blue lighten-2 center-align milestone-title"> - <span class="card-title bold padding-left-and-right truncate">v1.6.0 - Next Version</span> - </div> - <div class="milestone-content margin-top init-as-expanded"> - <div class="white progress-container"> - <div class="progress grey lighten-2 high-progress margin-bottom"> - <div class="determinate green" style="width: 40%"></div> - </div> - </div> - <div class="row"> - <div class="col s6 valign-wrapper"> - <i class="material-icons valign">event</i><span class="valign margin-left"><?php echo $languageJSON->due_by?> 25.06.16</span> - </div> - <div class="col s6 valign-wrapper"> - <i class="material-icons valign">settings</i><span class="valign margin-left">40% <?php echo $languageJSON->done?></span> - </div> - </div> - <ul class="collapsible white" data-collapsible="accordion"> - <li> - <div class="collapsible-header bold"><i class="material-icons red-text">build</i>Layout<span class="right">1/3</span></div> - <div class="collapsible-body"> - - <ul class="collapsible white margin-left-and-right no-shadow margin-top-and-bottom" data-collapsible="accordion"> - <li> - <div class="collapsible-header bold"><span class="left">1</span><i class="material-icons green-text margin-left">check</i>Layout Einstellungen</div> - <div class="collapsible-body"><p>PlayWall ermöglicht es nun Audio und andere Medien im Hintergrund wiederzugeben, während eine andere Seite offen ist.</p></div> - </li> - <li> - <div class="collapsible-header bold"><span class="left">2</span><i class="material-icons red-text margin-left">build</i>Layout Cards</div> - <div class="collapsible-body"><p>PlayWall ermöglicht es nun Audio und andere Medien im Hintergrund wiederzugeben, während eine andere Seite offen ist.</p></div> - </li> - <li> - <div class="collapsible-header bold"><span class="left">3</span><i class="material-icons red-text margin-left">build</i>Layout Equalizer</div> - <div class="collapsible-body"><p>PlayWall ermöglicht es nun Audio und andere Medien im Hintergrund wiederzugeben, während eine andere Seite offen ist.</p></div> - </li> - </ul> - - </div> - </li> - <li> - <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> - <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> - </li> - <li> - <div class="collapsible-header bold"><i class="material-icons red-text">build</i>Trigger</div> - <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> - </li> - </ul> - </div> - </div> - </div> + <?php + $isFirstMilestone = true; + for($i = 0; $i < $numberOfMilestones; $i++) + { + $currentMilestone = $milestones[$i]; - <div class="card padding white milestone"> - <div class="card-content"> - <div class="amber lighten-2 center-align milestone-title"> - <span class="card-title bold padding-left-and-right truncate">v1.5.7 - Current Version</span> - </div> - <div class="milestone-content margin-top init-as-expanded"> - <div class="row"> - <div class="col s6 valign-wrapper"> - <i class="material-icons valign">event</i><span class="valign margin-left"><?php echo $languageJSON->due_by?> 25.06.16</span> - </div> - <div class="col s6 valign-wrapper"> - <i class="material-icons valign">event</i><span class="valign margin-left"><?php echo $languageJSON->done_at?> 25.06.16</span> - </div> - </div> - <ul class="collapsible white" data-collapsible="accordion"> - <li> - <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Play in Background</div> - <div class="collapsible-body"><p>PlayWall ermöglicht es nun Audio und andere Medien im Hintergrund wiederzugeben, während eine andere Seite offen ist.</p></div> - </li> - <li> - <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> - <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> - </li> - </ul> - </div> - </div> - </div> + //Milestone is inDev + if($currentMilestone['Status'] == 0) + { + $color = 'blue lighten-2'; - <div class="card padding white milestone"> - <div class="card-content"> - <div class="grey lighten-2 center-align milestone-title"> - <span class="card-title bold padding-left-and-right truncate">v1.3.0 - Third Version</span> - </div> - <div class="milestone-content margin-top"> - <div class="row"> - <div class="col s6 valign-wrapper"> - <i class="material-icons valign">event</i><span class="valign margin-left"><?php echo $languageJSON->due_by?> 25.06.16</span> - </div> - <div class="col s6 valign-wrapper"> - <i class="material-icons valign">event</i><span class="valign margin-left"><?php echo $languageJSON->done_at?> 25.06.16</span> - </div> - </div> - <ul class="collapsible white" data-collapsible="accordion"> - <li> - <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Play in Background</div> - <div class="collapsible-body"><p>PlayWall ermöglicht es nun Audio und andere Medien im Hintergrund wiederzugeben, während eine andere Seite offen ist.</p></div> - </li> - <li> - <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> - <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> - </li> - <li> - <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> - <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> - </li> - <li> - <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> - <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> - </li> - <li> - <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> - <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> - </li> - <li> - <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> - <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> - </li> - - </ul> - </div> - </div> - </div> + $dueDate = $currentMilestone['DueDate']; + if($dueDate == "2000-01-01") + { + $dueDate = "-"; + } + else + { + $dueDate = date_create($dueDate); + $dueDate = date_format($dueDate, "d.m.Y"); + } - <div class="card padding white milestone"> - <div class="card-content"> - <div class="grey lighten-2 center-align milestone-title"> - <span class="card-title bold padding-left-and-right truncate">v1.1.0 - Second Version</span> - </div> - <div class="milestone-content margin-top"> - <div class="row"> - <div class="col s6 valign-wrapper"> - <i class="material-icons valign">event</i><span class="valign margin-left"><?php echo $languageJSON->due_by?> 25.06.16</span> - </div> - <div class="col s6 valign-wrapper"> - <i class="material-icons valign">event</i><span class="valign margin-left"><?php echo $languageJSON->done_at?> 25.06.16</span> - </div> - </div> - <ul class="collapsible white" data-collapsible="accordion"> - <li> - <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Play in Background</div> - <div class="collapsible-body"><p>PlayWall ermöglicht es nun Audio und andere Medien im Hintergrund wiederzugeben, während eine andere Seite offen ist.</p></div> - </li> - <li> - <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> - <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> - </li> - <li> - <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> - <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> - </li> - <li> - <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> - <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> - </li> - <li> - <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> - <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> - </li> - <li> - <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> - <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> - </li> - - </ul> - </div> - </div> - </div> + $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>'; + } + else + { + $dueDate = $currentMilestone['DueDate']; + if($dueDate == "2000-01-01") + { + $dueDate = "-"; + } + else + { + $dueDate = date_create($dueDate); + $dueDate = date_format($dueDate, "d.m.Y"); + } - <div class="card padding white milestone"> - <div class="card-content"> - <div class="grey lighten-2 center-align milestone-title"> - <span class="card-title bold padding-left-and-right truncate">v1.0.0 - First Version</span> - </div> - <div class="milestone-content margin-top"> - <div class="row"> - <div class="col s6 valign-wrapper"> - <i class="material-icons valign">event</i><span class="valign margin-left"><?php echo $languageJSON->due_by?> 25.06.16</span> - </div> - <div class="col s6 valign-wrapper"> - <i class="material-icons valign">event</i><span class="valign margin-left"><?php echo $languageJSON->done_at?> 25.06.16</span> - </div> - </div> - <ul class="collapsible white" data-collapsible="accordion"> - <li> - <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Play in Background</div> - <div class="collapsible-body"><p>PlayWall ermöglicht es nun Audio und andere Medien im Hintergrund wiederzugeben, während eine andere Seite offen ist.</p></div> - </li> - <li> - <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> - <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> - </li> - <li> - <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> - <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> - </li> - <li> - <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> - <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> - </li> - <li> - <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> - <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> - </li> - <li> - <div class="collapsible-header bold"><i class="material-icons green-text">check</i>Live Mode</div> - <div class="collapsible-body"><p>Mit dem neuen Livemode ist ein noch einfach die Kontrolle während Veranstaltungen zu behalten.</p></div> - </li> - </ul> - </div> - </div> - </div> + $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>'; + } + } + } + //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) + { + 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>'; + } + 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) + { + + } + 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>'; + } + + if($isFirstMilestone) + { + $isFirstMilestone = false; + } + } + } + ?> </div> </div> </div> diff --git a/php/mysql.php b/php/mysql.php index a518da3b5212d222dfd52f963a43ccde07ac18a0..68550e395a8d209e0e5e3076deaed1c55fe01dd9 100644 --- a/php/mysql.php +++ b/php/mysql.php @@ -209,13 +209,22 @@ class DB function getMilestones($roadmapID) { - $statement = self::$db->prepare("SELECT * FROM milestones WHERE milestones.roadmapID=:roadmapID;"); + $statement = self::$db->prepare("SELECT * FROM milestones WHERE milestones.roadmapID=:roadmapID ORDER BY VersionCode DESC;"); $statement->bindParam("roadmapID", $roadmapID); $statement->execute(); return $statement->fetchAll(); } + function getNumberOfOpenMilestones($roadmapID) + { + $statement = self::$db->prepare("SELECT COUNT(*) AS 'count' FROM milestones WHERE milestones.roadmapID=:roadmapID AND status = '0';"); + $statement->bindParam("roadmapID", $roadmapID); + $statement->execute(); + + return $statement->fetch(); + } + function getTasks($milestoneID) { $statement = self::$db->prepare("SELECT * FROM tasks WHERE tasks.milestoneID=:milestoneID;"); @@ -225,6 +234,15 @@ class DB return $statement->fetchAll(); } + function getNumberOfOpenTasks($milestoneID) + { + $statement = self::$db->prepare("SELECT COUNT(*) AS 'count' FROM tasks WHERE tasks.MilestoneID=:milestoneID AND status = '0';"); + $statement->bindParam("milestoneID", $milestoneID); + $statement->execute(); + + return $statement->fetch(); + } + function getSubtasks($taskID) { $statement = self::$db->prepare("SELECT * FROM subtasks WHERE subtasks.taskID=:taskID;"); @@ -233,13 +251,13 @@ class DB return $statement->fetchAll(); } -} -$db = new DB(); -$db->createTables(); -$objects = $db->getMilestones(1); -foreach ($objects as $object) -{ - var_dump($object); - echo "<br> <br>"; + function getNumberOfOpenSubtasks($taskID) + { + $statement = self::$db->prepare("SELECT COUNT(*) AS 'count' FROM subtasks WHERE subtasks.TaskID=:taskID AND status = '0';"); + $statement->bindParam("taskID", $taskID); + $statement->execute(); + + return $statement->fetch(); + } } \ No newline at end of file