fix things (indentation, tests, comments, backend custom implementation
This commit is contained in:
parent
ebf23778f5
commit
3921385ed3
12 changed files with 281 additions and 206 deletions
|
@ -46,7 +46,8 @@ $principalBackend = new Principal(
|
|||
'principals/'
|
||||
);
|
||||
$db = \OC::$server->getDatabaseConnection();
|
||||
$calDavBackend = new CalDavBackend($db, $principalBackend, \OC::$server->getUserManager());
|
||||
$config = \OC::$server->getConfig();
|
||||
$calDavBackend = new CalDavBackend($db, $principalBackend, \OC::$server->getUserManager(), $config);
|
||||
|
||||
$debugging = \OC::$server->getConfig()->getSystemValue('debug', false);
|
||||
|
||||
|
|
|
@ -37,8 +37,87 @@ class Application extends App {
|
|||
/**
|
||||
* Application constructor.
|
||||
*/
|
||||
public function __construct() {
|
||||
parent::__construct('dav');
|
||||
public function __construct (array $urlParams=array()) {
|
||||
parent::__construct('dav', $urlParams);
|
||||
|
||||
$container = $this->getContainer();
|
||||
$container->registerService('ContactsManager', function($c) {
|
||||
/** @var IAppContainer $c */
|
||||
return new ContactsManager(
|
||||
$c->query('CardDavBackend')
|
||||
);
|
||||
});
|
||||
|
||||
$container->registerService('HookManager', function($c) {
|
||||
/** @var IAppContainer $c */
|
||||
return new HookManager(
|
||||
$c->getServer()->getUserManager(),
|
||||
$c->query('SyncService'),
|
||||
$c->query('CalDavBackend'),
|
||||
$c->query('CardDavBackend')
|
||||
);
|
||||
});
|
||||
|
||||
$container->registerService('SyncService', function($c) {
|
||||
/** @var IAppContainer $c */
|
||||
return new SyncService(
|
||||
$c->query('CardDavBackend'),
|
||||
$c->getServer()->getUserManager(),
|
||||
$c->getServer()->getLogger()
|
||||
);
|
||||
});
|
||||
|
||||
$container->registerService('CardDavBackend', function($c) {
|
||||
/** @var IAppContainer $c */
|
||||
$db = $c->getServer()->getDatabaseConnection();
|
||||
$dispatcher = $c->getServer()->getEventDispatcher();
|
||||
$principal = new Principal(
|
||||
$c->getServer()->getUserManager(),
|
||||
$c->getServer()->getGroupManager()
|
||||
);
|
||||
return new CardDavBackend($db, $principal, $c->getServer()->getUserManager(), $dispatcher);
|
||||
});
|
||||
|
||||
$container->registerService('CalDavBackend', function($c) {
|
||||
/** @var IAppContainer $c */
|
||||
$db = $c->getServer()->getDatabaseConnection();
|
||||
$config = $c->getServer()->getConfig();
|
||||
$principal = new Principal(
|
||||
$c->getServer()->getUserManager(),
|
||||
$c->getServer()->getGroupManager()
|
||||
);
|
||||
return new CalDavBackend($db, $principal, $c->getServer()->getUserManager(), $config);
|
||||
});
|
||||
|
||||
$container->registerService('BirthdayService', function($c) {
|
||||
/** @var IAppContainer $c */
|
||||
$g = new GroupPrincipalBackend(
|
||||
$c->getServer()->getGroupManager()
|
||||
);
|
||||
return new BirthdayService(
|
||||
$c->query('CalDavBackend'),
|
||||
$c->query('CardDavBackend'),
|
||||
$g
|
||||
);
|
||||
});
|
||||
|
||||
$container->registerService('OCA\DAV\Migration\Classification', function ($c) {
|
||||
/** @var IAppContainer $c */
|
||||
return new Classification(
|
||||
$c->query('CalDavBackend'),
|
||||
$c->getServer()->getUserManager()
|
||||
);
|
||||
});
|
||||
|
||||
$container->registerService('OCA\DAV\Migration\GenerateBirthdays', function ($c) {
|
||||
/** @var IAppContainer $c */
|
||||
/** @var BirthdayService $b */
|
||||
$b = $c->query('BirthdayService');
|
||||
return new GenerateBirthdays(
|
||||
$b,
|
||||
$c->getServer()->getUserManager()
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -29,6 +29,7 @@ use OCA\DAV\DAV\Sharing\IShareable;
|
|||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCA\DAV\Connector\Sabre\Principal;
|
||||
use OCA\DAV\DAV\Sharing\Backend;
|
||||
use OCP\IConfig;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\IUser;
|
||||
use OCP\IUserManager;
|
||||
|
@ -119,7 +120,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
|
|||
/** @var IUserManager */
|
||||
private $userManager;
|
||||
|
||||
/** @var \OCP\IConfig */
|
||||
/** @var IConfig */
|
||||
private $config;
|
||||
|
||||
/**
|
||||
|
@ -128,14 +129,14 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
|
|||
* @param IDBConnection $db
|
||||
* @param Principal $principalBackend
|
||||
* @param IUserManager $userManager
|
||||
* @param IConfig $config
|
||||
*/
|
||||
public function __construct(IDBConnection $db, Principal $principalBackend, IUserManager $userManager) {
|
||||
public function __construct(IDBConnection $db, Principal $principalBackend, IUserManager $userManager, IConfig $config) {
|
||||
$this->db = $db;
|
||||
$this->principalBackend = $principalBackend;
|
||||
$this->userManager = $userManager;
|
||||
$this->sharingBackend = new Backend($this->db, $principalBackend, 'calendar');
|
||||
// TODO: inject
|
||||
$this->config = \OC::$server->getConfig();
|
||||
$this->config = $config;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1533,26 +1534,26 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
|
|||
}
|
||||
|
||||
/**
|
||||
* @param boolean $value
|
||||
* @param \OCA\DAV\CalDAV\Calendar $calendar
|
||||
*/
|
||||
public function setPublishStatus($value, $calendar) {
|
||||
$query = $this->db->getQueryBuilder();
|
||||
if ($value) {
|
||||
$query->insert('dav_shares')
|
||||
->values([
|
||||
'principaluri' => $query->createNamedParameter($calendar->getPrincipalURI()),
|
||||
'type' => $query->createNamedParameter('calendar'),
|
||||
'access' => $query->createNamedParameter(self::ACCESS_PUBLIC),
|
||||
'resourceid' => $query->createNamedParameter($calendar->getResourceId())
|
||||
]);
|
||||
} else {
|
||||
$query->delete('dav_shares')
|
||||
->Where($query->expr()->eq('resourceid', $query->createNamedParameter($calendar->getResourceId())))
|
||||
->andWhere($query->expr()->eq('access', $query->createNamedParameter(self::ACCESS_PUBLIC)));
|
||||
}
|
||||
$query->execute();
|
||||
}
|
||||
* @param boolean $value
|
||||
* @param \OCA\DAV\CalDAV\Calendar $calendar
|
||||
*/
|
||||
public function setPublishStatus($value, $calendar) {
|
||||
$query = $this->db->getQueryBuilder();
|
||||
if ($value) {
|
||||
$query->insert('dav_shares')
|
||||
->values([
|
||||
'principaluri' => $query->createNamedParameter($calendar->getPrincipalURI()),
|
||||
'type' => $query->createNamedParameter('calendar'),
|
||||
'access' => $query->createNamedParameter(self::ACCESS_PUBLIC),
|
||||
'resourceid' => $query->createNamedParameter($calendar->getResourceId())
|
||||
]);
|
||||
} else {
|
||||
$query->delete('dav_shares')
|
||||
->where($query->expr()->eq('resourceid', $query->createNamedParameter($calendar->getResourceId())))
|
||||
->andWhere($query->expr()->eq('access', $query->createNamedParameter(self::ACCESS_PUBLIC)));
|
||||
}
|
||||
$query->execute();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \OCA\DAV\CalDAV\Calendar $calendar
|
||||
|
|
|
@ -21,14 +21,19 @@
|
|||
namespace OCA\DAV\CalDAV;
|
||||
|
||||
use Sabre\DAV\Collection;
|
||||
use Sabre\DAV\Exception\NotFound;
|
||||
|
||||
class PublicCalendarRoot extends Collection {
|
||||
|
||||
/** @var CalDavBackend */
|
||||
protected $caldavBackend;
|
||||
|
||||
/** @var \OCP\IL10N */
|
||||
protected $l10n;
|
||||
|
||||
function __construct(CalDavBackend $caldavBackend) {
|
||||
$this->caldavBackend = $caldavBackend;
|
||||
$this->l10n = \OC::$server->getL10N('dav');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -38,21 +43,28 @@ class PublicCalendarRoot extends Collection {
|
|||
return 'public-calendars';
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
function getChild($name) {
|
||||
// TODO: for performance reason this needs to have a custom implementation
|
||||
return parent::getChild($name);
|
||||
foreach ($this->caldavBackend->getPublicCalendars() as $calendar) {
|
||||
if ($calendar['uri'] === $name) {
|
||||
// TODO: maybe implement a new class PublicCalendar ???
|
||||
return new Calendar($this->caldavBackend, $calendar, $this->l10n);
|
||||
}
|
||||
}
|
||||
throw new NotFound('Node with name \'' . $name . '\' could not be found');
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
function getChildren() {
|
||||
$l10n = \OC::$server->getL10N('dav');
|
||||
$calendars = $this->caldavBackend->getPublicCalendars();
|
||||
$children = [];
|
||||
foreach ($calendars as $calendar) {
|
||||
// TODO: maybe implement a new class PublicCalendar ???
|
||||
$children[] = new Calendar($this->caldavBackend, $calendar, $l10n);
|
||||
$children[] = new Calendar($this->caldavBackend, $calendar, $this->l10n);
|
||||
}
|
||||
|
||||
return $children;
|
||||
|
|
|
@ -16,9 +16,9 @@ use OCP\IConfig;
|
|||
|
||||
class PublishPlugin extends ServerPlugin
|
||||
{
|
||||
const NS_CALENDARSERVER = 'http://calendarserver.org/ns/';
|
||||
const NS_CALENDARSERVER = 'http://calendarserver.org/ns/';
|
||||
|
||||
/**
|
||||
/**
|
||||
* Reference to SabreDAV server object.
|
||||
*
|
||||
* @var \Sabre\DAV\Server
|
||||
|
@ -28,29 +28,30 @@ class PublishPlugin extends ServerPlugin
|
|||
/**
|
||||
* Config instance to get instance secret.
|
||||
*
|
||||
* @var OCP\IConfig
|
||||
* @var IConfig
|
||||
*/
|
||||
protected $config;
|
||||
|
||||
/**
|
||||
* URL Generator for absolute URLs.
|
||||
*
|
||||
* @var OCP\IURLGenerator
|
||||
* @var IURLGenerator
|
||||
*/
|
||||
protected $urlGenerator;
|
||||
|
||||
/**
|
||||
* PublishPlugin constructor.
|
||||
*
|
||||
* @param IURLGenerator $urlGenerator
|
||||
*/
|
||||
/**
|
||||
* PublishPlugin constructor.
|
||||
*
|
||||
* @param IConfig $config
|
||||
* @param IURLGenerator $urlGenerator
|
||||
*/
|
||||
public function __construct(IConfig $config, IURLGenerator $urlGenerator)
|
||||
{
|
||||
$this->config = $config;
|
||||
$this->urlGenerator = $urlGenerator;
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* This method should return a list of server-features.
|
||||
*
|
||||
* This is for example 'versioning' and is added to the DAV: header
|
||||
|
@ -58,7 +59,7 @@ class PublishPlugin extends ServerPlugin
|
|||
*
|
||||
* @return string[]
|
||||
*/
|
||||
public function getFeatures()
|
||||
public function getFeatures()
|
||||
{
|
||||
return ['oc-calendar-publishing']; // May have to be changed to be detected
|
||||
}
|
||||
|
@ -92,10 +93,9 @@ class PublishPlugin extends ServerPlugin
|
|||
|
||||
$this->server->on('method:POST', [$this, 'httpPost']);
|
||||
$this->server->on('propFind', [$this, 'propFind']);
|
||||
// $this->server->on('method:OPTIONS', [$this, 'httpOptions'], 5);
|
||||
}
|
||||
|
||||
public function propFind(PropFind $propFind, INode $node)
|
||||
public function propFind(PropFind $propFind, INode $node)
|
||||
{
|
||||
if ($node instanceof Calendar) {
|
||||
$token = md5($this->config->getSystemValue('secret', '').$node->getResourceId());
|
||||
|
@ -104,130 +104,113 @@ class PublishPlugin extends ServerPlugin
|
|||
|
||||
$propFind->handle('{'.self::NS_CALENDARSERVER.'}publish-url', function () use ($node, $publishUrl) {
|
||||
if ($node->getPublishStatus()) {
|
||||
return new Publisher($publishUrl, true); // We return the publish-url only if the calendar is published.
|
||||
// We return the publish-url only if the calendar is published.
|
||||
return new Publisher($publishUrl, true);
|
||||
}
|
||||
});
|
||||
|
||||
$propFind->handle('{'.self::NS_CALENDARSERVER.'}pre-publish-url', function () use ($node, $publishUrl) {
|
||||
return new Publisher($publishUrl, false); // The pre-publish-url is always returned
|
||||
// The pre-publish-url is always returned
|
||||
return new Publisher($publishUrl, false);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* We intercept this to handle POST requests on calendars.
|
||||
*
|
||||
* @param RequestInterface $request
|
||||
* @param ResponseInterface $response
|
||||
*
|
||||
* @return null|bool
|
||||
*/
|
||||
public function httpPost(RequestInterface $request, ResponseInterface $response)
|
||||
{
|
||||
$path = $request->getPath();
|
||||
/**
|
||||
* We intercept this to handle POST requests on calendars.
|
||||
*
|
||||
* @param RequestInterface $request
|
||||
* @param ResponseInterface $response
|
||||
*
|
||||
* @return null|bool
|
||||
*/
|
||||
public function httpPost(RequestInterface $request, ResponseInterface $response)
|
||||
{
|
||||
$path = $request->getPath();
|
||||
|
||||
// Only handling xml
|
||||
$contentType = $request->getHeader('Content-Type');
|
||||
if (strpos($contentType, 'application/xml') === false && strpos($contentType, 'text/xml') === false) {
|
||||
return;
|
||||
}
|
||||
// Only handling xml
|
||||
$contentType = $request->getHeader('Content-Type');
|
||||
if (strpos($contentType, 'application/xml') === false && strpos($contentType, 'text/xml') === false) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Making sure the node exists
|
||||
try {
|
||||
$node = $this->server->tree->getNodeForPath($path);
|
||||
} catch (NotFound $e) {
|
||||
return;
|
||||
}
|
||||
// Making sure the node exists
|
||||
try {
|
||||
$node = $this->server->tree->getNodeForPath($path);
|
||||
} catch (NotFound $e) {
|
||||
return;
|
||||
}
|
||||
|
||||
$requestBody = $request->getBodyAsString();
|
||||
$requestBody = $request->getBodyAsString();
|
||||
|
||||
// If this request handler could not deal with this POST request, it
|
||||
// will return 'null' and other plugins get a chance to handle the
|
||||
// request.
|
||||
//
|
||||
// However, we already requested the full body. This is a problem,
|
||||
// because a body can only be read once. This is why we preemptively
|
||||
// re-populated the request body with the existing data.
|
||||
$request->setBody($requestBody);
|
||||
// If this request handler could not deal with this POST request, it
|
||||
// will return 'null' and other plugins get a chance to handle the
|
||||
// request.
|
||||
//
|
||||
// However, we already requested the full body. This is a problem,
|
||||
// because a body can only be read once. This is why we preemptively
|
||||
// re-populated the request body with the existing data.
|
||||
$request->setBody($requestBody);
|
||||
|
||||
$message = $this->server->xml->parse($requestBody, $request->getUrl(), $documentType);
|
||||
$this->server->xml->parse($requestBody, $request->getUrl(), $documentType);
|
||||
|
||||
switch ($documentType) {
|
||||
switch ($documentType) {
|
||||
|
||||
case '{'.self::NS_CALENDARSERVER.'}publish-calendar' :
|
||||
case '{'.self::NS_CALENDARSERVER.'}publish-calendar' :
|
||||
|
||||
// We can only deal with IShareableCalendar objects
|
||||
if (!$node instanceof Calendar) {
|
||||
return;
|
||||
}
|
||||
$this->server->transactionType = 'post-publish-calendar';
|
||||
// We can only deal with IShareableCalendar objects
|
||||
if (!$node instanceof Calendar) {
|
||||
return;
|
||||
}
|
||||
$this->server->transactionType = 'post-publish-calendar';
|
||||
|
||||
// Getting ACL info
|
||||
$acl = $this->server->getPlugin('acl');
|
||||
// Getting ACL info
|
||||
$acl = $this->server->getPlugin('acl');
|
||||
|
||||
// If there's no ACL support, we allow everything
|
||||
if ($acl) {
|
||||
$acl->checkPrivileges($path, '{DAV:}write');
|
||||
}
|
||||
// If there's no ACL support, we allow everything
|
||||
if ($acl) {
|
||||
$acl->checkPrivileges($path, '{DAV:}write');
|
||||
}
|
||||
|
||||
$node->setPublishStatus(true);
|
||||
$node->setPublishStatus(true);
|
||||
|
||||
// iCloud sends back the 202, so we will too.
|
||||
$response->setStatus(202);
|
||||
// iCloud sends back the 202, so we will too.
|
||||
$response->setStatus(202);
|
||||
|
||||
// Adding this because sending a response body may cause issues,
|
||||
// and I wanted some type of indicator the response was handled.
|
||||
$response->setHeader('X-Sabre-Status', 'everything-went-well');
|
||||
// Adding this because sending a response body may cause issues,
|
||||
// and I wanted some type of indicator the response was handled.
|
||||
$response->setHeader('X-Sabre-Status', 'everything-went-well');
|
||||
|
||||
// Breaking the event chain
|
||||
return false;
|
||||
// Breaking the event chain
|
||||
return false;
|
||||
|
||||
case '{'.self::NS_CALENDARSERVER.'}unpublish-calendar' :
|
||||
case '{'.self::NS_CALENDARSERVER.'}unpublish-calendar' :
|
||||
|
||||
// We can only deal with IShareableCalendar objects
|
||||
if (!$node instanceof Calendar) {
|
||||
return;
|
||||
}
|
||||
$this->server->transactionType = 'post-unpublish-calendar';
|
||||
// We can only deal with IShareableCalendar objects
|
||||
if (!$node instanceof Calendar) {
|
||||
return;
|
||||
}
|
||||
$this->server->transactionType = 'post-unpublish-calendar';
|
||||
|
||||
// Getting ACL info
|
||||
$acl = $this->server->getPlugin('acl');
|
||||
// Getting ACL info
|
||||
$acl = $this->server->getPlugin('acl');
|
||||
|
||||
// If there's no ACL support, we allow everything
|
||||
if ($acl) {
|
||||
$acl->checkPrivileges($path, '{DAV:}write');
|
||||
}
|
||||
// If there's no ACL support, we allow everything
|
||||
if ($acl) {
|
||||
$acl->checkPrivileges($path, '{DAV:}write');
|
||||
}
|
||||
|
||||
$node->setPublishStatus(false);
|
||||
$node->setPublishStatus(false);
|
||||
|
||||
$response->setStatus(200);
|
||||
$response->setStatus(200);
|
||||
|
||||
// Adding this because sending a response body may cause issues,
|
||||
// and I wanted some type of indicator the response was handled.
|
||||
$response->setHeader('X-Sabre-Status', 'everything-went-well');
|
||||
// Adding this because sending a response body may cause issues,
|
||||
// and I wanted some type of indicator the response was handled.
|
||||
$response->setHeader('X-Sabre-Status', 'everything-went-well');
|
||||
|
||||
// Breaking the event chain
|
||||
return false;
|
||||
// Breaking the event chain
|
||||
return false;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public function httpOptions(RequestInterface $request, ResponseInterface $response) {
|
||||
if ($request->getPath() == 'public-calendars') {
|
||||
$methods = $this->server->getAllowedMethods($request->getPath());
|
||||
|
||||
$response->setHeader('Allow', strtoupper(implode(', ', $methods)));
|
||||
$features = ['1', '3', 'extended-mkcol'];
|
||||
|
||||
$response->setHeader('DAV', implode(', ', $features));
|
||||
$response->setHeader('MS-Author-Via', 'DAV');
|
||||
$response->setHeader('Accept-Ranges', 'bytes');
|
||||
$response->setHeader('Content-Length', '0');
|
||||
$response->setStatus(200);
|
||||
|
||||
// Sending back false will interupt the event chain and tell the server
|
||||
// we've handled this method.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,57 +8,58 @@ use Sabre\Xml\XmlSerializable;
|
|||
|
||||
class Publisher implements XmlSerializable {
|
||||
|
||||
/**
|
||||
* @var string $publishUrl
|
||||
*/
|
||||
protected $publishUrl;
|
||||
/**
|
||||
* @var string $publishUrl
|
||||
*/
|
||||
protected $publishUrl;
|
||||
|
||||
/**
|
||||
* @var boolean $isPublished
|
||||
*/
|
||||
protected $isPublished;
|
||||
/**
|
||||
* @var boolean $isPublished
|
||||
*/
|
||||
protected $isPublished;
|
||||
|
||||
/**
|
||||
* @param string $publishUrl
|
||||
* @param boolean $isPublished
|
||||
*/
|
||||
function __construct($publishUrl, $isPublished) {
|
||||
$this->publishUrl = $publishUrl;
|
||||
$this->isPublished = $isPublished;
|
||||
}
|
||||
/**
|
||||
* @param string $publishUrl
|
||||
* @param boolean $isPublished
|
||||
*/
|
||||
function __construct($publishUrl, $isPublished) {
|
||||
$this->publishUrl = $publishUrl;
|
||||
$this->isPublished = $isPublished;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
function getValue() {
|
||||
return $this->publishUrl;
|
||||
}
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
function getValue() {
|
||||
return $this->publishUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* The xmlSerialize metod is called during xml writing.
|
||||
*
|
||||
* Use the $writer argument to write its own xml serialization.
|
||||
*
|
||||
* An important note: do _not_ create a parent element. Any element
|
||||
* implementing XmlSerializble should only ever write what's considered
|
||||
* its 'inner xml'.
|
||||
*
|
||||
* The parent of the current element is responsible for writing a
|
||||
* containing element.
|
||||
*
|
||||
* This allows serializers to be re-used for different element names.
|
||||
*
|
||||
* If you are opening new elements, you must also close them again.
|
||||
*
|
||||
* @param Writer $writer
|
||||
* @return void
|
||||
*/
|
||||
function xmlSerialize(Writer $writer) {
|
||||
if (!$this->isPublished) {
|
||||
$writer->write($this->publishUrl); // for pre-publish-url
|
||||
} else {
|
||||
$writer->writeElement('{DAV:}href', $this->publishUrl); // for publish-url
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* The xmlSerialize metod is called during xml writing.
|
||||
*
|
||||
* Use the $writer argument to write its own xml serialization.
|
||||
*
|
||||
* An important note: do _not_ create a parent element. Any element
|
||||
* implementing XmlSerializble should only ever write what's considered
|
||||
* its 'inner xml'.
|
||||
*
|
||||
* The parent of the current element is responsible for writing a
|
||||
* containing element.
|
||||
*
|
||||
* This allows serializers to be re-used for different element names.
|
||||
*
|
||||
* If you are opening new elements, you must also close them again.
|
||||
*
|
||||
* @param Writer $writer
|
||||
* @return void
|
||||
*/
|
||||
function xmlSerialize(Writer $writer) {
|
||||
if (!$this->isPublished) {
|
||||
// for pre-publish-url
|
||||
$writer->write($this->publishUrl);
|
||||
} else {
|
||||
// for publish-url
|
||||
$writer->writeElement('{DAV:}href', $this->publishUrl);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,6 +44,7 @@ class CreateCalendar extends Command {
|
|||
|
||||
/**
|
||||
* @param IUserManager $userManager
|
||||
* @param IGroupManager $groupManager
|
||||
* @param IDBConnection $dbConnection
|
||||
*/
|
||||
function __construct(IUserManager $userManager, IGroupManager $groupManager, IDBConnection $dbConnection) {
|
||||
|
@ -74,9 +75,10 @@ class CreateCalendar extends Command {
|
|||
$this->userManager,
|
||||
$this->groupManager
|
||||
);
|
||||
$config = \OC::$server->getConfig();
|
||||
|
||||
$name = $input->getArgument('name');
|
||||
$caldav = new CalDavBackend($this->dbConnection, $principalBackend, $this->userManager);
|
||||
$caldav = new CalDavBackend($this->dbConnection, $principalBackend, $this->userManager, $config);
|
||||
$caldav->createCalendar("principals/users/$user", $name, []);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -244,10 +244,6 @@ class FilesPlugin extends ServerPlugin {
|
|||
* @param ResponseInterface $response
|
||||
*/
|
||||
function httpGet(RequestInterface $request, ResponseInterface $response) {
|
||||
// Exclude published calendars
|
||||
// TODO : Find a better way to do this
|
||||
if (explode('/', $request->getPath())[0] === 'public-calendars') return;
|
||||
|
||||
// Only handle valid files
|
||||
$node = $this->tree->getNodeForPath($request->getPath());
|
||||
if (!($node instanceof IFile)) return;
|
||||
|
|
|
@ -60,7 +60,7 @@ class RootCollection extends SimpleCollection {
|
|||
$systemPrincipals->disableListing = $disableListing;
|
||||
$filesCollection = new Files\RootCollection($userPrincipalBackend, 'principals/users');
|
||||
$filesCollection->disableListing = $disableListing;
|
||||
$caldavBackend = new CalDavBackend($db, $userPrincipalBackend, \OC::$server->getUserManager());
|
||||
$caldavBackend = new CalDavBackend($db, $userPrincipalBackend, \OC::$server->getUserManager(), $config);
|
||||
$calendarRoot = new CalendarRoot($userPrincipalBackend, $caldavBackend, 'principals/users');
|
||||
$calendarRoot->disableListing = $disableListing;
|
||||
$publicCalendarRoot = new PublicCalendarRoot($caldavBackend);
|
||||
|
|
|
@ -75,7 +75,8 @@ abstract class AbstractCalDavBackendTest extends TestCase {
|
|||
->willReturn([self::UNIT_TEST_GROUP]);
|
||||
|
||||
$db = \OC::$server->getDatabaseConnection();
|
||||
$this->backend = new CalDavBackend($db, $this->principal, $this->userManager);
|
||||
$config = \OC::$server->getConfig();
|
||||
$this->backend = new CalDavBackend($db, $this->principal, $this->userManager, $config);
|
||||
|
||||
$this->tearDown();
|
||||
}
|
||||
|
|
|
@ -4,7 +4,6 @@ namespace OCA\DAV\Tests\unit\CalDAV\Publishing;
|
|||
|
||||
use OCA\DAV\CalDAV\Calendar;
|
||||
use OCA\DAV\CalDAV\Publishing\PublishPlugin;
|
||||
use OCA\DAV\Connector\Sabre\Auth;
|
||||
use OCP\IRequest;
|
||||
use OCP\IURLGenerator;
|
||||
use OCP\IConfig;
|
||||
|
@ -30,16 +29,16 @@ class PluginTest extends TestCase {
|
|||
public function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
/** @var Auth | \PHPUnit_Framework_MockObject_MockObject $authBackend */
|
||||
$authBackend = $this->getMockBuilder('OCA\DAV\DAV\PublicAuth')->disableOriginalConstructor()->getMock();
|
||||
$authBackend->method('isDavAuthenticated')->willReturn(true);
|
||||
|
||||
$this->config = $this->getMock('\OCP\IConfig');
|
||||
$this->config = $this->getMockBuilder('\OCP\IConfig')->
|
||||
disableOriginalConstructor()->
|
||||
getMock();
|
||||
$this->config->expects($this->any())->method('getSystemValue')
|
||||
->with($this->equalTo('secret'))
|
||||
->willReturn('mysecret');
|
||||
|
||||
$this->urlGenerator = $this->getMock('OCP\IURLGenerator');
|
||||
$this->urlGenerator = $this->getMockBuilder('OCP\IURLGenerator')->
|
||||
disableOriginalConstructor()->
|
||||
getMock();
|
||||
|
||||
/** @var IRequest $request */
|
||||
$this->plugin = new PublishPlugin($this->config, $this->urlGenerator);
|
||||
|
@ -48,8 +47,8 @@ class PluginTest extends TestCase {
|
|||
$this->server = new Server($root);
|
||||
/** @var SimpleCollection $node */
|
||||
$this->book = $this->getMockBuilder('OCA\DAV\CalDAV\Calendar')->
|
||||
disableOriginalConstructor()->
|
||||
getMock();
|
||||
disableOriginalConstructor()->
|
||||
getMock();
|
||||
$this->book->method('getName')->willReturn('cal1');
|
||||
$root->addChild($this->book);
|
||||
$this->plugin->initialize($this->server);
|
||||
|
|
|
@ -471,7 +471,7 @@ class FilesPluginTest extends TestCase {
|
|||
$node = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Node')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$node->expects($this->at(0))
|
||||
$node->expects($this->once())
|
||||
->method('getFileInfo')
|
||||
->willReturn($fileInfoFolderATestTXT);
|
||||
|
||||
|
@ -545,7 +545,7 @@ class FilesPluginTest extends TestCase {
|
|||
->getMock();
|
||||
|
||||
$request
|
||||
->expects($this->at(1))
|
||||
->expects($this->once())
|
||||
->method('getPath')
|
||||
->will($this->returnValue('test/somefile.xml'));
|
||||
|
||||
|
|
Loading…
Reference in a new issue