Эх сурвалжийг харах

Added basic messaging system.

Adam Day 9 жил өмнө
parent
commit
6593e5d771

+ 2 - 2
application/controllers/indexController.php

@@ -15,8 +15,8 @@ class indexController extends Staple_Controller
 	{
 		$this->view->authLevel = $this->authLevel;
 
-		$messages = array();
-		$this->view->messages = $messages;
+		$messages = new messagesModel();
+		$this->view->messages = $messages->getMessages();
 
 		$date = new DateTime();
 		$date->setTime(0,0,0);

+ 106 - 0
application/controllers/messagesController.php

@@ -0,0 +1,106 @@
+<?php
+
+class messagesController extends Staple_Controller
+{
+    public function _start()
+    {
+        $auth = Staple_Auth::get();
+        $this->authLevel = $auth->getAuthLevel();
+        if($this->authLevel < 900)
+        {
+            header("location:".$this->_link(array('index','index'))."");
+        }
+    }
+
+    public function index()
+    {
+        $form = new newMessageForm();
+
+        if($form->wasSubmitted())
+        {
+            $form->addData($_POST);
+            if($form->validate())
+            {
+                $data = $form->exportFormData();
+
+                $message = new messagesModel();
+                $message->setMessage($data['message']);
+                $message->setExpireDate($data['expireDate']);
+                $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
+        {
+            $this->view->form = $form;
+        }
+
+        $messages = new messagesModel();
+        $this->view->messages = $messages->getMessages();
+    }
+
+    public function edit($id = null)
+    {
+        if($id != null)
+        {
+            $form = new editMessageForm();
+            $message = new messagesModel();
+
+            $message->load($id);
+
+            $this->view->id = $message->getId();
+
+            $data['id'] = $message->getId();
+            $data['message'] = $message->getMessage();
+            $data['expireDate'] = $message->getExpireDate();
+
+            $form->setAction($this->_link(array('messages','edit',$message->getId())));
+            $form->addData($data);
+
+            if($form->wasSubmitted())
+            {
+                $form->addData($_POST);
+                if($form->validate())
+                {
+                    $data = $form->exportFormData();
+
+                    $message = new messagesModel();
+                    $message->setId($id);
+                    $message->setMessage($data['message']);
+                    $message->setExpireDate($data['expireDate']);
+                    $message->save();
+                    header("location:".$this->_link(array('messages'))."");
+                }
+                else
+                {
+                    $this->view->form = $form;
+                }
+            }
+            else
+            {
+                $this->view->form = $form;
+            }
+        }
+        else
+        {
+            header("location: ".$this->_link(array('messages'))."");
+        }
+    }
+
+    public function delete($id)
+    {
+        $message = new messagesModel();
+        $message->delete($id);
+        header("location:".$this->_link(array('messages'))."");
+    }
+}
+
+?>

+ 29 - 0
application/forms/editMessageForm.php

@@ -0,0 +1,29 @@
+<?php
+
+class editMessageForm extends Staple_Form
+{
+    public function _start()
+    {
+        $this->setLayout('editMessageFormLayout');
+
+        $this->setName('editMessageForm');
+
+        $message = new Staple_Form_FoundationTextareaElement('message','Message');
+        $message->setRequired()
+            ->addAttrib("placeholder","1000 character limit")
+            ->addValidator(new Staple_Form_Validate_Length(1,1000))
+            ->addAttrib("style","height:200px;");
+
+        $expireDate = new Staple_Form_FoundationTextElement('expireDate','Expiration Date');
+        $expireDate->setRequired()
+            ->addValidator(new Staple_Form_Validate_Date())
+            ->addAttrib('placeholder','mm/dd/yyyy');
+
+        $submit = new Staple_Form_FoundationSubmitElement('submit','Submit');
+        $submit->addClass('button expand radius');
+
+        $this->addField($expireDate, $message, $submit);
+    }
+}
+
+?>

+ 26 - 0
application/forms/layouts/editMessageFormLayout.phtml

@@ -0,0 +1,26 @@
+<?php echo $this->formstart(); ?>
+    <div class="row">
+        <div class="small-12 columns">
+            <?php echo $this->fields['expireDate'] ?>
+        </div>
+        <div class="small-12 columns">
+            <?php echo $this->fields['message'] ?>
+        </div>
+        <div class="small-12 columns">
+            <?php echo $this->fields['submit'] ?>
+        </div>
+    </div>
+<?php echo $this->formend(); ?>
+
+<script>
+    $(document).ready(function() {
+        $(function () {
+            $("#expireDate").datepicker({
+                numberOfMonths: 1,
+                minDate: 0,
+                showWeek: false,
+                showButtonPanel: false
+            });
+        });
+    });
+</script>

+ 26 - 0
application/forms/layouts/newMessageFormLayout.phtml

@@ -0,0 +1,26 @@
+<?php echo $this->formstart(); ?>
+    <div class="row">
+        <div class="small-12 columns">
+            <?php echo $this->fields['expireDate'] ?>
+        </div>
+        <div class="small-12 columns">
+            <?php echo $this->fields['message'] ?>
+        </div>
+        <div class="small-12 columns">
+            <?php echo $this->fields['submit'] ?>
+        </div>
+    </div>
+<?php echo $this->formend(); ?>
+
+<script>
+    $(document).ready(function() {
+        $(function () {
+            $("#expireDate").datepicker({
+                numberOfMonths: 1,
+                minDate: 0,
+                showWeek: false,
+                showButtonPanel: false
+            });
+        });
+    });
+</script>

+ 30 - 0
application/forms/newMessageForm.php

@@ -0,0 +1,30 @@
+<?php
+
+class newMessageForm extends Staple_Form
+{
+    public function _start()
+    {
+        $this->setLayout('newMessageFormLayout');
+
+        $this->setName('newMessageForm')
+            ->setAction($this->link(array('messages','index')));
+
+        $message = new Staple_Form_FoundationTextareaElement('message','Message');
+        $message->setRequired()
+            ->addAttrib("placeholder","1000 character limit")
+            ->addValidator(new Staple_Form_Validate_Length(1,1000))
+            ->addAttrib("style","height:200px;");
+
+        $expireDate = new Staple_Form_FoundationTextElement('expireDate','Expiration Date');
+        $expireDate->setRequired()
+            ->addValidator(new Staple_Form_Validate_Date())
+            ->addAttrib('placeholder','mm/dd/yyyy');
+
+        $submit = new Staple_Form_FoundationSubmitElement('submit','Submit');
+        $submit->addClass('button expand radius');
+
+        $this->addField($expireDate, $message, $submit);
+    }
+}
+
+?>

+ 1 - 0
application/layouts/main.phtml

@@ -65,6 +65,7 @@
                             <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>

+ 146 - 0
application/models/messagesModel.php

@@ -0,0 +1,146 @@
+<?php
+
+class messagesModel extends Staple_Model
+{
+    private $db;
+    private $id;
+    private $message;
+    private $postDate;
+    private $expireDate;
+
+    /**
+     * @return mixed
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+
+    /**
+     * @param mixed $id
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getMessage()
+    {
+        return $this->message;
+    }
+
+    /**
+     * @param mixed $message
+     */
+    public function setMessage($message)
+    {
+        $this->message = $message;
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getExpireDate()
+    {
+        $date = new DateTime();
+
+        $date->setTimestamp($this->expireDate);
+
+        return $date->format('m/d/Y');
+    }
+
+    /**
+     * @param mixed $expireDate
+     */
+    public function setExpireDate($expireDate)
+    {
+        $this->expireDate = strtotime($expireDate);
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getPostDate()
+    {
+        return $this->postDate;
+    }
+
+    function __construct()
+    {
+        $this->db = Staple_DB::get();
+    }
+
+    function load($id)
+    {
+        $sql = "SELECT * FROM messages WHERE id = '".$this->db->real_escape_string($id)."' ";
+
+        $query = $this->db->query($sql);
+        $result = $query->fetch_assoc();
+
+        $this->id = $result['id'];
+        $this->expireDate = $result['expireDate'];
+        $this->message = $result['message'];
+        $this->postDate = $result['postDate'];
+    }
+
+    function getMessages()
+    {
+        $date = new DateTime();
+        $date->setTime(0,0,0);
+
+        $sql = "
+        SELECT * FROM messages WHERE expireDate >= '".$this->db->real_escape_string($date->format('U'))."' ORDER BY postDate DESC;
+        ";
+
+        $data = array();
+
+        $query = $this->db->query($sql);
+
+        while($result = $query->fetch_assoc())
+        {
+            $data[] = $result;
+        }
+
+        return $data;
+    }
+
+    function save()
+    {
+        if(isset($this->id))
+        {
+            //Edit
+            $sql = "UPDATE messages SET expireDate = '".$this->expireDate."', message = '".$this->message."' WHERE id = '".$this->id."';";
+
+            if($this->db->query($sql))
+            {
+                return true;
+            }
+        }
+        else
+        {
+            //Save
+            $sql = "INSERT INTO messages (message,expireDate) VALUES ('".$this->db->real_escape_string($this->message)."','".$this->db->real_escape_string($this->expireDate)."')";
+
+            if($this->db->query($sql))
+            {
+                return true;
+            }
+        }
+    }
+
+    function delete($id)
+    {
+        $sql = "DELETE FROM messages WHERE id = '".$this->db->real_escape_string($id)."';";
+
+        if($this->db->query($sql))
+        {
+            return true;
+        }
+    }
+
+
+
+}

+ 2 - 2
application/views/index/index.phtml

@@ -5,9 +5,9 @@
             <div class=\"section message\">
                 <div class=\"row\">
                     <div class=\"small-12 columns\">";
-                        foreach($this->messages as $message)
+                        foreach($this->messages as $item)
                         {
-                            echo "<p>".$message."</p>";
+                            echo "<p><i class='fa fa-warning'></i> ".$item['message']."</p>";
                         }
                         echo "
                     </div>

+ 26 - 0
application/views/messages/edit.phtml

@@ -0,0 +1,26 @@
+<div class="section">
+    <div class="row">
+        <div class="small-6 columns">
+            <h1><i class="fa fa-pencil"></i> Edit Message</h1>
+        </div>
+        <div class="small-6 columns right">
+            <ul class="button-group radius right">
+                <li><a href="<?php echo $this->link(array('messages'))?>" class="button secondary"><i class="fa fa-arrow-left"></i> Back</a></li>
+                <li><a href="#" data-reveal-id="delete" class="button alert"><i class="fa fa-trash"></i> Delete</a></li>
+            </ul>
+        </div>
+    </div>
+    <div class="row">
+        <div class="small-12 columns">
+            <?php echo $this->form ?>
+        </div>
+    </div>
+</div>
+
+<div id="delete" class="reveal-modal small text-center" data-reveal aria-labelledby="New Message" aria-hidden="true" role="dialog">
+    <h2 id="modalTitle"><i class="fa fa-alert"></i> Delete Message?</h2>
+    <ul class="button-group radius">
+        <li><a href="<?php echo $this->link(array('messages','delete',$this->id)) ?>" class="button alert"><i class="fa fa-trash"></i> Confirm & Delete</a></li>
+    </ul>
+    <a class="close-reveal-modal" aria-label="Close">&#215;</a>
+</div>

+ 62 - 0
application/views/messages/index.phtml

@@ -0,0 +1,62 @@
+<div class="section">
+    <div class="row">
+        <div class="small-6 columns">
+            <h1><i class="fa fa-envelope"></i> System Messages</h1>
+        </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>
+            </ul>
+        </div>
+    </div>
+    <div class="row">
+        <div class="small-12 columns">
+            <?php
+
+                if(count($this->messages) > 0)
+                {
+                    echo "
+                        <table width='100%'>
+                            <thead>
+                                <tr>
+                                    <th>Post Date</th>
+                                    <th>Message</th>
+                                    <th>Expiration Date (EOD)</th>
+                                    <th>Options</th>
+                                </tr>
+                            </thead>
+                            <tbody>
+                    ";
+                    foreach($this->messages as $message)
+                    {
+                        $date = new DateTime();
+                        $date->setTimestamp($message['expireDate']);
+
+                        echo "
+
+                            <tr>
+                                <td>".$message['postDate']."</td>
+                                <td>".$message['message']."</td>
+                                <td>".$date->format('l, F jS Y')."</td>
+                                <td><a href='".$this->link(array('messages','edit',$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>