Mercurial > hg > rr-repo
diff sites/all/modules/views_slideshow/views_slideshow.module @ 2:b74b41bb73f0
-- Google analytics module
author | danieleb <danielebarchiesi@me.com> |
---|---|
date | Thu, 22 Aug 2013 17:22:54 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sites/all/modules/views_slideshow/views_slideshow.module Thu Aug 22 17:22:54 2013 +0100 @@ -0,0 +1,475 @@ +<?php + +/** + * @file + * Provides Slideshow style options for Views. + */ + +/** + * Implement hook_theme(). + */ +function views_slideshow_theme($existing, $type, $theme, $path) { + return array( + 'views_slideshow_main_section' => array( + 'variables' => array('vss_id' => NULL, 'slides' => NULL, 'plugin' => NULL), + 'file' => 'theme/views_slideshow.theme.inc', + ), + 'views_slideshow_pager_widget_render' => array( + 'variables' => array('vss_id' => NULL, 'view' => NULL, 'settings' => array(), 'location' => NULL, 'rows' => array()), + 'file' => 'theme/views_slideshow.theme.inc', + ), + 'views_slideshow_pager_fields' => array( + 'variables' => array('vss_id' => NULL, 'view' => NULL, 'settings' => array(), 'location' => NULL, 'attributes' => array()), + 'template' => 'theme/views-slideshow-pager-fields', + ), + 'views_slideshow_pager_field_field' => array( + 'variables' => array('view' => NULL, 'field' => NULL, 'count' => NULL), + 'template' => 'theme/views-slideshow-pager-field-field', + 'file' => 'theme/views_slideshow.theme.inc', + ), + 'views_slideshow_pager_field_item' => array( + 'variables' => array('vss_id' => NULL, 'item' => NULL, 'count' => NULL, 'location' => NULL), + 'template' => 'theme/views-slideshow-pager-field-item', + ), + 'views_slideshow_controls_widget_render' => array( + 'variables' => array('vss_id' => NULL, 'view' => NULL, 'settings' => array(), 'location' => NULL, 'rows' => array()), + 'file' => 'theme/views_slideshow.theme.inc', + ), + 'views_slideshow_controls_text' => array( + 'variables' => array('vss_id' => NULL, 'view' => NULL, 'settings' => array(), 'location' => NULL, 'rows' => array()), + 'template' => 'theme/views-slideshow-controls-text', + ), + 'views_slideshow_controls_text_previous' => array( + 'variables' => array('vss_id' => NULL, 'view' => NULL, 'settings' => array()), + 'template' => 'theme/views-slideshow-controls-text-previous', + ), + 'views_slideshow_controls_text_pause' => array( + 'variables' => array('vss_id' => NULL, 'view' => NULL, 'settings' => array()), + 'template' => 'theme/views-slideshow-controls-text-pause', + ), + 'views_slideshow_controls_text_next' => array( + 'variables' => array('vss_id' => NULL, 'view' => NULL, 'settings' => array()), + 'template' => 'theme/views-slideshow-controls-text-next', + ), + 'views_slideshow_slide_counter_widget_render' => array( + 'variables' => array('vss_id' => NULL, 'view' => NULL, 'settings' => array(), 'location' => NULL, 'rows' => array()), + 'file' => 'theme/views_slideshow.theme.inc', + ), + 'views_slideshow_slide_counter' => array( + 'variables' => array('vss_id' => NULL, 'view' => NULL, 'settings' => array(), 'location' => NULL, 'rows' => array()), + 'template' => 'theme/views-slideshow-slide-counter', + ), + ); +} + +/** + * Implements hook_views_api(). + */ +function views_slideshow_views_api() { + return array( + 'api' => '3', + ); +} + +/** + * Implements hook_help(). + */ +function views_slideshow_help($path, $arg) { + switch ($path) { + case 'admin/help#views_slideshow': + return '<p>Check the Views Slideshow project page documentation for tutorials and videos on how to use this module.</p>'; + } +} + +/** + * Implements hook_init(). + */ +function views_slideshow_init() { + // Load javascript on the page in init to help fool caching. + drupal_add_js(drupal_get_path('module', 'views_slideshow') . '/js/views_slideshow.js'); + + $vs_path = drupal_get_path('module', 'views_slideshow'); + drupal_add_css($vs_path . '/views_slideshow.css'); +} + +/** + * Implementation of hook_views_slideshow_skin_info(). + */ +function views_slideshow_views_slideshow_skin_info() { + return array( + 'default' => array( + 'name' => t('Default'), + ), + ); +} + +/** + * Implements hook_views_slideshow_widget_info(). + */ +function views_slideshow_views_slideshow_widget_info() { + return array( + 'views_slideshow_pager' => array( + 'name' => t('Pager'), + 'accepts' => array( + 'transitionBegin' => array('required' => TRUE), + 'goToSlide', + 'previousSlide', + 'nextSlide', + ), + 'calls' => array( + 'goToSlide', + 'pause', + 'play', + ), + ), + 'views_slideshow_controls' => array( + 'name' => t('Controls'), + 'accepts' => array( + 'pause' => array('required' => TRUE), + 'play' => array('required' => TRUE), + ), + 'calls' => array( + 'nextSlide', + 'pause', + 'play', + 'previousSlide', + ), + ), + 'views_slideshow_slide_counter' => array( + 'name' => t('Slide Counter'), + 'accepts' => array( + 'transitionBegin' => array('required' => TRUE), + 'goToSlide', + 'previousSlide', + 'nextSlide', + ), + 'calls' => array(), + ), + ); +} + +/** + * Implements [widget]_views_slideshow_widget_form_options(). + */ +function views_slideshow_pager_views_slideshow_widget_form_options(&$form, &$form_state, &$view, $defaults, $dependency) { + // Get all the pager info from other modules. + // hook_views_slideshow_pager_info($view, $option_values, $dependency_prefix) + $pagers = module_invoke_all('views_slideshow_widget_pager_info', $view); + + if (!empty($pagers)) { + $pager_options = array(); + foreach($pagers as $pager_id => $pager_info) { + $pager_options[$pager_id] = $pager_info['name']; + } + asort($pager_options); + + // Need to wrap this so it indents correctly. + $form['views_slideshow_pager_wrapper'] = array( + '#markup' => '<div class="vs-dependent">', + ); + + // Add field to see if they would like to hide pager if there is only one + // slide. + $form['hide_on_single_slide'] = array( + '#type' => 'checkbox', + '#title' => t('Hide pager if there is only one slide'), + '#default_value' => $defaults['hide_on_single_slide'], + '#description' => t('Should the pager be hidden if there is only one slide.'), + '#states' => array( + 'visible' => array( + ':input[name="' . $dependency . '[enable]"]' => array('checked' => TRUE), + ), + ), + ); + + // Create the widget type field. + $form['type'] = array( + '#type' => 'select', + '#title' => t('Pager Type'), + '#description' => t('Style of the pager'), + '#default_value' => $defaults['type'], + '#options' => $pager_options, + '#states' => array( + 'visible' => array( + ':input[name="' . $dependency . '[enable]"]' => array('checked' => TRUE), + ), + ), + ); + + // Add any additional form elements + // Build our arguments to pass to + // [pager-type]_views_slideshow_widget_pager_form_options + $arguments = array( + &$form, + &$form_state, + &$view, + $defaults, + $dependency, + ); + + foreach ($pagers as $pager_key => $pager_info) { + $function = $pager_key . '_views_slideshow_widget_pager_form_options'; + if (function_exists($function)) { + call_user_func_array($function, $arguments); + } + } + + $form['views_slideshow_pager_wrapper_close'] = array( + '#markup' => '</div>', + ); + } + else { + $form['enable_pager'] = array( + '#markup' => 'There are no pagers available.', + ); + } +} + +/** + * Implementation of hook_views_slideshow_widget_pager_info + */ +function views_slideshow_views_slideshow_widget_pager_info($view) { + $settings = array(); + // Settings for fields pager. + // First verfiy that the view is using fields. + if ($view->row_plugin->uses_fields()) { + $settings = array( + 'views_slideshow_pager_fields' => array( + 'name' => t('Fields'), + ), + ); + } + + return $settings; +} + +/** + * Implementation [widget-type]_views_slideshow_pager_form_options + */ +function views_slideshow_pager_fields_views_slideshow_widget_pager_form_options(&$form, &$form_state, &$view, $defaults, $dependency) { + // Settings for fields pager. + $options = array(); + // Get each field and it's name. + foreach ($view->display->handler->get_handlers('field') as $field => $handler) { + $options[$field] = $handler->ui_name(); + } + // Need to wrap this so it indents correctly. + $form['views_slideshow_pager_fields_wrapper'] = array( + '#markup' => '<div class="vs-dependent">', + ); + // Add ability to choose which fields to show in the pager. + $form['views_slideshow_pager_fields_fields'] = array( + '#type' => 'checkboxes', + '#title' => t('Pager fields'), + '#options' => $options, + '#default_value' => $defaults['views_slideshow_pager_fields_fields'], + '#description' => t("Choose the fields that will appear in the pager."), + '#process' => array( + 'form_process_checkboxes', + ), + '#states' => array( + 'visible' => array( + ':input[name="' . $dependency . '[enable]"]' => array('checked' => TRUE), + ':input[name="' . $dependency . '[type]"]' => array('value' => 'views_slideshow_pager_fields'), + ), + ), + ); + + // Add field to see if they would like to activate slide and pause on pager + // hover + $form['views_slideshow_pager_fields_hover'] = array( + '#type' => 'checkbox', + '#title' => t('Activate Slide and Pause on Pager Hover'), + '#default_value' => $defaults['views_slideshow_pager_fields_hover'], + '#description' => t('Should the slide be activated and paused when hovering over a pager item.'), + '#states' => array( + 'visible' => array( + ':input[name="' . $dependency . '[enable]"]' => array('checked' => TRUE), + ':input[name="' . $dependency . '[type]"]' => array('value' => 'views_slideshow_pager_fields'), + ), + ), + ); + + $form['views_slideshow_pager_fields_wrapper_close'] = array( + '#markup' => '</div>', + ); +} + +/** + * Implements [widget]_views_slideshow_widget_form_options(). + */ +function views_slideshow_controls_views_slideshow_widget_form_options(&$form, &$form_state, &$view, $defaults, $dependency) { + // Get all the control info from other modules. + // hook_views_slideshow_controls_settings($view, $option_values, $dependency_prefix) + $controls = module_invoke_all('views_slideshow_widget_controls_info', $view); + + if (!empty($controls)) { + $control_type_options = array(); + foreach($controls as $control_id => $control_info) { + $control_type_options[$control_id] = $control_info['name']; + } + asort($control_type_options); + + // Need to wrap this so it indents correctly. + $form['views_slideshow_controls_wrapper'] = array( + '#markup' => '<div class="vs-dependent">', + ); + + // Add field to see if they would like to hide controls if there is only one + // slide + $form['hide_on_single_slide'] = array( + '#type' => 'checkbox', + '#title' => t('Hide controls if there is only one slide'), + '#default_value' => $defaults['hide_on_single_slide'], + '#description' => t('Should the controls be hidden if there is only one slide.'), + '#states' => array( + 'visible' => array( + ':input[name="' . $dependency . '[enable]"]' => array('checked' => TRUE), + ), + ), + ); + + // Create the widget type field. + $form['type'] = array( + '#type' => 'select', + '#title' => t('Controls Type'), + '#description' => t('Style of the controls'), + '#default_value' => $defaults['type'], + '#options' => $control_type_options, + '#states' => array( + 'visible' => array( + ':input[name="' . $dependency . '[enable]"]' => array('checked' => TRUE), + ), + ), + ); + + // Add any additional form elements + // Build our arguments to pass to + // [pager-type]_views_slideshow_widget_pager_form_options + $arguments = array( + &$form, + &$form_state, + &$view, + $defaults, + $dependency, + ); + + foreach ($controls as $control_key => $control_info) { + $function = $control_key . '_views_slideshow_widget_controls_form_options'; + if (function_exists($function)) { + call_user_func_array($function, $arguments); + } + } + + $form['controls_wrapper_close'] = array( + '#markup' => '</div>', + ); + } + else { + $form['enable_controls'] = array( + '#markup' => 'There are no controls available.', + ); + } +} + +/** + * Implementation of hook_views_slideshow_controls_info + */ +function views_slideshow_views_slideshow_widget_controls_info($view) { + return array( + 'views_slideshow_controls_text' => array( + 'name' => t('Text'), + ) + ); +} + +/** + * Implements hook_views_slideshow_option_definition. + */ +function views_slideshow_views_slideshow_option_definition() { + + // Default slideshow type and skins + $options['slideshow_type'] = array('default' => ''); + $options['slideshow_skin'] = array('default' => ''); + $options['skin_info'] = array( + 'default' => array( + 'class' => 'default', + 'name' => t('Untitled skin'), + 'module' => 'views_slideshow', + 'path' => '', + 'stylesheets' => array(), + ), + ); + + // Set default widgets and weight values. + $widgets = module_invoke_all('views_slideshow_widget_info'); + if ($widgets) { + $locations = array('top', 'bottom'); + foreach ($locations as $location) { + foreach ($widgets as $widget_id => $widget_name) { + $options['widgets']['contains'][$location]['contains'][$widget_id]['contains']['enable'] = array('default' => 0); + $options['widgets']['contains'][$location]['contains'][$widget_id]['contains']['weight'] = array('default' => 1); + } + } + } + + // Defaults for the pager widget. + foreach ($locations as $location) { + $options['widgets']['contains'][$location]['contains']['views_slideshow_pager']['contains']['hide_on_single_slide'] = array('default' => 0); + $options['widgets']['contains'][$location]['contains']['views_slideshow_pager']['contains']['type'] = array('default' => 0); + $options['widgets']['contains'][$location]['contains']['views_slideshow_pager']['contains']['views_slideshow_pager_numbered_hover'] = array('default' => 0); + $options['widgets']['contains'][$location]['contains']['views_slideshow_pager']['contains']['views_slideshow_pager_numbered_click_to_page'] = array('default' => 0); + $options['widgets']['contains'][$location]['contains']['views_slideshow_pager']['contains']['views_slideshow_pager_thumbnails_hover'] = array('default' => 0); + $options['widgets']['contains'][$location]['contains']['views_slideshow_pager']['contains']['views_slideshow_pager_thumbnails_click_to_page'] = array('default' => 0); + $options['widgets']['contains'][$location]['contains']['views_slideshow_pager']['contains']['views_slideshow_pager_fields_fields'] = array('default' => array()); + $options['widgets']['contains'][$location]['contains']['views_slideshow_pager']['contains']['views_slideshow_pager_fields_hover'] = array('default' => 0); + + $options['widgets']['contains'][$location]['contains']['views_slideshow_controls']['contains']['hide_on_single_slide'] = array('default' => 0); + $options['widgets']['contains'][$location]['contains']['views_slideshow_controls']['contains']['type'] = array('default' => 0); + } + + return $options; +} + +/** + * Need to have preprocess functions here because drupal doesn't cache them + * correctly in the theme.inc file. + * + * If you would like to override the preprocess functions make sure to look at + * the associated function in theme.inc. + */ + +// Trying to make sure the theme.inc get's loaded. +include_once('theme/views_slideshow.theme.inc'); + +function template_preprocess_views_slideshow(&$vars) { + _views_slideshow_preprocess_views_slideshow($vars); +} + +function template_preprocess_views_slideshow_pager_fields(&$vars) { + _views_slideshow_preprocess_views_slideshow_pager_fields($vars); +} + +function template_preprocess_views_slideshow_pager_field_item(&$vars) { + _views_slideshow_preprocess_views_slideshow_pager_field_item($vars); +} + +function template_preprocess_views_slideshow_controls_text(&$vars) { + _views_slideshow_preprocess_views_slideshow_controls_text($vars); +} + +function template_preprocess_views_slideshow_controls_text_previous(&$vars) { + _views_slideshow_preprocess_views_slideshow_controls_text_previous($vars); +} + +function template_preprocess_views_slideshow_controls_text_pause(&$vars) { + _views_slideshow_preprocess_views_slideshow_controls_text_pause($vars); +} + +function template_preprocess_views_slideshow_controls_text_next(&$vars) { + _views_slideshow_preprocess_views_slideshow_controls_text_next($vars); +} + +function template_preprocess_views_slideshow_slide_counter(&$vars) { + _views_slideshow_preprocess_views_slideshow_slide_counter($vars); +}