Browse Source

Creating a way to send and manage private messages.

Adam Day 9 years ago
parent
commit
77208c7f2d

+ 21 - 2
application/controllers/indexController.php

@@ -15,8 +15,13 @@ class indexController extends Staple_Controller
 	{
 		$this->view->authLevel = $this->authLevel;
 
-		//$messages = new messagesModel();
-		//$this->view->messages = array_merge($messages->getPrivateMessages(),$messages->getMessages());
+		$messages = new messagesModel();
+		$this->view->messages = $messages;
+
+		if(count($messages->getPrivateMessages()) > 0)
+		{
+			$this->layout->addScriptBlock('$(document).ready(function() { $("#privateMessages").foundation("reveal", "open"); }); ');
+		}
 
 		$date = new DateTime();
 		$date->setTime(0,0,0);
@@ -42,5 +47,19 @@ class indexController extends Staple_Controller
 
 		$this->view->week = $report->getWeekWorked($this->userId, $week, $year);
 	}
+
+	public function read($id = null)
+	{
+		if($id != null)
+		{
+			$message = new privateMessageModel();
+			$message->markRead($id);
+			header("location: ".$this->_link(array("index"))."");
+		}
+		else
+		{
+			header("location: ".$this->_link(array("index"))."");
+		}
+	}
 }
 ?>

+ 91 - 32
application/controllers/messagesController.php

