コード例 #1
0
ファイル: IO.php プロジェクト: point/cassea
 /**
  * Консольный диалог
  *
  * Диалог формируется из трех состовляющих: сообщение $message,  варианты ответов $answ и 
  * ответом по-умолчанию $default.
  *
  * Доступны варианты ответа: {@link IO::NONE}, {@link IO::OK}, {@link IO::CANCEL}, {@link IO::YES},   
  * {@link IO::NO}, {@link IO::ALL}  в любых комбнациях.
  * Один из вариантов ответа можно указать как ответ по умолчанию. Если он не указан, то ответом по
  * умолчанию считает первый(младший) из вариантов ответа.
  * При выводе варианты ответа транслируются(отображаются) в соответствии с массивом {@link IO::$answText}.
  *
  * Метод выводит текст сообщения, варианты ответа, среди которых цветом выделен ответ по умолчанию.
  * После чего ожидает ввод пользователя. 
  *
  * Если пользователь ничего не ввел(нажал Enter) тогда принимается ответ по умолчани, 
  * остальные варианты распознаются по первой букве в массиве {@link IO::$answText} без учета регистра.
  * Если ответ не найден среди вариантов выбрасывается исключение.
  *
  * Метод возвращает выбранный вариант ответа.
  *
  * <code>
  * $answ = IO::dialog('Do You really want to do  ~RED~THIS~~~?', IO::NO | IO::YES, IO::NO);
  * if ( IO::YES == $answ ){
  *		// let's do it
  * }
  * else IO::out('Cancelled... ');
  * </code>
  *
  *
  * @throws IOException
  * @param string $message текст сообщения
  * @param int $answ варианты ответов
  * @param int $default ответ по умолчанию
  * @return int выбранный вариант ответа 
  */
 static function dialog($message, $answ = IO::NONE, $default = null)
 {
     IO::out($message, false);
     $a = array();
     if ($answ & IO::NONE) {
         $answ = $default = $a[0] = IO::NONE;
     } else {
         if ($answ & IO::YES) {
             $a[] = IO::YES;
         }
         if ($answ & IO::OK) {
             $a[] = IO::OK;
         }
         if ($answ & IO::NO) {
             $a[] = IO::NO;
         }
         if ($answ & IO::CANCEL) {
             $a[] = IO::CANCEL;
         }
         if ($answ & IO::ALL) {
             $a[] = IO::ALL;
         }
     }
     if (is_null($default)) {
         $default = $a[0];
     }
     for ($i = 0, $c = count($a); $i < $c; $i++) {
         $avaible[$i] = self::$answText[$a[$i]];
         if ($a[$i] == $default) {
             $avaible[$i] = '~WHITE~' . $avaible[$i] . '~~~';
         }
     }
     $str = ' [ ' . implode(' / ', $avaible) . ' ] ';
     IO::out($str, false);
     if (self::$assumeYes) {
         IO::out(null);
         return $default;
     }
     $in = IO::in(IO::TYPE_CHAR);
     if ($answ == IO::NONE) {
         return null;
     }
     if (is_null($in)) {
         return $default;
     }
     for ($i = 0, $c = count($a); $i < $c; $i++) {
         if (strtolower($in) == substr(strtolower(self::$answText[$a[$i]]), 0, 1)) {
             return $a[$i];
         }
     }
     throw new IOException('Incorrect input');
 }
コード例 #2
0
ファイル: CmdUser.php プロジェクト: point/cassea
 public function cmdPassword()
 {
     try {
         $login = ArgsHolder::get()->shiftCommand();
         $password = ArgsHolder::get()->shiftCommand();
         if ($login === false) {
             return io::out('Incorrect param count', IO::MESSAGE_FAIL) | 1;
         }
         if ($user = User::findBy("login", $login)) {
             if (!$password) {
                 IO::out('New password: '******'Confirm New password: '******'Passwords not match.', IO::MESSAGE_FAIL) | 2;
                 }
             }
             $user->setPassword($password);
         } else {
             return io::out(PHP_EOL . 'User ~WHITE~' . $login . '~~~ not found', IO::MESSAGE_FAIL) | 3;
         }
     } catch (UserException $e) {
         return io::out($e->getMessage(), IO::MESSAGE_FAIL) | 127;
     }
 }