'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'); } }