You are here

imce_uploader.module in IMCE Uploader 7

IMCE Uploader

File

imce_uploader.module
View source
<?php

/**
 * @file
 * IMCE Uploader
 */

/**
 * Implements hook_form_FORM_ID_alter().
 * @see imce_profile_form()
 */
function imce_uploader_form_imce_profile_form_alter(&$form, &$form_state) {
  $profile = $form_state['profile'];
  $uploaders = imce_uploader_get_uploaders();
  if (count($uploaders) == 1) {
    $form['profile']['uploader'] = array(
      '#type' => 'value',
      '#value' => key($uploaders),
    );
  }
  else {
    $form['profile']['uploader'] = array(
      '#type' => 'radios',
      '#title' => t('File Uploader'),
      '#options' => array(),
      '#default_value' => empty($profile['uploader']) ? 'default' : $profile['uploader'],
    );
    foreach ($uploaders as $uploader_id => $uploader) {
      $form['profile']['uploader']['#options'][$uploader_id] = $uploader['title'];
      if (!empty($uploader['description'])) {
        $form['profile']['uploader'][$uploader_id]['#description'] = $uploader['description'];
      }
    }
  }
}

/**
 * Implements hook_form_FORM_ID_alter().
 * @see imce_upload_form()
 */
function imce_uploader_form_imce_upload_form_alter(&$form, &$form_state) {
  $imce = $form_state['build_info']['args'][0]['imce'];
  $uploaders = imce_uploader_get_uploaders();
  if (empty($imce['uploader']) || empty($uploaders[$imce['uploader']]['callback']) || !is_callable($uploaders[$imce['uploader']]['callback'])) {
    return;
  }
  $callback = $uploaders[$imce['uploader']]['callback'];
  $args = array(
    &$form,
    &$form_state,
    &$imce,
  );
  call_user_func_array($callback, $args);
}

/**
 * Get the list of uploaders.
 *
 * Each item may have the following properties
 * - title: The name of uploader.
 * - description: The description of uploader.
 * - callback: Process function of uploader when imce's called.
 * - weight: The weight of this uploader in the list.
 *
 * @return array
 *   A list of registered uploaders.
 */
function imce_uploader_get_uploaders() {
  static $drupal_static_fast;
  if (!isset($drupal_static_fast)) {
    $drupal_static_fast['uploaders'] =& drupal_static(__FUNCTION__);
  }
  $uploaders =& $drupal_static_fast['uploaders'];
  if (empty($uploaders)) {
    $cid = 'imce:' . $GLOBALS['language']->language . ':uploaders';
    $cache = cache_get($cid);
    if (empty($cache)) {
      $modules = module_implements('imce_uploader');
      $uploaders = array();
      foreach ($modules as $module) {
        $items = call_user_func($module . '_imce_uploader');
        if (isset($items) && is_array($items)) {
          $uploaders = array_merge($uploaders, $items);
        }
      }
      drupal_alter('imce_uploader', $uploaders);
      foreach ($uploaders as $uploader_id => $uploader) {
        $uploaders[$uploader_id] = $uploader + array(
          'title' => $uploader_id,
          'description' => '',
          'callback' => NULL,
          'weight' => 0,
        );
      }
      $default['default'] = array(
        'title' => t('Default'),
        'callback' => NULL,
        'weight' => -100,
      );
      $uploaders = $default + $uploaders;
      uasort($uploaders, 'drupal_sort_weight');
      cache_set($cid, $uploaders);
    }
    else {
      $uploaders = $cache->data;
    }
  }
  return $uploaders;
}