You are here

getid3.module in getID3() 5

Same filename and directory in other branches
  1. 8 getid3.module
  2. 6 getid3.module
  3. 7.2 getid3.module
  4. 7 getid3.module

File

getid3.module
View source
<?php

/**
 * Implementation of hook_requirements()
 */
function getid3_requirements($phase) {
  $t = get_t();
  $requirements = array();
  if ($phase == 'runtime') {

    // Test getID3 version
    $requirements['getid3']['title'] = $t('getID3()');
    if (getid3_load(FALSE)) {
      $requirements['getid3']['value'] = check_plain(getid3_get_version());
      $getid3_demos_path = getid3_get_path() . '/../demos';
      if (file_exists($getid3_demos_path)) {
        $requirements['getid3']['description'] = $t("Your getID3 library is insecure! The demos distributed with getID3 contains code which creates a huge security hole. Remove the demos directory (%path) from beneth Drupal's directory.", array(
          '%path' => realpath($getid3_demos_path),
        ));
        $requirements['getid3']['severity'] = REQUIREMENT_ERROR;
      }
    }
    else {
      $requirements['getid3']['value'] = $t('Not found or wrong version');
      $requirements['getid3']['description'] = $t('You must install <a href="@getid3">getID3()</a> to %getid3dir, or <a href="@getid3settings">configure its installation path</a>.', array(
        '@getid3' => 'http://www.getid3.org',
        '%getid3dir' => 'sites/all/libraries/getid3',
        '@getid3settings' => url('admin/settings/getid3'),
      ));
      $requirements['getid3']['severity'] = REQUIREMENT_ERROR;
    }
  }
  return $requirements;
}

/**
 * Loads the getID3 library once and returns whether it was successfully loaded.
 *
 * @return
 *   Boolean indicating if the library was loaded
 */
function getid3_load($display_warning = TRUE) {
  $getid3_path = getid3_get_path();
  if (file_exists($getid3_path . '/getid3.php') && file_exists($getid3_path . '/write.php')) {

    // A little workaround for getID3 on Windows.
    if (!defined('GETID3_HELPERAPPSDIR')) {
      define('GETID3_HELPERAPPSDIR', realpath($getid3_path . '/../helperapps') . '/');
    }
    include_once $getid3_path . '/getid3.php';

    // Initialize getID3 tag-writing module. NOTE: Their wanky dependency setup
    // requires that this file must be included AFTER an instance of the getID3
    // class has been instantiated.
    $getid3 = new getID3();
    require_once $getid3_path . '/write.php';
    return defined('GETID3_VERSION');
  }
  else {
    drupal_set_message(t("The getID3() module cannot find the getID3 library used to read and write ID3 tags. The site administrator will need to verify that it is installed and then update the <a href='!admin-settings-audio-getid3'>settings</a>.", array(
      '!admin-settings-audio-getid3' => url('admin/settings/getid3'),
    )), 'error', FALSE);
    return FALSE;
  }
}

/**
 * Create and initialize an instance of getID3 class.
 */
function &getid3_instance() {
  $id3 = NULL;
  if (getid3_load()) {
    $id3 = new getID3();

    // MD5 is a big performance hit. Disable it by default.
    $id3->option_md5_data = FALSE;
    $id3->option_md5_data_source = FALSE;
    $id3->encoding = 'UTF-8';
  }
  return $id3;
}

/**
 * Analyze file and return its media information.
 */
function &getid3_analyze($path) {
  $info = array();
  if ($id3 =& getid3_instance()) {
    $info = $id3
      ->analyze($path);
    unset($id3);
  }
  return $info;
}

/**
 * Implementation of hook_menu()
 */
function getid3_menu($may_cache) {
  $items = array();
  if ($may_cache) {
    $items[] = array(
      'path' => 'admin/settings/getid3',
      'title' => t('getID3()'),
      'description' => t('Configure settings associated with getID3().'),
      'callback' => 'drupal_get_form',
      'callback arguments' => array(
        'getid3_admin_settings',
      ),
      'access' => user_access('administer site configuration'),
      'type' => MENU_NORMAL_ITEM,
    );
  }
  return $items;
}

/**
 * Administration settings for getID3().
 */
function getid3_admin_settings() {
  $form['getid3_path'] = array(
    '#type' => 'textfield',
    '#title' => t('Path'),
    '#default_value' => getid3_get_path(),
    '#description' => t('The location where getID3() is installed. Relative paths are from the Drupal root directory.'),
    '#after_build' => array(
      '_getid3_admin_settings_check_path',
    ),
  );
  if ($version = getid3_get_version()) {
    $form['getid3_version'] = array(
      '#type' => 'item',
      '#title' => t('Version'),
      '#value' => '<pre>' . check_plain($version) . '</pre>',
      '#description' => t("If you're seeing this it indicates that the getID3 library was found."),
    );

    // Check for existence of the 'demos' folder, contained in the getID3
    // library. The contents of this folder create a potential securtiy hole,
    // so we recommend that the user delete it.
    $getid3_demos_path = getid3_get_path() . '/../demos';
    if (file_exists($getid3_demos_path)) {
      drupal_set_message(t("Your getID3 library is insecure! The demos distributed with getID3 contains code which creates a huge security hole. Remove the demos directory (%path) from beneth Drupal's directory.", array(
        '%path' => realpath($getid3_demos_path),
      )), 'error');
    }
  }
  $form['getid3_show_warnings'] = array(
    '#type' => 'checkbox',
    '#title' => t("Display Warnings"),
    '#default_value' => variable_get('getid3_show_warnings', FALSE),
    '#description' => t("Check this to display the warning messages from the getID3 library when reading and writing ID3 tags. Generally it's a good idea to leave this unchecked, getID3 reports warnings for several trivial problems and the warnings can be confusing to users. This setting can be useful when debugging problems with the ID3 tags."),
  );
  return system_settings_form($form);
}

/**
 * Checks the that the directory in $form_element exists and contains a file
 * named 'getid3.php'. If validation fails, the form element is flagged with an
 * error from within the file_check_directory function. See:
 * system_check_directory()
 *
 * @param $form_element
 *   The form element containing the name of the directory to check.
 */
function _getid3_admin_settings_check_path($form_element) {
  $path = $form_element['#value'];
  if (!is_dir($path) || !(file_exists($path . '/getid3.php') && file_exists($path . '/write.php'))) {
    form_set_error($form_element['#parents'][0], t('The getID3 files <em>getid3.php</em> and <em>write.php</em> could not be found in the %path directory.', array(
      '%path' => $path,
    )));
  }
  return $form_element;
}

/**
 * Returns the path where getID3() is installed.
 */
function getid3_get_path() {
  return variable_get('getid3_path', 'sites/all/libraries/getid3/getid3');
}

/**
 * Returns the version number of getID3() that's installed.
 */
function getid3_get_version() {
  return getid3_load(FALSE) ? GETID3_VERSION : NULL;
}

Functions

Namesort descending Description
getid3_admin_settings Administration settings for getID3().
getid3_analyze Analyze file and return its media information.
getid3_get_path Returns the path where getID3() is installed.
getid3_get_version Returns the version number of getID3() that's installed.
getid3_instance Create and initialize an instance of getID3 class.
getid3_load Loads the getID3 library once and returns whether it was successfully loaded.
getid3_menu Implementation of hook_menu()
getid3_requirements Implementation of hook_requirements()
_getid3_admin_settings_check_path Checks the that the directory in $form_element exists and contains a file named 'getid3.php'. If validation fails, the form element is flagged with an error from within the file_check_directory function. See: system_check_directory()