Develop and Download Open Source Software

Browse Subversion Repository

Contents of /WebModuleUnit1.pas

Parent Directory Parent Directory | Revision Log Revision Log


Revision 21 - (show annotations) (download) (as text)
Fri Sep 30 13:16:28 2016 UTC (7 years, 5 months ago) by yamat0jp
File MIME type: text/x-pascal
File size: 23395 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, Vcl.AppEvnts, System.NetEncoding;
13
14 type
15 TWebModule1 = class(TWebModule)
16 FDTable2: TFDTable;
17 FDTable2home: TWideMemoField;
18 FDTable2title: TWideMemoField;
19 FDTable2title2: TWideMemoField;
20 FDTable2pass: TWideMemoField;
21 PageProducer1: TPageProducer;
22 DataSetPageProducer2: TDataSetPageProducer;
23 adminDS: TDataSetPageProducer;
24 FDTable2ngwords: TWideMemoField;
25 FDTable3: TFDTable;
26 FDTable3link: TIntegerField;
27 FDTable3count: TIntegerField;
28 FDTable3line: TIntegerField;
29 FDTable2mente: TBooleanField;
30 FDTable1: TFDTable;
31 FDTable1name: TWideMemoField;
32 FDTable1no: TIntegerField;
33 FDTable1date: TWideMemoField;
34 FDTable1sub: TWideMemoField;
35 FDTable1com: TWideMemoField;
36 FDTable1pass: TWideMemoField;
37 FDTable1line: TIntegerField;
38 FDConnection1: TFDConnection;
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 procedure WebModule1cssAction(Sender: TObject; Request: TWebRequest;
66 Response: TWebResponse; var Handled: Boolean);
67 procedure WebModuleAfterDispatch(Sender: TObject; Request: TWebRequest;
68 Response: TWebResponse; var Handled: Boolean);
69 procedure WebModule1archivesAction(Sender: TObject; Request: TWebRequest;
70 Response: TWebResponse; var Handled: Boolean);
71 private
72 { private ���� }
73 public
74 { public ���� }
75 user: string;
76 time: Int64;
77 words: TStringList;
78 position: integer;
79 uri: string;
80 er: string;
81 foo: string;
82 function footer(const path: string): string;
83 procedure regist(var com: string);
84 function search: string;
85 end;
86
87 var
88 WebModuleClass: TComponentClass = TWebModule1;
89
90 implementation
91
92 { %CLASSGROUP 'Vcl.Controls.TControl' }
93
94 {$R *.dfm}
95
96 procedure TWebModule1.DataSetPageProducer2HTMLTag(Sender: TObject; Tag: TTag;
97 const TagString: string; TagParams: TStrings; var ReplaceText: string);
98 begin
99 ReplaceText := FDTable1.FieldByName(TagString).AsString;
100 if TagString = 'com' then
101 regist(ReplaceText);
102 end;
103
104 function TWebModule1.footer(const path: string): string;
105 var
106 s1, s2, t1, t2: string;
107 home: string;
108 i, k, count: integer;
109 function linkcontent: string;
110 var
111 j, link: integer;
112 begin
113 result := '';
114 link := FDTable3.FieldByName('link').AsInteger;
115 if position > link div 2 then
116 begin
117 if (FDTable1.RecordCount - 1) div count < position + link div 2 then
118 i := FDTable1.RecordCount div count - link - position
119 else
120 i := -(link div 2)
121 end
122 else if position = -1 then
123 i := -position + FDTable1.RecordCount div count - link
124 else
125 i := -position;
126 for j := 0 to link do
127 begin
128 if FDTable1.RecordCount <= (position + i + j) * count then
129 break;
130 if position + i + j < 0 then
131 continue;
132 if i + j = 0 then
133 result := result + ' ' + IntToStr(position + 1) + ' '
134 else
135 result := result + Format(' <a href="' + home + path +
136 '?pos=%d#article">%d</a> ',
137 [position + i + j, position + 1 + i + j]);
138 end;
139 end;
140
141 begin
142 count := FDTable3.FieldByName('count').AsInteger;
143 home := FDTable2.FieldByName('home').AsString;
144 if position <= -1 then
145 begin
146 s1 := '<nav>���V%d�����L�����\��<br><center>Pages : [<b>';
147 s2 := '<<' + linkcontent + '>></b>] <b>���V</b><br></center></nav>';
148 result := Format(s1, [count]) + s2;
149 end
150 else
151 begin
152 if position = 0 then
153 t1 := '?pos=0'
154 else
155 t1 := '?pos=' + IntToStr(position - 1);
156 i := (FDTable1.RecordCount - 1) div count;
157 if position > i then
158 position := i;
159 if position = i then
160 begin
161 t2 := '?pos=' + position.ToString + '#article';
162 k := FDTable1.RecordCount;
163 end
164 else
165 begin
166 t2 := '?pos=' + IntToStr(position + 1) + '#article';
167 k := (position + 1) * count;
168 end;
169 s1 := '<nav>%d ���� %d ������ %d �������\��<br><center>Page : [<b>';
170 s2 := '<a href="' + home + path + t1 + '#article"><<</a>' + linkcontent +
171 '<a href="' + home + path + t2 + '">>></a></b>] <b><a href="' + home +
172 path + '#article">���V</a></b></center></nav>';
173 result := Format(s1, [FDTable1.RecordCount, position * count + 1, k]) + s2;
174 end;
175 end;
176
177 procedure TWebModule1.PageProducer1HTMLTag(Sender: TObject; Tag: TTag;
178 const TagString: string; TagParams: TStrings; var ReplaceText: string);
179 var
180 i, j, count: integer;
181 s: TDataSetPageProducer;
182 begin
183 if TagString = 'home' then
184 ReplaceText := FDTable2.FieldByName('home').AsString;
185 if (TagString = 'title') or (TagString = 'title2') then
186 ReplaceText := FDTable2.FieldByName(TagString).AsString;
187 if TagString = 'username' then
188 ReplaceText := user;
189 if TagString = 'main' then
190 begin
191 if FDTable1.RecordCount = 0 then
192 begin
193 if uri = '/index' then
194 ReplaceText := '<hr>�������e������������.<hr>';
195 end
196 else
197 begin
198 count := FDTable3.FieldByName('count').AsInteger;
199 if uri = '/admin' then
200 s := adminDS
201 else
202 s := DataSetPageProducer2;
203 if position < -1 then
204 position := -1;
205 if (position + 1) * count > FDTable1.RecordCount then
206 position := (FDTable1.RecordCount - 1) div count;
207 if position = -1 then
208 begin
209 if FDTable1.RecordCount < count then
210 j := FDTable1.RecordCount mod count
211 else
212 j := count;
213 end
214 else if FDTable1.RecordCount < (position + 1) * count then
215 j := FDTable1.RecordCount - position * count
216 else
217 j := count;
218 if position = -1 then
219 FDTable1.Last
220 else
221 FDTable1.RecNo := (position + 1) * count;
222 for i := 1 to j do
223 begin
224 ReplaceText := ReplaceText + s.Content;
225 FDTable1.Prior;
226 end;
227 ReplaceText := '<article>' + ReplaceText + '</article>' + '<hr>';
228 end;
229 end;
230 if TagString = 'footer' then
231 if foo <> '' then
232 ReplaceText := foo
233 else
234 begin
235 foo := footer(uri);
236 ReplaceText := foo;
237 end;
238 if TagString = 'text' then
239 if FDTable1.Filtered = false then
240 ReplaceText := '����������'
241 else
242 ReplaceText := '�Y������ ' + IntToStr(FDTable1.RecordCount) + ' ��' +
243 '<br><#main>';
244 if TagString = 'pass' then
245 ReplaceText := FDTable2.FieldByName('pass').AsString;
246 if TagString = 'content' then
247 ReplaceText := er;
248 if (TagString = 'mente') and (FDTable2.FieldByName('mente').AsBoolean = True)
249 then
250 ReplaceText := 'checked="checked"';
251 if TagString = 'archives' then
252 ReplaceText := search;
253 end;
254
255 procedure TWebModule1.regist(var com: string);
256 var
257 i: integer;
258 s: TStringList;
259 begin
260 s := TStringList.Create;
261 try
262 s.Text := com;
263 for i := 0 to s.count - 1 do
264 s[i] := '<p>' + s[i] + '</p>';
265 com := s.Text;
266 finally
267 s.Free;
268 end;
269 end;
270
271 function TWebModule1.search: string;
272 var
273 s: TSearchRec;
274 t: TStringList;
275 i, j: integer;
276 begin
277 t := TStringList.Create;
278 try
279 if FindFirst('.\*.sdb', 0, s) = 0 then
280 begin
281 repeat
282 t.Add(s.Name);
283 until FindNext(s) <> 0;
284 i := 0;
285 while i < t.count do
286 begin
287 case i mod 5 of
288 0:
289 t[i] := String.Format
290 ('<tr><td><a href=%s/archives?name=%s>%s</a></td>',
291 [FDTable2.FieldByName('home').AsString, t[i], t[i]]);
292 4:
293 t[i] := String.Format
294 ('<td><a href=%s/archives?name=%s>%s</a></td></tr>',
295 [FDTable2.FieldByName('home').AsString, t[i], t[i]]);
296 else
297 t[i] := String.Format('<td><a href=%s/archives?name=%s>%s</a></td>',
298 [FDTable2.FieldByName('home').AsString, t[i], t[i]]);
299 end;
300 inc(i);
301 end;
302 if i mod 5 = 0 then
303 result := '<table border=1>' + t.Text + '</table>'
304 else
305 begin
306 if i > 5 then
307 for j := i mod 5 to 4 do
308 t.Add('<td><br></td>');
309 result := '<table border=1>' + t.Text + '</tr></table>';
310 end;
311 end;
312 finally
313 FindClose(s);
314 t.Free;
315 end;
316 end;
317
318 procedure TWebModule1.WebModule1adminAction(Sender: TObject;
319 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
320 var
321 t: string;
322 x: Boolean;
323 procedure something;
324 var
325 s: TResourceStream;
326 begin
327 x := false;
328 s := TResourceStream.Create(HInstance, 'admin', RT_RCDATA);
329 try
330 uri := '/admin';
331 Response.ContentType := 'text/html; charset=utf-8;';
332 Response.Content := PageProducer1.ContentFromStream(s)
333 finally
334 s.Free;
335 end;
336 end;
337 procedure addcookie(day: integer; pass: string);
338 begin
339 with Response.Cookies.Add do
340 begin
341 path := '/';
342 Expires := Now + day;
343 Name := 'psw';
344 Value := AnsiString(pass);
345 end;
346 end;
347
348 begin
349 if Request.Query = 'del' then
350 begin
351 addcookie(-3, '');
352 Response.SendRedirect(FDTable2.FieldByName('home').AsAnsiString + '/');
353 Exit;
354 end;
355 x := True;
356 t := Request.ContentFields.Values['password'];
357 position := StrToIntDef(Request.QueryFields.Values['pos'], -1);
358 if t <> '' then
359 begin
360 addcookie(14, t);
361 if t = FDTable2.FieldByName('pass').AsString then
362 something;
363 end
364 else if Request.CookieFields.Values['psw'] = FDTable2.FieldByName('pass').AsString
365 then
366 something;
367 if x = True then
368 Response.SendRedirect(FDTable2.FieldByName('home').AsAnsiString + '/login');
369 end;
370
371 procedure TWebModule1.WebModule1admindelAction(Sender: TObject;
372 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
373 var
374 i: integer;
375 begin
376 for i := 0 to Request.ContentFields.count - 1 do
377 if FDTable1.Locate('no', Request.ContentFields.ValueFromIndex[i], []) = True
378 then
379 FDTable1.Delete;
380 Response.SendRedirect(FDTable2.FieldByName('home').AsAnsiString + '/admin');
381 end;
382
383 procedure TWebModule1.WebModule1adminsetAction(Sender: TObject;
384 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
385 var
386 s: string;
387 x: Boolean;
388 begin
389 s := Request.ContentFields.Values['pass'];
390 if FDTable2.FieldByName('pass').AsString <> s then
391 begin
392 FDTable2.Edit;
393 FDTable2.FieldByName('pass').AsString := s;
394 FDTable2.Post;
395 with Response.Cookies.Add do
396 begin
397 path := '/';
398 Expires := Now + 14;
399 Name := 'psw';
400 Value := AnsiString(s);
401 end;
402 end;
403 x := Request.ContentFields.Values['mente'] = 'on';
404 if FDTable2.FieldByName('mente').AsBoolean <> x then
405 begin
406 FDTable2.Edit;
407 FDTable2.FieldByName('mente').AsBoolean := x;
408 FDTable2.Post;
409 end;
410 Response.SendRedirect(FDTable2.FieldByName('home').AsAnsiString + '/admin');
411 end;
412
413 procedure TWebModule1.WebModule1archivesAction(Sender: TObject;
414 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
415 var
416 s: string;
417 t: TResourceStream;
418 begin
419 s := Request.QueryFields.Values['name'];
420 if s = '' then
421 begin
422 t := TResourceStream.Create(HInstance, 'archives', RT_RCDATA);
423 try
424 Response.ContentType := 'text/html; charset=utf-8;';
425 Response.Content := PageProducer1.ContentFromStream(t);
426 finally
427 t.Free;
428 end;
429 end
430 else if FileExists(s) = True then
431 begin
432 Handled := false;
433 with Response.Cookies.Add do
434 begin
435 Name := 'db';
436 path := '/';
437 Expires := Now + 1;
438 Value := AnsiString(s);
439 end;
440 FDConnection1.Open('Database=' + s + ';LockingMode=Normal;DriverID=SQLite');
441 FDTable1.Open;
442 FDTable2.Open;
443 FDTable3.Open;
444 end;
445 end;
446
447 procedure TWebModule1.WebModule1cssAction(Sender: TObject; Request: TWebRequest;
448 Response: TWebResponse; var Handled: Boolean);
449 var
450 s: string;
451 begin
452 s := Request.QueryFields.Values['css'];
453 if (s = 'main') or (s = 'pc') or (s = 'smart') or (s = 'tablet') then
454 begin
455 Response.ContentType := 'text/css';
456 Response.ContentStream := TResourceStream.Create(HInstance, s, RT_RCDATA);
457 end;
458 end;
459
460 procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
461 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
462 var
463 s: TResourceStream;
464 t: TURLEncoding;
465 begin
466 if FDTable2.FieldByName('mente').AsBoolean = True then
467 begin
468 s := TResourceStream.Create(HInstance, 'mente', RT_RCDATA);
469 try
470 uri := '/mente';
471 Response.ContentType := 'text/html; charset=utf-8;';
472 Response.Content := PageProducer1.ContentFromStream(s);
473 finally
474 s.Free;
475 end;
476 Exit;
477 end;
478 position := StrToIntDef(Request.QueryFields.Values['pos'], -1);
479 s := TResourceStream.Create(HInstance, 'index', RT_RCDATA);
480 t := TURLEncoding.Create;
481 try
482 user := t.Decode(Request.CookieFields.Values['UID']);
483 uri := '/index';
484 Response.ContentType := 'text/html; charset=utf-8;';
485 Response.Content := PageProducer1.ContentFromStream(s);
486 finally
487 s.Free;
488 t.Free;
489 end;
490 end;
491
492 procedure TWebModule1.WebModule1loginAction(Sender: TObject;
493 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
494 var
495 s: TResourceStream;
496 begin
497 s := TResourceStream.Create(HInstance, 'login', RT_RCDATA);
498 try
499 uri := '/login';
500 Response.ContentType := 'text/html; charset=utf-8;';
501 Response.Content := PageProducer1.ContentFromStream(s);
502 finally
503 s.Free;
504 end;
505 end;
506
507 procedure TWebModule1.WebModule1registAction(Sender: TObject;
508 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
509 var
510 na, sub, com, pass: string;
511 s1: string;
512 no, line: integer;
513 i: integer;
514 s: TResourceStream;
515 t: TURLEncoding;
516 begin
517 with Request.ContentFields do
518 begin
519 na := Values['name'];
520 sub := Values['title'];
521 com := Values['comment'];
522 pass := Values['password'];
523 end;
524 er := '';
525 line := 0;
526 if na = '' then
527 na := '�N������';
528 if sub = '' then
529 sub := '�^�C�g������';
530 if com = '' then
531 er := '�{��������������.'#$D#$A
532 else
533 for i := 1 to Length(com) do
534 if Copy(com, i, i + 2) = #$D#$A then
535 inc(line);
536 for i := 0 to words.count - 1 do
537 if ContainsText(AnsiString(com), AnsiString(words[i])) = True then
538 begin
539 s1 := words[i];
540 if s1[1] = '<' then
541 begin
542 if Pos(' ', s1) = 0 then
543 s1 := Copy(s1, 2, Length(s1))
544 else
545 s1 := Copy(s1, 2, Pos(' ', s1) - 1);
546 er := er + '���~�^�O������������. ���:' + s1 + #$D#$A;
547 end
548 else
549 begin
550 er := er + '���~����������������.';
551 break;
552 end;
553 end;
554 if FDTable1.RecordCount = 0 then
555 no := 1
556 else
557 begin
558 FDTable1.Last;
559 no := FDTable1.FieldByName('no').AsInteger + 1;
560 if SecondsBetween(Now, StrToDateTime(FDTable1.FieldByName('date').AsString))
561 < time then
562 er := '����������������.';
563 end;
564 if er <> '' then
565 begin
566 Response.ContentType := 'text/html; charset=utf-8;';
567 s := TResourceStream.Create(HInstance, 'regist', RT_RCDATA);
568 try
569 Response.Content := PageProducer1.ContentFromStream(s);
570 finally
571 s.Free;
572 end;
573 Exit;
574 end;
575 t := TURLEncoding.Create;
576 try
577 FDTable1.AppendRecord([na, no, DateTimeToStr(Now), sub, com, pass, line]);
578 finally
579 t.Free;
580 end;
581 with Response.Cookies.Add do
582 begin
583 path := '/';
584 Name := 'UID';
585 Value := AnsiString(na);
586 Expires := Now + 1;
587 end;
588 Response.SendRedirect(FDTable2.FieldByName('home').AsAnsiString +
589 '/index#article');
590 end;
591
592 procedure TWebModule1.WebModule1searchAction(Sender: TObject;
593 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
594 var
595 s: TStringList;
596 t1, t2, t3: string;
597 i, j: integer;
598 m: TResourceStream;
599 begin
600 t1 := Request.ContentFields.Values['filter'];
601 t3 := '';
602 s := TStringList.Create;
603 try
604 s.DelimitedText := Request.ContentFields.Values['word1'];
605 for i := 0 to s.count - 1 do
606 begin
607 t2 := Trim(s[i]);
608 if t2 = '' then
609 continue;
610 if t3 <> '' then
611 t3 := t3 + ' and ';
612 t3 := t3 + t1 + ' LIKE ''%' + t2 + '%''';
613 end;
614 finally
615 s.Free;
616 end;
617 if t3 = '' then
618 begin
619 m := TResourceStream.Create(HInstance, 'search', RT_RCDATA);
620 try
621 Response.ContentType := 'text/html; charset=utf-8;';
622 Response.Content := PageProducer1.ContentFromStream(m);
623 finally
624 m.Free;
625 end;
626 Exit;
627 end;
628 FDTable1.Filter := t3;
629 FDTable1.Filtered := True;
630 m := TResourceStream.Create(HInstance, 'search', RT_RCDATA);
631 try
632 j := 0;
633 for i := 1 to FDTable1.RecordCount - 1 do
634 begin
635 inc(j, FDTable1.FieldByName('line').AsInteger);
636 FDTable1.Next;
637 end;
638 PageProducer1.HTMLDoc.LoadFromStream(m);
639 Response.ContentType := 'text/html; charset=utf-8;';
640 if (t3 <> '') and (j > FDTable3.FieldByName('line').AsInteger) then
641 begin
642 t1 := PageProducer1.Content;
643 i := Pos('<#main>', t1);
644 Delete(t1, i, Length('<#main>'));
645 Response.Content := t1 + Format('�\���s����%d�s��������������.',
646 [FDTable3.FieldByName('line').AsInteger]);
647 end
648 else
649 Response.Content := PageProducer1.ContentFromString
650 (PageProducer1.Content);
651 finally
652 FDTable1.Filtered := false;
653 m.Free;
654 end;
655 end;
656
657 procedure TWebModule1.WebModule1setupAction(Sender: TObject;
658 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
659 var
660 i: integer;
661 s: string;
662 begin
663 FDTable2.Edit;
664 for i := 0 to Request.ContentFields.count - 1 do
665 begin
666 s := Request.ContentFields.Names[i];
667 FDTable2.FieldByName(s).AsString := Request.ContentFields.ValueFromIndex[i]
668 end;
669 FDTable2.Post;
670 Handled := false;
671 end;
672
673 procedure TWebModule1.WebModule1userdelAction(Sender: TObject;
674 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
675 var
676 s: string;
677 i: integer;
678 begin
679 i := StrToIntDef(Request.ContentFields.Values['number'], 0);
680 if (i > 0) and (FDTable1.Locate('no', i, []) = True) then
681 begin
682 s := FDTable1.FieldByName('pass').AsString;
683 if (s <> '') and (s = Request.ContentFields.Values['password']) then
684 FDTable1.Delete;
685 end;
686 Handled := false;
687 end;
688
689 procedure TWebModule1.WebModuleAfterDispatch(Sender: TObject;
690 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
691 begin
692 foo := '';
693 end;
694
695 procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject;
696 Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
697 var
698 m: TResourceStream;
699 s: string;
700 begin
701 s := Request.CookieFields.Values['db'];
702 if (FDConnection1.Connected = false) or
703 (s <> FDConnection1.Params.Values['DataBase']) then
704 begin
705 if (s <> '') and (s <> FDConnection1.Params.Values['DataBase']) then
706 FDConnection1.Open('Database=' + s +
707 ';LockingMode=Normal;DriverID=SQLite')
708 else
709 FDConnection1.Open
710 ('Database=data.sdb;LockingMode=Normal;DriverID=SQLite');
711 end;
712 if FDTable1.Exists = false then
713 FDTable1.CreateTable(false, [tpTable]);
714 if FDTable2.Exists = false then
715 begin
716 FDTable2.CreateTable(false, [tpTable]);
717 FDTable2.Open;
718 FDTable2.AppendRecord([Request.ScriptName, 'pbbs clone',
719 '<h1 style=font-family:Verdana;color:gray;font-weight:bold;text-align:center>P-BBS CLONE</h1>',
720 'admin', '����,����,����,<style,<script,<link', false]);
721 m := TResourceStream.Create(HInstance, 'setup', RT_RCDATA);
722 try
723 uri := '/setup';
724 Response.ContentType := 'text/html; charset=utf-8;';
725 Response.Content := PageProducer1.ContentFromStream(m);
726 finally
727 m.Free;
728 end;
729 Handled := True;
730 end
731 else if FDTable2.Active = false then
732 FDTable2.Open;
733 if FDTable3.Exists = false then
734 begin
735 FDTable3.CreateTable(false, [tpTable]);
736 FDTable3.Open;
737 FDTable3.AppendRecord([5, 20, 500]);
738 end
739 else if FDTable3.Active = false then
740 FDTable3.Open;
741 words.DelimitedText := FDTable2.FieldByName('ngwords').AsString;
742 if FDTable1.Active = false then
743 FDTable1.Open;
744 {
745 t:='';
746 ssl:=TStringList.Create;
747 try
748 ssl.Add('/login');
749 ssl.Add('/admin');
750 if (ssl.IndexOf(Request.PathInfo) > -1)and(StartsText('https',FDTable2.FieldByName('home').AsString) = false) then
751 begin
752 s:=FDTable2.FieldByName('home').AsAnsiString;
753 Delete(s,Length(s),1);
754 t:='https'+Copy(s,5,Length(s))+Request.PathInfo;
755 end;
756 finally
757 ssl.Free;
758 end;
759 if t <> '' then
760 begin
761 Response.SendRedirect(t);
762 Exit;
763 end;
764 }
765 end;
766
767 procedure TWebModule1.WebModuleCreate(Sender: TObject);
768 begin
769 time := 1;
770 words := TStringList.Create;
771 end;
772
773 procedure TWebModule1.WebModuleDestroy(Sender: TObject);
774 begin
775 words.Free;
776 end;
777
778 end.
779

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