You are here

class views_sort_by_arg_order_handler_sort in Views Arguments Extras 7

Same name and namespace in other branches
  1. 6 views_sort_by_arg_order_handler_sort.inc \views_sort_by_arg_order_handler_sort

Hierarchy

Expanded class hierarchy of views_sort_by_arg_order_handler_sort

1 string reference to 'views_sort_by_arg_order_handler_sort'
views_arguments_extras_views_data in ./views_arguments_extras.module

File

./views_sort_by_arg_order_handler_sort.inc, line 4

View source
class views_sort_by_arg_order_handler_sort extends views_handler_sort {
  function option_definition() {
    $options = parent::option_definition();
    $options['inherit_type'] = array(
      'default' => 1,
    );
    $options['null_below'] = array(
      'default' => 1,
    );
    $options['argument_number'] = array(
      'default' => 0,
    );
    $options['field_type'] = array(
      'default' => 'node::nid',
    );
    return $options;
  }
  function options_form(&$form, &$form_state) {
    parent::options_form($form, $form_state);
    $form['argument_number'] = array(
      '#title' => t('Argument'),
      '#type' => 'select',
      '#options' => array(
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
      ),
      '#default_value' => $this->options['argument_number'],
    );
    $data = views_fetch_data();
    $group_options = array();
    foreach ($data as $table => $fields) {
      foreach ($fields as $field => $f) {
        if ($f['title'] && $field != 'moved to') {
          $group = $f['group'] ? $f['group'] : $fields['table']['group'];
          if ($group) {
            $options[$group][$table . "::" . $field] = $f['title'];
            $group_options[$group] = $group;
          }
        }
      }
    }
    $form['null_below'] = array(
      '#type' => 'checkbox',
      '#title' => 'Non arguments at End',
      '#description' => t('Place items not in the argument at the end.'),
      '#default_value' => $this->options['null_below'],
      '#options' => array(
        0,
        'Null values below',
      ),
    );
    $form['inherit_type'] = array(
      '#type' => 'checkbox',
      '#title' => 'Inherit type of Field from Argument',
      '#description' => t('If the argument is the NULL argument or you want to choose a different type for linking the uncheck, otherwise it is safe to leave it checked.'),
      '#default_value' => $this->options['inherit_type'],
      '#options' => array(
        0,
        'Inherit type of Field from Argument',
      ),
      '#ajax' => array(
        'callback' => 'views_boxes_arg_order_type_callback',
        'wrapper' => 'arg-order-type',
        'method' => 'replace',
        'effect' => 'fade',
      ),
    );
    $form['field_type'] = array(
      '#title' => t('Type of Argument Field'),
      '#type' => 'select',
      '#options' => $options,
      '#default_value' => $this->options['field_type'],
    );
  }

