Passed
Push — main ( 87fed9...27211a )
by Thierry
04:04
created
jaxon-core/src/Plugin/Response/Script/ScriptPlugin.php 1 patch
Switch Indentation   +47 added lines, -47 removed lines patch added patch discarded remove patch
@@ -26,56 +26,56 @@  discard block
 block discarded – undo
26 26
 
27 27
 class ScriptPlugin extends AbstractResponsePlugin
28 28
 {
29
-    /**
29
+/**
30 30
      * @const The plugin name
31 31
      */
32
-    public const NAME = 'script';
32
+public const NAME = 'script';
33 33
 
34
-    /**
34
+/**
35 35
      * The class constructor
36 36
      *
37 37
      * @param CallFactory $xFactory
38 38
      */
39
-    public function __construct(private CallFactory $xFactory)
40
-    {}
39
+public function __construct(private CallFactory $xFactory)
40
+{}
41 41
 
42
-    /**
42
+/**
43 43
      * @return Closure
44 44
      */
45
-    private function getCallback(): Closure
46
-    {
47
-        // The closure needs to capture the response object the script plugin is called with.
48
-        $xResponse = $this->response();
49
-        return function(JsExpr $xJsExpr) use($xResponse) {
50
-            // Add the newly created expression to the response
51
-            $aOptions = [
52
-                'expr' => $xJsExpr,
53
-                'context' => is_a($xResponse, NodeResponse::class) ?
54
-                    ['component' => true] : [],
55
-            ];
56
-            $xResponse->addCommand('script.exec.expr', $aOptions)
57
-                ->setOption('plugin', $this->getName());
58
-        };
59
-    }
45
+private function getCallback(): Closure
46
+{
47
+// The closure needs to capture the response object the script plugin is called with.
48
+$xResponse = $this->response();
49
+return function(JsExpr $xJsExpr) use($xResponse) {
50
+// Add the newly created expression to the response
51
+$aOptions = [
52
+    'expr' => $xJsExpr,
53
+    'context' => is_a($xResponse, NodeResponse::class) ?
54
+        ['component' => true] : [],
55
+];
56
+$xResponse->addCommand('script.exec.expr', $aOptions)
57
+    ->setOption('plugin', $this->getName());
58
+};
59
+}
60 60
 
61
-    /**
61
+/**
62 62
      * @inheritDoc
63 63
      */
64
-    public function getName(): string
65
-    {
66
-        return self::NAME;
67
-    }
64
+public function getName(): string
65
+{
66
+return self::NAME;
67
+}
68 68
 
69
-    /**
69
+/**
70 70
      * @inheritDoc
71 71
      */
72
-    public function getHash(): string
73
-    {
74
-        // Use the version number as hash
75
-        return '5.0.0';
76
-    }
72
+public function getHash(): string
73
+{
74
+// Use the version number as hash
75
+return '5.0.0';
76
+}
77 77
 
78
-    /**
78
+/**
79 79
      * Create a JQuery selector expression, and link it to the current response.
80 80
      *
81 81
      * @param string $sPath    The jQuery selector path
@@ -83,32 +83,32 @@  discard block
 block discarded – undo
83 83
      *
84 84
      * @return JqSelectorCall
85 85
      */
86
-    public function jq(string $sPath = '', $xContext = null): JqSelectorCall
87
-    {
88
-        return $this->xFactory->jq($sPath, $xContext, $this->getCallback());
89
-    }
86
+public function jq(string $sPath = '', $xContext = null): JqSelectorCall
87
+{
88
+return $this->xFactory->jq($sPath, $xContext, $this->getCallback());
89
+}
90 90
 
91
-    /**
91
+/**
92 92
      * Create a Javascript object expression, and link it to the current response.
93 93
      *
94 94
      * @param string $sObject
95 95
      *
96 96
      * @return JsObjectCall
97 97
      */
98
-    public function jo(string $sObject = ''): JsObjectCall
99
-    {
100
-        return $this->xFactory->jo($sObject, $this->getCallback());
101
-    }
98
+public function jo(string $sObject = ''): JsObjectCall
99
+{
100
+return $this->xFactory->jo($sObject, $this->getCallback());
101
+}
102 102
 
103
-    /**
103
+/**
104 104
      * Create a Javascript element selector expression, and link it to the current response.
105 105
      *
106 106
      * @param string $sElementId
107 107
      *
108 108
      * @return JsSelectorCall
109 109
      */
110
-    public function je(string $sElementId = ''): JsSelectorCall
111
-    {
112
-        return $this->xFactory->je($sElementId, $this->getCallback());
113
-    }
110
+public function je(string $sElementId = ''): JsSelectorCall
111
+{
112
+return $this->xFactory->je($sElementId, $this->getCallback());
113
+}
114 114
 }
