Hi,
I'm trying to do a search with only the framework framework. I has been trying to separate the component so they can be used on another framework, I'm using it now in Symonfony2 but planing to use in another ones.
So far I identified the class *rcube_imap_search* that will do the search.
I created a helper with static methods that I'm rewriting to not use globals.
On the file RouncubeHelper I create a connection to the IMAP server. My problem is that when I try to do the actual search with the method *search* it always come empty.
What I'm missing? If I'm using only one folder is a good practice to call to:
*$searchRcube = new \rcube_imap_search(array('skip_deleted' => true), $this->rcube->get_storage()->conn);$data = $searchRcube->exec(array($folder), $criteria, null, 'date');*
Like that?
Regards and thank in advance for any help.
On Tue, Apr 14, 2015 at 9:45 PM, Rodrigo Santellan rsantellan@gmail.com wrote:
Hi,
Hello Rodrigo
I'm trying to do a search with only the framework framework. I has been trying to separate the component so they can be used on another framework, I'm using it now in Symonfony2 but planing to use in another ones.
So far I identified the class rcube_imap_search that will do the search.
Please note that this class is only a helper class for internal use.
I created a helper with static methods that I'm rewriting to not use globals.
On the file RouncubeHelper I create a connection to the IMAP server. My problem is that when I try to do the actual search with the method search it always come empty.
What I'm missing? If I'm using only one folder is a good practice to call to: $searchRcube = new \rcube_imap_search(array('skip_deleted' => true), $this->rcube->get_storage()->conn); $data = $searchRcube->exec(array($folder), $criteria, null, 'date');
Like that?
In order to execute a search (or any other IMAP operation), you should use the methods of the rcube_imap instance you get via rcube::get_storage(). For searching that would be rcube_imap::search() [1]. See an example how to execute the search in the Roundcube webmail code [2].
Kind regards, Thomas
[1] https://github.com/roundcube/roundcubemail/blob/master/program/lib/Roundcube... [2] https://github.com/roundcube/roundcubemail/blob/master/program/steps/mail/se...
Thomas,
Now the search is working, but is bringing all the mbox content not only the search. If I run per example 'delivery' on roundcube in my ISP I get 6 result but on my search bring all the stuff.
This is my search method:
{ $searchStringFound = true; $searchString = ''; $aux = $criteria; if(substr_count($criteria, 'FROM:')) { $searchStringFound = false; $searchString = str_replace('FROM ', 'FROM ', str_replace('FROM:', 'FROM ', $criteria)); } if($searchStringFound && substr_count($criteria, 'TEXT:')) { $searchStringFound = false; $searchString = str_replace('TEXT:', 'TEXT ', $criteria); } if($searchStringFound && substr_count($criteria, 'SUBJECT:')) { $searchStringFound = false; $searchString = str_replace('SUBJECT:', 'SUBJECT ', $criteria); } /** *
rcube_imap::get_search_set(): * 0 - searching criteria, string * 1 - search result, rcube_result_index|rcube_result_thread * 2 - searching character set, string * 3 - sorting field, string * 4 - true if sorted, bool */ $folderList = array($folder); $sort_column = 'date'; $result = $this->rcube->get_storage()->search($folderList, $searchString, null, $sort_column); //$searchRcube = new \rcube_imap_search(array('skip_deleted' => true), $this->rcube->get_storage()->conn); //$data = $searchRcube->exec(array($folder), $criteria, null, 'date'); //var_dump($result); $result_h = array(); //$searchRcube->run(); // Get the headers if (!$result->incomplete) { $result_h = $this->rcube->get_storage()->list_messages($folder, 1, $sort_column, $sort_column); } // Make sure we got the headers if (!empty($result_h)) { $count = $this->rcube->get_storage()->count($folder, $this->rcube->get_storage()->get_threading() ? 'THREADS' : 'ALL'); //var_dump($result_h); //var_dump($count); //rcmail_js_message_list($result_h, false); } $a_show_cols = ReceiveHelper::retrieveShowColumns($this->rcube); $data = array(); $multifolder = false; foreach ($result_h as $header) { if (empty($header)) continue; // make message UIDs unique by appending the folder name if ($multifolder) { $header->uid .= '-'.$header->folder; $header->flags['skip_mbox_check'] = true; if ($header->parent_uid) $header->parent_uid .= '-'.$header->folder; } $a_msg_cols = array(); $a_msg_flags = array(); // format each col; similar as in rcmail_message_list() foreach ($a_show_cols as $col) { $col_name = $col;// == 'fromto' ? $smart_col : $col; if($col == 'fromto') { if($folder != 'INBOX'){ $col_name = 'to'; }else{ $col_name = 'from'; } } if (in_array($col_name, array('from', 'to', 'cc', 'replyto'))) { $cont = FormatHelper::rcmail_address_string($this->rcube, $header->$col_name, 3, false, null, $header->charset); } else if ($col == 'subject') { $cont = trim(rcube_mime::decode_header($header->$col, $header->charset)); if (!$cont) $cont = $this->rcube->gettext('nosubject'); $cont = rcube::Q($cont); } else if ($col == 'size') $cont = FormatHelper::show_bytes($this->rcube, $header->$col); else if ($col == 'date'){ $cont = FormatHelper::format_date($this->rcube, $header->date); } else if ($col == 'folder'){ $cont = rcube::Q(rcube_charset::convert($header->folder, 'UTF7-IMAP')); } else { if(isset($header->$col)) { $cont = rcube::Q($header->$col); } else { $cont = ''; } } $a_msg_cols[$col] = $cont; } $a_msg_flags = array_change_key_case(array_map('intval', (array) $header->flags)); if (isset($header->depth)) $a_msg_flags['depth'] = $header->depth; else if (isset($header->has_children)) $roots[] = $header->uid; if (isset($header->parent_uid)) $a_msg_flags['parent_uid'] = $header->parent_uid; if (isset($header->has_children)) $a_msg_flags['has_children'] = $header->has_children; if (isset($header->unread_children)) $a_msg_flags['unread_children'] = $header->unread_children; if (isset($header->others['list-post'])) $a_msg_flags['ml'] = 1; if (isset($header->priority)) $a_msg_flags['prio'] = (int) $header->priority; $a_msg_flags['ctype'] = rcube::Q($header->ctype); $a_msg_flags['mbox'] = $header->folder; $data[] = array( 'data' => $a_msg_cols, 'flags' => $a_msg_flags, 'uid' => $header->uid ); } return array( 'pages' => 0, 'page' => 0, 'exists' => true, 'data' => $data, 'headers' => $a_show_cols, ); return ReceiveHelper::processData($this->rcube, $result_h, $a_show_cols, $folder); //return $result_h; //die; //$this->rcube->get_storage()->set_search_set($search); //return ReceiveHelper::readMessages($this->rcube, $folder, $pager, $quantity); }*
Regards.
Rodrigo
On Fri, Apr 17, 2015 at 5:00 AM, Thomas Bruederli thomas@roundcube.net wrote:
On Tue, Apr 14, 2015 at 9:45 PM, Rodrigo Santellan rsantellan@gmail.com wrote:
Hi,
Hello Rodrigo
I'm trying to do a search with only the framework framework. I has been trying to separate the component so they can be used on another
framework,
I'm using it now in Symonfony2 but planing to use in another ones.
So far I identified the class rcube_imap_search that will do the search.
Please note that this class is only a helper class for internal use.
I created a helper with static methods that I'm rewriting to not use globals.
On the file RouncubeHelper I create a connection to the IMAP server. My problem is that when I try to do the actual search with the method
search it
always come empty.
What I'm missing? If I'm using only one folder is a good practice to call to: $searchRcube = new \rcube_imap_search(array('skip_deleted' => true), $this->rcube->get_storage()->conn); $data = $searchRcube->exec(array($folder), $criteria, null, 'date');
Like that?
In order to execute a search (or any other IMAP operation), you should use the methods of the rcube_imap instance you get via rcube::get_storage(). For searching that would be rcube_imap::search() [1]. See an example how to execute the search in the Roundcube webmail code [2].
Kind regards, Thomas
[1] https://github.com/roundcube/roundcubemail/blob/master/program/lib/Roundcube... [2] https://github.com/roundcube/roundcubemail/blob/master/program/steps/mail/se... _______________________________________________ Roundcube Development discussion mailing list dev@lists.roundcube.net http://lists.roundcube.net/mailman/listinfo/dev
On Mon, Apr 20, 2015 at 4:20 PM, Rodrigo Santellan rsantellan@gmail.com wrote:
Thomas,
Now the search is working, but is bringing all the mbox content not only the search. If I run per example 'delivery' on roundcube in my ISP I get 6 result but on my search bring all the stuff.
This is my search method:
public function search($folder, $criteria, $pager = 1, $quantity = 1000) { [... lots of PHP code ...] }
I'm lacking time and interest in reading through all of your code. However, I suspect you're passing just an empty string to the rcube_imap::search() function at some point.
Enable IMAP debug logging (in Roundcube config set $config['imap_debug'] = true; or with $storage->set_debug(true)) and check what IMAP commands are actually sent to your IMAP server and what's the reply from it. The entire IMAP communication is logged into the 'imap' log file in your Roundcube logs directory.
If that doesn't help, please reduce your code to a simple test case showing that the Roundcube framework doesn't work as expected.
Kind regards, Thomas
On Fri, Apr 17, 2015 at 5:00 AM, Thomas Bruederli thomas@roundcube.net wrote:
On Tue, Apr 14, 2015 at 9:45 PM, Rodrigo Santellan rsantellan@gmail.com wrote:
Hi,
Hello Rodrigo
I'm trying to do a search with only the framework framework. I has been trying to separate the component so they can be used on another framework, I'm using it now in Symonfony2 but planing to use in another ones.
So far I identified the class rcube_imap_search that will do the search.
Please note that this class is only a helper class for internal use.
I created a helper with static methods that I'm rewriting to not use globals.
On the file RouncubeHelper I create a connection to the IMAP server. My problem is that when I try to do the actual search with the method search it always come empty.
What I'm missing? If I'm using only one folder is a good practice to call to: $searchRcube = new \rcube_imap_search(array('skip_deleted' => true), $this->rcube->get_storage()->conn); $data = $searchRcube->exec(array($folder), $criteria, null, 'date');
Like that?
In order to execute a search (or any other IMAP operation), you should use the methods of the rcube_imap instance you get via rcube::get_storage(). For searching that would be rcube_imap::search() [1]. See an example how to execute the search in the Roundcube webmail code [2].
Kind regards, Thomas
[1] https://github.com/roundcube/roundcubemail/blob/master/program/lib/Roundcube... [2] https://github.com/roundcube/roundcubemail/blob/master/program/steps/mail/se... _______________________________________________ Roundcube Development discussion mailing list dev@lists.roundcube.net http://lists.roundcube.net/mailman/listinfo/dev
Roundcube Development discussion mailing list dev@lists.roundcube.net http://lists.roundcube.net/mailman/listinfo/dev