From 7dd6357f616913a5bce8886fee5f4dea165b033f Mon Sep 17 00:00:00 2001 From: michael Date: Thu, 27 May 2010 14:06:12 +0000 Subject: * Examples added git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@15333 3ad0048d-3df7-0310-abae-a5850022a9f2 --- .../fcl-web/examples/webdata/demo/createusers.lpi | 77 +++++ .../fcl-web/examples/webdata/demo/createusers.lpr | 136 ++++++++ .../examples/webdata/demo/extgrid-json.html | 11 + .../fcl-web/examples/webdata/demo/extgrid-json.js | 95 ++++++ .../fcl-web/examples/webdata/demo/extgrid-xml.html | 11 + .../fcl-web/examples/webdata/demo/extgrid-xml.js | 98 ++++++ packages/fcl-web/examples/webdata/demo/extgrid.lpi | 73 +++++ packages/fcl-web/examples/webdata/demo/extgrid.lpr | 14 + .../fcl-web/examples/webdata/demo/lazwebdata.pas | 22 ++ .../fcl-web/examples/webdata/demo/reglazwebdata.pp | 78 +++++ packages/fcl-web/examples/webdata/demo/wmusers.lfm | 36 ++ packages/fcl-web/examples/webdata/demo/wmusers.lrs | 12 + packages/fcl-web/examples/webdata/demo/wmusers.pp | 337 +++++++++++++++++++ .../examples/webdata/demo2/extgrid-json.html | 11 + .../fcl-web/examples/webdata/demo2/extgrid-json.js | 97 ++++++ .../examples/webdata/demo2/extgrid-xml.html | 11 + .../fcl-web/examples/webdata/demo2/extgrid-xml.js | 100 ++++++ .../fcl-web/examples/webdata/demo2/extgrid.lpi | 84 +++++ .../fcl-web/examples/webdata/demo2/extgrid.lpr | 16 + .../fcl-web/examples/webdata/demo2/wmusers.lfm | 46 +++ .../fcl-web/examples/webdata/demo2/wmusers.lrs | 18 + packages/fcl-web/examples/webdata/demo2/wmusers.pp | 86 +++++ .../examples/webdata/demo3/extgrid-json.html | 11 + .../fcl-web/examples/webdata/demo3/extgrid-json.js | 97 ++++++ .../examples/webdata/demo3/extgrid-xml.html | 11 + .../fcl-web/examples/webdata/demo3/extgrid-xml.js | 100 ++++++ .../fcl-web/examples/webdata/demo3/extgrid.lpi | 334 +++++++++++++++++++ .../fcl-web/examples/webdata/demo3/extgrid.lpr | 16 + .../fcl-web/examples/webdata/demo3/tralala.lfm | 9 + .../fcl-web/examples/webdata/demo3/tralala.lrs | 7 + packages/fcl-web/examples/webdata/demo3/tralala.pp | 28 ++ .../fcl-web/examples/webdata/demo3/wmusers.lfm | 49 +++ .../fcl-web/examples/webdata/demo3/wmusers.lrs | 21 ++ packages/fcl-web/examples/webdata/demo3/wmusers.pp | 68 ++++ .../fcl-web/examples/webdata/demo4/dmusers.lfm | 27 ++ .../fcl-web/examples/webdata/demo4/dmusers.lrs | 12 + packages/fcl-web/examples/webdata/demo4/dmusers.pp | 52 +++ .../examples/webdata/demo4/extgrid-json.html | 11 + .../fcl-web/examples/webdata/demo4/extgrid-json.js | 97 ++++++ .../examples/webdata/demo4/extgrid-xml.html | 11 + .../fcl-web/examples/webdata/demo4/extgrid-xml.js | 100 ++++++ .../fcl-web/examples/webdata/demo4/extgrid.lpi | 93 ++++++ .../fcl-web/examples/webdata/demo4/extgrid.lpr | 15 + .../fcl-web/examples/webdata/demo4/wmjsonusers.lfm | 18 + .../fcl-web/examples/webdata/demo4/wmjsonusers.lrs | 11 + .../fcl-web/examples/webdata/demo4/wmjsonusers.pp | 34 ++ .../fcl-web/examples/webdata/demo4/wmxmlusers.lfm | 18 + .../fcl-web/examples/webdata/demo4/wmxmlusers.lrs | 11 + .../fcl-web/examples/webdata/demo4/wmxmlusers.pp | 34 ++ .../examples/webdata/demo5/extgrid-json.html | 11 + .../fcl-web/examples/webdata/demo5/extgrid-json.js | 97 ++++++ .../examples/webdata/demo5/extgrid-xml.html | 11 + .../fcl-web/examples/webdata/demo5/extgrid-xml.js | 100 ++++++ .../fcl-web/examples/webdata/demo5/extgrid.lpi | 75 +++++ .../fcl-web/examples/webdata/demo5/extgrid.lpr | 15 + .../fcl-web/examples/webdata/demo5/wmusers.lfm | 29 ++ .../fcl-web/examples/webdata/demo5/wmusers.lrs | 15 + packages/fcl-web/examples/webdata/demo5/wmusers.pp | 85 +++++ .../examples/webdata/demo6/extgrid-json.html | 11 + .../fcl-web/examples/webdata/demo6/extgrid-json.js | 97 ++++++ .../examples/webdata/demo6/extgrid-xml.html | 11 + .../fcl-web/examples/webdata/demo6/extgrid-xml.js | 100 ++++++ .../fcl-web/examples/webdata/demo6/extgrid.ini | 4 + .../fcl-web/examples/webdata/demo6/extgrid.lpi | 362 +++++++++++++++++++++ .../fcl-web/examples/webdata/demo6/extgrid.lpr | 16 + .../fcl-web/examples/webdata/demo6/wmusers.lfm | 131 ++++++++ .../fcl-web/examples/webdata/demo6/wmusers.lrs | 43 +++ packages/fcl-web/examples/webdata/demo6/wmusers.pp | 107 ++++++ packages/fcl-web/examples/webdata/demos.txt | 40 +++ packages/fcl-web/examples/webdata/users.dbf | Bin 0 -> 2598 bytes 70 files changed, 4124 insertions(+) create mode 100644 packages/fcl-web/examples/webdata/demo/createusers.lpi create mode 100644 packages/fcl-web/examples/webdata/demo/createusers.lpr create mode 100644 packages/fcl-web/examples/webdata/demo/extgrid-json.html create mode 100644 packages/fcl-web/examples/webdata/demo/extgrid-json.js create mode 100644 packages/fcl-web/examples/webdata/demo/extgrid-xml.html create mode 100644 packages/fcl-web/examples/webdata/demo/extgrid-xml.js create mode 100644 packages/fcl-web/examples/webdata/demo/extgrid.lpi create mode 100644 packages/fcl-web/examples/webdata/demo/extgrid.lpr create mode 100644 packages/fcl-web/examples/webdata/demo/lazwebdata.pas create mode 100644 packages/fcl-web/examples/webdata/demo/reglazwebdata.pp create mode 100644 packages/fcl-web/examples/webdata/demo/wmusers.lfm create mode 100644 packages/fcl-web/examples/webdata/demo/wmusers.lrs create mode 100644 packages/fcl-web/examples/webdata/demo/wmusers.pp create mode 100644 packages/fcl-web/examples/webdata/demo2/extgrid-json.html create mode 100644 packages/fcl-web/examples/webdata/demo2/extgrid-json.js create mode 100644 packages/fcl-web/examples/webdata/demo2/extgrid-xml.html create mode 100644 packages/fcl-web/examples/webdata/demo2/extgrid-xml.js create mode 100644 packages/fcl-web/examples/webdata/demo2/extgrid.lpi create mode 100644 packages/fcl-web/examples/webdata/demo2/extgrid.lpr create mode 100644 packages/fcl-web/examples/webdata/demo2/wmusers.lfm create mode 100644 packages/fcl-web/examples/webdata/demo2/wmusers.lrs create mode 100644 packages/fcl-web/examples/webdata/demo2/wmusers.pp create mode 100644 packages/fcl-web/examples/webdata/demo3/extgrid-json.html create mode 100644 packages/fcl-web/examples/webdata/demo3/extgrid-json.js create mode 100644 packages/fcl-web/examples/webdata/demo3/extgrid-xml.html create mode 100644 packages/fcl-web/examples/webdata/demo3/extgrid-xml.js create mode 100644 packages/fcl-web/examples/webdata/demo3/extgrid.lpi create mode 100644 packages/fcl-web/examples/webdata/demo3/extgrid.lpr create mode 100644 packages/fcl-web/examples/webdata/demo3/tralala.lfm create mode 100644 packages/fcl-web/examples/webdata/demo3/tralala.lrs create mode 100644 packages/fcl-web/examples/webdata/demo3/tralala.pp create mode 100644 packages/fcl-web/examples/webdata/demo3/wmusers.lfm create mode 100644 packages/fcl-web/examples/webdata/demo3/wmusers.lrs create mode 100644 packages/fcl-web/examples/webdata/demo3/wmusers.pp create mode 100644 packages/fcl-web/examples/webdata/demo4/dmusers.lfm create mode 100644 packages/fcl-web/examples/webdata/demo4/dmusers.lrs create mode 100644 packages/fcl-web/examples/webdata/demo4/dmusers.pp create mode 100644 packages/fcl-web/examples/webdata/demo4/extgrid-json.html create mode 100644 packages/fcl-web/examples/webdata/demo4/extgrid-json.js create mode 100644 packages/fcl-web/examples/webdata/demo4/extgrid-xml.html create mode 100644 packages/fcl-web/examples/webdata/demo4/extgrid-xml.js create mode 100644 packages/fcl-web/examples/webdata/demo4/extgrid.lpi create mode 100644 packages/fcl-web/examples/webdata/demo4/extgrid.lpr create mode 100644 packages/fcl-web/examples/webdata/demo4/wmjsonusers.lfm create mode 100644 packages/fcl-web/examples/webdata/demo4/wmjsonusers.lrs create mode 100644 packages/fcl-web/examples/webdata/demo4/wmjsonusers.pp create mode 100644 packages/fcl-web/examples/webdata/demo4/wmxmlusers.lfm create mode 100644 packages/fcl-web/examples/webdata/demo4/wmxmlusers.lrs create mode 100644 packages/fcl-web/examples/webdata/demo4/wmxmlusers.pp create mode 100644 packages/fcl-web/examples/webdata/demo5/extgrid-json.html create mode 100644 packages/fcl-web/examples/webdata/demo5/extgrid-json.js create mode 100644 packages/fcl-web/examples/webdata/demo5/extgrid-xml.html create mode 100644 packages/fcl-web/examples/webdata/demo5/extgrid-xml.js create mode 100644 packages/fcl-web/examples/webdata/demo5/extgrid.lpi create mode 100644 packages/fcl-web/examples/webdata/demo5/extgrid.lpr create mode 100644 packages/fcl-web/examples/webdata/demo5/wmusers.lfm create mode 100644 packages/fcl-web/examples/webdata/demo5/wmusers.lrs create mode 100644 packages/fcl-web/examples/webdata/demo5/wmusers.pp create mode 100644 packages/fcl-web/examples/webdata/demo6/extgrid-json.html create mode 100644 packages/fcl-web/examples/webdata/demo6/extgrid-json.js create mode 100644 packages/fcl-web/examples/webdata/demo6/extgrid-xml.html create mode 100644 packages/fcl-web/examples/webdata/demo6/extgrid-xml.js create mode 100644 packages/fcl-web/examples/webdata/demo6/extgrid.ini create mode 100644 packages/fcl-web/examples/webdata/demo6/extgrid.lpi create mode 100644 packages/fcl-web/examples/webdata/demo6/extgrid.lpr create mode 100644 packages/fcl-web/examples/webdata/demo6/wmusers.lfm create mode 100644 packages/fcl-web/examples/webdata/demo6/wmusers.lrs create mode 100644 packages/fcl-web/examples/webdata/demo6/wmusers.pp create mode 100644 packages/fcl-web/examples/webdata/demos.txt create mode 100644 packages/fcl-web/examples/webdata/users.dbf (limited to 'packages/fcl-web/examples/webdata') diff --git a/packages/fcl-web/examples/webdata/demo/createusers.lpi b/packages/fcl-web/examples/webdata/demo/createusers.lpi new file mode 100644 index 0000000000..4fd6fedf28 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo/createusers.lpi @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/fcl-web/examples/webdata/demo/createusers.lpr b/packages/fcl-web/examples/webdata/demo/createusers.lpr new file mode 100644 index 0000000000..229679c55b --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo/createusers.lpr @@ -0,0 +1,136 @@ +program createusers; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX}{$IFDEF UseCThreads} + cthreads, + {$ENDIF}{$ENDIF} + Classes, SysUtils, dbf, CustApp, db + { you can add units after this }; + +type + + { TMyApplication } + + TMyApplication = class(TCustomApplication) + private + procedure CreateUsers(DS: TDataset); + protected + procedure DoRun; override; + public + constructor Create(TheOwner: TComponent); override; + destructor Destroy; override; + procedure WriteHelp; virtual; + end; + +{ TMyApplication } + +Type + TUserRecord = Record + L,N,E : string; + end; + +Const + UserCount = 8; + Users : Array[1..UserCount] of TUserRecord = ( + (L:'Daniel';N:'Daniel mantione'; E:'daniel@freepascal.org'), + (L:'Florian';N:'Florian Klaempfl'; E:'florian@freepascal.org'), + (L:'Joost';N:'Joost van der Sluis'; E:'joost@freepascal.org'), + (L:'Jonas';N:'Jonas Maebe'; E:'jonas@freepascal.org'), + (L:'Michael';N:'Michael van canneyt'; E:'michael@freepascal.org'), + (L:'Marco';N:'Marco Van De Voort'; E:'marco@freepascal.org'), + (L:'Pierre';N:'Pierre Muller'; E:'pierre@freepascal.org'), + (L:'Tomas';N:'Tomas Hajny'; E:'tomas@freepascal.org') + ) ; + + +procedure TMyApplication.CreateUsers(DS : TDataset); + +Var + I : integer; + +begin + For I:=1 to UserCount do + begin + DS.Append; + DS.FieldByName('Login').AsString:=Users[i].L; + DS.FieldByName('Name').AsString:=Users[i].N; + DS.FieldByName('Email').AsString:=Users[i].E; + If Random(2)<1 then + DS.FieldByname('LastLogin').AsDatetime:=Date-Random(10); + DS.Post; + end; +end; +procedure TMyApplication.DoRun; +var + ErrorMsg: String; + DB : TDBF; +begin + // quick check parameters + ErrorMsg:=CheckOptions('h','help'); + if ErrorMsg<>'' then begin + ShowException(Exception.Create(ErrorMsg)); + Terminate; + Exit; + end; + + // parse parameters + if HasOption('h','help') then begin + WriteHelp; + Terminate; + Exit; + end; + + { add your program here } + DB:=TDBF.Create(Self); + try + With DB.FieldDefs do + begin + Add('ID',ftAutoInc,0,True); + Add('Login',ftString,30,true); + Add('Name',ftString,50,True); + Add('Email',ftString,50,False); + Add('LastLogin',ftDate,0,False); + end; + DB.TableName:='users.dbf'; + DB.TableLevel:=7; + DB.CreateTable; + DB.Open; + CreateUsers(DB); + finally + DB.Free; + end; + // stop program loop + Terminate; +end; + +constructor TMyApplication.Create(TheOwner: TComponent); +begin + inherited Create(TheOwner); + StopOnException:=True; +end; + +destructor TMyApplication.Destroy; +begin + inherited Destroy; +end; + +procedure TMyApplication.WriteHelp; +begin + { add your help code here } + writeln('Usage: ',ExeName,' -h'); +end; + +var + Application: TMyApplication; + +{$IFDEF WINDOWS}{$R createusers.rc}{$ENDIF} + +begin + Application:=TMyApplication.Create(nil); + Application.Title:='My Application'; + Application.Run; + Application.Free; +end. + diff --git a/packages/fcl-web/examples/webdata/demo/extgrid-json.html b/packages/fcl-web/examples/webdata/demo/extgrid-json.html new file mode 100644 index 0000000000..b24b57ac43 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo/extgrid-json.html @@ -0,0 +1,11 @@ + + +ExtJS JSON Data demo + + + + + + + + \ No newline at end of file diff --git a/packages/fcl-web/examples/webdata/demo/extgrid-json.js b/packages/fcl-web/examples/webdata/demo/extgrid-json.js new file mode 100644 index 0000000000..61ec0e62e2 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo/extgrid-json.js @@ -0,0 +1,95 @@ +Ext.ns('FPC'); + +FPC.ShowPage = function () { + var myproxy = new Ext.data.HttpProxy ( { + api : { + read: "extgrid.cgi/Provider/Read/name/", + update: "extgrid.cgi/Provider/Update/name/", + create: "extgrid.cgi/Provider/Insert/name/", + destroy: "extgrid.cgi/Provider/Delete/name/" + } + }); + var myreader = new Ext.data.JsonReader ({ + root: "rows", + idProperty: "ID", + messageProperty: 'message', // Must be specified here + fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"] + }); + var mywriter = new Ext.data.JsonWriter({ + encode: true, + writeAllFields: true, + idProperty: "ID" + }); + var data = new Ext.data.Store({ + proxy: myproxy, + reader: myreader, + writer: mywriter, + autoSave: false, + idProperty: "ID", + }); + // Listen to errors. + data.addListener('exception', function(proxy, type, action, options, res) { + if (type === 'remote') { + Ext.Msg.show({ + title: 'REMOTE EXCEPTION', + msg: res.message, + icon: Ext.MessageBox.ERROR, + buttons: Ext.Msg.OK + }); + } + }); + data.load({ params:{start: 0, limit: 30}}); + var grid = new Ext.grid.EditorGridPanel({ + renderTo: Ext.getBody(), + frame: true, + title: "Known users", + height: 600, + width: 800, + store: data, + columns: [ + {header: 'ID', dataIndex: "ID", sortable: true, hidden: true}, + {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()}, + ], + bbar: new Ext.PagingToolbar({ + pageSize: 30, + store: data, + displayInfo: true + }), + tbar : [{ + text: 'Add', + iconCls: 'icon-add', + handler: function(btn, ev) { + var u = new grid.store.recordType(); + grid.stopEditing(); + grid.store.insert(0, u); + grid.startEditing(0, 1); + }, + scope: grid + }, '-', { + text: 'Delete', + iconCls: 'icon-delete', + handler: function(btn, ev) { + var index = grid.getSelectionModel().getSelectedCell(); + if (!index) { + return false; + } + var rec = grid.store.getAt(index[0]); + grid.store.remove(rec); + }, + scope: grid + }, '-', { + text: 'Save', + iconCls: 'icon-save', + handler: function(btn, ev) { + grid.store.save(); + }, + scope: grid + } + ] + }); + grid.show(); +} +Ext.onReady(FPC.ShowPage); diff --git a/packages/fcl-web/examples/webdata/demo/extgrid-xml.html b/packages/fcl-web/examples/webdata/demo/extgrid-xml.html new file mode 100644 index 0000000000..d01e2971e3 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo/extgrid-xml.html @@ -0,0 +1,11 @@ + + +ExtJS XML Data demo + + + + + + + + \ No newline at end of file diff --git a/packages/fcl-web/examples/webdata/demo/extgrid-xml.js b/packages/fcl-web/examples/webdata/demo/extgrid-xml.js new file mode 100644 index 0000000000..c2bcf94c89 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo/extgrid-xml.js @@ -0,0 +1,98 @@ +Ext.ns('FPC'); + +FPC.ShowPage = function () { + var myproxy = new Ext.data.HttpProxy ( { + api : { + read: "extgrid.cgi/Provider/Read/name/?format=xml", + update: "extgrid.cgi/Provider/Update/name/?format=xml", + create: "extgrid.cgi/Provider/Insert/name/?format=xml", + destroy: "extgrid.cgi/Provider/Delete/name/?format=xml", + } + }); + var myreader = new Ext.data.XmlReader ({ + totalProperty: "total", + record: "row", + idProperty: "ID", + successProperty: "success", + messageProperty: "message", + fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"] + }); + var mywriter = new Ext.data.XmlWriter({ + encode: true, + writeAllFields: true, + idProperty: "ID", + root: "records" + }); + var data = new Ext.data.Store({ + proxy: myproxy, + reader: myreader, + writer: mywriter, + autoSave: false, + idProperty: "ID", + }); + // Listen to errors. + data.addListener('exception', function(proxy, type, action, options, res) { + if (type === 'remote') { + Ext.Msg.show({ + title: 'REMOTE EXCEPTION', + msg: res.message, + icon: Ext.MessageBox.ERROR, + buttons: Ext.Msg.OK + }); + } + }); + data.load({ params:{start: 0, limit: 30}}); + var grid = new Ext.grid.EditorGridPanel({ + renderTo: Ext.getBody(), + frame: true, + title: "Known users", + height: 600, + width: 800, + store: data, + columns: [ + {header: 'ID', dataIndex: "ID", sortable: true, hidden: true}, + {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()}, + ], + bbar: new Ext.PagingToolbar({ + pageSize: 30, + store: data, + displayInfo: true + }), + tbar : [{ + text: 'Add', + iconCls: 'icon-add', + handler: function(btn, ev) { + var u = new grid.store.recordType(); + grid.stopEditing(); + grid.store.insert(0, u); + grid.startEditing(0, 1); + }, + scope: grid + }, '-', { + text: 'Delete', + iconCls: 'icon-delete', + handler: function(btn, ev) { + var index = grid.getSelectionModel().getSelectedCell(); + if (!index) { + return false; + } + var rec = grid.store.getAt(index[0]); + grid.store.remove(rec); + }, + scope: grid + }, '-', { + text: 'Save', + iconCls: 'icon-save', + handler: function(btn, ev) { + grid.store.save(); + }, + scope: grid + } + ] + }); + grid.show(); +} +Ext.onReady(FPC.ShowPage); diff --git a/packages/fcl-web/examples/webdata/demo/extgrid.lpi b/packages/fcl-web/examples/webdata/demo/extgrid.lpi new file mode 100644 index 0000000000..d3e8af3c62 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo/extgrid.lpi @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/fcl-web/examples/webdata/demo/extgrid.lpr b/packages/fcl-web/examples/webdata/demo/extgrid.lpr new file mode 100644 index 0000000000..4bd1d4e7e0 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo/extgrid.lpr @@ -0,0 +1,14 @@ +program extgrid; + +{$mode objfpc}{$H+} + +uses + fpCGI, wmusers; + +{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF} + +begin + Application.Initialize; + Application.Run; +end. + diff --git a/packages/fcl-web/examples/webdata/demo/lazwebdata.pas b/packages/fcl-web/examples/webdata/demo/lazwebdata.pas new file mode 100644 index 0000000000..82eddff8a2 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo/lazwebdata.pas @@ -0,0 +1,22 @@ +{ This file was automatically created by Lazarus. do not edit! + This source is only used to compile and install the package. + } + +unit lazwebdata; + +interface + +uses + reglazwebdata, extjsjson, extjsxml, fpextjs, fpwebdata, sqldbwebdata, + LazarusPackageIntf; + +implementation + +procedure Register; +begin + RegisterUnit('reglazwebdata', @reglazwebdata.Register); +end; + +initialization + RegisterPackage('lazwebdata', @Register); +end. diff --git a/packages/fcl-web/examples/webdata/demo/reglazwebdata.pp b/packages/fcl-web/examples/webdata/demo/reglazwebdata.pp new file mode 100644 index 0000000000..f6f1e93ce2 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo/reglazwebdata.pp @@ -0,0 +1,78 @@ +unit reglazwebdata; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, fpwebdata, sqldbwebdata, LazIDEIntf, ProjectIntf, fpextjs, extjsjson, extjsxml; + +Type + + { TFileDescWebProviderDataModule } + + TFileDescWebProviderDataModule = class(TFileDescPascalUnitWithResource) + public + constructor Create; override; + function GetInterfaceUsesSection: string; override; + function GetLocalizedName: string; override; + function GetLocalizedDescription: string; override; + function GetImplementationSource(const Filename, SourceName, ResourceName: string): string;override; + end; + +Procedure Register; + +Var + FileDescriptorWebProviderDataModule: TFileDescWebProviderDataModule; + +implementation + +uses FormEditingIntf; + +constructor TFileDescWebProviderDataModule.Create; +begin + inherited Create; + Name:='Web DataProvider Module'; + ResourceClass:=TFPWebProviderDataModule; + UseCreateFormStatements:=False; +end; + +function TFileDescWebProviderDataModule.GetInterfaceUsesSection: string; +begin + Result:=inherited GetInterfaceUsesSection; + Result:=Result+', HTTPDefs, websession, fpHTTP, fpWeb, fpwebdata'; +end; + +function TFileDescWebProviderDataModule.GetLocalizedName: string; +begin + Result:='Web DataProvider Module'; +end; + +function TFileDescWebProviderDataModule.GetLocalizedDescription: string; +begin + Result:='WEB DataProvider Module'#13 + +'A datamodule to handle data requests for WEB (HTTP) applications using WebDataProvider components.'; +end; + +function TFileDescWebProviderDataModule.GetImplementationSource(const Filename, + SourceName, ResourceName: string): string; +begin + Result:=Inherited GetImplementationSource(FileName,SourceName,ResourceName); + Result:=Result+' RegisterHTTPModule(''T'+ResourceName+''',T'+ResourceName+');'+LineEnding; +end; + + +Procedure Register; + +begin + RegisterComponents('fpWeb',[TWebdataInputAdaptor,TFPWebDataProvider, TSQLDBWebDataProvider, + TExtJSJSonWebdataInputAdaptor,TExtJSJSONDataFormatter, + TExtJSXMLWebdataInputAdaptor,TExtJSXMLDataFormatter]); + FileDescriptorWebProviderDataModule:=TFileDescWebProviderDataModule.Create; + RegisterProjectFileDescriptor(FileDescriptorWebProviderDataModule); + FormEditingHook.RegisterDesignerBaseClass(TFPCustomWebProviderDataModule); + FormEditingHook.RegisterDesignerBaseClass(TFPWebProviderDataModule); +end; + +end. + diff --git a/packages/fcl-web/examples/webdata/demo/wmusers.lfm b/packages/fcl-web/examples/webdata/demo/wmusers.lfm new file mode 100644 index 0000000000..4093613b2b --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo/wmusers.lfm @@ -0,0 +1,36 @@ +object FPWebModule1: TFPWebModule1 + OldCreateOrder = False + Actions = < + item + Name = 'Read' + Default = False + OnRequest = TFPWebActions0Request + end + item + Name = 'Insert' + Default = False + OnRequest = TFPWebActions1Request + end + item + Name = 'Update' + Default = False + OnRequest = TFPWebActions2Request + end + item + Name = 'Delete' + Default = False + OnRequest = TFPWebActions3Request + end> + CreateSession = False + Height = 300 + HorizontalOffset = 696 + VerticalOffset = 366 + Width = 400 + object Dbf1: TDbf + IndexDefs = <> + TableLevel = 4 + FilterOptions = [] + left = 23 + top = 53 + end +end diff --git a/packages/fcl-web/examples/webdata/demo/wmusers.lrs b/packages/fcl-web/examples/webdata/demo/wmusers.lrs new file mode 100644 index 0000000000..1ef43fbfcb --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo/wmusers.lrs @@ -0,0 +1,12 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TFPWebModule1','FORMDATA',[ + 'TPF0'#13'TFPWebModule1'#12'FPWebModule1'#14'OldCreateOrder'#8#7'Actions'#14#1 + +#4'Name'#6#4'Read'#7'Default'#8#9'OnRequest'#7#21'TFPWebActions0Request'#0#1 + +#4'Name'#6#6'Insert'#7'Default'#8#9'OnRequest'#7#21'TFPWebActions1Request'#0 + +#1#4'Name'#6#6'Update'#7'Default'#8#9'OnRequest'#7#21'TFPWebActions2Request' + +#0#1#4'Name'#6#6'Delete'#7'Default'#8#9'OnRequest'#7#21'TFPWebActions3Reques' + +'t'#0#0#13'CreateSession'#8#6'Height'#3','#1#16'HorizontalOffset'#3#184#2#14 + +'VerticalOffset'#3'n'#1#5'Width'#3#144#1#0#4'TDbf'#4'Dbf1'#9'IndexDefs'#14#0 + +#10'TableLevel'#2#4#13'FilterOptions'#11#0#4'left'#2#23#3'top'#2'5'#0#0#0 +]); diff --git a/packages/fcl-web/examples/webdata/demo/wmusers.pp b/packages/fcl-web/examples/webdata/demo/wmusers.pp new file mode 100644 index 0000000000..379b1a4920 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo/wmusers.pp @@ -0,0 +1,337 @@ +unit wmusers; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb, + db, dbf, fpwebdata, fpextjs,extjsjson,extjsxml; + +type + + { TFPWebModule1 } + + TFPWebModule1 = class(TFPWebModule) + Dbf1: TDbf; + procedure TFPWebActions0Request(Sender: TObject; ARequest: TRequest; + AResponse: TResponse; var Handled: Boolean); + procedure TFPWebActions1Request(Sender: TObject; ARequest: TRequest; + AResponse: TResponse; var Handled: Boolean); + procedure TFPWebActions2Request(Sender: TObject; ARequest: TRequest; + AResponse: TResponse; var Handled: Boolean); + procedure TFPWebActions3Request(Sender: TObject; ARequest: TRequest; + AResponse: TResponse; var Handled: Boolean); + private + { private declarations } + public + { public declarations } + end; + +var + FPWebModule1: TFPWebModule1; + +implementation +{$define wmdebug} + +{$ifdef wmdebug} +uses dbugintf; +{$endif} + +{ TFPWebModule1 } + +procedure TFPWebModule1.TFPWebActions0Request(Sender: TObject; + ARequest: TRequest; AResponse: TResponse; var Handled: Boolean); + +Var + PN : String; + P : TFPWebDataProvider; + F : TExtJSDataFormatter; + DS : TDatasource; + M : TMemoryStream; + L : Text; + +begin + // Providername; + PN:=ARequest.GetNextPathInfo; +// P:=GetWebDataProvider(PN); + P:=TFPWebDataProvider.Create(Self); + try + P.Adaptor:=TWebDataInputAdaptor.Create(Self); + P.Adaptor.Request:=ARequest; + If Request.QueryFields.values['format']='xml' then + begin + F:=TExtJSXMLDataFormatter.Create(Self); + TExtJSXMLDataFormatter(F).TotalProperty:='total'; + AResponse.ContentType:='text/xml'; + end + else + F:=TExtJSJSONDataFormatter.Create(Self); + {$ifdef wmdebug} SendDebug(className+' '+F.ClassName);{$endif} + try + DS:=TDatasource.Create(Self); + try + DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf'; + DS.Dataset:=DBf1; + DBF1.Open; + try + F.ADaptor:=P.Adaptor; + P.Datasource:=DS; + P.Adaptor.Action:=wdaRead; + P.ApplyParams; + F.Provider:=P; + M:=TMemoryStream.Create; + try + F.GetContent(ARequest,M,Handled); + M.Position:=0; + Response.ContentStream:=M; + Response.SendResponse; + Response.ContentStream:=Nil; + With TFileStream.Create('/tmp/data.xml',fmCreate) do + try + CopyFrom(M,0); + finally + Free; + end; + finally + M.Free; + end; + finally + DBF1.Close; + end; + finally + DS.Free; + end; + finally + F.Free; + end; + finally + P.Free; + end; +end; + +procedure TFPWebModule1.TFPWebActions1Request(Sender: TObject; + ARequest: TRequest; AResponse: TResponse; var Handled: Boolean); +Var + PN : String; + P : TFPWebDataProvider; + F : TExtJSDataFormatter; + DS : TDatasource; + M : TMemoryStream; + L : Text; + +begin + // Providername; + PN:=ARequest.GetNextPathInfo; +// P:=GetWebDataProvider(PN); + P:=TFPWebDataProvider.Create(Self); + try + P.IDFieldName:='ID'; + If Request.QueryFields.values['format']='xml' then + begin + F:=TExtJSXMLDataFormatter.Create(Self); + AResponse.ContentType:='text/xml'; + P.Adaptor:=TWebDataInputAdaptor.Create(Self); + end + else + begin + F:=TExtJSJSONDataFormatter.Create(Self); + P.Adaptor:=TExtJSJSonWebdataInputAdaptor.Create(Self); + end; + P.Adaptor.Request:=ARequest; + {$ifdef wmdebug} SendDebug(className+' '+F.ClassName);{$endif} + try + DS:=TDatasource.Create(Self); + try + DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf'; + DS.Dataset:=DBf1; + DBF1.Open; + try + F.ADaptor:=P.Adaptor; + P.Datasource:=DS; + P.Adaptor.Action:=wdaInsert; + P.ApplyParams; + F.Provider:=P; + M:=TMemoryStream.Create; + try + F.GetContent(ARequest,M,Handled); + M.Position:=0; + Response.ContentStream:=M; + Response.SendResponse; + Response.ContentStream:=Nil; + With TFileStream.Create('/tmp/data.xml',fmCreate) do + try + CopyFrom(M,0); + finally + Free; + end; + finally + M.Free; + end; + finally + DBF1.Close; + end; + finally + DS.Free; + end; + finally + F.Free; + end; + finally + P.Free; + end; +end; + +procedure TFPWebModule1.TFPWebActions2Request(Sender: TObject; + ARequest: TRequest; AResponse: TResponse; var Handled: Boolean); +Var + PN : String; + P : TFPWebDataProvider; + F : TExtJSDataFormatter; + DS : TDatasource; + M : TMemoryStream; + L : Text; + +begin + // Providername; + {$ifdef wmdebug} SendDebug('Update request received');{$endif} + PN:=ARequest.GetNextPathInfo; +// P:=GetWebDataProvider(PN); + P:=TFPWebDataProvider.Create(Self); + try + P.IDFieldName:='ID'; + If Request.QueryFields.values['format']='xml' then + begin + {$ifdef wmdebug} SendDebug('Update request received in XML');{$endif} + F:=TExtJSXMLDataFormatter.Create(Self); + AResponse.ContentType:='text/xml'; + P.Adaptor:=TWebDataInputAdaptor.Create(Self); + end + else + begin + F:=TExtJSJSONDataFormatter.Create(Self); + P.Adaptor:=TExtJSJSonWebdataInputAdaptor.Create(Self); + end; + P.Adaptor.Request:=ARequest; + {$ifdef wmdebug} SendDebug(className+' '+F.ClassName);{$endif} + try + DS:=TDatasource.Create(Self); + try + DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf'; + DS.Dataset:=DBf1; + DBF1.Open; + try + F.ADaptor:=P.Adaptor; + P.Datasource:=DS; + P.Adaptor.Action:=wdaUpdate; + P.ApplyParams; + F.Provider:=P; + M:=TMemoryStream.Create; + try + F.GetContent(ARequest,M,Handled); + M.Position:=0; + Response.ContentStream:=M; + Response.SendResponse; + Response.ContentStream:=Nil; + With TFileStream.Create('/tmp/data.xml',fmCreate) do + try + CopyFrom(M,0); + finally + Free; + end; + finally + M.Free; + end; + finally + DBF1.Close; + end; + finally + DS.Free; + end; + finally + F.Free; + end; + finally + P.Free; + end; +end; + +procedure TFPWebModule1.TFPWebActions3Request(Sender: TObject; + ARequest: TRequest; AResponse: TResponse; var Handled: Boolean); + +Var + PN : String; + P : TFPWebDataProvider; + F : TExtJSDataFormatter; + DS : TDatasource; + M : TMemoryStream; + L : Text; + +begin + // Providername; + PN:=ARequest.GetNextPathInfo; +// P:=GetWebDataProvider(PN); + P:=TFPWebDataProvider.Create(Self); + try + P.IDFieldName:='ID'; + If Request.QueryFields.values['format']='xml' then + begin + F:=TExtJSXMLDataFormatter.Create(Self); + AResponse.ContentType:='text/xml'; + P.Adaptor:=TWebDataInputAdaptor.Create(Self); + end + else + begin + F:=TExtJSJSONDataFormatter.Create(Self); + P.Adaptor:=TExtJSJSonWebdataInputAdaptor.Create(Self); + end; + P.Adaptor.Request:=ARequest; + {$ifdef wmdebug} SendDebug('className '+F.ClassName);{$endif} + try + DS:=TDatasource.Create(Self); + try + DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf'; + DS.Dataset:=DBf1; + DBF1.Open; + try + F.ADaptor:=P.Adaptor; + P.Datasource:=DS; + P.Adaptor.Action:=wdaDelete; + P.ApplyParams; + F.Provider:=P; + M:=TMemoryStream.Create; + try + F.GetContent(ARequest,M,Handled); + M.Position:=0; + Response.ContentStream:=M; + Response.SendResponse; + Response.ContentStream:=Nil; + With TFileStream.Create('/tmp/data.xml',fmCreate) do + try + CopyFrom(M,0); + finally + Free; + end; + finally + M.Free; + end; + finally + DBF1.Close; + end; + finally + DS.Free; + end; + finally + F.Free; + end; + finally + P.Free; + end; +end; + +initialization + {$I wmusers.lrs} + + RegisterHTTPModule('Provider', TFPWebModule1); +end. + diff --git a/packages/fcl-web/examples/webdata/demo2/extgrid-json.html b/packages/fcl-web/examples/webdata/demo2/extgrid-json.html new file mode 100644 index 0000000000..b24b57ac43 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo2/extgrid-json.html @@ -0,0 +1,11 @@ + + +ExtJS JSON Data demo + + + + + + + + \ No newline at end of file diff --git a/packages/fcl-web/examples/webdata/demo2/extgrid-json.js b/packages/fcl-web/examples/webdata/demo2/extgrid-json.js new file mode 100644 index 0000000000..96bea2d1f7 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo2/extgrid-json.js @@ -0,0 +1,97 @@ +Ext.ns('FPC'); + +FPC.ShowPage = function () { + var myproxy = new Ext.data.HttpProxy ( { + api : { + read: "extgrid.cgi/Provider/Name/Read/", + update: "extgrid.cgi/Provider/Name/Update/", + create: "extgrid.cgi/Provider/Name/Insert/", + destroy: "extgrid.cgi/Provider/Name/Delete/" + } + }); + var myreader = new Ext.data.JsonReader ({ + root: "rows", + idProperty: "ID", + messageProperty: 'message', // Must be specified here + fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"] + }); + var mywriter = new Ext.data.JsonWriter({ + encode: true, + writeAllFields: true, + idProperty: "ID" + }); + var data = new Ext.data.Store({ + proxy: myproxy, + reader: myreader, + writer: mywriter, + autoSave: false, + idProperty: "ID", + }); + // Listen to errors. + data.addListener('exception', function(proxy, type, action, options, res) { + if (type === 'remote') { + Ext.Msg.show({ + title: 'REMOTE EXCEPTION', + msg: res.message, + icon: Ext.MessageBox.ERROR, + buttons: Ext.Msg.OK + }); + } + }); + data.load({ params:{start: 0, limit: 30}}); + var grid = new Ext.grid.EditorGridPanel({ + renderTo: Ext.getBody(), + frame: true, + title: "Known users", + height: 600, + width: 800, + store: data, + columns: [ + {header: 'ID', dataIndex: "ID", sortable: true, hidden: true}, + {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()}, + ], + bbar: new Ext.PagingToolbar({ + pageSize: 30, + store: data, + displayInfo: true + }), + tbar : [{ + text: 'Add', + iconCls: 'icon-add', + handler: function(btn, ev) { + var u = new grid.store.recordType(); + grid.stopEditing(); + grid.store.insert(0, u); + grid.startEditing(0, 1); + }, + scope: grid + }, '-', { + text: 'Delete', + iconCls: 'icon-delete', + handler: function(btn, ev) { + var index = grid.getSelectionModel().getSelectedCell(); + if (!index) { + return false; + } + var rec = grid.store.getAt(index[0]); + grid.store.remove(rec); + }, + scope: grid + }, '-', { + text: 'Save', + iconCls: 'icon-save', + handler: function(btn, ev) { + grid.store.save(); + }, + scope: grid + } + ] + // F.ContentToStream(M); + + }); + grid.show(); +} +Ext.onReady(FPC.ShowPage); diff --git a/packages/fcl-web/examples/webdata/demo2/extgrid-xml.html b/packages/fcl-web/examples/webdata/demo2/extgrid-xml.html new file mode 100644 index 0000000000..d01e2971e3 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo2/extgrid-xml.html @@ -0,0 +1,11 @@ + + +ExtJS XML Data demo + + + + + + + + \ No newline at end of file diff --git a/packages/fcl-web/examples/webdata/demo2/extgrid-xml.js b/packages/fcl-web/examples/webdata/demo2/extgrid-xml.js new file mode 100644 index 0000000000..55b2848121 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo2/extgrid-xml.js @@ -0,0 +1,100 @@ +Ext.ns('FPC'); + +FPC.ShowPage = function () { + var myproxy = new Ext.data.HttpProxy ( { + api : { + read: "extgrid.cgi/Provider/Name/Read/?format=xml", + update: "extgrid.cgi/Provider/Name/Update/?format=xml", + create: "extgrid.cgi/Provider/Name/Insert/?format=xml", + destroy: "extgrid.cgi/Provider/Name/Delete/?format=xml", + } + }); + var myreader = new Ext.data.XmlReader ({ + totalProperty: "total", + record: "row", + idProperty: "ID", + successProperty: "success", + messageProperty: "message", + fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"] + }); + var mywriter = new Ext.data.XmlWriter({ + encode: true, + writeAllFields: true, + idProperty: "ID", + root: "records" + }); + var data = new Ext.data.Store({ + proxy: myproxy, + reader: myreader, + writer: mywriter, + autoSave: false, + idProperty: "ID", + }); + // Listen to errors. + data.addListener('exception', function(proxy, type, action, options, res) { + if (type === 'remote') { + Ext.Msg.show({ + title: 'REMOTE EXCEPTION', + msg: res.message, + icon: Ext.MessageBox.ERROR, + buttons: Ext.Msg.OK + }); + } + }); + data.load({ params:{start: 0, limit: 30}}); + var grid = new Ext.grid.EditorGridPanel({ + renderTo: Ext.getBody(), + frame: true, + title: "Known users", + height: 600, + width: 800, + store: data, + columns: [ + {header: 'ID', dataIndex: "ID", sortable: true, hidden: true}, + {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()}, + ], + bbar: new Ext.PagingToolbar({ + pageSize: 30, + store: data, + displayInfo: true + }), + tbar : [{ + text: 'Add', + iconCls: 'icon-add', + handler: function(btn, ev) { + var u = new grid.store.recordType(); + grid.stopEditing(); + grid.store.insert(0, u); + grid.startEditing(0, 1); + }, + scope: grid + }, '-', { + text: 'Delete', + iconCls: 'icon-delete', + handler: function(btn, ev) { + var index = grid.getSelectionModel().getSelectedCell(); + if (!index) { + return false; + } + var rec = grid.store.getAt(index[0]); + grid.store.remove(rec); + }, + scope: grid + }, '-', { + text: 'Save', + iconCls: 'icon-save', + handler: function(btn, ev) { + grid.store.save(); + }, + scope: grid + } + ] + // F.ContentToStream(M); + + }); + grid.show(); +} +Ext.onReady(FPC.ShowPage); diff --git a/packages/fcl-web/examples/webdata/demo2/extgrid.lpi b/packages/fcl-web/examples/webdata/demo2/extgrid.lpi new file mode 100644 index 0000000000..88d3956f73 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo2/extgrid.lpi @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + <Icon Value="0"/> + <UseXPManifest Value="True"/> + </General> + <VersionInfo> + <ProjectVersion Value=""/> + </VersionInfo> + <PublishOptions> + <Version Value="2"/> + <IgnoreBinaries Value="False"/> + <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> + <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> + </local> + </RunParams> + <RequiredPackages Count="5"> + <Item1> + <PackageName Value="lazwebdata"/> + <MinVersion Valid="True"/> + </Item1> + <Item2> + <PackageName Value="DBFLaz"/> + <MinVersion Minor="1" Release="1" Valid="True"/> + </Item2> + <Item3> + <PackageName Value="WebLaz"/> + </Item3> + <Item4> + <PackageName Value="LCL"/> + </Item4> + <Item5> + <PackageName Value="FCL"/> + </Item5> + </RequiredPackages> + <Units Count="2"> + <Unit0> + <Filename Value="extgrid.lpr"/> + <IsPartOfProject Value="True"/> + <UnitName Value="extgrid"/> + </Unit0> + <Unit1> + <Filename Value="wmusers.pp"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="FPWebModule1"/> + <ResourceBaseClass Value="DataModule"/> + <UnitName Value="wmusers"/> + </Unit1> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="8"/> + <Target> + <Filename Value="extgrid.cgi"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)/"/> + </SearchPaths> + <CodeGeneration> + <Optimizations> + <OptimizationLevel Value="0"/> + </Optimizations> + </CodeGeneration> + <Other> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> +</CONFIG> diff --git a/packages/fcl-web/examples/webdata/demo2/extgrid.lpr b/packages/fcl-web/examples/webdata/demo2/extgrid.lpr new file mode 100644 index 0000000000..b00d3ee7bd --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo2/extgrid.lpr @@ -0,0 +1,16 @@ +program extgrid; + +{$mode objfpc}{$H+} + +uses + {$ifdef unix}cwstring,xmliconv,{$endif} + fpCGI, wmusers; + +{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF} + +begin + Application.Title:='ExtJS Grid demo for fpwebdata'; + Application.Initialize; + Application.Run; +end. + diff --git a/packages/fcl-web/examples/webdata/demo2/wmusers.lfm b/packages/fcl-web/examples/webdata/demo2/wmusers.lfm new file mode 100644 index 0000000000..dc88e0ac09 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo2/wmusers.lfm @@ -0,0 +1,46 @@ +object FPWebModule1: TFPWebModule1 + OnCreate = DataModuleCreate + OldCreateOrder = False + Actions = <> + OnRequest = DataModuleRequest + CreateSession = False + Height = 300 + HorizontalOffset = 477 + VerticalOffset = 302 + Width = 400 + object Dbf1: TDbf + FilePath = '/home/michael/public_html/extjs/demo2/' + IndexDefs = <> + TableName = 'users.dbf' + TableLevel = 4 + FilterOptions = [] + left = 51 + top = 64 + end + object ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor + left = 146 + top = 63 + end + object ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter + left = 207 + top = 61 + end + object ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor + left = 151 + top = 101 + end + object ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter + left = 211 + top = 100 + end + object FPWebDataProvider1: TFPWebDataProvider + DataSource = Datasource1 + left = 105 + top = 89 + end + object Datasource1: TDatasource + DataSet = Dbf1 + left = 48 + top = 104 + end +end diff --git a/packages/fcl-web/examples/webdata/demo2/wmusers.lrs b/packages/fcl-web/examples/webdata/demo2/wmusers.lrs new file mode 100644 index 0000000000..d84ec9ea08 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo2/wmusers.lrs @@ -0,0 +1,18 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TFPWebModule1','FORMDATA',[ + 'TPF0'#13'TFPWebModule1'#12'FPWebModule1'#8'OnCreate'#7#16'DataModuleCreate' + +#14'OldCreateOrder'#8#7'Actions'#14#0#9'OnRequest'#7#17'DataModuleRequest'#13 + +'CreateSession'#8#6'Height'#3','#1#16'HorizontalOffset'#3#221#1#14'VerticalO' + +'ffset'#3'.'#1#5'Width'#3#144#1#0#4'TDbf'#4'Dbf1'#8'FilePath'#6'&/home/micha' + +'el/public_html/extjs/demo2/'#9'IndexDefs'#14#0#9'TableName'#6#9'users.dbf' + +#10'TableLevel'#2#4#13'FilterOptions'#11#0#4'left'#2'3'#3'top'#2'@'#0#0#29'T' + +'ExtJSJSonWebdataInputAdaptor'#29'ExtJSJSonWebdataInputAdaptor1'#4'left'#3 + +#146#0#3'top'#2'?'#0#0#23'TExtJSJSONDataFormatter'#23'ExtJSJSONDataFormatter' + +'1'#4'left'#3#207#0#3'top'#2'='#0#0#28'TExtJSXMLWebdataInputAdaptor'#28'ExtJ' + +'SXMLWebdataInputAdaptor1'#4'left'#3#151#0#3'top'#2'e'#0#0#22'TExtJSXMLDataF' + +'ormatter'#22'ExtJSXMLDataFormatter1'#4'left'#3#211#0#3'top'#2'd'#0#0#18'TFP' + +'WebDataProvider'#18'FPWebDataProvider1'#10'DataSource'#7#11'Datasource1'#4 + +'left'#2'i'#3'top'#2'Y'#0#0#11'TDatasource'#11'Datasource1'#7'DataSet'#7#4'D' + +'bf1'#4'left'#2'0'#3'top'#2'h'#0#0#0 +]); diff --git a/packages/fcl-web/examples/webdata/demo2/wmusers.pp b/packages/fcl-web/examples/webdata/demo2/wmusers.pp new file mode 100644 index 0000000000..43537a6a1e --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo2/wmusers.pp @@ -0,0 +1,86 @@ +unit wmusers; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, fpwebdata, extjsjson, extjsxml, + HTTPDefs, websession, fpHTTP, fpWeb, dbf, db; + +type + + { TFPWebModule1 } + + TFPWebModule1 = class(TFPWebModule) + Datasource1: TDatasource; + Dbf1: TDbf; + ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter; + ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor; + ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter; + ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor; + FPWebDataProvider1: TFPWebDataProvider; + procedure DataModuleCreate(Sender: TObject); + procedure DataModuleRequest(Sender: TObject; ARequest: TRequest; + AResponse: TResponse; var Handled: Boolean); + private + { private declarations } + public + { public declarations } + end; + +var + FPWebModule1: TFPWebModule1; + +implementation + +uses dbugintf; + +{ TFPWebModule1 } + +procedure TFPWebModule1.DataModuleRequest(Sender: TObject; ARequest: TRequest; + AResponse: TResponse; var Handled: Boolean); + +Var + CP : TCustomHTTPDataContentProducer; + M : TMemoryStream; + A : TCustomWebDataInputAdaptor; + PN : String; + +begin + PN:=ARequest.GetNextPathInfo; + If ARequest.QueryFields.values['format']='xml' then + begin + A:=ExtJSXMLWebdataInputAdaptor1; + CP:=ExtJSXMLDataFormatter1; + end + else + begin + A:=ExtJSJSONWebdataInputAdaptor1; + cp:=ExtJSJSONDataFormatter1; + end; + FPWebDataProvider1.Adaptor:=A; + CP.Adaptor:=A; + CP.Adaptor.Request:=ARequest; + CP.Provider:=FPWebDataProvider1; + M:=TmemoryStream.Create; + AResponse.ContentStream:=M; + AResponse.ContentType:=CP.DataContentType; + CP.GetContent(ARequest,M,Handled); + M.Position:=0; + AResponse.SendContent; +end; + +procedure TFPWebModule1.DataModuleCreate(Sender: TObject); +begin + DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf'; + DBF1.Open; + With DBF1.FieldByname('ID') do + ProviderFlags:=ProviderFlags+[pfInKey]; +end; + +initialization + {$I wmusers.lrs} + RegisterHTTPModule('Provider', TFPWebModule1); +end. + diff --git a/packages/fcl-web/examples/webdata/demo3/extgrid-json.html b/packages/fcl-web/examples/webdata/demo3/extgrid-json.html new file mode 100644 index 0000000000..b24b57ac43 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo3/extgrid-json.html @@ -0,0 +1,11 @@ +<html> +<head> +<title>ExtJS JSON Data demo + + + + + + + + \ No newline at end of file diff --git a/packages/fcl-web/examples/webdata/demo3/extgrid-json.js b/packages/fcl-web/examples/webdata/demo3/extgrid-json.js new file mode 100644 index 0000000000..9f22a2ab3c --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo3/extgrid-json.js @@ -0,0 +1,97 @@ +Ext.ns('FPC'); + +FPC.ShowPage = function () { + var myproxy = new Ext.data.HttpProxy ( { + api : { + read: "extgrid.cgi/Provider/AName/Read/", + update: "extgrid.cgi/Provider/AName/Update/", + create: "extgrid.cgi/Provider/AName/Insert/", + destroy: "extgrid.cgi/Provider/AName/Delete/" + } + }); + var myreader = new Ext.data.JsonReader ({ + root: "rows", + idProperty: "ID", + messageProperty: 'message', // Must be specified here + fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"] + }); + var mywriter = new Ext.data.JsonWriter({ + encode: true, + writeAllFields: true, + idProperty: "ID" + }); + var data = new Ext.data.Store({ + proxy: myproxy, + reader: myreader, + writer: mywriter, + autoSave: false, + idProperty: "ID", + }); + // Listen to errors. + data.addListener('exception', function(proxy, type, action, options, res) { + if (type === 'remote') { + Ext.Msg.show({ + title: 'REMOTE EXCEPTION', + msg: res.message, + icon: Ext.MessageBox.ERROR, + buttons: Ext.Msg.OK + }); + } + }); + data.load({ params:{start: 0, limit: 30}}); + var grid = new Ext.grid.EditorGridPanel({ + renderTo: Ext.getBody(), + frame: true, + title: "Known users", + height: 600, + width: 800, + store: data, + columns: [ + {header: 'ID', dataIndex: "ID", sortable: true, hidden: true}, + {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()}, + ], + bbar: new Ext.PagingToolbar({ + pageSize: 30, + store: data, + displayInfo: true + }), + tbar : [{ + text: 'Add', + iconCls: 'icon-add', + handler: function(btn, ev) { + var u = new grid.store.recordType(); + grid.stopEditing(); + grid.store.insert(0, u); + grid.startEditing(0, 1); + }, + scope: grid + }, '-', { + text: 'Delete', + iconCls: 'icon-delete', + handler: function(btn, ev) { + var index = grid.getSelectionModel().getSelectedCell(); + if (!index) { + return false; + } + var rec = grid.store.getAt(index[0]); + grid.store.remove(rec); + }, + scope: grid + }, '-', { + text: 'Save', + iconCls: 'icon-save', + handler: function(btn, ev) { + grid.store.save(); + }, + scope: grid + } + ] + // F.ContentToStream(M); + + }); + grid.show(); +} +Ext.onReady(FPC.ShowPage); diff --git a/packages/fcl-web/examples/webdata/demo3/extgrid-xml.html b/packages/fcl-web/examples/webdata/demo3/extgrid-xml.html new file mode 100644 index 0000000000..d01e2971e3 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo3/extgrid-xml.html @@ -0,0 +1,11 @@ + + +ExtJS XML Data demo + + + + + + + + \ No newline at end of file diff --git a/packages/fcl-web/examples/webdata/demo3/extgrid-xml.js b/packages/fcl-web/examples/webdata/demo3/extgrid-xml.js new file mode 100644 index 0000000000..f60117d3e2 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo3/extgrid-xml.js @@ -0,0 +1,100 @@ +Ext.ns('FPC'); + +FPC.ShowPage = function () { + var myproxy = new Ext.data.HttpProxy ( { + api : { + read: "extgrid.cgi/Provider/AName/Read/?format=xml", + update: "extgrid.cgi/Provider/AName/Update/?format=xml", + create: "extgrid.cgi/Provider/AName/Insert/?format=xml", + destroy: "extgrid.cgi/Provider/AName/Delete/?format=xml", + } + }); + var myreader = new Ext.data.XmlReader ({ + totalProperty: "total", + record: "row", + idProperty: "ID", + successProperty: "success", + messageProperty: "message", + fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"] + }); + var mywriter = new Ext.data.XmlWriter({ + encode: true, + writeAllFields: true, + idProperty: "ID", + root: "records" + }); + var data = new Ext.data.Store({ + proxy: myproxy, + reader: myreader, + writer: mywriter, + autoSave: false, + idProperty: "ID", + }); + // Listen to errors. + data.addListener('exception', function(proxy, type, action, options, res) { + if (type === 'remote') { + Ext.Msg.show({ + title: 'REMOTE EXCEPTION', + msg: res.message, + icon: Ext.MessageBox.ERROR, + buttons: Ext.Msg.OK + }); + } + }); + data.load({ params:{start: 0, limit: 30}}); + var grid = new Ext.grid.EditorGridPanel({ + renderTo: Ext.getBody(), + frame: true, + title: "Known users", + height: 600, + width: 800, + store: data, + columns: [ + {header: 'ID', dataIndex: "ID", sortable: true, hidden: true}, + {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()}, + ], + bbar: new Ext.PagingToolbar({ + pageSize: 30, + store: data, + displayInfo: true + }), + tbar : [{ + text: 'Add', + iconCls: 'icon-add', + handler: function(btn, ev) { + var u = new grid.store.recordType(); + grid.stopEditing(); + grid.store.insert(0, u); + grid.startEditing(0, 1); + }, + scope: grid + }, '-', { + text: 'Delete', + iconCls: 'icon-delete', + handler: function(btn, ev) { + var index = grid.getSelectionModel().getSelectedCell(); + if (!index) { + return false; + } + var rec = grid.store.getAt(index[0]); + grid.store.remove(rec); + }, + scope: grid + }, '-', { + text: 'Save', + iconCls: 'icon-save', + handler: function(btn, ev) { + grid.store.save(); + }, + scope: grid + } + ] + // F.ContentToStream(M); + + }); + grid.show(); +} +Ext.onReady(FPC.ShowPage); diff --git a/packages/fcl-web/examples/webdata/demo3/extgrid.lpi b/packages/fcl-web/examples/webdata/demo3/extgrid.lpi new file mode 100644 index 0000000000..d82e918056 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo3/extgrid.lpi @@ -0,0 +1,334 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/fcl-web/examples/webdata/demo3/extgrid.lpr b/packages/fcl-web/examples/webdata/demo3/extgrid.lpr new file mode 100644 index 0000000000..346296ac68 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo3/extgrid.lpr @@ -0,0 +1,16 @@ +program extgrid; + +{$mode objfpc}{$H+} + +uses + {$ifdef unix}cwstring, xmliconv,{$endif} + fpCGI, + wmusers; + +{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF} + +begin + Application.Initialize; + Application.Run; +end. + diff --git a/packages/fcl-web/examples/webdata/demo3/tralala.lfm b/packages/fcl-web/examples/webdata/demo3/tralala.lfm new file mode 100644 index 0000000000..85a58bccb4 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo3/tralala.lfm @@ -0,0 +1,9 @@ +object FPWebModule1: TFPWebModule1 + OldCreateOrder = False + Actions = <> + CreateSession = False + Height = 300 + HorizontalOffset = 585 + VerticalOffset = 230 + Width = 400 +end diff --git a/packages/fcl-web/examples/webdata/demo3/tralala.lrs b/packages/fcl-web/examples/webdata/demo3/tralala.lrs new file mode 100644 index 0000000000..6c57fc3175 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo3/tralala.lrs @@ -0,0 +1,7 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TFPWebModule1','FORMDATA',[ + 'TPF0'#13'TFPWebModule1'#12'FPWebModule1'#14'OldCreateOrder'#8#7'Actions'#14#0 + +#13'CreateSession'#8#6'Height'#3','#1#16'HorizontalOffset'#3'I'#2#14'Vertica' + +'lOffset'#3#230#0#5'Width'#3#144#1#0#0 +]); diff --git a/packages/fcl-web/examples/webdata/demo3/tralala.pp b/packages/fcl-web/examples/webdata/demo3/tralala.pp new file mode 100644 index 0000000000..ed3a42d29b --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo3/tralala.pp @@ -0,0 +1,28 @@ +unit tralala; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb; + +type + TFPWebModule1 = class(TFPWebModule) + private + { private declarations } + public + { public declarations } + end; + +var + FPWebModule1: TFPWebModule1; + +implementation + +initialization + {$I tralala.lrs} + + RegisterHTTPModule('TFPWebModule1', TFPWebModule1); +end. + diff --git a/packages/fcl-web/examples/webdata/demo3/wmusers.lfm b/packages/fcl-web/examples/webdata/demo3/wmusers.lfm new file mode 100644 index 0000000000..9087c3876a --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo3/wmusers.lfm @@ -0,0 +1,49 @@ +object FPWebProviderDataModule1: TFPWebProviderDataModule1 + OnCreate = DataModuleCreate + OldCreateOrder = False + InputAdaptor = ExtJSJSonWebdataInputAdaptor1 + ContentProducer = ExtJSJSONDataFormatter1 + OnGetContentProducer = DataModuleGetContentProducer + OnGetInputAdaptor = DataModuleGetInputAdaptor + Height = 300 + HorizontalOffset = 539 + VerticalOffset = 447 + Width = 400 + object ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor + left = 176 + top = 96 + end + object ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter + AllowPageSize = False + left = 176 + top = 136 + end + object ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor + left = 216 + top = 96 + end + object ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter + AllowPageSize = False + left = 216 + top = 136 + end + object Dbf1: TDbf + FilePath = '/home/michael/public_html/extjs/demo2/' + IndexDefs = <> + TableName = 'users.dbf' + TableLevel = 7 + FilterOptions = [] + left = 79 + top = 92 + end + object Datasource1: TDatasource + DataSet = Dbf1 + left = 76 + top = 132 + end + object AName: TFPWebDataProvider + DataSource = Datasource1 + left = 133 + top = 117 + end +end diff --git a/packages/fcl-web/examples/webdata/demo3/wmusers.lrs b/packages/fcl-web/examples/webdata/demo3/wmusers.lrs new file mode 100644 index 0000000000..4a098b738d --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo3/wmusers.lrs @@ -0,0 +1,21 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TFPWebProviderDataModule1','FORMDATA',[ + 'TPF0'#25'TFPWebProviderDataModule1'#24'FPWebProviderDataModule1'#8'OnCreate' + +#7#16'DataModuleCreate'#14'OldCreateOrder'#8#12'InputAdaptor'#7#29'ExtJSJSon' + +'WebdataInputAdaptor1'#15'ContentProducer'#7#23'ExtJSJSONDataFormatter1'#20 + +'OnGetContentProducer'#7#28'DataModuleGetContentProducer'#17'OnGetInputAdapt' + +'or'#7#25'DataModuleGetInputAdaptor'#6'Height'#3','#1#16'HorizontalOffset'#3 + +#27#2#14'VerticalOffset'#3#191#1#5'Width'#3#144#1#0#29'TExtJSJSonWebdataInpu' + +'tAdaptor'#29'ExtJSJSonWebdataInputAdaptor1'#4'left'#3#176#0#3'top'#2'`'#0#0 + +#23'TExtJSJSONDataFormatter'#23'ExtJSJSONDataFormatter1'#13'AllowPageSize'#8 + +#4'left'#3#176#0#3'top'#3#136#0#0#0#28'TExtJSXMLWebdataInputAdaptor'#28'ExtJ' + +'SXMLWebdataInputAdaptor1'#4'left'#3#216#0#3'top'#2'`'#0#0#22'TExtJSXMLDataF' + +'ormatter'#22'ExtJSXMLDataFormatter1'#13'AllowPageSize'#8#4'left'#3#216#0#3 + +'top'#3#136#0#0#0#4'TDbf'#4'Dbf1'#8'FilePath'#6'&/home/michael/public_html/e' + +'xtjs/demo2/'#9'IndexDefs'#14#0#9'TableName'#6#9'users.dbf'#10'TableLevel'#2 + +#7#13'FilterOptions'#11#0#4'left'#2'O'#3'top'#2'\'#0#0#11'TDatasource'#11'Da' + +'tasource1'#7'DataSet'#7#4'Dbf1'#4'left'#2'L'#3'top'#3#132#0#0#0#18'TFPWebDa' + +'taProvider'#5'AName'#10'DataSource'#7#11'Datasource1'#4'left'#3#133#0#3'top' + +#2'u'#0#0#0 +]); diff --git a/packages/fcl-web/examples/webdata/demo3/wmusers.pp b/packages/fcl-web/examples/webdata/demo3/wmusers.pp new file mode 100644 index 0000000000..453db4a376 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo3/wmusers.pp @@ -0,0 +1,68 @@ +unit wmusers; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb, + dbf, db, fpwebdata, extjsjson, extjsxml; + +type + + { TFPWebProviderDataModule1 } + + TFPWebProviderDataModule1 = class(TFPWebProviderDataModule) + Datasource1: TDatasource; + Dbf1: TDbf; + ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter; + ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor; + ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter; + ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor; + AName: TFPWebDataProvider; + procedure DataModuleCreate(Sender: TObject); + procedure DataModuleGetContentProducer(Sender: TObject; + var AContentProducer: TCustomHTTPDataContentProducer); + procedure DataModuleGetInputAdaptor(Sender: TObject; + var AInputAdaptor: TCustomWebdataInputAdaptor); + private + { private declarations } + public + { public declarations } + end; + +var + FPWebProviderDataModule1: TFPWebProviderDataModule1; + +implementation + +{ TFPWebProviderDataModule1 } + +procedure TFPWebProviderDataModule1.DataModuleGetInputAdaptor(Sender: TObject; + var AInputAdaptor: TCustomWebdataInputAdaptor); +begin + If Request.QueryFields.values['format']='xml' then + AInputAdaptor:=ExtJSXMLWebdataInputAdaptor1; +end; + +procedure TFPWebProviderDataModule1.DataModuleGetContentProducer( + Sender: TObject; var AContentProducer: TCustomHTTPDataContentProducer); +begin + If Request.QueryFields.values['format']='xml' then + AContentProducer:=ExtJSXMLDataFormatter1; +end; + +procedure TFPWebProviderDataModule1.DataModuleCreate(Sender: TObject); +begin + DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf'; + DBF1.Open; + With DBF1.FieldByname('ID') do + ProviderFlags:=ProviderFlags+[pfInKey]; +end; + +initialization + {$I wmusers.lrs} + + RegisterHTTPModule('Provider', TFPWebProviderDataModule1); +end. + diff --git a/packages/fcl-web/examples/webdata/demo4/dmusers.lfm b/packages/fcl-web/examples/webdata/demo4/dmusers.lfm new file mode 100644 index 0000000000..b16145f868 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo4/dmusers.lfm @@ -0,0 +1,27 @@ +object DataModule1: TDataModule1 + OnCreate = DataModuleCreate + OldCreateOrder = False + Height = 300 + HorizontalOffset = 356 + VerticalOffset = 360 + Width = 400 + object AName: TFPWebDataProvider + DataSource = Datasource1 + left = 161 + top = 145 + end + object Datasource1: TDatasource + DataSet = Dbf1 + left = 104 + top = 160 + end + object Dbf1: TDbf + FilePath = '/home/michael/public_html/extjs/demo2/' + IndexDefs = <> + TableName = 'users.dbf' + TableLevel = 7 + FilterOptions = [] + left = 107 + top = 120 + end +end diff --git a/packages/fcl-web/examples/webdata/demo4/dmusers.lrs b/packages/fcl-web/examples/webdata/demo4/dmusers.lrs new file mode 100644 index 0000000000..ec24a1bc6e --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo4/dmusers.lrs @@ -0,0 +1,12 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TDataModule1','FORMDATA',[ + 'TPF0'#12'TDataModule1'#11'DataModule1'#8'OnCreate'#7#16'DataModuleCreate'#14 + +'OldCreateOrder'#8#6'Height'#3','#1#16'HorizontalOffset'#3'd'#1#14'VerticalO' + +'ffset'#3'h'#1#5'Width'#3#144#1#0#18'TFPWebDataProvider'#5'AName'#10'DataSou' + +'rce'#7#11'Datasource1'#4'left'#3#161#0#3'top'#3#145#0#0#0#11'TDatasource'#11 + +'Datasource1'#7'DataSet'#7#4'Dbf1'#4'left'#2'h'#3'top'#3#160#0#0#0#4'TDbf'#4 + +'Dbf1'#8'FilePath'#6'&/home/michael/public_html/extjs/demo2/'#9'IndexDefs'#14 + +#0#9'TableName'#6#9'users.dbf'#10'TableLevel'#2#7#13'FilterOptions'#11#0#4'l' + +'eft'#2'k'#3'top'#2'x'#0#0#0 +]); diff --git a/packages/fcl-web/examples/webdata/demo4/dmusers.pp b/packages/fcl-web/examples/webdata/demo4/dmusers.pp new file mode 100644 index 0000000000..2e03d36f05 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo4/dmusers.pp @@ -0,0 +1,52 @@ +unit dmusers; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, db, dbf, + fpwebdata; + +type + + { TDataModule1 } + + TDataModule1 = class(TDataModule) + AName: TFPWebDataProvider; + Datasource1: TDatasource; + Dbf1: TDbf; + procedure DataModuleCreate(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + DataModule1: TDataModule1; + +implementation + +uses dbugintf; +{ TDataModule1 } + +procedure TDataModule1.DataModuleCreate(Sender: TObject); +begin + senddebug('Creating datamodule 1 '+InTToStr(Ord(WebDataProviderManager.Registering))); + If not WebDataProviderManager.Registering then + begin + DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf'; + DBF1.Open; + With DBF1.FieldByname('ID') do + ProviderFlags:=ProviderFlags+[pfInKey]; + DBF1.First; + end; +end; + +initialization + {$I dmusers.lrs} + WebDataProviderManager.RegisterDatamodule(TDataModule1) + +end. + diff --git a/packages/fcl-web/examples/webdata/demo4/extgrid-json.html b/packages/fcl-web/examples/webdata/demo4/extgrid-json.html new file mode 100644 index 0000000000..b24b57ac43 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo4/extgrid-json.html @@ -0,0 +1,11 @@ + + +ExtJS JSON Data demo + + + + + + + + \ No newline at end of file diff --git a/packages/fcl-web/examples/webdata/demo4/extgrid-json.js b/packages/fcl-web/examples/webdata/demo4/extgrid-json.js new file mode 100644 index 0000000000..98f732ed13 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo4/extgrid-json.js @@ -0,0 +1,97 @@ +Ext.ns('FPC'); + +FPC.ShowPage = function () { + var myproxy = new Ext.data.HttpProxy ( { + api : { + read: "extgrid.cgi/JSONProvider/AName/Read/", + update: "extgrid.cgi/JSONProvider/AName/Update/", + create: "extgrid.cgi/JSONProvider/AName/Insert/", + destroy: "extgrid.cgi/JSONProvider/AName/Delete/" + } + }); + var myreader = new Ext.data.JsonReader ({ + root: "rows", + idProperty: "ID", + messageProperty: 'message', // Must be specified here + fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"] + }); + var mywriter = new Ext.data.JsonWriter({ + encode: true, + writeAllFields: true, + idProperty: "ID" + }); + var data = new Ext.data.Store({ + proxy: myproxy, + reader: myreader, + writer: mywriter, + autoSave: false, + idProperty: "ID", + }); + // Listen to errors. + data.addListener('exception', function(proxy, type, action, options, res) { + if (type === 'remote') { + Ext.Msg.show({ + title: 'REMOTE EXCEPTION', + msg: res.message, + icon: Ext.MessageBox.ERROR, + buttons: Ext.Msg.OK + }); + } + }); + data.load({ params:{start: 0, limit: 30}}); + var grid = new Ext.grid.EditorGridPanel({ + renderTo: Ext.getBody(), + frame: true, + title: "Known users", + height: 600, + width: 800, + store: data, + columns: [ + {header: 'ID', dataIndex: "ID", sortable: true, hidden: true}, + {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()}, + ], + bbar: new Ext.PagingToolbar({ + pageSize: 30, + store: data, + displayInfo: true + }), + tbar : [{ + text: 'Add', + iconCls: 'icon-add', + handler: function(btn, ev) { + var u = new grid.store.recordType(); + grid.stopEditing(); + grid.store.insert(0, u); + grid.startEditing(0, 1); + }, + scope: grid + }, '-', { + text: 'Delete', + iconCls: 'icon-delete', + handler: function(btn, ev) { + var index = grid.getSelectionModel().getSelectedCell(); + if (!index) { + return false; + } + var rec = grid.store.getAt(index[0]); + grid.store.remove(rec); + }, + scope: grid + }, '-', { + text: 'Save', + iconCls: 'icon-save', + handler: function(btn, ev) { + grid.store.save(); + }, + scope: grid + } + ] + // F.ContentToStream(M); + + }); + grid.show(); +} +Ext.onReady(FPC.ShowPage); diff --git a/packages/fcl-web/examples/webdata/demo4/extgrid-xml.html b/packages/fcl-web/examples/webdata/demo4/extgrid-xml.html new file mode 100644 index 0000000000..d01e2971e3 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo4/extgrid-xml.html @@ -0,0 +1,11 @@ + + +ExtJS XML Data demo + + + + + + + + \ No newline at end of file diff --git a/packages/fcl-web/examples/webdata/demo4/extgrid-xml.js b/packages/fcl-web/examples/webdata/demo4/extgrid-xml.js new file mode 100644 index 0000000000..8183432334 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo4/extgrid-xml.js @@ -0,0 +1,100 @@ +Ext.ns('FPC'); + +FPC.ShowPage = function () { + var myproxy = new Ext.data.HttpProxy ( { + api : { + read: "extgrid.cgi/XMLProvider/AName/Read/", + update: "extgrid.cgi/XMLProvider/AName/Update/", + create: "extgrid.cgi/XMLProvider/AName/Insert/", + destroy: "extgrid.cgi/XMLProvider/AName/Delete/", + } + }); + var myreader = new Ext.data.XmlReader ({ + totalProperty: "total", + record: "row", + idProperty: "ID", + successProperty: "success", + messageProperty: "message", + fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"] + }); + var mywriter = new Ext.data.XmlWriter({ + encode: true, + writeAllFields: true, + idProperty: "ID", + root: "records" + }); + var data = new Ext.data.Store({ + proxy: myproxy, + reader: myreader, + writer: mywriter, + autoSave: false, + idProperty: "ID", + }); + // Listen to errors. + data.addListener('exception', function(proxy, type, action, options, res) { + if (type === 'remote') { + Ext.Msg.show({ + title: 'REMOTE EXCEPTION', + msg: res.message, + icon: Ext.MessageBox.ERROR, + buttons: Ext.Msg.OK + }); + } + }); + data.load({ params:{start: 0, limit: 30}}); + var grid = new Ext.grid.EditorGridPanel({ + renderTo: Ext.getBody(), + frame: true, + title: "Known users", + height: 600, + width: 800, + store: data, + columns: [ + {header: 'ID', dataIndex: "ID", sortable: true, hidden: true}, + {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()}, + ], + bbar: new Ext.PagingToolbar({ + pageSize: 30, + store: data, + displayInfo: true + }), + tbar : [{ + text: 'Add', + iconCls: 'icon-add', + handler: function(btn, ev) { + var u = new grid.store.recordType(); + grid.stopEditing(); + grid.store.insert(0, u); + grid.startEditing(0, 1); + }, + scope: grid + }, '-', { + text: 'Delete', + iconCls: 'icon-delete', + handler: function(btn, ev) { + var index = grid.getSelectionModel().getSelectedCell(); + if (!index) { + return false; + } + var rec = grid.store.getAt(index[0]); + grid.store.remove(rec); + }, + scope: grid + }, '-', { + text: 'Save', + iconCls: 'icon-save', + handler: function(btn, ev) { + grid.store.save(); + }, + scope: grid + } + ] + // F.ContentToStream(M); + + }); + grid.show(); +} +Ext.onReady(FPC.ShowPage); diff --git a/packages/fcl-web/examples/webdata/demo4/extgrid.lpi b/packages/fcl-web/examples/webdata/demo4/extgrid.lpi new file mode 100644 index 0000000000..39e167a6c0 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo4/extgrid.lpi @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/fcl-web/examples/webdata/demo4/extgrid.lpr b/packages/fcl-web/examples/webdata/demo4/extgrid.lpr new file mode 100644 index 0000000000..989fed17d4 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo4/extgrid.lpr @@ -0,0 +1,15 @@ +program extgrid; + +{$mode objfpc}{$H+} + +uses + {$ifdef unix}cwstring,xmliconv,{$endif} + fpCGI, wmjsonusers, wmxmlusers, dmusers; + +{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF} + +begin + Application.Initialize; + Application.Run; +end. + diff --git a/packages/fcl-web/examples/webdata/demo4/wmjsonusers.lfm b/packages/fcl-web/examples/webdata/demo4/wmjsonusers.lfm new file mode 100644 index 0000000000..e2241815b2 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo4/wmjsonusers.lfm @@ -0,0 +1,18 @@ +object FPWebProviderDataModule1: TFPWebProviderDataModule1 + OldCreateOrder = False + InputAdaptor = ExtJSJSonWebdataInputAdaptor1 + ContentProducer = ExtJSJSONDataFormatter1 + Height = 300 + HorizontalOffset = 635 + VerticalOffset = 230 + Width = 400 + object ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor + left = 204 + top = 124 + end + object ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter + AllowPageSize = False + left = 204 + top = 164 + end +end diff --git a/packages/fcl-web/examples/webdata/demo4/wmjsonusers.lrs b/packages/fcl-web/examples/webdata/demo4/wmjsonusers.lrs new file mode 100644 index 0000000000..19e54f1248 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo4/wmjsonusers.lrs @@ -0,0 +1,11 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TFPWebProviderDataModule1','FORMDATA',[ + 'TPF0'#25'TFPWebProviderDataModule1'#24'FPWebProviderDataModule1'#14'OldCreat' + +'eOrder'#8#12'InputAdaptor'#7#29'ExtJSJSonWebdataInputAdaptor1'#15'ContentPr' + +'oducer'#7#23'ExtJSJSONDataFormatter1'#6'Height'#3','#1#16'HorizontalOffset' + +#3'{'#2#14'VerticalOffset'#3#230#0#5'Width'#3#144#1#0#29'TExtJSJSonWebdataIn' + +'putAdaptor'#29'ExtJSJSonWebdataInputAdaptor1'#4'left'#3#204#0#3'top'#2'|'#0 + +#0#23'TExtJSJSONDataFormatter'#23'ExtJSJSONDataFormatter1'#13'AllowPageSize' + +#8#4'left'#3#204#0#3'top'#3#164#0#0#0#0 +]); diff --git a/packages/fcl-web/examples/webdata/demo4/wmjsonusers.pp b/packages/fcl-web/examples/webdata/demo4/wmjsonusers.pp new file mode 100644 index 0000000000..acbf88a11b --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo4/wmjsonusers.pp @@ -0,0 +1,34 @@ +unit wmjsonusers; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb, + fpwebdata, extjsjson; + +type + + { TFPWebProviderDataModule1 } + + TFPWebProviderDataModule1 = class(TFPWebProviderDataModule) + ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter; + ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor; + private + { private declarations } + public + { public declarations } + end; + +var + FPWebProviderDataModule1: TFPWebProviderDataModule1; + +implementation + +initialization + {$I wmjsonusers.lrs} + + RegisterHTTPModule('JSONProvider', TFPWebProviderDataModule1); +end. + diff --git a/packages/fcl-web/examples/webdata/demo4/wmxmlusers.lfm b/packages/fcl-web/examples/webdata/demo4/wmxmlusers.lfm new file mode 100644 index 0000000000..ea3810dd4f --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo4/wmxmlusers.lfm @@ -0,0 +1,18 @@ +object FPWebProviderDataModule2: TFPWebProviderDataModule2 + OldCreateOrder = False + InputAdaptor = ExtJSXMLWebdataInputAdaptor1 + ContentProducer = ExtJSXMLDataFormatter1 + Height = 300 + HorizontalOffset = 545 + VerticalOffset = 399 + Width = 400 + object ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor + left = 244 + top = 124 + end + object ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter + AllowPageSize = False + left = 244 + top = 164 + end +end diff --git a/packages/fcl-web/examples/webdata/demo4/wmxmlusers.lrs b/packages/fcl-web/examples/webdata/demo4/wmxmlusers.lrs new file mode 100644 index 0000000000..cf8ce3881b --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo4/wmxmlusers.lrs @@ -0,0 +1,11 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TFPWebProviderDataModule2','FORMDATA',[ + 'TPF0'#25'TFPWebProviderDataModule2'#24'FPWebProviderDataModule2'#14'OldCreat' + +'eOrder'#8#12'InputAdaptor'#7#28'ExtJSXMLWebdataInputAdaptor1'#15'ContentPro' + +'ducer'#7#22'ExtJSXMLDataFormatter1'#6'Height'#3','#1#16'HorizontalOffset'#3 + +'!'#2#14'VerticalOffset'#3#143#1#5'Width'#3#144#1#0#28'TExtJSXMLWebdataInput' + +'Adaptor'#28'ExtJSXMLWebdataInputAdaptor1'#4'left'#3#244#0#3'top'#2'|'#0#0#22 + +'TExtJSXMLDataFormatter'#22'ExtJSXMLDataFormatter1'#13'AllowPageSize'#8#4'le' + +'ft'#3#244#0#3'top'#3#164#0#0#0#0 +]); diff --git a/packages/fcl-web/examples/webdata/demo4/wmxmlusers.pp b/packages/fcl-web/examples/webdata/demo4/wmxmlusers.pp new file mode 100644 index 0000000000..aa82b59a08 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo4/wmxmlusers.pp @@ -0,0 +1,34 @@ +unit wmxmlusers; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb, + fpwebdata, extjsxml; + +type + + { TFPWebProviderDataModule2 } + + TFPWebProviderDataModule2 = class(TFPWebProviderDataModule) + ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter; + ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor; + private + { private declarations } + public + { public declarations } + end; + +var + FPWebProviderDataModule2: TFPWebProviderDataModule2; + +implementation + +initialization + {$I wmxmlusers.lrs} + + RegisterHTTPModule('XMLProvider', TFPWebProviderDataModule2); +end. + diff --git a/packages/fcl-web/examples/webdata/demo5/extgrid-json.html b/packages/fcl-web/examples/webdata/demo5/extgrid-json.html new file mode 100644 index 0000000000..b24b57ac43 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo5/extgrid-json.html @@ -0,0 +1,11 @@ + + +ExtJS JSON Data demo + + + + + + + + \ No newline at end of file diff --git a/packages/fcl-web/examples/webdata/demo5/extgrid-json.js b/packages/fcl-web/examples/webdata/demo5/extgrid-json.js new file mode 100644 index 0000000000..9f22a2ab3c --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo5/extgrid-json.js @@ -0,0 +1,97 @@ +Ext.ns('FPC'); + +FPC.ShowPage = function () { + var myproxy = new Ext.data.HttpProxy ( { + api : { + read: "extgrid.cgi/Provider/AName/Read/", + update: "extgrid.cgi/Provider/AName/Update/", + create: "extgrid.cgi/Provider/AName/Insert/", + destroy: "extgrid.cgi/Provider/AName/Delete/" + } + }); + var myreader = new Ext.data.JsonReader ({ + root: "rows", + idProperty: "ID", + messageProperty: 'message', // Must be specified here + fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"] + }); + var mywriter = new Ext.data.JsonWriter({ + encode: true, + writeAllFields: true, + idProperty: "ID" + }); + var data = new Ext.data.Store({ + proxy: myproxy, + reader: myreader, + writer: mywriter, + autoSave: false, + idProperty: "ID", + }); + // Listen to errors. + data.addListener('exception', function(proxy, type, action, options, res) { + if (type === 'remote') { + Ext.Msg.show({ + title: 'REMOTE EXCEPTION', + msg: res.message, + icon: Ext.MessageBox.ERROR, + buttons: Ext.Msg.OK + }); + } + }); + data.load({ params:{start: 0, limit: 30}}); + var grid = new Ext.grid.EditorGridPanel({ + renderTo: Ext.getBody(), + frame: true, + title: "Known users", + height: 600, + width: 800, + store: data, + columns: [ + {header: 'ID', dataIndex: "ID", sortable: true, hidden: true}, + {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()}, + ], + bbar: new Ext.PagingToolbar({ + pageSize: 30, + store: data, + displayInfo: true + }), + tbar : [{ + text: 'Add', + iconCls: 'icon-add', + handler: function(btn, ev) { + var u = new grid.store.recordType(); + grid.stopEditing(); + grid.store.insert(0, u); + grid.startEditing(0, 1); + }, + scope: grid + }, '-', { + text: 'Delete', + iconCls: 'icon-delete', + handler: function(btn, ev) { + var index = grid.getSelectionModel().getSelectedCell(); + if (!index) { + return false; + } + var rec = grid.store.getAt(index[0]); + grid.store.remove(rec); + }, + scope: grid + }, '-', { + text: 'Save', + iconCls: 'icon-save', + handler: function(btn, ev) { + grid.store.save(); + }, + scope: grid + } + ] + // F.ContentToStream(M); + + }); + grid.show(); +} +Ext.onReady(FPC.ShowPage); diff --git a/packages/fcl-web/examples/webdata/demo5/extgrid-xml.html b/packages/fcl-web/examples/webdata/demo5/extgrid-xml.html new file mode 100644 index 0000000000..d01e2971e3 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo5/extgrid-xml.html @@ -0,0 +1,11 @@ + + +ExtJS XML Data demo + + + + + + + + \ No newline at end of file diff --git a/packages/fcl-web/examples/webdata/demo5/extgrid-xml.js b/packages/fcl-web/examples/webdata/demo5/extgrid-xml.js new file mode 100644 index 0000000000..f60117d3e2 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo5/extgrid-xml.js @@ -0,0 +1,100 @@ +Ext.ns('FPC'); + +FPC.ShowPage = function () { + var myproxy = new Ext.data.HttpProxy ( { + api : { + read: "extgrid.cgi/Provider/AName/Read/?format=xml", + update: "extgrid.cgi/Provider/AName/Update/?format=xml", + create: "extgrid.cgi/Provider/AName/Insert/?format=xml", + destroy: "extgrid.cgi/Provider/AName/Delete/?format=xml", + } + }); + var myreader = new Ext.data.XmlReader ({ + totalProperty: "total", + record: "row", + idProperty: "ID", + successProperty: "success", + messageProperty: "message", + fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"] + }); + var mywriter = new Ext.data.XmlWriter({ + encode: true, + writeAllFields: true, + idProperty: "ID", + root: "records" + }); + var data = new Ext.data.Store({ + proxy: myproxy, + reader: myreader, + writer: mywriter, + autoSave: false, + idProperty: "ID", + }); + // Listen to errors. + data.addListener('exception', function(proxy, type, action, options, res) { + if (type === 'remote') { + Ext.Msg.show({ + title: 'REMOTE EXCEPTION', + msg: res.message, + icon: Ext.MessageBox.ERROR, + buttons: Ext.Msg.OK + }); + } + }); + data.load({ params:{start: 0, limit: 30}}); + var grid = new Ext.grid.EditorGridPanel({ + renderTo: Ext.getBody(), + frame: true, + title: "Known users", + height: 600, + width: 800, + store: data, + columns: [ + {header: 'ID', dataIndex: "ID", sortable: true, hidden: true}, + {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()}, + ], + bbar: new Ext.PagingToolbar({ + pageSize: 30, + store: data, + displayInfo: true + }), + tbar : [{ + text: 'Add', + iconCls: 'icon-add', + handler: function(btn, ev) { + var u = new grid.store.recordType(); + grid.stopEditing(); + grid.store.insert(0, u); + grid.startEditing(0, 1); + }, + scope: grid + }, '-', { + text: 'Delete', + iconCls: 'icon-delete', + handler: function(btn, ev) { + var index = grid.getSelectionModel().getSelectedCell(); + if (!index) { + return false; + } + var rec = grid.store.getAt(index[0]); + grid.store.remove(rec); + }, + scope: grid + }, '-', { + text: 'Save', + iconCls: 'icon-save', + handler: function(btn, ev) { + grid.store.save(); + }, + scope: grid + } + ] + // F.ContentToStream(M); + + }); + grid.show(); +} +Ext.onReady(FPC.ShowPage); diff --git a/packages/fcl-web/examples/webdata/demo5/extgrid.lpi b/packages/fcl-web/examples/webdata/demo5/extgrid.lpi new file mode 100644 index 0000000000..f504646989 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo5/extgrid.lpi @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/fcl-web/examples/webdata/demo5/extgrid.lpr b/packages/fcl-web/examples/webdata/demo5/extgrid.lpr new file mode 100644 index 0000000000..218196742d --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo5/extgrid.lpr @@ -0,0 +1,15 @@ +program extgrid; + +{$mode objfpc}{$H+} + +uses + {$ifdef unix}cwstring, xmliconv,{$endif} + fpCGI, wmusers; + +{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF} + +begin + Application.Initialize; + Application.Run; +end. + diff --git a/packages/fcl-web/examples/webdata/demo5/wmusers.lfm b/packages/fcl-web/examples/webdata/demo5/wmusers.lfm new file mode 100644 index 0000000000..efe321fe95 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo5/wmusers.lfm @@ -0,0 +1,29 @@ +object FPWebProviderDataModule2: TFPWebProviderDataModule2 + OldCreateOrder = False + InputAdaptor = ExtJSJSonWebdataInputAdaptor1 + ContentProducer = ExtJSJSONDataFormatter1 + OnGetContentProducer = DataModuleGetContentProducer + OnGetInputAdaptor = DataModuleGetInputAdaptor + Height = 300 + HorizontalOffset = 538 + VerticalOffset = 460 + Width = 400 + object ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor + left = 204 + top = 124 + end + object ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor + left = 244 + top = 124 + end + object ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter + AllowPageSize = False + left = 244 + top = 164 + end + object ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter + AllowPageSize = False + left = 204 + top = 164 + end +end diff --git a/packages/fcl-web/examples/webdata/demo5/wmusers.lrs b/packages/fcl-web/examples/webdata/demo5/wmusers.lrs new file mode 100644 index 0000000000..0ccbbab20d --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo5/wmusers.lrs @@ -0,0 +1,15 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TFPWebProviderDataModule2','FORMDATA',[ + 'TPF0'#25'TFPWebProviderDataModule2'#24'FPWebProviderDataModule2'#14'OldCreat' + +'eOrder'#8#12'InputAdaptor'#7#29'ExtJSJSonWebdataInputAdaptor1'#15'ContentPr' + +'oducer'#7#23'ExtJSJSONDataFormatter1'#20'OnGetContentProducer'#7#28'DataMod' + +'uleGetContentProducer'#17'OnGetInputAdaptor'#7#25'DataModuleGetInputAdaptor' + +#6'Height'#3','#1#16'HorizontalOffset'#3#26#2#14'VerticalOffset'#3#204#1#5'W' + +'idth'#3#144#1#0#29'TExtJSJSonWebdataInputAdaptor'#29'ExtJSJSonWebdataInputA' + +'daptor1'#4'left'#3#204#0#3'top'#2'|'#0#0#28'TExtJSXMLWebdataInputAdaptor'#28 + +'ExtJSXMLWebdataInputAdaptor1'#4'left'#3#244#0#3'top'#2'|'#0#0#22'TExtJSXMLD' + +'ataFormatter'#22'ExtJSXMLDataFormatter1'#13'AllowPageSize'#8#4'left'#3#244#0 + +#3'top'#3#164#0#0#0#23'TExtJSJSONDataFormatter'#23'ExtJSJSONDataFormatter1' + +#13'AllowPageSize'#8#4'left'#3#204#0#3'top'#3#164#0#0#0#0 +]); diff --git a/packages/fcl-web/examples/webdata/demo5/wmusers.pp b/packages/fcl-web/examples/webdata/demo5/wmusers.pp new file mode 100644 index 0000000000..a0f2883dc0 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo5/wmusers.pp @@ -0,0 +1,85 @@ +unit wmusers; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb, + db, dbf, fpwebdata, extjsjson, extjsxml; + +type + + { TFPWebProviderDataModule2 } + + TFPWebProviderDataModule2 = class(TFPWebProviderDataModule) + ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter; + ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor; + ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter; + ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor; + procedure DataModuleGetContentProducer(Sender: TObject; + var AContentProducer: TCustomHTTPDataContentProducer); + procedure DataModuleGetInputAdaptor(Sender: TObject; + var AInputAdaptor: TCustomWebdataInputAdaptor); + private + { private declarations } + public + { public declarations } + end; + +var + FPWebProviderDataModule2: TFPWebProviderDataModule2; + +implementation + +Type + + { TDBFWebDataProvider } + + TDBFWebDataProvider = Class(TFPCustomWebDataProvider) + FDBF : TDBF; + Public + Constructor Create(AOwner : TComponent); override; + Function GetDataset : TDataset; override; + end; + +{ TDBFWebDataProvider } + +constructor TDBFWebDataProvider.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FDBF:=TDBF.Create(Self); + FDBF.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf'; + FDBF.Open; + With FDBF.FieldByname('ID') do + ProviderFlags:=ProviderFlags+[pfInKey]; +end; + +function TDBFWebDataProvider.GetDataset: TDataset; +begin + Result:=FDBF; +end; + +{ TFPWebProviderDataModule2 } + +procedure TFPWebProviderDataModule2.DataModuleGetInputAdaptor(Sender: TObject; + var AInputAdaptor: TCustomWebdataInputAdaptor); +begin + If Request.QueryFields.values['format']='xml' then + AInputAdaptor:=ExtJSXMLWebdataInputAdaptor1; +end; + +procedure TFPWebProviderDataModule2.DataModuleGetContentProducer( + Sender: TObject; var AContentProducer: TCustomHTTPDataContentProducer); +begin + If Request.QueryFields.values['format']='xml' then + AContentProducer:=ExtJSXMLDataFormatter1; +end; + +initialization + {$I wmusers.lrs} + + RegisterHTTPModule('Provider', TFPWebProviderDataModule2); + WebDataProviderManager.RegisterProvider('AName',TDBFWebDataProvider); +end. + diff --git a/packages/fcl-web/examples/webdata/demo6/extgrid-json.html b/packages/fcl-web/examples/webdata/demo6/extgrid-json.html new file mode 100644 index 0000000000..b24b57ac43 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo6/extgrid-json.html @@ -0,0 +1,11 @@ + + +ExtJS JSON Data demo + + + + + + + + \ No newline at end of file diff --git a/packages/fcl-web/examples/webdata/demo6/extgrid-json.js b/packages/fcl-web/examples/webdata/demo6/extgrid-json.js new file mode 100644 index 0000000000..9f22a2ab3c --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo6/extgrid-json.js @@ -0,0 +1,97 @@ +Ext.ns('FPC'); + +FPC.ShowPage = function () { + var myproxy = new Ext.data.HttpProxy ( { + api : { + read: "extgrid.cgi/Provider/AName/Read/", + update: "extgrid.cgi/Provider/AName/Update/", + create: "extgrid.cgi/Provider/AName/Insert/", + destroy: "extgrid.cgi/Provider/AName/Delete/" + } + }); + var myreader = new Ext.data.JsonReader ({ + root: "rows", + idProperty: "ID", + messageProperty: 'message', // Must be specified here + fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"] + }); + var mywriter = new Ext.data.JsonWriter({ + encode: true, + writeAllFields: true, + idProperty: "ID" + }); + var data = new Ext.data.Store({ + proxy: myproxy, + reader: myreader, + writer: mywriter, + autoSave: false, + idProperty: "ID", + }); + // Listen to errors. + data.addListener('exception', function(proxy, type, action, options, res) { + if (type === 'remote') { + Ext.Msg.show({ + title: 'REMOTE EXCEPTION', + msg: res.message, + icon: Ext.MessageBox.ERROR, + buttons: Ext.Msg.OK + }); + } + }); + data.load({ params:{start: 0, limit: 30}}); + var grid = new Ext.grid.EditorGridPanel({ + renderTo: Ext.getBody(), + frame: true, + title: "Known users", + height: 600, + width: 800, + store: data, + columns: [ + {header: 'ID', dataIndex: "ID", sortable: true, hidden: true}, + {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()}, + ], + bbar: new Ext.PagingToolbar({ + pageSize: 30, + store: data, + displayInfo: true + }), + tbar : [{ + text: 'Add', + iconCls: 'icon-add', + handler: function(btn, ev) { + var u = new grid.store.recordType(); + grid.stopEditing(); + grid.store.insert(0, u); + grid.startEditing(0, 1); + }, + scope: grid + }, '-', { + text: 'Delete', + iconCls: 'icon-delete', + handler: function(btn, ev) { + var index = grid.getSelectionModel().getSelectedCell(); + if (!index) { + return false; + } + var rec = grid.store.getAt(index[0]); + grid.store.remove(rec); + }, + scope: grid + }, '-', { + text: 'Save', + iconCls: 'icon-save', + handler: function(btn, ev) { + grid.store.save(); + }, + scope: grid + } + ] + // F.ContentToStream(M); + + }); + grid.show(); +} +Ext.onReady(FPC.ShowPage); diff --git a/packages/fcl-web/examples/webdata/demo6/extgrid-xml.html b/packages/fcl-web/examples/webdata/demo6/extgrid-xml.html new file mode 100644 index 0000000000..d01e2971e3 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo6/extgrid-xml.html @@ -0,0 +1,11 @@ + + +ExtJS XML Data demo + + + + + + + + \ No newline at end of file diff --git a/packages/fcl-web/examples/webdata/demo6/extgrid-xml.js b/packages/fcl-web/examples/webdata/demo6/extgrid-xml.js new file mode 100644 index 0000000000..f60117d3e2 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo6/extgrid-xml.js @@ -0,0 +1,100 @@ +Ext.ns('FPC'); + +FPC.ShowPage = function () { + var myproxy = new Ext.data.HttpProxy ( { + api : { + read: "extgrid.cgi/Provider/AName/Read/?format=xml", + update: "extgrid.cgi/Provider/AName/Update/?format=xml", + create: "extgrid.cgi/Provider/AName/Insert/?format=xml", + destroy: "extgrid.cgi/Provider/AName/Delete/?format=xml", + } + }); + var myreader = new Ext.data.XmlReader ({ + totalProperty: "total", + record: "row", + idProperty: "ID", + successProperty: "success", + messageProperty: "message", + fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"] + }); + var mywriter = new Ext.data.XmlWriter({ + encode: true, + writeAllFields: true, + idProperty: "ID", + root: "records" + }); + var data = new Ext.data.Store({ + proxy: myproxy, + reader: myreader, + writer: mywriter, + autoSave: false, + idProperty: "ID", + }); + // Listen to errors. + data.addListener('exception', function(proxy, type, action, options, res) { + if (type === 'remote') { + Ext.Msg.show({ + title: 'REMOTE EXCEPTION', + msg: res.message, + icon: Ext.MessageBox.ERROR, + buttons: Ext.Msg.OK + }); + } + }); + data.load({ params:{start: 0, limit: 30}}); + var grid = new Ext.grid.EditorGridPanel({ + renderTo: Ext.getBody(), + frame: true, + title: "Known users", + height: 600, + width: 800, + store: data, + columns: [ + {header: 'ID', dataIndex: "ID", sortable: true, hidden: true}, + {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})}, + {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()}, + ], + bbar: new Ext.PagingToolbar({ + pageSize: 30, + store: data, + displayInfo: true + }), + tbar : [{ + text: 'Add', + iconCls: 'icon-add', + handler: function(btn, ev) { + var u = new grid.store.recordType(); + grid.stopEditing(); + grid.store.insert(0, u); + grid.startEditing(0, 1); + }, + scope: grid + }, '-', { + text: 'Delete', + iconCls: 'icon-delete', + handler: function(btn, ev) { + var index = grid.getSelectionModel().getSelectedCell(); + if (!index) { + return false; + } + var rec = grid.store.getAt(index[0]); + grid.store.remove(rec); + }, + scope: grid + }, '-', { + text: 'Save', + iconCls: 'icon-save', + handler: function(btn, ev) { + grid.store.save(); + }, + scope: grid + } + ] + // F.ContentToStream(M); + + }); + grid.show(); +} +Ext.onReady(FPC.ShowPage); diff --git a/packages/fcl-web/examples/webdata/demo6/extgrid.ini b/packages/fcl-web/examples/webdata/demo6/extgrid.ini new file mode 100644 index 0000000000..d9bc3c6548 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo6/extgrid.ini @@ -0,0 +1,4 @@ +[Database] +Path=/wisa/firebird/fpcusers.fb +UserName=WISASOFT +Password=SysteemD diff --git a/packages/fcl-web/examples/webdata/demo6/extgrid.lpi b/packages/fcl-web/examples/webdata/demo6/extgrid.lpi new file mode 100644 index 0000000000..e37f86dd31 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo6/extgrid.lpi @@ -0,0 +1,362 @@ + + + + + + + + + + + + + <UseXPManifest Value="True"/> + <Icon Value="0"/> + <ActiveWindowIndexAtStart Value="0"/> + </General> + <VersionInfo> + <StringTable Comments="" CompanyName="" FileDescription="" FileVersion="0.0.0.0" InternalName="" LegalCopyright="" LegalTrademarks="" OriginalFilename="" ProductName="" ProductVersion=""/> + </VersionInfo> + <PublishOptions> + <Version Value="2"/> + <IgnoreBinaries Value="False"/> + <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> + <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> + </local> + </RunParams> + <RequiredPackages Count="5"> + <Item1> + <PackageName Value="SQLDBLaz"/> + <MinVersion Major="1" Release="1" Valid="True"/> + </Item1> + <Item2> + <PackageName Value="lazwebdata"/> + <MinVersion Valid="True"/> + </Item2> + <Item3> + <PackageName Value="WebLaz"/> + </Item3> + <Item4> + <PackageName Value="LCL"/> + </Item4> + <Item5> + <PackageName Value="FCL"/> + </Item5> + </RequiredPackages> + <Units Count="16"> + <Unit0> + <Filename Value="extgrid.lpr"/> + <IsPartOfProject Value="True"/> + <UnitName Value="extgrid"/> + <EditorIndex Value="12"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="33" Y="8"/> + <UsageCount Value="20"/> + <Loaded Value="True"/> + </Unit0> + <Unit1> + <Filename Value="wmusers.pp"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="FPWebProviderDataModule1"/> + <ResourceBaseClass Value="DataModule"/> + <UnitName Value="wmusers"/> + <EditorIndex Value="0"/> + <WindowIndex Value="0"/> + <TopLine Value="78"/> + <CursorPos X="29" Y="86"/> + <UsageCount Value="20"/> + <Loaded Value="True"/> + </Unit1> + <Unit2> + <Filename Value="../demo5/wmusers.pp"/> + <ComponentName Value="FPWebProviderDataModule2"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="DataModule"/> + <UnitName Value="wmusers"/> + <TopLine Value="44"/> + <CursorPos X="1" Y="70"/> + <UsageCount Value="10"/> + </Unit2> + <Unit3> + <Filename Value="../fpwebdata.pp"/> + <ComponentName Value="FPWebProviderDataModule"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="DataModule"/> + <UnitName Value="fpwebdata"/> + <IsVisibleTab Value="True"/> + <EditorIndex Value="1"/> + <WindowIndex Value="0"/> + <TopLine Value="1584"/> + <CursorPos X="8" Y="1600"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit3> + <Unit4> + <Filename Value="../sqldbwebdata.pp"/> + <UnitName Value="sqldbwebdata"/> + <EditorIndex Value="3"/> + <WindowIndex Value="0"/> + <TopLine Value="49"/> + <CursorPos X="2" Y="70"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit4> + <Unit5> + <Filename Value="../extjsjson.pp"/> + <UnitName Value="extjsjson"/> + <EditorIndex Value="11"/> + <WindowIndex Value="0"/> + <TopLine Value="25"/> + <CursorPos X="3" Y="45"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit5> + <Unit6> + <Filename Value="../extjsxml.pp"/> + <UnitName Value="extjsxml"/> + <EditorIndex Value="4"/> + <WindowIndex Value="0"/> + <TopLine Value="49"/> + <CursorPos X="13" Y="54"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit6> + <Unit7> + <Filename Value="../../wst/wstmodule.pas"/> + <UnitName Value="wstmodule"/> + <EditorIndex Value="5"/> + <WindowIndex Value="0"/> + <TopLine Value="25"/> + <CursorPos X="48" Y="22"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit7> + <Unit8> + <Filename Value="../../../fpc/packages/fcl-web/src/fphttp.pp"/> + <UnitName Value="fphttp"/> + <EditorIndex Value="8"/> + <WindowIndex Value="0"/> + <TopLine Value="109"/> + <CursorPos X="92" Y="100"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit8> + <Unit9> + <Filename Value="../../../fpc/packages/fcl-web/src/websession.pp"/> + <UnitName Value="websession"/> + <EditorIndex Value="10"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="3" Y="27"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit9> + <Unit10> + <Filename Value="../../../fpc/packages/fcl-web/src/httpdefs.pp"/> + <UnitName Value="HTTPDefs"/> + <EditorIndex Value="7"/> + <WindowIndex Value="0"/> + <TopLine Value="264"/> + <CursorPos X="18" Y="285"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit10> + <Unit11> + <Filename Value="../../../source/wst/tests/apache_module/wst_apache_binding.pas"/> + <UnitName Value="wst_apache_binding"/> + <TopLine Value="142"/> + <CursorPos X="1" Y="178"/> + <UsageCount Value="10"/> + </Unit11> + <Unit12> + <Filename Value="../../../fpc/packages/fcl-web/src/fpweb.pp"/> + <UnitName Value="fpWeb"/> + <EditorIndex Value="2"/> + <WindowIndex Value="0"/> + <TopLine Value="412"/> + <CursorPos X="18" Y="452"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit12> + <Unit13> + <Filename Value="../../../Documents/source/wst/wst_global.inc"/> + <TopLine Value="1"/> + <CursorPos X="30" Y="19"/> + <UsageCount Value="10"/> + </Unit13> + <Unit14> + <Filename Value="../../wst/regwstmodule.pp"/> + <UnitName Value="regwstmodule"/> + <EditorIndex Value="6"/> + <WindowIndex Value="0"/> + <TopLine Value="1"/> + <CursorPos X="2" Y="1"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit14> + <Unit15> + <Filename Value="../demo/reglazwebdata.pp"/> + <UnitName Value="reglazwebdata"/> + <EditorIndex Value="9"/> + <WindowIndex Value="0"/> + <TopLine Value="37"/> + <CursorPos X="1" Y="73"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit15> + </Units> + <JumpHistory Count="30" HistoryIndex="29"> + <Position1> + <Filename Value="../../wst/wstmodule.pas"/> + <Caret Line="135" Column="3" TopLine="115"/> + </Position1> + <Position2> + <Filename Value="../../wst/wstmodule.pas"/> + <Caret Line="130" Column="16" TopLine="109"/> + </Position2> + <Position3> + <Filename Value="../../wst/wstmodule.pas"/> + <Caret Line="148" Column="1" TopLine="127"/> + </Position3> + <Position4> + <Filename Value="../../wst/wstmodule.pas"/> + <Caret Line="122" Column="92" TopLine="121"/> + </Position4> + <Position5> + <Filename Value="../../wst/wstmodule.pas"/> + <Caret Line="137" Column="1" TopLine="122"/> + </Position5> + <Position6> + <Filename Value="../../wst/wstmodule.pas"/> + <Caret Line="169" Column="26" TopLine="135"/> + </Position6> + <Position7> + <Filename Value="../../wst/wstmodule.pas"/> + <Caret Line="34" Column="1" TopLine="1"/> + </Position7> + <Position8> + <Filename Value="../../wst/wstmodule.pas"/> + <Caret Line="123" Column="17" TopLine="92"/> + </Position8> + <Position9> + <Filename Value="../../wst/wstmodule.pas"/> + <Caret Line="128" Column="36" TopLine="104"/> + </Position9> + <Position10> + <Filename Value="../../wst/wstmodule.pas"/> + <Caret Line="46" Column="48" TopLine="25"/> + </Position10> + <Position11> + <Filename Value="../../wst/wstmodule.pas"/> + <Caret Line="147" Column="1" TopLine="126"/> + </Position11> + <Position12> + <Filename Value="../../wst/wstmodule.pas"/> + <Caret Line="138" Column="6" TopLine="115"/> + </Position12> + <Position13> + <Filename Value="../../wst/wstmodule.pas"/> + <Caret Line="150" Column="1" TopLine="137"/> + </Position13> + <Position14> + <Filename Value="../../wst/wstmodule.pas"/> + <Caret Line="151" Column="3" TopLine="130"/> + </Position14> + <Position15> + <Filename Value="../../wst/wstmodule.pas"/> + <Caret Line="15" Column="1" TopLine="1"/> + </Position15> + <Position16> + <Filename Value="../../wst/wstmodule.pas"/> + <Caret Line="177" Column="37" TopLine="145"/> + </Position16> + <Position17> + <Filename Value="../../wst/wstmodule.pas"/> + <Caret Line="58" Column="1" TopLine="22"/> + </Position17> + <Position18> + <Filename Value="../demo/reglazwebdata.pp"/> + <Caret Line="17" Column="15" TopLine="1"/> + </Position18> + <Position19> + <Filename Value="../../wst/regwstmodule.pp"/> + <Caret Line="55" Column="79" TopLine="16"/> + </Position19> + <Position20> + <Filename Value="../../wst/regwstmodule.pp"/> + <Caret Line="26" Column="3" TopLine="1"/> + </Position20> + <Position21> + <Filename Value="../fpwebdata.pp"/> + <Caret Line="446" Column="14" TopLine="433"/> + </Position21> + <Position22> + <Filename Value="../fpwebdata.pp"/> + <Caret Line="969" Column="79" TopLine="954"/> + </Position22> + <Position23> + <Filename Value="../fpwebdata.pp"/> + <Caret Line="1171" Column="41" TopLine="1154"/> + </Position23> + <Position24> + <Filename Value="../fpwebdata.pp"/> + <Caret Line="1281" Column="32" TopLine="1280"/> + </Position24> + <Position25> + <Filename Value="../fpwebdata.pp"/> + <Caret Line="1296" Column="30" TopLine="1282"/> + </Position25> + <Position26> + <Filename Value="../fpwebdata.pp"/> + <Caret Line="327" Column="14" TopLine="324"/> + </Position26> + <Position27> + <Filename Value="../fpwebdata.pp"/> + <Caret Line="1296" Column="51" TopLine="1280"/> + </Position27> + <Position28> + <Filename Value="../fpwebdata.pp"/> + <Caret Line="1594" Column="19" TopLine="1579"/> + </Position28> + <Position29> + <Filename Value="../fpwebdata.pp"/> + <Caret Line="1606" Column="58" TopLine="1591"/> + </Position29> + <Position30> + <Filename Value="../fpwebdata.pp"/> + <Caret Line="1607" Column="1" TopLine="1592"/> + </Position30> + </JumpHistory> + </ProjectOptions> + <CompilerOptions> + <Version Value="8"/> + <Target> + <Filename Value="extgrid.cgi"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)/"/> + </SearchPaths> + <Other> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <Debugging> + <Exceptions Count="3"> + <Item1> + <Name Value="EAbort"/> + </Item1> + <Item2> + <Name Value="ECodetoolError"/> + </Item2> + <Item3> + <Name Value="EFOpenError"/> + </Item3> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/packages/fcl-web/examples/webdata/demo6/extgrid.lpr b/packages/fcl-web/examples/webdata/demo6/extgrid.lpr new file mode 100644 index 0000000000..c08187d081 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo6/extgrid.lpr @@ -0,0 +1,16 @@ +program extgrid; + +{$mode objfpc}{$H+} + +uses + {$ifdef unix}cwstring,xmliconv,{$endif} + fpCGI, wmusers; + +{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF} + +begin + Application.Title:='SQLDBWebDataProvider demo using ExtJS'; + Application.Initialize; + Application.Run; +end. + diff --git a/packages/fcl-web/examples/webdata/demo6/wmusers.lfm b/packages/fcl-web/examples/webdata/demo6/wmusers.lfm new file mode 100644 index 0000000000..7bbc5ac425 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo6/wmusers.lfm @@ -0,0 +1,131 @@ +object FPWebProviderDataModule1: TFPWebProviderDataModule1 + OnCreate = DataModuleCreate + OldCreateOrder = False + InputAdaptor = ExtJSJSonWebdataInputAdaptor1 + ContentProducer = ExtJSJSONDataFormatter1 + OnGetContentProducer = DataModuleGetContentProducer + OnGetInputAdaptor = DataModuleGetInputAdaptor + Height = 300 + HorizontalOffset = 635 + VerticalOffset = 230 + Width = 400 + object ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor + left = 232 + top = 152 + end + object ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor + left = 272 + top = 152 + end + object ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter + AllowPageSize = False + left = 272 + top = 192 + end + object ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter + AllowPageSize = False + left = 232 + top = 192 + end + object ANAME: TSQLDBWebDataProvider + SelectSQL.Strings = ( + 'SELECT * FROM FPCUSERS' + ) + UpdateSQL.Strings = ( + 'UPDATE FPCUSERS SET' + ' NAME=:NAME,' + ' LOGIN=:LOGIN,' + ' EMAIL=:EMAIL,' + ' LASTLOGIN=:LASTLOGIN' + 'WHERE' + ' (ID=:ID)' + ) + DeleteSQL.Strings = ( + 'DELETE FROM FPCUSERS WHERE (ID=:ID)' + ) + InsertSQL.Strings = ( + 'INSERT INTO FPCUSERS ' + '(ID, LOGIN, NAME, EMAIL, LASTLOGIN)' + 'VALUES' + '(:ID, :LOGIN, :NAME, :EMAIL, :LASTLOGIN)' + ) + Connection = IBConnection1 + IDFieldName = 'ID' + OnGetNewID = ANAMEGetNewID + left = 113 + top = 120 + end + object IBConnection1: TIBConnection + Connected = False + LoginPrompt = False + DatabaseName = '/wisa/firebird/fpcusers.fb' + KeepConnection = False + Password = 'SysteemD' + Transaction = SQLTransaction1 + UserName = 'WISASOFT' + left = 72 + top = 120 + end + object QGetID: TSQLQuery + IndexName = 'DEFAULT_ORDER' + AutoCalcFields = False + Database = IBConnection1 + Transaction = SQLTransaction1 + ReadOnly = False + SQL.Strings = ( + 'SELECT GEN_ID(GEN_FPCUSERS,1) AS THEID FROM RDB$DATABASE' + ) + Params = <> + left = 155 + top = 63 + end + object SQLTransaction1: TSQLTransaction + Active = False + Action = caNone + Database = IBConnection1 + left = 74 + top = 64 + end + object SQLQuery1: TSQLQuery + IndexName = 'DEFAULT_ORDER' + AutoCalcFields = False + Database = IBConnection1 + Transaction = SQLTransaction1 + ReadOnly = False + SQL.Strings = ( + 'INSERT INTO FPCUSERS' + '(ID, LOGIN, NAME, EMAIL, LASTLOGIN)' + 'VALUES' + '(:ID, :LOGIN, :NAME, :EMAIL, :LASTLOGIN)' + '' + ) + Params = < + item + DataType = ftUnknown + Name = 'ID' + ParamType = ptUnknown + end + item + DataType = ftUnknown + Name = 'LOGIN' + ParamType = ptUnknown + end + item + DataType = ftUnknown + Name = 'NAME' + ParamType = ptUnknown + end + item + DataType = ftUnknown + Name = 'EMAIL' + ParamType = ptUnknown + end + item + DataType = ftUnknown + Name = 'LASTLOGIN' + ParamType = ptUnknown + end> + left = 174 + top = 111 + end +end diff --git a/packages/fcl-web/examples/webdata/demo6/wmusers.lrs b/packages/fcl-web/examples/webdata/demo6/wmusers.lrs new file mode 100644 index 0000000000..c5e5ae7ba4 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo6/wmusers.lrs @@ -0,0 +1,43 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TFPWebProviderDataModule1','FORMDATA',[ + 'TPF0'#25'TFPWebProviderDataModule1'#24'FPWebProviderDataModule1'#8'OnCreate' + +#7#16'DataModuleCreate'#14'OldCreateOrder'#8#12'InputAdaptor'#7#29'ExtJSJSon' + +'WebdataInputAdaptor1'#15'ContentProducer'#7#23'ExtJSJSONDataFormatter1'#20 + +'OnGetContentProducer'#7#28'DataModuleGetContentProducer'#17'OnGetInputAdapt' + +'or'#7#25'DataModuleGetInputAdaptor'#6'Height'#3','#1#16'HorizontalOffset'#3 + +'{'#2#14'VerticalOffset'#3#230#0#5'Width'#3#144#1#0#29'TExtJSJSonWebdataInpu' + +'tAdaptor'#29'ExtJSJSonWebdataInputAdaptor1'#4'left'#3#232#0#3'top'#3#152#0#0 + +#0#28'TExtJSXMLWebdataInputAdaptor'#28'ExtJSXMLWebdataInputAdaptor1'#4'left' + +#3#16#1#3'top'#3#152#0#0#0#22'TExtJSXMLDataFormatter'#22'ExtJSXMLDataFormatt' + +'er1'#13'AllowPageSize'#8#4'left'#3#16#1#3'top'#3#192#0#0#0#23'TExtJSJSONDat' + +'aFormatter'#23'ExtJSJSONDataFormatter1'#13'AllowPageSize'#8#4'left'#3#232#0 + +#3'top'#3#192#0#0#0#21'TSQLDBWebDataProvider'#5'ANAME'#17'SelectSQL.Strings' + +#1#6#22'SELECT * FROM FPCUSERS'#0#17'UpdateSQL.Strings'#1#6#19'UPDATE FPCUSE' + +'RS SET'#6#13' NAME=:NAME,'#6#15' LOGIN=:LOGIN,'#6#15' EMAIL=:EMAIL,'#6#22 + +' LASTLOGIN=:LASTLOGIN'#6#5'WHERE'#6#10' (ID=:ID)'#0#17'DeleteSQL.Strings' + +#1#6'#DELETE FROM FPCUSERS WHERE (ID=:ID)'#0#17'InsertSQL.Strings'#1#6#21'IN' + +'SERT INTO FPCUSERS '#6'#(ID, LOGIN, NAME, EMAIL, LASTLOGIN)'#6#6'VALUES'#6 + +'((:ID, :LOGIN, :NAME, :EMAIL, :LASTLOGIN)'#0#10'Connection'#7#13'IBConnecti' + +'on1'#11'IDFieldName'#6#2'ID'#10'OnGetNewID'#7#13'ANAMEGetNewID'#4'left'#2'q' + +#3'top'#2'x'#0#0#13'TIBConnection'#13'IBConnection1'#9'Connected'#8#11'Login' + +'Prompt'#8#12'DatabaseName'#6#26'/wisa/firebird/fpcusers.fb'#14'KeepConnecti' + +'on'#8#8'Password'#6#8'SysteemD'#11'Transaction'#7#15'SQLTransaction1'#8'Use' + +'rName'#6#8'WISASOFT'#4'left'#2'H'#3'top'#2'x'#0#0#9'TSQLQuery'#6'QGetID'#9 + +'IndexName'#6#13'DEFAULT_ORDER'#14'AutoCalcFields'#8#8'Database'#7#13'IBConn' + +'ection1'#11'Transaction'#7#15'SQLTransaction1'#8'ReadOnly'#8#11'SQL.Strings' + +#1#6'9SELECT GEN_ID(GEN_FPCUSERS,1) AS THEID FROM RDB$DATABASE'#0#6'Params' + +#14#0#4'left'#3#155#0#3'top'#2'?'#0#0#15'TSQLTransaction'#15'SQLTransaction1' + +#6'Active'#8#6'Action'#7#6'caNone'#8'Database'#7#13'IBConnection1'#4'left'#2 + +'J'#3'top'#2'@'#0#0#9'TSQLQuery'#9'SQLQuery1'#9'IndexName'#6#13'DEFAULT_ORDE' + +'R'#14'AutoCalcFields'#8#8'Database'#7#13'IBConnection1'#11'Transaction'#7#15 + +'SQLTransaction1'#8'ReadOnly'#8#11'SQL.Strings'#1#6#20'INSERT INTO FPCUSERS' + +#6'#(ID, LOGIN, NAME, EMAIL, LASTLOGIN)'#6#6'VALUES'#6'((:ID, :LOGIN, :NAME,' + +' :EMAIL, :LASTLOGIN)'#6#0#0#6'Params'#14#1#8'DataType'#7#9'ftUnknown'#4'Nam' + +'e'#6#2'ID'#9'ParamType'#7#9'ptUnknown'#0#1#8'DataType'#7#9'ftUnknown'#4'Nam' + +'e'#6#5'LOGIN'#9'ParamType'#7#9'ptUnknown'#0#1#8'DataType'#7#9'ftUnknown'#4 + +'Name'#6#4'NAME'#9'ParamType'#7#9'ptUnknown'#0#1#8'DataType'#7#9'ftUnknown'#4 + +'Name'#6#5'EMAIL'#9'ParamType'#7#9'ptUnknown'#0#1#8'DataType'#7#9'ftUnknown' + +#4'Name'#6#9'LASTLOGIN'#9'ParamType'#7#9'ptUnknown'#0#0#4'left'#3#174#0#3'to' + +'p'#2'o'#0#0#0 +]); diff --git a/packages/fcl-web/examples/webdata/demo6/wmusers.pp b/packages/fcl-web/examples/webdata/demo6/wmusers.pp new file mode 100644 index 0000000000..fda2f8dff9 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demo6/wmusers.pp @@ -0,0 +1,107 @@ +unit wmusers; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb, + IBConnection, sqldb, fpwebdata, extjsjson, extjsxml, sqldbwebdata; + +type + + { TFPWebProviderDataModule1 } + + TFPWebProviderDataModule1 = class(TFPWebProviderDataModule) + ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter; + ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor; + ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter; + ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor; + IBConnection1: TIBConnection; + ANAME: TSQLDBWebDataProvider; + QGetID: TSQLQuery; + SQLQuery1: TSQLQuery; + SQLTransaction1: TSQLTransaction; + procedure ANAMEGetNewID(Sender: TObject; out AID: String); + procedure DataModuleCreate(Sender: TObject); + procedure DataModuleGetContentProducer(Sender: TObject; + var AContentProducer: TCustomHTTPDataContentProducer); + procedure DataModuleGetInputAdaptor(Sender: TObject; + var AInputAdaptor: TCustomWebdataInputAdaptor); + private + { private declarations } + public + { public declarations } + end; + +var + FPWebProviderDataModule1: TFPWebProviderDataModule1; + +implementation + +uses inifiles; + +{ TFPWebProviderDataModule1 } + +procedure TFPWebProviderDataModule1.DataModuleGetContentProducer( + Sender: TObject; var AContentProducer: TCustomHTTPDataContentProducer); +begin + If Request.QueryFields.values['format']='xml' then + AContentProducer:=ExtJSXMLDataFormatter1; +end; + +procedure TFPWebProviderDataModule1.DataModuleCreate(Sender: TObject); + +Var + FN : String; + Ini : TMemIniFile; + +begin + FN:=ChangeFileExt(Paramstr(0),'.ini'); + If FileExists(FN) then + begin + Ini:=TMemIniFile.Create(FN); + try + With IBConnection1 do + begin + DatabaseName:=Ini.ReadString('Database','Path',DatabaseName); + UserName:=Ini.ReadString('Database','UserName',UserName); + Password:=Ini.ReadString('Database','Password',Password); + end; + finally + Ini.Free; + end; + end; + IBConnection1.Connected:=True; +end; + +procedure TFPWebProviderDataModule1.ANAMEGetNewID(Sender: TObject; out + AID: String); +begin + With QGetID Do + begin + Close; + Open; + try + if (EOF and BOF) then + Raise Exception.Create('No ID generated'); + AID:=Fields[0].AsString; + finally + Close; + end; + end; +end; + +procedure TFPWebProviderDataModule1.DataModuleGetInputAdaptor(Sender: TObject; + var AInputAdaptor: TCustomWebdataInputAdaptor); +begin + If Request.QueryFields.values['format']='xml' then + AInputAdaptor:=ExtJSXMLWebdataInputAdaptor1; +end; + +initialization + {$I wmusers.lrs} + + RegisterHTTPModule('Provider', TFPWebProviderDataModule1); +end. + diff --git a/packages/fcl-web/examples/webdata/demos.txt b/packages/fcl-web/examples/webdata/demos.txt new file mode 100644 index 0000000000..d3f538cc48 --- /dev/null +++ b/packages/fcl-web/examples/webdata/demos.txt @@ -0,0 +1,40 @@ + +The demo directories demonstrate the use of the TFPWebDataProvider +components, using ExtJS. It demonstrates the use of JSON and XML +communitation between a ExtJS Datastore and the webdataprovider. + +ExtJS must be installed, it can be downloaded for free from +http://www.extjs.com/ + +The examples assume that it is reachable through /ext/ + +Demo1 shows how to use the component with a plain webdatamodule, +using actions, and creating all components on the fly. + +Demo2 shows how to use the components by dropping them on a plain +webdatamodule, and handling all in the OnRequest handler of the +webdatamodule. + +Demo3 shows how to use the components in combination with a +WebProviderDatamodule. + +Demo4 shows how webdataprovider components can be dropped +on plain datamodules, and how these modules can be made +available to the webdatamodule. + +Demo5 shows how to register your own TWebdataProvider instances, which +are created on the fly to perform their action. + +Demo6 demonstrates the use of the TSQLDBWebDataProvider component. + +All demos except Demo6 use CGI and a TDBF component to feed data to +the webpage, which means they are not very suitable for real life +situations due to file locking etc. + + +To try a demo, compile one of the appropriate CGI apps, and open +the extgrid-json.html or extgrid-xml.html page in your browser +through the webserver, something like: + +http://localhost/~myuser/extjs/demo2/extgrid-json.html + diff --git a/packages/fcl-web/examples/webdata/users.dbf b/packages/fcl-web/examples/webdata/users.dbf new file mode 100644 index 0000000000..ffd460ed30 Binary files /dev/null and b/packages/fcl-web/examples/webdata/users.dbf differ -- cgit v1.2.1