AddEditAlias.pas
上传用户:dh8233980
上传日期:2014-10-16
资源大小:1015k
文件大小:8k
源码类别:

Email服务器

开发平台:

Delphi

  1. unit AddEditAlias;
  2. (******************************************************************************)
  3. (*                                                                            *)
  4. (* Hermes Add / Edit User Alias Dialog Box                                    *)
  5. (* Part of Hermes SMTP/POP3 Server.                                           *)
  6. (* Copyright(C) 2000 by Alexander J. Fanti, All Rights Reserver Worldwide.    *)
  7. (*                                                                            *)
  8. (* Created January 11, 2000 by Alexander J. Fanti.  See License.txt           *)
  9. (*                                                                            *)
  10. (* Used by: ManageAliases                                                     *)
  11. (* Uses: DataU1                                                               *)
  12. (*                                                                            *)
  13. (* Description: This Modal dialog window pulls double duty, allowing both     *)
  14. (*              adding and editing of user aliases.                           *)
  15. (*              Adding: Let user specify AliasID and select user              *)
  16. (*              Editing: Let user re-specify user, but not change ID          *)
  17. (*                                                                            *)
  18. (* Revisions: 1/21/2000  AJF  Commented and re-wrote OK button procedure to   *)
  19. (*                       clarify behavior                                     *)
  20. (*                                                                            *)
  21. (******************************************************************************)
  22. interface
  23. uses
  24.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  25.   StdCtrls, Buttons;
  26. type
  27.   TfrmAddEditAlias = class(TForm)
  28.     Label1: TLabel;
  29.     txtAlias: TEdit;
  30.     Label2: TLabel;
  31.     lstUsers: TComboBox;
  32.     Label3: TLabel;
  33.     btnOK: TBitBtn;
  34.     btnCancel: TBitBtn;
  35.     procedure FormShow(Sender: TObject);
  36.     procedure btnOKClick(Sender: TObject);
  37.   private
  38.     { Private declarations }
  39.     AliasID, AliasUser : String;  // The ID and Username if the Alias we're
  40.                                   // Adding or Editing
  41.     procedure DisplayInfo;        // Display the Alias information in the dialog
  42.   public
  43.     { Public declarations }
  44.     function Add : Boolean;                  // Add a new Alias
  45.     function Edit(Alias : String) : Boolean; // Edit an existing alias
  46.     // Both functions return true if successful, false if not (cancelled)
  47.   end;
  48. var
  49.   frmAddEditAlias: TfrmAddEditAlias;
  50. implementation
  51. uses DataU1;
  52. {$R *.DFM}
  53. procedure TfrmAddEditAlias.FormShow(Sender: TObject);
  54. begin
  55.   // Fill the ListBox with the user names
  56.   lstUsers.Clear;
  57.   INI.User_GetList(lstUsers.Items);
  58.   // display the alias and user represented
  59.   DisplayInfo;
  60.   // If we can, set focus on the alias edit box, unless it's disabled
  61.   // (edit mode) in which case, we focus on the user list box.
  62.   if txtAlias.Enabled then txtAlias.SetFocus else lstUsers.SetFocus;
  63. end;
  64. procedure TfrmAddEditAlias.DisplayInfo;
  65. var
  66.   x : Longint;
  67. begin
  68.   // display the Alias of interest
  69.   txtAlias.Text := AliasID;
  70.   // and find and select the user it represents
  71.   lstUsers.ItemIndex := -1;
  72.   for x := 0 to lstUsers.Items.Count -1 do
  73.     if lstUsers.Items[x] = AliasUser then lstUsers.ItemIndex := x;
  74. end;
  75. function TfrmAddEditAlias.Add : Boolean;
  76. begin
  77.   // We want to use the dialog as an "Add" dialog...
  78.   Caption := 'Add Alias';     // Set the dialog caption to reflect usage
  79.   txtAlias.Enabled := True;   // enable the Alias edit box so the user
  80.                               // can specify an alias name
  81.   AliasID := '';              // clear the alias we're editing
  82.   AliasUser := '';            // clear the alias user we're editing
  83.   Result := ShowModal = mrOK; // let the user do their thing
  84. end;
  85. function TfrmAddEditAlias.Edit(Alias : String) : Boolean;
  86. begin
  87.   // We want to use the dialog as an "Edit" dialog...
  88.   Caption := 'Edit Alias';     // Set the dialog caption to reflect usage
  89.   txtAlias.Enabled := False;   // disable the Alias edit box so the user
  90.                                // can't change the alias name
  91.   INI.Alias_Parse(Alias, AliasID, AliasUser);
  92.   // fetch the alias and alias user we'll be editing from the alias passed in.
  93.   // this may be just an alias, or it may be an entire alias string in the
  94.   // form: AliasID ALIASSEPERATOR AliasUser.  The Alias_Parse routine goes
  95.   // both ways... at least it better...
  96.   Result := ShowModal = mrOK; // let the user do their thing
  97. end;
  98. procedure TfrmAddEditAlias.btnOKClick(Sender: TObject);
  99. var
  100.   Editing : Boolean;  // We'll set this to true to know we're editing...
  101.                       // it just makes it that much more readable...
  102. begin
  103.   // First, let's fetch back the AliasID and AliasUser we've been working with.
  104.   // Remember, it we're editing, the AliasID Edit Box was disabled so it's
  105.   // still got the right AliasID (the one we're editing...
  106.   AliasID := Trim(txtAlias.Text);
  107.   AliasUser := '';
  108.   if lstUsers.ItemIndex > -1 then
  109.     AliasUser := Trim(lstUsers.Items[lstUsers.ItemIndex]);
  110.   Editing := not txtAlias.Enabled;  // we know we're editing by the condition
  111.                                     // of the AliasID Edit Box (Enabled <> Edit)
  112.   // Here, we can make the checks we'll have to do whether we're adding or
  113.   // editing an alias...
  114.   // Like being specified at all...
  115.   if AliasID = '' then begin
  116.     ShowMessage('The Alias requires an ID');
  117.     ModalResult := mrNone;      Exit;
  118.   end;
  119.   if AliasUser = '' then begin
  120.     ShowMessage('The Alias requires a User');
  121.     ModalResult := mrNone;      Exit;
  122.   end;
  123.   // We behave differently based on editing or adding...
  124.   if Editing then begin
  125.     // We're editing an alias, it should already exist...
  126.     if not INI.Alias_Exists(AliasID) then begin
  127.       // This should never happen, but if it does...
  128.       ShowMessage('The Alias must exist to be edited.');
  129.       ModalResult := mrCancel;      Exit;
  130.     end;
  131.     // Find the AliasID and change its AliasUser to this one...
  132.     INI.Alias_Edit(AliasID, AliasUser);
  133.   end else begin
  134.     // We're creating a new alias...
  135.     // First we check to be certain the AliasID doesn't contain any
  136.     // invalid characters (we are allowing the @ sign!)
  137.     if not IsNameValidIncludingAt(AliasID) then begin
  138.       ShowMessage('The Alias ID cannot contain ' + INVALIDNAMECHARACTERS);
  139.       ModalResult := mrNone;    Exit;
  140.     end;
  141.     if not IsNameValid(AliasID) then begin
  142.       ShowMessage('Warning: You are making a domain specific Alias.');
  143.     end;
  144.     // Or the "AliasSeperator" string we use for internal storage of the
  145.     // aliasID and AliasUser in a single string...
  146.     if Pos(ALIASSEPERATOR, AliasID) > 0 then begin
  147.       ShowMessage('The Alias ID cannot contain "' + ALIASSEPERATOR + '".');
  148.       ModalResult := mrNone;    Exit;
  149.     end;
  150.     // Then we check to be sure the name's available (it hasn't been used
  151.     // already for a User Name or Mailing List Name)
  152.     if INI.User_Exists(AliasID) then begin
  153.       ShowMessage('The Alias ID is already taken by a User.');
  154.       ModalResult := mrNone;    Exit;
  155.     end;
  156.     if INI.List_Exists(AliasID) then begin
  157.       ShowMessage('The Alias ID is already taken by a Mail List.');
  158.       ModalResult := mrNone;    Exit;
  159.     end;
  160.     // Finally, we verify the Alias does not exist, and we create it.
  161.     if INI.Alias_Exists(AliasID) then begin
  162.       ShowMessage('The Alias already exists, please specify a different ID.');
  163.       ModalResult := mrNone;      Exit;
  164.     end;
  165.     // if we've gotten this far, we can safely create the alias.
  166.     // at each check along the way, we would have been thrown out of this
  167.     // procedure by the "ModalResult := mrNone;      Exit;" line which
  168.     // would have left the user looking at the dialog again.
  169.     INI.Alias_Create(AliasID, AliasUser);
  170.   end;
  171. end;
  172. end.