5 uses System.SysUtils, System.Classes, Web.HTTPApp, Web.DSProd, Web.HTTPProd,
6 Web.DBWeb, System.Variants, System.NetEncoding, System.RegularExpressions,
7 Data.DB, Web.DBXpressWeb;
10 TTWebModule1 = class(TWebModule)
11 articles: TDataSetPageProducer;
12 index: TDataSetPageProducer;
13 admin: TDataSetTableProducer;
14 search: TPageProducer;
15 items: TDataSetPageProducer;
18 master: TPageProducer;
19 alert: TDataSetPageProducer;
20 footer: TDataSetPageProducer;
26 header: TDataSetPageProducer;
27 login: TDataSetPageProducer;
32 adhead: TPageProducer;
35 ti: TDataSetPageProducer;
36 procedure indexHTMLTag(Sender: TObject; Tag: TTag; const TagString: string;
37 TagParams: TStrings; var ReplaceText: string);
38 procedure TWebModule1indexpageAction(Sender: TObject; Request: TWebRequest;
39 Response: TWebResponse; var Handled: Boolean);
40 procedure TWebModule1registAction(Sender: TObject; Request: TWebRequest;
41 Response: TWebResponse; var Handled: Boolean);
42 procedure WebModuleCreate(Sender: TObject);
43 procedure TWebModule1adminAction(Sender: TObject; Request: TWebRequest;
44 Response: TWebResponse; var Handled: Boolean);
45 procedure TWebModule1topAction(Sender: TObject; Request: TWebRequest;
46 Response: TWebResponse; var Handled: Boolean);
47 procedure itemsHTMLTag(Sender: TObject; Tag: TTag; const TagString: string;
48 TagParams: TStrings; var ReplaceText: string);
49 procedure topHTMLTag(Sender: TObject; Tag: TTag; const TagString: string;
50 TagParams: TStrings; var ReplaceText: string);
51 procedure TWebModule1searchAction(Sender: TObject; Request: TWebRequest;
52 Response: TWebResponse; var Handled: Boolean);
53 procedure TWebModule1helpAction(Sender: TObject; Request: TWebRequest;
54 Response: TWebResponse; var Handled: Boolean);
55 procedure searchHTMLTag(Sender: TObject; Tag: TTag; const TagString: string;
56 TagParams: TStrings; var ReplaceText: string);
57 procedure masterHTMLTag(Sender: TObject; Tag: TTag; const TagString: string;
58 TagParams: TStrings; var ReplaceText: string);
59 procedure articlesHTMLTag(Sender: TObject; Tag: TTag;
60 const TagString: string; TagParams: TStrings; var ReplaceText: string);
61 procedure footerHTMLTag(Sender: TObject; Tag: TTag; const TagString: string;
62 TagParams: TStrings; var ReplaceText: string);
63 procedure TWebModule1alertAction(Sender: TObject; Request: TWebRequest;
64 Response: TWebResponse; var Handled: Boolean);
65 procedure TWebModule1masterAction(Sender: TObject; Request: TWebRequest;
66 Response: TWebResponse; var Handled: Boolean);
67 procedure mailHTMLTag(Sender: TObject; Tag: TTag; const TagString: string;
68 TagParams: TStrings; var ReplaceText: string);
69 procedure alertHTMLTag(Sender: TObject; Tag: TTag; const TagString: string;
70 TagParams: TStrings; var ReplaceText: string);
71 procedure TWebModule1deleteAction(Sender: TObject; Request: TWebRequest;
72 Response: TWebResponse; var Handled: Boolean);
73 procedure TWebModule1jumpAction(Sender: TObject; Request: TWebRequest;
74 Response: TWebResponse; var Handled: Boolean);
75 procedure TWebModule1linkAction(Sender: TObject; Request: TWebRequest;
76 Response: TWebResponse; var Handled: Boolean);
77 procedure headerHTMLTag(Sender: TObject; Tag: TTag; const TagString: string;
78 TagParams: TStrings; var ReplaceText: string);
79 procedure adminFormatCell(Sender: TObject; CellRow, CellColumn: Integer;
80 var BgColor: THTMLBgColor; var Align: THTMLAlign; var VAlign: THTMLVAlign;
81 var CustomAttrs, CellData: string);
82 procedure TWebModule1admdelAction(Sender: TObject; Request: TWebRequest;
83 Response: TWebResponse; var Handled: Boolean);
84 procedure TWebModule1loginAction(Sender: TObject; Request: TWebRequest;
85 Response: TWebResponse; var Handled: Boolean);
86 procedure TWebModule1adminsetAction(Sender: TObject; Request: TWebRequest;
87 Response: TWebResponse; var Handled: Boolean);
88 procedure adheadHTMLTag(Sender: TObject; Tag: TTag; const TagString: string;
89 TagParams: TStrings; var ReplaceText: string);
90 procedure TWebModule1logoutAction(Sender: TObject; Request: TWebRequest;
91 Response: TWebResponse; var Handled: Boolean);
92 procedure TWebModule1imgAction(Sender: TObject; Request: TWebRequest;
93 Response: TWebResponse; var Handled: Boolean);
94 procedure TWebModule1fileAction(Sender: TObject; Request: TWebRequest;
95 Response: TWebResponse; var Handled: Boolean);
96 procedure titleHTMLTag(Sender: TObject; Tag: TTag; const TagString: string;
97 TagParams: TStrings; var ReplaceText: string);
98 procedure TWebModule1titleAction(Sender: TObject; Request: TWebRequest;
99 Response: TWebResponse; var Handled: Boolean);
100 procedure tiHTMLTag(Sender: TObject; Tag: TTag; const TagString: string;
101 TagParams: TStrings; var ReplaceText: string);
105 procedure pages(count: Integer; var page: Integer);
106 function hash(str: string): string;
107 function mente: Boolean;
108 function detail(ts, pid: string): string;
114 WebModuleClass: TComponentClass = TTWebModule1;
118 { %CLASSGROUP 'Vcl.Controls.TControl' }
120 uses Unit1, IdHashSHA, IdGlobal, IdHash, IdHashMessageDigest;
124 procedure TTWebModule1.adheadHTMLTag(Sender: TObject; Tag: TTag;
125 const TagString: string; TagParams: TStrings; var ReplaceText: string);
127 if (TagString = 'mente') and (DataModule1.FDTable3.FieldByName('mente')
128 .AsBoolean = true) then
129 ReplaceText := 'checked'
130 else if TagString = 'password' then
131 ReplaceText := Request.CookieFields.Values['user'];
134 procedure TTWebModule1.adminFormatCell(Sender: TObject;
135 CellRow, CellColumn: Integer; var BgColor: THTMLBgColor;
136 var Align: THTMLAlign; var VAlign: THTMLVAlign;
137 var CustomAttrs, CellData: string);
139 if (CellColumn = 0) and (CellRow > 0) then
140 CellData := Format('<input name=check%d type=checkbox>', [CellRow]);
143 procedure TTWebModule1.alertHTMLTag(Sender: TObject; Tag: TTag;
144 const TagString: string; TagParams: TStrings; var ReplaceText: string);
149 if TagString = 'article' then
153 FDTable1.Locate('dbnum', FDTable4.FieldByName('dbname').AsInteger);
154 FDTable2.Locate('number', FDTable4.FieldByName('posnum').AsInteger);
156 s := TStringList.Create;
158 s.Text := articles.Content;
161 for i := s.count - 1 downto 0 do
162 if Copy(s[i], 1, 18) = '<section id=master' then
167 ReplaceText := s.Text;
172 else if TagString = 'request' then
173 ReplaceText := DataModule1.FDTable4.FieldByName('request').AsString;
176 procedure TTWebModule1.articlesHTMLTag(Sender: TObject; Tag: TTag;
177 const TagString: string; TagParams: TStrings; var ReplaceText: string);
179 if TagString = 'comment' then
180 ReplaceText := DataModule1.FDTable2.FieldByName('comment').AsString;
183 function TTWebModule1.detail(ts, pid: string): string;
187 for i := 0 to ComponentCount - 1 do
188 if Components[i].Name = ts + pid then
189 result := (Components[i] as TPageProducer).Content;
192 procedure TTWebModule1.footerHTMLTag(Sender: TObject; Tag: TTag;
193 const TagString: string; TagParams: TStrings; var ReplaceText: string);
197 if TagString = 'link' then
200 if i = index.Tag then
201 ReplaceText := ReplaceText + ' ' + i.ToString + ' '
203 ReplaceText := ReplaceText +
204 Format(' <a style=text-decoration-line:none href="%s?db=%d&num=%d">%d</a> ',
205 [PString(Self.Tag)^, DataModule1.FDTable1.FieldByName('dbnum')
208 else if TagString = 'recent' then
209 if index.Tag = -1 then
210 ReplaceText := TagString
212 ReplaceText := '<a style=text-decoration-line:none href="' +
213 PString(Self.Tag)^ + '?db=' + DataModule1.FDTable1.FieldByName('dbnum')
214 .AsString + '">recent</a>';
217 function TTWebModule1.hash(str: string): string;
219 with TIdHashSHA1.Create do
222 result := HashStringAsHex(str);
229 procedure TTWebModule1.headerHTMLTag(Sender: TObject; Tag: TTag;
230 const TagString: string; TagParams: TStrings; var ReplaceText: string);
234 if TagString = 'cookie' then
236 s := TagParams.Values['param'];
237 ReplaceText := TNetEncoding.URL.Decode(Request.CookieFields.Values[s]);
239 else if (TagString = 'check') and
240 (Request.ContentFields.Values['show'] <> 'false') then
241 ReplaceText := 'checked'
242 else if TagString = 'preview' then
243 ReplaceText := Request.ContentFields.Values['preview']
244 else if TagString = 'raw' then
245 ReplaceText := Request.ContentFields.Values['raw']
246 else if TagString = 'pass' then
247 ReplaceText := Request.ContentFields.Values['password']
248 else if TagString = 'title' then
249 ReplaceText := Request.ContentFields.Values['title'];
252 procedure TTWebModule1.indexHTMLTag(Sender: TObject; Tag: TTag;
253 const TagString: string; TagParams: TStrings; var ReplaceText: string);
258 if TagString = 'article' then
260 x := DataModule1.FDTable1.FieldByName('dbnum')
261 .AsInteger = DataModule1.FDTable3.FieldByName('info').AsInteger;
262 for i := 1 to DataModule1.FDTable3.FieldByName('count').AsInteger do
264 if DataModule1.FDTable2.Eof = true then
267 ReplaceText := ReplaceText + articles.Content
269 ReplaceText := articles.Content + ReplaceText;
270 if DataModule1.FDTable2.Eof = false then
271 DataModule1.FDTable2.Next;
274 else if TagString = 'footer' then
275 ReplaceText := footer.Content
276 else if TagString = 'header' then
278 i := DataModule1.FDTable3.FieldByName('count').AsInteger;
279 if 10 * i <= DataModule1.FDTable2.RecordCount then
280 ReplaceText := '<h1>
\82±
\82ê
\88È
\8fã
\93\8a\8de
\82Å
\82«
\82Ü
\82¹
\82ñ.</h1>'
282 ReplaceText := header.Content;
284 else if (TagString = 'css') or (TagString = 'js') then
285 ReplaceText := detail(TagString, TagParams.Values['id'])
286 else if TagString = 'dbnum' then
287 ReplaceText := DataModule1.FDTable1.FieldByName('dbnum').AsString
288 else if TagString = 'database' then
289 ReplaceText := DataModule1.FDTable1.FieldByName('database').AsString;
292 procedure TTWebModule1.itemsHTMLTag(Sender: TObject; Tag: TTag;
293 const TagString: string; TagParams: TStrings; var ReplaceText: string);
299 if TagString = 'item' then
301 s := TStringList.Create;
303 s.Text := DataModule1.FDTable2.FieldByName('raw').AsString;
304 for i := 0 to s.count - 1 do
305 for j := 0 to ss.count - 1 do
306 if Pos(ss[j], s[i]) > 0 then
308 s[i] := '<p style=background-color:aqua>' + s[i]
310 s[i] := '<p style=background-color:yellow>' + s[i];
311 with DataModule1.FDTable2 do
313 i := FieldByName('dbnum').AsInteger;
314 j := FieldByName('number').AsInteger;
315 str := Request.QueryFields.Values['db'];
317 t := Format('<a href="/jump?db=%d&num=%d">[ %d-%d ]</a>',
318 [DataModule1.FDTable1.FieldByName('dbnum').AsInteger, j, i, j])
320 t := Format('<a href="/jump?db=%s&num=%d">[ %d ]</a>', [str, j, j]);
322 ReplaceText := t + s.Text;
329 procedure TTWebModule1.masterHTMLTag(Sender: TObject; Tag: TTag;
330 const TagString: string; TagParams: TStrings; var ReplaceText: string);
332 if TagString = 'request' then
333 with DataModule1.FDTable4 do
336 ReplaceText := '<table border=1 align=center>';
339 ReplaceText := ReplaceText + alert.Content;
342 ReplaceText := ReplaceText + '</table>';
346 function TTWebModule1.mente: Boolean;
348 if DataModule1.FDTable3.FieldByName('mente').AsBoolean = true then
352 '<p><br><h1 style=text-align:center>
\82½
\82¾
\82¢
\82Ü
\83\81\83\93\83e
\83i
\83\93\83X
\92\86\82Å
\82·^_^</h1>' +
353 '<p style=text-align:center><a href=/admin>
\8aÇ
\97\9d\8eÒ
\97p
\83\8d\83O
\83C
\83\93</a>'
359 procedure TTWebModule1.pages(count: Integer; var page: Integer);
363 max := DataModule1.FDTable3.FieldByName('count').AsInteger;
364 if (page > -1) and (count < max * (page - 1)) then
366 page := (count div max) + 1;
367 if count mod max = 0 then
373 DataModule1.FDTable2.Last;
374 DataModule1.FDTable2.MoveBy(1 - max);
377 DataModule1.FDTable2.First;
378 DataModule1.FDTable2.MoveBy(max * (page - 1));
382 procedure TTWebModule1.mailHTMLTag(Sender: TObject; Tag: TTag;
383 const TagString: string; TagParams: TStrings; var ReplaceText: string);
385 if TagString = 'content' then
386 ReplaceText := articles.Content
387 else if TagString = 'query' then
388 ReplaceText := '?' + Request.Query
389 else if TagString = 'number' then
390 ReplaceText := Request.QueryFields.Values['num'];
393 procedure TTWebModule1.searchHTMLTag(Sender: TObject; Tag: TTag;
394 const TagString: string; TagParams: TStrings; var ReplaceText: string);
403 DataModule1.FDTable2.First;
404 while DataModule1.FDTable2.Eof = false do
406 s.Text := DataModule1.FDTable2.FieldByName('raw').AsString;
407 ss.DelimitedText := Request.ContentFields.Values['word1'];
408 for j := 0 to ss.count - 1 do
409 for i := 0 to s.count - 1 do
410 if Pos(ss[j], s[i]) > 0 then
413 ReplaceText := ReplaceText + items.Content;
418 if j = ss.count - 1 then
420 ReplaceText := ReplaceText + items.Content;
426 else if i = s.count - 1 then
429 DataModule1.FDTable2.Next;
434 if (Request.MethodType = mtPost) and (TagString = 'items') then
436 if Request.ContentFields.Values['type'] = 'OR' then
440 s := TStringList.Create;
441 ss := TStringList.Create;
444 ss.StrictDelimiter := false;
445 if Request.QueryFields.Values['db'] = '' then
447 DataModule1.FDTable1.First;
448 while DataModule1.FDTable1.Eof = false do
451 DataModule1.FDTable1.Next;
461 else if TagString = 'query' then
463 ReplaceText := Request.Query;
464 if ReplaceText <> '' then
465 ReplaceText := '?' + ReplaceText;
467 else if TagString = 'css' then
468 ReplaceText := css2.Content;
471 procedure TTWebModule1.tiHTMLTag(Sender: TObject; Tag: TTag;
472 const TagString: string; TagParams: TStrings; var ReplaceText: string);
474 if TagString = 'count' then
476 DataModule1.FDTable1.Locate('database',
477 DataModule1.FDQuery1.FieldByName('database').AsString);
478 ReplaceText := DataModule1.FDTable2.RecordCount.ToString;
482 procedure TTWebModule1.titleHTMLTag(Sender: TObject; Tag: TTag;
483 const TagString: string; TagParams: TStrings; var ReplaceText: string);
485 if TagString = 'js' then
486 ReplaceText := detail(TagString, TagParams.Values['id'])
488 with DataModule1.FDQuery1 do
493 ReplaceText := ReplaceText + ti.Content;
500 procedure TTWebModule1.topHTMLTag(Sender: TObject; Tag: TTag;
501 const TagString: string; TagParams: TStrings; var ReplaceText: string);
506 if TagString = 'list' then
508 i := DataModule1.FDTable3.FieldByName('info').AsInteger;
509 for k := 0 to DataModule1.FDTable3.FieldByName('tcnt').AsInteger do
511 if DataModule1.FDTable1.Eof = true then
514 j := DataModule1.FDTable1.FieldByName('dbnum').AsInteger;
517 DataModule1.FDTable1.Next;
520 s := DataModule1.FDTable1.FieldByName('database').AsString;
521 DataModule1.FDTable2.Last;
522 if Now - DataModule1.FDTable2.FieldByName('date').AsDateTime < 1 then
523 t := 'background-color:aqua;';
524 if DataModule1.FDTable2.RecordCount >= 10 *
525 DataModule1.FDTable3.FieldByName('count').AsInteger then
526 t := t + 'color:red;';
529 ReplaceText := ReplaceText +
530 Format('<p><a%s target=_blank href="/index?db=%d">%s</a><br></p>',
532 DataModule1.FDTable1.Next;
535 else if TagString = 'info' then
536 ReplaceText := DataModule1.FDTable1.Lookup('dbnum',
537 DataModule1.FDTable3.FieldByName('info').AsInteger, 'database')
538 else if TagString = 'dbnum' then
539 ReplaceText := DataModule1.FDTable3.FieldByName('info').AsString
540 else if (TagString = 'css') or (TagString = 'js') then
541 ReplaceText := detail(TagString, TagParams.Values['id'])
542 else if TagString = 'slide' then
544 j := DataModule1.FDTable3.FieldByName('tcnt').AsInteger;
545 for i := 1 to (DataModule1.FDTable1.RecordCount div j) + 1 do
546 ReplaceText := ReplaceText +
547 '<div class="slide"><img src="/src?name=slide' + i.ToString +
548 '.jpg" style=float:right;height:465px><#list></div>';
552 procedure TTWebModule1.TWebModule1admdelAction(Sender: TObject;
553 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
560 DataModule1.FDTable2.RecNo := admin.Tag;
561 for i := 0 to Request.ContentFields.count - 1 do
563 reg := TRegEx.Create('\d+');
564 match := reg.match(Request.ContentFields[i]);
565 if match.Success = true then
567 k := match.Value.ToInteger - j - 1;
568 j := match.Value.ToInteger;
570 DataModule1.FDTable2.Next;
571 DataModule1.FDTable2.Delete;
574 TWebModule1adminAction(nil, Request, Response, Handled);
577 procedure TTWebModule1.TWebModule1adminAction(Sender: TObject;
578 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
583 if hash(Request.CookieFields.Values['user']) <>
584 DataModule1.FDTable3.FieldByName('password').AsString then
586 Response.SendRedirect('/login');
589 admin.MaxRows := DataModule1.FDTable3.FieldByName('count').AsInteger;
590 s := Request.QueryFields.Values['db'];
592 DataModule1.FDTable1.Locate('dbnum', s, []);
593 s := Request.QueryFields.Values['num'];
594 i := StrToIntDef(s, -1);
595 pages(DataModule1.FDTable2.RecordCount, i);
598 Self.Tag := Integer(@s);
599 i := footer.HTMLDoc.Add
600 ('<p style=text-align:center><a href="/index?db=<#dbnum>">
\96ß
\82é</a>');
601 admin.header.Text := adhead.Content;
602 if admin.Tag = 0 then
603 admin.footer.Insert(3, footer.Content)
606 admin.footer.Delete(3);
607 admin.footer.Insert(3, footer.Content);
609 admin.Tag := DataModule1.FDTable2.RecNo;
610 footer.HTMLDoc.Delete(i);
611 Response.ContentType := 'text/html;charset=utf-8';
612 Response.Content := admin.Content;
615 procedure TTWebModule1.TWebModule1adminsetAction(Sender: TObject;
616 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
620 s := Request.ContentFields.Values['pass'];
621 with DataModule1.FDTable3 do
624 FieldByName('mente').AsBoolean := Request.ContentFields.Values
626 FieldByName('password').AsString := hash(s);
629 with Response.Cookies.Add do
635 Request.CookieFields.Values['user'] := s;
636 TWebModule1adminAction(nil, Request, Response, Handled);
639 procedure TTWebModule1.TWebModule1alertAction(Sender: TObject;
640 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
642 num1, num2, i, dbnum: Integer;
644 dbnum := DataModule1.FDTable1.FieldByName('dbnum').AsInteger;
645 num1 := DataModule1.FDTable1.FieldByName('dbnum').AsInteger;
646 num2 := Request.QueryFields.Values['num'].ToInteger;
647 if Request.MethodType = mtGet then
649 DataModule1.FDTable2.Locate('number', num2, []);
650 Response.ContentType := 'text/html;charset=utf-8';
651 Response.Content := mail.Content;
654 with DataModule1.FDTable4 do
657 i := FieldByName('id').AsInteger + 1;
658 AppendRecord([i, num1, num2, Now, Request.ContentFields.Values
660 pages(DataModule1.FDTable2.RecNo, i);
661 Response.SendRedirect(Format('/index?db=%d&num=%d#%d', [dbnum, i, num2]));
665 procedure TTWebModule1.TWebModule1deleteAction(Sender: TObject;
666 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
671 s := Request.ContentFields.Values['num'];
675 s := hash(Request.ContentFields.Values['password']);
676 with DataModule1.FDTable2 do
677 if Locate('number;pass', VarArrayOf([num, s])) = true then
680 FieldByName('title').AsString := '';
681 FieldByName('name').AsString := ' - - - ';
682 FieldByName('comment').AsString := '<em>
\93\8a\8de
\8eÒ
\82É
\82æ
\82è
\8dí
\8f\9c\82³
\82ê
\82Ü
\82µ
\82½.</em>';
683 FieldByName('raw').AsString := '';
684 FieldByName('date').AsDateTime := Now;
686 TWebModule1jumpAction(nil, Request, Response, Handled);
689 TWebModule1indexpageAction(nil, Request, Response, Handled);
692 procedure TTWebModule1.TWebModule1fileAction(Sender: TObject;
693 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
697 s := Request.QueryFields.Values['type'];
699 Response.ContentType := 'text/javascript;charset=utf-8'
700 else if s = 'css' then
701 Response.ContentType := 'text/css';
702 Response.Content := detail(s, Request.QueryFields.Values['id']);
705 procedure TTWebModule1.TWebModule1helpAction(Sender: TObject;
706 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
711 Response.ContentType := 'text/html;charset=utf-8';
712 if Request.MethodType = mtPost then
714 i := DataModule1.FDTable1.FieldByName('dbnum').AsInteger;;
715 j := DataModule1.FDTable2.FieldByName('number').AsInteger;
716 s := Request.ContentFields.Values['help'];
717 DataModule1.FDTable4.AppendRecord([i, j, s]);
719 Response.Content := help.Content;
722 procedure TTWebModule1.TWebModule1imgAction(Sender: TObject;
723 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
725 with DataModule1.FDTable5 do
727 Locate('name', Request.ContentFields.Values['name'], []);
728 Response.ContentType := 'image/jpeg';
729 Response.ContentStream := CreateBlobStream(FieldByName('source'), bmRead);
733 procedure TTWebModule1.TWebModule1indexpageAction(Sender: TObject;
734 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
739 s := Request.QueryFields.Values['db'];
741 DataModule1.FDTable1.Locate('dbnum', s, []);
742 int := StrToIntDef(Request.QueryFields.Values['num'], -1);
743 pages(DataModule1.FDTable2.RecordCount, int);
746 Self.Tag := Integer(@s);
747 Response.ContentType := 'text/html; charset="utf-8"';
748 if mente = false then
749 Response.Content := index.Content;
752 procedure TTWebModule1.TWebModule1jumpAction(Sender: TObject;
753 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
758 DB := Request.QueryFields.Values['db'];
759 s := Request.ContentFields.Values['num'];
761 DataModule1.FDTable1.Locate('dbnum', DB.ToInteger, []);
762 DataModule1.FDTable2.Locate('number', s.ToInteger, []);
764 pages(DataModule1.FDTable2.RecNo, page);
765 Response.SendRedirect(Format('/index?db=%s&num=%d#%s', [DB, page, s]));
768 procedure TTWebModule1.TWebModule1linkAction(Sender: TObject;
769 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
774 s := Request.QueryFields.Values['num'];
778 if DataModule1.FDTable2.Locate('number', num, []) = true then
780 Response.ContentType := 'text/html;charset=utf-8';
781 Response.Content := articles.Content;
785 procedure TTWebModule1.TWebModule1loginAction(Sender: TObject;
786 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
790 if Request.MethodType = mtGet then
792 Response.ContentType := 'text/html;charset=utf-8';
793 Response.Content := login.Content;
796 with Response.Cookies.Add do
799 Value := Request.ContentFields.Values['password'];
802 i := DataModule1.FDTable1.Lookup('database',
803 Request.ContentFields.Values['record'], 'dbnum');
804 Response.SendRedirect('/admin?db=' + i.ToString);
807 procedure TTWebModule1.TWebModule1logoutAction(Sender: TObject;
808 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
810 with Response.Cookies.Add do
815 TWebModule1indexpageAction(nil, Request, Response, Handled);
818 procedure TTWebModule1.TWebModule1masterAction(Sender: TObject;
819 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
824 if Request.MethodType = mtPost then
826 s := Request.ContentFields.Values['delete'];
828 with DataModule1.FDTable4 do
829 while (Bof = false) or (Eof = false) do
833 DataModule1.FDTable4.First;
834 while DataModule1.FDTable4.Eof = false do
836 i := DataModule1.FDTable4.FieldByName('dbname').AsInteger;
837 if DataModule1.FDTable1.Locate('dbnum', i) = true then
839 i := DataModule1.FDTable4.FieldByName('posnum').AsInteger;
840 if DataModule1.FDTable2.Locate('number', i) = false then
842 DataModule1.FDTable4.Delete;
846 DataModule1.FDTable4.Next;
850 Response.ContentType := 'text/html;charset=utf-8';
851 Response.Content := master.Content;
854 procedure TTWebModule1.TWebModule1registAction(Sender: TObject;
855 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
858 title, na, raw, pass, kotoba, error: string;
859 comment: TStringList;
861 function scan(Text: string): string;
864 coll: TMatchCollection;
868 Text := TNetEncoding.HTML.Encode(Text);
869 s := TNetEncoding.HTML.Encode('>>');
870 reg := TRegEx.Create(s + '(\d+)');
871 coll := reg.Matches(Text);
872 for j := coll.count - 1 downto 0 do
874 Delete(Text, coll[j].index, coll[j].Length);
875 t := Copy(coll[j].Value, Length(s) + 1, coll[j].Length);
877 ('<a class=minpreview data-preview-url=/link?num=%s href=/jump?num=%s>>>%s</a>',
879 Insert(result, Text, coll[j].index);
886 kotoba := Request.ContentFields.Values['aikotoba'];
887 if kotoba <> '
\82°
\82ñ
\82«' then
888 error := '<section style=color:red><p>
\8d\87\8c¾
\97t
\82ª
\82¿
\82ª
\82¢
\82Ü
\82·.';
889 with DataModule1.FDTable2 do
892 number := FieldByName('number').AsInteger + 1;
894 with Request.ContentFields do
896 title := Values['title'];
897 na := Values['name'];
898 raw := Values['comment'];
899 pass := hash(Values['password']);
902 title := '
\83^
\83C
\83g
\83\8b\82È
\82µ.';
903 with Response.Cookies.Add do
907 Value := '
\92N
\82©
\82³
\82ñ.'
913 with Response.Cookies.Add do
919 comment := TStringList.Create;
922 for i := 0 to comment.count - 1 do
924 if Pos('ng', comment[i]) > 0 then
926 error := error + '<p>
\8bÖ
\8e~
\8cê
\8bå
\82ª
\8aÜ
\82Ü
\82ê
\82Ä
\82¢
\82Ü
\82·.';
929 comment[i] := '<p>' + scan(comment[i]);
931 x := Request.ContentFields.Values['show'] = 'true';
933 error := error + '</section>'
934 else if x = true then
936 error := '<p style=font-size:2.3em;color:blue>
\81«
\81«
\83v
\83\8c\83r
\83\85\81[
\81«
\81«<p>' +
938 Request.ContentFields.Values['show'] := 'false';
939 Request.ContentFields.Values['preview'] := error;
940 Request.ContentFields.Values['raw'] := raw;
944 i := DataModule1.FDTable1.FieldByName('dbnum').AsInteger;
945 DataModule1.FDTable2.AppendRecord([i, number, title, na, comment.Text,
947 Response.SendRedirect('index?db=' + i.ToString + '#article');
953 TWebModule1indexpageAction(nil, Request, Response, Handled);
956 procedure TTWebModule1.TWebModule1searchAction(Sender: TObject;
957 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
959 Response.ContentType := 'text/html;charset=utf-8';
960 Response.Content := search.Content;
963 procedure TTWebModule1.TWebModule1titleAction(Sender: TObject;
964 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
966 Response.ContentType := 'text/html;charset=utf-8';
967 Response.Content := title.Content;
970 procedure TTWebModule1.TWebModule1topAction(Sender: TObject;
971 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
973 Response.ContentType := 'text/html;charset=utf-8';
974 DataModule1.FDTable1.First;
975 if mente = false then
976 Response.Content := top.ContentFromString(top.Content);
979 procedure TTWebModule1.WebModuleCreate(Sender: TObject);
984 if DataModule1.FDTable1.Bof and DataModule1.FDTable1.Eof then
986 DataModule1.FDTable1.AppendRecord([0, 'info']);
988 DataModule1.FDTable1.AppendRecord([i, '
\8cf
\8e¦
\94Â' + i.ToString]);
990 if DataModule1.FDTable3.Bof and DataModule1.FDTable3.Eof then
992 a := DataModule1.FDTable1.Lookup('database', 'info', 'dbnum');
993 DataModule1.FDTable3.AppendRecord
994 (['
\82Æ
\82é
\82Ë
\81`
\82Ç
\8d\86',
995 '<h1 style=color:maron;text-align:center;font-style:italic>
\82Æ
\82é
\82Ë
\81`
\82Ç
\8d\86</h1>',
996 false, a, 30, hash('admin'), 7]);