You are here

kraken.module in Kraken 7.2

Same filename and directory in other branches
  1. 7 kraken.module

Provides optimised images via http://kraken.io.

File

kraken.module
View source
<?php

/**
 * @file
 * Provides optimised images via http://kraken.io.
 */

/**
 * Implements hook_help().
 */
function kraken_help($path, $arg) {
  switch ($path) {

    // Main module help for the kraken module
    case 'admin/help#kraken':
      return '<p>' . t('Getting the highest quality images with the smallest
        file sizes can be difficult. !krakenio provides a service to optimize
        your images and strikes a good balance between high image quality and
        small file sizes. This module submits the images users provide when
        adding or editing content on your site to Kraken.io. Kraken.io returns
        an optimized version which is stored on your site. Configuring the
        kraken module is done on the !img_toolkit page.</p>', array(
        '!img_toolkit' => l(t('image toolkit'), 'admin/config/media/image-toolkit'),
        '!krakenio' => l(t('Kraken.io'), 'http://kraken.io'),
      ));
  }
}

/**
 * Implements hook_libraries_info().
 */
function kraken_libraries_info() {
  $libraries['kraken-php'] = array(
    'name' => 'kraken-php',
    'vendor url' => 'http://kraken.io',
    'download url' => 'https://github.com/kraken-io/kraken-php',
    'version' => '',
    'path' => 'lib',
    'files' => array(
      'php' => array(
        'Kraken.php',
      ),
    ),
  );
  return $libraries;
}

/**
 * Implements hook_form_FORM_ID_alter().
 */
function kraken_form_system_image_toolkit_settings_alter(&$form, &$form_state) {
  $kraken_api_key = '';
  $kraken_api_secret = '';
  $kraken_vars = variable_get('kraken', FALSE);
  if (isset($kraken_vars['api_key'])) {
    $kraken_api_key = $kraken_vars['api_key'];
  }
  if (isset($kraken_vars['api_secret'])) {
    $kraken_api_secret = $kraken_vars['api_secret'];
  }
  $form['kraken'] = array(
    '#type' => 'fieldset',
    '#title' => 'kraken.io settings',
    '#weight' => 5,
    '#collapsible' => FALSE,
    '#tree' => TRUE,
  );
  if (!function_exists('libraries_get_libraries')) {
    $form['kraken']['library'] = array(
      '#type' => 'markup',
      '#markup' => t('Kraken io integration requires both:
        <ul><li>the !libraries module;</li>
        <li>the !kraken_lib to be installed in your libraries folder as
        kraken-php (sites/all/libraries/kraken-php).</li></ul>', array(
        '!libraries' => l(t('Libraries'), 'http://drupal.org/project/libraries'),
        '!kraken_lib' => l(t('Kraken-PHP library'), 'https://github.com/kraken-io/kraken-php'),
      )),
    );
  }
  else {
    $libraries = libraries_detect('kraken-php');
    if (isset($libraries['error'])) {
      $form['kraken']['library'] = array(
        '#type' => 'markup',
        '#markup' => t('!error_msg Kraken.io integration requires the
          <a href="">Kraken-PHP library</a> to be installed in your libraries folder as kraken-php (sites/all/libraries/kraken-php).', array(
          '!error_msg' => $libraries['error message'],
          '!kraken-lib' => l(t('Kraken-PHP library'), 'https://github.com/kraken-io/kraken-php'),
        )),
      );
    }
    else {
      $form['kraken']['api_key'] = array(
        '#title' => t('API Key'),
        '#type' => 'textfield',
        '#default_value' => $kraken_api_key,
      );
      $form['kraken']['api_secret'] = array(
        '#title' => t('API Secret'),
        '#type' => 'textfield',
        '#default_value' => $kraken_api_secret,
      );
    }
  }
}

/**
 * Implements hook_image_effect_info().
 */
function kraken_image_effect_info() {
  $effects = array();
  $effects['kraken_optimize'] = array(
    'label' => t('Kraken optimize'),
    'help' => t('The @kraken_io service optimizes the
      quality of the image and minimizes file size.', array(
      '@kraken_io' => l(t('Kraken io'), 'http://kraken.io'),
    )),
    'effect callback' => 'kraken_optimize',
    'dimensions passthrough' => TRUE,
  );
  return $effects;
}

/**
 * Callback to optimize the image with the kraken.io service.
 */
function kraken_optimize(&$image, $data) {
  $libraries = libraries_detect('kraken-php');
  if (isset($libraries['error'])) {
    drupal_set_message(t('!error_msg Kraken.io integration requires the
      <a href="">Kraken-PHP library</a> to be installed in your libraries folder
      as kraken-php (sites/all/libraries/kraken-php).', array(
      '!error_msg' => $libraries['error message'],
      '!kraken-lib' => l(t('Kraken-PHP library'), 'https://github.com/kraken-io/kraken-php'),
    )), 'error');
    return FALSE;
  }

  // Ensure the API credentials have been set.
  $kraken_settings = variable_get('kraken', FALSE);
  if (empty($kraken_settings['api_key']) || empty($kraken_settings['api_secret'])) {
    drupal_set_message(t('Kraken.io API settings are not set. Go to !img_toolkit
      to provide the crendentials from your !kraken_acct.', array(
      '!img_toolkit' => l(t('Image toolkit'), 'admin/config/media/image-toolkit'),
      '!kraken_acct' => l(t('Kraken.io account'), 'https://kraken.io/account/login'),
    )), 'error');
    return FALSE;
  }
  if (!libraries_load('kraken-php')) {
    drupal_set_message(t('The kraken-php library has not loaded correctly. Please
      review the installation instructions'), 'error');
  }
  $kraken = new Kraken($kraken_settings['api_key'], $kraken_settings['api_secret']);
  $params = array(
    'file' => drupal_realpath($image->source),
    'wait' => TRUE,
    'lossy' => TRUE,
  );
  $data = $kraken
    ->upload($params);
  if ($data['success']) {
    $result = drupal_http_request($data['kraked_url']);
    if (!isset($result->error)) {
      file_unmanaged_save_data($result->data, $image->source, FILE_EXISTS_REPLACE);

      // @todo: check to see if watchdog entries are enabled for kraken
      watchdog('kraken.io', '@file_name was successfully processed by Kraken.io.
        Original size: @original_size; Kraked size: @kraked_size; Total saved:
        @saved_bytes. All figures in bytes', array(
        '@file_name' => $data['file_name'],
        '@original_size' => $data['original_size'],
        '@kraked_size' => $data['kraked_size'],
        '@saved_byes' => $data['saved_bytes'],
      ));
      return TRUE;
    }
  }
}

Functions

Namesort descending Description
kraken_form_system_image_toolkit_settings_alter Implements hook_form_FORM_ID_alter().
kraken_help Implements hook_help().
kraken_image_effect_info Implements hook_image_effect_info().
kraken_libraries_info Implements hook_libraries_info().
kraken_optimize Callback to optimize the image with the kraken.io service.