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, System.Types;
10 TWebModule1 = 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 WebModule1indexpageAction(Sender: TObject; Request: TWebRequest;
39 Response: TWebResponse; var Handled: Boolean);
40 procedure WebModule1registAction(Sender: TObject; Request: TWebRequest;
41 Response: TWebResponse; var Handled: Boolean);
42 procedure WebModuleCreate(Sender: TObject);
43 procedure WebModule1adminAction(Sender: TObject; Request: TWebRequest;
44 Response: TWebResponse; var Handled: Boolean);
45 procedure WebModule1topAction(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 WebModule1searchAction(Sender: TObject; Request: TWebRequest;
52 Response: TWebResponse; var Handled: Boolean);
53 procedure WebModule1helpAction(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 WebModule1alertAction(Sender: TObject; Request: TWebRequest;
64 Response: TWebResponse; var Handled: Boolean);
65 procedure WebModule1masterAction(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 WebModule1deleteAction(Sender: TObject; Request: TWebRequest;
72 Response: TWebResponse; var Handled: Boolean);
73 procedure WebModule1jumpAction(Sender: TObject; Request: TWebRequest;
74 Response: TWebResponse; var Handled: Boolean);
75 procedure WebModule1linkAction(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 WebModule1admdelAction(Sender: TObject; Request: TWebRequest;
83 Response: TWebResponse; var Handled: Boolean);
84 procedure WebModule1loginAction(Sender: TObject; Request: TWebRequest;
85 Response: TWebResponse; var Handled: Boolean);
86 procedure WebModule1adminsetAction(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 WebModule1logoutAction(Sender: TObject; Request: TWebRequest;
91 Response: TWebResponse; var Handled: Boolean);
92 procedure WebModule1imgAction(Sender: TObject; Request: TWebRequest;
93 Response: TWebResponse; var Handled: Boolean);
94 procedure WebModule1fileAction(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 WebModule1titleAction(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);
102 procedure helpHTMLTag(Sender: TObject; Tag: TTag; const TagString: string;
103 TagParams: TStrings; var ReplaceText: string);
104 procedure loginHTMLTag(Sender: TObject; Tag: TTag; const TagString: string;
105 TagParams: TStrings; var ReplaceText: string);
110 procedure pages(count: Integer; var page: Integer);
111 procedure strsCheck(var error: string; var list: TStringList);
112 function isInfo: Boolean;
113 function loginCheck: Boolean;
114 function hash(str: string): string;
115 function mente: Boolean;
116 function detail(ts, pid: string): string;
122 WebModuleClass: TComponentClass = TWebModule1;
126 { %CLASSGROUP 'Vcl.Controls.TControl' }
128 uses Unit1, IdHashSHA, IdGlobal, IdHash, IdHashMessageDigest;
133 promotion = '
\8dL
\8d\90:';
136 procedure TWebModule1.adheadHTMLTag(Sender: TObject; Tag: TTag;
137 const TagString: string; TagParams: TStrings; var ReplaceText: string);
139 if TagString = 'pr' then
140 ReplaceText := promotion
141 else if (TagString = 'mente') and
142 (DataModule1.FDTable3.FieldByName('mente').AsBoolean = true) then
143 ReplaceText := 'checked'
144 else if TagString = 'database' then
145 ReplaceText := Request.QueryFields.Values['db'];
148 procedure TWebModule1.adminFormatCell(Sender: TObject;
149 CellRow, CellColumn: Integer; var BgColor: THTMLBgColor;
150 var Align: THTMLAlign; var VAlign: THTMLVAlign;
151 var CustomAttrs, CellData: string);
153 if (CellColumn = 0) and (CellRow > 0) then
154 CellData := Format('<input name=check%d type=checkbox>', [CellRow]);
157 procedure TWebModule1.alertHTMLTag(Sender: TObject; Tag: TTag;
158 const TagString: string; TagParams: TStrings; var ReplaceText: string);
163 if (TagString = 'plus') and (alert.Tag = 0) then
165 '<a href=/jump?db=<#dbname>&num=<#posnum>>[ <#dbname>-<#posnum> ]</a>'
166 else if TagString = 'article' then
169 if (FDTable1.Locate('dbnum', FDTable4.FieldByName('dbname').AsInteger)
170 = false) or (FDTable2.Locate('number', FDTable4.FieldByName('posnum')
171 .AsInteger) = false) then
173 ReplaceText := '<p>
\83\8a\83N
\83G
\83X
\83g';
176 s := TStringList.Create;
178 s.Text := articles.Content;
181 for i := s.count - 1 downto 0 do
182 if Copy(s[i], 1, 18) = '<section id=master' then
187 ReplaceText := s.Text;
192 else if TagString = 'request' then
193 ReplaceText := DataModule1.FDTable4.FieldByName('request').AsString;
196 procedure TWebModule1.articlesHTMLTag(Sender: TObject; Tag: TTag;
197 const TagString: string; TagParams: TStrings; var ReplaceText: string);
199 if TagString = 'comment' then
200 ReplaceText := DataModule1.FDTable2.FieldByName('comment').AsString;
203 function TWebModule1.detail(ts, pid: string): string;
207 for i := 0 to ComponentCount - 1 do
208 if Components[i].Name = ts + pid then
209 result := (Components[i] as TPageProducer).Content;
212 procedure TWebModule1.footerHTMLTag(Sender: TObject; Tag: TTag;
213 const TagString: string; TagParams: TStrings; var ReplaceText: string);
217 if TagString = 'link' then
220 if i = index.Tag then
221 ReplaceText := ReplaceText + ' ' + i.ToString + ' '
223 ReplaceText := ReplaceText +
224 Format(' <a style=text-decoration-line:none href="%s?db=%d&num=%d">%d</a> ',
225 [PString(Self.Tag)^, DataModule1.FDTable1.FieldByName('dbnum')
228 else if TagString = 'recent' then
229 if index.Tag = -1 then
230 ReplaceText := TagString
232 ReplaceText := '<a style=text-decoration-line:none href="' +
233 PString(Self.Tag)^ + '?db=' + DataModule1.FDTable1.FieldByName('dbnum')
234 .AsString + '">recent</a>';
237 function TWebModule1.hash(str: string): string;
239 with TIdHashSHA1.Create do
242 result := HashStringAsHex(str);
249 procedure TWebModule1.headerHTMLTag(Sender: TObject; Tag: TTag;
250 const TagString: string; TagParams: TStrings; var ReplaceText: string);
254 if TagString = 'cookie' then
256 s := TagParams.Values['param'];
257 ReplaceText := TNetEncoding.URL.Decode(Request.CookieFields.Values[s]);
259 else if (TagString = 'check') and
260 (Request.ContentFields.Values['show'] <> 'false') then
261 ReplaceText := 'checked'
262 else if TagString = 'preview' then
263 ReplaceText := Request.ContentFields.Values['preview']
264 else if TagString = 'raw' then
265 ReplaceText := Request.ContentFields.Values['raw']
266 else if TagString = 'pass' then
267 ReplaceText := Request.ContentFields.Values['password']
268 else if TagString = 'title' then
269 ReplaceText := Request.ContentFields.Values['title'];
272 procedure TWebModule1.helpHTMLTag(Sender: TObject; Tag: TTag;
273 const TagString: string; TagParams: TStrings; var ReplaceText: string);
275 if TagString = 'pr' then
276 ReplaceText := promotion
277 else if TagString = 'area' then
280 ss := TStringList.Create;
282 ss.Add('<form action=/help method=post><p>
\82¨
\96â
\82¢
\8d\87\82í
\82¹<
\8dí
\8f\9c\88Ë
\97\8a\82È
\82Ç
\89½
\82Å
\82à></p>');
283 ss.Add('<textarea name=help style=height:100px;width:250px>
\93\8a\8de
\8eÒ
\96¼
\82È
\82Ç
\81F');
284 ss.Add('
\91\8a\92k
\93à
\97e
\81F');
285 ss.Add('
\82»
\82Ì
\91¼
\81F</textarea><br>');
286 ss.Add('<input type=submit value="
\91\97\90M"></form>');
287 ReplaceText := ss.Text;
294 '<p style=color:yellow;background-color:aqua>
\82²
\95ñ
\8d\90\82 \82è
\82ª
\82Æ
\82¤
\82²
\82´
\82¢
\82Ü
\82·.';
297 procedure TWebModule1.indexHTMLTag(Sender: TObject; Tag: TTag;
298 const TagString: string; TagParams: TStrings; var ReplaceText: string);
303 if TagString = 'pr' then
304 ReplaceText := promotion
305 else if TagString = 'article' then
307 x := DataModule1.FDTable1.FieldByName('dbnum')
308 .AsInteger = DataModule1.FDTable3.FieldByName('info').AsInteger;
309 for i := 1 to DataModule1.FDTable3.FieldByName('count').AsInteger do
311 if DataModule1.FDTable2.Eof = true then
314 ReplaceText := ReplaceText + articles.Content
316 ReplaceText := articles.Content + ReplaceText;
317 if DataModule1.FDTable2.Eof = false then
318 DataModule1.FDTable2.Next;
321 else if TagString = 'footer' then
322 ReplaceText := footer.Content
323 else if TagString = 'header' then
324 if (DataModule1.FDTable1.FieldByName('dbnum')
325 .AsInteger = DataModule1.FDTable3.FieldByName('info').AsInteger) and
326 (loginCheck = false) then
327 ReplaceText := '<h1 style=text-align:center>
\8aÇ
\97\9d\90l
\82©
\82ç
\82¨
\92m
\82ç
\82¹
\82ª
\82 \82è
\82Ü
\82·.</h1>'
330 i := DataModule1.FDTable3.FieldByName('count').AsInteger;
331 if 10 * i <= DataModule1.FDTable2.RecordCount then
332 ReplaceText := '<h1>
\82±
\82ê
\88È
\8fã
\93\8a\8de
\82Å
\82«
\82Ü
\82¹
\82ñ.</h1>'
334 ReplaceText := header.Content;
336 else if (TagString = 'css') or (TagString = 'js') then
337 ReplaceText := detail(TagString, TagParams.Values['id'])
338 else if TagString = 'dbnum' then
339 ReplaceText := DataModule1.FDTable1.FieldByName('dbnum').AsString
340 else if TagString = 'database' then
341 ReplaceText := DataModule1.FDTable1.FieldByName('database').AsString;
344 function TWebModule1.isInfo: Boolean;
346 result := DataModule1.FDTable1.FieldByName('dbnum')
347 .AsInteger = DataModule1.FDTable3.FieldByName('info').AsInteger;
350 procedure TWebModule1.itemsHTMLTag(Sender: TObject; Tag: TTag;
351 const TagString: string; TagParams: TStrings; var ReplaceText: string);
357 if TagString = 'item' then
359 s := TStringList.Create;
361 s.Text := DataModule1.FDTable2.FieldByName('raw').AsString;
362 for i := 0 to s.count - 1 do
363 for j := 0 to ss.count - 1 do
364 if Pos(ss[j], s[i]) > 0 then
366 s[i] := '<p style=background-color:aqua>' + s[i]
368 s[i] := '<p style=background-color:yellow>' + s[i];
369 with DataModule1.FDTable2 do
371 i := FieldByName('dbnum').AsInteger;
372 j := FieldByName('number').AsInteger;
373 str := Request.QueryFields.Values['db'];
375 t := Format('<a href="/jump?db=%d&num=%d">[ %d-%d ]</a>',
378 t := Format('<a href="/jump?db=%s&num=%d">[ %d ]</a>', [str, j, j]);
380 ReplaceText := t + s.Text;
387 function TWebModule1.loginCheck: Boolean;
389 result := hash(Request.CookieFields.Values['user'])
390 = DataModule1.FDTable3.FieldByName('password').AsString;
393 procedure TWebModule1.loginHTMLTag(Sender: TObject; Tag: TTag;
394 const TagString: string; TagParams: TStrings; var ReplaceText: string);
396 if TagString = 'pr' then
397 ReplaceText := promotion;
400 procedure TWebModule1.masterHTMLTag(Sender: TObject; Tag: TTag;
401 const TagString: string; TagParams: TStrings; var ReplaceText: string);
403 if TagString = 'pr' then
404 ReplaceText := promotion
405 else if TagString = 'request' then
406 with DataModule1.FDTable4 do
409 ReplaceText := '<table border=1 align=center>';
412 if FieldByName('posnum').AsInteger = -1 then
416 ReplaceText := ReplaceText + alert.ContentFromString(alert.Content);
419 ReplaceText := ReplaceText + '</table>';
423 function TWebModule1.mente: Boolean;
425 if DataModule1.FDTable3.FieldByName('mente').AsBoolean = true then
429 '<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>' +
430 '<p style=text-align:center><a href=/admin>
\8aÇ
\97\9d\8eÒ
\97p
\83\8d\83O
\83C
\83\93</a>'
436 procedure TWebModule1.pages(count: Integer; var page: Integer);
440 max := DataModule1.FDTable3.FieldByName('count').AsInteger;
441 if (page > -1) and (count < max * (page - 1)) then
443 page := (count div max) + 1;
444 if count mod max = 0 then
450 DataModule1.FDTable2.Last;
451 DataModule1.FDTable2.MoveBy(1 - max);
454 DataModule1.FDTable2.First;
455 DataModule1.FDTable2.MoveBy(max * (page - 1));
459 procedure TWebModule1.mailHTMLTag(Sender: TObject; Tag: TTag;
460 const TagString: string; TagParams: TStrings; var ReplaceText: string);
462 if TagString = 'pr' then
463 ReplaceText := promotion
464 else if TagString = 'content' then
465 ReplaceText := articles.Content
466 else if TagString = 'query' then
467 ReplaceText := '?' + Request.Query
468 else if TagString = 'number' then
469 ReplaceText := Request.QueryFields.Values['num'];
472 procedure TWebModule1.searchHTMLTag(Sender: TObject; Tag: TTag;
473 const TagString: string; TagParams: TStrings; var ReplaceText: string);
482 DataModule1.FDTable2.First;
483 while DataModule1.FDTable2.Eof = false do
485 s.Text := DataModule1.FDTable2.FieldByName('raw').AsString;
486 ss.DelimitedText := Request.ContentFields.Values['word1'];
487 for j := 0 to ss.count - 1 do
488 for i := 0 to s.count - 1 do
489 if Pos(ss[j], s[i]) > 0 then
492 ReplaceText := ReplaceText + items.Content;
497 if j = ss.count - 1 then
499 ReplaceText := ReplaceText + items.Content;
505 else if i = s.count - 1 then
508 DataModule1.FDTable2.Next;
513 if TagString = 'pr' then
514 ReplaceText := promotion
515 else if (Request.MethodType = mtPost) and (TagString = 'items') then
517 if Request.ContentFields.Values['type'] = 'OR' then
521 s := TStringList.Create;
522 ss := TStringList.Create;
525 ss.StrictDelimiter := false;
526 if Request.QueryFields.Values['db'] = '' then
528 DataModule1.FDTable1.First;
529 while DataModule1.FDTable1.Eof = false do
532 DataModule1.FDTable1.Next;
542 else if TagString = 'query' then
544 ReplaceText := Request.Query;
545 if ReplaceText <> '' then
546 ReplaceText := '?' + ReplaceText;
548 else if TagString = 'css' then
549 ReplaceText := css2.Content;
552 procedure TWebModule1.strsCheck(var error: string; var list: TStringList);
558 s := TStringList.Create;
560 s.DelimitedText := DataModule1.FDTable3.FieldByName('ng').AsString;
561 for i := 0 to s.count - 1 do
562 for j := 0 to list.count - 1 do
564 if Pos(s[i], list[j]) > 0 then
566 list[j] := '<p>' + list[j];
572 error := error + '<p>
\8bÖ
\8e~
\8cê
\8bå
\82ª
\8aÜ
\82Ü
\82ê
\82Ä
\82¢
\82Ü
\82·.';
575 procedure TWebModule1.tiHTMLTag(Sender: TObject; Tag: TTag;
576 const TagString: string; TagParams: TStrings; var ReplaceText: string);
578 if TagString = 'count' then
580 DataModule1.FDTable1.Locate('dbnum',
581 DataModule1.FDQuery1.FieldByName('dbnum').AsInteger);
582 ReplaceText := DataModule1.FDTable2.RecordCount.ToString;
584 else if TagString = 'database' then
585 ReplaceText := DataModule1.FDTable1.Lookup('dbnum',
586 DataModule1.FDQuery1.FieldByName('dbnum').AsInteger, 'database');
589 procedure TWebModule1.titleHTMLTag(Sender: TObject; Tag: TTag;
590 const TagString: string; TagParams: TStrings; var ReplaceText: string);
592 if TagString = 'pr' then
593 ReplaceText := promotion
594 else if TagString = 'js' then
595 ReplaceText := detail(TagString, TagParams.Values['id'])
596 else if TagString = 'main' then
597 with DataModule1.FDQuery1 do
602 ReplaceText := ReplaceText + ti.Content;
609 procedure TWebModule1.topHTMLTag(Sender: TObject; Tag: TTag;
610 const TagString: string; TagParams: TStrings; var ReplaceText: string);
615 if TagString = 'pr' then
616 ReplaceText := promotion
617 else if TagString = 'list' then
619 i := DataModule1.FDTable3.FieldByName('info').AsInteger;
620 for k := 0 to tcnt do
622 if DataModule1.FDTable1.Eof = true then
625 j := DataModule1.FDTable1.FieldByName('dbnum').AsInteger;
626 s := DataModule1.FDTable1.FieldByName('database').AsString;
627 if (i = j) or (s = 'master') then
629 DataModule1.FDTable1.Next;
632 DataModule1.FDTable2.Last;
633 if Now - DataModule1.FDTable2.FieldByName('date').AsDateTime < 1 then
634 t := 'background-color:aqua;';
635 if DataModule1.FDTable2.RecordCount >= 10 *
636 DataModule1.FDTable3.FieldByName('count').AsInteger then
637 t := t + 'color:red;';
640 ReplaceText := ReplaceText +
641 Format('<p><a%s target=_blank href="/index?db=%d">%s</a><br></p>',
643 DataModule1.FDTable1.Next;
646 else if TagString = 'info' then
647 ReplaceText := DataModule1.FDTable1.Lookup('dbnum',
648 DataModule1.FDTable3.FieldByName('info').AsInteger, 'database')
649 else if TagString = 'dbnum' then
650 ReplaceText := DataModule1.FDTable3.FieldByName('info').AsString
651 else if (TagString = 'css') or (TagString = 'js') then
652 ReplaceText := detail(TagString, TagParams.Values['id'])
653 else if TagString = 'slide' then
655 for i := 1 to (DataModule1.FDTable1.RecordCount div tcnt) + 1 do
656 ReplaceText := ReplaceText +
657 '<div class="slide"><img src="/src?name=slide' + i.ToString +
658 '.jpg" style=float:right;height:465px><#list></div>';
662 procedure TWebModule1.WebModule1admdelAction(Sender: TObject;
663 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
670 DataModule1.FDTable2.RecNo := admin.Tag;
671 for i := 0 to Request.ContentFields.count - 1 do
673 reg := TRegEx.Create('\d+');
674 match := reg.match(Request.ContentFields[i]);
675 if match.Success = true then
677 k := match.Value.ToInteger - j - 1;
678 j := match.Value.ToInteger;
680 DataModule1.FDTable2.Next;
681 DataModule1.FDTable2.Delete;
684 WebModule1adminAction(nil, Request, Response, Handled);
687 procedure TWebModule1.WebModule1adminAction(Sender: TObject;
688 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
693 s := Request.CookieFields.Values['user'];
694 if (s = '') or (loginCheck = false) then
696 WebModule1loginAction(nil, Request, Response, Handled);
699 admin.MaxRows := DataModule1.FDTable3.FieldByName('count').AsInteger;
700 t := Request.QueryFields.Values['db'];
702 DataModule1.FDTable1.Locate('dbnum', t, []);
703 s := Request.QueryFields.Values['num'];
704 i := StrToIntDef(s, -1);
705 pages(DataModule1.FDTable2.RecordCount, i);
708 Self.Tag := Integer(@tagstr);
709 admin.header.Text := adhead.Content;
712 ('<input type=submit value=
\8dí
\8f\9c\82·
\82é><input type=reset value=
\83\8a\83Z
\83b
\83g></form>');
713 admin.footer.Add(footer.Content);
716 admin.footer.Add('<p style=text-align:center><a href="/index' + t +
718 admin.Tag := DataModule1.FDTable2.RecNo;
719 Response.ContentType := 'text/html;charset=utf-8';
720 Response.Content := admin.Content;
723 procedure TWebModule1.WebModule1adminsetAction(Sender: TObject;
724 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
728 s := Request.ContentFields.Values['pass'];
729 with DataModule1.FDTable3 do
732 FieldByName('mente').AsBoolean := Request.ContentFields.Values
737 FieldByName('password').AsString := hash(s);
738 with Response.Cookies.Add do
748 WebModule1adminAction(nil, Request, Response, Handled);
751 procedure TWebModule1.WebModule1alertAction(Sender: TObject;
752 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
754 num1, num2, i: Integer;
757 num1 := DataModule1.FDTable1.FieldByName('dbnum').AsInteger;
758 num2 := StrToIntDef(Request.QueryFields.Values['num'], -1);
761 if Request.MethodType = mtGet then
763 DataModule1.FDTable2.Locate('number', num2, []);
764 Response.ContentType := 'text/html;charset=utf-8';
765 Response.Content := mail.Content;
769 with DataModule1.FDTable4 do
772 i := FieldByName('id').AsInteger + 1;
773 s := Request.ContentFields.Values['request'];
776 AppendRecord([i, num1, num2, Now, s]);
779 Response.SendRedirect(Format('/index?db=%d&num=%d#%d',
782 Response.SendRedirect('/top');
786 procedure TWebModule1.WebModule1deleteAction(Sender: TObject;
787 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
792 s := Request.ContentFields.Values['num'];
796 s := hash(Request.ContentFields.Values['password']);
797 with DataModule1.FDTable2 do
798 if Locate('number;pass', VarArrayOf([num, s])) = true then
801 FieldByName('title').AsString := '';
802 FieldByName('name').AsString := ' - - - ';
803 FieldByName('comment').AsString := '<em>
\93\8a\8de
\8eÒ
\82É
\82æ
\82è
\8dí
\8f\9c\82³
\82ê
\82Ü
\82µ
\82½.</em>';
804 FieldByName('raw').AsString := '';
805 FieldByName('date').AsDateTime := Now;
807 WebModule1jumpAction(nil, Request, Response, Handled);
810 WebModule1indexpageAction(nil, Request, Response, Handled);
813 procedure TWebModule1.WebModule1fileAction(Sender: TObject;
814 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
818 s := Request.QueryFields.Values['type'];
820 Response.ContentType := 'text/javascript'
821 else if s = 'css' then
822 Response.ContentType := 'text/css';
823 Response.Content := detail(s, Request.QueryFields.Values['id']);
826 procedure TWebModule1.WebModule1helpAction(Sender: TObject;
827 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
832 Response.ContentType := 'text/html;charset=utf-8';
833 if Request.MethodType = mtPost then
835 s := Request.ContentFields.Values['help'];
836 DataModule1.FDTable4.Last;
837 k := DataModule1.FDTable4.FieldByName('id').AsInteger + 1;
838 DataModule1.FDTable4.AppendRecord([k, -1, -1, Now, s]);
843 Response.Content := help.Content;
846 procedure TWebModule1.WebModule1imgAction(Sender: TObject; Request: TWebRequest;
847 Response: TWebResponse; var Handled: Boolean);
850 res: TResourceStream;
852 with DataModule1.FDTable5 do
854 s := Request.ContentFields.Values['name'];
855 Response.ContentType := 'image/jpeg';
856 if Locate('name', s) = true then
857 Response.ContentStream := CreateBlobStream(FieldByName('source'), bmRead)
858 else if s = 'sprites.png' then
860 Response.ContentType := 'image/png';
861 res := TResourceStream.Create(HInstance, 'PngImage_1', RT_RCDATA);
862 Response.ContentStream := res;
865 Response.ContentStream := nil;
869 procedure TWebModule1.WebModule1indexpageAction(Sender: TObject;
870 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
875 s := Request.QueryFields.Values['db'];
877 DataModule1.FDTable1.Locate('dbnum', s, []);
878 i := StrToIntDef(Request.QueryFields.Values['num'], -1);
879 pages(DataModule1.FDTable2.RecordCount, i);
882 Self.Tag := Integer(@tagstr);
883 Response.ContentType := 'text/html; charset="utf-8"';
884 s := DataModule1.FDTable2.IndexFieldNames;
885 if isInfo = true then
886 DataModule1.FDTable2.IndexFieldNames := Copy(s, 1, Length(s) - 2) + 'DN'
888 DataModule1.FDTable2.IndexFieldNames := Copy(s, 1, Length(s) - 2) + 'AN';
889 if mente = false then
890 Response.Content := index.Content;
893 procedure TWebModule1.WebModule1jumpAction(Sender: TObject;
894 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
899 DB := Request.QueryFields.Values['db'];
900 s := Request.ContentFields.Values['num'];
902 DataModule1.FDTable1.Locate('dbnum', DB.ToInteger, []);
903 DataModule1.FDTable2.Locate('number', s.ToInteger, []);
905 pages(DataModule1.FDTable2.RecNo, page);
906 Response.SendRedirect(Format('/index?db=%s&num=%d#%s', [DB, page, s]));
909 procedure TWebModule1.WebModule1linkAction(Sender: TObject;
910 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
915 s := Request.QueryFields.Values['num'];
919 if DataModule1.FDTable2.Locate('number', num, []) = true then
921 Response.ContentType := 'text/html;charset=utf-8';
922 Response.Content := articles.Content;
926 procedure TWebModule1.WebModule1loginAction(Sender: TObject;
927 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
933 if Request.MethodType = mtGet then
935 Response.ContentType := 'text/html;charset=utf-8';
936 Response.Content := login.Content;
939 s := Request.ContentFields.Values['record'];
940 v := DataModule1.FDTable1.Lookup('database', s, 'dbnum');
941 if VarIsNull(v) = false then
943 with Response.Cookies.Add do
946 Value := hash(Request.ContentFields.Values['password']);
952 Response.SendRedirect('/master')
954 Response.SendRedirect('/admin?db=' + i.ToString);
958 Response.ContentType := 'text/html;charset=utf-8';
959 Response.Content := login.Content;
963 procedure TWebModule1.WebModule1logoutAction(Sender: TObject;
964 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
970 with Response.Cookies.Add do
975 s := Request.QueryFields.Values['db'];
976 i := StrToIntDef(s, -1);
977 x := DataModule1.FDTable1.Locate('dbnum', i);
978 if (x = true) and (DataModule1.FDTable1.FieldByName('database')
979 .AsString = 'master') then
982 Response.SendRedirect('/')
984 Response.SendRedirect('/index?db=' + s);
987 procedure TWebModule1.WebModule1masterAction(Sender: TObject;
988 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
993 if loginCheck = false then
995 with DataModule1.FDTable1 do
996 if Locate('database', 'master') = false then
999 i := FieldByName('dbnum').AsInteger + 1;
1000 AppendRecord([i, 'master']);
1002 WebModule1loginAction(nil, Request, Response, Handled);
1005 if Request.MethodType = mtPost then
1007 s := Request.ContentFields.Values['delete'];
1009 with DataModule1.FDTable4 do
1010 while (Bof = false) or (Eof = false) do
1014 DataModule1.FDTable4.First;
1015 while DataModule1.FDTable4.Eof = false do
1017 i := DataModule1.FDTable4.FieldByName('dbname').AsInteger;
1018 if DataModule1.FDTable1.Locate('dbnum', i) = true then
1020 i := DataModule1.FDTable4.FieldByName('posnum').AsInteger;
1021 if DataModule1.FDTable2.Locate('number', i) = false then
1022 DataModule1.FDTable4.Delete
1024 DataModule1.FDTable4.Next;
1027 DataModule1.FDTable4.Delete;
1031 Response.ContentType := 'text/html;charset=utf-8';
1032 Response.Content := master.Content;
1035 procedure TWebModule1.WebModule1registAction(Sender: TObject;
1036 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
1039 title, na, raw, pass, kotoba, error: string;
1041 comment: TStringList;
1042 function scan(Text: string): string;
1045 coll: TMatchCollection;
1049 Text := TNetEncoding.HTML.Encode(Text);
1050 s := TNetEncoding.HTML.Encode('>>');
1051 reg := TRegEx.Create(s + '(\d+)');
1052 coll := reg.Matches(Text);
1053 for j := coll.count - 1 downto 0 do
1055 Delete(Text, coll[j].index, coll[j].Length);
1056 t := Copy(coll[j].Value, Length(s) + 1, coll[j].Length);
1058 ('<a class=minpreview data-preview-url=/link?num=%s href=/jump?num=%s>>>%s</a>',
1060 Insert(result, Text, coll[j].index);
1067 kotoba := Request.ContentFields.Values['aikotoba'];
1068 if kotoba <> '
\82°
\82ñ
\82«' then
1069 error := '<section style=color:red><p>
\8d\87\8c¾
\97t
\82ª
\82¿
\82ª
\82¢
\82Ü
\82·.';
1070 with DataModule1.FDTable2 do
1072 if isInfo = true then
1076 number := FieldByName('number').AsInteger + 1;
1078 with Request.ContentFields do
1080 title := Values['title'];
1081 na := Values['name'];
1082 raw := Values['comment'];
1083 pass := hash(Values['password']);
1086 title := '
\83^
\83C
\83g
\83\8b\82È
\82µ.';
1087 with Response.Cookies.Add do
1091 Value := '
\92N
\82©
\82³
\82ñ.'
1094 Expires := Now + 14;
1097 with Response.Cookies.Add do
1101 Expires := Now + 14;
1103 comment := TStringList.Create;
1105 comment.Text := raw;
1106 strsCheck(error, comment);
1107 Request.ContentFields.Values['show'] := 'false';
1108 Request.ContentFields.Values['raw'] := raw;
1110 Request.ContentFields.Values['preview'] := error + '</section>'
1111 else if Request.ContentFields.Values['show'] = 'true' then
1113 error := '<p style=font-size:2.3em;color:blue>
\81«
\81«
\83v
\83\8c\83r
\83\85\81[
\81«
\81«<p>' +
1115 Request.ContentFields.Values['preview'] := error;
1119 s := DataModule1.FDTable2.IndexFieldNames;
1120 if s[Length(s)] = 'N' then
1122 s := Copy(s, 1, Length(s) - 3);
1123 DataModule1.FDTable2.IndexFieldNames := s;
1125 i := DataModule1.FDTable1.FieldByName('dbnum').AsInteger;
1126 DataModule1.FDTable2.AppendRecord([i, number, title, na, comment.Text,
1128 if isInfo = true then
1132 DataModule1.FDTable2.IndexFieldNames := s;
1133 Response.SendRedirect('index?db=' + i.ToString + '#article');
1139 WebModule1indexpageAction(nil, Request, Response, Handled);
1142 procedure TWebModule1.WebModule1searchAction(Sender: TObject;
1143 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
1145 Response.ContentType := 'text/html;charset=utf-8';
1146 Response.Content := search.Content;
1149 procedure TWebModule1.WebModule1titleAction(Sender: TObject;
1150 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
1152 Response.ContentType := 'text/html;charset=utf-8';
1153 Response.Content := title.Content;
1156 procedure TWebModule1.WebModule1topAction(Sender: TObject; Request: TWebRequest;
1157 Response: TWebResponse; var Handled: Boolean);
1159 Response.ContentType := 'text/html;charset=utf-8';
1160 DataModule1.FDTable1.First;
1161 if mente = false then
1162 Response.Content := top.ContentFromString(top.Content);
1165 procedure TWebModule1.WebModuleCreate(Sender: TObject);
1173 if FDTable1.Exists = false then
1174 FDTable1.CreateTable;
1175 if FDTable2.Exists = false then
1176 FDTable2.CreateTable;
1177 if FDTable3.Exists = false then
1178 FDTable3.CreateTable;
1179 if FDTable4.Exists = false then
1180 FDTable4.CreateTable;
1181 if FDTable5.Exists = false then
1182 FDTable5.CreateTable;
1192 if DataModule1.FDTable1.Bof and DataModule1.FDTable1.Eof then
1194 DataModule1.FDTable1.AppendRecord([0, 'info']);
1196 DataModule1.FDTable1.AppendRecord([i, '
\8cf
\8e¦
\94Â' + i.ToString]);
1198 if DataModule1.FDTable3.Bof and DataModule1.FDTable3.Eof then
1200 a := DataModule1.FDTable1.Lookup('database', 'info', 'dbnum');
1201 s := '
\88¢
\95Û,
\94n
\8e,
\8e\80\82Ë';
1202 DataModule1.FDTable3.AppendRecord
1203 (['
\82Æ
\82é
\82Ë
\81`
\82Ç
\8d\86',
1204 '<h1 style=color:maron;text-align:center;font-style:italic>
\82Æ
\82é
\82Ë
\81`
\82Ç
\8d\86</h1>',
1205 false, a, 30, hash(hash('admin')), s]);