@@ -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 | }  | 
                                                        
@@ -138,7 +138,7 @@ discard block  | 
                                                    ||
| 138 | 138 | }  | 
                                                        
| 139 | 139 |  		foreach ($favorites['folders'] as $favorite) { | 
                                                        
| 140 | 140 |  			$limitations[] = $query->expr()->like('file', $query->createNamedParameter( | 
                                                        
| 141 | - $this->db->escapeLikeParameter($favorite . '/') . '%'  | 
                                                        |
| 141 | + $this->db->escapeLikeParameter($favorite.'/').'%'  | 
                                                        |
| 142 | 142 | ));  | 
                                                        
| 143 | 143 | }  | 
                                                        
| 144 | 144 | |
@@ -148,9 +148,9 @@ discard block  | 
                                                    ||
| 148 | 148 | |
| 149 | 149 |  		$function = $query->createFunction(' | 
                                                        
| 150 | 150 | CASE  | 
                                                        
| 151 | -				WHEN ' . $query->getColumnName('app') . ' <> ' . $query->createNamedParameter('files') . ' THEN 1 | 
                                                        |
| 152 | -				WHEN ' . $query->getColumnName('app') . ' = ' . $query->createNamedParameter('files') . ' | 
                                                        |
| 153 | -					AND (' . implode(' OR ', $limitations) . ') | 
                                                        |
| 151 | +				WHEN ' . $query->getColumnName('app').' <> '.$query->createNamedParameter('files').' THEN 1 | 
                                                        |
| 152 | +				WHEN ' . $query->getColumnName('app').' = '.$query->createNamedParameter('files').' | 
                                                        |
| 153 | +					AND (' . implode(' OR ', $limitations).') | 
                                                        |
| 154 | 154 | THEN 1  | 
                                                        
| 155 | 155 | END = 1'  | 
                                                        
| 156 | 156 | );  | 
                                                        
@@ -64,7 +64,7 @@  | 
                                                    ||
