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