eidolon/Handler/MediumSettings.hs

160 lines
6.2 KiB
Haskell
Raw Normal View History

2014-08-30 18:25:08 +00:00
module Handler.MediumSettings where
import Import
2014-08-30 19:19:41 +00:00
import System.Directory
import System.FilePath
import Data.List (tail)
2014-08-30 18:25:08 +00:00
getMediumSettingsR :: MediumId -> Handler Html
getMediumSettingsR mediumId = do
tempMedium <- runDB $ get mediumId
case tempMedium of
Just medium -> do
ownerId <- return $ mediumOwner medium
owner <- runDB $ getJust ownerId
msu <- lookupSession "userId"
case msu of
Just tempUserId -> do
userId <- return $ getUserIdFromText tempUserId
2014-12-07 02:55:25 +00:00
album <- runDB $ getJust $ mediumAlbum medium
2014-08-30 18:25:08 +00:00
presence <- return (userId == ownerId)
2014-12-07 02:55:25 +00:00
albumOwnerPresence <- return (userId == (albumOwner album))
case presence || albumOwnerPresence of
2014-08-30 18:25:08 +00:00
True -> do
(mediumSettingsWidget, enctype) <- generateFormPost $ mediumSettingsForm medium
defaultLayout $ do
2014-09-24 21:03:18 +00:00
setTitle "Eidolon :: Medium Settings"
2014-08-30 18:25:08 +00:00
$(widgetFile "mediumSettings")
False -> do
setMessage "You must own this medium to change its settings"
redirect $ MediumR mediumId
Nothing -> do
setMessage "You must be logged in to change settings"
redirect $ LoginR
Nothing -> do
setMessage "This medium does not exist"
redirect $ HomeR
postMediumSettingsR :: MediumId -> Handler Html
postMediumSettingsR mediumId = do
tempMedium <- runDB $ get mediumId
case tempMedium of
Just medium -> do
ownerId <- return $ mediumOwner medium
owner <- runDB $ getJust ownerId
msu <- lookupSession "userId"
case msu of
Just tempUserId -> do
userId <- return $ getUserIdFromText tempUserId
2014-12-07 02:55:25 +00:00
album <- runDB $ getJust $ mediumAlbum medium
2014-08-30 18:25:08 +00:00
presence <- return (userId == ownerId)
2014-12-07 02:55:25 +00:00
albumOwnerPresence <- return (userId == (albumOwner album))
case presence || albumOwnerPresence of
2014-08-30 18:25:08 +00:00
True -> do
((result, mediumSettingsWidget), enctype) <- runFormPost $ mediumSettingsForm medium
case result of
FormSuccess temp -> do
mId <- runDB $ update mediumId
[ MediumTitle =. mediumTitle temp
, MediumDescription =. mediumDescription temp
, MediumTags =. mediumTags temp
]
setMessage "Medium settings changed succesfully"
redirect $ MediumR mediumId
_ -> do
setMessage "There was an error changing the settings"
redirect $ MediumSettingsR mediumId
False -> do
setMessage "You must own this medium to change its settings"
redirect $ MediumR mediumId
Nothing -> do
setMessage "You must be logged in to change settings"
redirect $ LoginR
Nothing -> do
setMessage "This medium does not exist"
redirect $ HomeR
mediumSettingsForm :: Medium -> Form Medium
mediumSettingsForm medium = renderDivs $ Medium
<$> areq textField "Title" (Just $ mediumTitle medium)
<*> pure (mediumPath medium)
2014-10-01 22:58:36 +00:00
<*> pure (mediumThumb medium)
2014-12-14 19:21:23 +00:00
<*> pure (mediumMime medium)
2014-08-30 18:25:08 +00:00
<*> pure (mediumTime medium)
<*> pure (mediumOwner medium)
<*> areq textareaField "Description" (Just $ mediumDescription medium)
<*> areq tagField "tags" (Just $ mediumTags medium)
<*> pure (mediumAlbum medium)
2014-08-30 19:19:41 +00:00
getMediumDeleteR :: MediumId -> Handler Html
getMediumDeleteR mediumId = do
tempMedium <- runDB $ get mediumId
case tempMedium of
Just medium -> do
ownerId <- return $ mediumOwner medium
owner <- runDB $ getJust ownerId
msu <- lookupSession "userId"
case msu of
Just tempUserId -> do
userId <- return $ getUserIdFromText tempUserId
presence <- return (userId == ownerId)
case presence of
True -> do
defaultLayout $ do
2014-09-24 21:03:18 +00:00
setTitle "Eidolon :: Delete Medium"
2014-08-30 19:19:41 +00:00
$(widgetFile "mediumDelete")
False -> do
setMessage "You must own this medium to delete it"
redirect $ MediumR mediumId
Nothing -> do
setMessage "You must be logged in to delete media"
redirect $ LoginR
Nothing -> do
setMessage "This Medium does not exist"
redirect $ HomeR
postMediumDeleteR :: MediumId -> Handler Html
postMediumDeleteR mediumId = do
tempMedium <- runDB $ get mediumId
case tempMedium of
Just medium -> do
ownerId <- return $ mediumOwner medium
owner <- runDB $ getJust ownerId
msu <- lookupSession "userId"
case msu of
Just tempUserId -> do
userId <- return $ getUserIdFromText tempUserId
presence <- return (userId == ownerId)
case presence of
True -> do
confirm <- lookupPostParam "confirm"
case confirm of
Just "confirm" -> do
2014-12-07 06:55:03 +00:00
-- delete comments
commEnts <- runDB $ selectList [CommentOrigin ==. mediumId] []
mapM (\ent -> runDB $ delete $ entityKey ent) commEnts
-- delete references first
albumId <- return $ mediumAlbum medium
album <- runDB $ getJust albumId
mediaList <- return $ albumContent album
newMediaList <- return $ removeItem mediumId mediaList
-- update reference List
runDB $ update albumId [AlbumContent =. newMediaList]
2014-08-30 19:19:41 +00:00
liftIO $ removeFile (normalise $ tail $ mediumPath medium)
2014-10-01 22:58:36 +00:00
liftIO $ removeFile (normalise $ tail $ mediumThumb medium)
2014-08-30 19:19:41 +00:00
runDB $ delete mediumId
setMessage "Medium succesfully deleted"
redirect $ HomeR
_ -> do
setMessage "You must confirm the deletion"
redirect $ MediumSettingsR mediumId
False -> do
setMessage "You must own this medium to delete it"
redirect $ MediumR mediumId
Nothing -> do
setMessage "You must be logged in to delete media"
redirect $ LoginR
Nothing -> do
setMessage "This Medium does not exist"
redirect $ HomeR