magListwriterId: TIntegerField;
magListmagId: TIntegerField;
newsmagId: TIntegerField;
- newsno: TIntegerField;
newsday: TDateField;
newschanged: TBooleanField;
newsenabled: TBooleanField;
magday: TDateField;
maglastDay: TDateField;
magenable: TBooleanField;
+ image: TFDTable;
+ newsnewsId: TIntegerField;
procedure DataModuleCreate(Sender: TObject);
private
{ Private \90é\8c¾ }
procedure deleteWriter(id: integer);
procedure getView(id, num: integer; out Data: TJSONObject); overload;
procedure getView(id: integer; out Data: TJSONObject); overload;
+ procedure viewList(id: integer; out Data: TJSONObject);
procedure magazines(id: integer; out Data: TJSONObject);
procedure magListAll(out Data: TJSONObject);
procedure magData(id: integer; out Data: TJSONObject);
procedure userView(id: integer; out Data: TJSONObject);
function loginReader(data: TJSONObject): integer;
function loginWriter(data: TJSONObject): integer;
+ procedure mainView(id: integer; out data: TJSONObject);
+ procedure imageView(id: integer; out data: TJSONObject);
+ function imageId(data: TJSONObject): integer;
end;
var
begin
// FDQuery1.ExecSQL(tmp+'database(number int primary key, magId int, readerId int, writeId int);');
FDQuery1.ExecSQL
- (tmp + 'mag(magId int primary key, magName varchar(20), comment varchar(50), day date, lastDay date, enable bool);');
+ (tmp + 'mag(magId int primary key, magNum varchar(10), magName varchar(20), comment varchar(50), day date, lastDay date, enable bool);');
FDQuery1.ExecSQL
(tmp + 'writer(writerId int primary key, writer varchar(20), mail varchar(20), password varchar(20));');
FDQuery1.ExecSQL
(tmp + 'reader(readerId int primary key, reader varchar(20), mail varchar(20), password varchar(20));');
FDQuery1.ExecSQL
- (tmp + 'news(magId int, no int, day date, changed bool, enabled bool, primary key (magId,no));');
+ (tmp + 'news(magId int, newsId int, day date, changed bool, enabled bool, primary key (magId,newsId));');
FDQuery1.ExecSQL
(tmp + 'indexTable(readerId int, magId int, primary key (readerId,magId));');
FDQuery1.ExecSQL
(tmp + 'magList(writerId int, magId int, primary key (writerId,magId));');
-// database.Open;
+ FDQuery1.ExecSQL(tmp+'image(id int primary key, writerId int, number int, name varchar(20), data text);');
+// database.Open; \83V\83\83\83b\83t\83\8b\89Â\94\\82É\82·\82é\82½\82ß\92Ê\82µ\94Ô\8d\86\82ð\95t\82¯\82½\82Ù\82¤\82ª\97Ç\82¢\82ç\82µ\82¢
mag.Open;
writer.Open;
reader.Open;
news.Open;
indexTable.Open;
magList.Open;
+ image.Open;
end;
procedure TDataModule1.deleteMagazine(id: integer);
data.AddPair('mag',ar);
end;
+procedure TDataModule1.viewList(id: integer; out Data: TJSONObject);
+begin
+
+end;
+
procedure TDataModule1.custData(id: integer; Data: TJSONObject);
begin
if writer.Locate('writerid', id) = true then
Data := makeTable(FDQuery1);
end;
+function TDataModule1.imageId(data: TJSONObject): integer;
+var
+ writerId, number: integer;
+begin
+ writerId:=data.Values['id'].Value.ToInteger;
+ number:=data.Values['number'].Value.ToInteger;
+ if image.Locate('writerId;number',VarArrayOf([writerId,number])) = true then
+ result:=image.FieldByName('id').AsInteger;
+end;
+
+procedure TDataModule1.imageView(id: integer; out data: TJSONObject);
+begin
+ data:=TJSONObject.Create;
+ if image.Locate('id',id) = true then
+ begin
+ data.AddPair('name',image.FieldByName('name').AsString);
+ data.AddPair('data',image.FieldByName('data').AsString);
+ end;
+end;
+
function TDataModule1.loginReader(data: TJSONObject): integer;
var
ma,pa: string;
Data.AddPair('enable', val);
end;
+procedure TDataModule1.mainView(id: integer; out data: TJSONObject);
+begin
+ data:=TJSONObject.Create;
+ FDQuery1.SQL.Clear;
+ FDQuery1.SQL.Add('select * from news,magId where news.magId = magName.magId');
+ FDQuery1.SQL.Add(' and magId = :id order by day;');
+ FDQUery1.Params.ParamByName('id').AsInteger:=id;
+ while FDQUery1.Eof = false do
+ begin
+ if FDQuery1.FieldByName('enebled').AsBoolean = true then
+ begin
+ if FDQuery1.FieldByName('changed').AsBoolean = true then
+ data.AddPair('changed',TJSONTrue.Create);
+ data.AddPair('',FDQuery1.FieldByName('').AsString);
+ end;
+ FDQuery1.Next;
+ end;
+end;
+
procedure TDataModule1.magazines(id: integer; out Data: TJSONObject);
var
d: TJSONObject;
function TDataModule1.makeTable(Sender: TObject): TJSONObject;
var
+ day: string;
blob: TStream;
mem: TStringList;
+ ar: TJSONArray;
+ d: TJSONObject;
begin
- result := TJSONObject.Create;
+ ar:=TJSONArray.Create;
mem := TStringList.Create;
with Sender as TFDQuery do
begin
First;
while Eof = false do
begin
+ d:=TJSONObject.Create;
+ ar.Add(d);
+ day := FieldByName('day').AsString;
if FieldByName('updated').AsBoolean = true then
- result.AddPair('hint', Format('\82±\82Ì\8bL\8e\96\82Í\8dX\90V\82³\82ê\82Ü\82µ\82½:(%s)\93ú.',
- [FieldByName('day').AsString]));
+ d.AddPair('hint', Format('\82±\82Ì\8bL\8e\96\82Í\8dX\90V\82³\82ê\82Ü\82µ\82½:(%s)\93ú.',[day]));
blob := CreateBlobStream(FieldByName('file'), bmRead);
mem.LoadFromStream(blob);
blob.Free;
- result.AddPair('text', mem.Text);
+ d.AddPair('text',mem.Text);
+ d.AddPair('day',day);
Next;
end;
end;
mem.Free;
+ result := TJSONObject.Create;
+ result.AddPair('news',ar);
end;
procedure TDataModule1.postMessage(id: integer; Data: TJSONObject);
OnAction = WebModule1detailAction
end
item
+ Name = 'selection'
+ PathInfo = '/reader/select'
+ OnAction = WebModule1selectionAction
+ end
+ item
Name = 'readerData'
PathInfo = '/reader/data'
OnAction = WebModule1readerDataAction
end
item
- Name = 'selection'
- PathInfo = '/reader/select'
- OnAction = WebModule1selectionAction
+ Name = 'readerTop'
+ PathInfo = '/reader/top'
+ OnAction = WebModule1readerTopAction
end
item
Name = 'writerData'
OnAction = WebModule1writerDataAction
end
item
+ Name = 'writerTop'
+ PathInfo = '/writer/top'
+ OnAction = WebModule1writerTopAction
+ end
+ item
MethodType = mtPost
Name = 'writeMag'
PathInfo = '/writer/regist'
OnAction = WebModule1writeMagAction
end
item
- Name = 'writerTop'
- PathInfo = '/writer/top'
- OnAction = WebModule1writerTopAction
- end
- item
MethodType = mtPost
Name = 'login'
PathInfo = '/reader/login'
Name = 'logout'
PathInfo = '/logout'
OnAction = WebModule1logoutAction
+ end
+ item
+ Name = 'mainView'
+ PathInfo = '/reader/top'
+ OnAction = WebModule1mainViewAction
+ end
+ item
+ MethodType = mtGet
+ Name = 'image'
+ PathInfo = '/img'
+ OnAction = WebModule1imageAction
+ end
+ item
+ Enabled = False
+ Name = 'sumbnail'
+ PathInfo = '/sum'
end>
Height = 225
Width = 415
Left = 112
Top = 80
end
+ object mainView: TPageProducer
+ HTMLDoc.Strings = (
+ '<!DOCTYPE html>'
+ '<html lang="ja">'
+ '<head>'
+ ' <meta charset="UTF-8">'
+
+ ' <meta name="viewport" content="width=device-width, initial-s' +
+ 'cale=1.0">'
+ ' <title>Document</title>'
+ '</head>'
+ '<body>'
+ ' <p>'#12491#12517#12540#12473#12398#25968#12293#12434#12362#27005#12375#12415#12367#12384#12373#12356
+ ' {{#news}}'
+ ' <hr>'
+ ' <p>[{{magName}}] ({{day}})'
+ ' {{text}}'
+ ' {{#updated}}'
+ ' <p>{{hint}}'
+ ' {{/updated}}'
+ ' {{/news}}'
+ '</body>'
+ '</html>')
+ Left = 240
+ Top = 24
+ end
end
writerTop: TPageProducer;
writerData: TPageProducer;
backnumber: TPageProducer;
+ mainView: TPageProducer;
procedure WebModule1DefaultHandlerAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
procedure WebModuleCreate(Sender: TObject);
Response: TWebResponse; var Handled: Boolean);
procedure WebModule1logoutAction(Sender: TObject; Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean);
+ procedure WebModule1mainViewAction(Sender: TObject; Request: TWebRequest;
+ Response: TWebResponse; var Handled: Boolean);
+ procedure WebModule1imageAction(Sender: TObject; Request: TWebRequest;
+ Response: TWebResponse; var Handled: Boolean);
+ procedure WebModule1readerTopAction(Sender: TObject; Request: TWebRequest;
+ Response: TWebResponse; var Handled: Boolean);
private
{ private \90é\8c¾ }
writerId: integer;
implementation
-uses SynMustache, SynCommons, System.JSON, Unit1;
+uses SynMustache, SynCommons, System.JSON, Unit1, System.NetEncoding;
{ %CLASSGROUP 'Vcl.Controls.TControl' }
Response.Content := mustache.RenderJSON(data.ToString);
end;
+procedure TWebModule1.WebModule1imageAction(Sender: TObject;
+ Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
+var
+ id: integer;
+ data: TJSONObject;
+ mem: TMemoryStream;
+ raw: TBytes;
+begin
+ data:=TJSONObject.Create;
+ data.AddPair('id',TJSONNumber.Create(Request.QueryFields.Values['id']));
+ data.AddPair('number',TJSONNumber.Create(Request.QueryFields.Values['num']));
+ id :=DataModule1.imageId(data);
+ DataModule1.imageView(id,data);
+ mem:=TMemoryStream.Create;
+ raw:=TNetEncoding.Base64.DecodeStringToBytes(data.Values['data'].Value);
+ mem.WriteBuffer(raw,Length(raw));
+ mem.Position:=0;
+ Finalize(raw);
+ Response.ContentType:='jpeg/image';
+ Response.ContentStream:=mem;
+end;
+
procedure TWebModule1.WebModule1loginAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
Handled:=false;
end;
+procedure TWebModule1.WebModule1mainViewAction(Sender: TObject;
+ Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
+var
+ data: TJSONObject;
+begin
+ Response.ContentType:='text/html;charset=utf-8';
+ DataModule1.mainView(readerId,data);
+ mustache:=TSynMustache.Parse(mainView.Content);
+ Response.Content := mustache.RenderJSON(data.ToJSON);
+end;
+
procedure TWebModule1.WebModule1readerDataAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
Response.Content := mustache.RenderJSON(data.ToJSON);
end;
+procedure TWebModule1.WebModule1readerTopAction(Sender: TObject;
+ Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
+var
+ data: TJSONObject;
+begin
+ Response.ContentType:='text/html;charset=utf-8';
+ DataModule1.getView(readerId,data);
+ mustache:=TSynMustache.Parse(mainView.Content);
+ Response.Content:=mustache.RenderJSON(data.ToJSON);
+end;
+
procedure TWebModule1.WebModule1selectionAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var