wmusers.pp 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. unit wmusers;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb,
  6. db, dbf, fpwebdata, fpextjs,extjsjson,extjsxml;
  7. type
  8. { TFPWebModule1 }
  9. TFPWebModule1 = class(TFPWebModule)
  10. Dbf1: TDbf;
  11. procedure TFPWebActions0Request(Sender: TObject; ARequest: TRequest;
  12. AResponse: TResponse; var Handled: Boolean);
  13. procedure TFPWebActions1Request(Sender: TObject; ARequest: TRequest;
  14. AResponse: TResponse; var Handled: Boolean);
  15. procedure TFPWebActions2Request(Sender: TObject; ARequest: TRequest;
  16. AResponse: TResponse; var Handled: Boolean);
  17. procedure TFPWebActions3Request(Sender: TObject; ARequest: TRequest;
  18. AResponse: TResponse; var Handled: Boolean);
  19. private
  20. { private declarations }
  21. public
  22. { public declarations }
  23. end;
  24. var
  25. FPWebModule1: TFPWebModule1;
  26. implementation
  27. {$define wmdebug}
  28. {$ifdef wmdebug}
  29. uses dbugintf;
  30. {$endif}
  31. { TFPWebModule1 }
  32. procedure TFPWebModule1.TFPWebActions0Request(Sender: TObject;
  33. ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
  34. Var
  35. PN : String;
  36. P : TFPWebDataProvider;
  37. F : TExtJSDataFormatter;
  38. DS : TDatasource;
  39. M : TMemoryStream;
  40. L : Text;
  41. begin
  42. // Providername;
  43. PN:=ARequest.GetNextPathInfo;
  44. // P:=GetWebDataProvider(PN);
  45. P:=TFPWebDataProvider.Create(Self);
  46. try
  47. P.Adaptor:=TWebDataInputAdaptor.Create(Self);
  48. P.Adaptor.Request:=ARequest;
  49. If Request.QueryFields.values['format']='xml' then
  50. begin
  51. F:=TExtJSXMLDataFormatter.Create(Self);
  52. TExtJSXMLDataFormatter(F).TotalProperty:='total';
  53. AResponse.ContentType:='text/xml';
  54. end
  55. else
  56. F:=TExtJSJSONDataFormatter.Create(Self);
  57. {$ifdef wmdebug} SendDebug(className+' '+F.ClassName);{$endif}
  58. try
  59. DS:=TDatasource.Create(Self);
  60. try
  61. DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
  62. DS.Dataset:=DBf1;
  63. DBF1.Open;
  64. try
  65. F.ADaptor:=P.Adaptor;
  66. P.Datasource:=DS;
  67. P.Adaptor.Action:=wdaRead;
  68. P.ApplyParams;
  69. F.Provider:=P;
  70. M:=TMemoryStream.Create;
  71. try
  72. F.GetContent(ARequest,M,Handled);
  73. M.Position:=0;
  74. Response.ContentStream:=M;
  75. Response.SendResponse;
  76. Response.ContentStream:=Nil;
  77. With TFileStream.Create('/tmp/data.xml',fmCreate) do
  78. try
  79. CopyFrom(M,0);
  80. finally
  81. Free;
  82. end;
  83. finally
  84. M.Free;
  85. end;
  86. finally
  87. DBF1.Close;
  88. end;
  89. finally
  90. DS.Free;
  91. end;
  92. finally
  93. F.Free;
  94. end;
  95. finally
  96. P.Free;
  97. end;
  98. end;
  99. procedure TFPWebModule1.TFPWebActions1Request(Sender: TObject;
  100. ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
  101. Var
  102. PN : String;
  103. P : TFPWebDataProvider;
  104. F : TExtJSDataFormatter;
  105. DS : TDatasource;
  106. M : TMemoryStream;
  107. L : Text;
  108. begin
  109. // Providername;
  110. PN:=ARequest.GetNextPathInfo;
  111. // P:=GetWebDataProvider(PN);
  112. P:=TFPWebDataProvider.Create(Self);
  113. try
  114. P.IDFieldName:='ID';
  115. If Request.QueryFields.values['format']='xml' then
  116. begin
  117. F:=TExtJSXMLDataFormatter.Create(Self);
  118. AResponse.ContentType:='text/xml';
  119. P.Adaptor:=TWebDataInputAdaptor.Create(Self);
  120. end
  121. else
  122. begin
  123. F:=TExtJSJSONDataFormatter.Create(Self);
  124. P.Adaptor:=TExtJSJSonWebdataInputAdaptor.Create(Self);
  125. end;
  126. P.Adaptor.Request:=ARequest;
  127. {$ifdef wmdebug} SendDebug(className+' '+F.ClassName);{$endif}
  128. try
  129. DS:=TDatasource.Create(Self);
  130. try
  131. DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
  132. DS.Dataset:=DBf1;
  133. DBF1.Open;
  134. try
  135. F.ADaptor:=P.Adaptor;
  136. P.Datasource:=DS;
  137. P.Adaptor.Action:=wdaInsert;
  138. P.ApplyParams;
  139. F.Provider:=P;
  140. M:=TMemoryStream.Create;
  141. try
  142. F.GetContent(ARequest,M,Handled);
  143. M.Position:=0;
  144. Response.ContentStream:=M;
  145. Response.SendResponse;
  146. Response.ContentStream:=Nil;
  147. With TFileStream.Create('/tmp/data.xml',fmCreate) do
  148. try
  149. CopyFrom(M,0);
  150. finally
  151. Free;
  152. end;
  153. finally
  154. M.Free;
  155. end;
  156. finally
  157. DBF1.Close;
  158. end;
  159. finally
  160. DS.Free;
  161. end;
  162. finally
  163. F.Free;
  164. end;
  165. finally
  166. P.Free;
  167. end;
  168. end;
  169. procedure TFPWebModule1.TFPWebActions2Request(Sender: TObject;
  170. ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
  171. Var
  172. PN : String;
  173. P : TFPWebDataProvider;
  174. F : TExtJSDataFormatter;
  175. DS : TDatasource;
  176. M : TMemoryStream;
  177. L : Text;
  178. begin
  179. // Providername;
  180. {$ifdef wmdebug} SendDebug('Update request received');{$endif}
  181. PN:=ARequest.GetNextPathInfo;
  182. // P:=GetWebDataProvider(PN);
  183. P:=TFPWebDataProvider.Create(Self);
  184. try
  185. P.IDFieldName:='ID';
  186. If Request.QueryFields.values['format']='xml' then
  187. begin
  188. {$ifdef wmdebug} SendDebug('Update request received in XML');{$endif}
  189. F:=TExtJSXMLDataFormatter.Create(Self);
  190. AResponse.ContentType:='text/xml';
  191. P.Adaptor:=TWebDataInputAdaptor.Create(Self);
  192. end
  193. else
  194. begin
  195. F:=TExtJSJSONDataFormatter.Create(Self);
  196. P.Adaptor:=TExtJSJSonWebdataInputAdaptor.Create(Self);
  197. end;
  198. P.Adaptor.Request:=ARequest;
  199. {$ifdef wmdebug} SendDebug(className+' '+F.ClassName);{$endif}
  200. try
  201. DS:=TDatasource.Create(Self);
  202. try
  203. DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
  204. DS.Dataset:=DBf1;
  205. DBF1.Open;
  206. try
  207. F.ADaptor:=P.Adaptor;
  208. P.Datasource:=DS;
  209. P.Adaptor.Action:=wdaUpdate;
  210. P.ApplyParams;
  211. F.Provider:=P;
  212. M:=TMemoryStream.Create;
  213. try
  214. F.GetContent(ARequest,M,Handled);
  215. M.Position:=0;
  216. Response.ContentStream:=M;
  217. Response.SendResponse;
  218. Response.ContentStream:=Nil;
  219. With TFileStream.Create('/tmp/data.xml',fmCreate) do
  220. try
  221. CopyFrom(M,0);
  222. finally
  223. Free;
  224. end;
  225. finally
  226. M.Free;
  227. end;
  228. finally
  229. DBF1.Close;
  230. end;
  231. finally
  232. DS.Free;
  233. end;
  234. finally
  235. F.Free;
  236. end;
  237. finally
  238. P.Free;
  239. end;
  240. end;
  241. procedure TFPWebModule1.TFPWebActions3Request(Sender: TObject;
  242. ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
  243. Var
  244. PN : String;
  245. P : TFPWebDataProvider;
  246. F : TExtJSDataFormatter;
  247. DS : TDatasource;
  248. M : TMemoryStream;
  249. L : Text;
  250. begin
  251. // Providername;
  252. PN:=ARequest.GetNextPathInfo;
  253. // P:=GetWebDataProvider(PN);
  254. P:=TFPWebDataProvider.Create(Self);
  255. try
  256. P.IDFieldName:='ID';
  257. If Request.QueryFields.values['format']='xml' then
  258. begin
  259. F:=TExtJSXMLDataFormatter.Create(Self);
  260. AResponse.ContentType:='text/xml';
  261. P.Adaptor:=TWebDataInputAdaptor.Create(Self);
  262. end
  263. else
  264. begin
  265. F:=TExtJSJSONDataFormatter.Create(Self);
  266. P.Adaptor:=TExtJSJSonWebdataInputAdaptor.Create(Self);
  267. end;
  268. P.Adaptor.Request:=ARequest;
  269. {$ifdef wmdebug} SendDebug('className '+F.ClassName);{$endif}
  270. try
  271. DS:=TDatasource.Create(Self);
  272. try
  273. DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
  274. DS.Dataset:=DBf1;
  275. DBF1.Open;
  276. try
  277. F.ADaptor:=P.Adaptor;
  278. P.Datasource:=DS;
  279. P.Adaptor.Action:=wdaDelete;
  280. P.ApplyParams;
  281. F.Provider:=P;
  282. M:=TMemoryStream.Create;
  283. try
  284. F.GetContent(ARequest,M,Handled);
  285. M.Position:=0;
  286. Response.ContentStream:=M;
  287. Response.SendResponse;
  288. Response.ContentStream:=Nil;
  289. With TFileStream.Create('/tmp/data.xml',fmCreate) do
  290. try
  291. CopyFrom(M,0);
  292. finally
  293. Free;
  294. end;
  295. finally
  296. M.Free;
  297. end;
  298. finally
  299. DBF1.Close;
  300. end;
  301. finally
  302. DS.Free;
  303. end;
  304. finally
  305. F.Free;
  306. end;
  307. finally
  308. P.Free;
  309. end;
  310. end;
  311. initialization
  312. {$I wmusers.lrs}
  313. RegisterHTTPModule('Provider', TFPWebModule1);
  314. end.