diff options
-rw-r--r-- | apps/dav/lib/caldav/calendar.php | 13 | ||||
-rw-r--r-- | apps/dav/tests/unit/caldav/caldavbackendtest.php | 2 | ||||
-rw-r--r-- | apps/dav/tests/unit/caldav/calendartest.php | 13 | ||||
-rw-r--r-- | apps/dav/tests/unit/connector/publicauth.php | 7 | ||||
-rw-r--r-- | apps/files_trashbin/lib/backgroundjob/expiretrash.php | 51 | ||||
-rw-r--r-- | apps/files_trashbin/tests/backgroundjob/expiretrash.php | 1 | ||||
-rw-r--r-- | apps/files_versions/lib/backgroundjob/expireversions.php | 28 | ||||
-rw-r--r-- | cron.php | 8 |
8 files changed, 59 insertions, 64 deletions
diff --git a/apps/dav/lib/caldav/calendar.php b/apps/dav/lib/caldav/calendar.php index 6d6c0b5d7a4..f3637692e43 100644 --- a/apps/dav/lib/caldav/calendar.php +++ b/apps/dav/lib/caldav/calendar.php @@ -33,7 +33,6 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IShareable { parent::__construct($caldavBackend, $calendarInfo); if ($this->getName() === BirthdayService::BIRTHDAY_CALENDAR_URI) { - $this->calendarInfo['{http://sabredav.org/ns}read-only'] = true; $this->calendarInfo['{DAV:}displayname'] = $l10n->t('Contact birthdays'); } } @@ -94,11 +93,13 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IShareable { 'principal' => $this->getOwner(), 'protected' => true, ]]; - $acl[] = [ - 'privilege' => '{DAV:}write', - 'principal' => $this->getOwner(), - 'protected' => true, - ]; + if ($this->getName() !== BirthdayService::BIRTHDAY_CALENDAR_URI) { + $acl[] = [ + 'privilege' => '{DAV:}write', + 'principal' => $this->getOwner(), + 'protected' => true, + ]; + } if ($this->getOwner() !== parent::getOwner()) { $acl[] = [ 'privilege' => '{DAV:}read', diff --git a/apps/dav/tests/unit/caldav/caldavbackendtest.php b/apps/dav/tests/unit/caldav/caldavbackendtest.php index a4a19f5bd3e..440db7636e1 100644 --- a/apps/dav/tests/unit/caldav/caldavbackendtest.php +++ b/apps/dav/tests/unit/caldav/caldavbackendtest.php @@ -25,6 +25,7 @@ use DateTimeZone; use OCA\DAV\CalDAV\CalDavBackend; use OCA\DAV\CalDAV\Calendar; use OCA\DAV\Connector\Sabre\Principal; +use OCP\IL10N; use Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet; use Sabre\DAV\PropPatch; use Sabre\DAV\Xml\Property\Href; @@ -136,6 +137,7 @@ class CalDavBackendTest extends TestCase { */ public function testCalendarSharing($userCanRead, $userCanWrite, $groupCanRead, $groupCanWrite, $add) { + /** @var IL10N | \PHPUnit_Framework_MockObject_MockObject $l10n */ $l10n = $this->getMockBuilder('\OCP\IL10N') ->disableOriginalConstructor()->getMock(); $l10n diff --git a/apps/dav/tests/unit/caldav/calendartest.php b/apps/dav/tests/unit/caldav/calendartest.php index 812e0074d15..f13edde6085 100644 --- a/apps/dav/tests/unit/caldav/calendartest.php +++ b/apps/dav/tests/unit/caldav/calendartest.php @@ -21,6 +21,7 @@ namespace OCA\DAV\Tests\Unit\CalDAV; +use OCA\DAV\CalDAV\BirthdayService; use OCA\DAV\CalDAV\CalDavBackend; use OCA\DAV\CalDAV\Calendar; use OCP\IL10N; @@ -123,14 +124,14 @@ class CalendarTest extends TestCase { /** * @dataProvider providesReadOnlyInfo */ - public function testAcl($expectsWrite, $readOnlyValue, $hasOwnerSet) { + public function testAcl($expectsWrite, $readOnlyValue, $hasOwnerSet, $uri = 'default') { /** @var \PHPUnit_Framework_MockObject_MockObject | CalDavBackend $backend */ $backend = $this->getMockBuilder('OCA\DAV\CalDAV\CalDavBackend')->disableOriginalConstructor()->getMock(); $backend->expects($this->any())->method('applyShareAcl')->willReturnArgument(1); $calendarInfo = [ 'principaluri' => 'user2', 'id' => 666, - 'uri' => 'default' + 'uri' => $uri ]; if (!is_null($readOnlyValue)) { $calendarInfo['{http://owncloud.org/ns}read-only'] = $readOnlyValue; @@ -151,6 +152,13 @@ class CalendarTest extends TestCase { 'principal' => $hasOwnerSet ? 'user1' : 'user2', 'protected' => true ]]; + if ($uri === BirthdayService::BIRTHDAY_CALENDAR_URI) { + $expectedAcl = [[ + 'privilege' => '{DAV:}read', + 'principal' => $hasOwnerSet ? 'user1' : 'user2', + 'protected' => true + ]]; + } if ($hasOwnerSet) { $expectedAcl[] = [ 'privilege' => '{DAV:}read', @@ -177,6 +185,7 @@ class CalendarTest extends TestCase { 'read-only property not set and no owner' => [true, null, false], 'read-only property is false and no owner' => [true, false, false], 'read-only property is true and no owner' => [false, true, false], + 'birthday calendar' => [false, false, false, BirthdayService::BIRTHDAY_CALENDAR_URI] ]; } } diff --git a/apps/dav/tests/unit/connector/publicauth.php b/apps/dav/tests/unit/connector/publicauth.php index 5f46651d372..76a6e1ac6a1 100644 --- a/apps/dav/tests/unit/connector/publicauth.php +++ b/apps/dav/tests/unit/connector/publicauth.php @@ -7,6 +7,13 @@ use OCP\ISession; use OCP\Share\Exceptions\ShareNotFound; use OCP\Share\IManager; +/** + * Class PublicAuth + * + * @group DB + * + * @package OCA\DAV\Tests\Unit\Connector + */ class PublicAuth extends \Test\TestCase { /** @var ISession|\PHPUnit_Framework_MockObject_MockObject */ diff --git a/apps/files_trashbin/lib/backgroundjob/expiretrash.php b/apps/files_trashbin/lib/backgroundjob/expiretrash.php index 4ee0658840b..8a4e2d41fec 100644 --- a/apps/files_trashbin/lib/backgroundjob/expiretrash.php +++ b/apps/files_trashbin/lib/backgroundjob/expiretrash.php @@ -23,6 +23,7 @@ namespace OCA\Files_Trashbin\BackgroundJob; use OCP\IConfig; +use OCP\IUser; use OCP\IUserManager; use OCA\Files_Trashbin\AppInfo\Application; use OCA\Files_Trashbin\Expiration; @@ -31,40 +32,28 @@ use OCA\Files_Trashbin\Trashbin; class ExpireTrash extends \OC\BackgroundJob\TimedJob { - const ITEMS_PER_SESSION = 1000; - /** * @var Expiration */ private $expiration; - - /** - * @var IConfig - */ - private $config; /** * @var IUserManager */ private $userManager; - - const USERS_PER_SESSION = 1000; /** - * @param IConfig|null $config * @param IUserManager|null $userManager * @param Expiration|null $expiration */ - public function __construct(IConfig $config = null, - IUserManager $userManager = null, + public function __construct(IUserManager $userManager = null, Expiration $expiration = null) { // Run once per 30 minutes $this->setInterval(60 * 30); - if (is_null($expiration) || is_null($userManager) || is_null($config)) { + if (is_null($expiration) || is_null($userManager)) { $this->fixDIForJobs(); } else { - $this->config = $config; $this->userManager = $userManager; $this->expiration = $expiration; } @@ -72,7 +61,6 @@ class ExpireTrash extends \OC\BackgroundJob\TimedJob { protected function fixDIForJobs() { $application = new Application(); - $this->config = \OC::$server->getConfig(); $this->userManager = \OC::$server->getUserManager(); $this->expiration = $application->getContainer()->query('Expiration'); } @@ -86,26 +74,15 @@ class ExpireTrash extends \OC\BackgroundJob\TimedJob { if (!$maxAge) { return; } - - $offset = $this->config->getAppValue('files_trashbin', 'cronjob_user_offset', 0); - $users = $this->userManager->search('', self::USERS_PER_SESSION, $offset); - if (!count($users)) { - // No users found, reset offset and retry - $offset = 0; - $users = $this->userManager->search('', self::USERS_PER_SESSION); - } - - $offset += self::USERS_PER_SESSION; - $this->config->setAppValue('files_trashbin', 'cronjob_user_offset', $offset); - - foreach ($users as $user) { + + $this->userManager->callForAllUsers(function(IUser $user) { $uid = $user->getUID(); if (!$this->setupFS($uid)) { - continue; + return; } $dirContent = Helper::getTrashFiles('/', $uid, 'mtime'); Trashbin::deleteExpiredFiles($dirContent, $uid); - } + }); \OC_Util::tearDownFS(); } @@ -115,20 +92,16 @@ class ExpireTrash extends \OC\BackgroundJob\TimedJob { * @param string $user * @return boolean */ - private function setupFS($user){ - if (!$this->userManager->userExists($user)) { - return false; - } + protected function setupFS($user) { + \OC_Util::tearDownFS(); + \OC_Util::setupFS($user); - //Check if this user has a trashbin directory + // Check if this user has a trashbin directory $view = new \OC\Files\View('/' . $user); - if (!$view->is_dir('/files_trashbin/files')){ + if (!$view->is_dir('/files_trashbin/files')) { return false; } - \OC_Util::tearDownFS(); - \OC_Util::setupFS($user); - return true; } } diff --git a/apps/files_trashbin/tests/backgroundjob/expiretrash.php b/apps/files_trashbin/tests/backgroundjob/expiretrash.php index 79fc91884fc..c98a555c929 100644 --- a/apps/files_trashbin/tests/backgroundjob/expiretrash.php +++ b/apps/files_trashbin/tests/backgroundjob/expiretrash.php @@ -26,7 +26,6 @@ use \OCA\Files_Trashbin\BackgroundJob\ExpireTrash; class ExpireTrash_Test extends \Test\TestCase { public function testConstructAndRun() { $backgroundJob = new ExpireTrash( - $this->getMock('OCP\IConfig'), $this->getMock('OCP\IUserManager'), $this->getMockBuilder('OCA\Files_Trashbin\Expiration')->disableOriginalConstructor()->getMock() ); diff --git a/apps/files_versions/lib/backgroundjob/expireversions.php b/apps/files_versions/lib/backgroundjob/expireversions.php index 5d8eef4e351..8e14e65b9a7 100644 --- a/apps/files_versions/lib/backgroundjob/expireversions.php +++ b/apps/files_versions/lib/backgroundjob/expireversions.php @@ -21,6 +21,7 @@ namespace OCA\Files_Versions\BackgroundJob; +use OCP\IUser; use OCP\IUserManager; use OCA\Files_Versions\AppInfo\Application; use OCA\Files_Versions\Storage; @@ -64,20 +65,13 @@ class ExpireVersions extends \OC\BackgroundJob\TimedJob { return; } - $users = $this->userManager->search(''); - $isFSready = false; - foreach ($users as $user) { + $this->userManager->callForAllUsers(function(IUser $user) { $uid = $user->getUID(); - if (!$isFSready) { - if (!$this->setupFS($uid)) { - continue; - } - $isFSready = true; + if (!$this->setupFS($uid)) { + return; } Storage::expireOlderThanMaxForUser($uid); - } - - \OC_Util::tearDownFS(); + }); } /** @@ -85,14 +79,16 @@ class ExpireVersions extends \OC\BackgroundJob\TimedJob { * @param string $user * @return boolean */ - private function setupFS($user){ - if (!$this->userManager->userExists($user)) { - return false; - } - + protected function setupFS($user) { \OC_Util::tearDownFS(); \OC_Util::setupFS($user); + // Check if this user has a versions directory + $view = new \OC\Files\View('/' . $user); + if (!$view->is_dir('/files_versions')) { + return false; + } + return true; } } @@ -131,6 +131,10 @@ try { // Work $jobList = \OC::$server->getJobList(); + // We only ask for jobs for 14 minutes, because after 15 minutes the next + // system cron task should spawn. + $endTime = time() + 14 * 60; + $executedJobs = []; while ($job = $jobList->getNext()) { if (isset($executedJobs[$job->getId()])) { @@ -144,6 +148,10 @@ try { $jobList->setLastJob($job); $executedJobs[$job->getId()] = true; unset($job); + + if (time() > $endTime) { + break; + } } // unlock the file |