Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
69b530a
Basic implementation of resource and collection handling
nickvergessen Sep 14, 2018
65a9ab4
Add a controller with the most important methods
nickvergessen Oct 16, 2018
136d2c3
Provider functionality
nickvergessen Oct 17, 2018
5dfc56e
Allow to create collections
nickvergessen Oct 18, 2018
702dcfb
Make names mandatory
nickvergessen Oct 24, 2018
ab4b293
Insert new collection into database
juliusknorr Oct 29, 2018
d6aae43
Move files_sharing to webpack
juliusknorr Jan 17, 2019
322f7c3
Add vue app for collaboration resources
juliusknorr Jan 17, 2019
a72a6d7
Adjust parameter names on createCollectionOnResource
juliusknorr Jan 22, 2019
7a4b2db
Add javascript API for collaboration resources
juliusknorr Oct 22, 2018
51057c5
Use proper public javascript methods
juliusknorr Jan 23, 2019
7843b8b
Adjust OCP.Collaboration
juliusknorr Jan 23, 2019
555afff
Make sure we query the node before fetching the name
juliusknorr Jan 23, 2019
88aa3de
Add iconClass to resources
juliusknorr Jan 23, 2019
d85e3e3
Allow apps to register resource providers
juliusknorr Jan 24, 2019
506eb88
Only call resource provider if type matches
juliusknorr Jan 24, 2019
3777df6
Add link to resource provider
juliusknorr Jan 24, 2019
53ac9bd
Implement frontend for search/rename
juliusknorr Jan 29, 2019
e404ce7
Implement search and rename in backend
juliusknorr Jan 29, 2019
d1a4856
Add eslint settings and reorganize files
juliusknorr Jan 31, 2019
31340b8
Add icon for resource type and icons for folder/file
juliusknorr Jan 31, 2019
dee6f7f
Fix doc blocks
nickvergessen Feb 7, 2019
ece471d
Start implementing access cache
nickvergessen Feb 7, 2019
59c92a7
Further work on the access cache
nickvergessen Feb 11, 2019
a8a5472
Improve searchCollections()
nickvergessen Feb 11, 2019
c8c59e6
Make sure the results are always sorted the same
nickvergessen Feb 11, 2019
103298e
Use icon-close to remove resources
juliusknorr Feb 14, 2019
fd434da
Fix SQL statement and provider method call
juliusknorr Feb 16, 2019
cab704f
Merge webpack into main one
juliusknorr Feb 20, 2019
7207a77
Use nextcloud-vue-collections library
juliusknorr Feb 21, 2019
43c8d0c
Add default value, because null does not trigger unique-key
nickvergessen Feb 22, 2019
eecd932
Also check the access to collections on preparing
nickvergessen Feb 22, 2019
995cad0
Cache the access manually too
nickvergessen Feb 22, 2019
901f1d4
Don't throw on UniqueConstraintViolationException since a written val…
nickvergessen Feb 22, 2019
30dff37
Add invalidation methods to the interface
nickvergessen Feb 22, 2019
1a73cab
Fix doc block
nickvergessen Feb 22, 2019
066238a
Fix unused variable $access
nickvergessen Feb 22, 2019
4113505
Also cache the resource type because it is part of the identifier
nickvergessen Feb 22, 2019
55ae7fa
Invalidate the cache when a share is updated
nickvergessen Feb 22, 2019
01b4db6
Add dispatcher events to User and Group objects
nickvergessen Feb 22, 2019
752276f
Add a listener for the events
nickvergessen Feb 22, 2019
fdfe984
Register providers via class names
nickvergessen Feb 22, 2019
1c4436d
Access for a collection can only become true
nickvergessen Feb 22, 2019
55cd9ea
Update autoloader
nickvergessen Feb 22, 2019
37e6488
Use nextcloud-vue-collection 0.1.2
juliusknorr Feb 22, 2019
ba2b542
Listen to IUser::postDelete
juliusknorr Feb 24, 2019
6ee7286
Fix tests
juliusknorr Feb 24, 2019
c778032
Properly handle null as ownerId if file system access is denied by ac…
juliusknorr Feb 24, 2019
e5162fb
Fix tests
juliusknorr Feb 24, 2019
f0e50bc
Fetch node and filename also if access cache was used
juliusknorr Feb 24, 2019
0c32b21
Fix files_external tests
nickvergessen Feb 25, 2019
48f34b8
Add bundled files
juliusknorr Feb 21, 2019
ca0624d
Remove unneeded files
juliusknorr Mar 1, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add dispatcher events to User and Group objects
Signed-off-by: Joas Schilling <[email protected]>
  • Loading branch information
