/** * Консольный диалог * * Диалог формируется из трех состовляющих: сообщение $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'); }
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; } }