diff options
Diffstat (limited to 'packages/fcl-web/examples/combined/wmusers.pp')
| -rw-r--r-- | packages/fcl-web/examples/combined/wmusers.pp | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/packages/fcl-web/examples/combined/wmusers.pp b/packages/fcl-web/examples/combined/wmusers.pp new file mode 100644 index 0000000000..752b03af52 --- /dev/null +++ b/packages/fcl-web/examples/combined/wmusers.pp @@ -0,0 +1,145 @@ +unit wmusers; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb, + IBConnection, sqldb, fpwebdata, fpjson, extjsjson, extjsxml, sqldbwebdata; + +type + + { TCombinedModule } + + TCombinedModule = class(TFPWebProviderDataModule) + ProviderFormatter: TExtJSJSONDataFormatter; + ProviderInputAdaptor: TExtJSJSonWebdataInputAdaptor; + IBConnection1: TIBConnection; + Users: TSQLDBWebDataProvider; + QGetID: TSQLQuery; + SQLTransaction1: TSQLTransaction; + procedure DataModuleNewSession(Sender: TObject); + procedure ProviderFormatterBeforeDataToJSON(Sender: TObject; + AObject: TJSONObject); + procedure ProviderFormatterBeforeDelete(Sender: TObject); + procedure ProviderFormatterBeforeInsert(Sender: TObject); + procedure ProviderFormatterBeforeUpdate(Sender: TObject); + procedure UsersGetNewID(Sender: TObject; out AID: String); + procedure DataModuleCreate(Sender: TObject); + procedure DataModuleGetContentProducer(Sender: TObject; + var AContentProducer: TCustomHTTPDataContentProducer); + procedure DataModuleGetInputAdaptor(Sender: TObject; + var AInputAdaptor: TCustomWebdataInputAdaptor); + private + procedure CheckLoggedIn; + { private declarations } + public + { public declarations } + end; + +var + CombinedModule: TCombinedModule; + +implementation + +uses inifiles; + +{ TCombinedModule } + +procedure TCombinedModule.DataModuleGetContentProducer( + Sender: TObject; var AContentProducer: TCustomHTTPDataContentProducer); +begin +end; + +procedure TCombinedModule.DataModuleCreate(Sender: TObject); + +Var + FN : String; + Ini : TMemIniFile; + +begin + // Not yet published. + CreateSession:=True; + 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 TCombinedModule.UsersGetNewID(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 TCombinedModule.CheckLoggedIn; + +begin + If StrToIntDef(Session.Variables['UserID'],-1)=-1 then + Raise Exception.Create('You must be logged in to see or modify data'); +end; +procedure TCombinedModule.ProviderFormatterBeforeDataToJSON( + Sender: TObject; AObject: TJSONObject); +begin + CheckLoggedIn; +end; + +procedure TCombinedModule.DataModuleNewSession(Sender: TObject); +begin + // The cookies must all originate from the same path, otherwise the 2 datamodules will use a different session. + (Sender as TFPWebSession).SessionCookiePath:='/'; +end; + +procedure TCombinedModule.ProviderFormatterBeforeDelete( + Sender: TObject); +begin + CheckLoggedIn; +end; + +procedure TCombinedModule.ProviderFormatterBeforeInsert( + Sender: TObject); +begin + CheckLoggedIn; +end; + +procedure TCombinedModule.ProviderFormatterBeforeUpdate( + Sender: TObject); +begin + CheckLoggedIn; +end; + +procedure TCombinedModule.DataModuleGetInputAdaptor(Sender: TObject; + var AInputAdaptor: TCustomWebdataInputAdaptor); +begin +end; + +initialization + {$I wmusers.lrs} + + RegisterHTTPModule('Provider', TCombinedModule); +end. + |
