popsu-d7/sites/all/modules/piecemaker/piecemaker.module
Bachir Soussi Chiadmi 1bc61b12ad first import
2015-04-08 11:40:19 +02:00

339 lines
14 KiB
Plaintext

<?php
/**
* @file Module hooks and required files
*/
/**
* Implements hook_menu()
*/
function piecemaker_menu() {
$items['piecemaker/%piecemaker_handler/%/settings.xml'] = array(
'page callback' => 'piecemaker_xml_build',
'page arguments' => array(1),
'load arguments' => array(2),
'access callback' => 'piecemaker_settings_access',
'access arguments' => array(1),
'type' => MENU_CALLBACK,
'file' => 'theme/piecemaker.xml.inc',
);
$items['admin/config/media/piecemaker'] = array(
'title' => 'Piecemaker',
'description' => 'Configure the Piecemaker API Profiles and Settings.',
'page callback' => 'piecemaker_profiles_page',
'access arguments' => array('administer site configuration'),
'file' => 'piecemaker.admin.inc',
);
$items['admin/config/media/piecemaker/profiles'] = array(
'title' => 'Profiles',
'description' => 'Piecemaker API Profiles',
'type' => MENU_DEFAULT_LOCAL_TASK,
'weight' => -50,
);
$items['admin/config/media/piecemaker/settings'] = array(
'title' => 'Settings',
'description' => 'Configure the Piecemaker API Settings.',
'page callback' => 'drupal_get_form',
'page arguments' => array('piecemaker_settings_page'),
'access arguments' => array('administer site configuration'),
'file' => 'piecemaker.admin.inc',
'type' => MENU_LOCAL_TASK,
);
$items['admin/config/media/piecemaker/settings/delete_trans/%'] = array(
'title' => 'Settings',
'description' => 'Configure the Piecemaker API Settings.',
'page callback' => 'piecemaker_default_delete_transition',
'page arguments' => array(6),
'access arguments' => array('administer site configuration'),
'file' => 'piecemaker.admin.inc',
'type' => MENU_CALLBACK,
);
$items['admin/config/media/piecemaker/profiles/add'] = array(
'title' => 'Add Piecemaker Profile',
'description' => 'Add a Piecemaker API Profile.',
'page callback' => 'drupal_get_form',
'page arguments' => array('piecemaker_profile_form', NULL),
'access arguments' => array('administer site configuration'),
'file' => 'piecemaker.admin.inc',
'type' => MENU_LOCAL_ACTION,
);
$items['admin/config/media/piecemaker/profiles/%piecemaker_profile/edit'] = array(
'title' => 'Edit Piecemaker Profile',
'description' => 'Add a Piecemaker API Profile.',
'page callback' => 'drupal_get_form',
'page arguments' => array('piecemaker_profile_form', 5),
'access arguments' => array('administer site configuration'),
'file' => 'piecemaker.admin.inc',
);
$items['admin/config/media/piecemaker/profiles/%piecemaker_profile/delete'] = array(
'title' => 'Delete',
'page callback' => 'drupal_get_form',
'page arguments' => array('piecemaker_profile_delete_confirm', 5),
'access arguments' => array('administer site configuration'),
'file' => 'piecemaker.admin.inc',
);
return $items;
}
/**
* Loads the Piecemaker settings array.
*
* Uses the handlers defined in hook_piecemaker_handler()
*
* @param $handler
* The Handler key as set in hook_piecemaker_handler()
*
* @param $key
* A key to pass to the handler for it to get it's settings
*
* @return
* An associative array containing the needed variables for the settings form
* see @template_preprocess_piecemaker_xml() for the structure of the array
*/
function piecemaker_handler_load($handler, $key) {
$func = piecemaker_handlers($handler);
if (isset($func['callback']) && function_exists($func['callback'])) {
$settings = call_user_func($func['callback'], $key);
$settings['key'] = $key;
$settings['handler'] = array($handler => $func);
return $settings;
}
return FALSE;
}
/**
* Gets the access value for the specific piecemaker settings
*
* @param $handler
* The Handler key as set in hook_piecemaker_handler()
*
* @param $key
* A key to pass to the handler for it to get it's settings
*
* @return
* TRUE or FALSE access value.
*/
function piecemaker_settings_access($handler) {
$func = $handler['handler'];
if (isset($func['access']) && function_exists($func['access'])) {
return call_user_func($func['access'], $key);
}
//default to TRUE
return TRUE;
}
/**
* Gets the piecemaker handlers
*
* @param $handler
* A handler ID to pull from the list of handlers
*/
function piecemaker_handlers($handler = NULL) {
$handlers = &drupal_static(__FUNCTION__);
if (!$handlers) {
$handlers = module_invoke_all('piecemaker_handler');
}
if ($handler && !empty($handlers[$handler])) {
return $handlers[$handler];
}
elseif ($handler && empty($handlers[$handler])) {
return FALSE;
}
return $handlers;
}
/**
* Loads a piecemaker profile
*
* @param $pid
* The profile ID number to load.
*
* @return
* An object containing:
* - pid: The profile ID number
* - title: The profile Title
* - settings: An associative array representing the base settings for this profile
* Returns NULL if no profile with the provided pid is available.
*/
function piecemaker_profile_load($pid) {
$profiles = &drupal_static(__FUNCTION__, array());
if (!empty($profiles[$pid])) {
return $profiles[$pid];
}
$query = db_query('SELECT * FROM {piecemaker_profiles} WHERE pid = :pid', array(':pid' => $pid));
$profile = $query->fetch();
if ($profile) {
$profile->settings = unserialize($profile->settings);
$profile->transitions = !empty($profile->transitions) ? unserialize($profile->transitions) : variable_get('piecemaker_default_transitions', array());
$profile->flash_settings = !empty($profile->flash_settings) ? unserialize($profile->flash_settings) : _piecemaker_default_flash_settings();
}
$profiles[$pid] = $profile;
return $profiles[$pid];
}
/**
* Provides default settings to profiles
*
* @return
* Array of settings values;
*/
function _piecemaker_default_settings() {
$vals = variable_get('piecemaker_default_settings', array());
$settings['ImageWidth'] = isset($vals['ImageWidth']) ? $vals['ImageWidth'] : '900';
$settings['ImageHeight'] = isset($vals['ImageHeight']) ? $vals['ImageHeight'] : '360';
$settings['LoaderColor'] = isset($vals['LoaderColor']) ? $vals['LoaderColor'] : '0x333333';
$settings['InnerSideColor'] = isset($vals['InnerSideColor']) ? $vals['InnerSideColor'] : '0x222222';
$settings['SideShadowAlpha'] = isset($vals['SideShadowAlpha']) ? $vals['SideShadowAlpha'] : '0.8';
$settings['DropShadowAlpha'] = isset($vals['DropShadowAlpha']) ? $vals['DropShadowAlpha'] : '0.7';
$settings['DropShadowDistance'] = isset($vals['DropShadowDistance']) ? $vals['DropShadowDistance'] : '25';
$settings['DropShadowScale'] = isset($vals['DropShadowScale']) ? $vals['DropShadowScale'] : '0.95';
$settings['DropShadowBlurX'] = isset($vals['DropShadowBlurX']) ? $vals['DropShadowBlurX'] : '40';
$settings['DropShadowBlurY'] = isset($vals['DropShadowBlurY']) ? $vals['DropShadowBlurY'] : '4';
$settings['MenuDistanceX'] = isset($vals['MenuDistanceX']) ? $vals['MenuDistanceX'] : '20';
$settings['MenuDistanceY'] = isset($vals['MenuDistanceY']) ? $vals['MenuDistanceY'] : '50';
$settings['MenuColor1'] = isset($vals['MenuColor1']) ? $vals['MenuColor1'] : '0x999999';
$settings['MenuColor2'] = isset($vals['MenuColor2']) ? $vals['MenuColor2'] : '0x333333';
$settings['MenuColor3'] = isset($vals['MenuColor3']) ? $vals['MenuColor3'] : '0xFFFFFF';
$settings['ControlSize'] = isset($vals['ControlSize']) ? $vals['ControlSize'] : '100';
$settings['ControlDistance'] = isset($vals['ControlDistance']) ? $vals['ControlDistance'] : '20';
$settings['ControlColor1'] = isset($vals['ControlColor1']) ? $vals['ControlColor1'] : '0x222222';
$settings['ControlColor2'] = isset($vals['ControlColor2']) ? $vals['ControlColor2'] : '0xFFFFFF';
$settings['ControlAlpha'] = isset($vals['ControlAlpha']) ? $vals['ControlAlpha'] : '0.8';
$settings['ControlAlphaOver'] = isset($vals['ControlAlphaOver']) ? $vals['ControlAlphaOver'] : '0.95';
$settings['ControlsX'] = isset($vals['ControlsX']) ? $vals['ControlsX'] : '450';
$settings['ControlsY'] = isset($vals['ControlsY']) ? $vals['ControlsY'] : '280';
$settings['ControlsAlign'] = isset($vals['ControlsAlign']) ? $vals['ControlsAlign'] : 'center';
$settings['TooltipHeight'] = isset($vals['TooltipHeight']) ? $vals['TooltipHeight'] : '31';
$settings['TooltipColor'] = isset($vals['TooltipColor']) ? $vals['TooltipColor'] : '0x222222';
$settings['TooltipTextY'] = isset($vals['TooltipTextY']) ? $vals['TooltipTextY'] : '5';
$settings['TooltipTextStyle'] = isset($vals['TooltipTextStyle']) ? $vals['TooltipTextStyle'] : 'P-Italic';
$settings['TooltipTextColor'] = isset($vals['TooltipTextColor']) ? $vals['TooltipTextColor'] : '0xFFFFFF';
$settings['TooltipMarginLeft'] = isset($vals['TooltipMarginLeft']) ? $vals['TooltipMarginLeft'] : '5';
$settings['TooltipMarginRight'] = isset($vals['TooltipMarginRight']) ? $vals['TooltipMarginRight'] : '7';
$settings['TooltipTextSharpness'] = isset($vals['TooltipTextSharpness']) ? $vals['TooltipTextSharpness'] : '50';
$settings['TooltipTextThickness'] = isset($vals['TooltipTextThickness']) ? $vals['TooltipTextThickness'] : '-100';
$settings['InfoWidth'] = isset($vals['InfoWidth']) ? $vals['InfoWidth'] : '400';
$settings['InfoBackground'] = isset($vals['InfoBackground']) ? $vals['InfoBackground'] : '0xFFFFFF';
$settings['InfoBackgroundAlpha'] = isset($vals['InfoBackgroundAlpha']) ? $vals['InfoBackgroundAlpha'] : '0.95';
$settings['InfoMargin'] = isset($vals['InfoMargin']) ? $vals['InfoMargin'] : '15';
$settings['InfoSharpness'] = isset($vals['InfoSharpness']) ? $vals['InfoSharpness'] : '0';
$settings['InfoThickness'] = isset($vals['InfoThickness']) ? $vals['InfoThickness'] : '0';
$settings['Autoplay'] = isset($vals['Autoplay']) ? $vals['Autoplay'] : '10';
$settings['FieldOfView'] = isset($vals['FieldOfView']) ? $vals['FieldOfView'] : '45';
return $settings;
}
/**
* Provides the default flash settings to profiles
*/
function _piecemaker_default_flash_settings() {
$vals = variable_get('piecemaker_default_flash_settings', array('params' => array()));
$pm_path = libraries_get_path('piecemaker');
$settings['width'] = isset($vals['width']) ? $vals['width'] : '900';
$settings['height'] = isset($vals['height']) ? $vals['height'] : '600';
$settings['flashvars']['cssSource'] = isset($vals['flashvars']['cssSource']) ? $vals['flashvars']['cssSource'] : $pm_path . '/piecemaker.css';
$settings['params']['play'] = isset($vals['params']['play']) ? $vals['params']['play'] : 'true';
$settings['params']['menu'] = isset($vals['params']['menu']) ? $vals['params']['menu'] : 'false';
$settings['params']['scale'] = isset($vals['params']['scale']) ? $vals['params']['scale'] : 'showall';
$settings['params']['wmode'] = isset($vals['params']['wmode']) ? $vals['params']['wmode'] : 'transparent';
$settings['params']['allowfullscreen'] = isset($vals['params']['allowfullscreen']) ? $vals['params']['allowfullscreen'] : 'true';
$settings['params']['allowscriptaccess'] = isset($vals['params']['allowscriptaccess']) ? $vals['params']['allowscriptaccess'] : 'always';
$settings['params']['allownetowrking'] = isset($vals['params']['allownetworking']) ? $vals['params']['allownetworking'] : 'true';
$settings['params'] = array_merge($settings['params'], $vals['params']);
return $settings;
}
/**
* Implements hook_theme()
*/
function piecemaker_theme() {
$path = drupal_get_path('module', 'piecemaker');
return array(
'piecemaker' => array(
'variables' => array('handler' => NULL, 'key' => NULL, 'profile' => array(), 'alternate_callback' => NULL),
'path' => $path . '/theme',
'file' => 'theme.inc',
),
'piecemaker_transition_form' => array(
'render element' => 'form',
'path' => $path . '/theme',
'file' => 'theme.inc',
),
'piecemaker_profile_params' => array(
'render element' => 'form',
'path' => $path . '/theme',
'file' => 'theme.inc',
),
'piecemaker_xml' => array(
'template' => 'piecemaker-xml',
'path' => $path . '/theme',
'file' => 'piecemaker.xml.inc',
'variables' => array('Settings' => array(), 'Transitions' => array(), 'Contents' => array(), 'handler' => array(), 'key' => NULL),
),
'piecemaker_xml_node' => array(
'path' => $path . '/theme',
'file' => 'piecemaker.xml.inc',
'variables' => array('item' => array()),
),
'piecemaker_xml_node_Image' => array(
'template' => 'piecemaker-xml-image',
'path' => $path . '/theme',
'file' => 'theme.inc',
'variables' => array('item' => array()),
),
'piecemaker_xml_node_Video' => array(
'template' => 'piecemaker-xml-video',
'path' => $path . '/theme',
'file' => 'theme.inc',
'variables' => array('item' => array()),
),
'piecemaker_xml_node_Flash' => array(
'template' => 'piecemaker-xml-flash',
'path' => $path . '/theme',
'file' => 'theme.inc',
'variables' => array('item' => array()),
),
);
}
/**
* Ajax callback for admin form
*/
function piecemaker_add_transition_ajax($form, $form_state) {
$key = $form_state['#transition_element'];
return $form[$key];
}
/**
* Ajax callback for admin form
*/
function piecemaker_add_flash_params($form, $form_state) {
return $form['flash_settings']['params'];
}
/**
* Utility function that allows other modules to get a list of profiles keyed on the pid
*
* @return
* An array of profiles keyed on the pid
*/
function piecemaker_profile_options() {
$profiles = &drupal_static(__FUNCTION__);
if (!$profiles) {
$profiles = db_query('SELECT title, pid FROM {piecemaker_profiles}')
->fetchAllKeyed(1,0);
}
return $profiles;
}
/**
* Implements hook_page_alter()
*/
function piecemaker_page_alter(&$page) {
//We add all our piecemaker settings here right before the page renders to ensure that there are no
//array merging errors
$settings = drupal_static('theme_piecemaker_settings');
if (is_array($settings)) {
drupal_add_js($settings, 'setting');
}
}