/**
  * A method to return the datetime of meeting associated with the note
  * @return string the datetime
  */
 function getMeetingDatetime()
 {
     # If this note has a meeting associated with it
     if ($this->MeetingId != 0) {
         require_once 'Meeting.php';
         # Get the meeting object
         $meeting = new Meeting($this->MeetingId);
         # Get datetime and return it in user friendly format
         $meetingDatetime = $meeting->getDatetime();
         return DatetimeConverter::getUserFriendlyDateTimeFormat($meetingDatetime);
         # Otherwise return an empty string
     } else {
         return "";
     }
 }
    ?>
                <?php 
    echo $text;
    ?>
            <?php 
}
?>
        </strong>
        has been <?php 
echo $notification::getActionText($notification->getAction());
?>
 by <?php 
echo $notification->getUsername();
?>
        <br><span class="label info round"><?php 
echo DatetimeConverter::getUserFriendlyDateTimeFormat($notification->getDatetimeCreated());
?>
</span>
        <!-- If the note is deleted, display a warning -->
        <?php 
if ($notification->getObject()->getIsDeleted()) {
    ?>
            <span class="label alert round">deleted</span>
        <?php 
}
?>
    </div>

    <a href="<?php 
echo SITE_URL;
?>
 /**
  * A method to return datetime created in more user friendly way
  * @return string the datetime of creation
  */
 public function getDatetimeCreatedUserFriendly()
 {
     return DatetimeConverter::getUserFriendlyDateTimeFormat($this->DatetimeCreated);
 }
 /**
  * A method to process POST request for editing an existing AP
  * @param null $post the $_POST array
  */
 public function editPost($post)
 {
     # Retrieve action point from database based on provided id
     $actionPoint = $this->model('ActionPoint', $post['id']);
     # Check access rights for user
     $this->checkAuth($actionPoint);
     # Check if action point has been marked as done and it was approved (if so, no access)
     $this->checkAuthDone($actionPoint);
     # Save the existing actionPoint to the temporary table
     # in order to retrieve it if not approved by supervisor
     $actionPoint->SaveTemporary();
     # Get original text and deadline of the action point
     $originalText = $actionPoint->getText();
     $originalDeadline = DatetimeConverter::getUserFriendlyDateTimeFormat($actionPoint->getDeadline());
     # Get details from post request
     $deadline = $post['deadline'];
     $deadline_time_hours = $post['deadline_time_hours'];
     $deadline_time_minutes = $post['deadline_time_minutes'];
     $text = $post['text'];
     $meetingId = $post['meetingId'];
     $isDone = 0;
     # If the action point is done
     if (isset($post['isDone'])) {
         $isDone = 1;
     }
     # If it's the supervisor who edits, he/she can provide a grade
     $grade = 0;
     if (isset($post['grade'])) {
         $grade = $post['grade'];
     }
     # Default is 0 because default is student and every time student
     # edits action point, isApproved must be set to 0
     $isApproved = 0;
     # If it's a supervisor who edits the AP, isApproved is automatically true with any edit
     if (HTTPSession::getInstance()->USER_TYPE == User::USER_TYPE_SUPERVISOR) {
         $isApproved = 1;
     }
     # Set correct format of provided date
     $date = DateTime::createFromFormat('d-m-Y H:i', $deadline . " " . $deadline_time_hours . ":" . $deadline_time_minutes);
     $date = $date->format('Y-m-d H:i:s');
     # Set provided information
     $actionPoint->setDeadline($date);
     $actionPoint->setText($text);
     $actionPoint->setMeetingId($meetingId);
     $actionPoint->setProjectId(HTTPSession::getInstance()->PROJECT_ID);
     $actionPoint->setIsDone($isDone);
     if ($grade) {
         $actionPoint->setGrade($grade);
     }
     $actionPoint->setIsApproved($isApproved);
     # If the action point is approved, we must delete the temporary one from temp table
     # However we want to retrieve it for the notification, so I'll just keep it here for future reference
     #if($isApproved)
     #    $actionPoint->RemoveTemporary();
     # Save the action point
     $actionPoint->Save();
     # Create a notification
     new NotificationAP($actionPoint->getID(), NotificationAP::AMENDED);
     # Redirect back to action points
     header('Location: ' . SITE_URL . 'actionpoints/' . $post['id']);
     die;
 }
                    <input name="text" placeholder="e.g. Draft of chapter 6" type="text" required>
                </label>
                <small class="error">Name of the action point is required</small>
            </div>
            <div class="large-12 columns">
                <label>This action point has been agreed on a meeting: <small>required</small>
                    <select name="meetingId" required>
                        <option value>Choose a meeting</option>
                        <?php 
    foreach ($data["meetings"] as $meeting) {
        ?>
                            <option value="<?php 
        echo $meeting->getID();
        ?>
"><?php 
        echo DatetimeConverter::getUserFriendlyDateTimeFormat($meeting->getDatetime());
        ?>
</option>
                        <?php 
    }
    ?>
                    </select>
                </label>
                <small class="error">Every action point has to be agreed on a certain meeting</small>
            </div>

            <div class="large-12 columns top-10">
                <input class="button" type="submit" name="addActionPoint" value="Add">
            </div>
        </form>
        </div><!-- row -->
                <?php 
    echo $data['note']->getTitle();
    ?>
            <?php 
}
?>
            <!-- Is the note private? Display a label -->
            <?php 
