<?php
/**
 * @file
 * Code for the module.
 */

/**
 * Implements hook_menu().
 */
function ember_support_menu() {
  $items = array();
  $items['admin/config/user-interface/ember-support'] = array(
    'title' => 'Ember Support',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('ember_support_admin_form'),
    'access arguments' => array('administer site configuration'),
    'description' => 'Allows administrators to configure Ember Support.',
  );
  return $items;
}

/**
 * Implements hook_permission().
 */
function ember_support_permission() {
  return array(
    'view ember support mods' => array(
      'title' => t('View Ember Support modifications'),
      'description' => t('Allow user to see the front-end admin overrides'),
    ),
  );
}

/**
 * Administrative settings for the module add-ons.
 */
function ember_support_admin_form($form, $form_state) {

  // Return the list of Ember Support modifications.
  $list = ember_support_mods();

  // Populate the Ember Support settings form.
  foreach($list as $module => $settings) {
    // Checkbox to remove the module css.
    $form[$settings['#var']] = array(
      '#type' => 'checkbox',
      '#title' => $settings['#title'],
      '#description' => $settings['#description'],
      '#default_value' => variable_get($settings['#var'], TRUE),
    );
    // If module is not enabled, disable that setting.
    if (!module_exists($module)) {
      $form[$settings['#var']]['#disables'] = TRUE;
      variable_del($settings['#var']);
    }
  }
  return system_settings_form($form);
}

/**
 * Implements hook_js_alter().
 */
function ember_support_js_alter(&$javascript) {
  // Remove the JS for users without access to view Ember Support mods.
  if (!user_access('view ember support mods')) {
    $path = drupal_get_path('module', 'ember_support');
    unset($javascript[$path . '/js/ember-support.js']);
  }
}

/**
 * Implements hook_css_alter().
 */
function ember_support_css_alter(&$css) {

  // Return the list of Ember Support modifications.
  $list = ember_support_mods(); 

  // Loop through mods and remove CSS where necessary.
  $view = user_access('view ember support mods');
  foreach($list as $module => $settings) {
    if (module_exists($module) && variable_get($settings['#var'], TRUE) == TRUE && $view != FALSE) {
      // Module is enabled and variable is true so remove overridden files.
      if (isset($settings['#del'])) {
        _ember_support_unset_css($css, $settings['#del']);
      }
    }
    else {
      // Module is off or variable/permissions returned false so remove files.
      if (isset($settings['#add'])) {
        _ember_support_unset_css($css, $settings['#add']);
      }
    }
  }
}

/**
 * Helper function to remove multiple css files.
 */
function _ember_support_unset_css(&$css, $list) {
  foreach($list as $provider => $files) {
    $path = drupal_get_path('module', $provider);
    foreach($files as $file) {
      unset($css[$path . $file]);
    }
  }
}

/**
 * Function to return Ember Support modifications.
 */
function ember_support_mods() {
  $default_desc = t('Ember support overrides these styles by default.');
  $list = array(
    'contextual' => array(
      '#title' => t('Override the Contextual links styles'),
      '#description' => $default_desc,
      '#var' => 'ember_support_contextual_links_css',
      '#add' => array('ember_support' => array('/css/ember-contextual.css')),
    ),
    'media' => array(
      '#title' => t('Override Media modal styles'),
      '#description' => t('Ember Support overrides these styles by default.'),
      '#var' => 'ember_support_media_modal_css',
      '#add' => array('ember_support' => array('/css/ember-media.css')),
    ),
    'panels' => array(
      '#title' => t('Override Panels modal styles'),
      '#description' => $default_desc,
      '#var' => 'ember_support_panels_modal_css',
      '#add' => array('ember_support' => array('/css/ember-ctools.css', '/css/ember-modal.css')),
    ),
    'panels_ipe' => array(
      '#title' => t('Override default Panels IPE styles'),
      '#description' => $default_desc,
      '#var' => 'ember_support_panels_ipe_css',
      '#add' => array('ember_support' => array('/css/ember-panels-ipe.css')),
      '#del' => array('panels_ipe' => array('/css/panels_ipe.css')),
    ),
    'panopoly_magic' => array(
      '#title' => t('Override Panopoly Magic styles'),
      '#description' => $default_desc,
      '#var' => 'ember_support_panopoly_magic_css',
      '#del' => array('panopoly_magic' => array('/css/panopoly-magic.css', '/css/panopoly-modal.css')), 
    ),
    'purr_messages' => array(
      '#title' => t('Override Purr Messages styles'),
      '#description' => $default_desc,
      '#var' => 'ember_support_purr_messages_css',
      '#add' => array('ember_support' => array('/css/ember-purr.css')),
      '#del' => array('purr_messages' => array('/purrcss/purr.css')),
    ),
  );
  // Allow for other modules to extend this list.
  drupal_alter('ember_support_mods', $list);
  return $list;
}

/**
 * Implements hook_image_styles_alter().
 */
function ember_support_image_styles_alter(&$styles) {
  // Increase the size of the media thumbnail image style if it is available.
  if (isset($styles['media_thumbnail'])) {
    // Check that we only affect a default style.
    if ($styles['media_thumbnail']['storage'] == IMAGE_STORAGE_DEFAULT) {
      $styles['media_thumbnail']['label'] = 'Media thumbnail (200x200)';
      $styles['media_thumbnail']['effects'][0]['data'] = array('width' => 200, 'height' => 200);
    }
  }
}

/**
 * Implements hook_media_bulk_upload_edit_multiple_form_alter().
 */
function ember_support_media_bulk_upload_edit_multiple_form_alter(&$form) {
  foreach (element_children($form['multiform']) as $key) {
    // Prefix each form with a preview of the file and add additional classes
    // for styling.
    $form['multiform'][$key]['#prefix'] = '<div class="media-bulk-asset"><div class="media-bulk-upload-image-header">' . drupal_render($form['multiform'][$key]['preview']) . '</div>';
    $form['multiform'][$key]['#suffix'] = '</div>';

    // Remove the existing file preview.
    $form['multiform'][$key]['preview']['#access'] = FALSE;
  }
}
