Index: privatemsg.module
===================================================================
RCS file: /cvs/drupal/contributions/modules/privatemsg/privatemsg.module,v
retrieving revision 1.70.2.30.2.91.2.100
diff -u -p -r1.70.2.30.2.91.2.100 privatemsg.module
--- privatemsg.module	23 Nov 2009 19:54:49 -0000	1.70.2.30.2.91.2.100
+++ privatemsg.module	24 Nov 2009 12:55:16 -0000
@@ -299,7 +299,7 @@ function privatemsg_thread_load($thread_
           $limit = (int)$_GET['show'];
         }
         else {
-          $limit = variable_get('privatemsg_view_default_amount', 10);
+          $limit = variable_get('privatemsg_view_max_amount', 20);
         }
       }
       $thread['limit'] = $limit;
@@ -312,10 +312,10 @@ function privatemsg_thread_load($thread_
       if ($thread['message_count'] > $limit) {
         $startwith = $thread['message_count'] - $limit;
       }
-      elseif ($limit > variable_get('privatemsg_view_default_amount', 10) && $limit > $thread['message_count']) {
-        $thread['limit'] = $limit = $thread['message_count'];
+      elseif ($limit > variable_get('privatemsg_view_max_amount', 20) && $limit > $thread['message_count']) {
+        $limit = $thread['message_count'];
       }
-      $conversation = db_query_range($query['query'], $startwith, variable_get('privatemsg_view_max_amount', 50));
+      $conversation = db_query_range($query['query'], $startwith, variable_get('privatemsg_view_max_amount', 20));
       $mids = array();
       while ($result = db_fetch_array($conversation)) {
         $mids[] = $result['mid'];
@@ -441,18 +441,12 @@ function private_message_settings() {
     '#default_value' => variable_get('privatemsg_display_fields', array('participants')),
   );
 
-  $form['privatemsg_listing']['privatemsg_view_default_amount'] = array(
-    '#type'          => 'textfield',
-    '#title'         => t('Number of messages on first thread page'),
-    '#default_value' => variable_get('privatemsg_view_default_amount', 10),
-    '#description'   => t('The number of messages to be displayed on first page. Displays the newest messages.'),
-    '#weight'        => 10,
-  );
-
+  $amounts = drupal_map_assoc(array(3, 5, 10, 20, 50, 100, 1000));
   $form['privatemsg_listing']['privatemsg_view_max_amount'] = array(
-    '#type'          => 'textfield',
-    '#title'         => t('Number of messages on other thread pages'),
-    '#default_value' => variable_get('privatemsg_view_max_amount', 50),
+    '#type'          => 'select',
+    '#title'         => t('Number of messages on thread pages'),
+    '#options'       => $amounts,
+    '#default_value' => variable_get('privatemsg_view_max_amount', 20),
     '#description'   => t('Threads will not show more than this number of messages on a single page.'),
     '#weight'        => 15,
   );
@@ -685,32 +679,37 @@ function privatemsg_view($thread) {
   drupal_set_title(check_plain($thread['subject']));
 
   // Generate paging links.
-  if ($thread['message_count'] > count($thread['messages'])) {
-    $from = $thread['message_count'] - $thread['limit'] + 1;
-    $to = $from - 1 + (($thread['limit'] > variable_get('privatemsg_view_max_amount', 50)) ? variable_get('privatemsg_view_max_amount', 50) : $thread['limit']);
-
-    $previous = '';
-    if ($from > 1) {
-      $options = array(
-        'query' => array('show' => (isset($_GET['show']) ? $_GET['show'] : 0) + variable_get('privatemsg_view_max_amount', 50)),
-        'title' => t('Display older messages'),
-      );
-       $previous = l(t('<<'), 'messages/view/' . $thread['thread_id'], $options);
-    }
-    $newer = '';
-    if ($to < $thread['message_count']) {
-      $options = array(
-        'query' => array('show' => $thread['limit'] - variable_get('privatemsg_view_max_amount', 50)),
-        'title' => t('Display newer messages'),
-      );
-      $newer = l(t('>>'), 'messages/view/' . $thread['thread_id'], $options);
-    }
-
-    $title = t('!previous_link Displaying messages @from - @to of @total !newer_link', array('@from' => $from, '@to' => $to, '@total' => $thread['message_count'], '!previous_link' => $previous, '!newer_link' => $newer));
-    $content['display_all']['#value'] = trim($title);
-    $content['display_all']['#weight'] = -10;
+  $max_amount =  variable_get('privatemsg_view_max_amount', 20);
+  $from = ($thread['message_count'] > $thread['limit']) ? $thread['message_count'] - $thread['limit'] + 1 : 1;
+  $to = $from - 1 + (($thread['limit'] > $max_amount) ? $max_amount : $thread['limit']);
+  if ($to > $thread['message_count']) {
+    $to = $thread['message_count'];
+  }
+  $previous = '';
+  if ($from > 1) {
+    $options = array(
+      'query' => array('show' => $thread['limit'] + $max_amount),
+      'title' => t('Display older messages'),
+    );
+     $previous = l(t('<<'), 'messages/view/' . $thread['thread_id'], $options);
+  }
+  $newer = '';
+  if ($to < $thread['message_count']) {
+    $options = array(
+      'query' => array('show' => $thread['limit'] - $max_amount),
+      'title' => t('Display newer messages'),
+    );
+    $newer = l(t('>>'), 'messages/view/' . $thread['thread_id'], $options);
   }
 
+  $title = t('!previous_link Displaying messages @from - @to of @total !newer_link', array('@from' => $from, '@to' => $to, '@total' => $thread['message_count'], '!previous_link' => $previous, '!newer_link' => $newer));
+  $content['display_all']['#value'] = trim($title);
+  $content['display_all']['#weight'] = -10;
+
+  // Display a copy at the end.
+  $content['display_all_bottom']['#value'] = trim($title);
+  $content['display_all_bottom']['#weight'] = 3;
+
   // Render the participants.
   $content['participants']['#value'] = theme('privatemsg_recipients', $thread);
   $content['participants']['#weight'] = -5;
Index: privatemsg.install
===================================================================
RCS file: /cvs/drupal/contributions/modules/privatemsg/privatemsg.install,v
retrieving revision 1.5.2.4.2.11.2.16
diff -u -p -r1.5.2.4.2.11.2.16 privatemsg.install
--- privatemsg.install	6 Nov 2009 13:06:26 -0000	1.5.2.4.2.11.2.16
+++ privatemsg.install	24 Nov 2009 12:55:16 -0000
@@ -116,6 +116,7 @@ function privatemsg_uninstall() {
   variable_del('privatemsg_per_page');
   variable_del('privatemsg_display_loginmessage');
   variable_del('privatemsg_display_fields');
+  variable_del('privatemsg_view_max_amount');
   drupal_uninstall_schema('privatemsg');
 }
 
Index: privatemsg.test
===================================================================
RCS file: /cvs/drupal/contributions/modules/privatemsg/privatemsg.test,v
retrieving revision 1.2.2.11
diff -u -p -r1.2.2.11 privatemsg.test
--- privatemsg.test	23 Nov 2009 15:09:14 -0000	1.2.2.11
+++ privatemsg.test	24 Nov 2009 12:55:16 -0000
@@ -68,17 +68,16 @@ class PrivatemsgTestCase extends DrupalW
     $author     = $this->drupalCreateUser(array('write privatemsg', 'read privatemsg'));
     $recipient  = $this->drupalCreateUser(array('read privatemsg'));
 
-    // Set lower values so that we don't need to generate 100's of messages.
-    variable_set('privatemsg_view_default_amount', 5);
-    variable_set('privatemsg_view_max_amount', 10);
+    // Set lower value so that we don't need to generate 100's of messages.
+    variable_set('privatemsg_view_max_amount', 5);
 
     $subject = $this->randomName(20);
     $bodies = array();
-    for ($i = 0; $i < 25; $i++) {
+    for ($i = 0; $i < 23; $i++) {
       $bodies[$i] = $this->randomName(100);
     }
     $thread = privatemsg_new_thread(array($recipient), $subject, $bodies[0], array('author' => $author));
-    for ($i = 1; $i < 25; $i++) {
+    for ($i = 1; $i < 23; $i++) {
       privatemsg_reply($thread['message']['thread_id'], $bodies[$i], array('author' => $author));
     }
 
@@ -87,36 +86,37 @@ class PrivatemsgTestCase extends DrupalW
     $this->clickLink($subject);
 
     // Verify that only the last 5 messages are displayed.
-    $this->assertText(t('Displaying messages 21 - 25 of 25'), t('Pager is displayed'));
+    $this->assertText(t('Displaying messages 19 - 23 of 23'), t('Pager is displayed'));
     $this->assertNoText($bodies[0], t('First message is not displayed.'));
-    $this->assertNoText($bodies[19], t('Hidden message is not displayed.'));
-    $this->assertText($bodies[20], t('Message is displayed.'));
-    $this->assertText($bodies[24], t('Message is displayed.'));
+    $this->assertNoText($bodies[17], t('Hidden message is not displayed.'));
+    $this->assertText($bodies[18], t('Message is displayed.'));
+    $this->assertText($bodies[22], t('Message is displayed.'));
 
     // Load older messages and verify again.
     $this->clickLink(t('<<'));
-    $this->assertText(t('Displaying messages 16 - 25 of 25'), t('Pager is displayed'));
+    $this->assertText(t('Displaying messages 14 - 18 of 23'), t('Pager is displayed'));
     $this->assertNoText($bodies[0], t('First message is not displayed.'));
-    $this->assertNoText($bodies[14], t('Hidden message is not displayed.'));
-    $this->assertText($bodies[15], t('Message is displayed.'));
-    $this->assertText($bodies[24], t('Message is displayed.'));
+    $this->assertNoText($bodies[12], t('Hidden message is not displayed.'));
+    $this->assertText($bodies[13], t('Message is displayed.'));
+    $this->assertNoText($bodies[22], t('Hidden message is not displayed.'));
 
     // Load older messages and verify again.
     $this->clickLink(t('<<'));
-    $this->assertText(t('Displaying messages 6 - 15 of 25'), t('Pager is displayed'));
-    $this->assertNoText($bodies[0], t('First message is not displayed.'));
-    $this->assertNoText($bodies[4], t('Hidden message is not displayed.'));
-    $this->assertText($bodies[5], t('Message is displayed.'));
-    $this->assertText($bodies[14], t('Message is displayed.'));
-    $this->assertNoText($bodies[15], t('Hidden message is not displayed.'));
+    $this->clickLink(t('<<'));
+    $this->clickLink(t('<<'));
+
+    $this->assertText(t('Displaying messages 1 - 5 of 23'), t('Pager is displayed'));
+    $this->assertText($bodies[0], t('Message is displayed.'));
+    $this->assertText($bodies[4], t('Message is displayed.'));
+    $this->assertNoText($bodies[5], t('Hidden message is not displayed.'));
 
     // Display newer messages and verify again.
     $this->clickLink(t('>>'));
-    $this->assertText(t('Displaying messages 16 - 25 of 25'), t('Pager is displayed'));
+    $this->assertText(t('Displaying messages 4 - 8 of 23'), t('Pager is displayed'));
     $this->assertNoText($bodies[0], t('First message is not displayed.'));
-    $this->assertNoText($bodies[14], t('Hidden message is not displayed.'));
-    $this->assertText($bodies[15], t('Message is displayed.'));
-    $this->assertText($bodies[24], t('Message is displayed.'));
+    $this->assertText($bodies[3], t('Message is displayed.'));
+    $this->assertText($bodies[7], t('Message is displayed.'));
+    $this->assertNoText($bodies[22], t('Hidden message is not displayed.'));
   }
 
   /**