Please login to merge, or discard this patch.
jaxon-core/src/Plugin/Response/Dialog/DialogPlugin.php 1 patch
Switch Indentation   +60 added lines, -60 removed lines patch added patch discarded remove patch
@@ -24,107 +24,107 @@
 block discarded – undo
24 24
 
25 25
 class DialogPlugin implements PluginInterface, ResponsePluginInterface, ModalInterface, AlertInterface
26 26
 {
27
-    use ResponsePluginTrait;
27
+use ResponsePluginTrait;
28 28
 
29
-    /**
29
+/**
30 30
      * @const The plugin name
31 31
      */
32
-    public const NAME = 'dialog';
32
+public const NAME = 'dialog';
33 33
 
34
-    /**
34
+/**
35 35
      * The constructor
36 36
      *
37 37
      * @param DialogCommand $xDialogCommand
38 38
      */
39
-    public function __construct(private DialogCommand $xDialogCommand)
40
-    {}
39
+public function __construct(private DialogCommand $xDialogCommand)
40
+{}
41 41
 
42
-    /**
42
+/**
43 43
      * @inheritDoc
44 44
      */
45
-    public function getName(): string
46
-    {
47
-        return self::NAME;
48
-    }
45
+public function getName(): string
46
+{
47
+return self::NAME;
48
+}
49 49
 
50
-    /**
50
+/**
51 51
      * Initialize the plugin
52 52
      *
53 53
      * @return void
54 54
      */
55
-    protected function init(): void
56
-    {}
55
+protected function init(): void
56
+{}
57 57
 
58
-    /**
58
+/**
59 59
      * Set the library to use for the next call.
60 60
      *
61 61
      * @param string $sLibrary The name of the library
62 62
      *
63 63
      * @return DialogPlugin
64 64
      */
65
-    public function with(string $sLibrary): DialogPlugin
66
-    {
67
-        $this->xDialogCommand->library($sLibrary);
68
-        return $this;
69
-    }
65
+public function with(string $sLibrary): DialogPlugin
66
+{
67
+$this->xDialogCommand->library($sLibrary);
68
+return $this;
69
+}
70 70
 
71
-    /**
71
+/**
72 72
      * @inheritDoc
73 73
      */
74
-    public function show(string $sTitle, string $sContent, array $aButtons = [], array $aOptions = []): void
75
-    {
76
-        // Show the modal dialog
77
-        $this->addCommand('dialog.modal.show',
78
-            $this->xDialogCommand->show($sTitle, $sContent, $aButtons, $aOptions));
79
-    }
80
-
81
-    /**
74
+public function show(string $sTitle, string $sContent, array $aButtons = [], array $aOptions = []): void
75
+{
76
+// Show the modal dialog
77
+$this->addCommand('dialog.modal.show',
78
+$this->xDialogCommand->show($sTitle, $sContent, $aButtons, $aOptions));
79
+}
80
+
81
+/**
82 82
      * @inheritDoc
83 83
      */
84
-    public function hide(): void
85
-    {
86
-        // Hide the modal dialog
87
-        $this->addCommand('dialog.modal.hide', $this->xDialogCommand->hide());
88
-    }
84
+public function hide(): void
85
+{
86
+// Hide the modal dialog
87
+$this->addCommand('dialog.modal.hide', $this->xDialogCommand->hide());
88
+}
89 89
 
90
-    /**
90
+/**
91 91
      * @inheritDoc
92 92
      */
93
-    public function title(string $sTitle): AlertInterface
94
-    {
95
-        $this->xDialogCommand->title($sTitle);
96
-        return $this;
97
-    }
93
+public function title(string $sTitle): AlertInterface
94
+{
95
+$this->xDialogCommand->title($sTitle);
96
+return $this;
97
+}
98 98
 
99
-    /**
99
+/**
100 100
      * @inheritDoc
101 101
      */
102
-    public function success(string $sMessage, ...$aArgs): void
103
-    {
104
-        $this->addCommand('dialog.alert.show', $this->xDialogCommand->success($sMessage, $aArgs));
105
-    }
102
+public function success(string $sMessage, ...$aArgs): void
103
+{
104
+$this->addCommand('dialog.alert.show', $this->xDialogCommand->success($sMessage, $aArgs));
105
+}
106 106
 
107
-    /**
107
+/**
108 108
      * @inheritDoc
109 109
      */
110
-    public function info(string $sMessage, ...$aArgs): void
111
-    {
112
-        $this->addCommand('dialog.alert.show', $this->xDialogCommand->info($sMessage, $aArgs));
113
-    }
110
+public function info(string $sMessage, ...$aArgs): void
111
+{
112
+$this->addCommand('dialog.alert.show', $this->xDialogCommand->info($sMessage, $aArgs));
113
+}
114 114
 
115
-    /**
115
+/**
116 116
      * @inheritDoc
117 117
      */
118
-    public function warning(string $sMessage, ...$aArgs): void
119
-    {
120
-        $this->addCommand('dialog.alert.show', $this->xDialogCommand->warning($sMessage, $aArgs));
121
-    }
118
+public function warning(string $sMessage, ...$aArgs): void
119
+{
120
+$this->addCommand('dialog.alert.show', $this->xDialogCommand->warning($sMessage, $aArgs));
121
+}
122 122
 
123
-    /**
123
+/**
124 124
      * @inheritDoc
125 125
      */
126
-    public function error(string $sMessage, ...$aArgs): void
127
-    {
128
-        $this->addCommand('dialog.alert.show', $this->xDialogCommand->error($sMessage, $aArgs));
129
-    }
126
+public function error(string $sMessage, ...$aArgs): void
127
+{
128
+$this->addCommand('dialog.alert.show', $this->xDialogCommand->error($sMessage, $aArgs));
129
+}
130 130
 }
