123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- <?php
- /**
- * Base class for Shells
- *
- * Long description for file
- *
- * PHP versions 4 and 5
- *
- * CakePHP(tm) : Rapid Development Framework <http://www.cakephp.org/>
- * Copyright 2005-2008, Cake Software Foundation, Inc.
- * 1785 E. Sahara Avenue, Suite 490-204
- * Las Vegas, Nevada 89104
- * Modified for Postfixadmin by Valkum
- *
- * Copyright 2010
- *
- * Licensed under The MIT License
- * Redistributions of files must retain the above copyright notice.
- *
- * @filesource
- * @copyright Copyright 2005-2008, Cake Software Foundation, Inc.
- * @link http://postfixadmin.sourceforge.net/ Postfixadmin on Sourceforge
- * @package postfixadmin
- * @subpackage -
- * @since -
- * @version $Revision$
- * @modifiedby $LastChangedBy$
- * @lastmodified $Date$
- * @license http://www.opensource.org/licenses/mit-license.php The MIT License
- */
-
- class Shell {
- /**
- * An instance of the ShellDispatcher object that loaded this script
- *
- * @var object
- * @access public
- */
- public $Dispatch = null;
- /**
- * If true, the script will ask for permission to perform actions.
- *
- * @var boolean
- * @access public
- */
- public $interactive = true;
- /**
- * Contains command switches parsed from the command line.
- *
- * @var array
- * @access public
- */
- public $params = array();
- /**
- * Contains arguments parsed from the command line.
- *
- * @var array
- * @access public
- */
- public $args = array();
- /**
- * The file name of the shell that was invoked.
- *
- * @var string
- * @access public
- */
- public $shell = null;
- /**
- * The class name of the shell that was invoked.
- *
- * @var string
- * @access public
- */
- public $className = null;
- /**
- * The command called if public methods are available.
- *
- * @var string
- * @access public
- */
- public $command = null;
- /**
- * The name of the shell in camelized.
- *
- * @var string
- * @access public
- */
- public $name = null;
-
- /**
- * Constructs this Shell instance.
- *
- */
- public function __construct(&$dispatch) {
- $vars = array('params', 'args', 'shell', 'shellCommand'=> 'command');
- foreach ($vars as $key => $var) {
- if (is_string($key)) {
- $this->{$var} =& $dispatch->{$key};
- } else {
- $this->{$var} =& $dispatch->{$var};
- }
- }
-
- $this->className = get_class($this);
-
- if ($this->name == null) {
- $this->name = str_replace(array('shell', 'Shell', 'task', 'Task'), '', $this->className);
- }
-
- $this->Dispatch =& $dispatch;
- }
-
- /**
- * Starts up the the Shell
- * allows for checking and configuring prior to command or main execution
- * can be overriden in subclasses
- *
- * @access public
- */
- public function startup() {
- if (empty($this->params['q'])) {
- $this->_welcome();
- }
- }
- /**
- * Displays a header for the shell
- *
- * @access protected
- */
- public function _welcome() {
- $this->out("\nWelcome to Postfixadmin-CLI v" . $this->Dispatch->version);
- $this->hr();
- }
-
- /**
- * Prompts the user for input, and returns it.
- *
- * @param string $prompt Prompt text.
- * @param mixed $options Array or string of options.
- * @param string $default Default input value.
- * @return Either the default value, or the user-provided input.
- * @access public
- */
- public function in($prompt, $options = null, $default = null) {
- if (!$this->interactive) {
- return $default;
- }
- if ($prompt != '') {
- $this->out("");
- }
- $in = $this->Dispatch->getInput($prompt, $options, $default);
-
- if ($options && is_string($options)) {
- if (strpos($options, ',')) {
- $options = explode(',', $options);
- } elseif (strpos($options, '/')) {
- $options = explode('/', $options);
- } else {
- $options = array($options);
- }
- }
- if (is_array($options)) {
- while ($in == '' || ($in && (!in_array(strtolower($in), $options) && !in_array(strtoupper($in), $options)) && !in_array($in, $options))) {
- $this->err("Invalid input"); # TODO: make translateable
- $in = $this->Dispatch->getInput($prompt, $options, $default);
- }
- }
-
- return $in;
- }
- /**
- * Outputs to the stdout filehandle.
- *
- * @param string $string String to output.
- * @param boolean $newline If true, the outputs gets an added newline.
- * @access public
- */
- public function out($string, $newline = true) {
- if (is_array($string)) {
- $str = '';
- foreach ($string as $message) {
- $str .= $message ."\n";
- }
- $string = $str;
- }
- return $this->Dispatch->stdout($string, $newline);
- }
- /**
- * Outputs to the stderr filehandle.
- *
- * @param string $string Error text to output.
- * @access public
- */
- public function err($string) {
- if (is_array($string)) {
- $str = '';
- foreach ($string as $message) {
- $str .= $message ."\n";
- }
- $string = $str;
- }
- return $this->Dispatch->stderr($string."\n");
- }
- /**
- * Outputs a series of minus characters to the standard output, acts as a visual separator.
- *
- * @param boolean $newline If true, the outputs gets an added newline.
- * @access public
- */
- public function hr($newline = false) {
- if ($newline) {
- $this->out("\n");
- }
- $this->out('---------------------------------------------------------------');
- if ($newline) {
- $this->out("\n");
- }
- }
- /**
- * Displays a formatted error message and exits the application
- *
- * @param string $title Title of the error message
- * @param string $msg Error message
- * @access public
- */
- public function error($title, $msg) {
- $out = "$title\n";
- $out .= "$msg\n";
- $out .= "\n";
- $this->err($out);
- $this->_stop(1);
- }
- /**
- * Outputs usage text on the standard output. Implement it in subclasses.
- *
- * @access public
- */
- public function help() {
- if ($this->command != null) {
- $this->err("Unknown {$this->name} command '$this->command'.\nFor usage, try 'postfixadmin-cli {$this->shell} help'.\n\n");
- } else {
- $this->Dispatch->help();
- }
- }
- /**
- * Stop execution of the current script
- *
- * @param $status see http://php.net/exit for values
- * @return void
- * @access public
- */
- public function _stop($status = 0) {
- exit($status);
- }
- }
|