@@ -6,7 +6,7 @@ class messagesController extends Staple_Controller
     {
         $auth = Staple_Auth::get();
         $this->authLevel = $auth->getAuthLevel();
-        if($this->authLevel < 900)
+        if($this->authLevel < 500)
         {
             header("location:".$this->_link(array('index','index'))."");
         }
@@ -14,45 +14,110 @@ class messagesController extends Staple_Controller
 
     public function index()
     {
-        $form = new newMessageForm();
-
-        if($form->wasSubmitted())
+        $user = new userModel();
+        if($user->getAuthLevel() >= 900)
         {
-            $form->addData($_POST);
-            if($form->validate())
+            $form = new newMessageForm();
+
+            if($form->wasSubmitted())
+            {
+                $form->addData($_POST);
+                if($form->validate())
+                {
+                    $data = $form->exportFormData();
+
+                    if($data['account'] == 'all')
+                    {
+                        $message = new messageModel();
+                        $message->setMessage($data['message']);
+                        $message->setExpireDate($data['expireDate']);
+                        $message->save();
+                    }
+                    else
+                    {
+                        $message = new privateMessageModel();
+                        $message->setMessage($data['message']);
+                        $message->setExpireDate($data['expireDate']);
+                        $message->setUserId($data['account']);
+                        $message->save();
+                    }
+
+                    $form = new newMessageForm();
+                    $this->view->form = $form;
+                }
+                else
+                {
+                    $this->view->form = $form;
+                    $this->layout->addScriptBlock('$(document).ready(function() { $("#newMessage").foundation("reveal", "open"); }); ');
+                }
+            }
+            else
             {
-                $data = $form->exportFormData();
+                $this->view->form = $form;
+            }
+
+            $messages = new messagesModel();
+            $this->view->messages = $messages;
+        }
+        else
+        {
+            header("location: ".$this->_link(array("messages","account"))."");
+        }
+    }
 
-                $message = new messageModel();
-                $message->setMessage($data['message']);
-                $message->setExpireDate($data['expireDate']);
+    public function account()
+    {
+        $user = new userModel();
+        if($user->getAuthLevel() >= 500)
+        {
+            $form = new newMessageForm();
+            $form->setAction($this->_link(array("messages","account")));
 
-                if($data['account'] == 'all')
+            if($form->wasSubmitted())
+            {
+                $form->addData($_POST);
+                if($form->validate())
                 {
-                    $message->save();
+                    $data = $form->exportFormData();
+
+                    if($data['account'] == 'all')
+                    {
+                        $message = new messageModel();
+                        $message->setMessage($data['message']);
+                        $message->setExpireDate($data['expireDate']);
+                        $message->save();
+                    }
+                    else
+                    {
+                        $message = new privateMessageModel();
+                        $message->setMessage($data['message']);
+                        $message->setExpireDate($data['expireDate']);
+                        $message->setUserId($data['account']);
+                        $message->save();
+                    }
+
+                    $form = new newMessageForm();
+                    $form->setAction($this->_link(array("messages","account")));
+                    $this->view->form = $form;
                 }
                 else
                 {
-                    $message->setUserId($data['account']);
-                    $message->savePrivate();
+                    $this->view->form = $form;
+                    $this->layout->addScriptBlock('$(document).ready(function() { $("#newMessage").foundation("reveal", "open"); }); ');
                 }
-
-                $form = new newMessageForm();
-                $this->view->form = $form;
             }
             else
             {
                 $this->view->form = $form;
-                $this->layout->addScriptBlock('$(document).ready(function() { $("#newMessage").foundation("reveal", "open"); }); ');
             }
+
+            $messages = new messagesModel();
+            $this->view->messages = $messages;
         }
         else
         {
-            $this->view->form = $form;
+            header("location: ".$this->_link(array("messages","account"))."");
         }
-
-        $messages = new messagesModel();
-        $this->view->messages = $messages;
     }
 
     public function edit($id = null)
@@ -108,15 +173,9 @@ class messagesController extends Staple_Controller
         if($id != null)
         {
             $form = new editPrivateMessageForm();
-            $message = new messagesModel();
-
-            $message->load($id);
-
-            $this->view->id = $message->getId();
+            $message = new privateMessageModel();
 
-            $data['id'] = $message->getId();
-            $data['message'] = $message->getMessage();
-            $data['expireDate'] = $message->getExpireDate();
+            $data = $message->supervisorLoad($id);
 
             $form->setAction($this->_link(array('messages','edit',$message->getId())));
             $form->addData($data);
@@ -128,7 +187,7 @@ class messagesController extends Staple_Controller
                 {
                     $data = $form->exportFormData();
 
-                    $message = new messagesModel();
+                    $message = new privateMessageModel();
                     $message->setId($id);
                     $message->setMessage($data['message']);
                     $message->setExpireDate($data['expireDate']);
@@ -153,7 +212,7 @@ class messagesController extends Staple_Controller
 
     public function deleteprivate($id)
     {
-        $message = new messagesModel();
+        $message = new privateMessageModel();
         $message->deletePrivate($id);
         header("location:".$this->_link(array('messages'))."");
     }

+ 4 - 1
application/forms/newMessageForm.php

@@ -43,7 +43,10 @@ class newMessageForm extends Staple_Form
         $data = array();
         if($ids == null)
         {
-            $data['all'] = "All Accounts";
+            if($user->getAuthLevel() >= 900)
+            {
+                $data['all'] = "All Accounts";
+            }
             foreach($users as $user)
             {
                 if($user['supervisorId'] == $id)

+ 9 - 1
application/layouts/main.phtml

@@ -65,7 +65,6 @@
                             <li class=\"has-dropdown\">
                                 <a href=\"#\"><i class='fa fa-gear'></i> Tools</a>
                                 <ul class=\"dropdown\">
-                                    <li><a href=\"".$this->link(array('messages','index'))."\" ><i class=\"fa fa-envelope\" ></i > System Messages </a ></li>
                                     <li><a href=\"".$this->link(array('timesheet','admininsert'))."\" ><i class=\"fa fa-plus\" ></i > Time Insert </a ></li >
                                     <li><a href=\"".$this->link(array('reports','unlock'))."\"><i class=\"fa fa-unlock\"></i> Time Unlock</a></li>
                                 </ul>
@@ -91,6 +90,15 @@
                         ";
                     }
 
+                    if($user->getAuthLevel() >= 900)
+                    {
+                        echo "<li><a href=\"".$this->link(array('messages','index'))."\" ><i class=\"fa fa-envelope\" ></i > Messaging </a ></li>";
+                    }
+                    elseif($user->getAuthLevel() >= 500)
+                    {
+                        echo "<li><a href=\"".$this->link(array('messages','account'))."\" ><i class=\"fa fa-envelope\" ></i > Messaging </a ></li>";
+                    }
+
                     ?>
 
                     <li><a href="<?php echo $this->link(array('account','logout')) ?>"><i class="fa fa-close"></i> Logout</a></li>

+ 89 - 3
application/models/messagesModel.php

@@ -7,6 +7,9 @@ class messagesModel extends Staple_Model
     private $expiredSystemMessages;
     private $privateMessages;
     private $expiredPrivateMessages;
+    private $allPrivateMessages;
+    private $totalPrivateMessages;
+    private $supervisorMessages;
 
     /**
      * @return mixed
@@ -40,12 +43,38 @@ class messagesModel extends Staple_Model
         return $this->expiredPrivateMessages;
     }
 
+    /**
+     * @return int
+     */
+    public function getTotalPrivateMessages()
+    {
+        return $this->totalPrivateMessages;
+    }/**
+
+     * @return mixed
+     */
+    public function getAllPrivateMessages()
+    {
+        return $this->allPrivateMessages;
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getSupervisorMessages()
+    {
+        return $this->supervisorMessages;
+    }
+
     function __construct()
     {
         $this->db = Staple_DB::get();
         $this->systemMessages = $this->loadSystemMessages();
         $this->expiredSystemMessages = $this->loadExpiredSystemMessages();
         $this->privateMessages = $this->loadPrivateMessages();
+        $this->allPrivateMessages = $this->loadAllPrivateMessages();
+        $this->totalPrivateMessages = $this->countPrivateMessages();
+        $this->supervisorMessages = $this->loadSupervisorMessages();
     }
 
     private function loadSystemMessages()
@@ -54,7 +83,7 @@ class messagesModel extends Staple_Model
         $date->setTime(0,0,0);
         $timestamp = $date->format('U');
 
-        $sql = "SELECT id FROM messages WHERE expireDate >= $timestamp ORDER BY postDate DESC";
+        $sql = "SELECT id FROM messages WHERE expireDate >= $timestamp ORDER BY postDate ASC";
 
         $query = $this->db->query($sql);
         $data = array();
@@ -73,7 +102,7 @@ class messagesModel extends Staple_Model
         $date->setTime(23,59,59);
         $timestamp = $date->format('U');
 
-        $sql = "SELECT id FROM messages WHERE expireDate <= $timestamp ORDER BY postDate DESC";
+        $sql = "SELECT id FROM messages WHERE expireDate <= $timestamp ORDER BY postDate ASC";
 
         $query = $this->db->query($sql);
         $data = array();
@@ -88,10 +117,35 @@ class messagesModel extends Staple_Model
 
     private function loadPrivateMessages()
     {
+        $user = new userModel();
+        $userId = $user->getId();
+
+        $date = new DateTime();
+        $date->setTime(0,0,0);
+
+        $sql = "SELECT id FROM privateMessages WHERE userId = '".$userId."' AND reviewed = '0' ORDER BY postDate ASC limit 1";
+        $query = $this->db->query($sql);
+
+        $data = array();
+
+        while($result = $query->fetch_assoc())
+        {
+            $message = new privateMessageModel();
+            $data[] = $message->load($result['id']);
+        }
+
+        return $data;
+    }
+
+    private function loadAllPrivateMessages()
+    {
+        $user = new userModel();
+        $userId = $user->getId();
+
         $date = new DateTime();
         $date->setTime(0,0,0);
 
-        $sql = "SELECT id FROM privateMessages ORDER BY postDate DESC";
+        $sql = "SELECT id FROM privateMessages WHERE userId = '".$userId."' AND reviewed = '0' ORDER BY postDate ASC";
         $query = $this->db->query($sql);
 
         $data = array();
@@ -104,4 +158,36 @@ class messagesModel extends Staple_Model
 
         return $data;
     }
+
+    private function countPrivateMessages()
+    {
+        $user = new userModel();
+        $userId = $user->getId();
+
+        $sql = "SELECT id FROM privateMessages WHERE userId = '".$userId."' AND reviewed = '0'";
+        $query = $this->db->query($sql);
+        return $query->num_rows;
+    }
+
+    private function loadSupervisorMessages()
+    {
+        $user = new userModel();
+        $userId = $user->getId();
+
+        $date = new DateTime();
+        $date->setTime(0,0,0);
+
+        $sql = "SELECT id FROM privateMessages WHERE supervisorId = '".$userId."' ORDER BY postDate ASC";
+        $query = $this->db->query($sql);
+
+        $data = array();
+
+        while($result = $query->fetch_assoc())
+        {
+            $message = new privateMessageModel();
+            $data[] = $message->supervisorLoad($result['id']);
+        }
+
+        return $data;
+    }
 }

+ 99 - 1
application/models/privateMessageModel.php

@@ -8,7 +8,9 @@ class privateMessageModel extends messagesModel
     private $postDate;
     private $expireDate;
     private $userId;
+    private $supervisorId;
     private $reviewDate;
+    private $reviewed;
 
     /**
      * @return mixed
@@ -102,6 +104,38 @@ class privateMessageModel extends messagesModel
         $this->reviewDate = $reviewDate;
     }
 
+    /**
+     * @return mixed
+     */
+    public function getReviewed()
+    {
+        return $this->reviewed;
+    }
+
+    /**
+     * @param mixed $reviewed
+     */
+    public function setReviewed($reviewed)
+    {
+        $this->reviewed = $reviewed;
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getSupervisorId()
+    {
+        return $this->supervisorId;
+    }
+
+    /**
+     * @param mixed $supervisorId
+     */
+    public function setSupervisorId($supervisorId)
+    {
+        $this->supervisorId = $supervisorId;
+    }
+
     function __construct()
     {
         $this->db = Staple_DB::get();
@@ -109,11 +143,75 @@ class privateMessageModel extends messagesModel
 
     function load($id)
     {
-        $sql = "SELECT * FROM privateMessages WHERE id = '".$this->db->real_escape_string($id)."' ";
+        $user = new userModel();
+        $uid = $user->getId();
+
+        $sql = "SELECT * FROM privateMessages WHERE id = '".$this->db->real_escape_string($id)."' AND userId = '".$this->db->real_escape_string($uid)."'";
 
         $query = $this->db->query($sql);
         $result = $query->fetch_assoc();
 
         return $result;
     }
+
+    function supervisorLoad($id)
+    {
+        $user = new userModel();
+        $uid = $user->getId();
+
+        $sql = "SELECT * FROM privateMessages WHERE id = '".$this->db->real_escape_string($id)."' AND supervisorId = '".$this->db->real_escape_string($uid)."'";
+
+        $query = $this->db->query($sql);
+        $result = $query->fetch_assoc();
+
+        return $result;
+    }
+
+    function save()
+    {
+        if(isset($this->id))
+        {
+            //update
+            $sql = "UPDATE privateMessages SET message = '".$this->message."', expireDate ='".$this->expireDate."' WHERE id = '".$this->id."' ";
+
+            if($this->db->query($sql))
+            {
+                return true;
+            }
+        }
+        else
+        {
+            //save
+            $date = new DateTime();
+            $datetime = $date->format('U');
+            $user = new userModel();
+            $superId = $user->getId();
+
+            $sql = "INSERT INTO privateMessages (message,postDate,expireDate,userId,supervisorId) VALUES ('".$this->message."','".$datetime."','".$this->expireDate."','".$this->userId."','".$superId."')";
+            if($this->db->query($sql))
+            {
+                return true;
+            }
+        }
+    }
+
+    function delete($id)
+    {
+        $sql = "DELETE FROM privateMessages WHERE id = '".$this->db->real_escape_string($id)."'";
+
+        if($this->db->query($sql))
+        {
+            return true;
+        }
+    }
+
+    function markRead($id)
+    {
+        $sql = "UPDATE privateMessages SET reviewed = '".$this->db->real_escape_string(1)."' WHERE id = '".$this->db->real_escape_string($id)."' ";
+
+        if($this->db->query($sql))
+        {
+            return true;
+        }
+    }
 }

+ 56 - 5
application/views/index/index.phtml

@@ -1,13 +1,13 @@
 <?php
-    if(count($this->messages) > 0)
+    if(count($this->messages->systemMessages) > 0)
     {
         echo "
             <div class=\"section message\">
                 <div class=\"row\">
                     <div class=\"small-12 columns\">";
-                        foreach($this->messages as $item)
+                        foreach($this->messages->systemMessages as $message)
                         {
-                            echo "<p><i class='fa fa-warning'></i> ".$item['message']."</p>";
+                            echo "<p><i class='fa fa-warning'></i> ".$message['message']."</p>";
                         }
                         echo "
                     </div>
@@ -15,8 +15,34 @@
             </div>
         ";
     }
-?>
 
+    if(count($this->messages->allPrivateMessages) > 0)
+    {
+
+        echo "
+        <div class=\"section\">
+            <div class=\"row\">
+                <div class=\"small-12 columns\">
+                    <div class=\"\">
+                        <h2>Messages <small> </small></h2>
+        ";
+        echo "<ul>";
+        foreach($this->messages->allPrivateMessages as $message)
+        {
+            $date = new DateTime();
+            $date->setTimestamp($message['postDate']);
+            echo "<li><b>".$date->format('l, F jS Y')."</b><br>".$message['message']."</li>";
+        }
+        echo "</ul>";
+
+        echo "
+                </div>
+            </div>
+        </div>
+    </div>
+        ";
+    }
+?>
 <div class="section">
     <div class="row">
         <div class="small-6 columns">
@@ -78,4 +104,29 @@
             <a class='button round' href="<?php echo $this->link(array('timesheet')) ?>"><i class='fa fa-clock-o'></i> Your Time Sheet</a>
         </div>
     </div>
-</div>
+</div>
+
+<div id="privateMessages" class="reveal-modal medium" data-reveal aria-labelledby="privateMessages" aria-hidden="true" role="dialog">
+
+    <?php
+    if(count($this->messages->privateMessages) > 0)
+    {
+        $total = $this->messages->totalPrivateMessages;
+        $i = 1;
+
+        echo "<h2 id=\"modalTitle\"><i class=\"fa fa-envelope\"></i> New Message <small>$i of $total</small></h2>";
+        foreach ($this->messages->privateMessages as $message)
+        {
+            echo "
+            <p>" . $message['message'] . "</p>
+            <ul class=\"button-group radius text-center\">
+                <li><a class=\"button\" href=\"".$this->link(array("index","read",$message['id']))."\"><i class=\"fa fa-check-square\"></i> Mark as read</a></li>
+            </ul>";
+            $i++;
+        }
+
+    }
+    ?>
+    <a class="close-reveal-modal" aria-label="Close">&#215;</a>
+</div>
+

+ 70 - 0
application/views/messages/account.phtml

@@ -0,0 +1,70 @@
+<div class="section">
+    <div class="row">
+        <div class="small-6 columns">
+            <h2><i class="fa fa-envelope"></i> Messaging</h2>
+        </div>
+        <div class="small-6 columns right">
+            <ul class="button-group radius right">
+                <li><a href="#" data-reveal-id="newMessage" class="button success"><i class="fa fa-plus"></i> New Message</a></li>
+                <li><a href="<?php echo $this->link(array('messages','expired')) ?>" class="button secondary"><i class="fa fa-history"></i> Expired</a></li>
+            </ul>
+        </div>
+    </div>
+    <div class="row">
+        <div class="small-12 columns">
+            <?php
+
+            if(count($this->messages->supervisorMessages) > 0)
+            {
+                echo "
+                        <table width='100%'>
+                            <thead>
+                                <tr>
+                                    <th>Post Date</th>
+                                    <th>Sent to</th>
+                                    <th>Message</th>
+                                    <th>Expiration Date (EOD)</th>
+                                    <th>Options</th>
+                                </tr>
+                            </thead>
+                            <tbody>
+                    ";
+
+                foreach($this->messages->supervisorMessages as $message)
+                {
+                    $date = new DateTime();
+                    $expireDate = $date->setTimestamp($message['expireDate'])->format('l, F jS Y');
+                    $postDate = $date->setTimestamp($message['postDate'])->format('l, F jS Y');
+
+                    $user = new userModel();
+                    $account = $user->userInfo($message['userId']);
+
+                    echo "
+
+                            <tr>
+                                <td>$postDate</td>
+                                <td>".$account['lastName'].", ".$account['firstName']."</td>
+                                <td>".$message['message']."</td>
+                                <td>$expireDate</td>
+                                <td><a href='".$this->link(array('messages','editprivate',$message['id']))."'>Edit</a></td>
+                            </tr>
+
+                        ";
+                }
+                echo "</tbody></table>";
+            }
+            else
+            {
+                echo "<div class='small-12 columns text-center'>- No system messages -</div>";
+            }
+
+            ?>
+        </div>
+    </div>
+</div>
+
+<div id="newMessage" class="reveal-modal small" data-reveal aria-labelledby="New Message" aria-hidden="true" role="dialog">
+    <h2 id="modalTitle"><i class="fa fa-plus"></i> New Message</h2>
+    <?php echo $this->form; ?>
+    <a class="close-reveal-modal" aria-label="Close">&#215;</a>
+</div>

+ 8 - 7
application/views/messages/index.phtml

@@ -1,7 +1,7 @@
 <div class="section">
     <div class="row">
         <div class="small-6 columns">
-            <h2><i class="fa fa-envelope"></i> System Messages</h2>
+            <h2><i class="fa fa-envelope"></i> Messaging</h2>
         </div>
         <div class="small-6 columns right">
             <ul class="button-group radius right">
@@ -57,14 +57,14 @@
     </div>
     <div class="row">
         <div class="small-12 columns">
-            <h2><i class="fa fa-envelope-square"></i> Private Messages</h2>
+            <h2><i class="fa fa-envelope-square"></i> Account Messaging</h2>
         </div>
     </div>
     <div class="row">
         <div class="small-12 columns">
             <?php
 
-            if(count($this->messages->privateMessages) > 0)
+            if(count($this->messages->supervisorMessages) > 0)
             {
                 echo "
                         <table width='100%'>
@@ -79,10 +79,11 @@
                             </thead>
                             <tbody>
                     ";
-                foreach($this->messages->privateMessages as $message)
+                foreach($this->messages->supervisorMessages as $message)
                 {
                     $date = new DateTime();
-                    $date->setTimestamp($message['expireDate']);
+                    $expireDate = $date->setTimestamp($message['expireDate'])->format('l, F jS Y');
+                    $postDate = $date->setTimestamp($message['postDate'])->format('l, F jS Y');
 
                     $user = new userModel();
                     $account = $user->userInfo($message['userId']);
@@ -90,10 +91,10 @@
                     echo "
 
                             <tr>
-                                <td>".$message['postDate']."</td>
+                                <td>$postDate</td>
                                 <td>".$account['lastName'].", ".$account['firstName']."</td>
                                 <td>".$message['message']."</td>
-                                <td>".$date->format('l, F jS Y')."</td>
+                                <td>$expireDate</td>
                                 <td><a href='".$this->link(array('messages','editprivate',$message['id']))."'>Edit</a></td>
                             </tr>