diff --git a/lib/Horde/Core/ActiveSync/Connector.php b/lib/Horde/Core/ActiveSync/Connector.php index 96e28b17..b393a5b3 100644 --- a/lib/Horde/Core/ActiveSync/Connector.php +++ b/lib/Horde/Core/ActiveSync/Connector.php @@ -539,9 +539,9 @@ public function resolveRecipient($query, array $opts = []) foreach ($sources as $source) { $fields[$source] = ['email']; } - $returnFields = ['name', 'email', 'alias', 'smimePublicKey']; + $returnFields = ['name', 'email', 'alias', 'smimePublicKey', 'source']; if (!empty($opts['pictures'])) { - $returnFields[$source]['photo']; + $returnFields[] = 'photo'; } $options = [ diff --git a/lib/Horde/Core/ActiveSync/Driver.php b/lib/Horde/Core/ActiveSync/Driver.php index 42b3e8dc..3ba6b862 100644 --- a/lib/Horde/Core/ActiveSync/Driver.php +++ b/lib/Horde/Core/ActiveSync/Driver.php @@ -2832,6 +2832,7 @@ public function resolveRecipient($type, $search, array $opts = []) if (count($results) && isset($results[$search])) { $gal = $this->_connector->contacts_getGal(); $picture_count = 0; + $picture = null; foreach ($results[$search] as $result) { if (!empty($opts['pictures'])) { $picture = new Horde_ActiveSync_Message_ResolveRecipientsPicture( @@ -2842,13 +2843,15 @@ public function resolveRecipient($type, $search, array $opts = []) } elseif (!empty($opts['maxpictures']) && $picture_count > $opts['maxpictures']) { $picture->status = Horde_ActiveSync_Status::PICTURE_LIMIT_REACHED; - } elseif (!empty($opts['maxsize']) && - strlen($result['photo']) > $opts['maxsize']) { - $picture->status = Horde_ActiveSync_Status::PICTURE_TOO_LARGE; } else { - $picture->data = $result['photo']['load']['data']; - $picture->status = Horde_ActiveSync_Status::PICTURE_SUCCESS; - ++$picture_count; + $data = $result['photo']['load']['data']; + if (!empty($opts['maxsize']) && strlen($data) > $opts['maxsize']) { + $picture->status = Horde_ActiveSync_Status::PICTURE_TOO_LARGE; + } else { + $picture->data = $data; + $picture->status = Horde_ActiveSync_Status::PICTURE_SUCCESS; + ++$picture_count; + } } } $entry = [ @@ -2856,7 +2859,7 @@ public function resolveRecipient($type, $search, array $opts = []) 'emailaddress' => $result['email'], 'entries' => !empty($result['smimePublicKey']) ? [$this->_mungeCert($result['smimePublicKey'])] : [], 'type' => $result['source'] == $gal ? Horde_ActiveSync::RESOLVE_RESULT_GAL : Horde_ActiveSync::RESOLVE_RESULT_ADDRESSBOOK, - 'picture' => !empty($picture) ? $picture : null, + 'picture' => $picture, ]; $return[] = $entry; } @@ -3697,13 +3700,16 @@ protected function _searchGal(array $query) } elseif (!empty($query[Horde_ActiveSync_Request_Search::SEARCH_MAXPICTURES]) && $picture_count > $query[Horde_ActiveSync_Request_Search::SEARCH_MAXPICTURES]) { $picture->status = Horde_ActiveSync_Status::PICTURE_LIMIT_REACHED; - } elseif (!empty($query[Horde_ActiveSync_Request_Search::SEARCH_MAXSIZE]) && - strlen($row['photo']) > $query[Horde_ActiveSync_Request_Search::SEARCH_MAXSIZE]) { - $picture->status = Horde_ActiveSync_Status::PICTURE_TOO_LARGE; } else { - $picture->data = base64_encode($row['photo']['load']['data']); - $picture->status = Horde_ActiveSync_Status::PICTURE_SUCCESS; - ++$picture_count; + $data = $row['photo']['load']['data']; + if (!empty($query[Horde_ActiveSync_Request_Search::SEARCH_MAXSIZE]) && + strlen($data) > $query[Horde_ActiveSync_Request_Search::SEARCH_MAXSIZE]) { + $picture->status = Horde_ActiveSync_Status::PICTURE_TOO_LARGE; + } else { + $picture->data = base64_encode($data); + $picture->status = Horde_ActiveSync_Status::PICTURE_SUCCESS; + ++$picture_count; + } } $entry[Horde_ActiveSync::GAL_PICTURE] = $picture; }