From 4b665cbe15eb1437e4ea0c1171f7f90090cb0e52 Mon Sep 17 00:00:00 2001 From: mysticbbs Date: Sat, 17 Mar 2012 14:11:50 -0400 Subject: [PATCH] Redesigned user editor --- mdl/m_menuform.pas | 4 +- mdl/m_socket_class.pas | 2 + mystic/HISTORY.txt | 6 + mystic/bbs_ansi_menuform.pas | 4 +- mystic/bbs_cfg_main.pas | 11 +- mystic/bbs_cfg_msgbase.pas | 12 +- mystic/bbs_cfg_useredit.pas | 549 +++++++++++++++++------------------ mystic/bbs_common.pas | 23 +- mystic/bbs_doors.pas | 2 +- mystic/bbs_menus.pas | 2 +- mystic/bbs_user.pas | 2 +- mystic/bbs_userchat.pas | 4 + mystic/mutil_status.pas | 3 +- 13 files changed, 307 insertions(+), 317 deletions(-) diff --git a/mdl/m_menuform.pas b/mdl/m_menuform.pas index abb70b7..4ab1301 100644 --- a/mdl/m_menuform.pas +++ b/mdl/m_menuform.pas @@ -569,7 +569,9 @@ Var NewPos : Word; NewXPos : Word; Begin - WasHiExit := False; + WasHiExit := False; + WasFirstExit := False; + WasLastExit := False; Input.Attr := cField1; Input.FillAttr := cField2; diff --git a/mdl/m_socket_class.pas b/mdl/m_socket_class.pas index a6f4a88..c56f916 100644 --- a/mdl/m_socket_class.pas +++ b/mdl/m_socket_class.pas @@ -555,6 +555,8 @@ Procedure TSocketClass.Status (Str: String); Var Res : String; Begin + If SocketStatus = NIL Then Exit; + Try If SocketStatus.Count > 20 Then SocketStatus.Delete(0); diff --git a/mystic/HISTORY.txt b/mystic/HISTORY.txt index 850bea2..92b6ac0 100644 --- a/mystic/HISTORY.txt +++ b/mystic/HISTORY.txt @@ -4081,3 +4081,9 @@ ; User2User accept chat page request? &1=user &2=Node 485 |CL|15|&1 is requesting private user chat. Accept? |11 + + + Mystic now has a new User Editor redesigned with the ANSI menu interface. + + + The ALT-U local Sysop command has been removed (moved to user editor). + Alt-E now opens a local user editor for the user which also contains the + Upgrade option. diff --git a/mystic/bbs_ansi_menuform.pas b/mystic/bbs_ansi_menuform.pas index 95c90ad..e8fe72f 100644 --- a/mystic/bbs_ansi_menuform.pas +++ b/mystic/bbs_ansi_menuform.pas @@ -625,7 +625,9 @@ Var Begin Session.io.AllowArrow := True; - WasHiExit := False; + WasHiExit := False; + WasFirstExit := False; + WasLastExit := False; Input.Attr := cField1; Input.FillAttr := cField2; diff --git a/mystic/bbs_cfg_main.pas b/mystic/bbs_cfg_main.pas index b3c4394..9b4cf3f 100644 --- a/mystic/bbs_cfg_main.pas +++ b/mystic/bbs_cfg_main.pas @@ -25,9 +25,9 @@ Uses bbs_cfg_Groups, bbs_cfg_SecLevel, bbs_cfg_Theme, + bbs_cfg_UserEdit, - //old editors to be rewritten - bbs_cfg_useredit, + // old shit to rewrite bbs_cfg_events, bbs_cfg_vote, bbs_cfg_menuedit; @@ -44,8 +44,9 @@ Begin 'F' : Configuration_FileBaseEditor; 'G' : Configuration_GroupEditor(True); 'L' : Configuration_SecurityEditor(True); - 'R' : Configuration_GroupEditor(False); 'P' : Configuration_ProtocolEditor; + 'R' : Configuration_GroupEditor(False); + 'U' : Configuration_UserEditor; End; Session.io.RemoteRestore(TmpImage); @@ -121,7 +122,6 @@ Var Session.io.AnsiClear; Case Mode of - 'U' : User_Editor(False, False); 'M' : Menu_Editor; 'E' : Event_Editor; 'V' : Vote_Editor; @@ -292,7 +292,7 @@ Begin 'R' : Configuration_GroupEditor(False); 'S' : Configuration_SecurityEditor(True); 'T' : Configuration_ThemeEditor(False); - 'U', + 'U' : Configuration_UserEditor; 'M', 'E', 'V' : ExecuteOldConfiguration(Res); @@ -333,7 +333,6 @@ Begin ReWrite (ConfigFile); Write (ConfigFile, Config); Close (ConfigFile); - End; End. diff --git a/mystic/bbs_cfg_msgbase.pas b/mystic/bbs_cfg_msgbase.pas index 40c3f9b..0d82014 100644 --- a/mystic/bbs_cfg_msgbase.pas +++ b/mystic/bbs_cfg_msgbase.pas @@ -93,6 +93,10 @@ Var MBaseFile : TBufFile; MBase : RecMessageBase; + Procedure GlobalEdit; + Begin + End; + Procedure MakeList; Var Tag : Byte; @@ -145,6 +149,7 @@ Var ITemplate := 'ansimlst'; SysopACS := 's255'; NetAddr := 1; + Origin := Config.Origin; ColQuote := Config.ColorQuote; ColText := Config.ColorText; ColTear := Config.ColorTear; @@ -195,7 +200,7 @@ Begin List.Close; Case List.ExitCode of - '/' : Case GetCommandOption(10, 'I-Insert|D-Delete|C-Copy|P-Paste|') of + '/' : Case GetCommandOption(10, 'I-Insert|D-Delete|C-Copy|P-Paste|G-Global|') of 'I' : If List.Picked > 1 Then Begin AssignRecord(False); MakeList; @@ -232,7 +237,10 @@ Begin MakeList; End; - + 'G' : If List.Marked = 0 Then + ShowMsgBox(0, 'You must tag areas for global edit') + Else + GlobalEdit; End; #13 : If List.Picked < List.ListMax Then Begin MBaseFile.Seek (List.Picked - 1); diff --git a/mystic/bbs_cfg_useredit.pas b/mystic/bbs_cfg_useredit.pas index c33483c..97215c7 100644 --- a/mystic/bbs_cfg_useredit.pas +++ b/mystic/bbs_cfg_useredit.pas @@ -1,346 +1,333 @@ -Unit bbs_cfg_UserEdit; - -{$I M_OPS.PAS} +Unit bbs_Cfg_UserEdit; Interface Uses - m_Types, - m_DateTime, - m_Strings, - bbs_Common, - bbs_Core; + bbs_Common; -Procedure User_Editor (LocalEdit, OneUser : Boolean); +Procedure Configuration_EditUser (Var U: RecUser); +Procedure Configuration_UserEditor; +Procedure Configuration_LocalUserEdit; Implementation Uses - bbs_User, - bbs_NodeInfo, - bbs_General; + m_Types, + m_Strings, + m_DateTime, + m_FileIO, + bbs_Ansi_MenuBox, + bbs_Ansi_MenuForm, + bbs_io, + bbs_Core, + bbs_General, + bbs_Cfg_SecLevel; -Procedure User_Editor (LocalEdit, OneUser : Boolean); -Const - ModeTypeStr : Array[0..1] of String[8] = ('Standard', 'Lightbar'); - More : Boolean = False; +Procedure Configuration_EditUser (Var U: RecUser); Var - ValidStr : String; - UserNode : Word; - LocalSave : Boolean; - Image : TConsoleImageRec; - Str : String; - A : LongInt; + Box : TAnsiMenuBox; + Form : TAnsiMenuForm; + BoxImage : TConsoleImageRec; + PagePos : Byte = 1; + Topic : String; + Changed : Boolean = False; + NeedForm : Boolean = False; + + Procedure UpdatePage (Restore: Boolean); + Begin + If Restore Then Session.io.RemoteRestore(BoxImage); + + VerticalLine (21, 6, 20); + + WriteXY (62, 6, 112, 'Information'); + WriteXY (63, 7, 112, 'Settings 1'); + WriteXY (63, 8, 112, 'Settings 2'); + WriteXY (63, 9, 112, 'Statistics'); + WriteXY (60, 10, 112, 'Optional Data'); + WriteXY (68, 11, 112, 'Flags'); + + WriteXY (59, 13, 120, 'CTRL-U/Upgrade'); + + WriteXY (65, 20, 112, 'Page ' + strI2S(PagePos) + '/6'); + + Case PagePos of + 1 : WriteXY (62, 6, 127, 'INFORMATION'); + 2 : WriteXY (63, 7, 127, 'SETTINGS 1'); + 3 : WriteXY (63, 8, 127, 'SETTINGS 2'); + 4 : WriteXY (63, 9, 127, 'STATISTICS'); + 5 : WriteXY (60, 10, 127, 'OPTIONAL DATA'); + 6 : WriteXY (68, 11, 127, 'FLAGS'); + End; + + NeedForm := True; + End; + +Var + Birthdate : String[8]; + FirstCall : String[8]; + LastCall : String[8]; + Temp : Integer; + SavedUser : RecUser; Begin - Reset (Session.User.UserFile); + Topic := '|03(|09User Editor|03) |01-|09> |15'; + SavedUser := U; - If Eof(Session.User.UserFile) Then Begin - Close (Session.User.UserFile); - Exit; - End; + Box := TAnsiMenuBox.Create; + Form := TAnsiMenuForm.Create; - Session.SystemLog ('*USER EDIT*'); + Box.Header := ' ' + U.Handle + ' (ID ' + strI2S(U.PermIdx) + ') '; + Form.LoExitChars := #21; + Form.HiExitChars := #71#73#79#81; - Session.InUserEdit := True; + Box.Open (6, 5, 74, 21); - {$IFNDEF UNIX} - If LocalEdit Then Begin - Screen.GetScreenImage(1, 1, 80, 25, Image); - LocalSave := Session.LocalMode; - Session.LocalMode := True; - Session.User.TempUser := Session.User.ThisUser; - End; - {$ENDIF} + Screen.GetScreenImage (6, 5, 74, 21, BoxImage); - If Not OneUser Then Begin - Read (Session.User.UserFile, Session.User.TempUser); + Birthdate := DateJulian2Str(U.Birthday, 1); + FirstCall := DateDos2Str(U.FirstOn, 1); + LastCall := DateDos2Str(U.LastOn, 1); - If Session.User.UserNum = FilePos(Session.User.UserFile) Then - Session.User.TempUser := Session.User.ThisUser; - End; + UpdatePage(False); Repeat - UserNode := IsUserOnline(Session.User.TempUser.Handle); + Form.ExitOnFirst := True; + Form.ExitOnLast := True; - Session.io.OutFull ('|16|CL|14User Editor: ' + strI2S(FilePos(Session.User.UserFile)) + ' of ' + strI2S(FileSize(Session.User.UserFile)) + - ' |03(Idx: ' + strI2S(Session.User.TempUser.PermIdx) + ')'); + Case PagePos of + 1 : Form.ExitOnFirst := False; + 6 : Form.ExitOnLast := False; + End; - If UserNode > 0 Then - Session.io.OutFull (' |10(On Node ' + strI2S(UserNode) + ')'); + If NeedForm Then + Case PagePos of + 1 : Begin + WriteXY ( 8, 19, 112, 'Caller ID'); + WriteXY (23, 19, 113, U.PeerIP); + WriteXY (23, 20, 113, U.PeerHost); - If LocalEdit Then - Session.io.OutFullLn (' |12(Local Display)') - Else - Session.io.OutRawLn (''); + Form.Clear; - Session.io.OutFullLn ('|08|$D79Ä|03'); + Form.AddStr ('H', ' Handle' , 7, 6, 23, 6, 14, 30, 30, @U.Handle, Topic + 'User''s account handle'); + Form.AddStr ('R', ' Real Name' , 7, 7, 23, 7, 14, 30, 30, @U.RealName, Topic + 'User''s real name'); + Form.AddPass ('W', ' Password' , 7, 8, 23, 8, 14, 20, 20, @U.Password, Topic + 'User''s password'); + Form.AddStr ('A', ' Address' , 7, 9, 23, 9, 14, 30, 30, @U.Address, Topic + 'User''s street address'); + Form.AddStr ('C', ' City' , 7, 10, 23, 10, 14, 25, 25, @U.City, Topic + 'User''s city and state'); + Form.AddStr ('Z', ' Zip Code' , 7, 11, 23, 11, 14, 10, 10, @U.ZipCode, Topic + 'User''s postal code'); + Form.AddStr ('P', ' Home Phone', 7, 12, 23, 12, 14, 15, 15, @U.HomePhone, Topic + 'User''s home phone number'); + Form.AddStr ('O', ' Data Phone', 7, 13, 23, 13, 14, 15, 15, @U.DataPhone, Topic + 'User''s data phone number'); + Form.AddStr ('E', ' E-Mail' , 7, 14, 23, 14, 14, 40, 40, @U.Email, Topic + 'User''s email address'); + Form.AddStr ('U', ' User Note' , 7, 15, 23, 15, 14, 40, 40, @U.UserInfo, Topic + 'User''s user note'); + Form.AddChar ('G', ' Gender' , 7, 16, 23, 16, 14, 32, 254, @U.Gender, Topic + 'User''s gender. M/Male, F/Female'); + Form.AddDate ('B', ' Birthdate' , 7, 17, 23, 17, 14, @Birthdate, Topic + 'User''s birthdate (MM/DD/YY)'); + End; + 2 : Begin + Form.Clear; - If More Then Begin - Session.io.OutFullLn ('|12Additional settings for ' + Session.User.TempUser.Handle + ':|03|CR'); + Form.AddByte ('S', ' Security' , 7, 6, 23, 6, 14, 3, 0, 255, @U.Security, Topic + 'User''s security level'); + Form.AddFlag ('1', ' Flags #1' , 7, 7, 23, 7, 14, @U.AF1, Topic + 'User''s access flags: Set 1'); + Form.AddFlag ('2', ' Flags #2' , 7, 8, 23, 8, 14, @U.AF2, Topic + 'User''s access flags: Set 2'); + Form.AddWord ('T', ' Time Left' , 7, 9, 23, 9, 14, 10, 0, 1440, @U.TimeLeft, Topic + 'Total number of minutes left for today'); + Form.AddWord ('I', ' Time Bank' , 7, 10, 23, 10, 14, 5, 0, 65000, @U.TimeBank, Topic + 'Total minutes in time bank'); + Form.AddDate ('X', ' Expires' , 7, 11, 23, 11, 14, @U.Expires, Topic + 'User''s account expiration date (00/00/00: Disabled)'); + Form.AddByte ('O', ' To' , 7, 12, 23, 12, 14, 3, 0, 255, @U.ExpiresTo, Topic + 'Security profile to give user after expiration'); + Form.AddStr ('T', ' Theme' , 7, 13, 23, 13, 14, 20, 20, @U.Theme, Topic + 'Filename of user''s theme'); + Form.AddStr ('A', ' Start Menu', 7, 14, 23, 14, 14, 20, 20, @U.StartMenu, Topic + 'User is sent to this menu after logging in'); + Form.AddStr ('V', ' Archive' , 7, 15, 23, 15, 14, 4, 4, @U.Archive, Topic + 'User''s archive type extension'); + Form.AddChar ('P', ' Protocol' , 7, 16, 23, 16, 14, 32, 254, @U.Protocol, Topic + 'Default protocol hotkey'); + Form.AddByte ('C', ' Screensize', 7, 17, 23, 17, 14, 2, 0, 50, @U.ScreenSize, Topic + 'User''s terminal size in lines'); + Form.AddBol ('K', ' Hot Keys' , 7, 18, 23, 18, 14, 3, @U.HotKeys, Topic + 'User''s hotkey input status'); + Form.AddBol ('U', ' Auto-Sig' , 7, 19, 23, 19, 14, 3, @U.SigUse, Topic + 'Use auto signature?'); + Form.AddBol ('Q', ' QWK Files' , 7, 20, 23, 20, 14, 3, @U.QwkFiles, Topic + 'New files in QWK?'); + End; + 3 : Begin + Form.Clear; - Session.io.OutRawLn ('A. Full NodeChat ' + Session.io.OutYN(Session.User.TempUser.UseFullChat)); - Session.io.OutRawLn ('B. Expires Date ' + Session.User.TempUser.Expires); - Session.io.OutRawLn ('C. Expires To ' + strI2S(Session.User.TempUser.ExpiresTo)); + Form.AddTog ('D', ' Date Format' , 7, 6, 23, 6, 14, 8, 1, 3, 'MM/DD/YY DD/MM/YY YY/MM/DD', @U.DateType, Topic + 'User''s date format'); + Form.AddTog ('E', ' FS Editor' , 7, 7, 23, 7, 14, 3, 0, 1, 'Line Full', @U.EditType, Topic + 'User''s full screen editor setting'); + Form.AddBol ('Q', ' Quote Window', 7, 8, 23, 8, 14, 3, @U.UseLBQuote, Topic + 'User''s FS editor quote window status'); + Form.AddTog ('F', ' File Listing', 7, 9, 23, 9, 14, 8, 0, 1, 'Standard Full', @U.FileList, Topic + 'User''s file listing type'); + Form.AddTog ('M', ' Msg Reader' , 7, 10, 23, 10, 14, 8, 0, 1, 'Standard Full', @U.MReadType, Topic + 'Full screen message reader status'); + Form.AddBol ('X', ' Msg Index' , 7, 11, 23, 11, 14, 3, @U.UseLBIndex, Topic + 'Start reading at message index'); + Form.AddBol ('I', ' Mail Index' , 7, 12, 23, 12, 14, 3, @U.UseLBMIdx, Topic + 'Start reading email at message index'); + Form.AddTog ('N', ' Node Chat' , 7, 13, 23, 13, 14, 8, 0, 1, 'Standard Full', @U.UseFullChat, Topic + 'User''s node chat type'); + End; + 4 : Begin + Form.Clear; - For A := 1 to 10 Do Session.io.OutRawLn(''); + Form.AddDate ('F', ' First Call' , 7, 6, 23, 6, 14, @FirstCall, Topic + 'Date of first call (MM/DD/YY)'); + Form.AddDate ('A', ' Last Call' , 7, 7, 23, 7, 14, @LastCall, Topic + 'Date of last call (MM/DD/YY)'); + Form.AddLong ('C', ' Calls' , 7, 8, 23, 8, 14, 7, 0, 9999999, @U.Calls, Topic + 'Total number of calls to the BBS'); + Form.AddWord ('L', ' Calls Today' , 7, 9, 23, 9, 14, 5, 0, 65000, @U.CallsToday, Topic + 'Total number of calls today'); + Form.AddLong ('D', ' Downloads' , 7, 10, 23, 10, 14, 7, 0, 9999999, @U.DLs, Topic + 'Total number of downloads'); + Form.AddWord ('T', ' DLs Today' , 7, 11, 23, 11, 14, 5, 0, 65000, @U.DLsToday, Topic + 'Total downloads today'); + Form.AddLong ('W', ' DL KB' , 7, 12, 23, 12, 14, 10, 0, 2000000000, @U.DLk, Topic + 'Total downloads in kilobytes'); + Form.AddLong ('K', ' DL KB Today' , 7, 13, 23, 13, 14, 10, 0, 2000000000, @U.DLkToday, Topic + 'Downloads in kilobytes today'); + Form.AddLong ('U', ' Uploads' , 7, 14, 23, 14, 14, 10, 0, 2000000000, @U.ULs, Topic + 'Total number of uploads'); + Form.AddLong ('B', ' Upload KB' , 7, 15, 23, 15, 14, 10, 0, 2000000000, @U.ULk, Topic + 'Total uploads in kilobytes'); + Form.AddLong ('M', ' Msg Posts' , 7, 16, 23, 16, 14, 10, 0, 2000000000, @U.Posts, Topic + 'Total number of message posts'); + Form.AddWord ('E', ' E-Mails' , 7, 17, 23, 17, 14, 5, 0, 65000, @U.Emails, Topic + 'Number of e-mails sent'); + Form.AddLong ('I', ' File Ratings' , 7, 18, 23, 18, 14, 10, 0, 2000000000, @U.FileRatings, Topic + 'Total file ratings'); + Form.AddLong ('N', ' File Comments' , 7, 19, 23, 19, 14, 10, 0, 2000000000, @U.FileComment, Topic + 'Total file comments'); + Form.AddDate ('P', ' Last PW Date' , 7, 20, 23, 20, 14, @U.LastPWChange, Topic + 'Date of last password change'); + End; + 5 : Begin + Form.Clear; - Session.io.OutFullLn ('|10(1)|08|$D24Ä|10(2)|08|$D23Ä|10(3)|08|$D23Ä|03'); + For Temp := 1 to 9 Do + Form.AddStr (strI2S(Temp)[1], ' ' + Config.OptionalField[Temp].Desc, 7, 5 + Temp, 23, 5 + Temp, 14, 33, 60, @U.OptionData[Temp], Topic + 'User optional field #' + strI2S(Temp)); - Session.io.OutRawLn ('Calls ' + strPadR(strI2S(Session.User.TempUser.Calls), 14, ' ') + - 'First Call ' + strPadR(DateDos2Str(Session.User.TempUser.FirstOn, Session.User.ThisUser.DateType), 14, ' ') + - 'Msg Posts ' + strI2S(Session.User.TempUser.Posts)); - Session.io.OutRawLn ('Calls Today ' + strPadR(strI2S(Session.User.TempUser.CallsToday), 14, ' ') + - 'Last Call ' + strPadR(DateDos2Str(Session.User.TempUser.LastOn, Session.User.ThisUser.DateType), 14, ' ') + - 'Sent Email ' + strI2S(Session.User.TempUser.Emails)); - Session.io.OutRawLn ('Downloads ' + strPadR(strI2S(Session.User.TempUser.DLs), 14, ' ') + - 'Download K ' + strPadR(strI2S(Session.User.TempUser.DLk), 14, ' ') + - 'Uploads ' + strI2S(Session.User.TempUser.ULs)); - Session.io.OutRawLn ('DLs Today ' + strPadR(strI2S(Session.User.TempUser.DLsToday), 14, ' ') + - 'DLk Today ' + strPadR(strI2S(Session.User.TempUser.DLkToday), 14, ' ') + - 'Upload KB ' + strI2S(Session.User.TempUser.ULk)); + Form.AddStr ('0', ' ' + Config.OptionalField[10].Desc, 7, 15, 23, 15, 14, 33, 60, @U.OptionData[10], Topic + 'User optional field #10'); + End; + 6 : Begin + Form.Clear; - Session.io.OutFullLn ('|08|$D79Ä'); - Session.io.OutFull ('|09(Q)uit: '); + Form.AddBits ('D', ' Deleted' , 7, 6, 23, 6, 14, UserDeleted, @U.Flags, Topic + 'Is this account marked as deleted?'); + Form.AddBits ('L', ' Locked Out' , 7, 7, 23, 7, 14, UserLockedOut, @U.Flags, Topic + 'Is this account locked out of the system?'); + Form.AddBits ('N', ' No Ratios' , 7, 8, 23, 8, 14, UserNoRatio, @U.Flags, Topic + 'Ignore file ratios?'); + End; + End; - If UserNode > 0 Then - ValidStr := 'Q' - Else - ValidStr := 'ABC123Q'; + NeedForm := False; - Case Session.io.OneKey(ValidStr, True) of - 'A' : Session.User.TempUser.UseFullChat := Not Session.User.TempUser.UseFullChat; - 'B' : Session.User.TempUser.Expires := Session.io.InXY(18, 6, 8, 8, 5, Session.User.TempUser.Expires); - 'C' : Session.User.TempUser.ExpiresTo := strS2I(Session.io.InXY(18, 7, 3, 3, 1, strI2S(Session.User.TempUser.ExpiresTo))); - 'Q' : More := False; - '1' : Begin - Session.User.TempUser.Calls := strS2I(Session.io.InXY(14, 17, 5, 5, 12, strI2S(Session.User.TempUser.Calls))); - Session.User.TempUser.CallsToday := strS2I(Session.io.InXY(14, 18, 5, 5, 12, strI2S(Session.User.TempUser.CallsToday))); - Session.User.TempUser.DLs := strS2I(Session.io.InXY(14, 19, 5, 5, 12, strI2S(Session.User.TempUser.DLs))); - Session.User.TempUser.DLsToday := strS2I(Session.io.InXY(14, 20, 5, 5, 12, strI2S(Session.User.TempUser.DLsToday))); - End; - '2' : Begin - Session.User.TempUser.FirstOn := DateStr2Dos(Session.io.InXY(40, 17, 8, 8, 15, DateDos2Str(Session.User.TempUser.FirstOn, Session.User.ThisUser.DateType))); - Session.User.TempUser.LastOn := DateStr2Dos(Session.io.InXY(40, 18, 8, 8, 15, DateDos2Str(Session.User.TempUser.LastOn, Session.User.ThisUser.DateType))); - Session.User.TempUser.DLK := strS2I(Session.io.InXY(40, 19, 10, 10, 12, strI2S(Session.User.TempUser.DLK))); - Session.User.TempUser.DLKToday := strS2I(Session.io.InXY(40, 20, 10, 10, 12, strI2S(Session.User.TempUser.DLKToday))); - End; - '3' : Begin - Session.User.TempUser.Posts := strS2I(Session.io.InXY(66, 17, 10, 10, 12, strI2S(Session.User.TempUser.Posts))); - Session.User.TempUser.Emails := strS2I(Session.io.InXY(66, 18, 10, 10, 12, strI2S(Session.User.TempUser.Emails))); - Session.User.TempUser.ULS := strS2I(Session.io.InXY(66, 19, 10, 10, 12, strI2S(Session.User.TempUser.ULS))); - Session.User.TempUser.ULK := strS2I(Session.io.InXY(66, 20, 10, 10, 12, strI2S(Session.User.TempUser.ULK))); + If Form.WasFirstExit Then Form.ItemPos := Form.Items; + If Form.WasLastExit Then Form.ItemPos := 1; + + Case Form.Execute of + #21 : Begin + Temp := Configuration_SecurityEditor(False); + + If Temp <> -1 Then Begin + Changed := True; + + Upgrade_User_Level(True, U, Temp); End; - End; - End Else Begin - Session.io.OutRawLn ('A. Alias ' + strPadR(Session.User.TempUser.Handle, 32, ' ') + - 'V. Start Menu ' + Session.User.TempUser.StartMeNU); - - Session.io.OutRawLn ('B. Real Name ' + strPadR(Session.User.TempUser.RealName, 32, ' ') + - 'W. Language ' + Session.User.TempUser.Theme); - - Session.io.OutRawLn ('C. Address ' + strPadR(Session.User.TempUser.Address, 32, ' ') + - 'X. Hot Keys ' + Session.io.OutYN(Session.User.TempUser.HotKeys)); - - Session.io.OutRawLn ('D. City ' + strPadR(Session.User.TempUser.City, 32, ' ') + - 'Y. Date Type ' + DateTypeStr[Session.User.TempUser.DateType]); - - Session.io.OutRawLn ('E. Zip Code ' + strPadR(Session.User.TempUser.ZipCode, 32, ' ') + - 'Z. FList Type ' + ModeTypeStr[Session.User.TempUser.FileList]); - - Session.io.OutRaw ('F. Birthdate ' + DateJulian2Str(Session.User.TempUser.Birthday, Session.User.ThisUser.DateType) + - ' - Age ' + strPadR(strI2S(DaysAgo(Session.User.TempUser.Birthday) DIV 365), 17, ' ') + - '1. Msg Editor '); - - Case Session.User.TempUser.EditType of - 0 : Session.io.OutRawLn ('Line'); - 1 : Session.io.OutRawLn ('Full'); - 2 : Session.io.OutRawLn ('Ask'); End; + #27 : Begin + Changed := Changed or Form.Changed; + Break; + End; + #71 : If PagePos <> 1 Then Begin + PagePos := 1; + UpdatePage(True); + End; + #72, + #73 : If PagePos > 1 Then Begin + Dec(PagePos); + UpdatePage(True); + End; + #79 : If PagePos <> 6 Then Begin + PagePos := 6; + UpdatePage(True); + End; + #80, + #81 : If PagePos < 6 Then Begin + Inc (PagePos); + UpdatePage(True); + End; + End; - Session.io.OutRawLn ('G. Gender ' + strPadR(Session.User.TempUser.Gender, 32, ' ') + - '2. Msg Quote ' + ModeTypeStr[Ord(Session.User.TempUser.UseLBQuote)]); + Changed := Changed or Form.Changed; + Until False; - Session.io.OutRawLn ('H. Home Phone ' + strPadR(Session.User.TempUser.HomePhone, 32, ' ') + - '3. Msg Reader ' + ModeTypeStr[Session.User.TempUser.MReadType]); + U.Birthday := DateStr2Julian(Birthdate); + U.FirstOn := DateStr2Dos(FirstCall); + U.LastOn := DateStr2Dos(LastCall); - Session.io.OutRawLn ('I. Data Phone ' + strPadR(Session.User.TempUser.DataPhone, 32, ' ') + - '4. Index ' + Session.io.OutYN(Session.User.TempUser.UseLBIndex)); + Box.Close; + Box.Free; + Form.Free; - Session.io.OutRawLn ('J. E-mail ' + strPadR(Session.User.TempUser.Email, 32, ' ') + - '5. Mail Index ' + Session.io.OutYN(Session.User.TempUser.UseLBMIdx)); + If Changed Then + If Not ShowMsgBox(1, 'Save changes?') Then + U := SavedUser; +End; - Session.io.OutRawLn ('K. ' + strPadL(Config.OptionalField[1].Desc, 10, ' ') + ' ' + strPadR(Session.User.TempUser.OptionData[1], 32, ' ') + - '6. Time Left ' + strI2S(Session.User.TempUser.TimeLeft)); +Procedure Configuration_UserEditor; +Var + Box : TAnsiMenuBox; + List : TAnsiMenuList; + UserFile : TBufFile; + User : RecUser; - Session.io.OutRawLn ('L. ' + strPadL(Config.OptionalField[2].Desc, 10, ' ') + ' ' + strPadR(Session.User.TempUser.OptionData[2], 32, ' ') + - '7. Time Bank ' + strI2S(Session.User.TempUser.TimeBank)); + Procedure MakeList; + Begin + List.Clear; - Session.io.OutRawLn ('N. ' + strPadL(Config.OptionalField[3].Desc, 10, ' ') + ' ' + strPadR(Session.User.TempUser.OptionData[3], 32, ' ') + - '8. Screen Size ' + strI2S(Session.User.TempUser.ScreenSize)); + UserFile.Reset; - Session.io.OutRawLn ('O. User Note ' + strPadR(Session.User.TempUser.UserInfo, 32, ' ') + - '!. Ignore LC ' + Session.io.OutYN(Session.User.TempUser.Flags AND UserNoCaller <> 0)); + While Not UserFile.EOF Do Begin + UserFile.Read (User); - Session.io.OutRawLn ('P. Security ' + strPadR(strI2S(Session.User.TempUser.Security), 36, ' ') + - 'Locked out ' + Session.io.OutYN(Session.User.TempUser.Flags AND UserLockedOut <> 0)); + If User.Flags AND UserDeleted <> 0 Then + List.Add (strPadR(User.Handle, 37, ' ') + 'DELETED', 0) + Else + List.Add (strPadR(User.Handle, 32, ' ') + + strPadL(strI2S(User.Security), 5, ' ') + + strPadL(strI2S(User.PermIdx), 10, ' '), 0); + End; + End; - Session.io.OutRawLn ('R. Password ' + strPadR(strRep('*', Length(Session.User.TempUser.Password)), 39, ' ') + - 'Deleted ' + Session.io.OutYN(Session.User.TempUser.Flags AND UserDeleted <> 0)); +Begin + UserFile := TBufFile.Create(8192); - Session.io.OutRawLn ('S. Flags #1 ' + DrawAccessFlags(Session.User.TempUser.AF1) + ' ' + - 'No Delete ' + Session.io.OutYN(Session.User.TempUser.Flags AND UserNoKill <> 0)); + If Not UserFile.Open(Config.DataPath + 'users.dat', fmOpenCreate, fmRWDN, SizeOf(RecUser)) Then Begin + UserFile.Free; + Exit; + End; - Session.io.OutRawLn ('T. Flags #2 ' + DrawAccessFlags(Session.User.TempUser.AF2) + ' ' + - 'No Ratios ' + Session.io.OutYN(Session.User.TempUser.Flags AND UserNoRatio <> 0)); + Box := TAnsiMenuBox.Create; + List := TAnsiMenuList.Create; - Session.io.OutFullLn ('|08|$D79Ä'); - Session.io.OutFull ('|09([) Prev, (]) Next, (U)pgrade, (*) Search, (M)ore, (Q)uit: '); + List.NoWindow := True; + List.LoChars := #13#27; - If UserNode > 0 Then - ValidStr := '[]*Q' - Else - ValidStr := '[]*ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678!'; + Box.Header := ' User Editor '; - Case Session.io.OneKey(ValidStr, True) of - 'A' : Session.User.TempUser.Handle := Session.io.InXY(16, 3, 30, 30, 18, Session.User.TempUser.Handle); - 'B' : Session.User.TempUser.RealName := Session.io.InXY(16, 4, 30, 30, 18, Session.User.TempUser.RealName); - 'C' : Session.User.TempUser.Address := Session.io.InXY(16, 5, 30, 30, 18, Session.User.TempUser.Address); - 'D' : Session.User.TempUser.City := Session.io.InXY(16, 6, 25, 25, 18, Session.User.TempUser.City); - 'E' : Session.User.TempUser.ZipCode := Session.io.InXY(16, 7, 9, 9, 12, Session.User.TempUser.ZipCode); - 'F' : Session.User.TempUser.Birthday := DateStr2Julian(Session.io.InXY (16, 8, 8, 8, 15, DateJulian2Str(Session.User.TempUser.Birthday, Session.User.ThisUser.DateType))); - 'G' : If Session.User.TempUser.Gender = 'M' Then Session.User.TempUser.Gender := 'F' Else Session.User.TempUser.Gender := 'M'; - 'H' : Session.User.TempUser.HomePhone := Session.io.InXY (16, 10, 15, 15, 12, Session.User.TempUser.HomePhone); - 'I' : Session.User.TempUser.DataPhone := Session.io.InXY (16, 11, 15, 15, 12, Session.User.TempUser.DataPhone); - 'J' : Session.User.TempUser.Email := Session.io.InXY (16, 12, 30, 35, 11, Session.User.TempUser.Email); - 'K' : Session.User.TempUser.OptionData[1] := Session.io.InXY (16, 13, 30, 35, 11, Session.User.TempUser.OptionData[1]); - 'L' : Session.User.TempUser.OptionData[2] := Session.io.InXY (16, 14, 30, 35, 11, Session.User.TempUser.OptionData[2]); - 'N' : Session.User.TempUser.OptionData[3] := Session.io.InXY (16, 15, 30, 35, 11, Session.User.TempUser.OptionData[3]); - 'O' : Session.User.TempUser.UserInfo := Session.io.InXY (16, 16, 30, 30, 11, Session.User.TempUser.UserInfo); - 'P' : Begin - Session.User.TempUser.Security := strS2I(Session.io.InXY(16, 17, 3, 3, 12, strI2S(Session.User.TempUser.Security))); - If (Session.User.TempUser.Security > 255) or (Session.User.TempUser.Security < 0) Then Session.User.TempUser.Security := 0; - End; - 'R' : Session.User.TempUser.Password := Session.io.InXY (16, 18, 15, 15, 12, Session.User.TempUser.Password); - 'S' : EditAccessFlags(Session.User.TempUser.AF1); - 'T' : EditAccessFlags(Session.User.TempUser.AF2); - 'V' : Session.User.TempUser.StartMeNU := Session.io.InXY (64, 3, 8, 8, 11, Session.User.TempUser.StartMeNU); - 'W' : Session.User.TempUser.Theme := Session.io.InXY (64, 4, 8, 8, 11, Session.User.TempUser.Theme); - 'X' : Session.User.TempUser.HotKeys := Not Session.User.TempUser.HotKeys; - 'Y' : If Session.User.TempUser.DateType < 3 Then Inc (Session.User.TempUser.DateType) Else Session.User.TempUser.DateType := 1; - 'Z' : Session.User.TempUser.FileList := Ord(Not Boolean(Session.User.TempUser.FileList)); - '1' : If Session.User.TempUser.EditType < 2 Then Inc (Session.User.TempUser.EditType) Else Session.User.TempUser.EditType := 0; - '2' : Session.User.TempUser.UseLBQuote := Not Session.User.TempUser.UseLBQuote; - '3' : Session.User.TempUser.MReadType := Ord(Not Boolean(Session.User.TempUser.MReadType)); - '4' : Session.User.TempUser.UseLBIndex := Not Session.User.TempUser.UseLBIndex; - '5' : Session.User.TempUser.UseLBMIdx := Not Session.User.TempUser.UseLBMIdx; - '6' : Begin - Session.User.TempUser.TimeLeft := strS2I(Session.io.InXY(64, 13, 3, 3, 12, strI2S(Session.User.TempUser.TimeLeft))); - If OneUser or (Session.User.UserNum = FilePos(Session.User.UserFile)) Then - Session.SetTimeLeft(Session.User.TempUser.TimeLeft); - End; - '7' : Session.User.TempUser.TimeBank := strS2I(Session.io.InXY(64, 14, 3, 3, 12, strI2S(Session.User.TempUser.TimeBank))); - '8' : Session.User.TempUser.ScreenSize := strS2I(Session.io.InXY(64, 15, 2, 2, 12, strI2S(Session.User.TempUser.ScreenSize))); - '!' : Begin - Session.io.OutRaw ('(C)aller, (D)elete, (I)gnore Ratios, (L)ockOut, (N)oKill, (Q)uit: '); - Case Session.io.OneKey('CDILNQ', True) of - 'C' : Session.User.TempUser.Flags := Session.User.TempUser.Flags XOR UserNoCaller; - 'D' : Session.User.TempUser.Flags := Session.User.TempUser.Flags XOR UserDeleted; - 'I' : Session.User.TempUser.Flags := Session.User.TempUser.Flags XOR UserNoRatio; - 'L' : Session.User.TempUser.Flags := Session.User.TempUser.Flags XOR UserLockedOut; - 'N' : Session.User.TempUser.Flags := Session.User.TempUser.Flags XOR UserNoKill; - End; - End; - '[' : If Not OneUser Then Begin + Box.Open (15, 5, 65, 21); - If Session.User.UserNum = FilePos(Session.User.UserFile) Then - Session.User.ThisUser := Session.User.TempUser; + WriteXY (17, 7, 112, 'User Name Level UserID'); + WriteXY (16, 8, 112, strRep(#196, 49)); - Seek (Session.User.UserFile, Pred(FilePos(Session.User.UserFile))); - Write (Session.User.UserFile, Session.User.TempUser); + Repeat + MakeList; - If FilePos(Session.User.UserFile) > 1 Then Begin - Seek (Session.User.UserFile, FilePos(Session.User.UserFile)-2); - Read (Session.User.UserFile, Session.User.TempUser); - End Else Begin - Seek (Session.User.UserFile, FileSize(Session.User.UserFile) - 1); - Read (Session.User.UserFile, Session.User.TempUser); - End; - End; - ']' : If Not OneUser Then Begin - If Session.User.UserNum = FilePos(Session.User.UserFile) Then - Session.User.ThisUser := Session.User.TempUser; + List.Open (15, 8, 65, 21); + List.Close; - Seek (Session.User.UserFile, Pred(FilePos(Session.User.UserFile))); - Write (Session.User.UserFile, Session.User.TempUser); - If Eof(Session.User.UserFile) Then Reset(Session.User.UserFile); - Read (Session.User.UserFile, Session.User.TempUser); - End; - '*' : If Not OneUser Then Begin - Session.io.OutFull ('User name / number: '); - Str := Session.io.GetInput(30, 30, 12, ''); + Case List.ExitCode of + #13 : Begin + UserFile.Seek (List.Picked - 1); + UserFile.Read (User); - If Session.User.UserNum = FilePos(Session.User.UserFile) Then - Session.User.ThisUser := Session.User.TempUser; + Configuration_EditUser(User); - A := FilePos(Session.User.UserFile) - 1; - Seek (Session.User.UserFile, A); - Write (Session.User.UserFile, Session.User.TempUser); + UserFile.Seek (List.Picked - 1); + UserFile.Write (User); + End; + #27 : Break; + End; + Until False; - If (strS2I(Str) > 0) and (strS2I(Str) < FileSize(Session.User.UserFile)) Then - A := strS2I(Str) - 1 - Else Begin - Reset (Session.User.UserFile); - While Not Eof(Session.User.UserFile) Do Begin - Read (Session.User.UserFile, Session.User.TempUser); - If (Pos(Str, strUpper(Session.User.TempUser.Handle)) > 0) or (Pos(Str, strUpper(Session.User.TempUser.RealName)) > 0) Then Begin - Session.io.PromptInfo[1] := Session.User.TempUser.Handle; - If Session.io.GetYN(Session.GetPrompt(155), True) Then Begin - A := FilePos(Session.User.UserFile) - 1; - Break; - End; - End; - End; - End; + Box.Close; - Seek (Session.User.UserFile, A); - Read (Session.User.UserFile, Session.User.TempUser); - End; - 'M' : More := True; - 'Q' : Break; - 'U' : Begin - Session.io.OutFull ('|CR|09Upgrade to level (0-255): '); - A := strS2I(Session.io.GetInput(3, 3, 12, strI2S(Session.User.TempUser.Security))); - If (A > 255) or (A <= 0) Then A := 1; - Upgrade_User_Level(False, Session.User.TempUser, A); - End; - End; - End; + UserFile.Free; + List.Free; + Box.Free; +End; - Until False; +Procedure Configuration_LocalUserEdit; +Var + SavedLocal : Boolean; +Begin + SavedLocal := Session.LocalMode; - If Not OneUser Then Begin - If Session.User.UserNum = FilePos(Session.User.UserFile) Then - Session.User.ThisUser := Session.User.TempUser; + Session.InUserEdit := True; + Session.LocalMode := True; - Seek (Session.User.UserFile, Pred(FilePos(Session.User.UserFile))); - Write (Session.User.UserFile, Session.User.TempUser); - End; - - {$IFNDEF UNIX} - If LocalEdit Then Begin - Session.LocalMode := LocalSave; - Session.User.ThisUser := Session.User.TempUser; - - Screen.PutScreenImage(Image); - - Session.SetTimeLeft (Session.User.TempUser.TimeLeft); - UpdateStatusLine (StatusPtr, ''); - End; - {$ENDIF} - - Close (Session.User.UserFile); + Configuration_EditUser (Session.User.ThisUser); Session.InUserEdit := False; + Session.LocalMode := SavedLocal; End; End. diff --git a/mystic/bbs_common.pas b/mystic/bbs_common.pas index 0a9ac09..40ffbba 100644 --- a/mystic/bbs_common.pas +++ b/mystic/bbs_common.pas @@ -330,27 +330,8 @@ Begin If Not Screen.Active And (Cmd <> #47) Then Exit; Case Cmd of -{U} #22 : Begin - X := Screen.CursorX; - Y := Screen.CursorY; - UpdateStatusLine (0, 'Upgrade Security Level: '); - Screen.SetWindow (1, 25, 80, 25, False); - Screen.TextAttr := 8 + 7 * 16; - Screen.CursorXY (52, 2); - LS := Session.LocalMode; - Session.LocalMode := True; - A := strS2I(Session.io.GetInput(3, 3, 9, strI2S(Session.User.ThisUser.Security))); - Session.LocalMode := LS; - If (A > 0) and (A < 256) Then Begin - Upgrade_User_Level (True, Session.User.ThisUser, A); - Session.SetTimeLeft(Session.User.ThisUser.TimeLeft); - End; - - UpdateStatusLine(StatusPtr, ''); - - Screen.CursorXY (X, Y); - End; -{E} #18 : If (Not Session.InUserEdit) and (Session.User.UserNum <> -1) Then User_Editor(True, True); +{E} #18 : If (Not Session.InUserEdit) and (Session.User.UserNum <> -1) Then + Configuration_LocalUserEdit; {T} #20 : Begin // X := Screen.CursorX; // Y := Screen.CursorY; diff --git a/mystic/bbs_doors.pas b/mystic/bbs_doors.pas index a469dc5..1b88c79 100644 --- a/mystic/bbs_doors.pas +++ b/mystic/bbs_doors.pas @@ -58,7 +58,7 @@ Var tFile : Text; A : Byte; Begin - Assign (tFile, Session.TempPath + 'DORINFO1.DEF'); + Assign (tFile, Session.TempPath + 'DORINFO1.DEF'); Rewrite (tFile); Write (tFile, Config.BBSName + Ending); diff --git a/mystic/bbs_menus.pas b/mystic/bbs_menus.pas index 0bfd1e5..10dce3e 100644 --- a/mystic/bbs_menus.pas +++ b/mystic/bbs_menus.pas @@ -325,7 +325,7 @@ Begin 'M' : Configuration_ExecuteEditor('B'); 'P' : Configuration_ExecuteEditor('P'); 'S' : Configuration_MainMenu; - 'U' : User_Editor(False, False); + 'U' : Configuration_UserEditor; 'V' : Vote_Editor; End; End; diff --git a/mystic/bbs_user.pas b/mystic/bbs_user.pas index aa50eb7..cab0308 100644 --- a/mystic/bbs_user.pas +++ b/mystic/bbs_user.pas @@ -1119,7 +1119,7 @@ Begin Session.SetTimeLeft (ThisUser.TimeLeft); // check account expired -- DONE - // check password change + // check password change -- DONE // check auto-upgrades posts/calls/downloads/uploads/etc If DateValid(Session.User.ThisUser.Expires) Then diff --git a/mystic/bbs_userchat.pas b/mystic/bbs_userchat.pas index 6bfd02d..0ef9a29 100644 --- a/mystic/bbs_userchat.pas +++ b/mystic/bbs_userchat.pas @@ -65,6 +65,10 @@ Var Str2 : String = ''; InRemote : Byte; + Procedure SplitChat; + Begin + End; + Procedure LineChat; Begin Session.io.BufFlush; diff --git a/mystic/mutil_status.pas b/mystic/mutil_status.pas index 3e37c24..3e1bc41 100644 --- a/mystic/mutil_status.pas +++ b/mystic/mutil_status.pas @@ -88,7 +88,7 @@ Begin Console.WriteXY (24, LinePosition + 1, 25, PerStr); End; - Console.WriteXY (75, LinePosition + 1, 7, strPadR(strI2S(Percent), 3, ' ')); + Console.WriteXY (75, LinePosition + 1, 15, strPadR(strI2S(Percent), 3, ' ')); End; End; @@ -106,5 +106,4 @@ Begin Inherited Destroy; End; - End.