<?php

/**
 * @file
 * Implements hooks that get tested by islandora_hooks.test
 */

/**
 * Implements hook_islandora_object_alter().
 */
function islandora_hooks_test_islandora_object_alter(AbstractObject $object, array &$context) {
  switch ($context['action']) {
    case 'ingest':
      if ($object->id == 'test:testIngestedObjectHook') {
        $_SESSION['islandora_hooks']['alter'][ISLANDORA_OBJECT_INGESTED_HOOK] = TRUE;
        if ($object->label == 'block') {
          $context['block'] = TRUE;
        }
      }
      break;

    case 'modify':
      if ($object->id == 'test:testModifiedObjectHook') {
        $_SESSION['islandora_hooks']['alter'][ISLANDORA_OBJECT_MODIFIED_HOOK] = TRUE;
        if (isset($context['params']['label']) && $context['params']['label'] == 'block') {
          $context['block'] = TRUE;
        }
      }
      elseif ($object->id == 'test:testPurgedObjectHook') {
        $_SESSION['islandora_hooks']['alter'][ISLANDORA_OBJECT_PURGED_HOOK] = TRUE;
        if (isset($context['params']['label']) && $context['params']['label'] == 'block') {
          $context['block'] = TRUE;
        }
        elseif (isset($context['params']['label']) && $context['params']['label'] == 'delete') {
          $context['delete'] = TRUE;
        }
      }
      break;

    case 'purge':
      if ($object->id == 'test:testPurgedObjectHook') {
        $_SESSION['islandora_hooks']['alter'][ISLANDORA_OBJECT_PURGED_HOOK] = TRUE;
        if ($object->label == 'block') {
          $context['block'] = TRUE;
        }
        elseif ($object->label == 'delete') {
          $context['delete'] = TRUE;
        }
      }
      break;
  }
}

/**
 * Implements hook_islandora_object_alter().
 */
function islandora_hooks_test_islandora_datastream_alter(AbstractObject $object, AbstractDatastream $datastream, array &$context) {
  switch ($context['action']) {
    case 'ingest':
      if ($object->id == 'test:testIngestedDatastreamHook') {
        $_SESSION['islandora_hooks']['alter'][ISLANDORA_DATASTREAM_INGESTED_HOOK] = TRUE;
        if ($datastream->label == 'block') {
          $context['block'] = TRUE;
        }
      }
      break;

    case 'modify':
      if ($object->id == 'test:testModifiedDatastreamHook') {
        $_SESSION['islandora_hooks']['alter'][ISLANDORA_DATASTREAM_MODIFIED_HOOK] = TRUE;
        if (isset($context['params']['dsLabel']) && $context['params']['dsLabel'] == 'block') {
          $context['block'] = TRUE;
        }
      }
      elseif ($object->id == 'test:testPurgedDatastreamHook') {
        $_SESSION['islandora_hooks']['alter'][ISLANDORA_DATASTREAM_PURGED_HOOK] = TRUE;
        if (isset($context['params']['dsLabel']) && $context['params']['dsLabel'] == 'block') {
          $context['block'] = TRUE;
        }
        elseif (isset($context['params']['dsLabel']) && $context['params']['dsLabel'] == 'delete') {
          $context['delete'] = TRUE;
        }
      }
      break;

    case 'purge':
      if ($object->id == 'test:testPurgedDatastreamHook') {
        $_SESSION['islandora_hooks']['alter'][ISLANDORA_DATASTREAM_PURGED_HOOK] = TRUE;
        if ($datastream->label == 'block') {
          $context['block'] = TRUE;
        }
        elseif ($datastream->label == 'delete') {
          $context['delete'] = TRUE;
        }
      }
      break;
  }
}

/**
 * Implements hook_islandora_object_ingested().
 */
function islandora_hooks_test_islandora_object_ingested(AbstractObject $object) {
  if ($object->id == 'test:testIngestedObjectHook') {
    $_SESSION['islandora_hooks']['hook'][ISLANDORA_OBJECT_INGESTED_HOOK] = TRUE;
  }
}

/**
 * Implements hook_islandora_object_modified().
 */
function islandora_hooks_test_islandora_object_modified(AbstractObject $object) {
  if ($object->id == 'test:testModifiedObjectHook') {
    $_SESSION['islandora_hooks']['hook'][ISLANDORA_OBJECT_MODIFIED_HOOK] = TRUE;
  }
}

/**
 * Implements hook_islandora_object_purged().
 */
function islandora_hooks_test_islandora_object_purged($pid) {
  if ($pid == 'test:testPurgedObjectHook') {
    $_SESSION['islandora_hooks']['hook'][ISLANDORA_OBJECT_PURGED_HOOK] = TRUE;
  }
}

/**
 * Implements hook_islandora_datastream_ingested().
 */
function islandora_hooks_test_islandora_datastream_ingested(AbstractObject $object, AbstractDatastream $datastream) {
  if ($object->id == 'test:testIngestedDatastreamHook' && $datastream->id == "TEST") {
    $_SESSION['islandora_hooks']['hook'][ISLANDORA_DATASTREAM_INGESTED_HOOK] = TRUE;
  }
}

/**
 * Implements hook_islandora_datastream_modified().
 */
function islandora_hooks_test_islandora_datastream_modified(AbstractObject $object, AbstractDatastream $datastream) {
  if ($object->id == 'test:testModifiedDatastreamHook' && $datastream->id == "TEST") {
    $_SESSION['islandora_hooks']['hook'][ISLANDORA_DATASTREAM_MODIFIED_HOOK] = TRUE;
  }
}

/**
 * Implements hook_islandora_datastream_purged().
 */
function islandora_hooks_test_islandora_datastream_purged(AbstractObject $object, $dsid) {
  if ($object->id == 'test:testPurgedDatastreamHook' && $dsid == "TEST") {
    $_SESSION['islandora_hooks']['hook'][ISLANDORA_DATASTREAM_PURGED_HOOK] = TRUE;
  }
}