Ticket #1483883: search-pattch

File search-pattch, 5.1 kB (added by the_glu, 10 months ago)
Line 
1diff -NaurbwB base-trunk-no-svn/roundcubemail/program/js/app.js trunk-tmp/roundcubemail/program/js/app.js
2--- base-trunk-no-svn/roundcubemail/program/js/app.js   2008-01-28 17:39:29.926197912 +0100
3+++ trunk-tmp/roundcubemail/program/js/app.js   2008-01-29 20:15:08.120381079 +0100
4@@ -150,6 +150,11 @@
5         // enable mail commands
6         this.enable_command('list', 'checkmail', 'compose', 'add-contact', 'search', 'reset-search', true);
7         
8+        if (this.env.search_text != null && document.getElementById('quicksearchbox') != null)
9+          {
10+            document.getElementById('quicksearchbox').value = this.env.search_text;
11+          }
12+
13         if (this.env.action=='show' || this.env.action=='preview')
14           {
15           this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'delete', 'viewsource', 'print', 'load-attachment', true);
16@@ -497,7 +503,7 @@
17       case 'list':
18         if (this.task=='mail')
19           {
20-          if (this.env.search_request<0 || (this.env.search_request && props != this.env.mailbox))
21+          if (this.env.search_request<0 || ( props != '' && (this.env.search_request && props != this.env.mailbox)))
22             this.reset_qsearch();
23 
24           this.list_mailbox(props);
25@@ -1199,6 +1205,10 @@
26     if (safe)
27       add_url = '&_safe=1';
28 
29+     // also send search request to get the right messages
30+    if (this.env.search_request)
31+      add_url += '&_search='+this.env.search_request;
32+
33     if (id)
34       {
35       var url = '&_action='+action+'&_uid='+id+'&_mbox='+urlencode(this.env.mailbox)+add_url;
36diff -NaurbwB base-trunk-no-svn/roundcubemail/program/steps/mail/func.inc trunk-tmp/roundcubemail/program/steps/mail/func.inc
37--- base-trunk-no-svn/roundcubemail/program/steps/mail/func.inc 2008-01-28 17:39:30.319530170 +0100
38+++ trunk-tmp/roundcubemail/program/steps/mail/func.inc 2008-01-29 20:15:08.993713617 +0100
39@@ -48,7 +48,12 @@
40 
41 // set message set for search result
42 if (!empty($_REQUEST['_search']) && isset($_SESSION['search'][$_REQUEST['_search']]))
43+  {
44   $IMAP->set_search_set($_SESSION['search'][$_REQUEST['_search']]);
45+    // set message set for search result
46+    $OUTPUT->set_env('search_request', $_REQUEST['_search']);
47+    $OUTPUT->set_env('search_text', $_SESSION['last_text_search']);
48+ }
49 
50 
51 // define url for getting message parts
52diff -NaurbwB base-trunk-no-svn/roundcubemail/program/steps/mail/search.inc trunk-tmp/roundcubemail/program/steps/mail/search.inc
53--- base-trunk-no-svn/roundcubemail/program/steps/mail/search.inc       2008-01-28 17:39:30.332897781 +0100
54+++ trunk-tmp/roundcubemail/program/steps/mail/search.inc       2008-01-29 20:15:08.993713617 +0100
55@@ -89,6 +89,7 @@
56   if ($result_h != NULL)
57   {
58     $_SESSION['search'][$search_request] = $IMAP->get_search_set();
59+    $_SESSION['last_text_search'] = $str;
60     rcmail_js_message_list($result_h);
61     $OUTPUT->show_message('searchsuccessful', 'confirmation', array('nr' => $count));
62   }
63diff -NaurbwB base-trunk-no-svn/roundcubemail/program/steps/mail/show.inc trunk-tmp/roundcubemail/program/steps/mail/show.inc
64--- base-trunk-no-svn/roundcubemail/program/steps/mail/show.inc 2008-01-28 17:39:30.312862946 +0100
65+++ trunk-tmp/roundcubemail/program/steps/mail/show.inc 2008-01-29 20:15:08.993713617 +0100
66@@ -80,10 +82,17 @@
67     $OUTPUT->set_env('mdn_request', true);
68   }
69 
70-  $next = $prev = -1;
71+    // set message set for search result
72+    if (!empty($_REQUEST['_search']) && isset($_SESSION['search'][$_REQUEST['_search']]))
73+    {
74+        $IMAP->set_search_set($_SESSION['search'][$_REQUEST['_search']]);
75+        $OUTPUT->set_env('search_request', $_REQUEST['_search']);
76+    }
77+
78+  $next = $prev = $first = $last = -1;
79   // get previous, first, next and last message UID
80-  if (!($_SESSION['sort_col'] == 'date' && $_SESSION['sort_order'] == 'DESC') &&
81-      $IMAP->get_capability('sort'))
82+  if ((!($_SESSION['sort_col'] == 'date' && $_SESSION['sort_order'] == 'DESC') &&
83+      $IMAP->get_capability('sort') ) && !(!empty($_REQUEST['_search']) && isset($_SESSION['search'][$_REQUEST['_search']])) )
84     {
85     // Only if we use custom sorting
86     $a_msg_index = $IMAP->message_index(NULL, $_SESSION['sort_col'], $_SESSION['sort_order']);
87@@ -94,6 +104,31 @@
88     $next = isset($a_msg_index[$MESSAGE['index']+1]) ? $a_msg_index[$MESSAGE['index']+1] : -1 ;
89     $last = count($a_msg_index)>0 ? $a_msg_index[count($a_msg_index)-1] : -1;
90     }
91+  elseif (!empty($_REQUEST['_search']) && isset($_SESSION['search'][$_REQUEST['_search']]))
92+  {
93+    $search_data = $_SESSION['search'][$_REQUEST['_search']];
94+
95+    $result = $IMAP->search(NULL, $search_data[0], $search_data[1],$search_data[3]);
96+
97+    $result = array_reverse($result);
98+
99+    foreach ($result as $key=>$rid)
100+    {
101+        $result[$key] = $IMAP->get_uid($rid);
102+
103+        if ($MESSAGE['UID'] == $result[$key])
104+            $seq = $key;
105+
106+    }
107+
108+    $prev = isset($result[$seq-1]) ? $result[$seq-1] : -1 ;
109+    $first = count($result)>0 ? $result[0] : -1;
110+    $next = isset($result[$seq+1]) ? $result[$seq+1] : -1 ;
111+    $last = count($result)>0 ? $result[count($result)-1] : -1;
112+
113+    $MESSAGE['index'] = $seq;
114+
115+  }
116   else
117     {
118     // this assumes that we are sorted by date_DESC