fossasia/engelsystem

View on GitHub
includes/controller/shifttypes_controller.php

Summary

Maintainability
C
7 hrs
Test Coverage
<?php

function shifttype_link($shifttype) {
  return page_link_to('shifttypes') . '&action=view&shifttype_id=' . $shifttype['id'];
}

/**
 * Delete a shifttype.
 */
function shifttype_delete_controller() {
  if (! isset($_REQUEST['shifttype_id']))
    redirect(page_link_to('shifttypes'));
  $shifttype = ShiftType($_REQUEST['shifttype_id']);
  if ($shifttype === false)
    engelsystem_error('Unable to load shifttype.');
  if ($shifttype == null)
    redirect(page_link_to('shifttypes'));

  if (isset($_REQUEST['confirmed'])) {
    $result = ShiftType_delete($shifttype['id']);
    if ($result === false)
      engelsystem_error('Unable to delete shifttype.');

    engelsystem_log('Deleted shifttype ' . $shifttype['name']);
    success(sprintf(_('Shifttype %s deleted.'), $shifttype['name']));
    redirect(page_link_to('shifttypes'));
  }

  return array(
      sprintf(_("Delete shifttype %s"), $shifttype['name']),
      ShiftType_delete_view($shifttype)
  );
}

/**
 * Edit or create shift type.
 */
function shifttype_edit_controller() {
  $shifttype_id = null;
  $name = "";
  $angeltype_id = null;
  $description = "";

  $angeltypes = AngelTypes();
  if ($angeltypes === false)
    engelsystem_error("Unable to load angel types.");

  if (isset($_REQUEST['shifttype_id'])) {
    $shifttype = ShiftType($_REQUEST['shifttype_id']);
    if ($shifttype === false)
      engelsystem_error('Unable to load shifttype.');
    if ($shifttype == null) {
      error(_('Shifttype not found.'));
      redirect(page_link_to('shifttypes'));
    }
    $shifttype_id = $shifttype['id'];
    $name = $shifttype['name'];
    $angeltype_id = $shifttype['angeltype_id'];
    $description = $shifttype['description'];
  }

  if (isset($_REQUEST['submit'])) {
    $ok = true;

    if (isset($_REQUEST['name']) && $_REQUEST['name'] != '')
      $name = strip_request_item('name');
    else {
      $ok = false;
      error(_('Please enter a name.'));
    }

    if (isset($_REQUEST['angeltype_id']) && preg_match("/^[0-9]+$/", $_REQUEST['angeltype_id']))
      $angeltype_id = $_REQUEST['angeltype_id'];
    else
      $angeltype_id = null;

    if (isset($_REQUEST['description']))
      $description = strip_request_item_nl('description');

    if ($ok) {
      if ($shifttype_id) {
        $result = ShiftType_update($shifttype_id, $name, $angeltype_id, $description);
        if ($result === false)
          engelsystem_error('Unable to update shifttype.');
        engelsystem_log('Updated shifttype ' . $name);
        success(_('Updated shifttype.'));
      } else {
        $shifttype_id = ShiftType_create($name, $angeltype_id, $description);
        if ($shifttype_id === false)
          engelsystem_error('Unable to create shifttype.');
        engelsystem_log('Created shifttype ' . $name);
        success(_('Created shifttype.'));
      }
      redirect(page_link_to('shifttypes') . '&action=view&shifttype_id=' . $shifttype_id);
    }
  }

  return [
      shifttypes_title(),
      ShiftType_edit_view($name, $angeltype_id, $angeltypes, $description, $shifttype_id)
  ];
}

function shifttype_controller() {
  if (! isset($_REQUEST['shifttype_id']))
    redirect(page_link_to('shifttypes'));
  $shifttype = ShiftType($_REQUEST['shifttype_id']);
  if ($shifttype === false)
    engelsystem_error('Unable to load shifttype.');
  if ($shifttype == null)
    redirect(page_link_to('shifttypes'));

  $angeltype = null;
  if ($shifttype['angeltype_id'] != null) {
    $angeltype = AngelType($shifttype['angeltype_id']);
    if ($angeltype === false)
      engelsystem_error('Unable to load angeltype.');
  }

  return [
      $shifttype['name'],
      ShiftType_view($shifttype, $angeltype)
  ];
}

/**
 * List all shift types.
 */
function shifttypes_list_controller() {
  $shifttypes = ShiftTypes();
  if ($shifttypes === false)
    engelsystem_error("Unable to load shifttypes.");

  return [
      shifttypes_title(),
      ShiftTypes_list_view($shifttypes)
  ];
}

/**
 * Text for shift type related links.
 */
function shifttypes_title() {
  return _("Shifttypes");
}

/**
 * Route shift type actions
 */
function shifttypes_controller() {
  if (! isset($_REQUEST['action']))
    $_REQUEST['action'] = 'list';

  switch ($_REQUEST['action']) {
    default:
    case 'list':
      return shifttypes_list_controller();
    case 'view':
      return shifttype_controller();
    case 'edit':
      return shifttype_edit_controller();
    case 'delete':
      return shifttype_delete_controller();
  }
}

?>