the File entity starts with a display text (used by talk) Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>tags/v18.0.0beta1
@@ -32,13 +32,19 @@ use OCP\Files\NotFoundException; | |||
use OCP\IL10N; | |||
use OCP\ILogger; | |||
use OCP\IURLGenerator; | |||
use OCP\IUserSession; | |||
use OCP\Share\IManager as ShareManager; | |||
use OCP\SystemTag\ISystemTag; | |||
use OCP\SystemTag\ISystemTagManager; | |||
use OCP\SystemTag\MapperEvent; | |||
use OCP\WorkflowEngine\EntityContext\IDisplayText; | |||
use OCP\WorkflowEngine\GenericEntityEvent; | |||
use OCP\WorkflowEngine\IEntity; | |||
use OCP\WorkflowEngine\IRuleMatcher; | |||
class File implements IEntity { | |||
class File implements IEntity, IDisplayText { | |||
private const EVENT_NAMESPACE = '\OCP\Files::'; | |||
/** @var IL10N */ | |||
protected $l10n; | |||
@@ -54,21 +60,28 @@ class File implements IEntity { | |||
protected $event; | |||
/** @var ShareManager */ | |||
private $shareManager; | |||
/** @var IUserSession */ | |||
private $userSession; | |||
/** @var ISystemTagManager */ | |||
private $tagManager; | |||
private const EVENT_NAMESPACE = '\OCP\Files::'; | |||
public function __construct( | |||
IL10N $l10n, | |||
IURLGenerator $urlGenerator, | |||
IRootFolder $root, | |||
ILogger $logger, | |||
ShareManager $shareManager | |||
ShareManager $shareManager, | |||
IUserSession $userSession, | |||
ISystemTagManager $tagManager | |||
) { | |||
$this->l10n = $l10n; | |||
$this->urlGenerator = $urlGenerator; | |||
$this->root = $root; | |||
$this->logger = $logger; | |||
$this->shareManager = $shareManager; | |||
$this->userSession = $userSession; | |||
$this->tagManager = $tagManager; | |||
} | |||
public function getName(): string { | |||
@@ -146,4 +159,52 @@ class File implements IEntity { | |||
} | |||
throw new NotFoundException(); | |||
} | |||
public function getDisplayText(int $verbosity = 0): string { | |||
$user = $this->userSession->getUser(); | |||
try { | |||
$node = $this->getNode(); | |||
} catch (NotFoundException $e) { | |||
return ''; | |||
} | |||
$options = [ | |||
$user ? $user->getDisplayName() : $this->t('Someone'), | |||
$node->getName() | |||
]; | |||
switch ($this->eventName) { | |||
case self::EVENT_NAMESPACE . 'postCreate': | |||
return $this->l10n->t('%s created %s', $options); | |||
case self::EVENT_NAMESPACE . 'postWrite': | |||
return $this->l10n->t('%s modified %s', $options); | |||
case self::EVENT_NAMESPACE . 'postDelete': | |||
return $this->l10n->t('%s deleted %s', $options); | |||
case self::EVENT_NAMESPACE . 'postTouch': | |||
return $this->l10n->t('%s accessed %s', $options); | |||
case self::EVENT_NAMESPACE . 'postRename': | |||
return $this->l10n->t('%s renamed %s', $options); | |||
case self::EVENT_NAMESPACE . 'postCopy': | |||
return $this->l10n->t('%s copied %s', $options); | |||
case MapperEvent::EVENT_ASSIGN: | |||
$tagNames = []; | |||
if($this->event instanceof MapperEvent) { | |||
$tagIDs = $this->event->getTags(); | |||
$tagObjects = $this->tagManager->getTagsByIds($tagIDs); | |||
foreach ($tagObjects as $systemTag) { | |||
/** @var ISystemTag $systemTag */ | |||
if($systemTag->isUserVisible()) { | |||
$tagNames[] = $systemTag->getName(); | |||
} | |||
} | |||
} | |||
$filename = array_pop($options); | |||
$tagString = implode(', ', $tagNames); | |||
if($tagString === '') { | |||
return ''; | |||
} | |||
array_push($options, $tagString, $filename); | |||
return $this->l10n->t('%s assigned %s to %s', $options); | |||
} | |||
} | |||
} |
@@ -94,6 +94,13 @@ class RuleMatcher implements IRuleMatcher { | |||
$this->entity = $entity; | |||
} | |||
public function getEntity(): IEntity { | |||
if($this->entity === null) { | |||
throw new \LogicException('Entity was not set yet'); | |||
} | |||
return $this->entity; | |||
} | |||
public function getFlows(bool $returnFirstMatchingOperationOnly = true): array { | |||
if(!$this->operation) { | |||
throw new RuntimeException('Operation is not set'); |
@@ -452,6 +452,10 @@ return array( | |||
'OCP\\User\\Backend\\ISetPasswordBackend' => $baseDir . '/lib/public/User/Backend/ISetPasswordBackend.php', | |||
'OCP\\User\\Events\\PostLoginEvent' => $baseDir . '/lib/public/User/Events/PostLoginEvent.php', | |||
'OCP\\Util' => $baseDir . '/lib/public/Util.php', | |||
'OCP\\WorkflowEngine\\EntityContext\\IDisplayName' => $baseDir . '/lib/public/WorkflowEngine/EntityContext/IDisplayName.php', | |||
'OCP\\WorkflowEngine\\EntityContext\\IDisplayText' => $baseDir . '/lib/public/WorkflowEngine/EntityContext/IDisplayText.php', | |||
'OCP\\WorkflowEngine\\EntityContext\\IIcon' => $baseDir . '/lib/public/WorkflowEngine/EntityContext/IIcon.php', | |||
'OCP\\WorkflowEngine\\EntityContext\\IUrl' => $baseDir . '/lib/public/WorkflowEngine/EntityContext/IUrl.php', | |||
'OCP\\WorkflowEngine\\GenericEntityEvent' => $baseDir . '/lib/public/WorkflowEngine/GenericEntityEvent.php', | |||
'OCP\\WorkflowEngine\\ICheck' => $baseDir . '/lib/public/WorkflowEngine/ICheck.php', | |||
'OCP\\WorkflowEngine\\IComplexOperation' => $baseDir . '/lib/public/WorkflowEngine/IComplexOperation.php', |
@@ -481,6 +481,10 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c | |||
'OCP\\User\\Backend\\ISetPasswordBackend' => __DIR__ . '/../../..' . '/lib/public/User/Backend/ISetPasswordBackend.php', | |||
'OCP\\User\\Events\\PostLoginEvent' => __DIR__ . '/../../..' . '/lib/public/User/Events/PostLoginEvent.php', | |||
'OCP\\Util' => __DIR__ . '/../../..' . '/lib/public/Util.php', | |||
'OCP\\WorkflowEngine\\EntityContext\\IDisplayName' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/EntityContext/IDisplayName.php', | |||
'OCP\\WorkflowEngine\\EntityContext\\IDisplayText' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/EntityContext/IDisplayText.php', | |||
'OCP\\WorkflowEngine\\EntityContext\\IIcon' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/EntityContext/IIcon.php', | |||
'OCP\\WorkflowEngine\\EntityContext\\IUrl' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/EntityContext/IUrl.php', | |||
'OCP\\WorkflowEngine\\GenericEntityEvent' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/GenericEntityEvent.php', | |||
'OCP\\WorkflowEngine\\ICheck' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/ICheck.php', | |||
'OCP\\WorkflowEngine\\IComplexOperation' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/IComplexOperation.php', |
@@ -0,0 +1,41 @@ | |||
<?php | |||
declare(strict_types=1); | |||
/** | |||
* @copyright Copyright (c) 2019 Arthur Schiwon <blizzz@arthur-schiwon.de> | |||
* | |||
* @author Arthur Schiwon <blizzz@arthur-schiwon.de> | |||
* | |||
* @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 OCP\WorkflowEngine\EntityContext; | |||
/** | |||
* Interface IDisplayName | |||
* | |||
* @package OCP\WorkflowEngine\EntityContext | |||
* | |||
* @since 18.0.0 | |||
*/ | |||
interface IDisplayName { | |||
/** | |||
* returns the end user facing name of the object related to the entity | |||
* | |||
* @since 18.0.0 | |||
*/ | |||
public function getDisplayName(): string; | |||
} |
@@ -0,0 +1,47 @@ | |||
<?php | |||
declare(strict_types=1); | |||
/** | |||
* @copyright Copyright (c) 2019 Arthur Schiwon <blizzz@arthur-schiwon.de> | |||
* | |||
* @author Arthur Schiwon <blizzz@arthur-schiwon.de> | |||
* | |||
* @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 OCP\WorkflowEngine\EntityContext; | |||
/** | |||
* Interface IDisplayText | |||
* | |||
* @package OCP\WorkflowEngine\EntityContext | |||
* | |||
* @since 18.0.0 | |||
*/ | |||
interface IDisplayText { | |||
/** | |||
* returns translated text used for display to the end user. For instance, | |||
* it can describe the event in a human readable way. | |||
* | |||
* The entity may react to a verbosity level that is provided. With the | |||
* basic level, 0, it would return brief information, and more with higher | |||
* numbers. All information shall be shown at a level of 3. | |||
* | |||
* @since 18.0.0 | |||
*/ | |||
public function getDisplayText(int $verbosity = 0): string; | |||
} |
@@ -0,0 +1,42 @@ | |||
<?php | |||
declare(strict_types=1); | |||
/** | |||
* @copyright Copyright (c) 2019 Arthur Schiwon <blizzz@arthur-schiwon.de> | |||
* | |||
* @author Arthur Schiwon <blizzz@arthur-schiwon.de> | |||
* | |||
* @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 OCP\WorkflowEngine\EntityContext; | |||
/** | |||
* Interface IIcon | |||
* | |||
* @package OCP\WorkflowEngine\EntityContext | |||
* | |||
* @since 18.0.0 | |||
*/ | |||
interface IIcon { | |||
/** | |||
* returns a URL to an icon that is related to the entity, for instance | |||
* a group icon for groups. | |||
* | |||
* @since 18.0.0 | |||
*/ | |||
public function getIconUrl(): string; | |||
} |
@@ -0,0 +1,41 @@ | |||
<?php | |||
declare(strict_types=1); | |||
/** | |||
* @copyright Copyright (c) 2019 Arthur Schiwon <blizzz@arthur-schiwon.de> | |||
* | |||
* @author Arthur Schiwon <blizzz@arthur-schiwon.de> | |||
* | |||
* @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 OCP\WorkflowEngine\EntityContext; | |||
/** | |||
* Interface IUrl | |||
* | |||
* @package OCP\WorkflowEngine\EntityContext | |||
* | |||
* @since 18.0.0 | |||
*/ | |||
interface IUrl { | |||
/** | |||
* returns a URL that is related to the entity, e.g. the link to a share | |||
* | |||
* @since 18.0.0 | |||
*/ | |||
public function getUrl(): string; | |||
} |
@@ -67,4 +67,13 @@ interface IRuleMatcher extends IFileCheck { | |||
* @since 18.0.0 | |||
*/ | |||
public function setEntity(IEntity $entity): void; | |||
/** | |||
* returns the entity which might provide more information, depending on | |||
* the interfaces it implements | |||
* | |||
* @return IEntity | |||
* @since 18.0.0 | |||
*/ | |||
public function getEntity(): IEntity; | |||
} |