Please login to merge, or discard this patch.
jaxon-core/src/Plugin/AbstractCodeGenerator.php 1 patch
Switch Indentation   +25 added lines, -25 removed lines patch added patch discarded remove patch
@@ -18,43 +18,43 @@
 block discarded – undo
18 18
 
19 19
 abstract class AbstractCodeGenerator implements CodeGeneratorInterface
20 20
 {
21
-    /**
21
+/**
22 22
      * @inheritDoc
23 23
      */
24
-    public function getHash(): string
25
-    {
26
-        return '';
27
-    }
24
+public function getHash(): string
25
+{
26
+return '';
27
+}
28 28
 
29
-    /**
29
+/**
30 30
      * @inheritDoc
31 31
      */
32
-    public function getCss(): string
33
-    {
34
-        return '';
35
-    }
32
+public function getCss(): string
33
+{
34
+return '';
35
+}
36 36
 
37
-    /**
37
+/**
38 38
      * @inheritDoc
39 39
      */
40
-    public function getJs(): string
41
-    {
42
-        return '';
43
-    }
40
+public function getJs(): string
41
+{
42
+return '';
43
+}
44 44
 
45
-    /**
45
+/**
46 46
      * @inheritDoc
47 47
      */
48
-    public function getScript(): string
49
-    {
50
-        return '';
51
-    }
48
+public function getScript(): string
49
+{
50
+return '';
51
+}
52 52
 
53
-    /**
53
+/**
54 54
      * @inheritDoc
55 55
      */
56
-    public function getJsCode(): ?JsCode
57
-    {
58
-        return null;
59
-    }
56
+public function getJsCode(): ?JsCode
57
+{
58
+return null;
59
+}
60 60
 }
Please login to merge, or discard this patch.
jaxon-core/src/Plugin/ResponsePluginTrait.php 1 patch
Switch Indentation   +25 added lines, -25 removed lines patch added patch discarded remove patch
@@ -31,48 +31,48 @@  discard block
 block discarded – undo
31 31
 
32 32
 trait ResponsePluginTrait
