]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Storage/Repos.hs
improvement of systemConfig.js
[Rakka.git] / Rakka / Storage / Repos.hs
index 76889d7e0ad5fac702041a17b4bb787fe8a491a5..09bd8f3b40e4f4dce879577a66b60b3c88cf67f3 100644 (file)
@@ -179,10 +179,10 @@ loadPageInRepository repos name rev
                                                      -> True
                           , entityRevision   = pageRev
                           , entityLastMod    = zonedTimeToUTC lastMod
-                          , entitySummary    = lookup "rakka:summary" props
+                          , entitySummary    = fmap decodeString (lookup "rakka:summary" props)
                           , entityOtherLang  = fromMaybe M.empty
                                              $ fmap
-                                                   (M.fromList . fromJust . deserializeStringPairs)
+                                                   (M.fromList . fromJust . deserializeStringPairs . decodeString)
                                                    (lookup "rakka:otherLang" props)
                           , entityContent    = content                                             
                           , entityUpdateInfo = undefined
@@ -226,16 +226,25 @@ putPageIntoRepository repos userID page
                      if denied then
                          return Forbidden
                        else
-                         do ret <- doReposTxn
+                         do rev <- if oldRev == 0 then
+                                       getRepositoryFS repos >>= getYoungestRev
+                                   else
+                                       return oldRev
+                            ret <- doReposTxn
                                    repos
-                                   (uiOldRevision ui)
+                                   rev
                                    author
                                    (Just "Automatic commit by Rakka for page update")
-                                   $ do case uiOldName ui of
+                                   $ do 
+                                        case uiOldName ui of
                                           Nothing      -> return ()
-                                          Just oldName -> movePage (uiOldRevision ui) oldName name
-                                                          >>
-                                                          moveAttachments (uiOldRevision ui) oldName name
+                                          Just oldName -> do exists <- isFile (mkPagePath oldName)
+                                                             when (exists)
+                                                                  $ do movePage (uiOldRevision ui) oldName name
+                                                                       moveAttachments (uiOldRevision ui) oldName name
+                                        exists <- isFile (mkPagePath name)
+                                        unless (exists)
+                                               $ createPage name
                                         updatePage name
                             case ret of
                               Left  _ -> return Conflict
@@ -258,10 +267,14 @@ putPageIntoRepository repos userID page
       checkDenial rev name
           = do fs <- getRepositoryFS repos
                withRevision fs rev
-                   $ do prop <- getNodeProp (mkPagePath name) "rakka:isLocked"
-                        case prop of
-                          Just _  -> return (isNothing userID) -- 施錠されてゐるので匿名では駄目
-                          Nothing -> return False
+                   $ do exists <- isFile (mkPagePath name)
+                        if exists then
+                            do prop <- getNodeProp (mkPagePath name) "rakka:isLocked"
+                               case prop of
+                                 Just _  -> return (isNothing userID) -- 施錠されてゐるので匿名では駄目
+                                 Nothing -> return False
+                          else
+                            return False -- FIXME: 本當は defaultPage の locked 屬性をどうのこうの…
 
       movePage :: RevNum -> PageName -> PageName -> Txn ()
       movePage oldRev oldName newName
@@ -315,13 +328,13 @@ putPageIntoRepository repos userID page
                setNodeProp path "rakka:isFeed"    (encodeFlag $ entityIsFeed page)
                setNodeProp path "rakka:isLocked"  (encodeFlag $ entityIsLocked page)
                setNodeProp path "rakka:isBinary"  (encodeFlag $ entityIsBinary page)
-               setNodeProp path "rakka:summary"   (entitySummary page)
+               setNodeProp path "rakka:summary"   (fmap encodeString $ entitySummary page)
                setNodeProp path "rakka:otherLang" (let otherLang = entityOtherLang page
                                                    in
                                                      if M.null otherLang then
                                                          Nothing
                                                      else
-                                                         Just (serializeStringPairs $ M.toList otherLang))
+                                                         Just (encodeString $ serializeStringPairs $ M.toList otherLang))
                applyTextLBS path Nothing (entityContent page)
 
       encodeFlag :: Bool -> Maybe String
@@ -409,7 +422,7 @@ loadAttachmentInRepository repos pName aName rev
       path = mkAttachmentPath pName aName
 
       loadAttachment' :: Rev a
-      loadAttachment' = getFileContents path >>= return . deserializeFromString
+      loadAttachment' = getFileContents path >>= return . deserializeFromString . decodeString
 
 
 putAttachmentIntoRepository :: Attachment a =>