/**
 * @param string $principalUri
 * @return int|null
 */
function dav_compat_principal2uid($principalUri = "")
{
    if (strlen($principalUri) == 0) {
        return null;
    }
    if ($principalUri[0] == "/") {
        $principalUri = substr($principalUri, 1);
    }
    if (strpos($principalUri, "principals/users/") !== 0) {
        return null;
    }
    $username = substr($principalUri, strlen("principals/users/"));
    return dav_compat_username2id($username);
}
 /**
  * Returns a list of calendars for a principal.
  *
  * Every project is an array with the following keys:
  *  * id, a unique id that will be used by other functions to modify the
  *    calendar. This can be the same as the uri or a database key.
  *  * uri, which the basename of the uri with which the calendar is
  *    accessed.
  *  * principaluri. The owner of the calendar. Almost always the same as
  *    principalUri passed to this method.
  *
  * Furthermore it can contain webdav properties in clark notation. A very
  * common one is '{DAV:}displayname'.
  *
  * @param string $principalUri
  * @return array
  */
 public function getCalendarsForUser($principalUri)
 {
     list(, $name) = Sabre_DAV_URLUtil::splitPath($principalUri);
     $user_id = dav_compat_username2id($name);
     $cals = q("SELECT * FROM %s%scalendars WHERE `uid`=%d AND `namespace` = %d", CALDAV_SQL_DB, CALDAV_SQL_PREFIX, $user_id, $this->getNamespace());
     $ret = array();
     foreach ($cals as $cal) {
         $dat = array("id" => $cal["namespace"] . "-" . $cal["namespace_id"], "uri" => $this->getCalUrlPrefix() . "-" . $cal["namespace_id"], "principaluri" => $principalUri, '{' . Sabre_CalDAV_Plugin::NS_CALENDARSERVER . '}getctag' => $cal['ctag'] ? $cal['ctag'] : '0', "calendar_class" => "Sabre_CalDAV_Calendar");
         foreach ($this->propertyMap as $key => $field) {
             $dat[$key] = $cal[$field];
         }
         $ret[] = $dat;
     }
     return $ret;
 }
/**
 * @param string $principalUri
 * @return array|null
 */
function dav_compat_principal2namespace($principalUri = "")
{
    if (strlen($principalUri) == 0) {
        return null;
    }
    if ($principalUri[0] == "/") {
        $principalUri = substr($principalUri, 1);
    }
    if (strpos($principalUri, "principals/users/") !== 0) {
        return null;
    }
    $username = substr($principalUri, strlen("principals/users/"));
    return array("namespace" => CALDAV_NAMESPACE_PRIVATE, "namespace_id" => dav_compat_username2id($username));
}