Commit 7c8bbb43 authored by Sebastian Kummer's avatar Sebastian Kummer

Merge pull request #694 in ZP/z-push from...

Merge pull request #694 in ZP/z-push from bugfix/ZP-1410-imap-backend-to-provide-user-details-for-caldav to develop

* commit '5ed1579f':
  ZP-1410 Dot at the end of sentences. Released under the Affero GNU General Public License (AGPL) version 3.
  ZP-1410 IMAP backend to provide user details for CalDAV backend. Released under the Affero GNU General Public License (AGPL) version 3.
parents fa445665 5ed1579f
......@@ -797,10 +797,18 @@ class BackendCalDAV extends BackendDiff {
}
}
// Workaround #127 - No organizeremail defined
if (!isset($message->organizeremail)) {
ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendCalDAV->_ParseVEventToSyncObject(): No organizeremail defined, using username"));
$message->organizeremail = $this->originalUsername;
if ($message->meetingstatus > 0) {
// No organizer was set for the meeting, assume it is the user
if (!isset($message->organizeremail)) {
ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendCalDAV->_ParseVEventToSyncObject(): No organizeremail defined, using user details"));
$userDetails = ZPush::GetBackend()->GetCurrentUsername();
$message->organizeremail = $userDetails['emailaddress'];
$message->organizername = $userDetails['fullname'];
}
// Ensure the organizer name is set
if (!isset($message->organizername)) {
$message->organizername = Utils::GetLocalPartFromEmail($message->organizeremail);
}
}
$valarm = current($event->GetComponents("VALARM"));
......@@ -1108,8 +1116,8 @@ class BackendCalDAV extends BackendDiff {
}
else {
//Some phones doesn't send the organizeremail, so we gotto get it somewhere else.
//Lets use the login here ($username)
$vevent->AddProperty("ORGANIZER", sprintf("MAILTO:%s", $data->originalUsername));
$userDetails = ZPush::GetBackend()->GetCurrentUsername();
$vevent->AddProperty("ORGANIZER", sprintf("MAILTO:%s", $userDetails['emailaddress']), array("CN" => $userDetails['fullname']));
}
if (isset($data->attendees) && is_array($data->attendees)) {
foreach ($data->attendees as $att) {
......
......@@ -666,4 +666,22 @@ class BackendCombined extends Backend implements ISearchProvider {
return false;
}
/**
* Returns the email address and the display name of the user. Used by autodiscover and caldav.
*
* @param string $username The username
*
* @access public
* @return Array
*/
public function GetUserDetails($username) {
// Find a backend that can provide the information
foreach ($this->backends as $backend) {
if (method_exists($backend, "GetUserDetails")) {
return $backend->GetUserDetails($username);
}
}
return parent::GetUserDetails($username);
}
}
......@@ -139,6 +139,7 @@ define('IMAP_FROM_SQL_PASSWORD', '');
define('IMAP_FROM_SQL_OPTIONS', serialize(array(PDO::ATTR_PERSISTENT => true)));
define('IMAP_FROM_SQL_QUERY', "select first_name, last_name, mail_address from users where mail_address = '#username@#domain'");
define('IMAP_FROM_SQL_FIELDS', serialize(array('first_name', 'last_name', 'mail_address')));
define('IMAP_FROM_SQL_EMAIL', '#mail_address');
define('IMAP_FROM_SQL_FROM', '#first_name #last_name <#mail_address>');
define('IMAP_FROM_SQL_FULLNAME', '#first_name #last_name');
......@@ -156,6 +157,7 @@ define('IMAP_FROM_LDAP_PASSWORD', 'password');
define('IMAP_FROM_LDAP_BASE', 'dc=zpush,dc=org');
define('IMAP_FROM_LDAP_QUERY', '(mail=#username@#domain)');
define('IMAP_FROM_LDAP_FIELDS', serialize(array('givenname', 'sn', 'mail')));
define('IMAP_FROM_LDAP_EMAIL', '#mail');
define('IMAP_FROM_LDAP_FROM', '#givenname #sn <#mail>');
define('IMAP_FROM_LDAP_FULLNAME', '#givenname #sn');
......
......@@ -1760,10 +1760,9 @@ class BackendIMAP extends BackendDiff implements ISearchProvider {
* @return Array
*/
public function GetUserDetails($username) {
// If the username it's not the email address, here we will have an error. We try creating a valid address
$email = $username;
if (strpos($username, "@") === false && strlen($this->domain) > 0) {
$email .= "@" . $this->domain;
if (!USE_FULLEMAIL_FOR_LOGIN) {
$email = getDefaultEmailValue($username, $this->domain);
}
return array('emailaddress' => $email, 'fullname' => getDefaultFullNameValue($username, $this->domain));
}
......
......@@ -23,6 +23,40 @@
* Consult LICENSE file for details
************************************************/
/**
* Returns the default email address.
*
* @return string
*/
function getDefaultEmailValue($username, $domain) {
$v = "";
if (defined('IMAP_DEFAULTFROM')) {
switch (IMAP_DEFAULTFROM) {
case 'username':
$v = $username;
break;
case 'domain':
$v = $domain;
break;
case 'ldap':
$v = getIdentityFromLdap($username, $domain, IMAP_FROM_LDAP_EMAIL, false);
break;
case 'sql':
$v = getIdentityFromSql($username, $domain, IMAP_FROM_SQL_EMAIL, false);
break;
case 'passwd':
$v = getIdentityFromPasswd($username, $domain, 'EMAIL', false);
break;
default:
$v = $username . IMAP_DEFAULTFROM;
break;
}
}
return $v;
}
/**
* Returns the default value for "From"
*
......@@ -206,15 +240,15 @@ function getIdentityFromPasswd($username, $domain, $identity, $encode = true) {
$tmp = $local_user['gecos'];
$tmp = explode(',', $tmp);
$name = $tmp[0];
$email = $tmp[1];
unset($tmp);
switch ($identity) {
case 'EMAIL':
$ret_value = sprintf("%s", $email);
break;
case 'FROM':
if (strlen($domain) > 0) {
$ret_value = sprintf("%s <%s@%s>", $name, $username, $domain);
} else {
ZLog::Write(LOGLEVEL_WARN, sprintf("BackendIMAP->getIdentityFromPasswd() - No domain passed. Cannot construct From address."));
}
$ret_value = sprintf("%s <%s>", $name, $email);
break;
case 'FULLNAME':
$ret_value = sprintf("%s", $name);
......@@ -245,4 +279,4 @@ function encodeFrom($from) {
$items = explode("<", $from);
$name = trim($items[0]);
return "=?UTF-8?B?" . base64_encode($name) . "?= <" . $items[1];
}
\ No newline at end of file
}
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