Develop and Download Open Source Software

Browse Subversion Repository

Contents of /WebModuleUnit1.pas

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4 - (show annotations) (download) (as text)
Thu Sep 24 07:42:33 2015 UTC (8 years, 6 months ago) by yamat0jp
File MIME type: text/x-pascal
File size: 20056 byte(s)
メンテナンス画面が簡単に表示できます

英単語を間違えていました
1 unit WebModuleUnit1;
2
3
4 interface
5
6 uses System.SysUtils, System.Classes, Web.HTTPApp, FireDAC.Stan.Intf,
7 FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS,
8 FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt,
9 FireDAC.UI.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Phys,
10 FireDAC.Phys.SQLite, FireDAC.Phys.SQLiteDef, FireDAC.Stan.ExprFuncs, Data.DB,
11 FireDAC.Comp.Client, FireDAC.Comp.DataSet, Web.HTTPProd, Web.DSProd,
12 AnsiStrings, System.DateUtils, System.Types;
13
14 type
15 TWebModule1 = class(TWebModule)
16 FDTable1: TFDTable;
17 FDConnection1: TFDConnection;
18 FDTable2: TFDTable;
19 FDTable2home: TWideMemoField;
20 FDTable2title: TWideMemoField;
21 FDTable2title2: TWideMemoField;
22 FDTable2pass: TWideMemoField;
23 PageProducer1: TPageProducer;
24 DataSetPageProducer2: TDataSetPageProducer;
25 FDTable1name: TWideMemoField;
26 FDTable1no: TIntegerField;
27 FDTable1date: TWideMemoField;
28 FDTable1sub: TWideMemoField;
29 FDTable1com: TWideMemoField;
30 FDTable1pass: TWideMemoField;
31 adminDS: TDataSetPageProducer;
32 FDTable2ngwords: TWideMemoField;
33 FDTable3: TFDTable;
34 FDTable3link: TIntegerField;
35 FDTable3count: TIntegerField;
36 FDTable1line: TIntegerField;
37 FDTable3line: TIntegerField;
38 FDTable2mente: TBooleanField;
39 procedure WebModule1DefaultHandlerAction(Sender: TObject;
40 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
41 procedure PageProducer1HTMLTag(Sender: TObject; Tag: TTag;
42 const TagString: string; TagParams: TStrings; var ReplaceText: string);
43 procedure WebModule1registAction(Sender: TObject; Request: TWebRequest;
44 Response: TWebResponse; var Handled: Boolean);
45 procedure DataSetPageProducer2HTMLTag(Sender: TObject; Tag: TTag;
46 const TagString: string; TagParams: TStrings; var ReplaceText: string);
47 procedure WebModule1userdelAction(Sender: TObject; Request: TWebRequest;
48 Response: TWebResponse; var Handled: Boolean);
49 procedure WebModule1adminAction(Sender: TObject; Request: TWebRequest;
50 Response: TWebResponse; var Handled: Boolean);
51 procedure WebModule1admindelAction(Sender: TObject; Request: TWebRequest;
52 Response: TWebResponse; var Handled: Boolean);
53 procedure WebModule1loginAction(Sender: TObject; Request: TWebRequest;
54 Response: TWebResponse; var Handled: Boolean);
55 procedure WebModuleBeforeDispatch(Sender: TObject; Request: TWebRequest;
56 Response: TWebResponse; var Handled: Boolean);
57 procedure WebModule1setupAction(Sender: TObject; Request: TWebRequest;
58 Response: TWebResponse; var Handled: Boolean);
59 procedure WebModule1searchAction(Sender: TObject; Request: TWebRequest;
60 Response: TWebResponse; var Handled: Boolean);
61 procedure WebModuleCreate(Sender: TObject);
62 procedure WebModuleDestroy(Sender: TObject);
63 procedure WebModule1adminsetAction(Sender: TObject; Request: TWebRequest;
64 Response: TWebResponse; var Handled: Boolean);
65 private
66 { private ���� }
67 public
68 { public ���� }
69 user: string;
70 time: Int64;
71 words: TStringList;
72 position: integer;
73 uri: string;
74 er: string;
75 foo: string;
76 function footer(const path: string): string;
77 function regist(var com: string): integer;
78 procedure AddCookie(day: integer; const pass: string);
79 end;
80
81 var
82 WebModuleClass: TComponentClass = TWebModule1;
83
84 implementation
85
86 { %CLASSGROUP 'Vcl.Controls.TControl' }
87
88 {$R *.dfm}
89
90 procedure TWebModule1.AddCookie(day: integer; const pass: string);
91 begin
92 with Response.Cookies.Add do
93 begin
94 path := ReplaceText(FDTable2.FieldByName('home').AsAnsiString + 'admin',
95 'http', 'https');
96 Expires := Now + day;
97 Name := 'psw';
98 Value := AnsiString(pass);
99 Secure := True;
100 end;
101 end;
102
103 procedure TWebModule1.DataSetPageProducer2HTMLTag(Sender: TObject; Tag: TTag;
104 const TagString: string; TagParams: TStrings; var ReplaceText: string);
105 begin
106 ReplaceText := FDTable1.FieldByName(TagString).AsString;
107 end;
108
109 function TWebModule1.footer(const path: string): string;
110 var
111 s1, s2, t1, t2: string;
112 home: string;
113 i, k, count: integer;
114 function linkcontent: string;
115 var
116 j, link: integer;
117 begin
118 result := '';
119 link := FDTable3.FieldByName('link').AsInteger;
120 if position > link div 2 then
121 begin
122 if (FDTable1.RecordCount - 1) div count < position + link div 2 then
123 i := FDTable1.RecordCount div count - link - position
124 else
125 i := -(link div 2)
126 end
127 else if position = -1 then
128 i := -position + FDTable1.RecordCount div count - link
129 else
130 i := -position;
131 for j := 0 to link do
132 begin
133 if FDTable1.RecordCount <= (position + i + j) * count then
134 break;
135 if position + i + j < 0 then
136 continue;
137 if i + j = 0 then
138 result := result + ' ' + IntToStr(position + 1) + ' '
139 else
140 result := result + Format(' <a href="' + home + path +
141 '?pos=%d">%d</a> ', [position + i + j, position + 1 + i + j]);
142 end;
143 end;
144
145 begin
146 count := FDTable3.FieldByName('count').AsInteger;
147 if path = 'admin' then
148 home := String(ReplaceText(FDTable2.FieldByName('home').AsAnsiString,
149 'http', 'https'))
150 else
151 home := FDTable2.FieldByName('home').AsString;
152 if position <= -1 then
153 begin
154 s1 := '���V%d�����L�����\��<br><center>Pages : [<b>';
155 s2 := '<<' + linkcontent + '>>] ���V</b><br></center>';
156 result := Format(s1, [count]) + s2;
157 end
158 else
159 begin
160 if position = 0 then
161 t1 := '?pos=0'
162 else
163 t1 := '?pos=' + IntToStr(position - 1);
164 i := (FDTable1.RecordCount - 1) div count;
165 if position > i then
166 position := i;
167 if position = i then
168 begin
169 t2 := '?pos=' + IntToStr(position);
170 k := FDTable1.RecordCount;
171 end
172 else
173 begin
174 t2 := '?pos=' + IntToStr(position + 1);
175 k := (position + 1) * count;
176 end;
177 s1 := '%d ���� %d ������ %d �������\��<br><center>Page : [<b>';
178 s2 := '<a href="' + home + path + t1 + '"><<</a>' + linkcontent +
179 '<a href="' + home + path + t2 + '">>></a>] <a href="' + home + path +
180 '">���V</a></b></center>';
181 result := Format(s1, [FDTable1.RecordCount, position * count + 1, k]) + s2;
182 end;
183 end;
184
185 procedure TWebModule1.PageProducer1HTMLTag(Sender: TObject; Tag: TTag;
186 const TagString: string; TagParams: TStrings; var ReplaceText: string);
187 var
188 i, j, count: integer;
189 s: TDataSetPageProducer;
190 begin
191 if TagString = 'home' then
192 begin
193 if (uri = 'admin') or (uri = 'login') or (TagParams.Values['ssl'] = 'true')
194 then
195 ReplaceText := String(AnsiReplaceText(FDTable2.FieldByName('home')
196 .AsAnsiString, 'http', 'https'))
197 else
198 ReplaceText := FDTable2.FieldByName('home').AsString;
199 end;
200 if (TagString = 'title') or (TagString = 'title2') then
201 ReplaceText := FDTable2.FieldByName(TagString).AsString;
202 if TagString = 'username' then
203 ReplaceText := user;
204 if TagString = 'main' then
205 begin
206 if FDTable1.RecordCount = 0 then
207 begin
208 if uri = 'index' then
209 ReplaceText := '�������e������������.';
210 end
211 else
212 begin
213 count := FDTable3.FieldByName('count').AsInteger;
214 if uri = 'admin' then
215 s := adminDS
216 else
217 s := DataSetPageProducer2;
218 if position < -1 then
219 position := -1;
220 if (position + 1) * count > FDTable1.RecordCount then
221 position := (FDTable1.RecordCount - 1) div count;
222 if position = -1 then
223 begin
224 if FDTable1.RecordCount < count then
225 j := FDTable1.RecordCount mod count
226 else
227 j := count;
228 end
229 else if FDTable1.RecordCount < (position + 1) * count then
230 j := FDTable1.RecordCount - position * count
231 else
232 j := count;
233 if position = -1 then
234 FDTable1.Last
235 else
236 FDTable1.RecNo := (position + 1) * count;
237 for i := 1 to j do
238 begin
239 ReplaceText := ReplaceText + s.Content;
240 FDTable1.Prior;
241 end;
242 end;
243 end;
244 if TagString = 'footer' then
245 if TagParams.Values['refer'] = 'true' then
246 ReplaceText := foo
247 else
248 begin
249 foo := footer(uri);
250 ReplaceText := foo;
251 end;
252 if TagString = 'text' then
253 if FDTable1.Filtered = false then
254 ReplaceText := '����������'
255 else
256 ReplaceText := '�Y������ ' + IntToStr(FDTable1.RecordCount) + ' ��' +
257 '<br><#main>';
258 if TagString = 'pass' then
259 ReplaceText := FDTable2.FieldByName('pass').AsString;
260 if TagString = 'content' then
261 ReplaceText := er;
262 if (TagString = 'mente') and (FDTable2.FieldByName('mente').AsBoolean = true)
263 then
264 ReplaceText := 'checked="checked"';
265 end;
266
267 function TWebModule1.regist(var com: string): integer;
268 var
269 i: integer;
270 begin
271 result := 1;
272 i := 1;
273 while True do
274 begin
275 i := Pos(#$D#$A, com, i);
276 if i = 0 then
277 break;
278 Delete(com, i, Length(#$D#$A));
279 Insert('<br>', com, i);
280 inc(i, 4);
281 inc(result);
282 end;
283 end;
284
285 procedure TWebModule1.WebModule1adminAction(Sender: TObject;
286 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
287 var
288 t: string;
289 x: Boolean;
290 procedure something;
291 var
292 s: TResourceStream;
293 begin
294 x := false;
295 s := TResourceStream.Create(HInstance, 'admin', RT_RCDATA);
296 try
297 uri := 'admin';
298 Response.ContentType := 'text/html; charset=utf-8;';
299 Response.Content := PageProducer1.ContentFromStream(s)
300 finally
301 s.Free;
302 end;
303 end;
304
305 begin
306 if Request.Query = 'del' then
307 begin
308 AddCookie(-3, '');
309 Response.SendRedirect(FDTable2.FieldByName('home').AsAnsiString);
310 Exit;
311 end;
312 x := True;
313 t := Request.ContentFields.Values['password'];
314 position := StrToIntDef(Request.QueryFields.Values['pos'], -1);
315 if t <> '' then
316 begin
317 AddCookie(14, t);
318 if t = FDTable2.FieldByName('pass').AsString then
319 something;
320 end
321 else if Request.CookieFields.Values['psw'] = FDTable2.FieldByName('pass').AsString
322 then
323 something;
324 if x = True then
325 Response.SendRedirect(ReplaceText(FDTable2.FieldByName('home').AsAnsiString,
326 'http', 'https') + 'login');
327 end;
328
329 procedure TWebModule1.WebModule1admindelAction(Sender: TObject;
330 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
331 var
332 i: integer;
333 begin
334 for i := 0 to Request.ContentFields.count - 1 do
335 if FDTable1.Locate('no', Request.ContentFields.ValueFromIndex[i], []) = True
336 then
337 FDTable1.Delete;
338 Response.SendRedirect(ReplaceText(FDTable2.FieldByName('home').AsAnsiString +
339 'admin', 'http', 'https'));
340 end;
341
342 procedure TWebModule1.WebModule1adminsetAction(Sender: TObject;
343 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
344 var
345 s: string;
346 x: Boolean;
347 begin
348 s := Request.ContentFields.Values['pass'];
349 if FDTable2.FieldByName('pass').AsString <> s then
350 begin
351 FDTable2.Edit;
352 FDTable2.FieldByName('pass').AsString := s;
353 FDTable2.Post;
354 AddCookie(14, s);
355 end;
356 x := Request.ContentFields.Values['mente'] = 'on';
357 if FDTable2.FieldByName('mente').AsBoolean <> x then
358 begin
359 FDTable2.Edit;
360 FDTable2.FieldByName('mente').AsBoolean := x;
361 FDTable2.Post;
362 end;
363 Response.SendRedirect(ReplaceText(FDTable2.FieldByName('home').AsAnsiString +
364 'admin', 'http', 'https'));
365 end;
366
367 procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
368 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
369 var
370 s: TResourceStream;
371 begin
372 if FDTable2.FieldByName('mente').AsBoolean = True then
373 begin
374 s := TResourceStream.Create(HInstance, 'mente', RT_RCDATA);
375 try
376 uri := 'mente';
377 Response.ContentType := 'text/html; charset=utf-8;';
378 Response.Content := PageProducer1.ContentFromStream(s);
379 finally
380 s.Free;
381 end;
382 Exit;
383 end;
384 position := StrToIntDef(Request.QueryFields.Values['pos'], -1);
385 user := Request.CookieFields.Values['UID'];
386 s := TResourceStream.Create(HInstance, 'index', RT_RCDATA);
387 try
388 uri := 'index';
389 Response.ContentType := 'text/html; charset=utf-8;';
390 Response.Content := PageProducer1.ContentFromStream(s);
391 finally
392 s.Free;
393 end;
394 end;
395
396 procedure TWebModule1.WebModule1loginAction(Sender: TObject;
397 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
398 var
399 s: TResourceStream;
400 begin
401 s := TResourceStream.Create(HInstance, 'login', RT_RCDATA);
402 try
403 uri := 'login';
404 Response.ContentType := 'text/html; charset=utf-8;';
405 Response.Content := PageProducer1.ContentFromStream(s);
406 finally
407 s.Free;
408 end;
409 end;
410
411 procedure TWebModule1.WebModule1registAction(Sender: TObject;
412 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
413 var
414 na, sub, com, pass: string;
415 no, line: integer;
416 i: integer;
417 s: TResourceStream;
418 begin
419 with Request.ContentFields do
420 begin
421 na := Values['name'];
422 sub := Values['title'];
423 com := Values['comment'];
424 pass := Values['password'];
425 end;
426 er := '';
427 line := 0;
428 if na = '' then
429 na := '�N������';
430 if sub = '' then
431 sub := '�^�C�g������';
432 if com = '' then
433 er := '�{��������������.'#$D#$A
434 else
435 line := regist(com);
436 for i := 0 to words.count - 1 do
437 if ContainsText(AnsiString(com), AnsiString(words[i])) = True then
438 begin
439 er := er + '���~����������������.';
440 break;
441 end;
442 if FDTable1.RecordCount = 0 then
443 no := 1
444 else
445 begin
446 FDTable1.Last;
447 no := FDTable1.FieldByName('no').AsInteger + 1;
448 if SecondsBetween(Now, StrToDateTime(FDTable1.FieldByName('date').AsString))
449 < time then
450 er := '����������������.';
451 end;
452 if er <> '' then
453 begin
454 Response.ContentType := 'text/html; charset=utf-8;';
455 s := TResourceStream.Create(HInstance, 'regist', RT_RCDATA);
456 try
457 Response.Content := PageProducer1.ContentFromStream(s);
458 finally
459 s.Free;
460 end;
461 Exit;
462 end;
463 FDTable1.AppendRecord([na, no, DateTimeToStr(Now), sub, com, pass, line]);
464 with Response.Cookies.Add do
465 begin
466 path := FDTable2.FieldByName('home').AsAnsiString;
467 Name := 'UID';
468 Value := AnsiString(na);
469 Expires := Now + 1;
470 end;
471 Response.SendRedirect(FDTable2.FieldByName('home').AsAnsiString);
472 end;
473
474 procedure TWebModule1.WebModule1searchAction(Sender: TObject;
475 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
476 var
477 s: TStringList;
478 t1, t2, t3: string;
479 i, j: integer;
480 m: TResourceStream;
481 begin
482 t1 := Request.ContentFields.Values['filter'];
483 t3 := '';
484 s := TStringList.Create;
485 try
486 s.DelimitedText := Request.ContentFields.Values['word1'];
487 for i := 0 to s.count - 1 do
488 begin
489 t2 := Trim(s[i]);
490 if t2 = '' then
491 continue;
492 if t3 <> '' then
493 t3 := t3 + ' and ';
494 t3 := t3 + t1 + ' LIKE ''%' + t2 + '%''';
495 end;
496 finally
497 s.Free;
498 end;
499 if t3 = '' then
500 begin
501 m := TResourceStream.Create(HInstance, 'search', RT_RCDATA);
502 try
503 Response.ContentType := 'text/html; charset=utf-8;';
504 Response.Content := PageProducer1.ContentFromStream(m);
505 finally
506 m.Free;
507 end;
508 Exit;
509 end;
510 FDTable1.Filter := t3;
511 FDTable1.Filtered := True;
512 m := TResourceStream.Create(HInstance, 'search', RT_RCDATA);
513 try
514 j := 0;
515 for i := 1 to FDTable1.RecordCount - 1 do
516 begin
517 inc(j, FDTable1.FieldByName('line').AsInteger);
518 FDTable1.Next;
519 end;
520 PageProducer1.HTMLDoc.LoadFromStream(m);
521 Response.ContentType := 'text/html; charset=utf-8;';
522 if (t3 <> '') and (j > FDTable3.FieldByName('line').AsInteger) then
523 begin
524 t1 := PageProducer1.Content;
525 i := Pos('<#main>', t1);
526 Delete(t1, i, Length('<#main>'));
527 Response.Content := t1 + Format('�\���s����%d�s��������������.',
528 [FDTable3.FieldByName('line').AsInteger]);
529 end
530 else
531 Response.Content := PageProducer1.ContentFromString
532 (PageProducer1.Content);
533 finally
534 FDTable1.Filtered := false;
535 m.Free;
536 end;
537 end;
538
539 procedure TWebModule1.WebModule1setupAction(Sender: TObject;
540 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
541 var
542 i: integer;
543 s: string;
544 begin
545 for i := 0 to Request.ContentFields.count - 1 do
546 begin
547 s := Request.ContentFields.Names[i];
548 if s <> 'home' then
549 FDTable2.FieldByName(s).AsString :=
550 Request.ContentFields.ValueFromIndex[i];
551 end;
552 Handled := false;
553 end;
554
555 procedure TWebModule1.WebModule1userdelAction(Sender: TObject;
556 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
557 var
558 s: string;
559 i: integer;
560 begin
561 i := StrToIntDef(Request.ContentFields.Values['number'], 0);
562 if (i > 0) and (FDTable1.Locate('no', i, []) = True) then
563 begin
564 s := FDTable1.FieldByName('pass').AsString;
565 if (s <> '') and (s = Request.ContentFields.Values['password']) then
566 FDTable1.Delete;
567 end;
568 Handled := false;
569 end;
570
571 procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject;
572 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
573 var
574 s: string;
575 m: TResourceStream;
576 begin
577 if FDTable1.Exists = false then
578 FDTable1.CreateTable(false, [tpTable]);
579 if FDTable2.Exists = false then
580 begin
581 FDTable2.CreateTable(false, [tpTable]);
582 FDTable2.Active := True;
583 {
584 if (Request.ServerPort = 80) or (Request.ServerPort = 443) then
585 s := 'http://' + String(Request.Host)
586 else
587 s := 'http://' + String(Request.Host) + ':' +
588 IntToStr(Request.ServerPort);
589 }
590 s := 'http://' + String(Request.Host);
591 if Request.ScriptName <> '' then
592 s := s + String(Request.ScriptName) + '/'
593 else
594 s := s + '/';
595 FDTable2.AppendRecord([s, 'pbbs clone',
596 '<center><font size=5 face=Verdana color=gray><b>P-BBS CLONE</b></font></center>',
597 'admin', '����,����,����', false]);
598 m := TResourceStream.Create(HInstance, 'setup', RT_RCDATA);
599 try
600 uri := 'setup';
601 PageProducer1.HTMLDoc.LoadFromStream(m);
602 Response.ContentType := 'text/html; charset=utf-8;';
603 Response.Content := PageProducer1.Content;
604 finally
605 m.Free;
606 end;
607 Handled := True;
608 end
609 else
610 FDTable2.Active := True;
611 if FDTable3.Exists = false then
612 begin
613 FDTable3.CreateTable(false, [tpTable]);
614 FDTable3.Active := True;
615 FDTable3.AppendRecord([5, 20, 500]);
616 end
617 else
618 FDTable3.Active := True;
619 words.DelimitedText := FDTable2.FieldByName('ngwords').AsString;
620 FDTable1.Active := True;
621 if FileExists('maintenance.htm') = True then
622 begin
623 PageProducer1.HTMLFile := 'maintenance.htm';
624 Response.ContentType := 'text/html; charset=utf-8;';
625 Response.Content := PageProducer1.Content;
626 Handled := True;
627 end;
628 {
629 t:='';
630 ssl:=TStringList.Create;
631 try
632 ssl.Add('/login');
633 ssl.Add('/admin');
634 if (ssl.IndexOf(Request.PathInfo) > -1)and(StartsText('https',FDTable2.FieldByName('home').AsString) = false) then
635 begin
636 s:=FDTable2.FieldByName('home').AsAnsiString;
637 Delete(s,Length(s),1);
638 t:='https'+Copy(s,5,Length(s))+Request.PathInfo;
639 end;
640 finally
641 ssl.Free;
642 end;
643 if t <> '' then
644 begin
645 Response.SendRedirect(t);
646 Exit;
647 end;
648 }
649 end;
650
651 procedure TWebModule1.WebModuleCreate(Sender: TObject);
652 begin
653 time := 1;
654 words := TStringList.Create;
655 end;
656
657 procedure TWebModule1.WebModuleDestroy(Sender: TObject);
658 begin
659 words.Free;
660 end;
661
662 end.
663

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26