From 8ae1969cd06b097c76764aa83ad2f00772544e59 Mon Sep 17 00:00:00 2001
From: jucallme <jucallme@gmail.com>
Date: Fri, 23 Mar 2012 20:37:02 -0300
Subject: [PATCH] split the checkbox as once we have a combined #dependency it
 pops out of no where in some cases, now only visible when
 offset or items per page are exposed

---
 plugins/views_plugin_pager_full.inc |   86 +++++++++++++++++++++++++++++++++++
 1 files changed, 86 insertions(+), 0 deletions(-)

diff --git a/plugins/views_plugin_pager_full.inc b/plugins/views_plugin_pager_full.inc
index fe552c1..4db1acc 100644
--- a/plugins/views_plugin_pager_full.inc
+++ b/plugins/views_plugin_pager_full.inc
@@ -31,6 +31,8 @@ class views_plugin_pager_full extends views_plugin_pager {
         'items_per_page_options' => array('default' => '5, 10, 20, 40, 60'),
         'items_per_page_options_all' => array('default' => FALSE, 'bool' => TRUE),
         'items_per_page_options_all_label' => array('default' => '- All -', 'translatable' => TRUE),
+        'items_per_page_remember' => array('default' => FALSE, 'bool' => TRUE),
+        'offset_remember' => array('default' => FALSE, 'bool' => TRUE),
 
         'offset' => array('default' => FALSE, 'bool' => TRUE),
         'offset_label' => array('default' => 'Offset', 'translatable' => TRUE),
@@ -83,6 +85,7 @@ class views_plugin_pager_full extends views_plugin_pager {
       '#description' => t('Exposing this options allows users to define their values in a exposed form when view is displayed'),
     );
 
+
     $form['expose']['items_per_page'] = array(
       '#type' => 'checkbox',
       '#title' => t('Expose items per page'),
@@ -112,6 +115,15 @@ class views_plugin_pager_full extends views_plugin_pager {
       ),
     );
 
+    $form['expose']['items_per_page_remember'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Remember the last selection'),
+      '#description' => t('Enable to remember the last selection made by the user.'),
+      '#default_value' => $this->options['expose']['items_per_page_remember'],
+      '#dependency' => array(
+        'edit-pager-options-expose-items-per-page' => array(1),
+      ),
+    );
 
     $form['expose']['items_per_page_options_all'] = array(
       '#type' => 'checkbox',
@@ -147,6 +159,16 @@ class views_plugin_pager_full extends views_plugin_pager {
         'edit-pager-options-expose-offset' => array(1)
       ),
     );
+
+    $form['expose']['offset_remember'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Remember the last selection'),
+      '#description' => t('Enable to remember the last selection made by the user.'),
+      '#default_value' => $this->options['expose']['offset_remember'],
+      '#dependency' => array(
+        'edit-pager-options-expose-offset' => array(1),
+      ),
+    );
   }
 
   function options_validate(&$form, &$form_state) {
@@ -197,8 +219,10 @@ class views_plugin_pager_full extends views_plugin_pager {
       }
     }
 
+    $this->get_exposed_input();
     $limit = $this->options['items_per_page'];
     $offset = $this->current_page * $this->options['items_per_page'] + $this->options['offset'];
+
     if (!empty($this->options['total_pages'])) {
       if ($this->current_page >= $this->options['total_pages']) {
         $limit = $this->options['items_per_page'];
@@ -317,6 +341,7 @@ class views_plugin_pager_full extends views_plugin_pager {
 
   function exposed_form_alter(&$form, &$form_state) {
     if ($this->items_per_page_exposed()) {
+      $this->get_exposed_input();
       $options = explode(',', $this->options['expose']['items_per_page_options']);
       $sanitized_options = array();
       if (is_array($options)) {
@@ -336,6 +361,7 @@ class views_plugin_pager_full extends views_plugin_pager {
     }
 
     if ($this->offset_exposed()) {
+      $this->get_exposed_input();
       $form['offset'] = array(
         '#type' => 'textfield',
         '#size' => 10,
@@ -353,4 +379,64 @@ class views_plugin_pager_full extends views_plugin_pager {
       }
     }
   }
+
+  function exposed_form_submit(&$form, &$form_state, &$exclude) {
+    $this->store_exposed_input($form_state);
+  }
+
+  /**
+   * Check to see if input from the exposed pager should change
+   * the behavior of this pager.
+   */
+  function get_exposed_input() {
+    if (empty($this->options['expose']['offset_remember']) && empty($this->options['expose']['items_per_page_remember'])) {
+      return FALSE;
+    }
+
+    $display_id = $this->view->current_display;
+
+    if (!isset($_SESSION['views'][$this->view->name][$display_id])) {
+      $_SESSION['views'][$this->view->name][$display_id] = array();
+    }
+
+    $session = &$_SESSION['views'][$this->view->name][$display_id];
+
+    if (!empty($session['expose']['items_per_page'])) {
+      if ($session['expose']['items_per_page'] == 'All') {
+        $this->options['items_per_page'] = 0;
+      }
+      else {
+        $this->options['items_per_page'] = $session['expose']['items_per_page'];
+      }
+    }
+    if (!empty($session['expose']['offset'])) {
+      $this->options['offset'] = $session['expose']['offset'];
+    }
+    return TRUE;
+  }
+
+  /**
+   * Saves input from the exposed pager to the session that will
+   * change the behavior of this pager.
+   */
+  function store_exposed_input($form_state) {
+    if (empty($this->options['expose']['offset_remember']) && empty($this->options['expose']['items_per_page_remember'])) {
+      return;
+    }
+
+    $display_id = $this->view->current_display;
+
+    if (!isset($_SESSION['views'][$this->view->name][$display_id])) {
+      $_SESSION['views'][$this->view->name][$display_id] = array();
+    }
+
+    $session = &$_SESSION['views'][$this->view->name][$display_id];
+
+    if ($this->items_per_page_exposed()) {
+      $session['expose']['items_per_page'] = $form_state['values']['items_per_page'];
+    }
+    if ($this->offset_exposed()) {
+      $session['expose']['offset'] = $form_state['values']['offset'];
+    }
+  }
 }
-- 
1.7.5.4

