<?php

// funções para armazenar e recuperar mensagens da sessão

// assegura o início da sessão
if(!isset($_SESSION)) {
  @session_start();
}

// nome do objeto em sessão
define('SESSION_MSG_NAME', 'codeMessages');
//unset($_SESSION[SESSION_MSG_NAME]);
// adiciona mensagem informativa na sessão
function addMessage($msg) {
  $codeMessages = _getCodeMessages();
  $codeMessages['msg'][] = $msg;
  _setCodeMessages($codeMessages);
}
// adiciona mensagem de erro na sessão
function addError($msg) {
  $codeMessages = _getCodeMessages();
  $codeMessages['error'][] = $msg;
  _setCodeMessages($codeMessages);
}
// função para recuperar ou criar um novo objeto na sessão
function _getCodeMessages() {
  if (!isset($_SESSION[SESSION_MSG_NAME])) {
    $codeMessages = array();
    $codeMessages['msg'] = array();
    $codeMessages['error'] = array();
    _setCodeMessages($codeMessages);
  }
  $codeMessages = $_SESSION[SESSION_MSG_NAME];
  return $codeMessages;
}
//
function _setCodeMessages($codeMessages) {
  $_SESSION[SESSION_MSG_NAME] = $codeMessages;
}
// retorna array com as mensagens da sessão
function getMessages() {
  return _getCodeMessages()['msg'];
}
// retorna array com as mensagens de erro da sessão
function getErrors() {
  return _getCodeMessages()['error'];
}
// desenha na tela as mensagens de erro e limpa da sessão
function displayMessagesAndErrors() {
  $html = '';
  $erros = getErrors();
  if (!empty($erros)) {
    $html .= '<div class="alert alert-danger alert-dismissible" role="alert">
      <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
      <ul>' . PHP_EOL;
    foreach($erros as $erro) {
      $html .= '<li>' . htmlentities($erro, ENT_NOQUOTES, 'utf-8') . '</li>' . PHP_EOL;
    }
    $html .= '</ul></div>';
  }
  $messages = getMessages();
  if (!empty($messages)) {
    $html .= '<div class="alert alert-info alert-dismissible" role="alert">
      <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
      <ul>' . PHP_EOL;
    foreach($messages as $msg) {
      $html .= '<li>' . htmlentities($msg, ENT_NOQUOTES, 'utf-8') . '</li>' . PHP_EOL;
    }
    $html .= '</ul></div>';
  }
  if (isset($_SESSION[SESSION_MSG_NAME])) {
    unset($_SESSION[SESSION_MSG_NAME]);
  }
  //echo '<pre>' . var_export($html, true) . '</pre>';
  echo $html;
}