1 | <?php |
||
2 | |||
3 | /** |
||
4 | * webtrees-lib: MyArtJaub library for webtrees |
||
5 | * Helper functions to be used in the core webtrees application. |
||
6 | * |
||
7 | * @package MyArtJaub\Webtrees |
||
8 | * @subpackage Helpers |
||
9 | * @author Jonathan Jaubart <[email protected]> |
||
10 | * @copyright Copyright (c) 2021-2022, Jonathan Jaubart |
||
11 | * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 |
||
12 | */ |
||
13 | |||
14 | use Illuminate\Contracts\Container\BindingResolutionException; |
||
15 | use Illuminate\Support\Collection; |
||
16 | use MyArtJaub\Webtrees\Contracts\Hooks\HookServiceInterface; |
||
17 | |||
18 | /** |
||
19 | * Invoke a hook interface and get hold of its result. |
||
20 | * |
||
21 | * @template THook of \MyArtJaub\Webtrees\Contracts\Hooks\HookInterface |
||
22 | * @template TCollector of \MyArtJaub\Webtrees\Contracts\Hooks\HookCollectorInterface |
||
23 | * @template TReturn |
||
24 | * |
||
25 | * @param class-string<THook> $hook_interface |
||
0 ignored issues
–
show
Documentation
Bug
introduced
by
![]() |
|||
26 | * @param callable(TCollector): TReturn $apply |
||
27 | * @param TReturn|null $default |
||
28 | * @return TReturn|null |
||
29 | */ |
||
30 | function hook(string $hook_interface, callable $apply, $default = null) |
||
31 | { |
||
32 | try { |
||
33 | $hook_collector = app(HookServiceInterface::class)->use($hook_interface); |
||
34 | if ($hook_collector !== null) { |
||
35 | return $apply($hook_collector); |
||
36 | } |
||
37 | } catch (BindingResolutionException $ex) { |
||
0 ignored issues
–
show
Coding Style
Comprehensibility
introduced
by
|
|||
38 | } |
||
39 | |||
40 | return $default; |
||
41 | } |
||
42 | |||
43 | /** |
||
44 | * Get the updated column index after insertion of new columns. |
||
45 | * |
||
46 | * @param int $initial_index |
||
47 | * @param Collection<int> $new_column_indexes |
||
48 | * @return int |
||
49 | */ |
||
50 | function columnIndex(int $initial_index, Collection $new_column_indexes): int |
||
51 | { |
||
52 | return $initial_index + $new_column_indexes->filter(fn(int $i) => $i <= $initial_index)->count(); |
||
53 | } |
||
54 |