'fieldset', '#title' => t('Embedding methods'), '#collapsible' => TRUE, '#collapsed' => TRUE, ); // Get the available embedding methods $methods = swftools_methods_available(SWFTOOLS_EMBED_METHOD); // Build array of options ready for the selector if (count($methods)) { foreach ($methods AS $method => $info) { // Assume method is not private and that it has no accompanying library $info += array( 'private' => FALSE, 'library' => '', ); // Only show this method as an embedding method if it is not a private method if (!$info['private']) { // Start with the name of the player $swf_embed_methods[$method] = $info['title']; // If the required shared file is missing add a message explaining if ($info['library'] && !file_exists($info['library'])) { // Only set a form error if the error is OTHER THAN SWF Object2 as // the SWF Object 2 module can access the remote library if ($info['name'] != 'swfobject2_replace') { // Set an error on the form so the field set expands and highlights the error form_set_error(SWFTOOLS_EMBED_METHOD, t('The shared file for @method is missing.', array('@method' => $info['title']))); } // Add missing message to the form // TODO: Could make a customised message for SWF Object 2 missing $swf_embed_methods[$method] = $swf_embed_methods[$method] . ' - Missing '. $info['library'] .''; // If download data is available then add a download link if ($info['download']) { $swf_embed_methods[$method] = $swf_embed_methods[$method] . ' - ' . l(t('Download here'), $info['download']); } } } } } $form['swftools_method'][SWFTOOLS_EMBED_METHOD] = array( '#type' => 'radios', '#title' => t('Method'), '#default_value' => variable_get(SWFTOOLS_EMBED_METHOD, SWFTOOLS_NOJAVASCRIPT), '#options' => $swf_embed_methods, '#description' => t('Choose the method that will be used for Flash replacement. JavaScript methods require supporting JavaScript files to be downloaded and added to the appropriate sub-directory of %library. Direct embedding is built in to SWF Tools. SWF Tools can access the SWF Object 2 JavaScript directly from Google, but the express install feature to upgrade client flash players will not work in this case. ', array('%library' => SWFTOOLS_LIBRARIES) ), ); $form['swftools_method']['swftools_always_add_js'] = array( '#type' => 'radios', '#title' => t('Add JavaScript to all pages'), '#default_value' => variable_get('swftools_always_add_js', SWFTOOLS_ALWAYS_ADD_JS), '#options' => array( 1 => t('Enabled - always add JavaScript.'), 0 => t('Disabled - only add JavaScript when content requests it.'), ), '#description' => t('Modules such as filters result in caching of the mark up generated to display Flash content. In these cases SWF Tools will not be triggered to add the necessary JavaScript to the page and the Flash content will not display. Normally you should leave this setting enabled. Setting it to disabled may prevent content from appearing. '), ); $form['swftools_method']['swftools_html_alt'] = array( '#type' => 'textarea', '#title' => t('HTML alternative'), '#default_value' => variable_get('swftools_html_alt', SWFTOOLS_DEFAULT_HTML_ALT), '#description' => t('Enter the default HTML that will appear if the Flash content cannot be embedded.'), ); $form['swftools_params'] = array( '#type' => 'fieldset', '#collapsible' => TRUE, '#collapsed' => TRUE, '#title' => t('Embedding settings'), '#description' => t('Refer to !technote for more details about each setting.', array('!technote' => l('Adobe technote 12701', 'http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_12701'))), '#tree' => TRUE, ); $form['swftools_params']['version'] = array( '#type' => 'textfield', '#size' => '5', '#title' => 'Flash version', '#default_value' => $params['version'], ); $form['swftools_params']['play'] = array( '#type' => 'checkbox', '#title' => t('Play immediately (play)'), '#default_value' => $params['play'], ); $form['swftools_params']['loop'] = array( '#type' => 'checkbox', '#title' => t('Loop movie (loop)'), '#default_value' => $params['loop'], ); $form['swftools_params']['menu'] = array( '#type' => 'checkbox', '#title' => t('Full menu (menu)'), '#default_value' => $params['menu'], ); $form['swftools_params']['allowfullscreen'] = array( '#type' => 'checkbox', '#title' => t('Allow full screen mode (allowfullscreen)'), '#default_value' => $params['allowfullscreen'], ); $form['swftools_params']['swliveconnect'] = array( '#type' => 'checkbox', '#title' => t('Load Java (swliveconnect)'), '#default_value' => $params['swliveconnect'], ); $form['swftools_params']['bgcolor'] = array( '#type' => $colorfield, '#title' => t('Background color (bgcolor)'), '#size' => 7, '#maxlength' => 7, '#default_value' => $params['bgcolor'], '#description' => t('Hexadecimal background color in the form #RRGGBB.'), ); $form['swftools_params']['quality'] = array( '#type' => 'select', '#title' => t('Quality') . ' (quality)', '#default_value' => $params['quality'], '#options' => $swf_options['quality'], ); $form['swftools_params']['scale'] = array( '#type' => 'select', '#title' => t('Scale') . ' (scale)', '#default_value' => $params['scale'], '#options' => $swf_options['scale'], ); $form['swftools_params']['wmode'] = array( '#type' => 'select', '#title' => t('Window mode') . ' (wmode)', '#default_value' => $params['wmode'], '#options' => $swf_options['wmode'], ); $form['swftools_params']['align'] = array( '#type' => 'select', '#title' => t('Align') . ' (align)', '#default_value' => $params['align'], '#options' => $swf_options['align'], ); $form['swftools_params']['salign'] = array( '#type' => 'select', '#title' => t('salign') . ' (salign)', '#default_value' => $params['salign'], '#options' => $swf_options['salign'], ); $form['swftools_params']['allowscriptaccess'] = array( '#type' => 'select', '#options' => $swf_options['allowscriptaccess'], '#title' => t('Allow script access') . ' (allowscriptaccess)', '#default_value' => $params['allowscriptaccess'], ); // Add custom form handler to flush cache upon submit $form['#submit'][] = 'swftools_admin_settings_submit'; // Add custom form handler to convert 1/0 to true/false $form['#submit'][] = 'swftools_admin_embed_submit'; // Return the form return system_settings_form($form); } function swftools_admin_handling_form() { $form = array(); $form['swftools_files'] = array( '#type' => 'fieldset', '#title' => t('File locations'), '#collapsible' => TRUE, '#collapsed' => TRUE, ); $current_path = variable_get('swftools_media_url', $GLOBALS['base_url'] . '/' . file_create_path('')); // Misname the variable with '_dummy' so that it is not saved! $form['swftools_files']['swftools_media_url_dummy'] = array( '#type' => 'textfield', '#title' => t('Media directory url'), '#default_value' => $current_path, '#disabled' => TRUE, '#description' => t("This helps swftools identify the server where your media files are located. You cannot change it here, as changing it has the potential to break existing content. You can set this on the $conf array in your settings.php file. For example:
  $conf = array(
    'swftools_media_url' => 'http://anothersite.com/media', // No trailing slashes!
  );
