ACC SHELL

Path : /usr/share/YaST2/include/sudo/
File Upload :
Current File : //usr/share/YaST2/include/sudo/dialog-cmnd.ycp

{
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