<?php

use EesyPHP\Check;
use EesyPHP\Log;
use EesyPHP\Session;
use EesyPHP\Tpl;
use EesyPHP\Url;

use function EesyPHP\vardump;

/*
 * Check values helpers
 */
function check_status($status) {
  global $status_list;
  return array_key_exists($status, $status_list);
}

/*
 * Handling item POST data
 */
function handle_item_post_data(&$info, $enabled_fields=null, $required_fields=null, &$item=null,
                               &$changes=null) {
  $field_errors=array();
  if (isset($_POST['submit'])) {
    Log :: debug('POST data : '.vardump($_POST));
    // Name
    if (!$enabled_fields || in_array('name', $enabled_fields)) {
      if (isset($_POST['name'])) {
        if (Check :: name($_POST['name'])) {
          $info['name'] = $_POST['name'];
        }
        else {
          $field_errors['name'] = "Ce nom est invalide.";
        }
      }
      else {
        $field_errors['name'] = "Cette information est obligatoire.";
      }
    }

    // status
    if (!$enabled_fields || in_array('status', $enabled_fields)) {
      if (isset($_POST['status']) && check_status($_POST['status'])) {
        $info['status'] = $_POST['status'];
      }
      else {
        $field_errors['status'] = "Cette information est obligatoire.";
      }
    }

    // description
    if (
      isset($_POST['description']) &&
      (!$enabled_fields || in_array('description', $enabled_fields))
    ) {
      if (Check :: is_empty(trim($_POST['description']))) {
        $info['description'] = null;
      }
      else if (Check :: description($_POST['description'])) {
        $info['description'] = $_POST['description'];
      }
      else {
        $field_errors['description'] = "Cette description est invalide.";
      }
    }
  }

  // Check custom required fields
  if (is_array($required_fields)) {
    foreach ($required_fields as $field) {
      if (array_key_exists($field, $field_errors))
        continue;
      if (array_key_exists($field, $info) && !is_null($info[$field]) && !Check :: is_empty($info))
        continue;
      $field_errors[$field] = "Cette information est obligatoire.";
    }
  }

  if (empty($field_errors) && is_array($item) && !is_null($changes)) {
    $changes = array();
    foreach ($info as $key => $value) {
      if ($value != $item[$key])
        $changes[$key] = $value;
    }
  }
  return $field_errors;
}

/*
 * Parser/formater values helpers
 */

function can_modify($item) {
  return can_do(
    $item,
    array('pending')
  );
}

function can_archive($item) {
  return can_do(
    $item,
    array('refused', 'validated')
  );
}

function can_delete($item) {
  return can_do(
    $item,
    array('archived')
  );
}

function can_do($item, $status=array()) {
  return in_array($item['status'], $status);
}

# vim: tabstop=2 shiftwidth=2 softtabstop=2 expandtab