1
+ <?php
2
+ /**
3
+ * @package panopticon
4
+ * @copyright Copyright (c)2023-2024 Nicholas K. Dionysopoulos / Akeeba Ltd
5
+ * @license https://www.gnu.org/licenses/agpl-3.0.txt GNU Affero General Public License, version 3 or later
6
+ */
7
+
8
+ namespace Akeeba \Panopticon \CliCommand ;
9
+
10
+ defined ('AKEEBA ' ) || die;
11
+
12
+ use Akeeba \Panopticon \CliCommand \Attribute \ConfigAssertion ;
13
+ use Akeeba \Panopticon \CliCommand \Trait \PrintFormattedArrayTrait ;
14
+ use Akeeba \Panopticon \Factory ;
15
+ use Akeeba \Panopticon \Model \Users ;
16
+ use Awf \Registry \Registry ;
17
+ use Symfony \Component \Console \Attribute \AsCommand ;
18
+ use Symfony \Component \Console \Command \Command ;
19
+ use Symfony \Component \Console \Input \InputArgument ;
20
+ use Symfony \Component \Console \Input \InputInterface ;
21
+ use Symfony \Component \Console \Input \InputOption ;
22
+ use Symfony \Component \Console \Output \OutputInterface ;
23
+
24
+ #[AsCommand(
25
+ name: 'user:config:list ' ,
26
+ description: 'List user configuration variables ' ,
27
+ hidden: false ,
28
+ )]
29
+ #[ConfigAssertion(true )]
30
+ class UserConfigList extends AbstractCommand
31
+ {
32
+ use PrintFormattedArrayTrait;
33
+
34
+ protected function execute (InputInterface $ input , OutputInterface $ output ): int
35
+ {
36
+ $ container = Factory::getContainer ();
37
+ $ ret = [];
38
+
39
+ /** @var Users $model */
40
+ $ model = $ container ->mvcFactory ->makeTempModel ('Users ' );
41
+ $ id = intval ($ input ->getArgument ('id ' ));
42
+
43
+ try
44
+ {
45
+ $ model ->findOrFail ($ id );
46
+ }
47
+ catch (\Exception $ e )
48
+ {
49
+ $ this ->ioStyle ->error (
50
+ [
51
+ sprintf ('Could not find user %d ' , $ id ),
52
+ $ e ->getMessage (),
53
+ ]
54
+ );
55
+ }
56
+
57
+ $ config = $ this ->flatten ((new Registry ($ model ->parameters ))->toArray ());
58
+ $ ret = [];
59
+
60
+ foreach ($ config as $ k => $ v )
61
+ {
62
+ $ item ['key ' ] = $ k ;
63
+ $ item ['value ' ] = $ v ;
64
+
65
+ $ ret [] = $ item ;
66
+ }
67
+
68
+ // Output the information in the requested format
69
+ $ this ->printFormattedArray (
70
+ $ ret ,
71
+ $ input ->getOption ('format ' ) ?: 'table '
72
+ );
73
+
74
+ return Command::SUCCESS ;
75
+ }
76
+
77
+ protected function configure (): void
78
+ {
79
+ $ this
80
+ ->addArgument ('id ' , InputArgument::REQUIRED , 'The numeric user ID to list config values for ' )
81
+ ->addOption (
82
+ 'format ' , 'f ' , InputOption::VALUE_OPTIONAL , 'Output format (table, json, yaml, csv, count) ' , 'table '
83
+ );
84
+ }
85
+
86
+ private function flatten (array $ array , $ prefix = '' ): array
87
+ {
88
+ $ ret = [];
89
+
90
+ foreach ($ array as $ key => $ value )
91
+ {
92
+ if (is_array ($ value ))
93
+ {
94
+ foreach ($ this ->flatten ($ value , $ prefix . $ key . '. ' ) as $ k1 => $ v1 )
95
+ {
96
+ $ ret [$ k1 ] = $ v1 ;
97
+ }
98
+ }
99
+ else
100
+ {
101
+ $ ret [$ prefix . $ key ] = $ value ;
102
+ }
103
+ }
104
+
105
+ return $ ret ;
106
+ }
107
+ }
0 commit comments