Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>tags/v19.0.0beta1
@@ -13,6 +13,9 @@ class ComposerAutoloaderInitContactsInteraction | |||
} | |||
} | |||
/** | |||
* @return \Composer\Autoload\ClassLoader | |||
*/ | |||
public static function getLoader() | |||
{ | |||
if (null !== self::$loader) { |
@@ -50,6 +50,7 @@ return array( | |||
'OCA\\Files_Sharing\\ISharedStorage' => $baseDir . '/../lib/ISharedStorage.php', | |||
'OCA\\Files_Sharing\\Listener\\LoadAdditionalListener' => $baseDir . '/../lib/Listener/LoadAdditionalListener.php', | |||
'OCA\\Files_Sharing\\Listener\\LoadSidebarListener' => $baseDir . '/../lib/Listener/LoadSidebarListener.php', | |||
'OCA\\Files_Sharing\\Listener\\ShareInteractionListener' => $baseDir . '/../lib/Listener/ShareInteractionListener.php', | |||
'OCA\\Files_Sharing\\Listener\\UserAddedToGroupListener' => $baseDir . '/../lib/Listener/UserAddedToGroupListener.php', | |||
'OCA\\Files_Sharing\\Listener\\UserShareAcceptanceListener' => $baseDir . '/../lib/Listener/UserShareAcceptanceListener.php', | |||
'OCA\\Files_Sharing\\Middleware\\OCSShareAPIMiddleware' => $baseDir . '/../lib/Middleware/OCSShareAPIMiddleware.php', |
@@ -65,6 +65,7 @@ class ComposerStaticInitFiles_Sharing | |||
'OCA\\Files_Sharing\\ISharedStorage' => __DIR__ . '/..' . '/../lib/ISharedStorage.php', | |||
'OCA\\Files_Sharing\\Listener\\LoadAdditionalListener' => __DIR__ . '/..' . '/../lib/Listener/LoadAdditionalListener.php', | |||
'OCA\\Files_Sharing\\Listener\\LoadSidebarListener' => __DIR__ . '/..' . '/../lib/Listener/LoadSidebarListener.php', | |||
'OCA\\Files_Sharing\\Listener\\ShareInteractionListener' => __DIR__ . '/..' . '/../lib/Listener/ShareInteractionListener.php', | |||
'OCA\\Files_Sharing\\Listener\\UserAddedToGroupListener' => __DIR__ . '/..' . '/../lib/Listener/UserAddedToGroupListener.php', | |||
'OCA\\Files_Sharing\\Listener\\UserShareAcceptanceListener' => __DIR__ . '/..' . '/../lib/Listener/UserShareAcceptanceListener.php', | |||
'OCA\\Files_Sharing\\Middleware\\OCSShareAPIMiddleware' => __DIR__ . '/..' . '/../lib/Middleware/OCSShareAPIMiddleware.php', |
@@ -36,9 +36,9 @@ use OCA\Files_Sharing\Capabilities; | |||
use OCA\Files_Sharing\Controller\ExternalSharesController; | |||
use OCA\Files_Sharing\Controller\ShareController; | |||
use OCA\Files_Sharing\External\Manager; | |||
use OCA\Files_Sharing\Listener\GlobalShareAcceptanceListener; | |||
use OCA\Files_Sharing\Listener\LoadAdditionalListener; | |||
use OCA\Files_Sharing\Listener\LoadSidebarListener; | |||
use OCA\Files_Sharing\Listener\ShareInteractionListener; | |||
use OCA\Files_Sharing\Listener\UserAddedToGroupListener; | |||
use OCA\Files_Sharing\Listener\UserShareAcceptanceListener; | |||
use OCA\Files_Sharing\Middleware\OCSShareAPIMiddleware; | |||
@@ -213,6 +213,7 @@ class Application extends App { | |||
// sidebar and files scripts | |||
$dispatcher->addServiceListener(LoadAdditionalScriptsEvent::class, LoadAdditionalListener::class); | |||
$dispatcher->addServiceListener(LoadSidebar::class, LoadSidebarListener::class); | |||
$dispatcher->addServiceListener(ShareCreatedEvent::class, ShareInteractionListener::class); | |||
$dispatcher->addListener('\OCP\Collaboration\Resources::loadAdditionalScripts', function() { | |||
\OCP\Util::addScript('files_sharing', 'dist/collaboration'); | |||
}); |
@@ -0,0 +1,95 @@ | |||
<?php | |||
declare(strict_types=1); | |||
/** | |||
* @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at> | |||
* | |||
* @author 2020 Christoph Wurst <christoph@winzerhof-wurst.at> | |||
* | |||
* @license GNU AGPL version 3 or any later version | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU Affero General Public License as | |||
* published by the Free Software Foundation, either version 3 of the | |||
* License, or (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU Affero General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU Affero General Public License | |||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
*/ | |||
namespace OCA\Files_Sharing\Listener; | |||
use OCP\Contacts\Events\ContactInteractedWithEvent; | |||
use OCP\EventDispatcher\Event; | |||
use OCP\EventDispatcher\IEventDispatcher; | |||
use OCP\EventDispatcher\IEventListener; | |||
use OCP\ILogger; | |||
use OCP\IUserManager; | |||
use OCP\Share\Events\ShareCreatedEvent; | |||
use OCP\Share\IShare; | |||
use function in_array; | |||
class ShareInteractionListener implements IEventListener { | |||
private const SUPPORTED_SHARE_TYPES = [ | |||
IShare::TYPE_USER, | |||
IShare::TYPE_EMAIL, | |||
IShare::TYPE_REMOTE, | |||
]; | |||
/** @var IEventDispatcher */ | |||
private $dispatcher; | |||
/** @var IUserManager */ | |||
private $userManager; | |||
/** @var ILogger */ | |||
private $logger; | |||
public function __construct(IEventDispatcher $dispatcher, | |||
IUserManager $userManager, | |||
ILogger $logger) { | |||
$this->dispatcher = $dispatcher; | |||
$this->userManager = $userManager; | |||
$this->logger = $logger; | |||
} | |||
public function handle(Event $event): void { | |||
if (!($event instanceof ShareCreatedEvent)) { | |||
// Unrelated | |||
return; | |||
} | |||
$share = $event->getShare(); | |||
if (!in_array($share->getShareType(), self::SUPPORTED_SHARE_TYPES, true)) { | |||
$this->logger->debug('Share type does not allow to emit interaction event'); | |||
return; | |||
} | |||
$actor = $this->userManager->get($share->getSharedBy()); | |||
if ($actor === null) { | |||
$this->logger->warning('Share was not created by a user, can\'t emit interaction event'); | |||
return; | |||
} | |||
$interactionEvent = new ContactInteractedWithEvent($actor); | |||
switch ($share->getShareType()) { | |||
case IShare::TYPE_USER: | |||
$interactionEvent->setUid($share->getSharedWith()); | |||
break; | |||
case IShare::TYPE_EMAIL: | |||
$interactionEvent->setEmail($share->getSharedWith()); | |||
break; | |||
case IShare::TYPE_REMOTE: | |||
$interactionEvent->setFederatedCloudId($share->getSharedWith()); | |||
break; | |||
} | |||
$this->dispatcher->dispatchTyped($interactionEvent); | |||
} | |||
} |