nickvergessen authored and juliusknorr committed Mar 1, 2019
commit 01b4db62fbc4230cff953a2385d305b149744b86
4 changes: 2 additions & 2 deletions apps/files/tests/Service/TagServiceTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
use OC\Tags;
use OCA\Files\Service\TagService;
use OCP\Activity\IManager;
use OCP\IUser;
use OCP\IUserSession;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;

Expand Down Expand Up @@ -75,8 +76,7 @@ protected function setUp() {
\OC::$server->getUserManager()->createUser($this->user, 'test');
\OC_User::setUserId($this->user);
\OC_Util::setupFS($this->user);
/** @var \OCP\IUser */
$user = new \OC\User\User($this->user, null);
$user = $this->createMock(IUser::class);
/**
* @var \OCP\IUserSession
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public function setUp() {

$this->globalStoragesService = $this->service;

$this->user = new \OC\User\User(self::USER_ID, null);
$this->user = $this->createMock(IUser::class);
/** @var \OCP\IUserSession|\PHPUnit_Framework_MockObject_MockObject $userSession */
$userSession = $this->createMock(IUserSession::class);
$userSession
Expand Down
2 changes: 1 addition & 1 deletion lib/private/Files/View.php
Original file line number Diff line number Diff line change
Expand Up @@ -1299,7 +1299,7 @@ private function getUserObjectForOwner($ownerId) {
if ($owner instanceof IUser) {
return $owner;
} else {
return new User($ownerId, null);
return new User($ownerId, null, \OC::$server->getEventDispatcher());
}
}

Expand Down
66 changes: 40 additions & 26 deletions lib/private/Group/Group.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,55 +31,50 @@
namespace OC\Group;

use OCP\Group\Backend\IHideFromCollaborationBackend;
use OC\Hooks\PublicEmitter;
use OCP\GroupInterface;
use OCP\IGroup;
use OCP\IUser;
use OCP\Group\Backend\ICountDisabledInGroup;
use OCP\IUserManager;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\EventDispatcher\GenericEvent;

class Group implements IGroup {
/** @var null|string */
protected $displayName;

/**
* @var string $id
*/
/** @var string */
private $gid;

/**
* @var \OC\User\User[] $users
*/
/** @var \OC\User\User[] */
private $users = array();

/**
* @var bool $usersLoaded
*/
/** @var bool */
private $usersLoaded;

/**
* @var \OC\Group\Backend[]|\OC\Group\Database[] $backend
*/
/** @var Backend[] */
private $backends;

/**
* @var \OC\Hooks\PublicEmitter $emitter
*/
/** @var EventDispatcherInterface */
private $dispatcher;
/** @var \OC\User\Manager|IUserManager */
private $userManager;
/** @var PublicEmitter */
private $emitter;

/**
* @var \OC\User\Manager $userManager
*/
private $userManager;

/**
* @param string $gid
* @param \OC\Group\Backend[] $backends
* @param \OC\User\Manager $userManager
* @param \OC\Hooks\PublicEmitter $emitter
* @param Backend[] $backends
* @param EventDispatcherInterface $dispatcher
* @param IUserManager $userManager
* @param PublicEmitter $emitter
* @param string $displayName
*/
public function __construct($gid, $backends, $userManager, $emitter = null, $displayName = null) {
public function __construct(string $gid, array $backends, EventDispatcherInterface $dispatcher, IUserManager $userManager, PublicEmitter $emitter = null, ?string $displayName = null) {
$this->gid = $gid;
$this->backends = $backends;
$this->dispatcher = $dispatcher;
$this->userManager = $userManager;
$this->emitter = $emitter;
$this->displayName = $displayName;
Expand Down Expand Up @@ -151,6 +146,10 @@ public function addUser(IUser $user) {
return;
}

$this->dispatcher->dispatch(IGroup::class . '::preAddUser', new GenericEvent($this, [
'user' => $user,
]));

if ($this->emitter) {
$this->emitter->emit('\OC\Group', 'preAddUser', array($this, $user));
}
Expand All @@ -160,6 +159,11 @@ public function addUser(IUser $user) {
if ($this->users) {
$this->users[$user->getUID()] = $user;
}

$this->dispatcher->dispatch(IGroup::class . '::postAddUser', new GenericEvent($this, [
'user' => $user,
]));

if ($this->emitter) {
$this->emitter->emit('\OC\Group', 'postAddUser', array($this, $user));
}
Expand All @@ -175,6 +179,9 @@ public function addUser(IUser $user) {
*/
public function removeUser($user) {
$result = false;
$this->dispatcher->dispatch(IGroup::class . '::preRemoveUser', new GenericEvent($this, [
'user' => $user,
]));
if ($this->emitter) {
$this->emitter->emit('\OC\Group', 'preRemoveUser', array($this, $user));
}
Expand All @@ -185,6 +192,9 @@ public function removeUser($user) {
}
}
if ($result) {
$this->dispatcher->dispatch(IGroup::class . '::postRemoveUser', new GenericEvent($this, [
'user' => $user,
]));
if ($this->emitter) {
$this->emitter->emit('\OC\Group', 'postRemoveUser', array($this, $user));
}
Expand Down Expand Up @@ -292,6 +302,7 @@ public function delete() {
}

$result = false;
$this->dispatcher->dispatch(IGroup::class . '::preDelete', new GenericEvent($this));
if ($this->emitter) {
$this->emitter->emit('\OC\Group', 'preDelete', array($this));
}
Expand All @@ -301,8 +312,11 @@ public function delete() {
$backend->deleteGroup($this->gid);
}
}
if ($result and $this->emitter) {
$this->emitter->emit('\OC\Group', 'postDelete', array($this));
if ($result) {
$this->dispatcher->dispatch(IGroup::class . '::postDelete', new GenericEvent($this));
if ($this->emitter) {
$this->emitter->emit('\OC\Group', 'postDelete', array($this));
}
}
return $result;
}
Expand Down
63 changes: 31 additions & 32 deletions lib/private/Group/Manager.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
use OCP\IGroupManager;
use OCP\ILogger;
use OCP\IUser;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;

/**
* Class Manager
Expand All @@ -61,59 +62,57 @@
* @package OC\Group
*/
class Manager extends PublicEmitter implements IGroupManager {
/**
* @var GroupInterface[] $backends
*/
private $backends = array();
/** @var GroupInterface[] */
private $backends = [];

/**
* @var \OC\User\Manager $userManager
*/
/** @var \OC\User\Manager */
private $userManager;
/** @var EventDispatcherInterface */
private $dispatcher;
/** @var ILogger */
private $logger;

/**
* @var \OC\Group\Group[]
*/
private $cachedGroups = array();
/** @var \OC\Group\Group[] */
private $cachedGroups = [];

/**
* @var \OC\Group\Group[]
*/
private $cachedUserGroups = array();
/** @var \OC\Group\Group[] */
private $cachedUserGroups = [];

/** @var \OC\SubAdmin */
private $subAdmin = null;

/** @var ILogger */
private $logger;

/**
* @param \OC\User\Manager $userManager
* @param EventDispatcherInterface $dispatcher
* @param ILogger $logger
*/
public function __construct(\OC\User\Manager $userManager, ILogger $logger) {
public function __construct(\OC\User\Manager $userManager,
EventDispatcherInterface $dispatcher,
ILogger $logger) {
$this->userManager = $userManager;
$this->dispatcher = $dispatcher;
$this->logger = $logger;

$cachedGroups = & $this->cachedGroups;
$cachedUserGroups = & $this->cachedUserGroups;
$this->listen('\OC\Group', 'postDelete', function ($group) use (&$cachedGroups, &$cachedUserGroups) {
/**
* @var \OC\Group\Group $group
*/
unset($cachedGroups[$group->getGID()]);
$cachedUserGroups = array();
$cachedUserGroups = [];
});
$this->listen('\OC\Group', 'postAddUser', function ($group) use (&$cachedUserGroups) {
/**
* @var \OC\Group\Group $group
*/
$cachedUserGroups = array();
$cachedUserGroups = [];
});
$this->listen('\OC\Group', 'postRemoveUser', function ($group) use (&$cachedUserGroups) {
/**
* @var \OC\Group\Group $group
*/
$cachedUserGroups = array();
$cachedUserGroups = [];
});
}

Expand Down Expand Up @@ -144,7 +143,7 @@ public function addBackend($backend) {
}

public function clearBackends() {
$this->backends = array();
$this->backends = [];
$this->clearCaches();
}

Expand All @@ -158,8 +157,8 @@ public function getBackends() {


protected function clearCaches() {
$this->cachedGroups = array();
$this->cachedUserGroups = array();
$this->cachedGroups = [];
$this->cachedUserGroups = [];
}

/**
Expand All @@ -179,7 +178,7 @@ public function get($gid) {
* @return \OCP\IGroup
*/
protected function getGroupObject($gid, $displayName = null) {
$backends = array();
$backends = [];
foreach ($this->backends as $backend) {
if ($backend->implementsActions(\OC\Group\Backend::GROUP_DETAILS)) {
$groupData = $backend->getGroupDetails($gid);
Expand All @@ -197,7 +196,7 @@ protected function getGroupObject($gid, $displayName = null) {
if (count($backends) === 0) {
return null;
}
$this->cachedGroups[$gid] = new Group($gid, $backends, $this->userManager, $this, $displayName);
$this->cachedGroups[$gid] = new Group($gid, $backends, $this->dispatcher, $this->userManager, $this, $displayName);
return $this->cachedGroups[$gid];
}

Expand Down Expand Up @@ -239,7 +238,7 @@ public function createGroup($gid) {
* @return \OC\Group\Group[]
*/
public function search($search, $limit = null, $offset = null) {
$groups = array();
$groups = [];
foreach ($this->backends as $backend) {
$groupIds = $backend->getGroups($search, $limit, $offset);
foreach ($groupIds as $groupId) {
Expand Down Expand Up @@ -276,7 +275,7 @@ public function getUserIdGroups($uid) {
if (isset($this->cachedUserGroups[$uid])) {
return $this->cachedUserGroups[$uid];
}
$groups = array();
$groups = [];
foreach ($this->backends as $backend) {
$groupIds = $backend->getUserGroups($uid);
if (is_array($groupIds)) {
Expand Down Expand Up @@ -351,11 +350,11 @@ public function getUserGroupNames(IUser $user) {
public function displayNamesInGroup($gid, $search = '', $limit = -1, $offset = 0) {
$group = $this->get($gid);
if(is_null($group)) {
return array();
return [];
}

$search = trim($search);
$groupUsers = array();
$groupUsers = [];

if(!empty($search)) {
// only user backends have the capability to do a complex search for users
Expand Down Expand Up @@ -384,7 +383,7 @@ public function displayNamesInGroup($gid, $search = '', $limit = -1, $offset = 0
$groupUsers = $group->searchUsers('', $limit, $offset);
}

$matchingUsers = array();
$matchingUsers = [];
foreach($groupUsers as $groupUser) {
$matchingUsers[$groupUser->getUID()] = $groupUser->getDisplayName();
}
Expand Down
7 changes: 4 additions & 3 deletions lib/private/Server.php
Original file line number Diff line number Diff line change
Expand Up @@ -316,14 +316,13 @@ public function __construct($webRoot, \OC\Config $config) {
$this->registerAlias('LazyRootFolder', \OCP\Files\IRootFolder::class);

$this->registerService(\OC\User\Manager::class, function (Server $c) {
$config = $c->getConfig();
return new \OC\User\Manager($config);
return new \OC\User\Manager($c->getConfig(), $c->getEventDispatcher());
});
$this->registerAlias('UserManager', \OC\User\Manager::class);
$this->registerAlias(\OCP\IUserManager::class, \OC\User\Manager::class);

$this->registerService(\OCP\IGroupManager::class, function (Server $c) {
$groupManager = new \OC\Group\Manager($this->getUserManager(), $this->getLogger());
$groupManager = new \OC\Group\Manager($this->getUserManager(), $c->getEventDispatcher(), $this->getLogger());
$groupManager->listen('\OC\Group', 'preCreate', function ($gid) {
\OC_Hook::emit('OC_Group', 'pre_createGroup', array('run' => true, 'gid' => $gid));
});
Expand Down Expand Up @@ -1095,6 +1094,8 @@ public function __construct($webRoot, \OC\Config $config) {

$this->registerAlias(\OCP\Collaboration\AutoComplete\IManager::class, \OC\Collaboration\AutoComplete\Manager::class);

$this->registerAlias(\OCP\Collaboration\Resources\IManager::class, \OC\Collaboration\Resources\Manager::class);

$this->registerService('SettingsManager', function (Server $c) {
$manager = new \OC\Settings\Manager(
$c->getLogger(),
Expand Down
Loading