ACC SHELL
{
textdomain "sudo";
import "Label";
import "Wizard";
import "Sudo";
import "Report";
include "sudo/complex.ycp";
include "sudo/helps.ycp";
any RedrawCmndAlias(string name, list <string> members) {
list <term> items = UpdateCmdList(members);
if (name != "") {
UI::ChangeWidget(`id("cmnd_alias_name"), `Value, name);
}
UI::ChangeWidget(`id("cmnd_alias_members"),`Items, items);
EnableDisableButtons("edit_command", "remove_command", items);
}
any AddEditCmndAliasDialog (string what) {
string caption = "";
list < map <string, any> > ca = Sudo::GetCmndAliases2();
map <string, any> it = ca [ Sudo::GetItem()]:$[];
list <string> alias_members = [];
string name = "";
list <term> items = [];
if (what == "Add") {
caption = _("New Command Alias");
} else if (what == "Edit") {
alias_members = it["mem"]:[];
name = it["name"]:"";
caption = _("Existing Command Alias");
}
term contents = `VBox (
`Left(`InputField(`id("cmnd_alias_name"),_("Alias Name (in CAPITALS)"))),
`Left(`Label(_("Command Names or Directories in the Alias"))),
`Table(`id("cmnd_alias_members"),`header(
_("Command"),
_("Parameters")
), []
),
`Left(`HBox(
`PushButton ( `id ( "add_command" ), `opt(`key_F3), " " + Label::AddButton() + " "),
`PushButton ( `id ( "edit_command" ), `opt(`key_F4), " " + Label::EditButton() + " "),
`PushButton ( `id ( "remove_command" ), `opt(`key_F5), " " + Label::DeleteButton() + " ")
))
);
Wizard::SetContentsButtons(caption, contents,HELPS["command_alias"]:"",Label::CancelButton(), Label::OKButton());
Wizard::HideAbortButton();
UI::ChangeWidget (`id("cmnd_alias_name"), `ValidChars, "_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");
RedrawCmndAlias(name, alias_members);
any ret = nil;
while(true) {
ret = UI::UserInput();
/* next */
if(ret == `next) {
string new_alias = toupper ((string) UI::QueryWidget(`id("cmnd_alias_name"),`Value));
if (new_alias == "") {
Popup::Error(_("Alias name must not be empty."));
UI::SetFocus(`id("cmnd_alias_name"));
continue;
}
if (name != new_alias) {
if (Sudo::SearchAlias2( new_alias, Sudo::GetCmndAliases2()) ) {
Popup::Error(sformat(_("Alias with name %1 already exists"),new_alias));
UI::SetFocus(`id("cmnd_alias_name"));
continue;
}
}
if (alias_members == []) {
Popup::Error(_("Alias must have at least one member."));
UI::SetFocus(`id("cmnd_alias_members"));
continue;
}
it["name"] = new_alias;
it["mem"] = alias_members;
Sudo::SetCmndAlias( Sudo::GetItem(),it);
Sudo::SetModified();
break;
/* back */
}else if(ret == `back) {
break;
/* unknown */
}else if(ret == "add_command"){
string new_member = AddCommandDialog("","");
if(new_member != "" && !contains(alias_members, new_member)) {
alias_members = add(alias_members, new_member);
RedrawCmndAlias("",alias_members);
}
/* edit command*/
}else if(ret == "edit_command"){
integer current_item = (integer) UI::QueryWidget(`id("cmnd_alias_members"), `CurrentItem);
term it = (term) UI::QueryWidget(`id("cmnd_alias_members"), `Item(current_item));
string new_member = AddCommandDialog(it[1]:"", it[2]:"");
alias_members[current_item] = new_member;
RedrawCmndAlias("", alias_members);
/* delete commands */
}else if (ret == "remove_command"){
integer current_item = (integer) UI::QueryWidget(`id("cmnd_alias_members"), `CurrentItem);
alias_members = remove(alias_members, current_item);
RedrawCmndAlias("",alias_members);
/* unknown */
}else {
y2error("unexpected retcode: %1", ret);
continue;
}
}
initial_screen = "cmnd_aliases";
Wizard::RestoreNextButton();
return ret;
}
any SaveCommandAliases () {
return `next;
}
}
ACC SHELL 2018