<?php

/**
 * @file
 * Feeds Tamper UI - Defines the user interface for Feeds Tamper.
 */

/**
 * Implements hook_menu().
 */
function feeds_tamper_ui_menu() {
  $defaults = array(
    'page callback' => 'drupal_get_form',
    'access callback' => 'feeds_tamper_access',
    'access arguments' => array(3),
    'title arguments' => array(3),
    'file' => 'feeds_tamper_ui.admin.inc',
    'type' => MENU_CALLBACK,
  );

  $items = array();
  $items['admin/structure/feeds/%feeds_importer/tamper'] = array(
    'title' => 'Tamper',
    'title arguments' => array(),
    'page arguments' => array('feeds_tamper_ui_list_form', 3),
    'type' => MENU_LOCAL_TASK,
    'weight' => 10,
  ) + $defaults;

  $items['admin/structure/feeds/%feeds_importer/tamper/manage'] = array(
    'title' => 'List',
    'type' => MENU_DEFAULT_LOCAL_TASK,
  );

  $items['admin/structure/feeds/%feeds_importer/tamper/export'] = array(
    'title' => 'Export',
    'title arguments' => array(),
    'page arguments' => array('feeds_tamper_ui_export_form', 3),
    'access callback' => 'user_access',
    'access arguments' => array('administer feeds_tamper'),
    'type' => MENU_LOCAL_TASK,
    'weight' => 10,
  ) + $defaults;

  $items['admin/structure/feeds/%feeds_importer/tamper/add/%'] = array(
    'title callback' => 'feeds_tamper_ui_add_title',
    'title arguments' => array(6),
    'page arguments' => array('feeds_tamper_ui_add_plugin_form', 3, 6),
  ) + $defaults;

  $items['admin/structure/feeds/%feeds_importer/tamper/%feeds_tamper_plugin_instance/edit'] = array(
    'title callback' => 'feeds_tamper_ui_edit_title',
    'page arguments' => array('feeds_tamper_ui_edit_plugin_form', 5),
    'access arguments' => array(NULL, 5),
  ) + $defaults;

  $items['admin/structure/feeds/%feeds_importer/tamper/%feeds_tamper_plugin_instance/delete'] = array(
    'title callback' => 'feeds_tamper_ui_delete_title',
    'page arguments' => array('feeds_tamper_ui_delete_form', 5),
    'access arguments' => array(NULL, 5),
  ) + $defaults;

  return $items;
}

/**
 * Implements hook_theme().
 */
function feeds_tamper_ui_theme($existing, $type, $theme, $path) {
  return array(
    'feeds_tamper_ui_list_form' => array(
      'render element' => 'form',
      'file' => 'feeds_tamper_ui.admin.inc',
    ),
  );
}

/**
 * Menu loader callback for plugin instances.
 */
function feeds_tamper_plugin_instance_load($instance_id) {
  return feeds_tamper_load_instance($instance_id);
}

/**
 * Add plugin title callback.
 */
function feeds_tamper_ui_add_title($source) {
  // Title callbacks get check_plain'ed already.
  return t('Add plugin to: !source', array('!source' => rawurldecode($source)));
}

/**
 * Edit plugin title callback.
 */
function feeds_tamper_ui_edit_title($instance) {
  if ($instance->export_type == EXPORT_IN_DATABASE) {
    return t('Edit: @id', array('@id' => $instance->description));
  }
  return t('Override: @id', array('@id' => $instance->description));
}

/**
 * Delete plugin title callback.
 */
function feeds_tamper_ui_delete_title($instance) {
  if ($instance->export_type == EXPORT_IN_DATABASE) {
    return t('Delete plugin: @id', array('@id', $instance->id));
  }
  return t('Revert plugin: @id', array('@id', $instance->id));
}

/**
 * Implements hook_form_FORM_ID_alter().
 *
 * Modify feeds_ui_overview_form(), adding Tamper links if the user has access.
 */
function feeds_tamper_ui_form_feeds_ui_overview_form_alter(&$form, &$form_state) {
  if (!empty($form['enabled'])) {
    foreach ($form['enabled'] as $id => &$table) {
      if (feeds_tamper_access($id)) {
        $table['operations']['#markup'] .= ' | ' . l(t('Tamper'), "admin/structure/feeds/$id/tamper");
      }
    }
  }
}

/**
 * Calculate display name for source.
 *
 * @param stdClass $instance
 *   A plugin instance object.
 *
 * @return string
 *   The unsanitized name to display for a Feeds source.
 */
function feeds_tamper_ui_source_name(stdClass $instance) {
  $importer = feeds_importer($instance->importer);
  $sources = $importer->parser->getMappingSources();
  return !empty($sources[$instance->source]['name']) ? $sources[$instance->source]['name'] : $instance->source;
}