if ($data['note']->getIsPrivate()) {
    ?>
                <span class="label info round">Private</span>
            <?php 
}
?>
        </h4>

        <div><?php 
echo $data['note']->getText();
?>
</div>
        <hr>
        <span class="created">Created by <?php 
echo $data['note']->getUsername();
?>
 on <?php 
echo DatetimeConverter::getUserFriendlyDateTimeFormat($data['note']->getDatetimeCreated());
?>
</span>
    </div><!-- note -->
</div>
 public function getRepeatUntilUserFriendly()
 {
     return DatetimeConverter::getUserFriendlyDateTimeFormat($this->getRepeatUntil());
 }
 /**
  * A method to process POST request for editing an existing meeting
  * @param null $post the $_POST array
  */
 public function editPost($post = null)
 {
     if (isset($post)) {
         # Create an object of existing meeting
         $meeting = $this->model('Meeting', $post['id']);
         # Check if we have access to editing
         $this->checkAuthIsApproved($meeting);
         $this->checkAuthCancelled($meeting);
         $this->checkAuthProjectScope($meeting->getProjectId());
         # Set googleEventId to the value provided from database (if any)
         $googleEventId = $meeting->getGoogleEventId();
         # Get details from post request
         $deadline = $post['deadline'];
         $deadline_time_hours = $post['deadline_time_hours'];
         $deadline_time_minutes = $post['deadline_time_minutes'];
         $isApproved = 0;
         if (isset($post['isApproved'])) {
             $isApproved = 1;
         }
         # If it's the supervisor who edits, it's automatically approved
         if (HTTPSession::getInstance()->USER_TYPE == User::USER_TYPE_SUPERVISOR) {
             $isApproved = 1;
         }
         $arrivedOnTime = 0;
         if (isset($post['arrivedOnTime'])) {
             $arrivedOnTime = 1;
         }
         $takenPlace = 0;
         if (isset($post['takenPlace'])) {
             $takenPlace = 1;
         }
         $isCancelled = 0;
         if (isset($post['isCancelled'])) {
             $isCancelled = 1;
         }
         # Set correct format of provided date
         $dateTime = DateTime::createFromFormat('d-m-Y H:i', $deadline . " " . $deadline_time_hours . ":" . $deadline_time_minutes);
         $date = $dateTime->format('Y-m-d H:i:s');
         # Set meeting with provided details
         $meeting->setDatetime($date);
         $meeting->setIsApproved($isApproved);
         $meeting->setTakenPlace($takenPlace);
         $meeting->setArrivedOnTime($arrivedOnTime);
         $meeting->setIsCancelled($isCancelled);
         # Check if meeting is approved by a supervisor and user is logged in as google user
         # Also check if googleEventId exists for this meeting
         if ($isApproved && !empty(GoogleAuth::$auth) && !empty($googleEventId)) {
             # Get google auth format of datetime
             $datetimeGoogleStart = DatetimeConverter::getGoogleAuthDateTimeFormat($date);
             $datetimeGoogleEnd = $dateTime;
             $datetimeGoogleEnd->modify("+1 hour");
             $datetimeGoogleEnd = DatetimeConverter::getGoogleAuthDateTimeFormat($datetimeGoogleEnd->format('Y-m-d H:i:s'));
             # In that case, we can add it to the google calendar and save the id of this event
             $googleEventId = GoogleAuth::getInstance()->editEventInCalendar($googleEventId, $datetimeGoogleStart, $datetimeGoogleEnd);
         }
         if (!empty($googleEventId)) {
             $meeting->setGoogleEventId($googleEventId);
         }
         # Save changes
         $meeting->Save();
         # If meeting has taken place, create a notification
         if ($takenPlace) {
             new NotificationMeeting($meeting->getID(), NotificationMeeting::TAKEN_PLACE);
         }
     }
     # Redirect back to meetings
     header('Location: ' . SITE_URL . 'meetings/' . $post['id']);
     die;
 }