You are here

class views_random_seed_handler_sort_random in Views random seed 6

Same name and namespace in other branches
  1. 7 views_random_seed_handler_sort_random.inc \views_random_seed_handler_sort_random

Handle a random sort with seed.

Hierarchy

Expanded class hierarchy of views_random_seed_handler_sort_random

1 string reference to 'views_random_seed_handler_sort_random'
views_random_seed_views_data in ./views_random_seed.module
Implementation of hook_views_data()

File

./views_random_seed_handler_sort_random.inc, line 6

View source
class views_random_seed_handler_sort_random extends views_handler_sort {

  // Definition.
  function option_definition() {
    $options = parent::option_definition();
    $options['user_seed_type'] = array(
      'default' => 'same_per_user',
    );
    $options['reset_seed_int'] = array(
      'default' => '3600',
    );
    $options['reset_seed_custom'] = array(
      'default' => '300',
    );
    return $options;
  }

  // Options form.
  function options_form(&$form, &$form_state) {
    parent::options_form($form, $form_state);
    $form['order']['#access'] = FALSE;

    // User seed type.
    $form['user_seed_type'] = array(
      '#type' => 'radios',
      '#title' => t('User seed type'),
      '#options' => array(
        'same_per_user' => t('Use the same seed for every user'),
        'diff_per_user' => t('Use a different seed per user'),
        'custom' => t('Use custom PHP code'),
      ),
      '#default_value' => isset($this->options['user_seed_type']) ? $this->options['user_seed_type'] : 'same_per_user',
    );

    // User seed type.
    $form['reset_seed_int'] = array(
      '#type' => 'radios',
      '#title' => t('Reset seed'),
      '#options' => array(
        'never' => t('Never'),
        'custom' => t('Custom'),
        '3600' => t('Every hour'),
        '28800' => t('Every day'),
      ),
      '#default_value' => isset($this->options['reset_seed_int']) ? $this->options['reset_seed_int'] : '3600',
    );
    $form['reset_seed_custom'] = array(
      '#type' => 'textfield',
      '#size' => 10,
      '#title' => t('Custom reset seed'),
      '#required' => TRUE,
      '#default_value' => isset($this->options['reset_seed_custom']) ? $this->options['reset_seed_custom'] : '300',
      '#description' => t('Define your own custom reset time, a number which are seconds. Choose custom in the options above.'),
    );

    // Custom seed textarea.
    $form['custom_seed'] = array(
      '#type' => 'textarea',
      '#title' => t('Custom PHP code'),
      '#description' => t('PHP code, must return a string. Do not include <?php and ?> tags, this is passed through <code>eval()</code>.'),
      '#default_value' => isset($this->options['custom_seed']) ? $this->options['custom_seed'] : NULL,
    );

    // Caching strategy info.
    $form['cache_strategy'] = array(
      '#type' => 'item',
      '#title' => t('Cache exclude'),
      '#description' => t('If you enable page caching, anonymous users might get duplicate items depending on their seed and which pages are allready cached by Drupal. If you wish to exclude paths from getting cached for anonymous users, install <a href="!url" target="_blank">Cache exclude</a>.', array(
        '!url' => 'http://drupal.org/project/cacheexclude',
      )),
    );
  }

  // Perform query.
  function query() {
    global $db_type;
    $seed = views_random_seed_calculate_seed($this->options, $this->view->name, $this->view->current_display, $db_type);
    if ($this->view->base_table == 'apachesolr_node') {
      $order = 'asc';
      $formula = 'random_' . $seed;
      $this->query
        ->add_sort($formula, $order);
    }
    else {
      switch ($db_type) {
        case 'mysql':
        case 'mysqli':
          $formula = 'RAND(' . $seed . ')';
          break;
        case 'pgsql':

          // For PgSQL we'll run an extra query with a integer between
          // 0 and 1 which will be used by the RANDOM() function.
          db_query('select setseed(' . $seed . ')');
          $res = db_result(db_query("select random()"));
          $formula = 'RANDOM()';
          break;
      }
      $this->query
        ->add_orderby(NULL, $formula, $this->options['order'], '_' . $this->field);
    }
  }

}

Members