Leaving this value unset in your settings.php file will persuade SWF Tools to check for the existence of your media files, as they are automatically assumed to be on the local server."), ); // $form['swftools_files']['swftools_check_media'] = array( // '#type' => 'checkbox', // '#title' => t('Check if local files exist'), // '#default_value' => variable_get('swftools_check_media', TRUE), // '#description' => t('This option will cause SWF Tools to check that requested local // media files exist, and issue a warning if they do not.'), // ); $form['swftools_files']['swftools_check_media'] = array( '#type' => 'radios', '#title' => t('File checking'), '#options' => array( 1 => t('Enabled - check that local files exist.'), 0 => t('Disabled - do not check that local files exist.'), ), '#default_value' => variable_get('swftools_check_media', TRUE), '#description' => t('This option will cause SWF Tools to check that requested local media files exist, and issue a warning if they do not. If this option is set to do not check then the mark up will be placed on the page irrespective of whether the file is actually present.'), ); // Get handling form by calling the profile form with no profile setting $form += swftools_handling_profile_form(); // Make handlers collapsible $form['swftools_handlers'] += array( '#type' => 'fieldset', '#title' => t('File handling'), '#collapsible' => TRUE, '#collapsed' => TRUE, '#description' => t('Choose how different file types are handled.'), ); $form['swftools_private'] = array( '#type' => 'fieldset', '#title' => t('Private file system'), '#collapsible' => TRUE, '#collapsed' => TRUE, ); // Allow SWF Tools to grant access to non-uploaded files $form['swftools_private']['swftools_grant_access_to_private_files'] = array( '#type' => 'radios', '#title' => t('Access to supported private files'), '#options' => array( 1 => t('Enabled - allow SWF Tools to grant access.'), 0 => t('Disabled - do not allow SWF Tools to grant access.'), ), '#default_value' => variable_get('swftools_grant_access_to_private_files', SWFTOOLS_GRANT_ACCESS_TO_PRIVATE_FILES), '#description' => t('If using a private file system then SWF Tools is unable to access files that are not uploaded via a file module that supports a private file system. For example, SWF Tools will be unable to access files that were manually uploaded via FTP. Enabling this setting will allow SWF Tools to grant access to files with extensions defined by the next setting. Note - if another module denies access then access to the file will not be granted. SWF Tools itself does not deny access to any file. '), ); // Default file extensions that SWF Tools will grant access for $form['swftools_private']['swftools_grant_access_extensions'] = array( '#type' => 'textfield', '#title' => t('Extensions that SWF Tools will allow access to'), '#default_value' => variable_get('swftools_grant_access_extensions', SWFTOOLS_GRANT_ACCESS_EXTENSIONS), '#maxlength' => 255, '#description' => t('Under a private file system SWF Tools will grant access to files with extensions in this list. Separate extensions with a space and do not include the leading dot. Although any extension can be added to this list, only swf flv xml mp3 jpg jpeg and png will return the correct headers.'), ); // Add custom form handler to flush cache upon submit $form['#submit'][] = 'swftools_admin_settings_submit'; // Return finished form return system_settings_form($form); } function _swftools_admin_file_handling_options($type, $description, $profile = '') { // Initialise list of methods $list = array(); // Obtain list of available methods $methods = swftools_methods_available($type); if (count($methods)) { foreach ($methods AS $method => $info) { if (!file_exists($info['library'])) { $list[$method] = $info['title'] . ' - Missing '. $info['library'] .''; if ($info['download']) { $list[$method] = $list[$method] . ' - ' . l(t('Download here'), $info['download']); } } else { $list[$method] = $info['title']; } } } // Sort the list of methods asort($list); // None is always an option so add this at the top of the list $list = array('None') + $list; // Determine the appropriate default based on $type $default = swftools_get_player($type, $profile); // swftools_get_player() returns FALSE for nothing configured, change to 0 if (!$default) { $default = 0; } return array( '#type' => 'radios', '#title' => $description, '#default_value' => $default, '#options' => $list, ); } /** * flashvar and param option arrays. These are used for options settings in the * configuration screen and also as a lookup (particularly 'bool') to output the correct value for to html. * */ function _swftools_options() { // cache output each request static $swf_options = array(); if (!count($swf_options)) { $swf_options['quality'] = array('low' => 'low', 'autolow' => 'autolow', 'medium' => 'medium', 'high' => 'high', 'autohigh' => 'autohigh', 'best' => 'best', ); $swf_options['wmode'] = array('window' => 'window', 'opaque' => 'opaque', 'transparent' => 'transparent', ); $swf_options['scale'] = array('showall' => 'showall', 'noborder' => 'noborder', 'exactfit' => 'exactfit', ); $swf_options['align'] = array('default' => 'centered', 'l' => 'left', 'r' => 'right', 't' => 'top', 'b' => 'bottom', ); $swf_options['salign'] = array('l' => 'left', 'r' => 'right', 't' => 'top', 'b' => 'bottom', 'tl' => 'top left', 'tr' => 'top right', 'bl' => 'bottom left', 'br' => 'bottom right', ); $swf_options['bool'] = array('default' => 'default', 'true' => 'true', 'false' => 'false'); $swf_options['allowscriptaccess'] = array('always' => 'always', 'sameDomain' => 'sameDomain', 'never' => 'never'); } return $swf_options; } /** * Menu callback: Settings form for configuring CCK playlist fallbacks. */ function swftools_admin_cck_form() { // Get a list of all content types in use $content_types = content_types(); // Get a list of all the CCK fields that are in use $fields = content_fields(); // Get a list of all field types (this contains the list of formatters) $field_types = _content_field_types(); // Put a description on the page $form['description'] = array( '#value' => '

