Browse Source

\#73: Reminder integriert, 30 Minuten als Default-Snooze gesetzt

Moritz Schmidt 10 years ago
parent
commit
93c1474d30
6 changed files with 228 additions and 2 deletions
  1. 40 1
      ajax.php
  2. 1 0
      includes/controller.inc.php
  3. 20 0
      includes/functions.inc.php
  4. 98 0
      includes/reminder.inc.php
  5. 68 0
      scripts/custom.js
  6. 1 1
      templates/header.php

+ 40 - 1
ajax.php

@@ -11,6 +11,7 @@ require('includes/mailbox.inc.php');
 require('includes/mailboxfolder.inc.php');
 require('includes/mailboxfolder.inc.php');
 require('includes/documenthandler.inc.php');
 require('includes/documenthandler.inc.php');
 require('includes/call.inc.php');
 require('includes/call.inc.php');
+require('includes/reminder.inc.php');
 
 
 $db = new Database($CONFIG['dbHost'], $CONFIG['dbUser'], $CONFIG['dbPassword'], $CONFIG['dbDatabase']);
 $db = new Database($CONFIG['dbHost'], $CONFIG['dbUser'], $CONFIG['dbPassword'], $CONFIG['dbDatabase']);
 
 
@@ -297,10 +298,48 @@ switch($_REQUEST['action']) {
         $return = array(
         $return = array(
             "status"    => "OK"
             "status"    => "OK"
         );
         );
+        echo json_encode($return);
+        break;
+    case 'getEvents':
+        header("Status: 200 OK");
+
+        $upcomingReminders = getObjectsAsArray(Reminder::getUpcomingRemindersByUserID($_REQUEST['userID']), array("id", "userID", "reminderDate", "remindedYet"));
+
+        $return = array(
+            "type"      => "reminder",
+            "reminders" => $upcomingReminders
+        );
+
+        echo json_encode($return);
+
+        break;
+    case 'setReminderReminded':
+        header("Status: 200 OK");
+        $reminder = Reminder::getReminderByID($_REQUEST['reminderID']);
+        $reminder->setRemindedYet(1);
+        $reminder->save();
+
+        $return = array(
+            "status"    => "OK"
+        );
+
+        echo json_encode($return);
+        break;
+    case 'setReminderSnooze':
+        header("Status: 200 OK");
+        $reminder = Reminder::getReminderByID($_REQUEST['reminderID']);
+        $reminder->setReminderDate(date("Y-m-d H:i:s", strtotime("+30 minutes"))); // TODO: add more values as select somewhere
+        $reminder->save();
+
+        $return = array(
+            "status"    => "OK"
+        );
+
         echo json_encode($return);
         echo json_encode($return);
         break;
         break;
     case 'debugTest': // for testing single methods etc.
     case 'debugTest': // for testing single methods etc.
-        pa(MailBox::getMailboxByUsername($_REQUEST['account'])->getId());
+        pa(Reminder::getUpcomingRemindersByUserID(1));
+        pa(getObjectsAsArray(Reminder::getUpcomingRemindersByUserID(1), array("id", "userID", "reminderDate", "remindedYet")));
         break;
         break;
     default:
     default:
         header("Status: 400 No Action Defined");
         header("Status: 400 No Action Defined");

+ 1 - 0
includes/controller.inc.php

@@ -94,6 +94,7 @@ class Controller {
 			$this->headerView->assign('title', 'atOfficeWeb');
 			$this->headerView->assign('title', 'atOfficeWeb');
 			$this->headerView->assign('request', $this->request);
 			$this->headerView->assign('request', $this->request);
 			$this->headerView->assign('labels', Label::getAllLabels());
 			$this->headerView->assign('labels', Label::getAllLabels());
+			$this->headerView->assign('userID', $user->getUserId());
 			$this->view->assign('blog_title', $this->headerView->loadTemplate());
 			$this->view->assign('blog_title', $this->headerView->loadTemplate());
 			$this->view->assign('blog_footer', $this->footerView->loadTemplate());
 			$this->view->assign('blog_footer', $this->footerView->loadTemplate());
 			$this->view->assign('blog_content', $innerView->loadTemplate());
 			$this->view->assign('blog_content', $innerView->loadTemplate());

+ 20 - 0
includes/functions.inc.php

@@ -10,6 +10,26 @@ function error($message) {
 	echo $message;
 	echo $message;
 }
 }
 
 
+function getObjectsAsArray($objects, $keys) {
+	$return = array();
+	if(is_array($objects)) {
+		foreach($objects as $object) {
+			$return[] = array();
+			foreach($keys as $key) {
+				$keyCall = 'get' . ucfirst($key);
+				$return[sizeof($return) - 1][$key] = $object->$keyCall();
+			}
+		}
+	} else {
+		foreach($keys as $key) {
+			$keyCall = 'get' . ucfirst($key);
+			$return[0][$key] = $object->$keyCall();
+		}
+	}
+
+	return $return;
+}
+
 function searchNewFiles($scanDir) {
 function searchNewFiles($scanDir) {
 	global $db;
 	global $db;
 	global $CONFIG;
 	global $CONFIG;

+ 98 - 0
includes/reminder.inc.php

@@ -0,0 +1,98 @@
+<?php
+
+class Reminder {
+    private $id             = NULL;
+    private $userID         = NULL;
+    private $reminderDate   = NULL;
+    private $remindedYet    = NULL;
+
+    public function __construct($id, $userID, $reminderDate, $remindedYet) {
+        $this->id           = $id;
+        $this->userID       = $userID;
+        $this->reminderDate = $reminderDate;
+        $this->remindedYet  = $remindedYet;
+    }
+
+    public function getID() {
+        return $this->id;
+    }
+
+    public function getUserID() {
+        return $this->userID;
+    }
+
+    public function getReminderDate() {
+        return $this->reminderDate;
+    }
+
+    public function setReminderDate($reminderDate) {
+        $this->reminderDate = $reminderDate;
+    }
+
+    public function getRemindedYet() {
+        return $this->remindedYet;
+    }
+
+    public function setRemindedYet($remindedYet) {
+        $this->remindedYet = $remindedYet;
+    }
+
+    public function save() {
+        global $db;
+
+        $db->updateQuery("UPDATE `reminders` SET `user_id` = " . $this->userID . ", `reminder_date` = '" . $this->reminderDate . "', `reminded_yet` = " . $this->remindedYet . " WHERE `id` = " . $this->id . ";");
+
+        // TODO: error handling
+    }
+
+    /**
+     * Get Reminder by Reminder-ID
+     *
+     * @param int $reminderID  ID of Reminder
+     *
+     * @return Reminder  Selected Reminder
+     *
+     */
+
+    public static function getReminderByID($reminderID) {
+        global $db;
+
+        $reminders = $db->selectQuery("SELECT * FROM `reminders` WHERE `id` = " . $reminderID . ";");
+
+        $return = array();
+
+        foreach($reminders as $reminder) {
+            $return[] = new Reminder($reminder->id, $reminder->user_id, $reminder->reminder_date, $reminder->reminded_yet);
+        }
+
+        // TODO: sizeof handling
+
+        return $return[0];
+    }
+
+    /**
+     * Get upcoming Reminders by User-ID
+     *
+     * @param int $userID  ID of User
+     *
+     * @return Array(Reminder)  Array with selected Reminders
+     *
+     */
+
+    public static function getUpcomingRemindersByUserID($userID) {
+        global $db;
+
+        $reminders = $db->selectQuery("SELECT * FROM `reminders` WHERE `user_id` = " . $userID . " AND `reminder_date`< CURRENT_TIMESTAMP AND `reminded_yet` = 0;");
+
+        $return = array();
+
+        foreach($reminders as $reminder) {
+            $return[] = new Reminder($reminder->id, $reminder->user_id, $reminder->reminder_date, $reminder->reminded_yet);
+        }
+
+        return $return;
+    }
+
+}
+
+?>

+ 68 - 0
scripts/custom.js

@@ -2,6 +2,7 @@ $(document).ready(function() {
 
 
     var lastOpenedBoxData; // Stores JSON-data of last opened editBox
     var lastOpenedBoxData; // Stores JSON-data of last opened editBox
     var notifications = []; // Stores noty-Notifications
     var notifications = []; // Stores noty-Notifications
+    var reminders = []; // Stores reminder-noty-Notifications
 
 
     function noty_error_retry() {
     function noty_error_retry() {
         notifications.push(
         notifications.push(
@@ -13,6 +14,48 @@ $(document).ready(function() {
             }));
             }));
     }
     }
 
 
+    window.noty_reminder = noty_reminder;
+
+    function noty_reminder(reminderID) {
+        var reminderID = reminderID;
+        reminders[reminderID] = noty({
+            layout  : 'topCenter',
+            text    : 'Erinnerung:<br>',
+            type    : 'alert',
+            buttons : [
+                {addClass: 'btn btn-primary', text: 'OK', onClick: function(noty) {
+                    data = {
+                        reminderID: reminderID
+                    };
+
+                    $.getJSON("ajax.php?action=setReminderReminded", data, function(r) {
+                        if(r['status'] == "OK") {
+                            noty.close();
+                            reminders[reminderID] = undefined;
+                        } else {
+                            noty_error_retry();
+                        }
+                    });
+
+                }},
+                {addClass: 'btn btn-danger', text: 'Snooze', onClick: function(noty) {
+                    data = {
+                        reminderID: reminderID
+                    };
+
+                    $.getJSON("ajax.php?action=setReminderSnooze", data, function(r) {
+                        if(r['status'] == "OK") {
+                            noty.close();
+                            reminders[reminderID] = undefined;
+                        } else {
+                            noty_error_retry();
+                        }
+                    });
+                }}
+            ]
+        });
+    }
+
     function getUrlGetParameter(val) {
     function getUrlGetParameter(val) {
         var result = "Not found",
         var result = "Not found",
             tmp = [];
             tmp = [];
@@ -26,6 +69,28 @@ $(document).ready(function() {
         return result;
         return result;
     }
     }
 
 
+
+    function handleEvents() {
+        data = {
+            userID: $("body").attr("data-user-id")
+        };
+
+        $.getJSON("ajax.php?action=getEvents", data, function(r) {
+            switch (r['type']) {
+                case 'reminder':
+                    r['reminders'].forEach(function(item) {
+                        if(reminders[item['id']] == undefined) {
+                            noty_reminder(item['id']);
+                        }
+                    });
+                    break;
+                default:
+                    console.log("unknown event type:" + r['type']);
+
+            }
+        });
+    }
+
     function addSpinner(element) {
     function addSpinner(element) {
         element.append("<div class=\"spinner\"><div class=\"bounce1\"></div><div class=\"bounce2\"></div><div class=\"bounce3\"></div></div>");
         element.append("<div class=\"spinner\"><div class=\"bounce1\"></div><div class=\"bounce2\"></div><div class=\"bounce3\"></div></div>");
     }
     }
@@ -507,4 +572,7 @@ $(document).ready(function() {
             break;
             break;
     }
     }
 
 
+    handleEvents();
+    setInterval(handleEvents, 60000);
+
 });
 });

+ 1 - 1
templates/header.php

@@ -29,7 +29,7 @@
 	<![endif]-->
 	<![endif]-->
 </head>
 </head>
 
 
-<body>
+<body data-user-id="<?php echo $this->_['userID']; ?>">
 
 
 	<nav class="navbar navbar-inverse navbar-fixed-top">
 	<nav class="navbar navbar-inverse navbar-fixed-top">
 	<div class="container-fluid">
 	<div class="container-fluid">