Signed-off-by: Joas Schilling <coding@schilljs.com>pull/2496/head
parent
3bea7ac6ac
commit
8baf986d3b
@ -0,0 +1,151 @@ |
||||
<?php |
||||
/** |
||||
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> |
||||
* |
||||
* @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\Activity; |
||||
|
||||
use OCP\Activity\IEvent; |
||||
use OCP\Activity\IEventMerger; |
||||
use OCP\Activity\IManager; |
||||
use OCP\Activity\IProvider; |
||||
use OCP\IL10N; |
||||
use OCP\IURLGenerator; |
||||
use OCP\L10N\IFactory; |
||||
|
||||
class FavoriteProvider implements IProvider { |
||||
|
||||
const SUBJECT_ADDED = 'added_favorite'; |
||||
const SUBJECT_REMOVED = 'removed_favorite'; |
||||
|
||||
/** @var IFactory */ |
||||
protected $languageFactory; |
||||
|
||||
/** @var IL10N */ |
||||
protected $l; |
||||
|
||||
/** @var IURLGenerator */ |
||||
protected $url; |
||||
|
||||
/** @var IManager */ |
||||
protected $activityManager; |
||||
|
||||
/** @var IEventMerger */ |
||||
protected $eventMerger; |
||||
|
||||
/** |
||||
* @param IFactory $languageFactory |
||||
* @param IURLGenerator $url |
||||
* @param IManager $activityManager |
||||
* @param IEventMerger $eventMerger |
||||
*/ |
||||
public function __construct(IFactory $languageFactory, IURLGenerator $url, IManager $activityManager, IEventMerger $eventMerger) { |
||||
$this->languageFactory = $languageFactory; |
||||
$this->url = $url; |
||||
$this->activityManager = $activityManager; |
||||
$this->eventMerger = $eventMerger; |
||||
} |
||||
|
||||
/** |
||||
* @param string $language |
||||
* @param IEvent $event |
||||
* @param IEvent|null $previousEvent |
||||
* @return IEvent |
||||
* @throws \InvalidArgumentException |
||||
* @since 11.0.0 |
||||
*/ |
||||
public function parse($language, IEvent $event, IEvent $previousEvent = null) { |
||||
if ($event->getApp() !== 'files' || $event->getType() !== 'favorite') { |
||||
throw new \InvalidArgumentException(); |
||||
} |
||||
|
||||
$this->l = $this->languageFactory->get('files', $language); |
||||
|
||||
if ($this->activityManager->isFormattingFilteredObject()) { |
||||
try { |
||||
return $this->parseShortVersion($event); |
||||
} catch (\InvalidArgumentException $e) { |
||||
// Ignore and simply use the long version... |
||||
} |
||||
} |
||||
|
||||
return $this->parseLongVersion($event, $previousEvent); |
||||
} |
||||
|
||||
/** |
||||
* @param IEvent $event |
||||
* @return IEvent |
||||
* @throws \InvalidArgumentException |
||||
* @since 11.0.0 |
||||
*/ |
||||
public function parseShortVersion(IEvent $event) { |
||||
|
||||
if ($event->getSubject() === self::SUBJECT_ADDED) { |
||||
$event->setParsedSubject($this->l->t('Added to favorites')) |
||||
->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/starred.svg'))); |
||||
} else if ($event->getSubject() === self::SUBJECT_REMOVED) { |
||||
$event->setParsedSubject($this->l->t('Removed from favorites')) |
||||
->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/star.svg'))); |
||||
} else { |
||||
throw new \InvalidArgumentException(); |
||||
} |
||||
|
||||
return $event; |
||||
} |
||||
|
||||
/** |
||||
* @param IEvent $event |
||||
* @param IEvent|null $previousEvent |
||||
* @return IEvent |
||||
* @throws \InvalidArgumentException |
||||
* @since 11.0.0 |
||||
*/ |
||||
public function parseLongVersion(IEvent $event, IEvent $previousEvent = null) { |
||||
|
||||
if ($event->getSubject() === self::SUBJECT_ADDED) { |
||||
$subject = $this->l->t('You added {file} to your favorites'); |
||||
$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/starred.svg'))); |
||||
} else if ($event->getSubject() === self::SUBJECT_REMOVED) { |
||||
$subject = $this->l->t('You removed {file} from your favorites'); |
||||
$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/star.svg'))); |
||||
} else { |
||||
throw new \InvalidArgumentException(); |
||||
} |
||||
|
||||
$this->setSubjects($event, $subject); |
||||
$event = $this->eventMerger->mergeEvents('file', $event, $previousEvent); |
||||
return $event; |
||||
} |
||||
|
||||
/** |
||||
* @param IEvent $event |
||||
* @param string $subject |
||||
*/ |
||||
protected function setSubjects(IEvent $event, $subject) { |
||||
$parameter = [ |
||||
'type' => 'file', |
||||
'id' => $event->getObjectId(), |
||||
'name' => basename($event->getObjectName()), |
||||
'path' => $event->getObjectName(), |
||||
]; |
||||
|
||||
$event->setParsedSubject(str_replace('{file}', trim($parameter['path'], '/'), $subject)) |
||||
->setRichSubject($subject, ['file' => $parameter]); |
||||
} |
||||
} |
@ -0,0 +1,98 @@ |
||||
<?php |
||||
/** |
||||
* @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> |
||||
* |
||||
* @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\Activity\Settings; |
||||
|
||||
|
||||
use OCP\Activity\ISetting; |
||||
use OCP\IL10N; |
||||
|
||||
class FavoriteAction implements ISetting { |
||||
|
||||
/** @var IL10N */ |
||||
protected $l; |
||||
|
||||
/** |
||||
* @param IL10N $l |
||||
*/ |
||||
public function __construct(IL10N $l) { |
||||
$this->l = $l; |
||||
} |
||||
|
||||
/** |
||||
* @return string Lowercase a-z and underscore only identifier |
||||
* @since 11.0.0 |
||||
*/ |
||||
public function getIdentifier() { |
||||
return 'favorite'; |
||||
} |
||||
|
||||
/** |
||||
* @return string A translated string |
||||
* @since 11.0.0 |
||||
*/ |
||||
public function getName() { |
||||
return $this->l->t('A file has been added to or removed from your <strong>favorites</strong>'); |
||||
} |
||||
|
||||
/** |
||||
* @return int whether the filter should be rather on the top or bottom of |
||||
* the admin section. The filters are arranged in ascending order of the |
||||
* priority values. It is required to return a value between 0 and 100. |
||||
* @since 11.0.0 |
||||
*/ |
||||
public function getPriority() { |
||||
return 5; |
||||
} |
||||
|
||||
/** |
||||
* @return bool True when the option can be changed for the stream |
||||
* @since 11.0.0 |
||||
*/ |
||||
public function canChangeStream() { |
||||
return true; |
||||
} |
||||
|
||||
/** |
||||
* @return bool True when the option can be changed for the stream |
||||
* @since 11.0.0 |
||||
*/ |
||||
public function isDefaultEnabledStream() { |
||||
return true; |
||||
} |
||||
|
||||
/** |
||||
* @return bool True when the option can be changed for the mail |
||||
* @since 11.0.0 |
||||
*/ |
||||
public function canChangeMail() { |
||||
return true; |
||||
} |
||||
|
||||
/** |
||||
* @return bool True when the option can be changed for the stream |
||||
* @since 11.0.0 |
||||
*/ |
||||
public function isDefaultEnabledMail() { |
||||
return false; |
||||
} |
||||
} |
||||
|
Loading…
Reference in new issue