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 { ...@@ -1135,7 +1135,7 @@ class BackendZarafa implements IBackend, ISearchProvider {
*/ */
public function GetMailboxSearchResults($cpo) { public function GetMailboxSearchResults($cpo) {
$searchFolder = $this->getSearchFolder(); $searchFolder = $this->getSearchFolder();
$searchRestriction = $this->getSearchRestriction($cpo->GetSearchFreeText()); $searchRestriction = $this->getSearchRestriction($cpo);
$searchRange = explode('-', $cpo->GetSearchRange()); $searchRange = explode('-', $cpo->GetSearchRange());
$searchFolderId = $cpo->GetSearchFolderid(); $searchFolderId = $cpo->GetSearchFolderid();
$searchFolders = array(); $searchFolders = array();
...@@ -1175,6 +1175,7 @@ class BackendZarafa implements IBackend, ISearchProvider { ...@@ -1175,6 +1175,7 @@ class BackendZarafa implements IBackend, ISearchProvider {
$cnt = count($rows); $cnt = count($rows);
$items['searchtotal'] = $cnt; $items['searchtotal'] = $cnt;
$items["range"] = $cpo->GetSearchRange();
for ($i = 0; $i < $cnt; $i++) { for ($i = 0; $i < $cnt; $i++) {
$items[$i]['class'] = 'Email'; $items[$i]['class'] = 'Email';
$items[$i]['longid'] = bin2hex($rows[$i][PR_PARENT_SOURCE_KEY]) . ":" . bin2hex($rows[$i][PR_SOURCE_KEY]); $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 { ...@@ -1578,10 +1579,14 @@ class BackendZarafa implements IBackend, ISearchProvider {
/** /**
* Creates a search restriction * Creates a search restriction
* *
* @param string $searchText * @param ContentParameter $cpo
* @return array * @return array
*/ */
private function getSearchRestriction($searchText) { private function getSearchRestriction($cpo) {
$searchText = $cpo->GetSearchFreeText();
$searchGreater = $cpo->GetSearchValueGreater();
$searchLess = $cpo->GetSearchValueLess();
// only search emails // only search emails
$mapiquery = $mapiquery =
// array (RES_AND, // array (RES_AND,
...@@ -1647,6 +1652,28 @@ class BackendZarafa implements IBackend, ISearchProvider { ...@@ -1647,6 +1652,28 @@ class BackendZarafa implements IBackend, ISearchProvider {
// ) // RES_OR // ) // RES_OR
);// RES_AND );// 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; return $mapiquery;
} }
} }
......
...@@ -301,12 +301,16 @@ class Search extends RequestProcessor { ...@@ -301,12 +301,16 @@ class Search extends RequestProcessor {
self::$encoder->content($storestatus); self::$encoder->content($storestatus);
self::$encoder->endTag(); 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 ($searchname == ISearchProvider::SEARCH_GAL) {
if (is_array($rows) && !empty($rows)) { if (is_array($rows) && !empty($rows)) {
$searchrange = $rows['range'];
unset($rows['range']);
$searchtotal = $rows['searchtotal'];
unset($rows['searchtotal']);
foreach ($rows as $u) { foreach ($rows as $u) {
self::$encoder->startTag(SYNC_SEARCH_RESULT); self::$encoder->startTag(SYNC_SEARCH_RESULT);
self::$encoder->startTag(SYNC_SEARCH_PROPERTIES); self::$encoder->startTag(SYNC_SEARCH_PROPERTIES);
...@@ -373,20 +377,9 @@ class Search extends RequestProcessor { ...@@ -373,20 +377,9 @@ class Search extends RequestProcessor {
self::$encoder->endTag();//result self::$encoder->endTag();//result
self::$encoder->endTag();//properties 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) { elseif ($searchname == ISearchProvider::SEARCH_MAILBOX) {
unset($rows['searchtotal']);
foreach ($rows as $u) { foreach ($rows as $u) {
self::$encoder->startTag(SYNC_SEARCH_RESULT); self::$encoder->startTag(SYNC_SEARCH_RESULT);
self::$encoder->startTag(SYNC_FOLDERTYPE); self::$encoder->startTag(SYNC_FOLDERTYPE);
...@@ -407,8 +400,18 @@ class Search extends RequestProcessor { ...@@ -407,8 +400,18 @@ class Search extends RequestProcessor {
self::$encoder->endTag();//result self::$encoder->endTag();//result
self::$encoder->endTag();//properties 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 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