From 9290303e80801a31569386c1a030ca6ed7dd34b5 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Tue, 20 Nov 2012 04:37:13 -0500
Subject: [PATCH] Move prompt_silent() and get_opt() to rcube_utils class

---
 bin/update.sh                   |    2 
 program/include/rcube_utils.php |   75 +++++++++++++++++++++++++
 program/include/clisetup.php    |   68 ----------------------
 program/include/rcube_bc.inc    |   10 +++
 bin/moduserprefs.sh             |    2 
 bin/msgimport.sh                |    5 +
 bin/msgexport.sh                |    5 +
 7 files changed, 93 insertions(+), 74 deletions(-)

diff --git a/bin/moduserprefs.sh b/bin/moduserprefs.sh
index 79baf1e..a8fc3f6 100755
--- a/bin/moduserprefs.sh
+++ b/bin/moduserprefs.sh
@@ -31,7 +31,7 @@
 
 
 // get arguments
-$args = get_opt(array('u' => 'user', 'd' => 'delete'));
+$args = rcube_utils:get_opt(array('u' => 'user', 'd' => 'delete'));
 
 if ($_SERVER['argv'][1] == 'help') {
 	print_usage();
diff --git a/bin/msgexport.sh b/bin/msgexport.sh
index e6c1801..e98e5fe 100755
--- a/bin/msgexport.sh
+++ b/bin/msgexport.sh
@@ -71,7 +71,8 @@
 
 
 // get arguments
-$args = get_opt(array('h' => 'host', 'u' => 'user', 'p' => 'pass', 'm' => 'mbox', 'f' => 'file')) + array('host' => 'localhost', 'mbox' => 'INBOX');
+$opts = array('h' => 'host', 'u' => 'user', 'p' => 'pass', 'm' => 'mbox', 'f' => 'file');
+$args = rcube_utils::get_opt($opts) + array('host' => 'localhost', 'mbox' => 'INBOX');
 
 if ($_SERVER['argv'][1] == 'help')
 {
@@ -93,7 +94,7 @@
 }
 
 // prompt for password
-$args['pass'] = prompt_silent("Password: ");
+$args['pass'] = rcube_utils::prompt_silent("Password: ");
 
 
 // parse $host URL
diff --git a/bin/msgimport.sh b/bin/msgimport.sh
index 845c585..41bcd7e 100755
--- a/bin/msgimport.sh
+++ b/bin/msgimport.sh
@@ -17,7 +17,8 @@
 
 
 // get arguments
-$args = get_opt(array('h' => 'host', 'u' => 'user', 'p' => 'pass', 'm' => 'mbox', 'f' => 'file')) + array('host' => 'localhost', 'mbox' => 'INBOX');
+$opts = array('h' => 'host', 'u' => 'user', 'p' => 'pass', 'm' => 'mbox', 'f' => 'file');
+$args = rcube_utils::get_opt($opts) + array('host' => 'localhost', 'mbox' => 'INBOX');
 
 if ($_SERVER['argv'][1] == 'help')
 {
@@ -47,7 +48,7 @@
 // prompt for password
 if (empty($args['pass']))
 {
-	$args['pass'] = prompt_silent("Password: ");
+	$args['pass'] = rcube_utils::prompt_silent("Password: ");
 }
 
 // parse $host URL
diff --git a/bin/update.sh b/bin/update.sh
index f141fa6..59aa596 100755
--- a/bin/update.sh
+++ b/bin/update.sh
@@ -25,7 +25,7 @@
 require_once INSTALL_PATH . 'installer/rcube_install.php';
 
 // get arguments
-$opts = get_opt(array('v' => 'version'));
+$opts = rcube_utils::get_opt(array('v' => 'version'));
 
 // ask user if no version is specified
 if (!$opts['version']) {
diff --git a/program/include/clisetup.php b/program/include/clisetup.php
index a9af90a..07e3185 100644
--- a/program/include/clisetup.php
+++ b/program/include/clisetup.php
@@ -27,71 +27,3 @@
 
 // Unset max. execution time limit, set to 120 seconds in iniset.php
 @set_time_limit(0);
-
-/**
- * Parse commandline arguments into a hash array
- */
-function get_opt($aliases = array())
-{
-    $args = array();
-
-    for ($i=1; $i < count($_SERVER['argv']); $i++) {
-        $arg   = $_SERVER['argv'][$i];
-        $value = true;
-        $key   = null;
-
-        if ($arg[0] == '-') {
-            $key = preg_replace('/^-+/', '', $arg);
-            $sp  = strpos($arg, '=');
-            if ($sp > 0) {
-                $key   = substr($key, 0, $sp - 2);
-                $value = substr($arg, $sp+1);
-            }
-            else if (strlen($_SERVER['argv'][$i+1]) && $_SERVER['argv'][$i+1][0] != '-') {
-                $value = $_SERVER['argv'][++$i];
-            }
-
-            $args[$key] = is_string($value) ? preg_replace(array('/^["\']/', '/["\']$/'), '', $value) : $value;
-        }
-        else {
-            $args[] = $arg;
-        }
-
-        if ($alias = $aliases[$key]) {
-            $args[$alias] = $args[$key];
-        }
-    }
-
-    return $args;
-}
-
-
-/**
- * from http://blogs.sitepoint.com/2009/05/01/interactive-cli-password-prompt-in-php/
- */
-function prompt_silent($prompt = "Password:")
-{
-  if (preg_match('/^win/i', PHP_OS)) {
-    $vbscript = sys_get_temp_dir() . 'prompt_password.vbs';
-    file_put_contents($vbscript, 'wscript.echo(InputBox("' . addslashes($prompt) . '", "", "password here"))');
-    $command = "cscript //nologo " . escapeshellarg($vbscript);
-    $password = rtrim(shell_exec($command));
-    unlink($vbscript);
-    return $password;
-  }
-  else {
-    $command = "/usr/bin/env bash -c 'echo OK'";
-    if (rtrim(shell_exec($command)) !== 'OK') {
-      echo $prompt;
-      $pass = trim(fgets(STDIN));
-      echo chr(8)."\r" . $prompt . str_repeat("*", strlen($pass))."\n";
-      return $pass;
-    }
-    $command = "/usr/bin/env bash -c 'read -s -p \"" . addslashes($prompt) . "\" mypassword && echo \$mypassword'";
-    $password = rtrim(shell_exec($command));
-    echo "\n";
-    return $password;
-  }
-}
-
-?>
diff --git a/program/include/rcube_bc.inc b/program/include/rcube_bc.inc
index 4130d4d..c6620e0 100644
--- a/program/include/rcube_bc.inc
+++ b/program/include/rcube_bc.inc
@@ -382,3 +382,13 @@
 {
     return rcmail::get_instance()->output->future_expire_header($offset);
 }
+
+function get_opt($aliases = array())
+{
+    return rcube_utils::get_opt($aliases);
+}
+
+function prompt_silent($prompt = 'Password:')
+{
+    return rcube_utils::prompt_silent($prompt);
+}
diff --git a/program/include/rcube_utils.php b/program/include/rcube_utils.php
index fd5bda6..2b48e7c 100644
--- a/program/include/rcube_utils.php
+++ b/program/include/rcube_utils.php
@@ -883,4 +883,79 @@
         return $as_array ? $arr : join(" ", $arr);
     }
 
+    /**
+     * Parse commandline arguments into a hash array
+     *
+     * @param array $aliases Argument alias names
+     *
+     * @return array Argument values hash
+     */
+    public static function get_opt($aliases = array())
+    {
+        $args = array();
+
+        for ($i=1; $i < count($_SERVER['argv']); $i++) {
+            $arg   = $_SERVER['argv'][$i];
+            $value = true;
+            $key   = null;
+
+            if ($arg[0] == '-') {
+                $key = preg_replace('/^-+/', '', $arg);
+                $sp  = strpos($arg, '=');
+                if ($sp > 0) {
+                    $key   = substr($key, 0, $sp - 2);
+                    $value = substr($arg, $sp+1);
+                }
+                else if (strlen($_SERVER['argv'][$i+1]) && $_SERVER['argv'][$i+1][0] != '-') {
+                    $value = $_SERVER['argv'][++$i];
+                }
+
+                $args[$key] = is_string($value) ? preg_replace(array('/^["\']/', '/["\']$/'), '', $value) : $value;
+            }
+            else {
+                $args[] = $arg;
+            }
+
+            if ($alias = $aliases[$key]) {
+                $args[$alias] = $args[$key];
+            }
+        }
+
+        return $args;
+    }
+
+    /**
+     * Safe password prompt for command line
+     * from http://blogs.sitepoint.com/2009/05/01/interactive-cli-password-prompt-in-php/
+     *
+     * @return string Password
+     */
+    public static function prompt_silent($prompt = "Password:")
+    {
+        if (preg_match('/^win/i', PHP_OS)) {
+            $vbscript  = sys_get_temp_dir() . 'prompt_password.vbs';
+            $vbcontent = 'wscript.echo(InputBox("' . addslashes($prompt) . '", "", "password here"))';
+            file_put_contents($vbscript, $vbcontent);
+
+            $command  = "cscript //nologo " . escapeshellarg($vbscript);
+            $password = rtrim(shell_exec($command));
+            unlink($vbscript);
+
+            return $password;
+        }
+        else {
+            $command = "/usr/bin/env bash -c 'echo OK'";
+            if (rtrim(shell_exec($command)) !== 'OK') {
+                echo $prompt;
+                $pass = trim(fgets(STDIN));
+                echo chr(8)."\r" . $prompt . str_repeat("*", strlen($pass))."\n";
+                return $pass;
+            }
+
+            $command = "/usr/bin/env bash -c 'read -s -p \"" . addslashes($prompt) . "\" mypassword && echo \$mypassword'";
+            $password = rtrim(shell_exec($command));
+            echo "\n";
+            return $password;
+        }
+    }
 }

--
Gitblit v1.9.1