33 33
 {
34
-    /**
34
+/**
35 35
      * The object used to build the response that will be sent to the client browser
36 36
      *
37 37
      * @var AbstractResponse
38 38
      */
39
-    private $xResponse = null;
39
+private $xResponse = null;
40 40
 
41
-    /**
41
+/**
42 42
      * Get a unique name to identify the plugin.
43 43
      *
44 44
      * @return string
45 45
      */
46
-    abstract public function getName(): string;
46
+abstract public function getName(): string;
47 47
 
48
-    /**
48
+/**
49 49
      * Initialize the plugin
50 50
      *
51 51
      * @return void
52 52
      */
53
-    abstract protected function init();
53
+abstract protected function init();
54 54
 
55
-    /**
55
+/**
56 56
      * @param AbstractResponse $xResponse   The response
57 57
      *
58 58
      * @return static
59 59
      */
60
-    public function initPlugin(AbstractResponse $xResponse): static
61
-    {
62
-        $this->xResponse = $xResponse;
63
-        $this->init();
64
-        return $this;
65
-    }
60
+public function initPlugin(AbstractResponse $xResponse): static
61
+{
62
+$this->xResponse = $xResponse;
63
+$this->init();
64
+return $this;
65
+}
66 66
 
67
-    /**
67
+/**
68 68
      * @inheritDoc
69 69
      */
70
-    public function response(): ?AbstractResponse
71
-    {
72
-        return $this->xResponse;
73
-    }
70
+public function response(): ?AbstractResponse
71
+{
72
+return $this->xResponse;
73
+}
74 74
 
75
-    /**
75
+/**
76 76
      * Add a plugin command to the response
77 77
      *
78 78
      * @param string $sName    The command name
@@ -80,10 +80,10 @@  discard block
 block discarded – undo
80 80
      *
81 81
      * @return Command
82 82
      */
83
-    public function addCommand(string $sName, array|JsonSerializable $aOptions): Command
84
-    {
85
-        return $this->xResponse
86
-            ->addCommand($sName, $aOptions)
87
-            ->setOption('plugin', $this->getName());
88
-    }
83
+public function addCommand(string $sName, array|JsonSerializable $aOptions): Command
84
+{
85
+return $this->xResponse
86
+->addCommand($sName, $aOptions)
87
+->setOption('plugin', $this->getName());
88
+}
89 89
 }
Please login to merge, or discard this patch.
jaxon-core/src/Plugin/CodeGeneratorInterface.php 1 patch
Switch Indentation   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -17,46 +17,46 @@
 block discarded – undo
17 17
 
18 18
 interface CodeGeneratorInterface
19 19
 {
20
-    /**
20
+/**
21 21
      * Get the value to be hashed
22 22
      *
23 23
      * @return string
24 24
      */
25
-    public function getHash(): string;
25
+public function getHash(): string;
26 26
 
27
-    /**
27
+/**
28 28
      * Get the HTML tags to include CSS code and files into the page
29 29
      *
30 30
      * The code must be enclosed in the appropriate HTML tags.
31 31
      *
32 32
      * @return string
33 33
      */
34
-    public function getCss(): string;
34
+public function getCss(): string;
35 35
 
36
-    /**
36
+/**
37 37
      * Get the HTML tags to include javascript code and files into the page
38 38
      *
39 39
      * The code must be enclosed in the appropriate HTML tags.
40 40
      *
41 41
      * @return string
42 42
      */
43
-    public function getJs(): string;
43
+public function getJs(): string;
44 44
 
45
-    /**
45
+/**
46 46
      * Get the javascript code to include into the page
47 47
      *
48 48
      * The code must NOT be enclosed in HTML tags.
49 49
      *
50 50
      * @return string
51 51
      */
52
-    public function getScript(): string;
52
+public function getScript(): string;
53 53
 
54
-    /**
54
+/**
55 55
      * Get the javascript codes to include into the page
56 56
      *
57 57
      * The code must NOT be enclosed in HTML tags.
58 58
      *
59 59
      * @return JsCode|null
60 60
      */
61
-    public function getJsCode(): ?JsCode;
61
+public function getJsCode(): ?JsCode;
62 62
 }
Please login to merge, or discard this patch.
jaxon-core/src/Plugin/Request/CallableClass/CallableClassPlugin.php 2 patches
Braces   +2 added lines, -4 removed lines patch added patch discarded remove patch
@@ -85,8 +85,7 @@  discard block
 block discarded – undo
