From 50dbc5ccb415b9c95abf6b61a7a00b79be90b00d Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Wed, 25 Jan 2017 20:09:33 +0100
Subject: [PATCH] Fixed #19

---
 js/main.js                                  | 30 +++++++++++++++++++--
 php/admin/admin-tasks.php                   |  2 ++
 php/admin/helper/mark-all-tasks-as-done.php | 30 +++++++++++++++++++++
 php/mysql.php                               | 23 ++++++++++++++++
 4 files changed, 83 insertions(+), 2 deletions(-)
 create mode 100644 php/admin/helper/mark-all-tasks-as-done.php

diff --git a/js/main.js b/js/main.js
index b56a24f..491ae82 100644
--- a/js/main.js
+++ b/js/main.js
@@ -126,6 +126,11 @@ $(document).ready(function()
 		}
 	});
 
+    $('#button-mark-all-as-done').click(function()
+    {
+        markAllTasksAsDone(this.dataset.milestoneid);
+    });
+
 	createTrainMap();
 });
 
@@ -522,7 +527,7 @@ function login()
 
 	$.post('../admin/helper/checkLogin.php',
 		{
-			"password": password,
+			"password": password
 
 		}, function(data, error)
 		{
@@ -537,4 +542,25 @@ function login()
 				alert('Wrong password!');
 			}
 		});
-}
\ No newline at end of file
+}
+
+function markAllTasksAsDone(milestone_ID)
+{
+    $.post('../admin/helper/mark-all-tasks-as-done.php',
+        {
+            "milestoneID": milestone_ID
+
+        }, function(data, error)
+        {
+            data = data.toString().trim();
+
+            if(data != "error" && data != "bad_login")
+            {
+                window.location.href = "../admin/admin-tasks.php?id=" + milestone_ID;
+            }
+            else
+            {
+                alert('An error occurred while marking all tasks as done');
+            }
+        });
+}
diff --git a/php/admin/admin-tasks.php b/php/admin/admin-tasks.php
index 578999d..f069042 100644
--- a/php/admin/admin-tasks.php
+++ b/php/admin/admin-tasks.php
@@ -70,6 +70,8 @@ if($milestone == false)
 			<div class="col s12 m8 offset-m2 l6 offset-l3 center-align">
 				<a class="waves-effect waves-light btn blue darken-3" href="admin-edit-task.php?milestoneID=<?php echo $ID;?>"><i
 						class="material-icons left">add</i>New</a>
+                <a class="waves-effect waves-light btn blue darken-3" id="button-mark-all-as-done" data-milestoneid="<?php echo $ID;?>"><i
+                            class="material-icons left">check</i>Mark all as done</a>
 			</div>
 		</div>
 		<div class="row">
diff --git a/php/admin/helper/mark-all-tasks-as-done.php b/php/admin/helper/mark-all-tasks-as-done.php
new file mode 100644
index 0000000..35309a0
--- /dev/null
+++ b/php/admin/helper/mark-all-tasks-as-done.php
@@ -0,0 +1,30 @@
+<?php
+include_once('../../mysql.php');
+
+if($_SERVER['REQUEST_METHOD'] == 'POST')
+{
+	if(!isset($_POST['milestoneID']))
+	{
+		echo "error";
+		exit;
+	}
+
+	$db = new DB();
+	$db->createTables();
+
+    if($db->markAllTasksAsDone($_POST['milestoneID']) == false)
+    {
+        echo "error";
+        exit;
+    }
+    else
+    {
+        echo "success";
+        exit;
+    }
+}
+else
+{
+	echo "error";
+	exit;
+}
\ No newline at end of file
diff --git a/php/mysql.php b/php/mysql.php
index 5e2cd5a..3c653f5 100644
--- a/php/mysql.php
+++ b/php/mysql.php
@@ -226,6 +226,29 @@ class DB
         }
     }
 
+    function markAllTasksAsDone($milestoneID)
+    {
+        $tasks = $this->getTasks($milestoneID);
+        for($m = 0; $m < sizeof($tasks); $m++)
+        {
+            $subTasks = $this->getSubtasks($tasks[$m]['ID']);
+            for($i = 0; $i < sizeof($subTasks); $i++)
+            {
+                if($this->finishSubTask($subTasks[$i]["ID"]) == false)
+                {
+                    return false;
+                }
+            }
+
+            if($this->finishTask($tasks[$m]['ID']) == false)
+            {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
 	//========================================
 	//----------------- get ------------------
 	//========================================
-- 
GitLab