' . t('For content that is being formatted as an SWF Tools playlist you can specify an alternate format that should be used if a single file is passed to the playlist function. For example, display a single image as a regular image instead of placing it in a slideshow.') . '

', ); // Initialise an empty array $swftools_types = array(); // Discover what field types are supporting SWF Tools formatters foreach ($field_types as $type => $data) { if (isset($data['formatters']['swftools_playlist'])) { $swftools_types[] = $type; } } // Sort the list of types ready for output asort($swftools_types); // If the array is empty no field type is supporting the playlist formatter if (!$swftools_types) { // Just return an informative message $form['no fields'] = array( '#value' => '

' . t('No CCK fields that support SWF Tools playlists have been created.') . '

', ); } else { // Iterate over types that support SWF Tools formatters foreach ($swftools_types as $swftools_type) { // Add descriptive message $form['filefields'] = array( '#value' => '

' . t('Content types that contain fields that have been configured to be formatted as an SWF Tools playlist are listed below.') . '

', ); // Initialise an array to hold formatters $options = array(); // Collect all the available formatters foreach ($field_types[$swftools_type]['formatters'] as $formatter_name => $formatter_info) { $options[$formatter_name] = $formatter_info['label']; } // Add hidden as an optional formatter $options['hidden'] = t(''); // Cycle through each content type foreach ($content_types as $type => $type_info) { // See if fields are in use on this type if (isset($type_info['fields'])) { // If fields are in use then cycle through them foreach ($type_info['fields'] as $field => $field_info) { // If field is a filefield type then we might be interested in it if ($field_info['type'] == $swftools_type) { // See if either of the teaser or body are set to be a playlist if ($field_info['display_settings']['teaser']['format'] == 'swftools_playlist' || $field_info['display_settings']['full']['format'] == 'swftools_playlist') { // If they are then create a form entry in the form swftools_{type}_{field} $form['swftools_' . $type . '_' . $field] = array( '#title' => check_plain($type_info['name'] . ' - ' . $field_info['widget']['label']), '#type' => 'select', '#options' => $options, '#default_value' => variable_get('swftools_' . $type . '_' . $field ,'swftools_playlist'), ); } } } } } } } // Add custom form handler to flush cache upon submit $form['#submit'][] = 'swftools_admin_settings_submit'; // Return a system settings form return system_settings_form($form); } /** * Convert 1/0 to true/false, or vice versa. * * The settings form stores 1/0 for checkboxes, but flash wants to * use true/false in its configuration string. This function will * convert the appropriate options in the settings between the two. * * @param $settings * An array of embedding configuration configuration parameters. * @param $mode * SWFTOOLS_ADMIN_STORE: convert 1/0 to true/false * SWFTOOLS_ADMIN_RETRIEVE: convert true/false to 1/0 * @return * Nothing - the array is passed by reference. */ function swftools_admin_boolean_settings(&$settings, $mode) { // Encode the following parameters to yes/no $encode = array( 'play', 'menu', 'loop', 'allowfullscreen', 'swliveconnect', ); // Build the map to either encode or decode $map = array( SWFTOOLS_ADMIN_RETRIEVE => array( 'true' => 1, 'false' => 0, ), SWFTOOLS_ADMIN_STORE => array( 0 => 'false', 1 => 'true', ), ); // Iterate over these settings encoding them, skipping settings that are not present foreach ($encode as $parameter) { $settings[$parameter] = $map[$mode][$settings[$parameter]]; } } /** * Custom form handler to encode checkboxes to true/false. */ function swftools_admin_embed_submit($form, &$form_state, $decode = FALSE) { // Convert 1/0 to true/false swftools_admin_boolean_settings($form_state['values']['swftools_params'], SWFTOOLS_ADMIN_STORE); } /** * Returns a form definition for the profile file handling page. * * @return unknown_type * A form definition array */ function swftools_handling_profile_form($settings = 'swftools_handlers', $profile = '') { // Get saved settings $saved_settings = _swftools_get_handlers($profile); // Build an array to iterate over $handlers = array( SWFTOOLS_FLV_DISPLAY => t('Default player for single FLV movies'), SWFTOOLS_MP3_DISPLAY => t('Default player for single MP3 files'), SWFTOOLS_SWF_DISPLAY => t('Default player for single SWF files'), SWFTOOLS_IMAGE_DISPLAY_LIST => t('Default player for a list of images'), SWFTOOLS_FLV_DISPLAY_LIST => t('Default player for a list of FLV movies'), SWFTOOLS_MP3_DISPLAY_LIST => t('Default player for a list of MP3 music files'), SWFTOOLS_MEDIA_DISPLAY_LIST => t('Default player for a list of mixed media'), ); foreach ($handlers as $handler => $description) { $form[$settings][$handler] = _swftools_admin_file_handling_options($handler, $description, $profile); } // Initialise tree as we want to store arrays $form[$settings]['#tree'] = TRUE; // Return finished form return $form; }