packages feed

happstack-facebook-0.16: Happstack/Facebook/Pages.hs

{-# LANGUAGE DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses, TypeFamilies #-}
module Happstack.Facebook.Pages where

import Data.Maybe (catMaybes)
import Happstack.Facebook.Common hiding (uid, name)
import qualified Happstack.Facebook.Common as C
import Text.JSON

-- |checks whether a given user is an admin for a given page
-- http://wiki.developers.facebook.com/index.php/Pages.isAdmin
data IsAdmin = IsAdmin Page (Maybe User)

instance (HasSessionKey m) => FacebookMethod m IsAdmin where
    type FacebookResponse IsAdmin = Bool
    parseResponse _ jstr =
        case decode jstr of
          (Ok bool) -> Right bool
          (Error msg) -> Left msg
    toParams (IsAdmin page mUser) =
        do sessionKey <- askSessionKey
           return $  [ ("method", "Pages.isAdmin")
                     , ("session_key", sessionKey)
                     , ("page_id", show (pageId page))
                     ] ++ catMaybes 
                     [ fmap (\user -> ("uid", show (C.uid user))) mUser
                     ]