diff --git a/Application.hs b/Application.hs index 1c5e05a..300a238 100644 --- a/Application.hs +++ b/Application.hs @@ -37,6 +37,7 @@ import Handler.NewAlbum import Handler.Album import Handler.Medium import Handler.AlbumSettings +import Handler.MediumSettings -- This line actually creates our YesodDispatch instance. It is the second half -- of the call to mkYesodData which occurs in Foundation.hs. Please see the diff --git a/Handler/MediumSettings.hs b/Handler/MediumSettings.hs new file mode 100644 index 0000000..026557c --- /dev/null +++ b/Handler/MediumSettings.hs @@ -0,0 +1,77 @@ +module Handler.MediumSettings where + +import Import + +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 + presence <- return (userId == ownerId) + case presence of + True -> do + (mediumSettingsWidget, enctype) <- generateFormPost $ mediumSettingsForm medium + defaultLayout $ do + $(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 + presence <- return (userId == ownerId) + case presence of + 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) + <*> pure (mediumTime medium) + <*> pure (mediumOwner medium) + <*> areq textareaField "Description" (Just $ mediumDescription medium) + <*> areq tagField "tags" (Just $ mediumTags medium) + <*> pure (mediumAlbum medium) diff --git a/config/routes b/config/routes index df2e1be..23c00a4 100644 --- a/config/routes +++ b/config/routes @@ -17,3 +17,4 @@ /album/#AlbumId/upload DirectUploadR GET POST /album/#AlbumId/settings AlbumSettingsR GET POST /album/#AlbumId/delete AlbumDeleteR GET POST +/medium/#MediumId/settings MediumSettingsR GET POST diff --git a/eidolon.cabal b/eidolon.cabal index d88f902..2e9cff9 100644 --- a/eidolon.cabal +++ b/eidolon.cabal @@ -30,6 +30,7 @@ library Handler.Album Handler.Medium Handler.AlbumSettings + Handler.MediumSettings if flag(dev) || flag(library-only) cpp-options: -DDEVELOPMENT diff --git a/templates/medium.hamlet b/templates/medium.hamlet index 973b87c..dd939f5 100644 --- a/templates/medium.hamlet +++ b/templates/medium.hamlet @@ -3,6 +3,7 @@ by #{ownerName} +
@@ -11,3 +12,6 @@ by #{ownerName} Uploaded on: #{formatTime defaultTimeLocale "%A %F %H:%M" (mediumTime medium)}
Description:
#{mediumDescription medium} +
+$if presence == True + Change medium settings diff --git a/templates/mediumSettings.hamlet b/templates/mediumSettings.hamlet new file mode 100644 index 0000000..625b228 --- /dev/null +++ b/templates/mediumSettings.hamlet @@ -0,0 +1,8 @@ +$newline always +

Medium settings + +
+ ^{mediumSettingsWidget} +
+ +