Commit cf187c98 authored by mku's avatar mku

ZP-49 #comment take range into account, output searchrange and searchtotal in...

ZP-49 #comment take range into account, output searchrange and searchtotal in mailbox search as well #time 4h

git-svn-id: https://z-push.org/svn/z-push/trunk@1313 b7dd7b3b-3a3c-0410-9da9-bee62a6cc5b5
parent 760da342
......@@ -1135,7 +1135,7 @@ class BackendZarafa implements IBackend, ISearchProvider {
*/
public function GetMailboxSearchResults($cpo) {
$searchFolder = $this->getSearchFolder();
$searchRestriction = $this->getSearchRestriction($cpo->GetSearchFreeText());
$searchRestriction = $this->getSearchRestriction($cpo);
$searchRange = explode('-', $cpo->GetSearchRange());
$searchFolderId = $cpo->GetSearchFolderid();
$searchFolders = array();
......@@ -1175,6 +1175,7 @@ class BackendZarafa implements IBackend, ISearchProvider {
$cnt = count($rows);
$items['searchtotal'] = $cnt;
$items["range"] = $cpo->GetSearchRange();
for ($i = 0; $i < $cnt; $i++) {
$items[$i]['class'] = 'Email';
$items[$i]['longid'] = bin2hex($rows[$i][PR_PARENT_SOURCE_KEY]) . ":" . bin2hex($rows[$i][PR_SOURCE_KEY]);
......@@ -1578,10 +1579,14 @@ class BackendZarafa implements IBackend, ISearchProvider {
/**
* Creates a search restriction
*
* @param string $searchText
* @param ContentParameter $cpo
* @return array
*/
private function getSearchRestriction($searchText) {
private function getSearchRestriction($cpo) {
$searchText = $cpo->GetSearchFreeText();
$searchGreater = $cpo->GetSearchValueGreater();
$searchLess = $cpo->GetSearchValueLess();
// only search emails
$mapiquery =
// array (RES_AND,
......@@ -1647,6 +1652,28 @@ class BackendZarafa implements IBackend, ISearchProvider {
// ) // RES_OR
);// RES_AND
if (isset($searchGreater)) {
$mapiquery = array(RES_AND,
array($mapiquery,
array (RES_AND,
array(
array(RES_EXIST, array(ULPROPTAG => PR_MESSAGE_DELIVERY_TIME)),
array(RES_PROPERTY, array(RELOP => RELOP_GE, ULPROPTAG => PR_MESSAGE_DELIVERY_TIME, VALUE => array(PR_MESSAGE_DELIVERY_TIME => strtotime($searchGreater)))),
)
) // RES_AND
));
}
if (isset($searchLess)) {
$mapiquery = array(RES_AND,
array($mapiquery,
array (RES_AND,
array(
array(RES_EXIST, array(ULPROPTAG => PR_MESSAGE_DELIVERY_TIME)),
array(RES_PROPERTY, array(RELOP => RELOP_LE, ULPROPTAG => PR_MESSAGE_DELIVERY_TIME, VALUE => array(PR_MESSAGE_DELIVERY_TIME => strtotime($searchLess)))),
)
) // RES_AND
));
}
return $mapiquery;
}
}
......
......@@ -301,12 +301,16 @@ class Search extends RequestProcessor {
self::$encoder->content($storestatus);
self::$encoder->endTag();
if (isset($rows['range'])) {
$searchrange = $rows['range'];
unset($rows['range']);
}
if (isset($rows['searchtotal'])) {
$searchtotal = $rows['searchtotal'];
unset($rows['searchtotal']);
}
if ($searchname == ISearchProvider::SEARCH_GAL) {
if (is_array($rows) && !empty($rows)) {
$searchrange = $rows['range'];
unset($rows['range']);
$searchtotal = $rows['searchtotal'];
unset($rows['searchtotal']);
foreach ($rows as $u) {
self::$encoder->startTag(SYNC_SEARCH_RESULT);
self::$encoder->startTag(SYNC_SEARCH_PROPERTIES);
......@@ -373,20 +377,9 @@ class Search extends RequestProcessor {
self::$encoder->endTag();//result
self::$encoder->endTag();//properties
}
if ($searchtotal > 0) {
self::$encoder->startTag(SYNC_SEARCH_RANGE);
self::$encoder->content($searchrange);
self::$encoder->endTag();
self::$encoder->startTag(SYNC_SEARCH_TOTAL);
self::$encoder->content($searchtotal);
self::$encoder->endTag();
}
}
}
elseif ($searchname == ISearchProvider::SEARCH_MAILBOX) {
unset($rows['searchtotal']);
foreach ($rows as $u) {
self::$encoder->startTag(SYNC_SEARCH_RESULT);
self::$encoder->startTag(SYNC_FOLDERTYPE);
......@@ -407,8 +400,18 @@ class Search extends RequestProcessor {
self::$encoder->endTag();//result
self::$encoder->endTag();//properties
}
// ZLog::Write(LOGLEVEL_DEBUG, "results for $searchname ".print_r($rows, 1));
}
// it seems that android 4 requires range and searchtotal
// or it won't display the search results
if (isset($searchrange)) {
self::$encoder->startTag(SYNC_SEARCH_RANGE);
self::$encoder->content($searchrange);
self::$encoder->endTag();
}
if (isset($searchtotal) && $searchtotal > 0) {
self::$encoder->startTag(SYNC_SEARCH_TOTAL);
self::$encoder->content($searchtotal);
self::$encoder->endTag();
}
self::$encoder->endTag();//store
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment