www.pudn.com > EmailServer.zip > AddEditAlias.pas
unit AddEditAlias;
(******************************************************************************)
(* *)
(* Hermes Add / Edit User Alias Dialog Box *)
(* Part of Hermes SMTP/POP3 Server. *)
(* Copyright(C) 2000 by Alexander J. Fanti, All Rights Reserver Worldwide. *)
(* *)
(* Created January 11, 2000 by Alexander J. Fanti. See License.txt *)
(* *)
(* Used by: ManageAliases *)
(* Uses: DataU1 *)
(* *)
(* Description: This Modal dialog window pulls double duty, allowing both *)
(* adding and editing of user aliases. *)
(* Adding: Let user specify AliasID and select user *)
(* Editing: Let user re-specify user, but not change ID *)
(* *)
(* Revisions: 1/21/2000 AJF Commented and re-wrote OK button procedure to *)
(* clarify behavior *)
(* *)
(******************************************************************************)
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons;
type
TfrmAddEditAlias = class(TForm)
Label1: TLabel;
txtAlias: TEdit;
Label2: TLabel;
lstUsers: TComboBox;
Label3: TLabel;
btnOK: TBitBtn;
btnCancel: TBitBtn;
procedure FormShow(Sender: TObject);
procedure btnOKClick(Sender: TObject);
private
{ Private declarations }
AliasID, AliasUser : String; // The ID and Username if the Alias we're
// Adding or Editing
procedure DisplayInfo; // Display the Alias information in the dialog
public
{ Public declarations }
function Add : Boolean; // Add a new Alias
function Edit(Alias : String) : Boolean; // Edit an existing alias
// Both functions return true if successful, false if not (cancelled)
end;
var
frmAddEditAlias: TfrmAddEditAlias;
implementation
uses DataU1;
{$R *.DFM}
procedure TfrmAddEditAlias.FormShow(Sender: TObject);
begin
// Fill the ListBox with the user names
lstUsers.Clear;
INI.User_GetList(lstUsers.Items);
// display the alias and user represented
DisplayInfo;
// If we can, set focus on the alias edit box, unless it's disabled
// (edit mode) in which case, we focus on the user list box.
if txtAlias.Enabled then txtAlias.SetFocus else lstUsers.SetFocus;
end;
procedure TfrmAddEditAlias.DisplayInfo;
var
x : Longint;
begin
// display the Alias of interest
txtAlias.Text := AliasID;
// and find and select the user it represents
lstUsers.ItemIndex := -1;
for x := 0 to lstUsers.Items.Count -1 do
if lstUsers.Items[x] = AliasUser then lstUsers.ItemIndex := x;
end;
function TfrmAddEditAlias.Add : Boolean;
begin
// We want to use the dialog as an "Add" dialog...
Caption := 'Add Alias'; // Set the dialog caption to reflect usage
txtAlias.Enabled := True; // enable the Alias edit box so the user
// can specify an alias name
AliasID := ''; // clear the alias we're editing
AliasUser := ''; // clear the alias user we're editing
Result := ShowModal = mrOK; // let the user do their thing
end;
function TfrmAddEditAlias.Edit(Alias : String) : Boolean;
begin
// We want to use the dialog as an "Edit" dialog...
Caption := 'Edit Alias'; // Set the dialog caption to reflect usage
txtAlias.Enabled := False; // disable the Alias edit box so the user
// can't change the alias name
INI.Alias_Parse(Alias, AliasID, AliasUser);
// fetch the alias and alias user we'll be editing from the alias passed in.
// this may be just an alias, or it may be an entire alias string in the
// form: AliasID ALIASSEPERATOR AliasUser. The Alias_Parse routine goes
// both ways... at least it better...
Result := ShowModal = mrOK; // let the user do their thing
end;
procedure TfrmAddEditAlias.btnOKClick(Sender: TObject);
var
Editing : Boolean; // We'll set this to true to know we're editing...
// it just makes it that much more readable...
begin
// First, let's fetch back the AliasID and AliasUser we've been working with.
// Remember, it we're editing, the AliasID Edit Box was disabled so it's
// still got the right AliasID (the one we're editing...
AliasID := Trim(txtAlias.Text);
AliasUser := '';
if lstUsers.ItemIndex > -1 then
AliasUser := Trim(lstUsers.Items[lstUsers.ItemIndex]);
Editing := not txtAlias.Enabled; // we know we're editing by the condition
// of the AliasID Edit Box (Enabled <> Edit)
// Here, we can make the checks we'll have to do whether we're adding or
// editing an alias...
// Like being specified at all...
if AliasID = '' then begin
ShowMessage('The Alias requires an ID');
ModalResult := mrNone; Exit;
end;
if AliasUser = '' then begin
ShowMessage('The Alias requires a User');
ModalResult := mrNone; Exit;
end;
// We behave differently based on editing or adding...
if Editing then begin
// We're editing an alias, it should already exist...
if not INI.Alias_Exists(AliasID) then begin
// This should never happen, but if it does...
ShowMessage('The Alias must exist to be edited.');
ModalResult := mrCancel; Exit;
end;
// Find the AliasID and change its AliasUser to this one...
INI.Alias_Edit(AliasID, AliasUser);
end else begin
// We're creating a new alias...
// First we check to be certain the AliasID doesn't contain any
// invalid characters (we are allowing the @ sign!)
if not IsNameValidIncludingAt(AliasID) then begin
ShowMessage('The Alias ID cannot contain ' + INVALIDNAMECHARACTERS);
ModalResult := mrNone; Exit;
end;
if not IsNameValid(AliasID) then begin
ShowMessage('Warning: You are making a domain specific Alias.');
end;
// Or the "AliasSeperator" string we use for internal storage of the
// aliasID and AliasUser in a single string...
if Pos(ALIASSEPERATOR, AliasID) > 0 then begin
ShowMessage('The Alias ID cannot contain "' + ALIASSEPERATOR + '".');
ModalResult := mrNone; Exit;
end;
// Then we check to be sure the name's available (it hasn't been used
// already for a User Name or Mailing List Name)
if INI.User_Exists(AliasID) then begin
ShowMessage('The Alias ID is already taken by a User.');
ModalResult := mrNone; Exit;
end;
if INI.List_Exists(AliasID) then begin
ShowMessage('The Alias ID is already taken by a Mail List.');
ModalResult := mrNone; Exit;
end;
// Finally, we verify the Alias does not exist, and we create it.
if INI.Alias_Exists(AliasID) then begin
ShowMessage('The Alias already exists, please specify a different ID.');
ModalResult := mrNone; Exit;
end;
// if we've gotten this far, we can safely create the alias.
// at each check along the way, we would have been thrown out of this
// procedure by the "ModalResult := mrNone; Exit;" line which
// would have left the user looking at the dialog again.
INI.Alias_Create(AliasID, AliasUser);
end;
end;
end.