kraken.module in Kraken 7
Same filename and directory in other branches
Provides optimised images via http://kraken.io.
File
kraken.moduleView 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 = '';
$timeout = 30;
$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'];
}
if (isset($kraken_vars['timeout'])) {
$timeout = $kraken_vars['timeout'];
}
$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,
);
$form['kraken']['timeout'] = array(
'#title' => t('Timeout (in seconds)'),
'#type' => 'textfield',
'#required' => TRUE,
'#element_validate' => array(
'element_validate_integer_positive',
),
'#default_value' => $timeout,
);
}
}
}
/**
* 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');
}
$proxy_params = array();
$proxy_server = variable_get('proxy_server', '');
if ($proxy_server && _drupal_http_use_proxy('api.kraken.io')) {
$proxy_params['proxy'] = $proxy_server;
$proxy_params['port'] = variable_get('proxy_port', 8080);
$proxy_params['type'] = 'HTTP';
}
$kraken = new Kraken($kraken_settings['api_key'], $kraken_settings['api_secret'], $kraken_settings['timeout'], $proxy_params);
$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_bytes' => $data['saved_bytes'],
));
return TRUE;
}
}
}
Functions
Name | 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. |