ACC SHELL
{
textdomain "sudo";
import "Label";
import "Wizard";
import "Sudo";
import "Report";
include "sudo/complex.ycp";
include "sudo/helps.ycp";
any RedrawHostAlias(string name, list <string> members) {
list <term> items = [];
if (name != "") {
UI::ChangeWidget(`id("host_alias_name"), `Value, name);
}
foreach(string it, members, {
items = add(items, `item(`id(it),it));
});
UI::ChangeWidget(`id("host_alias_members"),`Items, items);
EnableDisableButtons("edit_host", "remove_host", items);
}
any AddEditHostAliasDialog (string what) {
string caption = "";
list < map <string, any> > ha = Sudo::GetHostAliases2();
map <string, any> it = ha [ Sudo::GetItem() ]:$[];
list <string> alias_members = [];
string name = "";
list <term> items = [];
if (what == "Add") {
caption = _("New Host Alias");
} else if (what == "Edit") {
alias_members = (list <string>) it["mem"]:[];
name = (string) it["name"]:"";
caption = _("Existing Host Alias");
}
term contents = `VBox (
`Left( `InputField(`id("host_alias_name"),_("Alias Name (in CAPITALS)"))),
`Left(`Label(_("Hostnames or Networks in the Alias"))),
`Table(`id("host_alias_members"),`header(_("Host Names/Networks")),[]),
`Left(`HBox(
`PushButton ( `id ( "add_host" ), `opt(`key_F3), " " + Label::AddButton() + " "),
`PushButton ( `id ( "edit_host" ), `opt(`key_F4), " " + Label::EditButton() + " "),
`PushButton ( `id ( "remove_host" ), `opt(`key_F5), " " + Label::DeleteButton() + " ")
))
);
Wizard::SetContentsButtons(caption, contents, HELPS["host_alias"]:"",Label::CancelButton(), Label::OKButton());
Wizard::HideAbortButton();
UI::ChangeWidget (`id("host_alias_name"), `ValidChars, "_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");
RedrawHostAlias( name, alias_members );
any ret = nil;
while(true) {
ret = UI::UserInput();
/* next */
if(ret == `next) {
string new_alias = toupper((string) UI::QueryWidget(`id("host_alias_name"),`Value));
if (new_alias == "") {
Popup::Error(_("Alias name must not be empty."));
UI::SetFocus(`id("host_alias_name"));
continue;
}
if (name != new_alias) {
if (Sudo::SearchAlias2(new_alias, Sudo::GetHostAliases2())) {
Popup::Error(sformat(_("Alias with name %1 already exists"),new_alias));
UI::SetFocus(`id("host_alias_name"));
continue;
}
//Sudo::RemoveHostAlias(current_alias_name);
}
if (alias_members == []) {
Popup::Error(_("Alias must have at least one member."));
UI::SetFocus(`id("host_alias_members"));
continue;
}
it["name"] = new_alias;
it["mem"] = alias_members;
Sudo::SetHostAlias(Sudo::GetItem(),it);
Sudo::SetModified();
break;
/* back */
}else if(ret == `back) {
break;
/* unknown */
}else if(ret == "add_host"){
string new_member = AddHostDialog("");
if(new_member != "") {
alias_members = add(alias_members, new_member);
RedrawHostAlias("",alias_members);
}
/* edit hosts*/
} else if (ret == "edit_host") {
string current_item = (string) UI::QueryWidget(`id("host_alias_members"), `CurrentItem);
string new_member = AddHostDialog(current_item);
if (current_item != new_member) {
alias_members = filter (string s, alias_members, ``( s != current_item));
alias_members = add(alias_members, new_member);
RedrawHostAlias("", alias_members);
}
/* delete hosts */
}else if (ret == "remove_host"){
string current_item = (string) UI::QueryWidget(`id("host_alias_members"), `CurrentItem);
alias_members = filter(string s, alias_members, ``(s != current_item));
RedrawHostAlias("",alias_members);
/* unknown */
}else {
y2error("unexpected retcode: %1", ret);
continue;
}
}
initial_screen = "host_aliases";
Wizard::RestoreNextButton();
return ret;
}
any SaveHostAliases () {
return `next;
}
}
ACC SHELL 2018