You are here

class scald_plugin_display_library in Scald: Media Management made easy 7

Same name and namespace in other branches
  1. 6 scald_dnd_library/includes/scald_plugin_display_library.inc \scald_plugin_display_library

@file Provides a new view display for the scald library.

Hierarchy

Expanded class hierarchy of scald_plugin_display_library

1 string reference to 'scald_plugin_display_library'
scald_dnd_library_views_plugins in modules/library/scald_dnd_library/includes/scald_dnd_library.views.inc
Implements hook_views_plugins().

File

modules/library/scald_dnd_library/includes/scald_plugin_display_library.inc, line 7
Provides a new view display for the scald library.

View source
class scald_plugin_display_library extends views_plugin_display_page {

  /**
   * Overrides views_plugin_display_page::execute().
   *
   * The library won't go through the normal theming / page rendering
   * process. Instead, we'll just fetch / render the atoms, and print
   * the JSON by itself.
   * We won't be returning anything, which tells Drupal that everything
   * is already rendered.
   */
  public function execute() {
    $library = array();
    $summary = array(
      'criteria' => array(),
    );

    // Hide the links that Views would normally display, as they confuse
    // DnD.
    $this->view->hide_admin_links = TRUE;

    // Execute the view to get all the filter that applies.
    $this->view
      ->execute();

    // And now extract a summary from all the options that were filled.
    foreach ($this->view->filter as $id => $filter) {
      if ($filter->options['exposed']) {
        $value = $filter->value;

        // For Date filters, we need to preprocess a bit the date. Well,
        // ok, more than a bit...
        if ($filter instanceof date_api_filter_handler) {
          $dates = array();
          if ($filter->operator == 'between') {
            if ($value['min']) {
              $d = date_make_date($value['min']);
              $dates['min'] = '>' . date_format($d, $filter->format);
            }
            if ($value['max']) {
              $d = date_make_date($value['max']);
              $dates['max'] = '<' . date_format($d, $filter->format);
            }
          }
          else {
            if ($value['value']) {
              $d = date_make_date($value['value']);
              $dates['value'] = date_format($d, $filter->format);
            }
          }
          $value = $dates;
        }
        elseif ($filter instanceof views_handler_filter_term_node_tid && is_array($value)) {
          $names = array();

          // When migrating to D7, use the very useful _multiple variant
          // to reduce the number of queries.
          foreach ($value as $tid) {
            $term = taxonomy_term_load($tid);
            $names[] = $term->name;
          }
          $value = $names;
        }
        elseif ($filter instanceof views_handler_filter_user_name && is_array($value)) {
          $names = array();
          foreach ($value as $uid) {
            $account = user_load($uid);
            $names[] = $account->name;
          }
          $value = $names;
        }
        elseif ($filter instanceof views_handler_filter_boolean_operator) {
          if ($value == 'All') {
            $value = '';
          }
          else {
            $value = $filter->value_options[$value];
          }
        }
        elseif (is_array($value) && isset($filter->value_options)) {
          foreach ($value as $k => $key) {
            if ($filter->value_options[$key]) {
              $value[$k] = $filter->value_options[$key];
            }
          }
        }
        if (is_array($value)) {
          $value = implode(', ', $value);
        }
        if ($value) {
          $summary['criteria'][] = $filter->options['expose']['label'] . ': ' . $value;
        }
      }
    }

    // Add info about how we sort the view in the summary.
    if (!empty($this->view->exposed_data)) {
      $exposed_data = $this->view->exposed_data;
      $sort_by = isset($exposed_data['sort_by']) ? $exposed_data['sort_by'] : FALSE;
      if ($sort_by && isset($this->view->sort[$sort_by])) {
        $label = $this->view->sort[$sort_by]->options['expose']['label'];
        if (isset($exposed_data['sort_order']) && in_array($exposed_data['sort_order'], array(
          'ASC',
          'DESC',
        ))) {
          $order = $exposed_data['sort_order'];
        }
        else {
          $order = $this->view->sort[$sort_by]->options['expose']['order'];
        }
        $orders = array(
          'ASC' => t('Ascending'),
          'DESC' => t('Descending'),
        );
        $summary['sort'] = t('<span class="label">Sort:</span> @criteria', array(
          '@criteria' => $label . ' ' . $orders[$order],
        ));
      }
    }

    // Render our header based on the built summary.
    $header = '<div class="summary">';
    $header .= '<div class="toggle"></div><div class="title">' . t('search') . '</div>';
    if (!empty($summary['sort'])) {
      $header .= '<div class="sort">' . $summary['sort'] . '</div>';
    }
    $header .= theme('item_list', array(
      'items' => $summary['criteria'],
    ));
    $header .= '</div>';

    // Prepare the "Quick add" buttons, that will appear next to the library,
    // based on the user permissions.
    $atom_types = scald_types();
    $buttons = array(
      'type' => 'ul',
      'title' => NULL,
      'attributes' => array(),
    );
    ctools_include('ajax');
    ctools_include('modal');
    foreach ($atom_types as $type) {
      if (scald_action_permitted(new ScaldAtom($type->type), 'create')) {
        $text = t($type->type);
        $alt = t('Create a new !type atom', array(
          '!type' => $text,
        ));
        $buttons['items'][] = array(
          'data' => ctools_modal_text_button($text, 'atom/add/' . $type->type . '/nojs', $alt, 'ctools-modal-custom-style'),
          'class' => array(
            'add-' . drupal_strtolower($type->type),
          ),
        );
      }
    }

    // Finally render the resulting library.
    $view = $this->view
      ->render();
    $messages = theme('status_messages');
    $library['library'] = $messages . $view . $header;
    foreach ($this->view->result as $result) {
      $sid = $result->sid;
      scald_dnd_library_add_item($library, $sid);
    }
    $library['menu'] = '<div class="scald-menu"><div class="add-buttons">' . theme('item_list', $buttons) . '</div></div>';
    $library['library'] = '<div class="scald-library">' . $library['library'] . '</div>';
    $library['anchor'] = '<div class="scald-anchor"></div>';
    drupal_json_output($library);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
scald_plugin_display_library::execute public function Overrides views_plugin_display_page::execute(). Overrides views_plugin_display_page::execute
views_object::$definition public property Handler's definition.
views_object::$options public property Except for displays, options for the object will be held here. 1
views_object::altered_option_definition function Collect this handler's option definition and alter them, ready for use.
views_object::construct public function Views handlers use a special construct function. 4
views_object::export_options public function
views_object::export_option_always public function Always exports the option, regardless of the default value.
views_object::options Deprecated public function Set default options on this object. 1
views_object::set_default_options public function Set default options.
views_object::set_definition public function Let the handler know what its full definition is.
views_object::unpack_options public function Unpack options over our existing defaults, drilling down into arrays so that defaults don't get totally blown away.
views_object::unpack_translatable public function Unpack a single option definition.
views_object::unpack_translatables public function Unpacks each handler to store translatable texts.
views_object::_set_option_defaults public function
views_plugin::$display public property The current used views display.
views_plugin::$plugin_name public property The plugin name of this plugin, for example table or full.
views_plugin::$plugin_type public property The plugin type of this plugin, for example style or query.
views_plugin::additional_theme_functions public function Provide a list of additional theme functions for the theme info page.
views_plugin::plugin_title public function Return the human readable name of the display.
views_plugin::summary_title public function Returns the summary of the settings in the display. 8
views_plugin::theme_functions public function Provide a full list of possible theme templates used by this style.
views_plugin_display::$extender public property Stores all available display extenders.
views_plugin_display::$handlers public property List of handlers for this display.
views_plugin_display::$view public property The top object of a view. Overrides views_plugin::$view
views_plugin_display::accept_attachments public function Can this display accept attachments?
views_plugin_display::access public function Determine if the user has access to this display of the view.
views_plugin_display::attach_to public function Allow displays to attach to other views. 2
views_plugin_display::defaultable_sections public function List which sections are defaultable and what items each section contains. 1
views_plugin_display::destroy public function Destructor. Overrides views_object::destroy
views_plugin_display::displays_exposed public function Determine if this display should display the exposed filters widgets. 1
views_plugin_display::export_handler public function Special method to export items that have handlers.
views_plugin_display::export_option public function Override of export_option() Overrides views_object::export_option
views_plugin_display::export_plugin public function Special handling for plugin export.
views_plugin_display::export_style public function Special handling for the style export.
views_plugin_display::format_themes public function Format a list of theme templates for output by the theme info helper.
views_plugin_display::get_arguments_tokens public function Returns to tokens for arguments.
views_plugin_display::get_field_labels public function List of fields for the current display with the associated relationship.
views_plugin_display::get_handler public function Get the handler object for a single handler.
views_plugin_display::get_handlers public function Get a full array of handlers for $type. This caches them.
views_plugin_display::get_link_display public function Check to see which display to use when creating links.
views_plugin_display::get_option public function Intelligently get an option either from this or default display.
views_plugin_display::get_path public function Return the base path to use for this display.
views_plugin_display::get_plugin public function Get the instance of a plugin, for example style or row.
views_plugin_display::get_special_blocks public function Provide the block system with any exposed widget blocks for this display.
views_plugin_display::get_style_type public function Displays can require a certain type of style plugin. 1
views_plugin_display::get_url public function
views_plugin_display::hook_block_list public function If this display creates a block, implement one of these.
views_plugin_display::hook_menu public function If this display creates a page with a menu item, implement it here.
views_plugin_display::init public function 1
views_plugin_display::is_defaulted public function Determine if a given option is set to use the default or current display.
views_plugin_display::is_default_display public function If this display is the 'default' display which contains fallback settings. 1
views_plugin_display::is_identifier_unique public function Check if the provided identifier is unique.
views_plugin_display::options_override public function If override/revert was clicked, perform the proper toggle.
views_plugin_display::option_link public function Because forms may be split up into sections, this provides an easy URL to exactly the right section. Don't override this.
views_plugin_display::override_option public function Set an option and force it to be an override.
views_plugin_display::preview public function Fully render the display. 1
views_plugin_display::pre_execute public function Set up any variables on the view prior to execution.
views_plugin_display::query public function Inject anything into the query that the display handler needs. Overrides views_plugin::query
views_plugin_display::render public function Render this display. 1
views_plugin_display::render_area public function
views_plugin_display::render_empty public function
views_plugin_display::render_filters public function Not all display plugins will support filtering.
views_plugin_display::render_footer public function Render the footer of the view.
views_plugin_display::render_header public function Render the header of the view.
views_plugin_display::render_more_link public function Render the 'more' link.
views_plugin_display::render_pager public function Not all display plugins will suppert pager rendering. 1
views_plugin_display::set_option public function Intelligently set an option either from this display or from the default display, if directed to do so.
views_plugin_display::set_override public function Flip the override setting for the given section.
views_plugin_display::unpack_handler public function Special method to unpack items that have handlers.
views_plugin_display::unpack_plugin public function Special handling for plugin unpacking.
views_plugin_display::unpack_style public function
views_plugin_display::uses_exposed public function Does this display uses exposed filters? 2
views_plugin_display::uses_exposed_form_in_block public function Check to see if the display can put the exposed form in a block.
views_plugin_display::uses_fields public function Determine if the display's style uses fields.
views_plugin_display::uses_link_display public function Check to see if the display has some need to link to another display. 1
views_plugin_display::use_ajax public function Does the display use AJAX?
views_plugin_display::use_group_by public function Does the display have groupby enabled?
views_plugin_display::use_more public function Does the display have a more link enabled?
views_plugin_display::use_more_always public function Should the enabled display more link be shown when no more items?
views_plugin_display::use_more_open_new_window public function Should the enabled display more link being opened in an new window?
views_plugin_display::use_more_text public function Does the display have custom link text?
views_plugin_display::use_pager public function Does the display have a pager enabled? 1
views_plugin_display::view_special_blocks public function Render any special blocks provided for this display.
views_plugin_display_page::execute_hook_menu public function Add this display's path information to Drupal's menu system.
views_plugin_display_page::get_argument_text public function Provide some helpful text for the arguments. Overrides views_plugin_display::get_argument_text
views_plugin_display_page::get_pager_text public function Provide some helpful text for pagers. Overrides views_plugin_display::get_pager_text
views_plugin_display_page::has_path public function The page display has a path. Overrides views_plugin_display::has_path
views_plugin_display_page::options_form public function Provide the default form for setting options. Overrides views_plugin_display::options_form 1
views_plugin_display_page::options_submit public function Perform any necessary changes to the form values prior to storage. Overrides views_plugin_display::options_submit 1
views_plugin_display_page::options_summary public function Provide the summary for page options in the views UI. Overrides views_plugin_display::options_summary 1
views_plugin_display_page::options_validate public function Validate the options form. Overrides views_plugin_display::options_validate
views_plugin_display_page::option_definition public function Information about options for all kinds of purposes will be held here. Overrides views_plugin_display::option_definition 1
views_plugin_display_page::uses_breadcrumb public function Check to see if the display needs a breadcrumb. Overrides views_plugin_display::uses_breadcrumb 1
views_plugin_display_page::validate public function Make sure the display and all associated handlers are valid. Overrides views_plugin_display::validate