339 lines
14 KiB
Plaintext
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');
|
|
}
|
|
}
|