X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=WebModuleUnit1.pas;h=10b9c94e0a14e01780c03c795311316a1920627c;hb=5967cc33a69bbb24d27a8354ce73233ffb1b0d2a;hp=b504179af03f6b82c4d840ec21b238df2e513a3b;hpb=e7a14fbbd48e9e3136f74637b5bd7a55ade7cb7e;p=newbbs%2Fnewbbs.git diff --git a/WebModuleUnit1.pas b/WebModuleUnit1.pas index b504179..10b9c94 100644 --- a/WebModuleUnit1.pas +++ b/WebModuleUnit1.pas @@ -4,7 +4,13 @@ interface uses System.SysUtils, System.Classes, Web.HTTPApp, Web.DSProd, Web.HTTPProd, Web.DBWeb, System.Variants, System.NetEncoding, System.RegularExpressions, - Data.DB, Web.DBXpressWeb, System.Types; + Data.DB, Web.DBXpressWeb, System.Types, FireDAC.Stan.Intf, + FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, + FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt, + FireDAC.Comp.DataSet, FireDAC.Comp.Client, FireDAC.UI.Intf, FireDAC.Stan.Def, + FireDAC.Stan.Pool, FireDAC.Phys, FireDAC.Phys.FB, FireDAC.Phys.FBDef, + FireDAC.Phys.MySQL, FireDAC.Phys.MySQLDef, FireDAC.VCLUI.Wait, + FireDAC.Comp.UI; type TWebModule1 = class(TWebModule) @@ -17,22 +23,53 @@ type top: TPageProducer; master: TPageProducer; alert: TDataSetPageProducer; - footer: TDataSetPageProducer; mail: TPageProducer; - css1: TPageProducer; css2: TPageProducer; css3: TPageProducer; css4: TPageProducer; header: TDataSetPageProducer; - login: TDataSetPageProducer; js1: TPageProducer; js2: TPageProducer; - js3: TPageProducer; - js4: TPageProducer; adhead: TPageProducer; js5: TPageProducer; title: TPageProducer; ti: TDataSetPageProducer; + FDTable2: TFDTable; + FDTable2DBNUM: TIntegerField; + FDTable2NUMBER: TIntegerField; + FDTable2TITLE: TWideStringField; + FDTable2NAME: TWideStringField; + FDTable2COMMENT: TWideMemoField; + FDTable2RAW: TWideMemoField; + FDTable2DATE: TDateField; + FDTable2PASS: TWideStringField; + FDTable5: TFDTable; + FDTable4: TFDTable; + FDTable4ID: TIntegerField; + FDTable4DBNAME: TIntegerField; + FDTable4POSNUM: TIntegerField; + FDTable4DATE: TDateField; + FDTable4REQUEST: TWideMemoField; + DataSource1: TDataSource; + FDTable3: TFDTable; + FDTable3TITLE: TWideStringField; + FDTable3TITLE2: TWideStringField; + FDTable3INFO: TIntegerField; + FDTable3COUNT: TIntegerField; + FDTable3password: TWideStringField; + FDTable3ng: TWideStringField; + FDConnection1: TFDConnection; + FDTable1: TFDTable; + FDTable1DBNUM: TIntegerField; + FDTable1DATABASE: TWideStringField; + login: TPageProducer; + footer: TPageProducer; + FDGUIxWaitCursor1: TFDGUIxWaitCursor; + FDQuery1: TFDQuery; + FDTable3mente: TSmallintField; + FDTable5id: TIntegerField; + FDTable5name: TWideStringField; + FDTable5source: TWideMemoField; procedure indexHTMLTag(Sender: TObject; Tag: TTag; const TagString: string; TagParams: TStrings; var ReplaceText: string); procedure WebModule1indexpageAction(Sender: TObject; Request: TWebRequest; @@ -103,18 +140,23 @@ type TagParams: TStrings; var ReplaceText: string); procedure loginHTMLTag(Sender: TObject; Tag: TTag; const TagString: string; TagParams: TStrings; var ReplaceText: string); + procedure css1HTMLTag(Sender: TObject; Tag: TTag; const TagString: string; + TagParams: TStrings; var ReplaceText: string); + procedure WebModule1usrdelAction(Sender: TObject; Request: TWebRequest; + Response: TWebResponse; var Handled: Boolean); private { private éŒ¾ } ss: TStringList; tagstr: string; procedure pages(count: Integer; var page: Integer); - procedure strsCheck(var error: string; var list: TStringList); + procedure strsCheck(var Error: string; list: TStringList); procedure setLastArticle; function isInfo: Boolean; function loginCheck: Boolean; function hash(str: string): string; function mente: Boolean; function detail(ts, pid: string): string; + function scan(text: string): string; public { public éŒ¾ } end; @@ -126,7 +168,7 @@ implementation { %CLASSGROUP 'Vcl.Controls.TControl' } -uses Unit1, IdHashSHA, IdGlobal, IdHash, IdHashMessageDigest; +uses IdHashSHA, IdGlobal, IdHash, IdHashMessageDigest, Jpeg, Graphics; {$R *.dfm} @@ -139,9 +181,11 @@ procedure TWebModule1.adheadHTMLTag(Sender: TObject; Tag: TTag; begin if TagString = 'pr' then ReplaceText := promotion - else if (TagString = 'mente') and - (DataModule1.FDTable3.FieldByName('mente').AsBoolean = true) then - ReplaceText := 'checked' + else if TagString = 'uri' then + ReplaceText := Request.ScriptName + else if (TagString = 'mente') and (FDTable3.FieldByName('mente').AsInteger = 1) + then + ReplaceText := 'checked="checked"' else if TagString = 'database' then ReplaceText := Request.QueryFields.Values['db']; end; @@ -151,8 +195,18 @@ procedure TWebModule1.adminFormatCell(Sender: TObject; var Align: THTMLAlign; var VAlign: THTMLVAlign; var CustomAttrs, CellData: string); begin - if (CellColumn = 0) and (CellRow > 0) then - CellData := Format('', [CellRow]); + if CellRow = 0 then + Exit; + case CellColumn of + 0: + CellData := Format('', [CellRow]); + 1: + CellData := '' + CellData + ''; + 2: + CellData := '

' + CellData + '

'; + 3: + CellData := '

' + CellData + '

'; + end; end; procedure TWebModule1.alertHTMLTag(Sender: TObject; Tag: TTag; @@ -162,21 +216,18 @@ var i: Integer; begin if (TagString = 'plus') and (alert.Tag = 0) then - ReplaceText := - '&num=<#posnum>>[ <#dbname>-<#posnum> ]' + ReplaceText := '&num=<#posnum>>[ <#dbname>-<#posnum> ]' else if TagString = 'article' then begin - with DataModule1 do - if (FDTable1.Locate('dbnum', FDTable4.FieldByName('dbname').AsInteger) - = false) or (FDTable2.Locate('number', FDTable4.FieldByName('posnum') - .AsInteger) = false) then - begin - ReplaceText := '

ƒŠƒNƒGƒXƒg'; - Exit; - end; + if alert.Tag = 1 then + begin + ReplaceText := '

ƒŠƒNƒGƒXƒg'; + Exit; + end; s := TStringList.Create; try - s.Text := articles.Content; + s.text := articles.Content; for i := 1 to 2 do s.Delete(1); for i := s.count - 1 downto 0 do @@ -185,20 +236,27 @@ begin s.Delete(i); break; end; - ReplaceText := s.Text; + ReplaceText := s.text; finally s.Free; end; - end - else if TagString = 'request' then - ReplaceText := DataModule1.FDTable4.FieldByName('request').AsString; + end; end; procedure TWebModule1.articlesHTMLTag(Sender: TObject; Tag: TTag; const TagString: string; TagParams: TStrings; var ReplaceText: string); begin - if TagString = 'comment' then - ReplaceText := DataModule1.FDTable2.FieldByName('comment').AsString; + if TagString = 'uri' then + ReplaceText := Request.ScriptName + else if TagString = 'comment' then + ReplaceText := FDTable2.FieldByName('comment').AsString; +end; + +procedure TWebModule1.css1HTMLTag(Sender: TObject; Tag: TTag; + const TagString: string; TagParams: TStrings; var ReplaceText: string); +begin + if TagString = 'uri' then + ReplaceText := Request.ScriptName; end; function TWebModule1.detail(ts, pid: string): string; @@ -223,16 +281,16 @@ begin else ReplaceText := ReplaceText + Format(' %d ', - [PString(Self.Tag)^, DataModule1.FDTable1.FieldByName('dbnum') - .AsInteger, i, i]); + [Request.ScriptName + PString(Self.Tag)^, + FDTable1.FieldByName('dbnum').AsInteger, i, i]); end else if TagString = 'recent' then if index.Tag = -1 then ReplaceText := TagString else ReplaceText := 'recent'; + Request.ScriptName + PString(Self.Tag)^ + '?db=' + + FDTable1.FieldByName('dbnum').AsString + '">recent'; end; function TWebModule1.hash(str: string): string; @@ -252,7 +310,9 @@ procedure TWebModule1.headerHTMLTag(Sender: TObject; Tag: TTag; var s: string; begin - if TagString = 'cookie' then + if TagString = 'uri' then + ReplaceText := Request.ScriptName + else if TagString = 'cookie' then begin s := TagParams.Values['param']; ReplaceText := TNetEncoding.URL.Decode(Request.CookieFields.Values[s]); @@ -275,17 +335,20 @@ procedure TWebModule1.helpHTMLTag(Sender: TObject; Tag: TTag; begin if TagString = 'pr' then ReplaceText := promotion + else if TagString = 'uri' then + ReplaceText := Request.ScriptName else if TagString = 'area' then if help.Tag = 0 then begin ss := TStringList.Create; try - ss.Add('

‚¨–â‚¢‡‚킹<íœˆË—Š‚Ȃlj½‚Å‚à>

'); + ss.Add('

‚¨–â‚¢‡‚킹<íœˆË—Š‚Ȃlj½‚Å‚à>

'); ss.Add('
'); ss.Add('
'); - ReplaceText := ss.Text; + ReplaceText := ss.text; finally ss.Free; end; @@ -302,30 +365,31 @@ var begin if TagString = 'pr' then ReplaceText := promotion + else if TagString = 'uri' then + ReplaceText := Request.ScriptName else if TagString = 'article' then begin - for i := 1 to DataModule1.FDTable3.FieldByName('count').AsInteger do + for i := 1 to FDTable3.FieldByName('count').AsInteger do begin - if DataModule1.FDTable2.Eof = true then + if FDTable2.Eof = true then break; if isInfo = false then ReplaceText := ReplaceText + articles.Content else ReplaceText := articles.Content + ReplaceText; - DataModule1.FDTable2.Next; + FDTable2.Next; end; end else if TagString = 'footer' then ReplaceText := footer.Content else if TagString = 'header' then - if (DataModule1.FDTable1.FieldByName('dbnum') - .AsInteger = DataModule1.FDTable3.FieldByName('info').AsInteger) and - (loginCheck = false) then + if (FDTable1.FieldByName('dbnum').AsInteger = FDTable3.FieldByName('info') + .AsInteger) and (loginCheck = false) then ReplaceText := '

ŠÇ—l‚©‚炨’m‚点‚ª‚ ‚è‚Ü‚·.

' else begin - i := DataModule1.FDTable3.FieldByName('count').AsInteger; - if 10 * i <= DataModule1.FDTable2.RecordCount then + i := FDTable3.FieldByName('count').AsInteger; + if 10 * i <= FDTable2.RecordCount then ReplaceText := '

‚±‚êˆÈã“Še‚Å‚«‚Ü‚¹‚ñ.

' else ReplaceText := header.Content; @@ -333,17 +397,15 @@ begin else if (TagString = 'css') or (TagString = 'js') then ReplaceText := detail(TagString, TagParams.Values['id']) else if TagString = 'dbnum' then - ReplaceText := DataModule1.FDTable1.FieldByName('dbnum').AsString + ReplaceText := FDTable1.FieldByName('dbnum').AsString else if TagString = 'database' then - ReplaceText := DataModule1.FDTable1.FieldByName('database').AsString; + ReplaceText := FDTable1.FieldByName('database').AsString; end; function TWebModule1.isInfo: Boolean; -var - s: string; begin - result := DataModule1.FDTable1.FieldByName('dbnum') - .AsInteger = DataModule1.FDTable3.FieldByName('info').AsInteger; + result := FDTable1.FieldByName('dbnum').AsInteger = FDTable3.FieldByName + ('info').AsInteger; end; procedure TWebModule1.itemsHTMLTag(Sender: TObject; Tag: TTag; @@ -357,7 +419,7 @@ begin begin s := TStringList.Create; try - s.Text := DataModule1.FDTable2.FieldByName('raw').AsString; + s.text := FDTable2.FieldByName('raw').AsString; for i := 0 to s.count - 1 do for j := 0 to ss.count - 1 do if Pos(ss[j], s[i]) > 0 then @@ -365,18 +427,19 @@ begin s[i] := '

' + s[i] else s[i] := '

' + s[i]; - with DataModule1.FDTable2 do + with FDTable2 do begin i := FieldByName('dbnum').AsInteger; j := FieldByName('number').AsInteger; str := Request.QueryFields.Values['db']; if str = '' then - t := Format('[ %d-%d ]', - [i, j, i, j]) + t := Format('[ %d-%d ]', + [Request.ScriptName, i, j, i, j]) else - t := Format('[ %d ]', [str, j, j]); + t := Format('[ %d ]', + [Request.ScriptName, str, j, j]); end; - ReplaceText := t + s.Text; + ReplaceText := t + s.text; finally s.Free; end; @@ -385,48 +448,77 @@ end; function TWebModule1.loginCheck: Boolean; begin - result := hash(Request.CookieFields.Values['user']) - = DataModule1.FDTable3.FieldByName('password').AsString; + result := hash(Request.CookieFields.Values['user']) = FDTable3.FieldByName + ('password').AsString; end; procedure TWebModule1.loginHTMLTag(Sender: TObject; Tag: TTag; const TagString: string; TagParams: TStrings; var ReplaceText: string); +var + i: Integer; begin if TagString = 'pr' then - ReplaceText := promotion; + ReplaceText := promotion + else if TagString = 'uri' then + ReplaceText := Request.ScriptName + else if TagString = 'database' then + begin + i := StrToIntDef(Request.QueryFields.Values['db'], + FDTable3.FieldByName('info').AsInteger); + if FDTable1.Locate('dbnum', i) = true then + ReplaceText := FDTable1.FieldByName('database').AsString; + end; end; procedure TWebModule1.masterHTMLTag(Sender: TObject; Tag: TTag; const TagString: string; TagParams: TStrings; var ReplaceText: string); +var + i, j: Integer; begin if TagString = 'pr' then ReplaceText := promotion + else if TagString = 'uri' then + ReplaceText := Request.ScriptName else if TagString = 'request' then - with DataModule1.FDTable4 do + begin + FDTable1.Close; + with FDTable4 do begin First; - ReplaceText := ''; while Eof = false do begin - if FieldByName('posnum').AsInteger = -1 then - alert.Tag := 1 + i := FieldByName('dbname').AsInteger; + j := FieldByName('posnum').AsInteger; + if FDTable2.Locate('dbnum;number', VarArrayOf([i, j])) = true then + alert.Tag := 0 else - alert.Tag := 0; + alert.Tag := 1; ReplaceText := ReplaceText + alert.ContentFromString(alert.Content); Next; end; - ReplaceText := ReplaceText + '
'; + if ReplaceText <> '' then + ReplaceText := '' + ReplaceText + + '
'; end; + FDTable1.Open; + FDTable1.Refresh; + end; end; function TWebModule1.mente: Boolean; +var + s: string; begin - if DataModule1.FDTable3.FieldByName('mente').AsBoolean = true then + if FDTable3.FieldByName('mente').AsInteger = 1 then begin + s := Request.QueryFields.Values['db']; + if s <> '' then + s := '?db=' + s; result := true; Response.Content := '


‚½‚¾‚¢‚܃ƒ“ƒeƒiƒ“ƒX’†‚Å‚·^_^

' + - '

ŠÇ—ŽÒ—pƒƒOƒCƒ“' + Format('

ŠÇ—ŽÒ—pƒƒOƒCƒ“', + [Request.ScriptName, s]); end else result := false; @@ -436,7 +528,7 @@ procedure TWebModule1.pages(count: Integer; var page: Integer); var max: Integer; begin - max := DataModule1.FDTable3.FieldByName('count').AsInteger; + max := FDTable3.FieldByName('count').AsInteger; if (page > -1) and (count < max * (page - 1)) then begin page := (count div max) + 1; @@ -446,12 +538,12 @@ begin case page of - 1: begin - DataModule1.FDTable2.Last; - DataModule1.FDTable2.MoveBy(1 - max); + FDTable2.Last; + FDTable2.MoveBy(1 - max); end; else - DataModule1.FDTable2.First; - DataModule1.FDTable2.MoveBy(max * (page - 1)); + FDTable2.First; + FDTable2.MoveBy(max * (page - 1)); end; end; @@ -460,6 +552,8 @@ procedure TWebModule1.mailHTMLTag(Sender: TObject; Tag: TTag; begin if TagString = 'pr' then ReplaceText := promotion + else if TagString = 'uri' then + ReplaceText := Request.ScriptName else if TagString = 'content' then ReplaceText := articles.Content else if TagString = 'query' then @@ -468,20 +562,46 @@ begin ReplaceText := Request.QueryFields.Values['num']; end; +function TWebModule1.scan(text: string): string; +var + reg: TRegEx; + coll: TMatchCollection; + i, j: Integer; + s, t, str: string; +begin + i := Request.QueryFields.Values['db'].ToInteger; + s := Request.ScriptName; + text := TNetEncoding.HTML.Encode(text); + str := TNetEncoding.HTML.Encode('>>'); + reg := TRegEx.Create(str + '(\d+)'); + coll := reg.Matches(text); + for j := coll.count - 1 downto 0 do + begin + Delete(text, coll[j].index, coll[j].Length); + t := Copy(coll[j].Value, Length(str) + 1, coll[j].Length); + result := Format + ('>>%s', + [s, i, t, s, i, t, t]); + Insert(result, text, coll[j].index); + end; + result := text; +end; + procedure TWebModule1.searchHTMLTag(Sender: TObject; Tag: TTag; const TagString: string; TagParams: TStrings; var ReplaceText: string); var s: TStringList; + str: string; procedure sub; var i: Integer; j: Integer; label jump; begin - DataModule1.FDTable2.First; - while DataModule1.FDTable2.Eof = false do + FDTable2.First; + while FDTable2.Eof = false do begin - s.Text := DataModule1.FDTable2.FieldByName('raw').AsString; + s.text := FDTable2.FieldByName('raw').AsString; ss.DelimitedText := Request.ContentFields.Values['word1']; for j := 0 to ss.count - 1 do for i := 0 to s.count - 1 do @@ -504,13 +624,23 @@ var else if i = s.count - 1 then goto jump; jump: - DataModule1.FDTable2.Next; + FDTable2.Next; end; end; begin if TagString = 'pr' then ReplaceText := promotion + else if TagString = 'uri' then + ReplaceText := Request.ScriptName + else if TagString = 'select' then + begin + str := Request.QueryFields.Values['db']; + if str = '' then + ReplaceText := Request.ScriptName + '/' + else + ReplaceText := Request.ScriptName + '/index?db=' + str; + end else if (Request.MethodType = mtPost) and (TagString = 'items') then begin if Request.ContentFields.Values['type'] = 'OR' then @@ -524,11 +654,11 @@ begin ss.StrictDelimiter := false; if Request.QueryFields.Values['db'] = '' then begin - DataModule1.FDTable1.First; - while DataModule1.FDTable1.Eof = false do + FDTable1.First; + while FDTable1.Eof = false do begin sub; - DataModule1.FDTable1.Next; + FDTable1.Next; end; end else @@ -545,20 +675,17 @@ begin ReplaceText := '?' + ReplaceText; end else if TagString = 'css' then - ReplaceText := css2.Content; + ReplaceText := css2.Content + else if TagString = 'dbnum' then + ReplaceText := Request.QueryFields.Values['dbnum']; end; procedure TWebModule1.setLastArticle; begin - { - if isInfo(false) = true then - DataModule1.FDTable2.First - else - } - DataModule1.FDTable2.Last; + FDTable2.Last; end; -procedure TWebModule1.strsCheck(var error: string; var list: TStringList); +procedure TWebModule1.strsCheck(var Error: string; list: TStringList); var s: TStringList; i, j: Integer; @@ -567,28 +694,34 @@ begin x := false; s := TStringList.Create; try - s.DelimitedText := DataModule1.FDTable3.FieldByName('ng').AsString; + s.DelimitedText := FDTable3.FieldByName('ng').AsString; for i := 0 to s.count - 1 do for j := 0 to list.count - 1 do - begin if Pos(s[i], list[j]) > 0 then + begin x := true; - list[j] := '

' + list[j]; - end; + break; + end; + for i := 0 to list.count - 1 do + list[i] := '

' + scan(list[i]); finally s.Free; end; if x = true then - error := error + '

‹ÖŽ~Œê‹å‚ªŠÜ‚Ü‚ê‚Ä‚¢‚Ü‚·.'; + Error := Error + '

‹ÖŽ~Œê‹å‚ªŠÜ‚Ü‚ê‚Ä‚¢‚Ü‚·.'; end; procedure TWebModule1.tiHTMLTag(Sender: TObject; Tag: TTag; const TagString: string; TagParams: TStrings; var ReplaceText: string); begin - if TagString = 'count' then - ReplaceText := DataModule1.FDTable2.FieldCount.ToString + if TagString = 'uri' then + ReplaceText := Request.ScriptName + else if TagString = 'count' then + ReplaceText := FDTable2.RecordCount.ToString else if TagString = 'database' then - ReplaceText := DataModule1.FDTable1.FieldByName('database').AsString; + ReplaceText := FDTable1.FieldByName('database').AsString + else if TagString = 'date' then + ReplaceText := FDQuery1.FieldByName('max(date)').AsString; end; procedure TWebModule1.titleHTMLTag(Sender: TObject; Tag: TTag; @@ -596,19 +729,21 @@ procedure TWebModule1.titleHTMLTag(Sender: TObject; Tag: TTag; begin if TagString = 'pr' then ReplaceText := promotion + else if TagString = 'uri' then + ReplaceText := Request.ScriptName else if TagString = 'js' then ReplaceText := detail(TagString, TagParams.Values['id']) else if TagString = 'main' then - with DataModule1.FDTable1 do + begin + FDQuery1.Open; + while FDQuery1.Eof = false do begin - First; - while Eof = false do - begin - setLastArticle; - ReplaceText := ReplaceText + ti.Content; - Next; - end; + FDTable1.Locate('dbnum', FDQuery1.FieldByName('dbnum').AsInteger); + ReplaceText := ReplaceText + ti.Content; + FDQuery1.Next; end; + FDQuery1.Close; + end; end; procedure TWebModule1.topHTMLTag(Sender: TObject; Tag: TTag; @@ -619,49 +754,69 @@ var begin if TagString = 'pr' then ReplaceText := promotion + else if TagString = 'uri' then + ReplaceText := Request.ScriptName else if TagString = 'list' then begin - i := DataModule1.FDTable3.FieldByName('info').AsInteger; + i := FDTable3.FieldByName('info').AsInteger; for k := 0 to tcnt do begin - if DataModule1.FDTable1.Eof = true then + if FDTable1.Eof = true then break; t := ''; - j := DataModule1.FDTable1.FieldByName('dbnum').AsInteger; - s := DataModule1.FDTable1.FieldByName('database').AsString; + j := FDTable1.FieldByName('dbnum').AsInteger; + s := FDTable1.FieldByName('database').AsString; if (i = j) or (s = 'master') then begin - DataModule1.FDTable1.Next; + FDTable1.Next; continue; end; - DataModule1.FDTable2.Last; - if (Now - DataModule1.FDTable2.FieldByName('date').AsDateTime < 1) and - (DataModule1.FDTable2.RecordCount > 0) then + FDTable2.Last; + if (Now - FDTable2.FieldByName('date').AsDateTime < 1) and + (FDTable2.RecordCount > 0) then t := 'background-color:aqua;'; - if DataModule1.FDTable2.RecordCount >= 10 * - DataModule1.FDTable3.FieldByName('count').AsInteger then + if FDTable2.RecordCount >= 10 * FDTable3.FieldByName('count').AsInteger + then t := t + 'color:red;'; if t <> '' then t := ' style=' + t; ReplaceText := ReplaceText + - Format('

%s

', - [t, j, s]); - DataModule1.FDTable1.Next; + Format('

%s

', + [t, Request.ScriptName, j, s]); + FDTable1.Next; end; + ReplaceText := + ''; end else if TagString = 'info' then - ReplaceText := DataModule1.FDTable1.Lookup('dbnum', - DataModule1.FDTable3.FieldByName('info').AsInteger, 'database') + ReplaceText := FDTable1.Lookup('dbnum', FDTable3.FieldByName('info') + .AsInteger, 'database') else if TagString = 'dbnum' then - ReplaceText := DataModule1.FDTable3.FieldByName('info').AsString + ReplaceText := FDTable3.FieldByName('info').AsString else if (TagString = 'css') or (TagString = 'js') then ReplaceText := detail(TagString, TagParams.Values['id']) else if TagString = 'slide' then begin - for i := 1 to (DataModule1.FDTable1.RecordCount div tcnt) + 1 do + s := ' active'; + for i := 1 to (FDTable1.RecordCount div tcnt) + 1 do + begin + ReplaceText := ReplaceText + + Format(''; + s := ''; + end; + end + else if TagString = 'indicator' then + begin + s := ' class="active"'; + for i := 0 to (FDTable1.RecordCount div tcnt) do + begin ReplaceText := ReplaceText + - '
<#list>
'; + Format('
  • ', [i, s]); + s := ''; + end; end; end; @@ -673,7 +828,7 @@ var match: TMatch; begin j := 0; - DataModule1.FDTable2.RecNo := admin.Tag; + FDTable1.Locate('dbnum', Request.QueryFields.Values['db']); for i := 0 to Request.ContentFields.count - 1 do begin reg := TRegEx.Create('\d+'); @@ -683,8 +838,8 @@ begin k := match.Value.ToInteger - j - 1; j := match.Value.ToInteger; for m := 1 to k do - DataModule1.FDTable2.Next; - DataModule1.FDTable2.Delete; + FDTable2.Next; + FDTable2.Delete; end; end; WebModule1adminAction(nil, Request, Response, Handled); @@ -702,26 +857,26 @@ begin WebModule1loginAction(nil, Request, Response, Handled); Exit; end; - admin.MaxRows := DataModule1.FDTable3.FieldByName('count').AsInteger; + admin.MaxRows := FDTable3.FieldByName('count').AsInteger; t := Request.QueryFields.Values['db']; if t <> '' then - DataModule1.FDTable1.Locate('dbnum', t, []); + FDTable1.Locate('dbnum', t, []); s := Request.QueryFields.Values['num']; i := StrToIntDef(s, -1); - pages(DataModule1.FDTable2.RecordCount, i); + pages(FDTable2.RecordCount, i); index.Tag := i; tagstr := '/admin'; Self.Tag := Integer(@tagstr); - admin.header.Text := adhead.Content; + admin.header.text := adhead.Content; admin.footer.Clear; admin.footer.Add (''); admin.footer.Add(footer.Content); if t <> '' then t := '?db=' + t; - admin.footer.Add('

    –ß‚é'); - admin.Tag := DataModule1.FDTable2.RecNo; + admin.footer.Add + (Format('

    –ß‚é', + [Request.ScriptName, t])); Response.ContentType := 'text/html;charset=utf-8'; Response.Content := admin.Content; end; @@ -730,14 +885,18 @@ procedure TWebModule1.WebModule1adminsetAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); var s: string; + i: Integer; begin s := Request.ContentFields.Values['pass']; - with DataModule1.FDTable3 do + with FDTable3 do begin Edit; - FieldByName('mente').AsBoolean := Request.ContentFields.Values - ['mente'] = 'on'; - if s <> '' then + if Request.ContentFields.Values['mente'] = 'on' then + i := 1 + else + i := 0; + FieldByName('mente').AsInteger := i; + if (s <> '') and (s = Request.ContentFields.Values['pass2']) then begin s := hash(s); FieldByName('password').AsString := hash(s); @@ -760,19 +919,20 @@ var num1, num2, i: Integer; s: string; begin - num1 := DataModule1.FDTable1.FieldByName('dbnum').AsInteger; + num1 := Request.QueryFields.Values['db'].ToInteger; num2 := StrToIntDef(Request.QueryFields.Values['num'], -1); if num2 = -1 then - num1 := -1; + Exit; if Request.MethodType = mtGet then begin - DataModule1.FDTable2.Locate('number', num2, []); + FDTable1.Locate('dbnum', num1); + FDTable2.Locate('number', num2); Response.ContentType := 'text/html;charset=utf-8'; Response.Content := mail.Content; end else begin - with DataModule1.FDTable4 do + with FDTable4 do begin Last; i := FieldByName('id').AsInteger + 1; @@ -781,11 +941,7 @@ begin s := '(No Comment)'; AppendRecord([i, num1, num2, Now, s]); end; - if num1 > -1 then - Response.SendRedirect(Format('/index?db=%d&num=%d#%d', - [num1, num2, num2])) - else - Response.SendRedirect('/top'); + WebModule1jumpAction(nil, Request, Response, Handled); end; end; @@ -800,7 +956,7 @@ begin Exit; num := s.ToInteger; s := hash(Request.ContentFields.Values['password']); - with DataModule1.FDTable2 do + with FDTable2 do if Locate('number;pass', VarArrayOf([num, s])) = true then begin Edit; @@ -839,9 +995,9 @@ begin if Request.MethodType = mtPost then begin s := Request.ContentFields.Values['help']; - DataModule1.FDTable4.Last; - k := DataModule1.FDTable4.FieldByName('id').AsInteger + 1; - DataModule1.FDTable4.AppendRecord([k, -1, -1, Now, s]); + FDTable4.Last; + k := FDTable4.FieldByName('id').AsInteger + 1; + FDTable4.AppendRecord([k, -1, -1, Now, s]); help.Tag := 1; end else @@ -853,18 +1009,19 @@ procedure TWebModule1.WebModule1imgAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); var s: string; - res: TResourceStream; + p: TBytes; + res: TMemoryStream; begin - with DataModule1.FDTable5 do + with FDTable5 do begin - s := Request.ContentFields.Values['name']; + s := Request.QueryFields.Values['name']; Response.ContentType := 'image/jpeg'; if Locate('name', s) = true then - Response.ContentStream := CreateBlobStream(FieldByName('source'), bmRead) - else if s = 'sprites.png' then begin - Response.ContentType := 'image/png'; - res := TResourceStream.Create(HInstance, 'PngImage_1', RT_RCDATA); + s := FieldByName('source').AsString; + p := TNetEncoding.Base64.DecodeStringToBytes(s); + res := TMemoryStream.Create; + res.WriteBuffer(p, Length(p)); Response.ContentStream := res; end else @@ -878,47 +1035,47 @@ var i: Integer; s: string; begin + Response.ContentType := 'text/html; charset="utf-8"'; + if mente = true then + Exit; s := Request.QueryFields.Values['db']; if s <> '' then - DataModule1.FDTable1.Locate('dbnum', s, []); + FDTable1.Locate('dbnum', s, []); i := StrToIntDef(Request.QueryFields.Values['num'], -1); isInfo; - pages(DataModule1.FDTable2.RecordCount, i); + pages(FDTable2.RecordCount, i); index.Tag := i; tagstr := '/index'; Self.Tag := Integer(@tagstr); - Response.ContentType := 'text/html; charset="utf-8"'; - if mente = false then - Response.Content := index.Content; + Response.Content := index.Content; end; procedure TWebModule1.WebModule1jumpAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); var DB, s: string; - page: Integer; + i: Integer; begin DB := Request.QueryFields.Values['db']; - s := Request.ContentFields.Values['num']; - if DB <> '' then - DataModule1.FDTable1.Locate('dbnum', DB.ToInteger, []); - DataModule1.FDTable2.Locate('number', s.ToInteger, []); - page := 10; - pages(DataModule1.FDTable2.RecNo, page); - Response.SendRedirect(Format('/index?db=%s&num=%d#%s', [DB, page, s])); + s := Request.QueryFields.Values['num']; + if s = '' then + s := Request.ContentFields.Values['num']; + i := 10; + pages(s.ToInteger, i); + Response.SendRedirect(Format('%s/index?db=%s&num=%d#%s', [Request.ScriptName, + DB, i, s])); end; procedure TWebModule1.WebModule1linkAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); var - num: Integer; s: string; begin - s := Request.QueryFields.Values['num']; - if s = '' then + s := Request.QueryFields.Values['db']; + if (s = '') or (FDTable1.Locate('dbnum', s.ToInteger) = false) then Exit; - num := s.ToInteger; - if DataModule1.FDTable2.Locate('number', num, []) = true then + s := Request.QueryFields.Values['num']; + if (s <> '') and (FDTable2.Locate('number', s.ToInteger) = true) then begin Response.ContentType := 'text/html;charset=utf-8'; Response.Content := articles.Content; @@ -930,7 +1087,7 @@ procedure TWebModule1.WebModule1loginAction(Sender: TObject; var v: Variant; i: Integer; - s: string; + s, t: string; begin if Request.MethodType = mtGet then begin @@ -939,27 +1096,31 @@ begin Exit; end; s := Request.ContentFields.Values['record']; - v := DataModule1.FDTable1.Lookup('database', s, 'dbnum'); - if VarIsNull(v) = false then + v := FDTable1.Lookup('database', s, 'dbnum'); + t := hash(Request.ContentFields.Values['password']); + if (VarIsNull(v) = false) and (hash(t) = FDTable3.FieldByName('password') + .AsString) then begin with Response.Cookies.Add do begin Name := 'user'; - Value := hash(Request.ContentFields.Values['password']); + Value := t; Expires := Now + 14; // Secure := true; end; i := v; if s = 'master' then - Response.SendRedirect('/master') + Response.SendRedirect(Request.ScriptName + '/master') else - Response.SendRedirect('/admin?db=' + i.ToString); + Response.SendRedirect(Request.ScriptName + '/admin?db=' + i.ToString); end - else + else if VarIsNull(v) = false then begin - Response.ContentType := 'text/html;charset=utf-8'; - Response.Content := login.Content; - end; + t := v; + Response.SendRedirect(Request.ScriptName + '/login?db=' + t); + end + else + Response.SendRedirect(Request.ScriptName + '/login'); end; procedure TWebModule1.WebModule1logoutAction(Sender: TObject; @@ -976,14 +1137,13 @@ begin end; s := Request.QueryFields.Values['db']; i := StrToIntDef(s, -1); - x := DataModule1.FDTable1.Locate('dbnum', i); - if (x = true) and (DataModule1.FDTable1.FieldByName('database') - .AsString = 'master') then + x := FDTable1.Locate('dbnum', i); + if (x = true) and (FDTable1.FieldByName('database').AsString = 'master') then x := false; if x = false then - Response.SendRedirect('/') + Response.SendRedirect(Request.ScriptName + '/') else - Response.SendRedirect('/index?db=' + s); + Response.SendRedirect(Request.ScriptName + '/index?db=' + s); end; procedure TWebModule1.WebModule1masterAction(Sender: TObject; @@ -994,42 +1154,38 @@ var begin if loginCheck = false then begin - with DataModule1.FDTable1 do - if Locate('database', 'master') = false then - begin - Last; - i := FieldByName('dbnum').AsInteger + 1; - AppendRecord([i, 'master']); - end; + Request.QueryFields.Values['db'] := FDTable1.Lookup('database', + 'master', 'dbnum'); WebModule1loginAction(nil, Request, Response, Handled); Exit; end; if Request.MethodType = mtPost then begin s := Request.ContentFields.Values['delete']; - if s = 'all' then - with DataModule1.FDTable4 do - while (Bof = false) or (Eof = false) do + with FDTable4 do + if s = 'all' then + while not((Bof = true) and (Eof = true)) do Delete - else - begin - DataModule1.FDTable4.First; - while DataModule1.FDTable4.Eof = false do + else begin - i := DataModule1.FDTable4.FieldByName('dbname').AsInteger; - if DataModule1.FDTable1.Locate('dbnum', i) = true then + First; + while Eof = false do begin - i := DataModule1.FDTable4.FieldByName('posnum').AsInteger; - if DataModule1.FDTable2.Locate('number', i) = false then - DataModule1.FDTable4.Delete + i := FieldByName('dbname').AsInteger; + if FDTable1.Locate('dbnum', i) = true then + begin + i := FieldByName('posnum').AsInteger; + if FDTable2.Locate('number', i) = false then + Delete + else + Next; + end else - DataModule1.FDTable4.Next; - end - else - DataModule1.FDTable4.Delete; + Delete; + end; end; - end; end; + FDTable4.First; Response.ContentType := 'text/html;charset=utf-8'; Response.Content := master.Content; end; @@ -1038,88 +1194,82 @@ procedure TWebModule1.WebModule1registAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); var number, i: Integer; - title, na, raw, pass, kotoba, error: string; + title, na, raw, pass, kotoba, Error, temp: string; comment: TStringList; - function scan(Text: string): string; - var - reg: TRegEx; - coll: TMatchCollection; - j: Integer; - s, t: string; + review: Boolean; +begin + Error := ''; + temp := Request.ContentFields.Values['preview']; + if temp = '' then begin - Text := TNetEncoding.HTML.Encode(Text); - s := TNetEncoding.HTML.Encode('>>'); - reg := TRegEx.Create(s + '(\d+)'); - coll := reg.Matches(Text); - for j := coll.count - 1 downto 0 do + kotoba := Request.ContentFields.Values['aikotoba']; + if kotoba <> '‚°‚ñ‚«' then + Error := Error + '

    ‡Œ¾—t‚ª‚¿‚ª‚¢‚Ü‚·.'; + with Request.ContentFields do begin - Delete(Text, coll[j].index, coll[j].Length); - t := Copy(coll[j].Value, Length(s) + 1, coll[j].Length); - result := Format - ('>>%s', - [t, t, t]); - Insert(result, Text, coll[j].index); + title := Values['title']; + na := Values['name']; + raw := Values['comment']; + Values['comment'] := ''; + pass := hash(Values['password']); end; - result := Text; - end; - -begin - kotoba := Request.ContentFields.Values['aikotoba']; - error := ''; - if kotoba <> '‚°‚ñ‚«' then - error := error + '

    ‡Œ¾—t‚ª‚¿‚ª‚¢‚Ü‚·.'; - setLastArticle; - number := DataModule1.FDTable2.FieldByName('number').AsInteger + 1; - with Request.ContentFields do - begin - title := Values['title']; - na := Values['name']; - raw := Values['comment']; - pass := hash(Values['password']); - end; - if title = '' then - title := 'ƒ^ƒCƒgƒ‹‚È‚µ.'; - with Response.Cookies.Add do - begin - Name := 'name'; - if na = '' then - Value := '’N‚©‚³‚ñ.' - else - Value := na; - Expires := Now + 14; - end; - if error = '' then + if title = '' then + title := 'ƒ^ƒCƒgƒ‹‚È‚µ.'; with Response.Cookies.Add do begin - Name := 'aikotoba'; - Value := kotoba; + Name := 'name'; + if na = '' then + Value := '’N‚©‚³‚ñ.' + else + Value := na; Expires := Now + 14; end; - comment := TStringList.Create; - try - comment.Text := raw; - strsCheck(error, comment); - Request.ContentFields.Values['raw'] := raw; - if error <> '' then - Request.ContentFields.Values['preview'] := '

    ' + - error + '
    ' - else if Request.ContentFields.Values['show'] = 'true' then - begin - error := '

    ««ƒvƒŒƒrƒ…[««

    ' + - comment.Text; - Request.ContentFields.Values['preview'] := error; - Request.ContentFields.Values['show'] := 'false'; - end + if Error = '' then + with Response.Cookies.Add do + begin + Name := 'aikotoba'; + Value := kotoba; + Expires := Now + 14; + end; + comment := TStringList.Create; + try + comment.text := raw; + strsCheck(Error, comment); + temp := comment.text; + finally + comment.Free; + end; + review := false; + end + else + review := true; + Request.ContentFields.Values['raw'] := raw; + if Error <> '' then + Request.ContentFields.Values['preview'] := '

    ' + + Error + '
    ' + else if Request.ContentFields.Values['show'] = 'true' then + begin + if review = false then + Error := '

    ««ƒvƒŒƒrƒ…[««

    ' + temp + else + Error := temp; + Request.ContentFields.Values['preview'] := Error; + Request.ContentFields.Values['show'] := 'false'; + end + else + begin + i := StrToIntDef(Request.QueryFields.Values['db'], -1); + if FDTable1.Locate('dbnum', i) = false then + Response.SendRedirect(Request.ScriptName + '/') else begin - i := DataModule1.FDTable1.FieldByName('dbnum').AsInteger; - DataModule1.FDTable2.AppendRecord([i, number, title, na, comment.Text, - raw, Now, pass]); - Response.SendRedirect('index?db=' + i.ToString + '#article'); - Exit; + setLastArticle; + number := FDTable2.FieldByName('number').AsInteger + 1; + FDTable2.AppendRecord([i, number, title, na, temp, raw, Now, pass]); + Response.SendRedirect(Request.ScriptName + '/index?db=' + i.ToString + + '#article'); end; - finally - comment.Free; + Exit; end; WebModule1indexpageAction(nil, Request, Response, Handled); end; @@ -1142,53 +1292,66 @@ procedure TWebModule1.WebModule1topAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); begin Response.ContentType := 'text/html;charset=utf-8'; - DataModule1.FDTable1.First; + FDTable1.First; if mente = false then Response.Content := top.ContentFromString(top.Content); end; +procedure TWebModule1.WebModule1usrdelAction(Sender: TObject; + Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); +var + s, t, p: string; +begin + s := Request.QueryFields.Values['db']; + t := Request.ContentFields.Values['num']; + p := Request.ContentFields.Values['password']; + if FDTable2.Locate('dbnum;number;pass', + VarArrayOf([s.ToInteger, t.ToInteger, p])) = true then + FDTable2.Delete; + WebModule1indexpageAction(nil, Request, Response, Handled); +end; + procedure TWebModule1.WebModuleCreate(Sender: TObject); var i: Integer; - a: Variant; s: string; begin - with DataModule1 do - begin - if FDTable1.Exists = false then - FDTable1.CreateTable; - if FDTable2.Exists = false then - FDTable2.CreateTable; - if FDTable3.Exists = false then - FDTable3.CreateTable; - if FDTable4.Exists = false then - FDTable4.CreateTable; - if FDTable5.Exists = false then - FDTable5.CreateTable; - FDTable1.Open; - FDTable2.Open; - FDTable3.Open; - FDTable4.Open; - FDTable5.Open; - FDTable1.Refresh; - FDTable3.Refresh; - FDTable5.Refresh; - end; - if DataModule1.FDTable1.Bof and DataModule1.FDTable1.Eof then + if FDTable1.Exists = false then + FDTable1.CreateTable; + if FDTable2.Exists = false then + FDTable2.CreateTable; + if FDTable3.Exists = false then + FDTable3.CreateTable; + if FDTable4.Exists = false then + FDTable4.CreateTable; + if FDTable5.Exists = false then + FDTable5.CreateTable; + FDTable1.Open; + FDTable2.Open; + FDTable3.Open; + FDTable4.Open; + FDTable5.Open; + FDTable1.Refresh; + FDTable3.Refresh; + FDTable4.Refresh; + FDTable5.Refresh; + if (FDTable1.Bof = true) and (FDTable1.Eof = true) then begin - DataModule1.FDTable1.AppendRecord([0, 'info']); + FDTable1.AppendRecord([0, 'info']); + FDTable1.AppendRecord([1, 'master']); for i := 1 to 10 do - DataModule1.FDTable1.AppendRecord([i, 'ŒfŽ¦”Â' + i.ToString]); + FDTable1.AppendRecord([i + 1, 'ŒfŽ¦”Â' + i.ToString]); end; - if DataModule1.FDTable3.Bof and DataModule1.FDTable3.Eof then + if (FDTable3.Bof = true) and (FDTable3.Eof = true) then begin - a := DataModule1.FDTable1.Lookup('database', 'info', 'dbnum'); + i := FDTable1.Lookup('database', 'info', 'dbnum'); s := 'ˆ¢•Û,”nŽ­,Ž€‚Ë'; - DataModule1.FDTable3.AppendRecord + FDTable3.AppendRecord (['‚Æ‚é‚ˁ`‚Ǎ†', '

    ‚Æ‚é‚ˁ`‚Ǎ†

    ', - false, a, 30, hash(hash('admin')), s]); + 0, i, 30, hash(hash('admin')), s]); end; + admin.MaxRows := FDTable3.FieldByName('count').AsInteger; end; end.