Skip to content

Commit a333c8f

Browse files
committed
feat(hooks): Ignore / in front of class name
Allow to use ::class as class names. Only works if the class actually exists, which in many case, isn't the case anymore. Signed-off-by: Carl Schwan <carlschwan@kde.org>
1 parent cc6a8d4 commit a333c8f

1 file changed

Lines changed: 18 additions & 12 deletions

File tree

lib/private/legacy/OC_Hook.php

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ class OC_Hook {
5353
['\OC\Files\Storage\Shared','fopen'],
5454
['\OC\Files\Storage\Shared','file_get_contents'],
5555
['\OC\Files\Storage\Shared','file_put_contents'],
56-
['\OCA\Files_Trashbin\Trashbin','post_moveToTrash'],
57-
['\OCA\Files_Trashbin\Trashbin','post_restore'],
56+
[\OCA\Files_Trashbin\Trashbin::class,'post_moveToTrash'],
57+
[\OCA\Files_Trashbin\Trashbin::class,'post_restore'],
5858
['\OCP\Trashbin','preDeleteAll'],
5959
['\OCP\Trashbin','deleteAll'],
6060
['\OCP\Versions','rollback'],
@@ -73,8 +73,8 @@ class OC_Hook {
7373
['\OC\User','assignedUserId'],
7474
['\OC\User','preUnassignedUserId'],
7575
['\OC\User','postUnassignedUserId'],
76-
['\OC\Files\Cache\Scanner','scan_file'],
77-
['\OC\Files\Cache\Scanner','post_scan_file'],
76+
[OC\Files\Cache\Scanner::class,'scan_file'],
77+
[OC\Files\Cache\Scanner::class,'post_scan_file'],
7878
['Scanner','removeFromCache'],
7979
['Scanner','addToCache'],
8080
['Scanner','correctFolderSize'],
@@ -89,13 +89,15 @@ class OC_Hook {
8989
* @param string $signalName name of signal
9090
* @param string|object $slotClass class name of slot
9191
* @param string $slotName name of slot
92-
* @return bool
9392
*
9493
* This function makes it very easy to connect to use hooks.
9594
*
9695
* TODO: write example
9796
*/
98-
public static function connect($signalClass, $signalName, $slotClass, $slotName) {
97+
public static function connect(string $signalClass, string $signalName, string|object $slotClass, string $slotName): bool {
98+
if (str_starts_with($signalClass, '/')) {
99+
$signalName = substr($signalClass, 1);
100+
}
99101
$found = array_find(self::$allowList, function ($allowed) use ($signalClass, $signalName) {
100102
[$allowedClass, $allowedSignal] = $allowed;
101103
return $allowedClass === $signalClass && $allowedSignal === $signalName;
@@ -143,7 +145,10 @@ public static function connect($signalClass, $signalName, $slotClass, $slotName)
143145
*
144146
* TODO: write example
145147
*/
146-
public static function emit($signalClass, $signalName, $params = []) {
148+
public static function emit(string $signalClass, string $signalName, $params = []): bool {
149+
if (str_starts_with($signalClass, '/')) {
150+
$signalName = substr($signalClass, 1);
151+
}
147152
// Return false if no hook handlers are listening to this
148153
// emitting class
149154
if (!array_key_exists($signalClass, self::$registered)) {
@@ -176,12 +181,13 @@ public static function emit($signalClass, $signalName, $params = []) {
176181
}
177182

178183
/**
179-
* clear hooks
180-
* @param string $signalClass
181-
* @param string $signalName
184+
* Clear hooks
182185
*/
183-
public static function clear($signalClass = '', $signalName = '') {
186+
public static function clear(string $signalClass = '', string $signalName = ''): void {
184187
if ($signalClass) {
188+
if (str_starts_with($signalClass, '/')) {
189+
$signalName = substr($signalClass, 1);
190+
}
185191
if ($signalName) {
186192
self::$registered[$signalClass][$signalName] = [];
187193
} else {
@@ -196,7 +202,7 @@ public static function clear($signalClass = '', $signalName = '') {
196202
* DO NOT USE!
197203
* For unit tests ONLY!
198204
*/
199-
public static function getHooks() {
205+
public static function getHooks(): array {
200206
return self::$registered;
201207
}
202208
}

0 commit comments

Comments
 (0)