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
16abstract 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}