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 { ...@@ -797,10 +797,18 @@ class BackendCalDAV extends BackendDiff {
} }
} }
// Workaround #127 - No organizeremail defined if ($message->meetingstatus > 0) {
// No organizer was set for the meeting, assume it is the user
if (!isset($message->organizeremail)) { if (!isset($message->organizeremail)) {
ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendCalDAV->_ParseVEventToSyncObject(): No organizeremail defined, using username")); ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendCalDAV->_ParseVEventToSyncObject(): No organizeremail defined, using user details"));
$message->organizeremail = $this->originalUsername; $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")); $valarm = current($event->GetComponents("VALARM"));
...@@ -1108,8 +1116,8 @@ class BackendCalDAV extends BackendDiff { ...@@ -1108,8 +1116,8 @@ class BackendCalDAV extends BackendDiff {
} }
else { else {
//Some phones doesn't send the organizeremail, so we gotto get it somewhere else. //Some phones doesn't send the organizeremail, so we gotto get it somewhere else.
//Lets use the login here ($username) $userDetails = ZPush::GetBackend()->GetCurrentUsername();
$vevent->AddProperty("ORGANIZER", sprintf("MAILTO:%s", $data->originalUsername)); $vevent->AddProperty("ORGANIZER", sprintf("MAILTO:%s", $userDetails['emailaddress']), array("CN" => $userDetails['fullname']));
} }
if (isset($data->attendees) && is_array($data->attendees)) { if (isset($data->attendees) && is_array($data->attendees)) {
foreach ($data->attendees as $att) { foreach ($data->attendees as $att) {
......
...@@ -666,4 +666,22 @@ class BackendCombined extends Backend implements ISearchProvider { ...@@ -666,4 +666,22 @@ class BackendCombined extends Backend implements ISearchProvider {
return false; 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', ''); ...@@ -139,6 +139,7 @@ define('IMAP_FROM_SQL_PASSWORD', '');
define('IMAP_FROM_SQL_OPTIONS', serialize(array(PDO::ATTR_PERSISTENT => true))); 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_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_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_FROM', '#first_name #last_name <#mail_address>');
define('IMAP_FROM_SQL_FULLNAME', '#first_name #last_name'); define('IMAP_FROM_SQL_FULLNAME', '#first_name #last_name');
...@@ -156,6 +157,7 @@ define('IMAP_FROM_LDAP_PASSWORD', 'password'); ...@@ -156,6 +157,7 @@ define('IMAP_FROM_LDAP_PASSWORD', 'password');
define('IMAP_FROM_LDAP_BASE', 'dc=zpush,dc=org'); define('IMAP_FROM_LDAP_BASE', 'dc=zpush,dc=org');
define('IMAP_FROM_LDAP_QUERY', '(mail=#username@#domain)'); define('IMAP_FROM_LDAP_QUERY', '(mail=#username@#domain)');
define('IMAP_FROM_LDAP_FIELDS', serialize(array('givenname', 'sn', 'mail'))); 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_FROM', '#givenname #sn <#mail>');
define('IMAP_FROM_LDAP_FULLNAME', '#givenname #sn'); define('IMAP_FROM_LDAP_FULLNAME', '#givenname #sn');
......
...@@ -1760,10 +1760,9 @@ class BackendIMAP extends BackendDiff implements ISearchProvider { ...@@ -1760,10 +1760,9 @@ class BackendIMAP extends BackendDiff implements ISearchProvider {
* @return Array * @return Array
*/ */
public function GetUserDetails($username) { 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; $email = $username;
if (strpos($username, "@") === false && strlen($this->domain) > 0) { if (!USE_FULLEMAIL_FOR_LOGIN) {
$email .= "@" . $this->domain; $email = getDefaultEmailValue($username, $this->domain);
} }
return array('emailaddress' => $email, 'fullname' => getDefaultFullNameValue($username, $this->domain)); return array('emailaddress' => $email, 'fullname' => getDefaultFullNameValue($username, $this->domain));
} }
......
...@@ -23,6 +23,40 @@ ...@@ -23,6 +23,40 @@
* Consult LICENSE file for details * 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" * Returns the default value for "From"
* *
...@@ -206,15 +240,15 @@ function getIdentityFromPasswd($username, $domain, $identity, $encode = true) { ...@@ -206,15 +240,15 @@ function getIdentityFromPasswd($username, $domain, $identity, $encode = true) {
$tmp = $local_user['gecos']; $tmp = $local_user['gecos'];
$tmp = explode(',', $tmp); $tmp = explode(',', $tmp);
$name = $tmp[0]; $name = $tmp[0];
$email = $tmp[1];
unset($tmp); unset($tmp);
switch ($identity) { switch ($identity) {
case 'EMAIL':
$ret_value = sprintf("%s", $email);
break;
case 'FROM': case 'FROM':
if (strlen($domain) > 0) { $ret_value = sprintf("%s <%s>", $name, $email);
$ret_value = sprintf("%s <%s@%s>", $name, $username, $domain);
} else {
ZLog::Write(LOGLEVEL_WARN, sprintf("BackendIMAP->getIdentityFromPasswd() - No domain passed. Cannot construct From address."));
}
break; break;
case 'FULLNAME': case 'FULLNAME':
$ret_value = sprintf("%s", $name); $ret_value = sprintf("%s", $name);
......
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