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

Email服务器

开发平台:

Delphi

  1. unit AddEditUser;
  2. (******************************************************************************)
  3. (*                                                                            *)
  4. (* Hermes Add / Edit User 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: ManageUsers                                                       *)
  11. (* Uses: DataU1                                                               *)
  12. (*                                                                            *)
  13. (* Description: This Modal dialog window pulls double duty, allowing both     *)
  14. (*              adding and editing of users       .                           *)
  15. (*              Adding: Let user specify User Name and all other user data    *)
  16. (*              Editing: Let user re-specify user data, but not change Name   *)
  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, FileCtrl,
  26.   DataU1;
  27. type
  28.   TfrmAddEditUser = class(TForm)
  29.     Label1: TLabel;
  30.     txtUserID: TEdit;
  31.     Label2: TLabel;
  32.     txtUserPassword: TEdit;
  33.     btnOK: TBitBtn;
  34.     btnCancel: TBitBtn;
  35.     GroupBox1: TGroupBox;
  36.     Label3: TLabel;
  37.     txtRealName: TEdit;
  38.     cbxUB_DoNotReportUserExists_SMTP: TCheckBox;
  39.     cbxForwardTo: TCheckBox;
  40.     txtForwardTo: TEdit;
  41.     procedure btnOKClick(Sender: TObject);
  42.     procedure FormCreate(Sender: TObject);
  43.     procedure FormDestroy(Sender: TObject);
  44.     procedure FormShow(Sender: TObject);
  45.   private
  46.     { Private declarations }
  47.     UserInfo : TPop3UserInformation; // The user information we're
  48.                                      // adding or editing
  49.     procedure DisplayInfo;      // Display the user information in the dialog
  50.   public
  51.     { Public declarations }
  52.     function Add : Boolean;                   // Add a new user
  53.     function Edit(UserID : String) : Boolean; // Edit an existing user
  54.     // Both functions return true if successful, false if not (cancelled)
  55.   end;
  56. var
  57.   frmAddEditUser: TfrmAddEditUser;
  58. implementation
  59. {$R *.DFM}
  60. procedure TfrmAddEditUser.FormCreate(Sender: TObject);
  61. begin
  62.   // Create the User Information object that will hold user information and
  63.   // provide functions such as loading and saving user data to the disk.
  64.   UserInfo := TPop3UserInformation.Create;
  65. end;
  66. procedure TfrmAddEditUser.FormShow(Sender: TObject);
  67. begin
  68.   // If we can, set focus on the User Name edit box, unless it's disabled
  69.   // (edit mode) in which case, we focus on the User Password box.
  70.   if txtUserID.Enabled then txtUserID.SetFocus else txtUserPassword.SetFocus;
  71. end;
  72. procedure TfrmAddEditUser.FormDestroy(Sender: TObject);
  73. begin
  74.   // Free the User Information object...
  75.   UserInfo.Free;
  76. end;
  77. procedure TfrmAddEditUser.DisplayInfo;
  78. begin
  79.   // Display the User Information (from the UserInformation object)
  80.   // in the dialog
  81.   txtUserPassword.Text := UserInfo.Password;
  82.   txtForwardTo.Text := UserInfo.ForwardToAddress;
  83.   cbxForwardTo.Checked := txtForwardTo.Text <> '';
  84.   txtRealName.Text := UserInfo.RealName;
  85.   cbxUB_DoNotReportUserExists_SMTP.Checked :=
  86.     UserInfo.UB_DoNotReportUserExists_SMTP;
  87. end;
  88. function TfrmAddEditUser.Add : Boolean;
  89. begin
  90.   // We want to use the dialog as an "Add" dialog...
  91.   Caption := 'Add User';      // Set the dialog caption to reflect usage
  92.   txtUserID.Enabled := True;  // enable the User ID edit box so the user
  93.                               // can specify a user ID
  94.   txtUserID.Text := '';       // clear the user ID we're editing
  95.   UserInfo.Initialize;        // Initialize the User information
  96.                               // (clean the slate)
  97.   DisplayInfo;                // Display the user information (default user)
  98.   Result := ShowModal = mrOK; // let the user do their thing
  99. end;
  100. function TfrmAddEditUser.Edit(UserID : String) : Boolean;
  101. begin
  102.   // We want to use the dialog as an "Edit" dialog...
  103.   Caption := 'Edit User';        // Set the dialog caption to reflect usage
  104.   txtUserID.Enabled := False;    // disable the User ID edit box so the user
  105.                                  // can't change the User ID
  106.   txtUserID.Text := UserID;      // Display the ID of the User we'll edit
  107.   UserInfo.LoadFromFile(UserID); // read the user information from disk
  108.   DisplayInfo;                // Display the user information (default user)
  109.   Result := ShowModal = mrOK; // let the user do their thing
  110. end;
  111. procedure TfrmAddEditUser.btnOKClick(Sender: TObject);
  112. var
  113.   UserID : String;    // This is the UserID we're adding or editing...
  114.   Editing : Boolean;  // We'll set this to true to know we're editing...
  115.                       // it just makes it that much more readable...
  116. begin
  117.   // First, we need to "read" the user data from the dialog.  We'll clear the
  118.   // User Information object first, then get the dialog data
  119.   UserInfo.Initialize;
  120.   UserInfo.Password := txtUserPassword.Text;
  121.   if (cbxForwardTo.Checked) and (Trim(txtForwardTo.Text) <> '') then
  122.     UserInfo.ForwardToAddress := txtForwardTo.Text
  123.   else UserInfo.ForwardToAddress := '';
  124.   UserInfo.RealName := txtRealName.Text;
  125.   UserInfo.UB_DoNotReportUserExists_SMTP :=
  126.     cbxUB_DoNotReportUserExists_SMTP.Checked;
  127.   UserID := Trim(txtUserID.Text);
  128.   Editing := not txtUserID.Enabled;  // we know we're editing by the condition
  129.                                      // of the UserID Edit Box (Enabled <> Edit)
  130.   // Here, we can make the checks we'll have to do whether we're adding or
  131.   // editing a User ID
  132.   // Like being specified at all...
  133.   if UserID = '' then begin
  134.     ShowMessage('The User requires an ID');
  135.     ModalResult := mrNone;      Exit;
  136.   end;
  137.   // We behave differently based on editing or adding...
  138.   if Editing then begin
  139.     // We're editing a user, it should already exist...
  140.     if not INI.User_Exists(UserID) then begin
  141.       // This should never happen, but if it does...
  142.       ShowMessage('The User ID must exist to be edited.');
  143.       ModalResult := mrCancel;      Exit;
  144.     end;
  145.     // Save the User Information to disk, replacing the current data
  146.     UserInfo.SaveToFile(UserID);
  147.   end else begin
  148.     // We're creating a new User...
  149.     // First we need to be certain the UserID doesn't contain any
  150.     // invalid characters
  151.     if not IsNameValid(UserID) then begin
  152.       ShowMessage('The Used ID cannot contain ' + INVALIDNAMECHARACTERS);
  153.       ModalResult := mrNone;    Exit;
  154.     end;
  155.     // Then we check to be sure the name's available (it hasn't been used
  156.     // already for an Alias ID or Mailing List Name)
  157.     if INI.Alias_Exists(UserID) then begin
  158.       ShowMessage('The User ID is already taken by an Alias.');
  159.       ModalResult := mrNone;    Exit;
  160.     end;
  161.     if INI.List_Exists(UserID) then begin
  162.       ShowMessage('The User ID is already taken by a Mail List.');
  163.       ModalResult := mrNone;    Exit;
  164.     end;
  165.     // Finally, we verify the UserID does not exist, and we create it.
  166.     if INI.User_Exists(UserID) then begin
  167.       ShowMessage('The User ID already exists, please specify a different ID.');
  168.       ModalResult := mrNone;      Exit;
  169.     end;
  170.     // if we've gotten this far, we can safely create the User.
  171.     // at each check along the way, we would have been thrown out of this
  172.     // procedure by the "ModalResult := mrNone;      Exit;" line which
  173.     // would have left the user looking at the dialog again.
  174.     if INI.User_Create(UserID) then UserInfo.SaveToFile(UserID)
  175.       else ShowMessage('Unable to create User Folder and File.');
  176.   end;
  177. end;
  178. end.