| 64 | 64 |  			if (!empty($nodes)) { | 
                                                        
| 65 | 65 | /** @var \OCP\Files\Node $node */  | 
                                                        
| 66 | 66 | $node = array_shift($nodes);  | 
                                                        
| 67 | - $path = substr($node->getPath(), strlen($user . '/files/'));  | 
                                                        |
| 67 | + $path = substr($node->getPath(), strlen($user.'/files/'));  | 
                                                        |
| 68 | 68 | |
| 69 | 69 | $items[] = $path;  | 
                                                        
| 70 | 70 |  				if ($node instanceof Folder) { | 
                                                        
@@ -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 | - public const FAVORITE_LIMIT = 50;  | 
                                                        |
| 29 | + /** If a user has a lot of favorites the query might get too slow and long */  | 
                                                        |
| 30 | + public 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 | -		} elseif (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 | +        } elseif (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 | }  | 
                                                        
@@ -80,12 +80,12 @@  | 
                                                    ||
| 80 | 80 | $deletedEntries = 0;  | 
                                                        
| 81 | 81 | |
| 82 | 82 | $query = $this->connection->getQueryBuilder();  | 
                                                        
| 83 | -		$query->select('t1.' . $idCol) | 
                                                        |
| 83 | +		$query->select('t1.'.$idCol) | 
                                                        |
| 84 | 84 | ->from($table, 't1')  | 
                                                        
| 85 | 85 |  			->where($query->expr()->eq($typeCol, $query->expr()->literal('files'))) | 
                                                        
| 86 | 86 |  			->andWhere($query->expr()->isNull('t2.fileid')) | 
                                                        
| 87 | -			->leftJoin('t1', 'filecache', 't2', $query->expr()->eq($query->expr()->castColumn('t1.' . $idCol, IQueryBuilder::PARAM_INT), 't2.fileid')) | 
                                                        |
| 88 | -			->groupBy('t1.' . $idCol) | 
                                                        |
| 87 | +			->leftJoin('t1', 'filecache', 't2', $query->expr()->eq($query->expr()->castColumn('t1.'.$idCol, IQueryBuilder::PARAM_INT), 't2.fileid')) | 
                                                        |
| 88 | +			->groupBy('t1.'.$idCol) | 
                                                        |
| 89 | 89 | ->setMaxResults(self::CHUNK_SIZE);  | 
                                                        
| 90 | 90 | |
| 91 | 91 | $deleteQuery = $this->connection->getQueryBuilder();  | 
                                                        
@@ -31,122 +31,122 @@  | 
                                                    ||
| 31 | 31 | * Delete all share entries that have no matching entries in the file cache table.  | 
                                                        
| 32 | 32 | */  | 
                                                        
| 33 | 33 |  class DeleteOrphanedItems extends TimedJob { | 
                                                        
| 34 | - public const CHUNK_SIZE = 200;  | 
                                                        |
| 35 | -  | 
                                                        |
| 36 | - /** @var \OCP\IDBConnection */  | 
                                                        |
| 37 | - protected $connection;  | 
                                                        |
| 38 | -  | 
                                                        |
| 39 | - /** @var \OCP\ILogger */  | 
                                                        |
| 40 | - protected $logger;  | 
                                                        |
| 41 | -  | 
                                                        |
| 42 | - /**  | 
                                                        |
| 43 | - * Default interval in minutes  | 
                                                        |
| 44 | - *  | 
                                                        |
| 45 | - * @var int $defaultIntervalMin  | 
                                                        |
| 46 | - **/  | 
                                                        |
| 47 | - protected $defaultIntervalMin = 60;  | 
                                                        |
| 48 | -  | 
                                                        |
| 49 | - /**  | 
                                                        |
| 50 | - * sets the correct interval for this timed job  | 
                                                        |
| 51 | - */  | 
                                                        |
| 52 | -	public function __construct() { | 
                                                        |
| 53 | - $this->interval = $this->defaultIntervalMin * 60;  | 
                                                        |
| 54 | - $this->connection = \OC::$server->getDatabaseConnection();  | 
                                                        |
| 55 | - $this->logger = \OC::$server->getLogger();  | 
                                                        |
| 56 | - }  | 
                                                        |
| 57 | -  | 
                                                        |
| 58 | - /**  | 
                                                        |
| 59 | - * Makes the background job do its work  | 
                                                        |
| 60 | - *  | 
                                                        |
| 61 | - * @param array $argument unused argument  | 
                                                        |
| 62 | - */  | 
                                                        |
| 63 | -	public function run($argument) { | 
                                                        |
| 64 | - $this->cleanSystemTags();  | 
                                                        |
| 65 | - $this->cleanUserTags();  | 
                                                        |
| 66 | - $this->cleanComments();  | 
                                                        |
| 67 | - $this->cleanCommentMarkers();  | 
                                                        |
| 68 | - }  | 
                                                        |
| 69 | -  | 
                                                        |
| 70 | - /**  | 
                                                        |
| 71 | - * Deleting orphaned system tag mappings  | 
                                                        |
| 72 | - *  | 
                                                        |
| 73 | - * @param string $table  | 
                                                        |
| 74 | - * @param string $idCol  | 
                                                        |
| 75 | - * @param string $typeCol  | 
                                                        |
| 76 | - * @return int Number of deleted entries  | 
                                                        |
| 77 | - */  | 
                                                        |
| 78 | -	protected function cleanUp($table, $idCol, $typeCol) { | 
                                                        |
| 79 | - $deletedEntries = 0;  | 
                                                        |
| 80 | -  | 
                                                        |
| 81 | - $query = $this->connection->getQueryBuilder();  | 
                                                        |
| 82 | -		$query->select('t1.' . $idCol) | 
                                                        |
| 83 | - ->from($table, 't1')  | 
                                                        |
| 84 | -			->where($query->expr()->eq($typeCol, $query->expr()->literal('files'))) | 
                                                        |
| 85 | -			->andWhere($query->expr()->isNull('t2.fileid')) | 
                                                        |
| 86 | -			->leftJoin('t1', 'filecache', 't2', $query->expr()->eq($query->expr()->castColumn('t1.' . $idCol, IQueryBuilder::PARAM_INT), 't2.fileid')) | 
                                                        |
| 87 | -			->groupBy('t1.' . $idCol) | 
                                                        |
| 88 | - ->setMaxResults(self::CHUNK_SIZE);  | 
                                                        |
| 89 | -  | 
                                                        |
| 90 | - $deleteQuery = $this->connection->getQueryBuilder();  | 
                                                        |
| 91 | - $deleteQuery->delete($table)  | 
                                                        |
| 92 | -			->where($deleteQuery->expr()->eq($idCol, $deleteQuery->createParameter('objectid'))); | 
                                                        |
| 93 | -  | 
                                                        |
| 94 | - $deletedInLastChunk = self::CHUNK_SIZE;  | 
                                                        |
| 95 | -		while ($deletedInLastChunk === self::CHUNK_SIZE) { | 
                                                        |
| 96 | - $result = $query->execute();  | 
                                                        |
| 97 | - $deletedInLastChunk = 0;  | 
                                                        |
| 98 | -			while ($row = $result->fetch()) { | 
                                                        |
| 99 | - $deletedInLastChunk++;  | 
                                                        |
| 100 | -				$deletedEntries += $deleteQuery->setParameter('objectid', (int) $row[$idCol]) | 
                                                        |
| 101 | - ->execute();  | 
                                                        |
| 102 | - }  | 
                                                        |
| 103 | - $result->closeCursor();  | 
                                                        |
| 104 | - }  | 
                                                        |
| 105 | -  | 
                                                        |
| 106 | - return $deletedEntries;  | 
                                                        |
| 107 | - }  | 
                                                        |
| 108 | -  | 
                                                        |
| 109 | - /**  | 
                                                        |
| 110 | - * Deleting orphaned system tag mappings  | 
                                                        |
| 111 | - *  | 
                                                        |
| 112 | - * @return int Number of deleted entries  | 
                                                        |
| 113 | - */  | 
                                                        |
| 114 | -	protected function cleanSystemTags() { | 
                                                        |
| 115 | -		$deletedEntries = $this->cleanUp('systemtag_object_mapping', 'objectid', 'objecttype'); | 
                                                        |
| 116 | -		$this->logger->debug("$deletedEntries orphaned system tag relations deleted", ['app' => 'DeleteOrphanedItems']); | 
                                                        |
| 117 | - return $deletedEntries;  | 
                                                        |
| 118 | - }  | 
                                                        |
| 119 | -  | 
                                                        |
| 120 | - /**  | 
                                                        |
| 121 | - * Deleting orphaned user tag mappings  | 
                                                        |
| 122 | - *  | 
                                                        |
| 123 | - * @return int Number of deleted entries  | 
                                                        |
| 124 | - */  | 
                                                        |
| 125 | -	protected function cleanUserTags() { | 
                                                        |
| 126 | -		$deletedEntries = $this->cleanUp('vcategory_to_object', 'objid', 'type'); | 
                                                        |
| 127 | -		$this->logger->debug("$deletedEntries orphaned user tag relations deleted", ['app' => 'DeleteOrphanedItems']); | 
                                                        |
| 128 | - return $deletedEntries;  | 
                                                        |
| 129 | - }  | 
                                                        |
| 130 | -  | 
                                                        |
| 131 | - /**  | 
                                                        |
| 132 | - * Deleting orphaned comments  | 
                                                        |
| 133 | - *  | 
                                                        |
| 134 | - * @return int Number of deleted entries  | 
                                                        |
| 135 | - */  | 
                                                        |
| 136 | -	protected function cleanComments() { | 
                                                        |
| 137 | -		$deletedEntries = $this->cleanUp('comments', 'object_id', 'object_type'); | 
                                                        |
| 138 | -		$this->logger->debug("$deletedEntries orphaned comments deleted", ['app' => 'DeleteOrphanedItems']); | 
                                                        |
| 139 | - return $deletedEntries;  | 
                                                        |
| 140 | - }  | 
                                                        |
| 141 | -  | 
                                                        |
| 142 | - /**  | 
                                                        |
| 143 | - * Deleting orphaned comment read markers  | 
                                                        |
| 144 | - *  | 
                                                        |
| 145 | - * @return int Number of deleted entries  | 
                                                        |
| 146 | - */  | 
                                                        |
| 147 | -	protected function cleanCommentMarkers() { | 
                                                        |
| 148 | -		$deletedEntries = $this->cleanUp('comments_read_markers', 'object_id', 'object_type'); | 
                                                        |
| 149 | -		$this->logger->debug("$deletedEntries orphaned comment read marks deleted", ['app' => 'DeleteOrphanedItems']); | 
                                                        |
| 150 | - return $deletedEntries;  | 
                                                        |
| 151 | - }  | 
                                                        |
| 34 | + public const CHUNK_SIZE = 200;  | 
                                                        |
| 35 | +  | 
                                                        |
| 36 | + /** @var \OCP\IDBConnection */  | 
                                                        |
| 37 | + protected $connection;  | 
                                                        |
| 38 | +  | 
                                                        |
| 39 | + /** @var \OCP\ILogger */  | 
                                                        |
| 40 | + protected $logger;  | 
                                                        |
| 41 | +  | 
                                                        |
| 42 | + /**  | 
                                                        |
| 43 | + * Default interval in minutes  | 
                                                        |
| 44 | + *  | 
                                                        |
| 45 | + * @var int $defaultIntervalMin  | 
                                                        |
| 46 | + **/  | 
                                                        |
| 47 | + protected $defaultIntervalMin = 60;  | 
                                                        |
| 48 | +  | 
                                                        |
| 49 | + /**  | 
                                                        |
| 50 | + * sets the correct interval for this timed job  | 
                                                        |
| 51 | + */  | 
                                                        |
| 52 | +    public function __construct() { | 
                                                        |
| 53 | + $this->interval = $this->defaultIntervalMin * 60;  | 
                                                        |
| 54 | + $this->connection = \OC::$server->getDatabaseConnection();  | 
                                                        |
| 55 | + $this->logger = \OC::$server->getLogger();  | 
                                                        |
| 56 | + }  | 
                                                        |
| 57 | +  | 
                                                        |
| 58 | + /**  | 
                                                        |
| 59 | + * Makes the background job do its work  | 
                                                        |
| 60 | + *  | 
                                                        |
| 61 | + * @param array $argument unused argument  | 
                                                        |
| 62 | + */  | 
                                                        |
| 63 | +    public function run($argument) { | 
                                                        |
| 64 | + $this->cleanSystemTags();  | 
                                                        |
| 65 | + $this->cleanUserTags();  | 
                                                        |
| 66 | + $this->cleanComments();  | 
                                                        |
| 67 | + $this->cleanCommentMarkers();  | 
                                                        |
| 68 | + }  | 
                                                        |
| 69 | +  | 
                                                        |
| 70 | + /**  | 
                                                        |
| 71 | + * Deleting orphaned system tag mappings  | 
                                                        |
| 72 | + *  | 
                                                        |
| 73 | + * @param string $table  | 
                                                        |
| 74 | + * @param string $idCol  | 
                                                        |
| 75 | + * @param string $typeCol  | 
                                                        |
| 76 | + * @return int Number of deleted entries  | 
                                                        |
| 77 | + */  | 
                                                        |
| 78 | +    protected function cleanUp($table, $idCol, $typeCol) { | 
                                                        |
| 79 | + $deletedEntries = 0;  | 
                                                        |
| 80 | +  | 
                                                        |
| 81 | + $query = $this->connection->getQueryBuilder();  | 
                                                        |
| 82 | +        $query->select('t1.' . $idCol) | 
                                                        |
| 83 | + ->from($table, 't1')  | 
                                                        |
| 84 | +            ->where($query->expr()->eq($typeCol, $query->expr()->literal('files'))) | 
                                                        |
| 85 | +            ->andWhere($query->expr()->isNull('t2.fileid')) | 
                                                        |
| 86 | +            ->leftJoin('t1', 'filecache', 't2', $query->expr()->eq($query->expr()->castColumn('t1.' . $idCol, IQueryBuilder::PARAM_INT), 't2.fileid')) | 
                                                        |
| 87 | +            ->groupBy('t1.' . $idCol) | 
                                                        |
| 88 | + ->setMaxResults(self::CHUNK_SIZE);  | 
                                                        |
| 89 | +  | 
                                                        |
| 90 | + $deleteQuery = $this->connection->getQueryBuilder();  | 
                                                        |
| 91 | + $deleteQuery->delete($table)  | 
                                                        |
| 92 | +            ->where($deleteQuery->expr()->eq($idCol, $deleteQuery->createParameter('objectid'))); | 
                                                        |
| 93 | +  | 
                                                        |
| 94 | + $deletedInLastChunk = self::CHUNK_SIZE;  | 
                                                        |
| 95 | +        while ($deletedInLastChunk === self::CHUNK_SIZE) { | 
                                                        |
| 96 | + $result = $query->execute();  | 
                                                        |
| 97 | + $deletedInLastChunk = 0;  | 
                                                        |
| 98 | +            while ($row = $result->fetch()) { | 
                                                        |
| 99 | + $deletedInLastChunk++;  | 
                                                        |
| 100 | +                $deletedEntries += $deleteQuery->setParameter('objectid', (int) $row[$idCol]) | 
                                                        |
| 101 | + ->execute();  | 
                                                        |
| 102 | + }  | 
                                                        |
| 103 | + $result->closeCursor();  | 
                                                        |
| 104 | + }  | 
                                                        |
| 105 | +  | 
                                                        |
| 106 | + return $deletedEntries;  | 
                                                        |
| 107 | + }  | 
                                                        |
| 108 | +  | 
                                                        |
| 109 | + /**  | 
                                                        |
| 110 | + * Deleting orphaned system tag mappings  | 
                                                        |
| 111 | + *  | 
                                                        |
| 112 | + * @return int Number of deleted entries  | 
                                                        |
| 113 | + */  | 
                                                        |
| 114 | +    protected function cleanSystemTags() { | 
                                                        |
| 115 | +        $deletedEntries = $this->cleanUp('systemtag_object_mapping', 'objectid', 'objecttype'); | 
                                                        |
| 116 | +        $this->logger->debug("$deletedEntries orphaned system tag relations deleted", ['app' => 'DeleteOrphanedItems']); | 
                                                        |
| 117 | + return $deletedEntries;  | 
                                                        |
| 118 | + }  | 
                                                        |
| 119 | +  | 
                                                        |
| 120 | + /**  | 
                                                        |
| 121 | + * Deleting orphaned user tag mappings  | 
                                                        |
| 122 | + *  | 
                                                        |
| 123 | + * @return int Number of deleted entries  | 
                                                        |
| 124 | + */  | 
                                                        |
| 125 | +    protected function cleanUserTags() { | 
                                                        |
| 126 | +        $deletedEntries = $this->cleanUp('vcategory_to_object', 'objid', 'type'); | 
                                                        |
| 127 | +        $this->logger->debug("$deletedEntries orphaned user tag relations deleted", ['app' => 'DeleteOrphanedItems']); | 
                                                        |
| 128 | + return $deletedEntries;  | 
                                                        |
| 129 | + }  | 
                                                        |
| 130 | +  | 
                                                        |
| 131 | + /**  | 
                                                        |
| 132 | + * Deleting orphaned comments  | 
                                                        |
| 133 | + *  | 
                                                        |
| 134 | + * @return int Number of deleted entries  | 
                                                        |
| 135 | + */  | 
                                                        |
| 136 | +    protected function cleanComments() { | 
                                                        |
| 137 | +        $deletedEntries = $this->cleanUp('comments', 'object_id', 'object_type'); | 
                                                        |
| 138 | +        $this->logger->debug("$deletedEntries orphaned comments deleted", ['app' => 'DeleteOrphanedItems']); | 
                                                        |
| 139 | + return $deletedEntries;  | 
                                                        |
| 140 | + }  | 
                                                        |
| 141 | +  | 
                                                        |
| 142 | + /**  | 
                                                        |
| 143 | + * Deleting orphaned comment read markers  | 
                                                        |
| 144 | + *  | 
                                                        |
| 145 | + * @return int Number of deleted entries  | 
                                                        |
| 146 | + */  | 
                                                        |
| 147 | +    protected function cleanCommentMarkers() { | 
                                                        |
| 148 | +        $deletedEntries = $this->cleanUp('comments_read_markers', 'object_id', 'object_type'); | 
                                                        |
| 149 | +        $this->logger->debug("$deletedEntries orphaned comment read marks deleted", ['app' => 'DeleteOrphanedItems']); | 
                                                        |
| 150 | + return $deletedEntries;  | 
                                                        |
| 151 | + }  | 
                                                        |
| 152 | 152 | }  | 
                                                        
@@ -24,26 +24,26 @@  | 
                                                    ||
| 24 | 24 | |
| 25 | 25 |  interface IUserLDAP { | 
                                                        
| 26 | 26 | |
| 27 | - //Functions used by LDAPProvider  | 
                                                        |
| 27 | + //Functions used by LDAPProvider  | 
                                                        |
| 28 | 28 | |
| 29 | - /**  | 
                                                        |
| 30 | - * Return access for LDAP interaction.  | 
                                                        |
| 31 | - * @param string $uid  | 
                                                        |
| 32 | - * @return Access instance of Access for LDAP interaction  | 
                                                        |
| 33 | - */  | 
                                                        |
| 34 | - public function getLDAPAccess($uid);  | 
                                                        |
| 29 | + /**  | 
                                                        |
| 30 | + * Return access for LDAP interaction.  | 
                                                        |
| 31 | + * @param string $uid  | 
                                                        |
| 32 | + * @return Access instance of Access for LDAP interaction  | 
                                                        |
| 33 | + */  | 
                                                        |
| 34 | + public function getLDAPAccess($uid);  | 
                                                        |
| 35 | 35 | |
| 36 | - /**  | 
                                                        |
| 37 | - * Return a new LDAP connection for the specified user.  | 
                                                        |
| 38 | - * @param string $uid  | 
                                                        |
| 39 | - * @return resource of the LDAP connection  | 
                                                        |
| 40 | - */  | 
                                                        |
| 41 | - public function getNewLDAPConnection($uid);  | 
                                                        |
| 36 | + /**  | 
                                                        |
| 37 | + * Return a new LDAP connection for the specified user.  | 
                                                        |
| 38 | + * @param string $uid  | 
                                                        |
| 39 | + * @return resource of the LDAP connection  | 
                                                        |
| 40 | + */  | 
                                                        |
| 41 | + public function getNewLDAPConnection($uid);  | 
                                                        |
| 42 | 42 | |
| 43 | - /**  | 
                                                        |
| 44 | - * Return the username for the given LDAP DN, if available.  | 
                                                        |
| 45 | - * @param string $dn  | 
                                                        |
| 46 | - * @return string|false with the username  | 
                                                        |
| 47 | - */  | 
                                                        |
| 48 | - public function dn2UserName($dn);  | 
                                                        |
| 43 | + /**  | 
                                                        |
| 44 | + * Return the username for the given LDAP DN, if available.  | 
                                                        |
| 45 | + * @param string $dn  | 
                                                        |
| 46 | + * @return string|false with the username  | 
                                                        |
| 47 | + */  | 
                                                        |
| 48 | + public function dn2UserName($dn);  | 
                                                        |
| 49 | 49 | }  | 
                                                        
@@ -26,13 +26,13 @@  | 
                                                    ||
| 26 | 26 | namespace OCA\User_LDAP;  | 
                                                        
| 27 | 27 | |
| 28 | 28 |  abstract class LDAPUtility { | 
                                                        
| 29 | - protected $ldap;  | 
                                                        |
| 29 | + protected $ldap;  | 
                                                        |
| 30 | 30 | |
| 31 | - /**  | 
                                                        |
| 32 | - * constructor, make sure the subclasses call this one!  | 
                                                        |
| 33 | - * @param ILDAPWrapper $ldapWrapper an instance of an ILDAPWrapper  | 
                                                        |
| 34 | - */  | 
                                                        |
| 35 | -	public function __construct(ILDAPWrapper $ldapWrapper) { | 
                                                        |
| 36 | - $this->ldap = $ldapWrapper;  | 
                                                        |
| 37 | - }  | 
                                                        |
| 31 | + /**  | 
                                                        |
| 32 | + * constructor, make sure the subclasses call this one!  | 
                                                        |
| 33 | + * @param ILDAPWrapper $ldapWrapper an instance of an ILDAPWrapper  | 
                                                        |
| 34 | + */  | 
                                                        |
| 35 | +    public function __construct(ILDAPWrapper $ldapWrapper) { | 
                                                        |
| 36 | + $this->ldap = $ldapWrapper;  | 
                                                        |
| 37 | + }  | 
                                                        |
| 38 | 38 | }  | 
                                                        
@@ -41,7 +41,7 @@  | 
                                                    ||
| 41 | 41 | $application->registerRoutes($this, [  | 
                                                        
| 42 | 42 | 'ocs' => [  | 
                                                        
| 43 | 43 | ['name' => 'ConfigAPI#create', 'url' => '/api/v1/config', 'verb' => 'POST'],  | 
                                                        
| 44 | -		['name' => 'ConfigAPI#show',   'url' => '/api/v1/config/{configID}', 'verb' => 'GET'], | 
                                                        |
| 44 | +		['name' => 'ConfigAPI#show', 'url' => '/api/v1/config/{configID}', 'verb' => 'GET'], | 
                                                        |
| 45 | 45 |  		['name' => 'ConfigAPI#modify', 'url' => '/api/v1/config/{configID}', 'verb' => 'PUT'], | 
                                                        
| 46 | 46 |  		['name' => 'ConfigAPI#delete', 'url' => '/api/v1/config/{configID}', 'verb' => 'DELETE'], | 
                                                        
| 47 | 47 | ]  | 
                                                        
@@ -27,37 +27,37 @@  | 
                                                    ||
| 27 | 27 | *  | 
                                                        
| 28 | 28 | */  | 
                                                        
| 29 | 29 |  $this->create('user_ldap_ajax_clearMappings', 'apps/user_ldap/ajax/clearMappings.php') | 
                                                        
| 30 | -	->actionInclude('user_ldap/ajax/clearMappings.php'); | 
                                                        |
| 30 | +    ->actionInclude('user_ldap/ajax/clearMappings.php'); | 
                                                        |
| 31 | 31 |  $this->create('user_ldap_ajax_deleteConfiguration', 'apps/user_ldap/ajax/deleteConfiguration.php') | 
                                                        
| 32 | -	->actionInclude('user_ldap/ajax/deleteConfiguration.php'); | 
                                                        |
| 32 | +    ->actionInclude('user_ldap/ajax/deleteConfiguration.php'); | 
                                                        |
| 33 | 33 |  $this->create('user_ldap_ajax_getConfiguration', 'apps/user_ldap/ajax/getConfiguration.php') | 
                                                        
| 34 | -	->actionInclude('user_ldap/ajax/getConfiguration.php'); | 
                                                        |
| 34 | +    ->actionInclude('user_ldap/ajax/getConfiguration.php'); | 
                                                        |
| 35 | 35 |  $this->create('user_ldap_ajax_getNewServerConfigPrefix', 'apps/user_ldap/ajax/getNewServerConfigPrefix.php') | 
                                                        
| 36 | -	->actionInclude('user_ldap/ajax/getNewServerConfigPrefix.php'); | 
                                                        |
| 36 | +    ->actionInclude('user_ldap/ajax/getNewServerConfigPrefix.php'); | 
                                                        |
| 37 | 37 |  $this->create('user_ldap_ajax_setConfiguration', 'apps/user_ldap/ajax/setConfiguration.php') | 
                                                        
| 38 | -	->actionInclude('user_ldap/ajax/setConfiguration.php'); | 
                                                        |
| 38 | +    ->actionInclude('user_ldap/ajax/setConfiguration.php'); | 
                                                        |
| 39 | 39 |  $this->create('user_ldap_ajax_testConfiguration', 'apps/user_ldap/ajax/testConfiguration.php') | 
                                                        
| 40 | -	->actionInclude('user_ldap/ajax/testConfiguration.php'); | 
                                                        |
| 40 | +    ->actionInclude('user_ldap/ajax/testConfiguration.php'); | 
                                                        |
| 41 | 41 |  $this->create('user_ldap_ajax_wizard', 'apps/user_ldap/ajax/wizard.php') | 
                                                        
| 42 | -	->actionInclude('user_ldap/ajax/wizard.php'); | 
                                                        |
| 42 | +    ->actionInclude('user_ldap/ajax/wizard.php'); | 
                                                        |
| 43 | 43 | |
| 44 | 44 |  $application = new \OCP\AppFramework\App('user_ldap'); | 
                                                        
| 45 | 45 | $application->registerRoutes($this, [  | 
                                                        
| 46 | - 'ocs' => [  | 
                                                        |
| 47 | - ['name' => 'ConfigAPI#create', 'url' => '/api/v1/config', 'verb' => 'POST'],  | 
                                                        |
| 48 | -		['name' => 'ConfigAPI#show',   'url' => '/api/v1/config/{configID}', 'verb' => 'GET'], | 
                                                        |
| 49 | -		['name' => 'ConfigAPI#modify', 'url' => '/api/v1/config/{configID}', 'verb' => 'PUT'], | 
                                                        |
| 50 | -		['name' => 'ConfigAPI#delete', 'url' => '/api/v1/config/{configID}', 'verb' => 'DELETE'], | 
                                                        |
| 51 | - ]  | 
                                                        |
| 46 | + 'ocs' => [  | 
                                                        |
| 47 | + ['name' => 'ConfigAPI#create', 'url' => '/api/v1/config', 'verb' => 'POST'],  | 
                                                        |
| 48 | +        ['name' => 'ConfigAPI#show',   'url' => '/api/v1/config/{configID}', 'verb' => 'GET'], | 
                                                        |
| 49 | +        ['name' => 'ConfigAPI#modify', 'url' => '/api/v1/config/{configID}', 'verb' => 'PUT'], | 
                                                        |
| 50 | +        ['name' => 'ConfigAPI#delete', 'url' => '/api/v1/config/{configID}', 'verb' => 'DELETE'], | 
                                                        |
| 51 | + ]  | 
                                                        |
| 52 | 52 | ]);  | 
                                                        
| 53 | 53 | |
| 54 | 54 | /** @var \OCA\User_LDAP\AppInfo\Application $application */  | 
                                                        
| 55 | 55 | $application = \OC::$server->query(\OCA\User_LDAP\AppInfo\Application::class);  | 
                                                        
| 56 | 56 | $application->registerRoutes($this, [  | 
                                                        
| 57 | - 'routes' => [  | 
                                                        |
| 58 | - ['name' => 'renewPassword#tryRenewPassword', 'url' => '/renewpassword', 'verb' => 'POST'],  | 
                                                        |
| 59 | -		['name' => 'renewPassword#showRenewPasswordForm', 'url' => '/renewpassword/{user}', 'verb' => 'GET'], | 
                                                        |
| 60 | - ['name' => 'renewPassword#cancel', 'url' => '/renewpassword/cancel', 'verb' => 'GET'],  | 
                                                        |
| 61 | -		['name' => 'renewPassword#showLoginFormInvalidPassword', 'url' => '/renewpassword/invalidlogin/{user}', 'verb' => 'GET'], | 
                                                        |
| 62 | - ]  | 
                                                        |
| 57 | + 'routes' => [  | 
                                                        |
| 58 | + ['name' => 'renewPassword#tryRenewPassword', 'url' => '/renewpassword', 'verb' => 'POST'],  | 
                                                        |
| 59 | +        ['name' => 'renewPassword#showRenewPasswordForm', 'url' => '/renewpassword/{user}', 'verb' => 'GET'], | 
                                                        |
| 60 | + ['name' => 'renewPassword#cancel', 'url' => '/renewpassword/cancel', 'verb' => 'GET'],  | 
                                                        |
| 61 | +        ['name' => 'renewPassword#showLoginFormInvalidPassword', 'url' => '/renewpassword/invalidlogin/{user}', 'verb' => 'GET'], | 
                                                        |
| 62 | + ]  | 
                                                        |
| 63 | 63 | ]);  | 
                                                        
@@ -30,13 +30,13 @@  | 
                                                    ||
| 30 | 30 | $limit = null;  | 
                                                        
| 31 | 31 | $offset = null;  | 
                                                        
| 32 | 32 |  if (isset($_GET['pattern'])) { | 
                                                        
| 33 | - $pattern = (string)$_GET['pattern'];  | 
                                                        |
| 33 | + $pattern = (string) $_GET['pattern'];  | 
                                                        |
| 34 | 34 | }  | 
                                                        
| 35 | 35 |  if (isset($_GET['limit'])) { | 
                                                        
| 36 | - $limit = (int)$_GET['limit'];  | 
                                                        |
| 36 | + $limit = (int) $_GET['limit'];  | 
                                                        |
| 37 | 37 | }  | 
                                                        
| 38 | 38 |  if (isset($_GET['offset'])) { | 
                                                        
| 39 | - $offset = (int)$_GET['offset'];  | 
                                                        |
| 39 | + $offset = (int) $_GET['offset'];  | 
                                                        |
| 40 | 40 | }  | 
                                                        
| 41 | 41 | |
| 42 | 42 | $groups = [];  | 
                                                        
@@ -32,23 +32,23 @@  | 
                                                    ||
| 32 | 32 | $limit = null;  | 
                                                        
| 33 | 33 | $offset = null;  | 
                                                        
| 34 | 34 |  if (isset($_GET['pattern'])) { | 
                                                        
| 35 | - $pattern = (string)$_GET['pattern'];  | 
                                                        |
| 35 | + $pattern = (string)$_GET['pattern'];  | 
                                                        |
| 36 | 36 | }  | 
                                                        
| 37 | 37 |  if (isset($_GET['limit'])) { | 
                                                        
| 38 | - $limit = (int)$_GET['limit'];  | 
                                                        |
| 38 | + $limit = (int)$_GET['limit'];  | 
                                                        |
| 39 | 39 | }  | 
                                                        
| 40 | 40 |  if (isset($_GET['offset'])) { | 
                                                        
| 41 | - $offset = (int)$_GET['offset'];  | 
                                                        |
| 41 | + $offset = (int)$_GET['offset'];  | 
                                                        |
| 42 | 42 | }  | 
                                                        
| 43 | 43 | |
| 44 | 44 | $groups = [];  | 
                                                        
| 45 | 45 |  foreach (\OC::$server->getGroupManager()->search($pattern, $limit, $offset) as $group) { | 
                                                        
| 46 | - $groups[$group->getGID()] = $group->getDisplayName();  | 
                                                        |
| 46 | + $groups[$group->getGID()] = $group->getDisplayName();  | 
                                                        |
| 47 | 47 | }  | 
                                                        
| 48 | 48 | |
| 49 | 49 | $users = [];  | 
                                                        
| 50 | 50 |  foreach (\OC::$server->getUserManager()->searchDisplayName($pattern, $limit, $offset) as $user) { | 
                                                        
| 51 | - $users[$user->getUID()] = $user->getDisplayName();  | 
                                                        |
| 51 | + $users[$user->getUID()] = $user->getDisplayName();  | 
                                                        |
| 52 | 52 | }  | 
                                                        
| 53 | 53 | |
| 54 | 54 | $results = ['groups' => $groups, 'users' => $users];  | 
                                                        
@@ -24,25 +24,25 @@  | 
                                                    ||
| 24 | 24 | namespace OCA\Files_External\Service;  | 
                                                        
| 25 | 25 | |
| 26 | 26 |  class ImportLegacyStoragesService extends LegacyStoragesService { | 
                                                        
| 27 | - private $data;  | 
                                                        |
| 27 | + private $data;  | 
                                                        |
| 28 | 28 | |
| 29 | - /**  | 
                                                        |
| 30 | - * @param BackendService $backendService  | 
                                                        |
| 31 | - */  | 
                                                        |
| 32 | -	public function __construct(BackendService $backendService) { | 
                                                        |
| 33 | - $this->backendService = $backendService;  | 
                                                        |
| 34 | - }  | 
                                                        |
| 29 | + /**  | 
                                                        |
| 30 | + * @param BackendService $backendService  | 
                                                        |
| 31 | + */  | 
                                                        |
| 32 | +    public function __construct(BackendService $backendService) { | 
                                                        |
| 33 | + $this->backendService = $backendService;  | 
                                                        |
| 34 | + }  | 
                                                        |
| 35 | 35 | |
| 36 | -	public function setData($data) { | 
                                                        |
| 37 | - $this->data = $data;  | 
                                                        |
| 38 | - }  | 
                                                        |
| 36 | +    public function setData($data) { | 
                                                        |
| 37 | + $this->data = $data;  | 
                                                        |
| 38 | + }  | 
                                                        |
| 39 | 39 | |
| 40 | - /**  | 
                                                        |
| 41 | - * Read legacy config data  | 
                                                        |
| 42 | - *  | 
                                                        |
| 43 | - * @return array list of mount configs  | 
                                                        |
| 44 | - */  | 
                                                        |
| 45 | -	protected function readLegacyConfig() { | 
                                                        |
| 46 | - return $this->data;  | 
                                                        |
| 47 | - }  | 
                                                        |
| 40 | + /**  | 
                                                        |
| 41 | + * Read legacy config data  | 
                                                        |
| 42 | + *  | 
                                                        |
| 43 | + * @return array list of mount configs  | 
                                                        |
| 44 | + */  | 
                                                        |
| 45 | +    protected function readLegacyConfig() { | 
                                                        |
| 46 | + return $this->data;  | 
                                                        |
| 47 | + }  | 
                                                        |
| 48 | 48 | }  | 
                                                        
@@ -172,11 +172,11 @@  | 
                                                    ||
| 172 | 172 |  	public function getStorageForAllUsers() { | 
                                                        
| 173 | 173 | $mounts = $this->dbConfig->getAllMounts();  | 
                                                        
| 174 | 174 | $configs = array_map([$this, 'getStorageConfigFromDBMount'], $mounts);  | 
                                                        
| 175 | -		$configs = array_filter($configs, function ($config) { | 
                                                        |
| 175 | +		$configs = array_filter($configs, function($config) { | 
                                                        |
| 176 | 176 | return $config instanceof StorageConfig;  | 
                                                        
| 177 | 177 | });  | 
                                                        
| 178 | 178 | |
| 179 | -		$keys = array_map(function (StorageConfig $config) { | 
                                                        |
| 179 | +		$keys = array_map(function(StorageConfig $config) { | 
                                                        |
| 180 | 180 | return $config->getId();  | 
                                                        
| 181 | 181 | }, $configs);  | 
                                                        
| 182 | 182 | |
@@ -36,151 +36,151 @@  | 
                                                    ||
| 36 | 36 | * Service class to manage global external storage  | 
                                                        
| 37 | 37 | */  | 
                                                        
| 38 | 38 |  class GlobalStoragesService extends StoragesService { | 
                                                        
| 39 | - /**  | 
                                                        |
| 40 | - * Triggers $signal for all applicable users of the given  | 
                                                        |
| 41 | - * storage  | 
                                                        |
| 42 | - *  | 
                                                        |
| 43 | - * @param StorageConfig $storage storage data  | 
                                                        |
| 44 | - * @param string $signal signal to trigger  | 
                                                        |
| 45 | - */  | 
                                                        |
| 46 | -	protected function triggerHooks(StorageConfig $storage, $signal) { | 
                                                        |
| 47 | - // FIXME: Use as expression in empty once PHP 5.4 support is dropped  | 
                                                        |
| 48 | - $applicableUsers = $storage->getApplicableUsers();  | 
                                                        |
| 49 | - $applicableGroups = $storage->getApplicableGroups();  | 
                                                        |
| 50 | -		if (empty($applicableUsers) && empty($applicableGroups)) { | 
                                                        |
| 51 | - // raise for user "all"  | 
                                                        |
| 52 | - $this->triggerApplicableHooks(  | 
                                                        |
| 53 | - $signal,  | 
                                                        |
| 54 | - $storage->getMountPoint(),  | 
                                                        |
| 55 | - \OCA\Files_External\MountConfig::MOUNT_TYPE_USER,  | 
                                                        |
| 56 | - ['all']  | 
                                                        |
| 57 | - );  | 
                                                        |
| 58 | - return;  | 
                                                        |
| 59 | - }  | 
                                                        |
| 60 | -  | 
                                                        |
| 61 | - $this->triggerApplicableHooks(  | 
                                                        |
| 62 | - $signal,  | 
                                                        |
| 63 | - $storage->getMountPoint(),  | 
                                                        |
| 64 | - \OCA\Files_External\MountConfig::MOUNT_TYPE_USER,  | 
                                                        |
| 65 | - $applicableUsers  | 
                                                        |
| 66 | - );  | 
                                                        |
| 67 | - $this->triggerApplicableHooks(  | 
                                                        |
| 68 | - $signal,  | 
                                                        |
| 69 | - $storage->getMountPoint(),  | 
                                                        |
| 70 | - \OCA\Files_External\MountConfig::MOUNT_TYPE_GROUP,  | 
                                                        |
| 71 | - $applicableGroups  | 
                                                        |
| 72 | - );  | 
                                                        |
| 73 | - }  | 
                                                        |
| 74 | -  | 
                                                        |
| 75 | - /**  | 
                                                        |
| 76 | - * Triggers signal_create_mount or signal_delete_mount to  | 
                                                        |
| 77 | - * accommodate for additions/deletions in applicableUsers  | 
                                                        |
| 78 | - * and applicableGroups fields.  | 
                                                        |
| 79 | - *  | 
                                                        |
| 80 | - * @param StorageConfig $oldStorage old storage config  | 
                                                        |
| 81 | - * @param StorageConfig $newStorage new storage config  | 
                                                        |
| 82 | - */  | 
                                                        |
| 83 | -	protected function triggerChangeHooks(StorageConfig $oldStorage, StorageConfig $newStorage) { | 
                                                        |
| 84 | - // if mount point changed, it's like a deletion + creation  | 
                                                        |
| 85 | -		if ($oldStorage->getMountPoint() !== $newStorage->getMountPoint()) { | 
                                                        |
| 86 | - $this->triggerHooks($oldStorage, Filesystem::signal_delete_mount);  | 
                                                        |
| 87 | - $this->triggerHooks($newStorage, Filesystem::signal_create_mount);  | 
                                                        |
| 88 | - return;  | 
                                                        |
| 89 | - }  | 
                                                        |
| 90 | -  | 
                                                        |
| 91 | - $userAdditions = array_diff($newStorage->getApplicableUsers(), $oldStorage->getApplicableUsers());  | 
                                                        |
| 92 | - $userDeletions = array_diff($oldStorage->getApplicableUsers(), $newStorage->getApplicableUsers());  | 
                                                        |
| 93 | - $groupAdditions = array_diff($newStorage->getApplicableGroups(), $oldStorage->getApplicableGroups());  | 
                                                        |
| 94 | - $groupDeletions = array_diff($oldStorage->getApplicableGroups(), $newStorage->getApplicableGroups());  | 
                                                        |
| 95 | -  | 
                                                        |
| 96 | - // FIXME: Use as expression in empty once PHP 5.4 support is dropped  | 
                                                        |
| 97 | - // if no applicable were set, raise a signal for "all"  | 
                                                        |
| 98 | - $oldApplicableUsers = $oldStorage->getApplicableUsers();  | 
                                                        |
| 99 | - $oldApplicableGroups = $oldStorage->getApplicableGroups();  | 
                                                        |
| 100 | -		if (empty($oldApplicableUsers) && empty($oldApplicableGroups)) { | 
                                                        |
| 101 | - $this->triggerApplicableHooks(  | 
                                                        |
| 102 | - Filesystem::signal_delete_mount,  | 
                                                        |
| 103 | - $oldStorage->getMountPoint(),  | 
                                                        |
| 104 | - \OCA\Files_External\MountConfig::MOUNT_TYPE_USER,  | 
                                                        |
| 105 | - ['all']  | 
                                                        |
| 106 | - );  | 
                                                        |
| 107 | - }  | 
                                                        |
| 108 | -  | 
                                                        |
| 109 | - // trigger delete for removed users  | 
                                                        |
| 110 | - $this->triggerApplicableHooks(  | 
                                                        |
| 111 | - Filesystem::signal_delete_mount,  | 
                                                        |
| 112 | - $oldStorage->getMountPoint(),  | 
                                                        |
| 113 | - \OCA\Files_External\MountConfig::MOUNT_TYPE_USER,  | 
                                                        |
| 114 | - $userDeletions  | 
                                                        |
| 115 | - );  | 
                                                        |
| 116 | -  | 
                                                        |
| 117 | - // trigger delete for removed groups  | 
                                                        |
| 118 | - $this->triggerApplicableHooks(  | 
                                                        |
| 119 | - Filesystem::signal_delete_mount,  | 
                                                        |
| 120 | - $oldStorage->getMountPoint(),  | 
                                                        |
| 121 | - \OCA\Files_External\MountConfig::MOUNT_TYPE_GROUP,  | 
                                                        |
| 122 | - $groupDeletions  | 
                                                        |
| 123 | - );  | 
                                                        |
| 124 | -  | 
                                                        |
| 125 | - // and now add the new users  | 
                                                        |
| 126 | - $this->triggerApplicableHooks(  | 
                                                        |
| 127 | - Filesystem::signal_create_mount,  | 
                                                        |
| 128 | - $newStorage->getMountPoint(),  | 
                                                        |
| 129 | - \OCA\Files_External\MountConfig::MOUNT_TYPE_USER,  | 
                                                        |
| 130 | - $userAdditions  | 
                                                        |
| 131 | - );  | 
                                                        |
| 132 | -  | 
                                                        |
| 133 | - // and now add the new groups  | 
                                                        |
| 134 | - $this->triggerApplicableHooks(  | 
                                                        |
| 135 | - Filesystem::signal_create_mount,  | 
                                                        |
| 136 | - $newStorage->getMountPoint(),  | 
                                                        |
| 137 | - \OCA\Files_External\MountConfig::MOUNT_TYPE_GROUP,  | 
                                                        |
| 138 | - $groupAdditions  | 
                                                        |
| 139 | - );  | 
                                                        |
| 140 | -  | 
                                                        |
| 141 | - // FIXME: Use as expression in empty once PHP 5.4 support is dropped  | 
                                                        |
| 142 | - // if no applicable, raise a signal for "all"  | 
                                                        |
| 143 | - $newApplicableUsers = $newStorage->getApplicableUsers();  | 
                                                        |
| 144 | - $newApplicableGroups = $newStorage->getApplicableGroups();  | 
                                                        |
| 145 | -		if (empty($newApplicableUsers) && empty($newApplicableGroups)) { | 
                                                        |
| 146 | - $this->triggerApplicableHooks(  | 
                                                        |
| 147 | - Filesystem::signal_create_mount,  | 
                                                        |
| 148 | - $newStorage->getMountPoint(),  | 
                                                        |
| 149 | - \OCA\Files_External\MountConfig::MOUNT_TYPE_USER,  | 
                                                        |
| 150 | - ['all']  | 
                                                        |
| 151 | - );  | 
                                                        |
| 152 | - }  | 
                                                        |
| 153 | - }  | 
                                                        |
| 154 | -  | 
                                                        |
| 155 | - /**  | 
                                                        |
| 156 | - * Get the visibility type for this controller, used in validation  | 
                                                        |
| 157 | - *  | 
                                                        |
| 158 | - * @return string BackendService::VISIBILITY_* constants  | 
                                                        |
| 159 | - */  | 
                                                        |
| 160 | -	public function getVisibilityType() { | 
                                                        |
| 161 | - return BackendService::VISIBILITY_ADMIN;  | 
                                                        |
| 162 | - }  | 
                                                        |
| 163 | -  | 
                                                        |
| 164 | -	protected function isApplicable(StorageConfig $config) { | 
                                                        |
| 165 | - return true;  | 
                                                        |
| 166 | - }  | 
                                                        |
| 167 | -  | 
                                                        |
| 168 | - /**  | 
                                                        |
| 169 | - * Get all configured admin and personal mounts  | 
                                                        |
| 170 | - *  | 
                                                        |
| 171 | - * @return StorageConfig[] map of storage id to storage config  | 
                                                        |
| 172 | - */  | 
                                                        |
| 173 | -	public function getStorageForAllUsers() { | 
                                                        |
| 174 | - $mounts = $this->dbConfig->getAllMounts();  | 
                                                        |
| 175 | - $configs = array_map([$this, 'getStorageConfigFromDBMount'], $mounts);  | 
                                                        |
| 176 | -		$configs = array_filter($configs, function ($config) { | 
                                                        |
| 177 | - return $config instanceof StorageConfig;  | 
                                                        |
| 178 | - });  | 
                                                        |
| 179 | -  | 
                                                        |
| 180 | -		$keys = array_map(function (StorageConfig $config) { | 
                                                        |
| 181 | - return $config->getId();  | 
                                                        |
| 182 | - }, $configs);  | 
                                                        |
| 183 | -  | 
                                                        |
| 184 | - return array_combine($keys, $configs);  | 
                                                        |
| 185 | - }  | 
                                                        |
| 39 | + /**  | 
                                                        |
| 40 | + * Triggers $signal for all applicable users of the given  | 
                                                        |
| 41 | + * storage  | 
                                                        |
| 42 | + *  | 
                                                        |
| 43 | + * @param StorageConfig $storage storage data  | 
                                                        |
| 44 | + * @param string $signal signal to trigger  | 
                                                        |
| 45 | + */  | 
                                                        |
| 46 | +    protected function triggerHooks(StorageConfig $storage, $signal) { | 
                                                        |
| 47 | + // FIXME: Use as expression in empty once PHP 5.4 support is dropped  | 
                                                        |
| 48 | + $applicableUsers = $storage->getApplicableUsers();  | 
                                                        |
| 49 | + $applicableGroups = $storage->getApplicableGroups();  | 
                                                        |
| 50 | +        if (empty($applicableUsers) && empty($applicableGroups)) { | 
                                                        |
| 51 | + // raise for user "all"  | 
                                                        |
| 52 | + $this->triggerApplicableHooks(  | 
                                                        |
| 53 | + $signal,  | 
                                                        |
| 54 | + $storage->getMountPoint(),  | 
                                                        |
| 55 | + \OCA\Files_External\MountConfig::MOUNT_TYPE_USER,  | 
                                                        |
| 56 | + ['all']  | 
                                                        |
| 57 | + );  | 
                                                        |
| 58 | + return;  | 
                                                        |
| 59 | + }  | 
                                                        |
| 60 | +  | 
                                                        |
| 61 | + $this->triggerApplicableHooks(  | 
                                                        |
| 62 | + $signal,  | 
                                                        |
| 63 | + $storage->getMountPoint(),  | 
                                                        |
| 64 | + \OCA\Files_External\MountConfig::MOUNT_TYPE_USER,  | 
                                                        |
| 65 | + $applicableUsers  | 
                                                        |
| 66 | + );  | 
                                                        |
| 67 | + $this->triggerApplicableHooks(  | 
                                                        |
| 68 | + $signal,  | 
                                                        |
| 69 | + $storage->getMountPoint(),  | 
                                                        |
| 70 | + \OCA\Files_External\MountConfig::MOUNT_TYPE_GROUP,  | 
                                                        |
| 71 | + $applicableGroups  | 
                                                        |
| 72 | + );  | 
                                                        |
| 73 | + }  | 
                                                        |
| 74 | +  | 
                                                        |
| 75 | + /**  | 
                                                        |
| 76 | + * Triggers signal_create_mount or signal_delete_mount to  | 
                                                        |
| 77 | + * accommodate for additions/deletions in applicableUsers  | 
                                                        |
| 78 | + * and applicableGroups fields.  | 
                                                        |
| 79 | + *  | 
                                                        |
| 80 | + * @param StorageConfig $oldStorage old storage config  | 
                                                        |
| 81 | + * @param StorageConfig $newStorage new storage config  | 
                                                        |
| 82 | + */  | 
                                                        |
| 83 | +    protected function triggerChangeHooks(StorageConfig $oldStorage, StorageConfig $newStorage) { | 
                                                        |
| 84 | + // if mount point changed, it's like a deletion + creation  | 
                                                        |
| 85 | +        if ($oldStorage->getMountPoint() !== $newStorage->getMountPoint()) { | 
                                                        |
| 86 | + $this->triggerHooks($oldStorage, Filesystem::signal_delete_mount);  | 
                                                        |
| 87 | + $this->triggerHooks($newStorage, Filesystem::signal_create_mount);  | 
                                                        |
| 88 | + return;  | 
                                                        |
| 89 | + }  | 
                                                        |
| 90 | +  | 
                                                        |
| 91 | + $userAdditions = array_diff($newStorage->getApplicableUsers(), $oldStorage->getApplicableUsers());  | 
                                                        |
| 92 | + $userDeletions = array_diff($oldStorage->getApplicableUsers(), $newStorage->getApplicableUsers());  | 
                                                        |
| 93 | + $groupAdditions = array_diff($newStorage->getApplicableGroups(), $oldStorage->getApplicableGroups());  | 
                                                        |
| 94 | + $groupDeletions = array_diff($oldStorage->getApplicableGroups(), $newStorage->getApplicableGroups());  | 
                                                        |
| 95 | +  | 
                                                        |
| 96 | + // FIXME: Use as expression in empty once PHP 5.4 support is dropped  | 
                                                        |
| 97 | + // if no applicable were set, raise a signal for "all"  | 
                                                        |
| 98 | + $oldApplicableUsers = $oldStorage->getApplicableUsers();  | 
                                                        |
| 99 | + $oldApplicableGroups = $oldStorage->getApplicableGroups();  | 
                                                        |
| 100 | +        if (empty($oldApplicableUsers) && empty($oldApplicableGroups)) { | 
                                                        |
| 101 | + $this->triggerApplicableHooks(  | 
                                                        |
| 102 | + Filesystem::signal_delete_mount,  | 
                                                        |
| 103 | + $oldStorage->getMountPoint(),  | 
                                                        |
| 104 | + \OCA\Files_External\MountConfig::MOUNT_TYPE_USER,  | 
                                                        |
| 105 | + ['all']  | 
                                                        |
| 106 | + );  | 
                                                        |
| 107 | + }  | 
                                                        |
| 108 | +  | 
                                                        |
| 109 | + // trigger delete for removed users  | 
                                                        |
| 110 | + $this->triggerApplicableHooks(  | 
                                                        |
| 111 | + Filesystem::signal_delete_mount,  | 
                                                        |
| 112 | + $oldStorage->getMountPoint(),  | 
                                                        |
| 113 | + \OCA\Files_External\MountConfig::MOUNT_TYPE_USER,  | 
                                                        |
| 114 | + $userDeletions  | 
                                                        |
| 115 | + );  | 
                                                        |
| 116 | +  | 
                                                        |
| 117 | + // trigger delete for removed groups  | 
                                                        |
| 118 | + $this->triggerApplicableHooks(  | 
                                                        |
| 119 | + Filesystem::signal_delete_mount,  | 
                                                        |
| 120 | + $oldStorage->getMountPoint(),  | 
                                                        |
| 121 | + \OCA\Files_External\MountConfig::MOUNT_TYPE_GROUP,  | 
                                                        |
| 122 | + $groupDeletions  | 
                                                        |
| 123 | + );  | 
                                                        |
| 124 | +  | 
                                                        |
| 125 | + // and now add the new users  | 
                                                        |
| 126 | + $this->triggerApplicableHooks(  | 
                                                        |
| 127 | + Filesystem::signal_create_mount,  | 
                                                        |
| 128 | + $newStorage->getMountPoint(),  | 
                                                        |
| 129 | + \OCA\Files_External\MountConfig::MOUNT_TYPE_USER,  | 
                                                        |
| 130 | + $userAdditions  | 
                                                        |
| 131 | + );  | 
                                                        |
| 132 | +  | 
                                                        |
| 133 | + // and now add the new groups  | 
                                                        |
| 134 | + $this->triggerApplicableHooks(  | 
                                                        |
| 135 | + Filesystem::signal_create_mount,  | 
                                                        |
| 136 | + $newStorage->getMountPoint(),  | 
                                                        |
| 137 | + \OCA\Files_External\MountConfig::MOUNT_TYPE_GROUP,  | 
                                                        |
| 138 | + $groupAdditions  | 
                                                        |
| 139 | + );  | 
                                                        |
| 140 | +  | 
                                                        |
| 141 | + // FIXME: Use as expression in empty once PHP 5.4 support is dropped  | 
                                                        |
| 142 | + // if no applicable, raise a signal for "all"  | 
                                                        |
| 143 | + $newApplicableUsers = $newStorage->getApplicableUsers();  | 
                                                        |
| 144 | + $newApplicableGroups = $newStorage->getApplicableGroups();  | 
                                                        |
| 145 | +        if (empty($newApplicableUsers) && empty($newApplicableGroups)) { | 
                                                        |
| 146 | + $this->triggerApplicableHooks(  | 
                                                        |
| 147 | + Filesystem::signal_create_mount,  | 
                                                        |
| 148 | + $newStorage->getMountPoint(),  | 
                                                        |
| 149 | + \OCA\Files_External\MountConfig::MOUNT_TYPE_USER,  | 
                                                        |
| 150 | + ['all']  | 
                                                        |
| 151 | + );  | 
                                                        |
| 152 | + }  | 
                                                        |
| 153 | + }  | 
                                                        |
| 154 | +  | 
                                                        |
| 155 | + /**  | 
                                                        |
| 156 | + * Get the visibility type for this controller, used in validation  | 
                                                        |
| 157 | + *  | 
                                                        |
| 158 | + * @return string BackendService::VISIBILITY_* constants  | 
                                                        |
| 159 | + */  | 
                                                        |
| 160 | +    public function getVisibilityType() { | 
                                                        |
| 161 | + return BackendService::VISIBILITY_ADMIN;  | 
                                                        |
| 162 | + }  | 
                                                        |
| 163 | +  | 
                                                        |
| 164 | +    protected function isApplicable(StorageConfig $config) { | 
                                                        |
| 165 | + return true;  | 
                                                        |
| 166 | + }  | 
                                                        |
| 167 | +  | 
                                                        |
| 168 | + /**  | 
                                                        |
| 169 | + * Get all configured admin and personal mounts  | 
                                                        |
| 170 | + *  | 
                                                        |
| 171 | + * @return StorageConfig[] map of storage id to storage config  | 
                                                        |
| 172 | + */  | 
                                                        |
| 173 | +    public function getStorageForAllUsers() { | 
                                                        |
| 174 | + $mounts = $this->dbConfig->getAllMounts();  | 
                                                        |
| 175 | + $configs = array_map([$this, 'getStorageConfigFromDBMount'], $mounts);  | 
                                                        |
| 176 | +        $configs = array_filter($configs, function ($config) { | 
                                                        |
| 177 | + return $config instanceof StorageConfig;  | 
                                                        |
| 178 | + });  | 
                                                        |
| 179 | +  | 
                                                        |
| 180 | +        $keys = array_map(function (StorageConfig $config) { | 
                                                        |
| 181 | + return $config->getId();  | 
                                                        |
| 182 | + }, $configs);  | 
                                                        |
| 183 | +  | 
                                                        |
| 184 | + return array_combine($keys, $configs);  | 
                                                        |
| 185 | + }  | 
                                                        |
| 186 | 186 | }  |