  /*
   * We are going to Create a temp table, populate it with the argument
   * and then change the query to link to the temp table and sort on its
   * weight
   */
  function query() {

    // retrive options
    $arg_to_use = $this->options['argument_number'];
    $inherit_type = $this->options['inherit_type'];
    $order = $this->options['order'];
    $null_below = $this->options['null_below'];

    // find the table and field to which we will link
    $left_table = '';
    $left_field = '';

    // if inherited look at the argument to get table and field
    if ($inherit_type) {
      $arg_handlers = array_values($this->view->argument);
      $arg_handler = $arg_handlers[$arg_to_use];
      $left_table = $arg_handler->table;
      $left_field = $arg_handler->field;
    }
    else {
      list($left_table, $left_field) = explode('::', $this->options['field_type']);
    }

    // find the type of field to which we are linking
    $schema = drupal_get_schema($left_table);
    $value_db_type = $schema['fields'][$left_field]['type'];

    // check to insure we have field type else assume int
    if ($value_db_type && FALSE) {
      $value_query_type = db_type_placeholder($value_db_type);
    }
    else {
      $value_db_type = 'varchar(255)';
      $value_query_type = "'%s'";
    }
    $current_table = $this->table;
    $args = $this->view->args;
    $items = isset($args[$arg_to_use]) ? explode('+', $args[$arg_to_use]) : array();

    //If we only have one items then lets explode on ',' in case it is ',' delimited
    $items = sizeof($items) == 1 ? explode(",", $items[0]) : $items;
    $invert_order = TRUE;
    $items = $invert_order ? array_reverse($items) : $items;
    $max_o = 0;
    $case_items = array();
    foreach ($items as $o => $value) {
      $this->sort_values[$value] = $o;
      if ($value) {
        $case_items[] = "WHEN {$value_query_type} THEN {$o} ";
        $case_items_args[] = $value;
        $max_o = $max_o > $o ? $max_o : $o;
      }
    }
    if ($case_items) {
      $is_desc = $order == 'DESC';
      $null_o = $is_desc == $null_below ? -1 : $max_o + 1;
      $order_by = "CASE {$left_table}.{$left_field} " . implode("", $case_items) . " ELSE {$null_o} END";
      $order_by = vsprintf($order_by, $items);
      $alias = "arg_order" . rand(0, 10000);
      $this->query
        ->add_orderby(NULL, $order_by, $order, $alias);
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
views_handler::$handler_type public property The type of the handler, for example filter/footer/field.
views_handler::$query public property Where the $query object will reside:. 1
views_handler::$real_field public property The actual field in the database table, maybe different on other kind of query plugins/special handlers.
views_handler::$relationship public property The relationship used for this field.
views_handler::$table_alias public property The alias of the table of this handler which is used in the query.
views_handler::$view public property The top object of a view. Overrides views_object::$view
views_handler::accept_exposed_input public function Take input from exposed handlers and assign to this handler, if necessary. 1
views_handler::access public function Check whether current user has access to this handler. 10
views_handler::broken public function Determine if the handler is considered 'broken'. 6
views_handler::case_transform public function Transform a string by a certain method.
views_handler::ensure_my_table public function Ensure the main table for this handler is in the query. This is used a lot. 8
views_handler::exposed_form public function Render our chunk of the exposed handler form when selecting. 1
views_handler::exposed_info public function Get information about the exposed form for the form renderer. 1
views_handler::exposed_submit public function Submit the exposed handler form.
views_handler::exposed_validate public function Validate the exposed handler form. 4
views_handler::expose_submit public function Perform any necessary changes to the form exposes prior to storage. There is no need for this function to actually store the data.
views_handler::expose_validate public function Validate the options form. 1
views_handler::extra_options public function Provide defaults for the handler.
views_handler::extra_options_form public function Provide a form for setting options. 1
views_handler::extra_options_submit public function Perform any necessary changes to the form values prior to storage. There is no need for this function to actually store the data.
views_handler::extra_options_validate public function Validate the options form.
views_handler::get_field public function Shortcut to get a handler's raw field value.
views_handler::get_join public function Get the join object that should be used for this handler.
views_handler::groupby_form public function Provide a form for aggregation settings. 1
views_handler::groupby_form_submit public function Perform any necessary changes to the form values prior to storage. There is no need for this function to actually store the data. 1
views_handler::has_extra_options public function If a handler has 'extra options' it will get a little settings widget and another form called extra_options. 1
views_handler::init public function Init the handler with necessary data. 6
views_handler::is_a_group public function Returns TRUE if the exposed filter works like a grouped filter. 1
views_handler::is_exposed public function Determine if this item is 'exposed', meaning it provides form elements to let users modify the view.
views_handler::multiple_exposed_input public function Define if the exposed input has to be submitted multiple times. This is TRUE when exposed filters grouped are using checkboxes as widgets. 1
views_handler::needs_style_plugin public function Determine if the argument needs a style plugin. 1
views_handler::placeholder public function Provides a unique placeholders for handlers.
views_handler::post_execute public function Run after the view is executed, before the result is cached. 1
views_handler::pre_query public function Run before the view is built. 1
views_handler::sanitize_value public function Sanitize the value for output.
views_handler::set_relationship public function Called just prior to query(), this lets a handler set up any relationship it needs.
views_handler::show_expose_form public function Shortcut to display the exposed options form.
views_handler::store_exposed_input public function If set to remember exposed input in the session, store it there. 1
views_handler::ui_name public function Return a string representing this handler's name in the UI. 9
views_handler::use_group_by public function Provides the handler some groupby. 2
views_handler::validate public function Validates the handler against the complete View. 1
views_handler_sort::admin_summary public function Display whether or not the sort order is ascending or descending Overrides views_handler::admin_summary 1
views_handler_sort::can_expose public function Determine if a sort can be exposed. Overrides views_handler::can_expose 1
views_handler_sort::expose_form public function Form for exposed handler options. Overrides views_handler::expose_form
views_handler_sort::expose_options public function Provide default options for exposed sorts. Overrides views_handler::expose_options
views_handler_sort::options_submit public function Simple submit handler. Overrides views_handler::options_submit
views_handler_sort::options_validate public function Simple validate handler. Overrides views_handler::options_validate
views_handler_sort::show_expose_button public function Shortcut to display the expose/hide button. Overrides views_handler::show_expose_button
views_handler_sort::show_sort_form public function Shortcut to display the value form. 1
views_handler_sort::sort_options public function Provide a list of options for the default sort form.
views_handler_sort::sort_submit public function
views_handler_sort::sort_validate public function
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::destroy public function Destructor. 2
views_object::export_option public function 1
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_sort_by_arg_order_handler_sort::options_form function Basic options for all sort criteria Overrides views_handler_sort::options_form
views_sort_by_arg_order_handler_sort::option_definition function Information about options for all kinds of purposes will be held here. Overrides views_handler_sort::option_definition
views_sort_by_arg_order_handler_sort::query function Called to add the sort to a query. Overrides views_handler_sort::query