85 85
         if(is_string($xOptions))
86 86
         {
87 87
             $xOptions = ['include' => $xOptions];
88
-        }
89
-        elseif(!is_array($xOptions))
88
+        } elseif(!is_array($xOptions))
90 89
         {
91 90
             throw new SetupException($this->xTranslator->trans('errors.objects.invalid-declaration'));
92 91
         }
@@ -261,8 +260,7 @@  discard block
 block discarded – undo
261 260
 
262 261
             $sError = 'errors.objects.call';
263 262
             $xCallableObject->call($this->xTarget);
264
-        }
265
-        catch(ReflectionException|SetupException $e)
263
+        } catch(ReflectionException|SetupException $e)
266 264
         {
267 265
             // Unable to execute the requested class or method
268 266
             $this->throwException($e->getMessage(), $sError, $aErrorParams);
Please login to merge, or discard this patch.
Spacing   +13 added lines, -14 removed lines patch added patch discarded remove patch
@@ -81,15 +81,15 @@  discard block
 block discarded – undo
81 81
      */
82 82
     public function checkOptions(string $sCallable, $xOptions): array
83 83
     {
84
-        if(!$this->xValidator->validateClass(trim($sCallable)))
84
+        if (!$this->xValidator->validateClass(trim($sCallable)))
85 85
         {
86 86
             throw new SetupException($this->xTranslator->trans('errors.objects.invalid-declaration'));
87 87
         }
88
-        if(is_string($xOptions))
88
+        if (is_string($xOptions))
89 89
         {
90 90
             $xOptions = ['include' => $xOptions];
91 91
         }
92
-        elseif(!is_array($xOptions))
92
+        elseif (!is_array($xOptions))
93 93
         {
94 94
             throw new SetupException($this->xTranslator->trans('errors.objects.invalid-declaration'));
95 95
         }
@@ -133,15 +133,15 @@  discard block
 block discarded – undo
133 133
      */
134 134
     private function addCallable(CallableObject $xCallableObject): void
135 135
     {
136
-        if($xCallableObject->excluded())
136
+        if ($xCallableObject->excluded())
137 137
         {
138 138
             return;
139 139
         }
140 140
 
141 141
         $aCallableObject = &$this->aCallableObjects;
142
-        foreach(explode('.', $xCallableObject->getJsName()) as $sName)
142
+        foreach (explode('.', $xCallableObject->getJsName()) as $sName)
143 143
         {
144
-            if(!isset($aCallableObject['children'][$sName]))
144
+            if (!isset($aCallableObject['children'][$sName]))
145 145
             {
146 146
                 $aCallableObject['children'][$sName] = [];
147 147
             }
@@ -176,11 +176,10 @@  discard block
 block discarded – undo
176 176
 
177 177
         $fMethodCallback = fn($aMethod) => $this->renderMethod($sIndent,
178 178
             ['sJsClass' => $sJsClass, 'aMethod' => $aMethod]);
179
-        $aMethods = !isset($aCallable['methods']) ? [] :
180
-            array_map($fMethodCallback, $aCallable['methods']);
179
+        $aMethods = !isset($aCallable['methods']) ? [] : array_map($fMethodCallback, $aCallable['methods']);
181 180
 
182 181
         $aChildren = [];
183
-        foreach($aCallable['children'] ?? [] as $sName => $aChild)
182
+        foreach ($aCallable['children'] ?? [] as $sName => $aChild)
184 183
         {
185 184
             $aChildren[] = $this->renderChild("$sName:", "$sJsClass.$sName",
186 185
                 $aChild, $nRepeat) . ',';
@@ -221,13 +220,13 @@  discard block
 block discarded – undo
221 220
         $this->xRegistry->registerAllComponents();
222 221
 
223 222
         $this->aCallableObjects = ['children' => []];
224
-        foreach($this->cdi->getCallableObjects() as $xCallableObject)
223
+        foreach ($this->cdi->getCallableObjects() as $xCallableObject)
225 224
         {
226 225
             $this->addCallable($xCallableObject);
227 226
         }
228 227
 
229 228
         $aScripts = [];
230
-        foreach($this->aCallableObjects['children'] as $sJsClass => $aCallable)
229
+        foreach ($this->aCallableObjects['children'] as $sJsClass => $aCallable)
231 230
         {
232 231
             $aScripts[] = $this->renderChild("{$this->sPrefix}$sJsClass =",
233 232
                 $sJsClass, $aCallable) . ';';
@@ -283,7 +282,7 @@  discard block
 block discarded – undo
283 282
         // Will be used to print a translated error message.
284 283
         $aErrorParams = ['class' => $sClassName, 'method' => $sMethodName];
285 284
 
286
-        if(!$this->xValidator->validateJsObject($sClassName) ||
285
+        if (!$this->xValidator->validateJsObject($sClassName) ||
287 286
             !$this->xValidator->validateMethod($sMethodName))
288 287
         {
289 288
             // Unable to find the requested object or method
@@ -297,7 +296,7 @@  discard block
 block discarded – undo
297 296
             /** @var CallableObject */
298 297
             $xCallableObject = $this->getCallable($sClassName);
299 298
 
300
-            if($xCallableObject->excluded($sMethodName))
299
+            if ($xCallableObject->excluded($sMethodName))
301 300
             {
302 301
                 // Unable to find the requested class or method
303 302
                 $this->throwException('', 'errors.objects.excluded', $aErrorParams);
@@ -306,7 +305,7 @@  discard block
 block discarded – undo
306 305
             $sError = 'errors.objects.call';
307 306
             $xCallableObject->call($this->xTarget);
308 307
         }
309
-        catch(ReflectionException|SetupException $e)
308
+        catch (ReflectionException|SetupException $e)
310 309
         {
311 310
             // Unable to execute the requested class or method
312 311
             $this->throwException($e->getMessage(), $sError, $aErrorParams);
Please login to merge, or discard this patch.
jaxon-annotations/tests/App/Ajax/Traits/Annotated.php 1 patch
Switch Indentation   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -6,18 +6,18 @@
 block discarded – undo
6 6
 
7 7
 trait Annotated
8 8
 {
9
-    /**
9
+/**
10 10
      * @var \Jaxon\Annotations\Tests\Service\ColorService
11 11
      */
12
-    protected $colorService;
12
+protected $colorService;
13 13
 
14
-    /**
14
+/**
15 15
      * @var TextService
16 16
      */
17
-    protected $textService;
17
+protected $textService;
18 18
 
19
-    /**
19
+/**
20 20
      * @var FontService
21 21
      */
22
-    protected $fontService;
22
+protected $fontService;
23 23
 }
Please login to merge, or discard this patch.
jaxon-annotations/tests/App/Ajax/ClassAnnotated.php 1 patch
Switch Indentation   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -21,18 +21,18 @@
 block discarded – undo
21 21
  */
22 22
 class ClassAnnotated extends FuncComponent
23 23
 {
24
-    /**
24
+/**
25 25
      * @var \Jaxon\Annotations\Tests\Service\ColorService
26 26
      */
27
-    protected $colorService;
27
+protected $colorService;
28 28
 
29
-    /**
29
+/**
30 30
      * @var TextService
31 31
      */
32
-    protected $textService;
32
+protected $textService;
33 33
 
34
-    /**
34
+/**
35 35
      * @var FontService
36 36
      */
37
-    protected $fontService;
37
+protected $fontService;
38 38
 }
Please login to merge, or discard this patch.
jaxon-annotations/tests/App/Ajax/DocBlockClassExcluded.php 1 patch
Switch Indentation   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -9,26 +9,26 @@
 block discarded – undo
9 9
  */
10 10
 class DocBlockClassExcluded extends FuncComponent
11 11
 {
12
-    /**
12
+/**
13 13
      * @exclude
14 14
      */
15
-    public function doNot()
16
-    {
17
-    }
15
+public function doNot()
16
+{
17
+}
18 18
 
19
-    /**
19
+/**
20 20
      * @databag user.name
21 21
      * @databag page.number
22 22
      */
23
-    public function withBags()
24
-    {
25
-    }
23
+public function withBags()
24
+{
25
+}
26 26
 
27
-    /**
27
+/**
28 28
      * @before funcBefore
29 29
      * @after funcAfter
30 30
      */
31
-    public function cbSingle()
32
-    {
33
-    }
31
+public function cbSingle()
32
+{
33
+}
34 34
 }
Please login to merge, or discard this patch.