*/ class IO { /** * Max line height */ const COMMAND_LENGTH = 50; /** * args for run screen * @var array */ protected static $_args = array ( 'help' => array('value' => FALSE, 'description' => 'show help for news2kindle'), 'grab' => array('value' => FALSE, 'description' => 'grab articles from google reader'), 'mobi' => array('value' => FALSE, 'description' => 'prepare mobi format'), 'send' => array('value' => FALSE, 'description' => 'send articles to kindle'), 'login' => array('value' => NULL, 'description' => 'your login to google account *requred'), 'password' => array('value' => NULL, 'description' => 'your password to google account *required'), 'kindle' => array('value' => NULL, 'description' => 'your kindle email *required'), 'items' => array('value' => 100, 'description' => 'max items to grab in run'), 'render' => array('value' => 'std', 'description' => 'name of html template for newspapper'), //'timeout' => array('value' => FALSE, 'description' => 'timeout is most important than items count'), ); /** * Write on screen text line * @param string $message * @param bool $broken_line */ public static function msg($message, $broken_line = TRUE) { echo ( $broken_line ? "\n" : "" ) . $message; } /** * Write command for status * @param string $message */ public static function command($message) { $output_whitespaces = ''; for ($i = strlen($message); $i <= self::COMMAND_LENGTH; ++$i ) { $output_whitespaces .= '-'; } self::msg( $message . ' ' . $output_whitespaces.' ' ); } /** * Status - OK */ public static function ok() { $colored_string = "\033[1;37m" . "\033[42m" . ' OK ' . "\033[0m"; self::msg( $colored_string, FALSE ); } /** * Status - Error */ public static function error($message = NULL) { $colored_string = "\033[1;37m" . "\033[41m" . ' ERROR ' . "\033[0m"; self::msg( $colored_string, FALSE ); if ( $message !== NULL ) { self::msg( ' - ' . $message ); } } /** * Get run args * @param string $name key config * @return mixed config value */ public static function arg($name) { return self::$_args[$name]['value']; } /** * Get config from ini * @param string $path * @return void */ protected static function _get_config($path) { $config = parse_ini_file( $path . 'config.ini' ); foreach($config as $key => $value) { self::$_args[$key]['value'] = $value; } } /** * Prepare args for script * (from http://php.net/manual/en/features.commandline.php) * @param array $argv array * @param string $path * @return bool success or error */ public static function prepare_args($argv, $path) { self::command('Parse args'); self::_get_config($path); array_shift($argv); $out = array(); foreach ( $argv as $arg ) { if ( substr($arg,0,2) == '--' ) { $eqPos = strpos($arg,'='); if ( $eqPos === false ) { $key = substr($arg,2); $out[$key] = isset($out[$key]) ? $out[$key] : true; } else { $key = substr($arg,2,$eqPos-2); $out[$key] = substr($arg,$eqPos+1); } } else if ( substr($arg,0,1) == '-' ) { if ( substr($arg,2,1) == '=' ) { $key = substr($arg,1,1); $out[$key] = substr($arg,3); } else { $chars = str_split(substr($arg,1)); foreach ( $chars as $char ) { $key = $char; $out[$key] = isset($out[$key]) ? $out[$key] : true; } } } else { $out[] = $arg; } } try { $args = self::_validate_args($out); foreach ( $args as $key => $value ) { self::$_args[$key]['value'] = $value; } } catch(Exception $e) { self::error($e->getMessage()); return false; } self::ok(); return true; } /** * Validate args for script * (from http://php.net/manual/en/features.commandline.php) * @param array $argv array * @return array args */ private static function _validate_args($args) { if( array_key_exists('help', $args) OR array_key_exists('h', $args) ) { $args['grab'] = false; $args['mobi'] = false; $args['send'] = false; $args['login'] = false; $args['password'] = false; $args['kindle'] = false; } foreach ( $args as $key => $arg ) { if ( strlen($key) === 1 ) { foreach ( self::$_args as $keyA => $argA ) { if($keyA[0] === $key ) { unset( $args[$key] ); $args[$keyA] = $arg; $key = $keyA; } } } if ( ! array_key_exists($key, self::$_args) ) { throw new Exception('Param "'.$key.'" is invalid!'); } } foreach ( self::$_args as $key => $arg ) { if( self::$_args[$key]['value'] === NULL AND !array_key_exists($key, $args) ) { throw new Exception('Param "'.$key.'" must be declared!'); } } return $args; } /** * Prepare help * @return array */ public static function get_help() { $output = array(); foreach ( self::$_args as $arg => $item ) { $output[$arg] = $item['description']; } return $output; } }