/**
  * @static
  * @return Sabre_DAV_Auth_Backend_Std
  */
 public static function &getInstance()
 {
     if (is_null(self::$intstance)) {
         self::$intstance = new Sabre_DAV_Auth_Backend_Std();
     }
     return self::$intstance;
 }
 /**
  * @static
  * @return Sabre_DAVACL_IPrincipalBackend
  */
 public static function &getInstance()
 {
     if (is_null(self::$intstance)) {
         $authBackend = Sabre_DAV_Auth_Backend_Std::getInstance();
         self::$intstance = new Sabre_DAVACL_PrincipalBackend_Std($authBackend);
     }
     return self::$intstance;
 }
/**
 * @param bool $force_authentication
 * @param bool $needs_caldav
 * @param bool $needs_carddav
 * @return Sabre_DAV_Server
 */
function dav_create_server($force_authentication = false, $needs_caldav = true, $needs_carddav = true)
{
    $arr = array(new Sabre_DAV_SimpleCollection('principals', array(new Sabre_CalDAV_Principal_Collection(Sabre_DAVACL_PrincipalBackend_Std::getInstance(), "principals/users"))));
    if ($needs_caldav) {
        $arr[] = dav_createRootCalendarNode();
    }
    if ($needs_carddav) {
        $arr[] = dav_createRootContactsNode();
    }
    $tree = new Sabre_DAV_SimpleCollection('root', $arr);
    // The object tree needs in turn to be passed to the server class
    $server = new Sabre_DAV_Server($tree);
    if (CALDAV_URL_PREFIX != "") {
        $server->setBaseUri(CALDAV_URL_PREFIX);
    }
    $authPlugin = new Sabre_DAV_Auth_Plugin(Sabre_DAV_Auth_Backend_Std::getInstance(), DAV_APPNAME);
    $server->addPlugin($authPlugin);
    if ($needs_caldav) {
        $caldavPlugin = new Sabre_CalDAV_Plugin();
        $server->addPlugin($caldavPlugin);
    }
    if ($needs_carddav) {
        $carddavPlugin = new Sabre_CardDAV_Plugin();
        $server->addPlugin($carddavPlugin);
    }
    if ($GLOBALS["CALDAV_ACL_PLUGIN_CLASS"] != "") {
        $aclPlugin = new $GLOBALS["CALDAV_ACL_PLUGIN_CLASS"]();
        $aclPlugin->defaultUsernamePath = "principals/users";
        $server->addPlugin($aclPlugin);
    } else {
        $aclPlugin = new Sabre_DAVACL_Plugin();
        $aclPlugin->defaultUsernamePath = "principals/users";
        $server->addPlugin($aclPlugin);
    }
    if ($force_authentication) {
        $server->broadcastEvent('beforeMethod', array("GET", "/"));
    }
    // Make it authenticate
    return $server;
}