Browse Source

* Actually implemented Options (readonly, disable edit/delete/insert

git-svn-id: trunk@15568 -
michael 15 years ago
parent
commit
1b20fa6843
1 changed files with 24 additions and 1 deletions
  1. 24 1
      packages/fcl-web/src/webdata/fpwebdata.pp

+ 24 - 1
packages/fcl-web/src/webdata/fpwebdata.pp

@@ -468,6 +468,8 @@ type
     Property OnGetInputAdaptor;
     Property OnGetProvider;
     Property OnContent;
+    Property OnNewSession;
+    Property OnSessionExpired;
   end;
 
 Var
@@ -477,7 +479,7 @@ Function WebDataProviderManager : TFPCustomWebDataProviderManager;
 
 implementation
 
-{ $define wmdebug}
+{$define wmdebug}
 
 {$ifdef wmdebug}
 uses dbugintf;
@@ -499,6 +501,11 @@ Resourcestring
   SErrDuplicateHTTPDataProducer = 'Duplicate web data output content producer name: "%s"';
   SErrUnknownInputAdaptor = 'Unknown web data input adaptor name: "%s"';
   SErrUnknownHTTPDataProducer = 'Unknown web data output content producer name: "%s"';
+  SErrActionNotAllowed = 'Options of provider %s do not allow %s.';
+  SEditing   = 'editing';
+  SDeleting  = 'deleting';
+  SInserting = 'inserting';
+
 
 { TCustomWebdataInputAdaptor }
 
@@ -736,6 +743,8 @@ end;
 procedure TFPCustomWebDataProvider.Update;
 begin
   {$ifdef wmdebug}SendDebug('TFPCustomWebDataProvider.Update enter');{$endif}
+  If ((Options * [wdpReadOnly,wdpDisableEdit])<>[]) then
+    Raise EFPHTTPError.CreateFmt(SErrActionNotAllowed,[Name,SEditing]);
   CheckAdaptor;
   DoUpdate;
   {$ifdef wmdebug}SendDebug('TFPCustomWebDataProvider.Update leave');{$endif}
@@ -743,14 +752,22 @@ end;
 
 procedure TFPCustomWebDataProvider.Delete;
 begin
+  {$ifdef wmdebug}SendDebug('TFPCustomWebDataProvider.Delete enter');{$endif}
+  If ((Options * [wdpReadOnly,wdpDisableDelete])<>[]) then
+    Raise EFPHTTPError.CreateFmt(SErrActionNotAllowed,[Name,SDeleting]);
   CheckAdaptor;
   DoDelete;
+  {$ifdef wmdebug}SendDebug('TFPCustomWebDataProvider.Delete leave');{$endif}
 end;
 
 procedure TFPCustomWebDataProvider.Insert;
 begin
+  {$ifdef wmdebug}SendDebug('TFPCustomWebDataProvider.Insert enter');{$endif}
+  If ((Options * [wdpReadOnly,wdpDisableInsert])<>[]) then
+    Raise EFPHTTPError.CreateFmt(SErrActionNotAllowed,[Name,SInserting]);
   CheckAdaptor;
   DoInsert;
+  {$ifdef wmdebug}SendDebug('TFPCustomWebDataProvider.Insert leave');{$endif}
 end;
 
 procedure TFPCustomWebDataProvider.ApplyParams;
@@ -1635,6 +1652,11 @@ begin
   FRequest:=ARequest;
   FResponse:=AResponse;
   try
+    {$ifdef wmdebug}SendDebug('Checking session');{$endif}
+    CheckSession(ARequest);
+    {$ifdef wmdebug}SendDebug('Init session');{$endif}
+    InitSession(AResponse);
+    {$ifdef wmdebug}SendDebug('Getting providername');{$endif}
     ProviderName:=Request.GetNextPathInfo;
     {$ifdef wmdebug}SendDebug('Handlerequest, providername : '+Providername);{$endif}
     AProvider:=GetProvider(ProviderName,AContainer);
@@ -1649,6 +1671,7 @@ begin
         wdaInsert  : InsertWebdata(AProvider);
         wdaDelete  : DeleteWebData(AProvider);
       end;
+      UpdateSession(AResponse);
     finally
       If (AContainer=Nil) then
         begin