1: <?php
 2: /**
 3:  * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
 4:  * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
 5:  *
 6:  * Licensed under The MIT License
 7:  * For full copyright and license information, please see the LICENSE.txt
 8:  * Redistributions of files must retain the above copyright notice.
 9:  *
10:  * @copyright     Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
11:  * @link          https://cakephp.org CakePHP(tm) Project
12:  * @since         2.8
13:  * @license       https://opensource.org/licenses/mit-license.php MIT License
14:  */
15: 
16: abstract class BaseShellHelper {
17: 
18: /**
19:  * Default config for this helper.
20:  *
21:  * @var array
22:  */
23:     protected $_defaultConfig = array();
24: 
25: /**
26:  * ConsoleOutput instance.
27:  *
28:  * @var ConsoleOutput
29:  */
30:     protected $_consoleOutput;
31: 
32: /**
33:  * Runtime config
34:  *
35:  * @var array
36:  */
37:     protected $_config = array();
38: 
39: /**
40:  * Whether the config property has already been configured with defaults
41:  *
42:  * @var bool
43:  */
44:     protected $_configInitialized = false;
45: 
46: /**
47:  * Constructor.
48:  *
49:  * @param ConsoleOutput $consoleOutput The ConsoleOutput instance to use.
50:  * @param array $config The settings for this helper.
51:  */
52:     public function __construct(ConsoleOutput $consoleOutput, array $config = array()) {
53:         $this->_consoleOutput = $consoleOutput;
54:         $this->config($config);
55:     }
56: 
57: /**
58:  * Initialize config & store config values
59:  *
60:  * @param null $config Config values to set
61:  * @return array|void
62:  */
63:     public function config($config = null) {
64:         if ($config === null) {
65:             return $this->_config;
66:         }
67:         if (!$this->_configInitialized) {
68:             $this->_config = array_merge($this->_defaultConfig, $config);
69:             $this->_configInitialized = true;
70:         } else {
71:             $this->_config = array_merge($this->_config, $config);
72:         }
73:     }
74: 
75: /**
76:  * This method should output content using `$this->_consoleOutput`.
77:  *
78:  * @param array $args The arguments for the helper.
79:  * @return void
80:  */
81:     abstract public function output($args);
82: }