| @@ -14,7 +14,10 @@ | ||
| 14 | 14 | <input type="submit" id="submitMaxUpload" | 
| 15 | 15 | value="<?php p($l->t( 'Save' )); ?>"/> | 
| 16 | 16 |  			<p><em><?php p($l->t('With PHP-FPM it might take 5 minutes for changes to be applied.')); ?></em></p> | 
| 17 | - <?php else: ?> | |
| 18 | -			<p><em><?php p($l->t('Missing permissions to edit from here.')); ?></em></p> | |
| 17 | +		<?php else { | |
| 18 | + : ?> | |
| 19 | +			<p><em><?php p($l->t('Missing permissions to edit from here.')); | |
| 20 | +} | |
| 21 | +?></em></p> | |
| 19 | 22 | <?php endif; ?> | 
| 20 | 23 | </div> | 
| @@ -26,7 +26,7 @@ discard block | ||
| 26 | 26 | $dir = '/'; | 
| 27 | 27 | |
| 28 | 28 |  if (isset($_GET['dir'])) { | 
| 29 | - $dir = (string)$_GET['dir']; | |
| 29 | + $dir = (string)$_GET['dir']; | |
| 30 | 30 | } | 
| 31 | 31 | |
| 32 | 32 | OCP\JSON::checkLoggedIn(); | 
| @@ -34,7 +34,7 @@ discard block | ||
| 34 | 34 | |
| 35 | 35 | // send back json | 
| 36 | 36 |  try { | 
| 37 | -	OCP\JSON::success(array('data' => \OCA\Files\Helper::buildFileStorageStatistics($dir))); | |
| 37 | +    OCP\JSON::success(array('data' => \OCA\Files\Helper::buildFileStorageStatistics($dir))); | |
| 38 | 38 |  } catch (\OCP\Files\NotFoundException $e) { | 
| 39 | - OCP\JSON::error(['data' => ['message' => 'Folder not found']]); | |
| 39 | + OCP\JSON::error(['data' => ['message' => 'Folder not found']]); | |
| 40 | 40 | } | 
| @@ -37,7 +37,7 @@ discard block | ||
| 37 | 37 | $files_list = json_decode($files); | 
| 38 | 38 | // in case we get only a single file | 
| 39 | 39 |  if (!is_array($files_list)) { | 
| 40 | - $files_list = array($files); | |
| 40 | + $files_list = array($files); | |
| 41 | 41 | } | 
| 42 | 42 | |
| 43 | 43 | /** | 
| @@ -46,9 +46,9 @@ discard block | ||
| 46 | 46 | * alphanumeric characters | 
| 47 | 47 | */ | 
| 48 | 48 | if(isset($_GET['downloadStartSecret']) | 
| 49 | - && !isset($_GET['downloadStartSecret'][32]) | |
| 50 | -	&& preg_match('!^[a-zA-Z0-9]+$!', $_GET['downloadStartSecret']) === 1) { | |
| 51 | -	setcookie('ocDownloadStarted', $_GET['downloadStartSecret'], time() + 20, '/'); | |
| 49 | + && !isset($_GET['downloadStartSecret'][32]) | |
| 50 | +    && preg_match('!^[a-zA-Z0-9]+$!', $_GET['downloadStartSecret']) === 1) { | |
| 51 | +    setcookie('ocDownloadStarted', $_GET['downloadStartSecret'], time() + 20, '/'); | |
| 52 | 52 | } | 
| 53 | 53 | |
| 54 | 54 | $server_params = array( 'head' => \OC::$server->getRequest()->getMethod() == 'HEAD' ); | 
| @@ -57,7 +57,7 @@ discard block | ||
| 57 | 57 | * Http range requests support | 
| 58 | 58 | */ | 
| 59 | 59 |  if (isset($_SERVER['HTTP_RANGE'])) { | 
| 60 | -	$server_params['range'] = \OC::$server->getRequest()->getHeader('Range'); | |
| 60 | +    $server_params['range'] = \OC::$server->getRequest()->getHeader('Range'); | |
| 61 | 61 | } | 
| 62 | 62 | |
| 63 | 63 | OC_Files::get($dir, $files_list, $server_params); | 
| @@ -31,131 +31,131 @@ | ||
| 31 | 31 | |
| 32 | 32 |  class FavoriteProvider implements IProvider { | 
| 33 | 33 | |
| 34 | - const SUBJECT_ADDED = 'added_favorite'; | |
| 35 | - const SUBJECT_REMOVED = 'removed_favorite'; | |
| 36 | - | |
| 37 | - /** @var IFactory */ | |
| 38 | - protected $languageFactory; | |
| 39 | - | |
| 40 | - /** @var IL10N */ | |
| 41 | - protected $l; | |
| 42 | - | |
| 43 | - /** @var IURLGenerator */ | |
| 44 | - protected $url; | |
| 45 | - | |
| 46 | - /** @var IManager */ | |
| 47 | - protected $activityManager; | |
| 48 | - | |
| 49 | - /** @var IEventMerger */ | |
| 50 | - protected $eventMerger; | |
| 51 | - | |
| 52 | - /** | |
| 53 | - * @param IFactory $languageFactory | |
| 54 | - * @param IURLGenerator $url | |
| 55 | - * @param IManager $activityManager | |
| 56 | - * @param IEventMerger $eventMerger | |
| 57 | - */ | |
| 58 | -	public function __construct(IFactory $languageFactory, IURLGenerator $url, IManager $activityManager, IEventMerger $eventMerger) { | |
| 59 | - $this->languageFactory = $languageFactory; | |
| 60 | - $this->url = $url; | |
| 61 | - $this->activityManager = $activityManager; | |
| 62 | - $this->eventMerger = $eventMerger; | |
| 63 | - } | |
| 64 | - | |
| 65 | - /** | |
| 66 | - * @param string $language | |
| 67 | - * @param IEvent $event | |
| 68 | - * @param IEvent|null $previousEvent | |
| 69 | - * @return IEvent | |
| 70 | - * @throws \InvalidArgumentException | |
| 71 | - * @since 11.0.0 | |
| 72 | - */ | |
| 73 | -	public function parse($language, IEvent $event, IEvent $previousEvent = null) { | |
| 74 | -		if ($event->getApp() !== 'files' || $event->getType() !== 'favorite') { | |
| 75 | - throw new \InvalidArgumentException(); | |
| 76 | - } | |
| 77 | - | |
| 78 | -		$this->l = $this->languageFactory->get('files', $language); | |
| 79 | - | |
| 80 | -		if ($this->activityManager->isFormattingFilteredObject()) { | |
| 81 | -			try { | |
| 82 | - return $this->parseShortVersion($event); | |
| 83 | -			} catch (\InvalidArgumentException $e) { | |
| 84 | - // Ignore and simply use the long version... | |
| 85 | - } | |
| 86 | - } | |
| 87 | - | |
| 88 | - return $this->parseLongVersion($event, $previousEvent); | |
| 89 | - } | |
| 90 | - | |
| 91 | - /** | |
| 92 | - * @param IEvent $event | |
| 93 | - * @return IEvent | |
| 94 | - * @throws \InvalidArgumentException | |
| 95 | - * @since 11.0.0 | |
| 96 | - */ | |
| 97 | -	public function parseShortVersion(IEvent $event) { | |
| 98 | - | |
| 99 | -		if ($event->getSubject() === self::SUBJECT_ADDED) { | |
| 100 | -			$event->setParsedSubject($this->l->t('Added to favorites')) | |
| 101 | -				->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/starred.svg'))); | |
| 102 | -		} else if ($event->getSubject() === self::SUBJECT_REMOVED) { | |
| 103 | -			$event->setParsedSubject($this->l->t('Removed from favorites')) | |
| 104 | -				->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/star.svg'))); | |
| 105 | -		} else { | |
| 106 | - throw new \InvalidArgumentException(); | |
| 107 | - } | |
| 108 | - | |
| 109 | - return $event; | |
| 110 | - } | |
| 111 | - | |
| 112 | - /** | |
| 113 | - * @param IEvent $event | |
| 114 | - * @param IEvent|null $previousEvent | |
| 115 | - * @return IEvent | |
| 116 | - * @throws \InvalidArgumentException | |
| 117 | - * @since 11.0.0 | |
| 118 | - */ | |
| 119 | -	public function parseLongVersion(IEvent $event, IEvent $previousEvent = null) { | |
| 120 | - | |
| 121 | -		if ($event->getSubject() === self::SUBJECT_ADDED) { | |
| 122 | -			$subject = $this->l->t('You added {file} to your favorites'); | |
| 123 | -			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/starred.svg'))); | |
| 124 | -		} else if ($event->getSubject() === self::SUBJECT_REMOVED) { | |
| 125 | -			$subject = $this->l->t('You removed {file} from your favorites'); | |
| 126 | -			$event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/star.svg'))); | |
| 127 | -		} else { | |
| 128 | - throw new \InvalidArgumentException(); | |
| 129 | - } | |
| 130 | - | |
| 131 | - $this->setSubjects($event, $subject); | |
| 132 | -		$event = $this->eventMerger->mergeEvents('file', $event, $previousEvent); | |
| 133 | - return $event; | |
| 134 | - } | |
| 135 | - | |
| 136 | - /** | |
| 137 | - * @param IEvent $event | |
| 138 | - * @param string $subject | |
| 139 | - */ | |
| 140 | -	protected function setSubjects(IEvent $event, $subject) { | |
| 141 | - $subjectParams = $event->getSubjectParameters(); | |
| 142 | -		if (empty($subjectParams)) { | |
| 143 | - // Try to fall back to the old way, but this does not work for emails. | |
| 144 | - // But at least old activities still work. | |
| 145 | - $subjectParams = [ | |
| 146 | - 'id' => $event->getObjectId(), | |
| 147 | - 'path' => $event->getObjectName(), | |
| 148 | - ]; | |
| 149 | - } | |
| 150 | - $parameter = [ | |
| 151 | - 'type' => 'file', | |
| 152 | - 'id' => $subjectParams['id'], | |
| 153 | - 'name' => basename($subjectParams['path']), | |
| 154 | - 'path' => trim($subjectParams['path'], '/'), | |
| 155 | -			'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $subjectParams['id']]), | |
| 156 | - ]; | |
| 157 | - | |
| 158 | -		$event->setParsedSubject(str_replace('{file}', $parameter['path'], $subject)) | |
| 159 | - ->setRichSubject($subject, ['file' => $parameter]); | |
| 160 | - } | |
| 34 | + const SUBJECT_ADDED = 'added_favorite'; | |
| 35 | + const SUBJECT_REMOVED = 'removed_favorite'; | |
| 36 | + | |
| 37 | + /** @var IFactory */ | |
| 38 | + protected $languageFactory; | |
| 39 | + | |
| 40 | + /** @var IL10N */ | |
| 41 | + protected $l; | |
| 42 | + | |
| 43 | + /** @var IURLGenerator */ | |
| 44 | + protected $url; | |
| 45 | + | |
| 46 | + /** @var IManager */ | |
| 47 | + protected $activityManager; | |
| 48 | + | |
| 49 | + /** @var IEventMerger */ | |
| 50 | + protected $eventMerger; | |
| 51 | + | |
| 52 | + /** | |
| 53 | + * @param IFactory $languageFactory | |
| 54 | + * @param IURLGenerator $url | |
| 55 | + * @param IManager $activityManager | |
| 56 | + * @param IEventMerger $eventMerger | |
| 57 | + */ | |
| 58 | +    public function __construct(IFactory $languageFactory, IURLGenerator $url, IManager $activityManager, IEventMerger $eventMerger) { | |
| 59 | + $this->languageFactory = $languageFactory; | |
| 60 | + $this->url = $url; | |
| 61 | + $this->activityManager = $activityManager; | |
| 62 | + $this->eventMerger = $eventMerger; | |
| 63 | + } | |
| 64 | + | |
| 65 | + /** | |
| 66 | + * @param string $language | |
| 67 | + * @param IEvent $event | |
| 68 | + * @param IEvent|null $previousEvent | |
| 69 | + * @return IEvent | |
| 70 | + * @throws \InvalidArgumentException | |
| 71 | + * @since 11.0.0 | |
| 72 | + */ | |
| 73 | +    public function parse($language, IEvent $event, IEvent $previousEvent = null) { | |
| 74 | +        if ($event->getApp() !== 'files' || $event->getType() !== 'favorite') { | |
| 75 | + throw new \InvalidArgumentException(); | |
| 76 | + } | |
| 77 | + | |
| 78 | +        $this->l = $this->languageFactory->get('files', $language); | |
| 79 | + | |
| 80 | +        if ($this->activityManager->isFormattingFilteredObject()) { | |
| 81 | +            try { | |
| 82 | + return $this->parseShortVersion($event); | |
| 83 | +            } catch (\InvalidArgumentException $e) { | |
| 84 | + // Ignore and simply use the long version... | |
| 85 | + } | |
| 86 | + } | |
| 87 | + | |
| 88 | + return $this->parseLongVersion($event, $previousEvent); | |
| 89 | + } | |
| 90 | + | |
| 91 | + /** | |
| 92 | + * @param IEvent $event | |
| 93 | + * @return IEvent | |
| 94 | + * @throws \InvalidArgumentException | |
| 95 | + * @since 11.0.0 | |
| 96 | + */ | |
| 97 | +    public function parseShortVersion(IEvent $event) { | |
| 98 | + | |
| 99 | +        if ($event->getSubject() === self::SUBJECT_ADDED) { | |
| 100 | +            $event->setParsedSubject($this->l->t('Added to favorites')) | |
| 101 | +                ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/starred.svg'))); | |
| 102 | +        } else if ($event->getSubject() === self::SUBJECT_REMOVED) { | |
| 103 | +            $event->setParsedSubject($this->l->t('Removed from favorites')) | |
| 104 | +                ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/star.svg'))); | |
| 105 | +        } else { | |
| 106 | + throw new \InvalidArgumentException(); | |
| 107 | + } | |
| 108 | + | |
| 109 | + return $event; | |
| 110 | + } | |
| 111 | + | |
| 112 | + /** | |
| 113 | + * @param IEvent $event | |
| 114 | + * @param IEvent|null $previousEvent | |
| 115 | + * @return IEvent | |
| 116 | + * @throws \InvalidArgumentException | |
| 117 | + * @since 11.0.0 | |
| 118 | + */ | |
| 119 | +    public function parseLongVersion(IEvent $event, IEvent $previousEvent = null) { | |
| 120 | + | |
| 121 | +        if ($event->getSubject() === self::SUBJECT_ADDED) { | |
| 122 | +            $subject = $this->l->t('You added {file} to your favorites'); | |
| 123 | +            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/starred.svg'))); | |
| 124 | +        } else if ($event->getSubject() === self::SUBJECT_REMOVED) { | |
| 125 | +            $subject = $this->l->t('You removed {file} from your favorites'); | |
| 126 | +            $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/star.svg'))); | |
| 127 | +        } else { | |
| 128 | + throw new \InvalidArgumentException(); | |
| 129 | + } | |
| 130 | + | |
| 131 | + $this->setSubjects($event, $subject); | |
| 132 | +        $event = $this->eventMerger->mergeEvents('file', $event, $previousEvent); | |
| 133 | + return $event; | |
| 134 | + } | |
| 135 | + | |
| 136 | + /** | |
| 137 | + * @param IEvent $event | |
| 138 | + * @param string $subject | |
| 139 | + */ | |
| 140 | +    protected function setSubjects(IEvent $event, $subject) { | |
| 141 | + $subjectParams = $event->getSubjectParameters(); | |
| 142 | +        if (empty($subjectParams)) { | |
| 143 | + // Try to fall back to the old way, but this does not work for emails. | |
| 144 | + // But at least old activities still work. | |
| 145 | + $subjectParams = [ | |
| 146 | + 'id' => $event->getObjectId(), | |
| 147 | + 'path' => $event->getObjectName(), | |
| 148 | + ]; | |
| 149 | + } | |
| 150 | + $parameter = [ | |
| 151 | + 'type' => 'file', | |
| 152 | + 'id' => $subjectParams['id'], | |
| 153 | + 'name' => basename($subjectParams['path']), | |
| 154 | + 'path' => trim($subjectParams['path'], '/'), | |
| 155 | +            'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $subjectParams['id']]), | |
| 156 | + ]; | |
| 157 | + | |
| 158 | +        $event->setParsedSubject(str_replace('{file}', $parameter['path'], $subject)) | |
| 159 | + ->setRichSubject($subject, ['file' => $parameter]); | |
| 160 | + } | |
| 161 | 161 | } | 
| @@ -32,129 +32,129 @@ | ||
| 32 | 32 | |
| 33 | 33 |  class Favorites implements IFilter { | 
| 34 | 34 | |
| 35 | - /** @var IL10N */ | |
| 36 | - protected $l; | |
| 37 | - | |
| 38 | - /** @var IURLGenerator */ | |
| 39 | - protected $url; | |
| 40 | - | |
| 41 | - /** @var IManager */ | |
| 42 | - protected $activityManager; | |
| 43 | - | |
| 44 | - /** @var Helper */ | |
| 45 | - protected $helper; | |
| 46 | - | |
| 47 | - /** @var IDBConnection */ | |
| 48 | - protected $db; | |
| 49 | - | |
| 50 | - /** | |
| 51 | - * @param IL10N $l | |
| 52 | - * @param IURLGenerator $url | |
| 53 | - * @param IManager $activityManager | |
| 54 | - * @param Helper $helper | |
| 55 | - * @param IDBConnection $db | |
| 56 | - */ | |
| 57 | -	public function __construct(IL10N $l, IURLGenerator $url, IManager $activityManager, Helper $helper, IDBConnection $db) { | |
| 58 | - $this->l = $l; | |
| 59 | - $this->url = $url; | |
| 60 | - $this->activityManager = $activityManager; | |
| 61 | - $this->helper = $helper; | |
| 62 | - $this->db = $db; | |
| 63 | - } | |
| 64 | - | |
| 65 | - /** | |
| 66 | - * @return string Lowercase a-z only identifier | |
| 67 | - * @since 11.0.0 | |
| 68 | - */ | |
| 69 | -	public function getIdentifier() { | |
| 70 | - return 'files_favorites'; | |
| 71 | - } | |
| 72 | - | |
| 73 | - /** | |
| 74 | - * @return string A translated string | |
| 75 | - * @since 11.0.0 | |
| 76 | - */ | |
| 77 | -	public function getName() { | |
| 78 | -		return $this->l->t('Favorites'); | |
| 79 | - } | |
| 80 | - | |
| 81 | - /** | |
| 82 | - * @return int | |
| 83 | - * @since 11.0.0 | |
| 84 | - */ | |
| 85 | -	public function getPriority() { | |
| 86 | - return 10; | |
| 87 | - } | |
| 88 | - | |
| 89 | - /** | |
| 90 | - * @return string Full URL to an icon, empty string when none is given | |
| 91 | - * @since 11.0.0 | |
| 92 | - */ | |
| 93 | -	public function getIcon() { | |
| 94 | -		return $this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/star-dark.svg')); | |
| 95 | - } | |
| 96 | - | |
| 97 | - /** | |
| 98 | - * @param string[] $types | |
| 99 | - * @return string[] An array of allowed apps from which activities should be displayed | |
| 100 | - * @since 11.0.0 | |
| 101 | - */ | |
| 102 | -	public function filterTypes(array $types) { | |
| 103 | - return array_intersect([ | |
| 104 | - 'file_created', | |
| 105 | - 'file_changed', | |
| 106 | - 'file_deleted', | |
| 107 | - 'file_restored', | |
| 108 | - ], $types); | |
| 109 | - } | |
| 110 | - | |
| 111 | - /** | |
| 112 | - * @return string[] An array of allowed apps from which activities should be displayed | |
| 113 | - * @since 11.0.0 | |
| 114 | - */ | |
| 115 | -	public function allowedApps() { | |
| 116 | - return ['files']; | |
| 117 | - } | |
| 118 | - | |
| 119 | - /** | |
| 120 | - * @param IQueryBuilder $query | |
| 121 | - */ | |
| 122 | -	public function filterFavorites(IQueryBuilder $query) { | |
| 123 | -		try { | |
| 124 | - $user = $this->activityManager->getCurrentUserId(); | |
| 125 | -		} catch (\UnexpectedValueException $e) { | |
| 126 | - return; | |
| 127 | - } | |
| 128 | - | |
| 129 | -		try { | |
| 130 | - $favorites = $this->helper->getFavoriteFilePaths($user); | |
| 131 | -		} catch (\RuntimeException $e) { | |
| 132 | - return; | |
| 133 | - } | |
| 134 | - | |
| 135 | - $limitations = []; | |
| 136 | -		if (!empty($favorites['items'])) { | |
| 137 | -			$limitations[] = $query->expr()->in('file', $query->createNamedParameter($favorites['items'], IQueryBuilder::PARAM_STR_ARRAY)); | |
| 138 | - } | |
| 139 | -		foreach ($favorites['folders'] as $favorite) { | |
| 140 | -			$limitations[] = $query->expr()->like('file', $query->createNamedParameter( | |
| 141 | - $this->db->escapeLikeParameter($favorite . '/') . '%' | |
| 142 | - )); | |
| 143 | - } | |
| 144 | - | |
| 145 | -		if (empty($limitations)) { | |
| 146 | - return; | |
| 147 | - } | |
| 148 | - | |
| 149 | -		$function = $query->createFunction(' | |
| 35 | + /** @var IL10N */ | |
| 36 | + protected $l; | |
| 37 | + | |
| 38 | + /** @var IURLGenerator */ | |
| 39 | + protected $url; | |
| 40 | + | |
| 41 | + /** @var IManager */ | |
| 42 | + protected $activityManager; | |
| 43 | + | |
| 44 | + /** @var Helper */ | |
| 45 | + protected $helper; | |
| 46 | + | |
| 47 | + /** @var IDBConnection */ | |
| 48 | + protected $db; | |
| 49 | + | |
| 50 | + /** | |
| 51 | + * @param IL10N $l | |
| 52 | + * @param IURLGenerator $url | |
| 53 | + * @param IManager $activityManager | |
| 54 | + * @param Helper $helper | |
| 55 | + * @param IDBConnection $db | |
| 56 | + */ | |
| 57 | +    public function __construct(IL10N $l, IURLGenerator $url, IManager $activityManager, Helper $helper, IDBConnection $db) { | |
| 58 | + $this->l = $l; | |
| 59 | + $this->url = $url; | |
| 60 | + $this->activityManager = $activityManager; | |
| 61 | + $this->helper = $helper; | |
| 62 | + $this->db = $db; | |
| 63 | + } | |
| 64 | + | |
| 65 | + /** | |
| 66 | + * @return string Lowercase a-z only identifier | |
| 67 | + * @since 11.0.0 | |
| 68 | + */ | |
| 69 | +    public function getIdentifier() { | |
| 70 | + return 'files_favorites'; | |
| 71 | + } | |
| 72 | + | |
| 73 | + /** | |
| 74 | + * @return string A translated string | |
| 75 | + * @since 11.0.0 | |
| 76 | + */ | |
| 77 | +    public function getName() { | |
| 78 | +        return $this->l->t('Favorites'); | |
| 79 | + } | |
| 80 | + | |
| 81 | + /** | |
| 82 | + * @return int | |
| 83 | + * @since 11.0.0 | |
| 84 | + */ | |
| 85 | +    public function getPriority() { | |
| 86 | + return 10; | |
| 87 | + } | |
| 88 | + | |
| 89 | + /** | |
| 90 | + * @return string Full URL to an icon, empty string when none is given | |
| 91 | + * @since 11.0.0 | |
| 92 | + */ | |
| 93 | +    public function getIcon() { | |
| 94 | +        return $this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/star-dark.svg')); | |
| 95 | + } | |
| 96 | + | |
| 97 | + /** | |
| 98 | + * @param string[] $types | |
| 99 | + * @return string[] An array of allowed apps from which activities should be displayed | |
| 100 | + * @since 11.0.0 | |
| 101 | + */ | |
| 102 | +    public function filterTypes(array $types) { | |
| 103 | + return array_intersect([ | |
| 104 | + 'file_created', | |
| 105 | + 'file_changed', | |
| 106 | + 'file_deleted', | |
| 107 | + 'file_restored', | |
| 108 | + ], $types); | |
| 109 | + } | |
| 110 | + | |
| 111 | + /** | |
| 112 | + * @return string[] An array of allowed apps from which activities should be displayed | |
| 113 | + * @since 11.0.0 | |
| 114 | + */ | |
| 115 | +    public function allowedApps() { | |
| 116 | + return ['files']; | |
| 117 | + } | |
| 118 | + | |
| 119 | + /** | |
| 120 | + * @param IQueryBuilder $query | |
| 121 | + */ | |
| 122 | +    public function filterFavorites(IQueryBuilder $query) { | |
| 123 | +        try { | |
| 124 | + $user = $this->activityManager->getCurrentUserId(); | |
| 125 | +        } catch (\UnexpectedValueException $e) { | |
| 126 | + return; | |
| 127 | + } | |
| 128 | + | |
| 129 | +        try { | |
| 130 | + $favorites = $this->helper->getFavoriteFilePaths($user); | |
| 131 | +        } catch (\RuntimeException $e) { | |
| 132 | + return; | |
| 133 | + } | |
| 134 | + | |
| 135 | + $limitations = []; | |
| 136 | +        if (!empty($favorites['items'])) { | |
| 137 | +            $limitations[] = $query->expr()->in('file', $query->createNamedParameter($favorites['items'], IQueryBuilder::PARAM_STR_ARRAY)); | |
| 138 | + } | |
| 139 | +        foreach ($favorites['folders'] as $favorite) { | |
| 140 | +            $limitations[] = $query->expr()->like('file', $query->createNamedParameter( | |
| 141 | + $this->db->escapeLikeParameter($favorite . '/') . '%' | |
| 142 | + )); | |
| 143 | + } | |
| 144 | + | |
| 145 | +        if (empty($limitations)) { | |
| 146 | + return; | |
| 147 | + } | |
| 148 | + | |
| 149 | +        $function = $query->createFunction(' | |
| 150 | 150 | CASE | 
| 151 | 151 |  				WHEN ' . $query->getColumnName('app') . ' <> ' . $query->createNamedParameter('files') . ' THEN 1 | 
| 152 | 152 |  				WHEN ' . $query->getColumnName('app') . ' = ' . $query->createNamedParameter('files') . ' | 
| 153 | 153 |  					AND (' . implode(' OR ', $limitations) . ') | 
| 154 | 154 | THEN 1 | 
| 155 | 155 | END = 1' | 
| 156 | - ); | |
| 156 | + ); | |
| 157 | 157 | |
| 158 | - $query->andWhere($function); | |
| 159 | - } | |
| 158 | + $query->andWhere($function); | |
| 159 | + } | |
| 160 | 160 | } | 
| @@ -28,72 +28,72 @@ | ||
| 28 | 28 | |
| 29 | 29 |  class FileChanges implements IFilter { | 
| 30 | 30 | |
| 31 | - /** @var IL10N */ | |
| 32 | - protected $l; | |
| 31 | + /** @var IL10N */ | |
| 32 | + protected $l; | |
| 33 | 33 | |
| 34 | - /** @var IURLGenerator */ | |
| 35 | - protected $url; | |
| 34 | + /** @var IURLGenerator */ | |
| 35 | + protected $url; | |
| 36 | 36 | |
| 37 | - /** | |
| 38 | - * @param IL10N $l | |
| 39 | - * @param IURLGenerator $url | |
| 40 | - */ | |
| 41 | -	public function __construct(IL10N $l, IURLGenerator $url) { | |
| 42 | - $this->l = $l; | |
| 43 | - $this->url = $url; | |
| 44 | - } | |
| 37 | + /** | |
| 38 | + * @param IL10N $l | |
| 39 | + * @param IURLGenerator $url | |
| 40 | + */ | |
| 41 | +    public function __construct(IL10N $l, IURLGenerator $url) { | |
| 42 | + $this->l = $l; | |
| 43 | + $this->url = $url; | |
| 44 | + } | |
| 45 | 45 | |
| 46 | - /** | |
| 47 | - * @return string Lowercase a-z only identifier | |
| 48 | - * @since 11.0.0 | |
| 49 | - */ | |
| 50 | -	public function getIdentifier() { | |
| 51 | - return 'files'; | |
| 52 | - } | |
| 46 | + /** | |
| 47 | + * @return string Lowercase a-z only identifier | |
| 48 | + * @since 11.0.0 | |
| 49 | + */ | |
| 50 | +    public function getIdentifier() { | |
| 51 | + return 'files'; | |
| 52 | + } | |
| 53 | 53 | |
| 54 | - /** | |
| 55 | - * @return string A translated string | |
| 56 | - * @since 11.0.0 | |
| 57 | - */ | |
| 58 | -	public function getName() { | |
| 59 | -		return $this->l->t('File changes'); | |
| 60 | - } | |
| 54 | + /** | |
| 55 | + * @return string A translated string | |
| 56 | + * @since 11.0.0 | |
| 57 | + */ | |
| 58 | +    public function getName() { | |
| 59 | +        return $this->l->t('File changes'); | |
| 60 | + } | |
| 61 | 61 | |
| 62 | - /** | |
| 63 | - * @return int | |
| 64 | - * @since 11.0.0 | |
| 65 | - */ | |
| 66 | -	public function getPriority() { | |
| 67 | - return 30; | |
| 68 | - } | |
| 62 | + /** | |
| 63 | + * @return int | |
| 64 | + * @since 11.0.0 | |
| 65 | + */ | |
| 66 | +    public function getPriority() { | |
| 67 | + return 30; | |
| 68 | + } | |
| 69 | 69 | |
| 70 | - /** | |
| 71 | - * @return string Full URL to an icon, empty string when none is given | |
| 72 | - * @since 11.0.0 | |
| 73 | - */ | |
| 74 | -	public function getIcon() { | |
| 75 | -		return $this->url->getAbsoluteURL($this->url->imagePath('core', 'places/files-dark.svg')); | |
| 76 | - } | |
| 70 | + /** | |
| 71 | + * @return string Full URL to an icon, empty string when none is given | |
| 72 | + * @since 11.0.0 | |
| 73 | + */ | |
| 74 | +    public function getIcon() { | |
| 75 | +        return $this->url->getAbsoluteURL($this->url->imagePath('core', 'places/files-dark.svg')); | |
| 76 | + } | |
| 77 | 77 | |
| 78 | - /** | |
| 79 | - * @param string[] $types | |
| 80 | - * @return string[] An array of allowed apps from which activities should be displayed | |
| 81 | - * @since 11.0.0 | |
| 82 | - */ | |
| 83 | -	public function filterTypes(array $types) { | |
| 84 | - return array_intersect([ | |
| 85 | - 'file_created', | |
| 86 | - 'file_changed', | |
| 87 | - 'file_deleted', | |
| 88 | - 'file_restored', | |
| 89 | - ], $types); | |
| 90 | - } | |
| 78 | + /** | |
| 79 | + * @param string[] $types | |
| 80 | + * @return string[] An array of allowed apps from which activities should be displayed | |
| 81 | + * @since 11.0.0 | |
| 82 | + */ | |
| 83 | +    public function filterTypes(array $types) { | |
| 84 | + return array_intersect([ | |
| 85 | + 'file_created', | |
| 86 | + 'file_changed', | |
| 87 | + 'file_deleted', | |
| 88 | + 'file_restored', | |
| 89 | + ], $types); | |
| 90 | + } | |
| 91 | 91 | |
| 92 | - /** | |
| 93 | - * @return string[] An array of allowed apps from which activities should be displayed | |
| 94 | - * @since 11.0.0 | |
| 95 | - */ | |
| 96 | -	public function allowedApps() { | |
| 97 | - return ['files']; | |
| 98 | - } | |
| 92 | + /** | |
| 93 | + * @return string[] An array of allowed apps from which activities should be displayed | |
| 94 | + * @since 11.0.0 | |
| 95 | + */ | |
| 96 | +    public function allowedApps() { | |
| 97 | + return ['files']; | |
| 98 | + } | |
| 99 | 99 | } | 
| @@ -26,60 +26,60 @@ | ||
| 26 | 26 | use OCP\ITagManager; | 
| 27 | 27 | |
| 28 | 28 |  class Helper { | 
| 29 | - /** If a user has a lot of favorites the query might get too slow and long */ | |
| 30 | - const FAVORITE_LIMIT = 50; | |
| 29 | + /** If a user has a lot of favorites the query might get too slow and long */ | |
| 30 | + const FAVORITE_LIMIT = 50; | |
| 31 | 31 | |
| 32 | - /** @var ITagManager */ | |
| 33 | - protected $tagManager; | |
| 32 | + /** @var ITagManager */ | |
| 33 | + protected $tagManager; | |
| 34 | 34 | |
| 35 | - /** | |
| 36 | - * @param ITagManager $tagManager | |
| 37 | - */ | |
| 38 | -	public function __construct(ITagManager $tagManager) { | |
| 39 | - $this->tagManager = $tagManager; | |
| 40 | - } | |
| 35 | + /** | |
| 36 | + * @param ITagManager $tagManager | |
| 37 | + */ | |
| 38 | +    public function __construct(ITagManager $tagManager) { | |
| 39 | + $this->tagManager = $tagManager; | |
| 40 | + } | |
| 41 | 41 | |
| 42 | - /** | |
| 43 | - * Returns an array with the favorites | |
| 44 | - * | |
| 45 | - * @param string $user | |
| 46 | - * @return array | |
| 47 | - * @throws \RuntimeException when too many or no favorites where found | |
| 48 | - */ | |
| 49 | -	public function getFavoriteFilePaths($user) { | |
| 50 | -		$tags = $this->tagManager->load('files', [], false, $user); | |
| 51 | - $favorites = $tags->getFavorites(); | |
| 42 | + /** | |
| 43 | + * Returns an array with the favorites | |
| 44 | + * | |
| 45 | + * @param string $user | |
| 46 | + * @return array | |
| 47 | + * @throws \RuntimeException when too many or no favorites where found | |
| 48 | + */ | |
| 49 | +    public function getFavoriteFilePaths($user) { | |
| 50 | +        $tags = $this->tagManager->load('files', [], false, $user); | |
| 51 | + $favorites = $tags->getFavorites(); | |
| 52 | 52 | |
| 53 | -		if (empty($favorites)) { | |
| 54 | -			throw new \RuntimeException('No favorites', 1); | |
| 55 | -		} else if (isset($favorites[self::FAVORITE_LIMIT])) { | |
| 56 | -			throw new \RuntimeException('Too many favorites', 2); | |
| 57 | - } | |
| 53 | +        if (empty($favorites)) { | |
| 54 | +            throw new \RuntimeException('No favorites', 1); | |
| 55 | +        } else if (isset($favorites[self::FAVORITE_LIMIT])) { | |
| 56 | +            throw new \RuntimeException('Too many favorites', 2); | |
| 57 | + } | |
| 58 | 58 | |
| 59 | - // Can not DI because the user is not known on instantiation | |
| 60 | - $rootFolder = \OC::$server->getUserFolder($user); | |
| 61 | - $folders = $items = []; | |
| 62 | -		foreach ($favorites as $favorite) { | |
| 63 | - $nodes = $rootFolder->getById($favorite); | |
| 64 | -			if (!empty($nodes)) { | |
| 65 | - /** @var \OCP\Files\Node $node */ | |
| 66 | - $node = array_shift($nodes); | |
| 67 | - $path = substr($node->getPath(), strlen($user . '/files/')); | |
| 59 | + // Can not DI because the user is not known on instantiation | |
| 60 | + $rootFolder = \OC::$server->getUserFolder($user); | |
| 61 | + $folders = $items = []; | |
| 62 | +        foreach ($favorites as $favorite) { | |
| 63 | + $nodes = $rootFolder->getById($favorite); | |
| 64 | +            if (!empty($nodes)) { | |
| 65 | + /** @var \OCP\Files\Node $node */ | |
| 66 | + $node = array_shift($nodes); | |
| 67 | + $path = substr($node->getPath(), strlen($user . '/files/')); | |
| 68 | 68 | |
| 69 | - $items[] = $path; | |
| 70 | -				if ($node instanceof Folder) { | |
| 71 | - $folders[] = $path; | |
| 72 | - } | |
| 73 | - } | |
| 74 | - } | |
| 69 | + $items[] = $path; | |
| 70 | +                if ($node instanceof Folder) { | |
| 71 | + $folders[] = $path; | |
| 72 | + } | |
| 73 | + } | |
| 74 | + } | |
| 75 | 75 | |
| 76 | -		if (empty($items)) { | |
| 77 | -			throw new \RuntimeException('No favorites', 1); | |
| 78 | - } | |
| 76 | +        if (empty($items)) { | |
| 77 | +            throw new \RuntimeException('No favorites', 1); | |
| 78 | + } | |
| 79 | 79 | |
| 80 | - return [ | |
| 81 | - 'items' => $items, | |
| 82 | - 'folders' => $folders, | |
| 83 | - ]; | |
| 84 | - } | |
| 80 | + return [ | |
| 81 | + 'items' => $items, | |
| 82 | + 'folders' => $folders, | |
| 83 | + ]; | |
| 84 | + } | |
| 85 | 85 | } | 
| @@ -27,72 +27,72 @@ | ||
| 27 | 27 | |
| 28 | 28 |  class FileDeleted implements ISetting { | 
| 29 | 29 | |
| 30 | - /** @var IL10N */ | |
| 31 | - protected $l; | |
| 30 | + /** @var IL10N */ | |
| 31 | + protected $l; | |
| 32 | 32 | |
| 33 | - /** | |
| 34 | - * @param IL10N $l | |
| 35 | - */ | |
| 36 | -	public function __construct(IL10N $l) { | |
| 37 | - $this->l = $l; | |
| 38 | - } | |
| 33 | + /** | |
| 34 | + * @param IL10N $l | |
| 35 | + */ | |
| 36 | +    public function __construct(IL10N $l) { | |
| 37 | + $this->l = $l; | |
| 38 | + } | |
| 39 | 39 | |
| 40 | - /** | |
| 41 | - * @return string Lowercase a-z and underscore only identifier | |
| 42 | - * @since 11.0.0 | |
| 43 | - */ | |
| 44 | -	public function getIdentifier() { | |
| 45 | - return 'file_deleted'; | |
| 46 | - } | |
| 40 | + /** | |
| 41 | + * @return string Lowercase a-z and underscore only identifier | |
| 42 | + * @since 11.0.0 | |
| 43 | + */ | |
| 44 | +    public function getIdentifier() { | |
| 45 | + return 'file_deleted'; | |
| 46 | + } | |
| 47 | 47 | |
| 48 | - /** | |
| 49 | - * @return string A translated string | |
| 50 | - * @since 11.0.0 | |
| 51 | - */ | |
| 52 | -	public function getName() { | |
| 53 | -		return $this->l->t('A new file or folder has been <strong>deleted</strong>'); | |
| 54 | - } | |
| 48 | + /** | |
| 49 | + * @return string A translated string | |
| 50 | + * @since 11.0.0 | |
| 51 | + */ | |
| 52 | +    public function getName() { | |
| 53 | +        return $this->l->t('A new file or folder has been <strong>deleted</strong>'); | |
| 54 | + } | |
| 55 | 55 | |
| 56 | - /** | |
| 57 | - * @return int whether the filter should be rather on the top or bottom of | |
| 58 | - * the admin section. The filters are arranged in ascending order of the | |
| 59 | - * priority values. It is required to return a value between 0 and 100. | |
| 60 | - * @since 11.0.0 | |
| 61 | - */ | |
| 62 | -	public function getPriority() { | |
| 63 | - return 3; | |
| 64 | - } | |
| 56 | + /** | |
| 57 | + * @return int whether the filter should be rather on the top or bottom of | |
| 58 | + * the admin section. The filters are arranged in ascending order of the | |
| 59 | + * priority values. It is required to return a value between 0 and 100. | |
| 60 | + * @since 11.0.0 | |
| 61 | + */ | |
| 62 | +    public function getPriority() { | |
| 63 | + return 3; | |
| 64 | + } | |
| 65 | 65 | |
| 66 | - /** | |
| 67 | - * @return bool True when the option can be changed for the stream | |
| 68 | - * @since 11.0.0 | |
| 69 | - */ | |
| 70 | -	public function canChangeStream() { | |
| 71 | - return true; | |
| 72 | - } | |
| 66 | + /** | |
| 67 | + * @return bool True when the option can be changed for the stream | |
| 68 | + * @since 11.0.0 | |
| 69 | + */ | |
| 70 | +    public function canChangeStream() { | |
| 71 | + return true; | |
| 72 | + } | |
| 73 | 73 | |
| 74 | - /** | |
| 75 | - * @return bool True when the option can be changed for the stream | |
| 76 | - * @since 11.0.0 | |
| 77 | - */ | |
| 78 | -	public function isDefaultEnabledStream() { | |
| 79 | - return true; | |
| 80 | - } | |
| 74 | + /** | |
| 75 | + * @return bool True when the option can be changed for the stream | |
| 76 | + * @since 11.0.0 | |
| 77 | + */ | |
| 78 | +    public function isDefaultEnabledStream() { | |
| 79 | + return true; | |
| 80 | + } | |
| 81 | 81 | |
| 82 | - /** | |
| 83 | - * @return bool True when the option can be changed for the mail | |
| 84 | - * @since 11.0.0 | |
| 85 | - */ | |
| 86 | -	public function canChangeMail() { | |
| 87 | - return true; | |
| 88 | - } | |
| 82 | + /** | |
| 83 | + * @return bool True when the option can be changed for the mail | |
| 84 | + * @since 11.0.0 | |
| 85 | + */ | |
| 86 | +    public function canChangeMail() { | |
| 87 | + return true; | |
| 88 | + } | |
| 89 | 89 | |
| 90 | - /** | |
| 91 | - * @return bool True when the option can be changed for the stream | |
| 92 | - * @since 11.0.0 | |
| 93 | - */ | |
| 94 | -	public function isDefaultEnabledMail() { | |
| 95 | - return false; | |
| 96 | - } | |
| 90 | + /** | |
| 91 | + * @return bool True when the option can be changed for the stream | |
| 92 | + * @since 11.0.0 | |
| 93 | + */ | |
| 94 | +    public function isDefaultEnabledMail() { | |
| 95 | + return false; | |
| 96 | + } | |
| 97 | 97 | } | 
| 98 | 98 | |
| @@ -27,72 +27,72 @@ | ||
| 27 | 27 | |
| 28 | 28 |  class FileChanged implements ISetting { | 
| 29 | 29 | |
| 30 | - /** @var IL10N */ | |
| 31 | - protected $l; | |
| 30 | + /** @var IL10N */ | |
| 31 | + protected $l; | |
| 32 | 32 | |
| 33 | - /** | |
| 34 | - * @param IL10N $l | |
| 35 | - */ | |
| 36 | -	public function __construct(IL10N $l) { | |
| 37 | - $this->l = $l; | |
| 38 | - } | |
| 33 | + /** | |
| 34 | + * @param IL10N $l | |
| 35 | + */ | |
| 36 | +    public function __construct(IL10N $l) { | |
| 37 | + $this->l = $l; | |
| 38 | + } | |
| 39 | 39 | |
| 40 | - /** | |
| 41 | - * @return string Lowercase a-z and underscore only identifier | |
| 42 | - * @since 11.0.0 | |
| 43 | - */ | |
| 44 | -	public function getIdentifier() { | |
| 45 | - return 'file_changed'; | |
| 46 | - } | |
| 40 | + /** | |
| 41 | + * @return string Lowercase a-z and underscore only identifier | |
| 42 | + * @since 11.0.0 | |
| 43 | + */ | |
| 44 | +    public function getIdentifier() { | |
| 45 | + return 'file_changed'; | |
| 46 | + } | |
| 47 | 47 | |
| 48 | - /** | |
| 49 | - * @return string A translated string | |
| 50 | - * @since 11.0.0 | |
| 51 | - */ | |
| 52 | -	public function getName() { | |
| 53 | -		return $this->l->t('A file or folder has been <strong>changed</strong> or <strong>renamed</strong>'); | |
| 54 | - } | |
| 48 | + /** | |
| 49 | + * @return string A translated string | |
| 50 | + * @since 11.0.0 | |
| 51 | + */ | |
| 52 | +    public function getName() { | |
| 53 | +        return $this->l->t('A file or folder has been <strong>changed</strong> or <strong>renamed</strong>'); | |
| 54 | + } | |
| 55 | 55 | |
| 56 | - /** | |
| 57 | - * @return int whether the filter should be rather on the top or bottom of | |
| 58 | - * the admin section. The filters are arranged in ascending order of the | |
| 59 | - * priority values. It is required to return a value between 0 and 100. | |
| 60 | - * @since 11.0.0 | |
| 61 | - */ | |
| 62 | -	public function getPriority() { | |
| 63 | - return 1; | |
| 64 | - } | |
| 56 | + /** | |
| 57 | + * @return int whether the filter should be rather on the top or bottom of | |
| 58 | + * the admin section. The filters are arranged in ascending order of the | |
| 59 | + * priority values. It is required to return a value between 0 and 100. | |
| 60 | + * @since 11.0.0 | |
| 61 | + */ | |
| 62 | +    public function getPriority() { | |
| 63 | + return 1; | |
| 64 | + } | |
| 65 | 65 | |
| 66 | - /** | |
| 67 | - * @return bool True when the option can be changed for the stream | |
| 68 | - * @since 11.0.0 | |
| 69 | - */ | |
| 70 | -	public function canChangeStream() { | |
| 71 | - return true; | |
| 72 | - } | |
| 66 | + /** | |
| 67 | + * @return bool True when the option can be changed for the stream | |
| 68 | + * @since 11.0.0 | |
| 69 | + */ | |
| 70 | +    public function canChangeStream() { | |
| 71 | + return true; | |
| 72 | + } | |
| 73 | 73 | |
| 74 | - /** | |
| 75 | - * @return bool True when the option can be changed for the stream | |
| 76 | - * @since 11.0.0 | |
| 77 | - */ | |
| 78 | -	public function isDefaultEnabledStream() { | |
| 79 | - return true; | |
| 80 | - } | |
| 74 | + /** | |
| 75 | + * @return bool True when the option can be changed for the stream | |
| 76 | + * @since 11.0.0 | |
| 77 | + */ | |
| 78 | +    public function isDefaultEnabledStream() { | |
| 79 | + return true; | |
| 80 | + } | |
| 81 | 81 | |
| 82 | - /** | |
| 83 | - * @return bool True when the option can be changed for the mail | |
| 84 | - * @since 11.0.0 | |
| 85 | - */ | |
| 86 | -	public function canChangeMail() { | |
| 87 | - return true; | |
| 88 | - } | |
| 82 | + /** | |
| 83 | + * @return bool True when the option can be changed for the mail | |
| 84 | + * @since 11.0.0 | |
| 85 | + */ | |
| 86 | +    public function canChangeMail() { | |
| 87 | + return true; | |
| 88 | + } | |
| 89 | 89 | |
| 90 | - /** | |
| 91 | - * @return bool True when the option can be changed for the stream | |
| 92 | - * @since 11.0.0 | |
| 93 | - */ | |
| 94 | -	public function isDefaultEnabledMail() { | |
| 95 | - return false; | |
| 96 | - } | |
| 90 | + /** | |
| 91 | + * @return bool True when the option can be changed for the stream | |
| 92 | + * @since 11.0.0 | |
| 93 | + */ | |
| 94 | +    public function isDefaultEnabledMail() { | |
| 95 | + return false; | |
| 96 | + } | |
| 97 | 97 | } | 
| 98 | 98 | |