]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Resource/PageEntity.hs
implemented global lock
[Rakka.git] / Rakka / Resource / PageEntity.hs
index 21d38c99e1b29319ebd25198458e0afced23d3b6..dbef4d5b1a16615a26cd4271be67afe4084a270c 100644 (file)
@@ -18,6 +18,7 @@ import           Rakka.Page
 import           Rakka.Resource
 import           Rakka.Storage
 import           Rakka.SystemConfig
+import           Rakka.Utils
 import           Rakka.Wiki.Engine
 import           System.FilePath
 import           Text.XML.HXT.Arrow.Namespace
@@ -38,11 +39,11 @@ fallbackPageEntity env path
         = return $ Just $ ResourceDef {
             resUsesNativeThread = False
           , resIsGreedy         = True
-          , resGet              = Just $ handleGet env (toPageName path)
+          , resGet              = Just $ handleGet    env (toPageName path)
           , resHead             = Nothing
           , resPost             = Nothing
-          , resPut              = Just $ handlePut env (toPageName path)
-          , resDelete           = Nothing
+          , resPut              = Just $ handlePut    env (toPageName path)
+          , resDelete           = Just $ handleDelete env (toPageName path)
           }
     where
       toPageName :: [String] -> PageName
@@ -116,8 +117,10 @@ entityToXHTML env
     -> do SiteName   siteName   <- getSysConfA (envSysConf env) -< ()
           BaseURI    baseURI    <- getSysConfA (envSysConf env) -< ()
           StyleSheet styleSheet <- getSysConfA (envSysConf env) -< ()
+          GlobalLock isGLocked  <- getSysConfA (envSysConf env) -< ()
 
-          name <- (getXPathTreesInDoc "/page/@name/text()" >>> getText) -< page
+          name     <- (getXPathTreesInDoc "/page/@name/text()" >>> getText) -< page
+          isLocked <- (getXPathTreesInDoc "/page/@isLocked/text()" >>> getText >>> parseYesOrNo) -< page
 
           let cssHref   = [uriToString id (mkObjectURI baseURI styleSheet) ""]
               scriptSrc = [uriToString id (baseURI { uriPath = uriPath baseURI </> "js" }) ""]
@@ -156,7 +159,9 @@ entityToXHTML env
                          )
                       += ( eelem "script"
                            += sattr "type" "text/javascript"
-                           += txt ("Rakka.baseURI = \"" ++ uriToString id baseURI "" ++ "\";")
+                           += txt ("Rakka.baseURI=\"" ++ uriToString id baseURI "" ++ "\";")
+                           += txt ("Rakka.isLocked=" ++ trueOrFalse isLocked ++ ";")
+                           += txt ("Rakka.isGlobalLocked=" ++ trueOrFalse isGLocked ++ ";")
                          )
                     )
                  += ( eelem "body"
@@ -229,6 +234,7 @@ notFoundToXHTML env
     -> do SiteName   siteName   <- getSysConfA (envSysConf env) -< ()
           BaseURI    baseURI    <- getSysConfA (envSysConf env) -< ()
           StyleSheet styleSheet <- getSysConfA (envSysConf env) -< ()
+          GlobalLock isGLocked  <- getSysConfA (envSysConf env) -< ()
 
           name <- (getXPathTreesInDoc "/pageNotFound/@name/text()" >>> getText) -< pageNotFound
 
@@ -264,6 +270,7 @@ notFoundToXHTML env
                       += ( eelem "script"
                            += sattr "type" "text/javascript"
                            += txt ("Rakka.baseURI = \"" ++ uriToString id baseURI "" ++ "\";")
+                           += txt ("Rakka.isGlobalLocked=" ++ trueOrFalse isGLocked ++ ";")
                          )
                     )
                  += ( eelem "body"
@@ -306,7 +313,15 @@ notFoundToXHTML env
 
 handlePut :: Environment -> PageName -> Resource ()
 handlePut env name
-    = runXmlA env "rakka-page-1.0.rng" $ proc tree
-    -> do page   <- parseXmlizedPage -< (name, tree)
-          status <- putPageA (envStorage env) -< page
-          returnA  -< setStatus status
+    = do userID <- getUserID env
+         runXmlA env "rakka-page-1.0.rng" $ proc tree
+             -> do page   <- parseXmlizedPage -< (name, tree)
+                   status <- putPageA (envStorage env) -< (userID, page)
+                   returnA  -< setStatus status
+
+
+handleDelete :: Environment -> PageName -> Resource ()
+handleDelete env name
+    = do userID <- getUserID env
+         status <- deletePage (envStorage env) userID name
+         setStatus status