chore(profile): towards #169
- distinguished reroute icon - profile cleaned/reordered
This commit is contained in:
parent
d4f3ce7bf3
commit
6d49ea092b
@ -28,7 +28,10 @@ ProfileCorrections: Auflistung aller zugewiesenen Korrekturen
|
|||||||
Remarks: Hinweise
|
Remarks: Hinweise
|
||||||
|
|
||||||
ProfileSupervisor: Übergeordnete Ansprechpartner
|
ProfileSupervisor: Übergeordnete Ansprechpartner
|
||||||
|
ProfileNoSupervisor: Keine übergeordneten Ansprechpartner vorhanden.
|
||||||
ProfileSupervisee: Ist Ansprechpartner für
|
ProfileSupervisee: Ist Ansprechpartner für
|
||||||
|
ProfileNoSupervisee: Ist kein Ansprechpartner für irgendjemand.
|
||||||
|
ProfileSuperviseeReroute: Umleitungen erfolgen per
|
||||||
|
|
||||||
UserTelephone: Telefon
|
UserTelephone: Telefon
|
||||||
UserMobile: Mobiltelefon
|
UserMobile: Mobiltelefon
|
||||||
|
|||||||
@ -28,7 +28,10 @@ ProfileCorrections: List of all assigned corrections
|
|||||||
Remarks: Remarks
|
Remarks: Remarks
|
||||||
|
|
||||||
ProfileSupervisor: Supervised by
|
ProfileSupervisor: Supervised by
|
||||||
|
ProfileNoSupervisor: Is not supervised by anynone.
|
||||||
ProfileSupervisee: Supervises
|
ProfileSupervisee: Supervises
|
||||||
|
ProfileNoSupervisee: Does not supervise anynone.
|
||||||
|
ProfileSuperviseeReroute: Reroutes reach this supervisor via
|
||||||
|
|
||||||
UserTelephone: Phone
|
UserTelephone: Phone
|
||||||
UserMobile: Mobile
|
UserMobile: Mobile
|
||||||
|
|||||||
@ -585,6 +585,42 @@ getForProfileDataR cID = do
|
|||||||
setTitleI $ MsgHeadingForProfileData $ userDisplayName user
|
setTitleI $ MsgHeadingForProfileData $ userDisplayName user
|
||||||
dataWidget
|
dataWidget
|
||||||
|
|
||||||
|
-- data TableHasData = TableHasData{tableHasRows :: Bool, tableWidget :: Widget}
|
||||||
|
-- a poor man's record subsitute
|
||||||
|
|
||||||
|
{-
|
||||||
|
type TableHasData = (Bool, Widget)
|
||||||
|
tableHasRows :: TableHasData -> Bool
|
||||||
|
tableHasRows = fst
|
||||||
|
tableWidget :: TableHasData -> Widget
|
||||||
|
tableWidget = snd
|
||||||
|
-}
|
||||||
|
|
||||||
|
maybeTable :: (RenderMessage UniWorX a)
|
||||||
|
=> a -> (Bool, Widget) -> Widget
|
||||||
|
maybeTable m = maybeTable' m Nothing Nothing
|
||||||
|
|
||||||
|
maybeTable' :: (RenderMessage UniWorX a)
|
||||||
|
=> a -> Maybe a -> Maybe Widget -> (Bool, Widget) -> Widget
|
||||||
|
-- maybeTable' _ Nothing _ (False, _ ) = mempty
|
||||||
|
-- maybeTable' _ (Just nodata) _ (False, _ ) =
|
||||||
|
-- [whamlet|
|
||||||
|
-- <div .container>
|
||||||
|
-- _{nodata}
|
||||||
|
-- |]
|
||||||
|
-- maybeTable' hdr _ mbRemark (True ,tbl) =
|
||||||
|
maybeTable' hdr _ mbRemark (_ ,tbl) =
|
||||||
|
[whamlet|
|
||||||
|
<div .container>
|
||||||
|
<h2> _{hdr}
|
||||||
|
<div .container>
|
||||||
|
^{tbl}
|
||||||
|
$maybe remark <- mbRemark
|
||||||
|
<em>_{MsgProfileRemark}
|
||||||
|
\ ^{remark}
|
||||||
|
|]
|
||||||
|
|
||||||
|
|
||||||
makeProfileData :: Entity User -> DB Widget
|
makeProfileData :: Entity User -> DB Widget
|
||||||
makeProfileData usrEnt@(Entity uid usrVal@User{..}) = do
|
makeProfileData usrEnt@(Entity uid usrVal@User{..}) = do
|
||||||
now <- liftIO getCurrentTime
|
now <- liftIO getCurrentTime
|
||||||
@ -605,25 +641,25 @@ makeProfileData usrEnt@(Entity uid usrVal@User{..}) = do
|
|||||||
E.where_ $ studyfeat E.^. StudyFeaturesUser E.==. E.val uid
|
E.where_ $ studyfeat E.^. StudyFeaturesUser E.==. E.val uid
|
||||||
return (studyfeat, studydegree, studyterms)
|
return (studyfeat, studydegree, studyterms)
|
||||||
companies <- wgtCompanies uid
|
companies <- wgtCompanies uid
|
||||||
supervisors' <- E.select $ E.from $ \(spvr `E.InnerJoin` usrSpvr) -> do
|
-- supervisors' <- E.select $ E.from $ \(spvr `E.InnerJoin` usrSpvr) -> do
|
||||||
E.on $ spvr E.^. UserSupervisorSupervisor E.==. usrSpvr E.^. UserId
|
-- E.on $ spvr E.^. UserSupervisorSupervisor E.==. usrSpvr E.^. UserId
|
||||||
E.where_ $ spvr E.^. UserSupervisorUser E.==. E.val uid
|
-- E.where_ $ spvr E.^. UserSupervisorUser E.==. E.val uid
|
||||||
E.orderBy [E.asc (usrSpvr E.^. UserDisplayName)]
|
-- E.orderBy [E.asc (usrSpvr E.^. UserDisplayName)]
|
||||||
return (usrSpvr, spvr E.^. UserSupervisorRerouteNotifications)
|
-- return (usrSpvr, spvr E.^. UserSupervisorRerouteNotifications)
|
||||||
let numSupervisors = length supervisors'
|
-- let numSupervisors = length supervisors'
|
||||||
supervisors = intersperse (text2widget ", ") $
|
-- supervisors = intersperse (text2widget ", ") $
|
||||||
(\(usr, E.Value reroutCom) -> linkUserWidget ForProfileDataR usr <> bool mempty icnReroute reroutCom) <$> supervisors'
|
-- (\(usr, E.Value reroutCom) -> linkUserWidget ForProfileDataR usr <> bool mempty icnReroute reroutCom) <$> supervisors'
|
||||||
icnReroute = text2widget " " <> toWgt (icon IconLetter)
|
-- icnReroute = text2widget " " <> toWgt (icon IconReroute)
|
||||||
supervisees' <- E.select $ E.from $ \(spvr `E.InnerJoin` usrSpvr) -> do
|
-- supervisees' <- E.select $ E.from $ \(spvr `E.InnerJoin` usrSpvr) -> do
|
||||||
E.on $ spvr E.^. UserSupervisorUser E.==. usrSpvr E.^. UserId
|
-- E.on $ spvr E.^. UserSupervisorUser E.==. usrSpvr E.^. UserId
|
||||||
E.where_ $ spvr E.^. UserSupervisorSupervisor E.==. E.val uid
|
-- E.where_ $ spvr E.^. UserSupervisorSupervisor E.==. E.val uid
|
||||||
return (usrSpvr, spvr E.^. UserSupervisorRerouteNotifications)
|
-- return (usrSpvr, spvr E.^. UserSupervisorRerouteNotifications)
|
||||||
let numSupervisees = length supervisees'
|
-- let numSupervisees = length supervisees'
|
||||||
supervisees = intersperse (text2widget ", ") $
|
-- supervisees = intersperse (text2widget ", ") $
|
||||||
(\(usr, E.Value reroutCom) -> linkUserWidget ForProfileDataR usr <> bool mempty icnReroute reroutCom) <$> supervisees'
|
-- (\(usr, E.Value reroutCom) -> linkUserWidget ForProfileDataR usr <> bool mempty icnReroute reroutCom) <$> supervisees'
|
||||||
-- icnReroute = text2widget " " <> toWgt (icon IconLetter)
|
-- -- icnReroute = text2widget " " <> toWgt (icon IconReroute)
|
||||||
--Tables
|
--Tables
|
||||||
(hasRowsOwnedCourses, ownedCoursesTable) <- mkOwnedCoursesTable uid -- Tabelle mit eigenen Kursen
|
ownedCoursesTable <- mkOwnedCoursesTable uid -- Tabelle mit eigenen Kursen
|
||||||
enrolledCoursesTable <- mkEnrolledCoursesTable uid -- Tabelle mit allen Teilnehmer: Kurs (link), Datum
|
enrolledCoursesTable <- mkEnrolledCoursesTable uid -- Tabelle mit allen Teilnehmer: Kurs (link), Datum
|
||||||
submissionTable <- mkSubmissionTable uid -- Tabelle mit allen Abgaben und Abgabe-Gruppen
|
submissionTable <- mkSubmissionTable uid -- Tabelle mit allen Abgaben und Abgabe-Gruppen
|
||||||
submissionGroupTable <- mkSubmissionGroupTable uid -- Tabelle mit allen Abgabegruppen
|
submissionGroupTable <- mkSubmissionGroupTable uid -- Tabelle mit allen Abgabegruppen
|
||||||
@ -631,10 +667,10 @@ makeProfileData usrEnt@(Entity uid usrVal@User{..}) = do
|
|||||||
qualificationsTable <- mkQualificationsTable now uid -- Tabelle mit allen Qualifikationen
|
qualificationsTable <- mkQualificationsTable now uid -- Tabelle mit allen Qualifikationen
|
||||||
supervisorsTable <- mkSupervisorsTable uid -- Tabelle mit allen Supervisors
|
supervisorsTable <- mkSupervisorsTable uid -- Tabelle mit allen Supervisors
|
||||||
superviseesTable <- mkSuperviseesTable uid -- Tabelle mit allen Supervisees
|
superviseesTable <- mkSuperviseesTable uid -- Tabelle mit allen Supervisees
|
||||||
let examTable, ownTutorialTable, tutorialTable :: Widget
|
-- let examTable, ownTutorialTable, tutorialTable :: Widget
|
||||||
examTable = i18n MsgPersonalInfoExamAchievementsWip
|
-- examTable = i18n MsgPersonalInfoExamAchievementsWip
|
||||||
ownTutorialTable = i18n MsgPersonalInfoOwnTutorialsWip
|
-- ownTutorialTable = i18n MsgPersonalInfoOwnTutorialsWip
|
||||||
tutorialTable = i18n MsgPersonalInfoTutorialsWip
|
-- tutorialTable = i18n MsgPersonalInfoTutorialsWip
|
||||||
|
|
||||||
cID <- encrypt uid
|
cID <- encrypt uid
|
||||||
mCRoute <- getCurrentRoute
|
mCRoute <- getCurrentRoute
|
||||||
@ -698,7 +734,7 @@ mkOwnedCoursesTable =
|
|||||||
|
|
||||||
|
|
||||||
-- | Table listing all courses that the given user is enrolled in
|
-- | Table listing all courses that the given user is enrolled in
|
||||||
mkEnrolledCoursesTable :: UserId -> DB Widget
|
mkEnrolledCoursesTable :: UserId -> DB (Bool, Widget)
|
||||||
mkEnrolledCoursesTable =
|
mkEnrolledCoursesTable =
|
||||||
let withType :: ((E.SqlExpr (Entity Course) `E.InnerJoin` E.SqlExpr (Entity CourseParticipant)) -> a)
|
let withType :: ((E.SqlExpr (Entity Course) `E.InnerJoin` E.SqlExpr (Entity CourseParticipant)) -> a)
|
||||||
-> ((E.SqlExpr (Entity Course) `E.InnerJoin` E.SqlExpr (Entity CourseParticipant)) -> a)
|
-> ((E.SqlExpr (Entity Course) `E.InnerJoin` E.SqlExpr (Entity CourseParticipant)) -> a)
|
||||||
@ -706,7 +742,7 @@ mkEnrolledCoursesTable =
|
|||||||
|
|
||||||
validator = def & defaultSorting [SortDescBy "time"]
|
validator = def & defaultSorting [SortDescBy "time"]
|
||||||
|
|
||||||
in \uid -> dbTableWidget' validator
|
in \uid -> (_1 %~ getAny) <$> dbTableWidget validator
|
||||||
DBTable
|
DBTable
|
||||||
{ dbtIdent = "courseMembership" :: Text
|
{ dbtIdent = "courseMembership" :: Text
|
||||||
, dbtSQLQuery = \(course `E.InnerJoin` participant) -> do
|
, dbtSQLQuery = \(course `E.InnerJoin` participant) -> do
|
||||||
@ -750,7 +786,7 @@ mkEnrolledCoursesTable =
|
|||||||
|
|
||||||
|
|
||||||
-- | Table listing all submissions for the given user
|
-- | Table listing all submissions for the given user
|
||||||
mkSubmissionTable :: UserId -> DB Widget
|
mkSubmissionTable :: UserId -> DB (Bool, Widget)
|
||||||
mkSubmissionTable =
|
mkSubmissionTable =
|
||||||
let dbtIdent = "submissions" :: Text
|
let dbtIdent = "submissions" :: Text
|
||||||
dbtStyle = def
|
dbtStyle = def
|
||||||
@ -828,14 +864,10 @@ mkSubmissionTable =
|
|||||||
dbtExtraReps = []
|
dbtExtraReps = []
|
||||||
in \uid -> let dbtSQLQuery = dbtSQLQuery' uid
|
in \uid -> let dbtSQLQuery = dbtSQLQuery' uid
|
||||||
dbtSorting = dbtSorting' uid
|
dbtSorting = dbtSorting' uid
|
||||||
in dbTableWidget' validator DBTable{..}
|
in (_1 %~ getAny) <$> dbTableWidget validator DBTable{..}
|
||||||
-- in do dbtSQLQuery <- dbtSQLQuery'
|
|
||||||
-- dbtSorting <- dbtSorting'
|
|
||||||
-- return $ dbTableWidget' validator $ DBTable {..}
|
|
||||||
|
|
||||||
|
|
||||||
-- | Table listing all submissions for the given user
|
-- | Table listing all submissions for the given user
|
||||||
mkSubmissionGroupTable :: UserId -> DB Widget
|
mkSubmissionGroupTable :: UserId -> DB (Bool, Widget)
|
||||||
mkSubmissionGroupTable =
|
mkSubmissionGroupTable =
|
||||||
let dbtIdent = "subGroups" :: Text
|
let dbtIdent = "subGroups" :: Text
|
||||||
dbtStyle = def
|
dbtStyle = def
|
||||||
@ -887,10 +919,10 @@ mkSubmissionGroupTable =
|
|||||||
dbtCsvDecode = Nothing
|
dbtCsvDecode = Nothing
|
||||||
dbtExtraReps = []
|
dbtExtraReps = []
|
||||||
in \uid -> let dbtSQLQuery = dbtSQLQuery' uid
|
in \uid -> let dbtSQLQuery = dbtSQLQuery' uid
|
||||||
in dbTableWidget' validator DBTable{..}
|
in (_1 %~ getAny) <$> dbTableWidget validator DBTable{..}
|
||||||
|
|
||||||
|
|
||||||
mkCorrectionsTable :: UserId -> DB Widget
|
mkCorrectionsTable :: UserId -> DB (Bool, Widget)
|
||||||
mkCorrectionsTable =
|
mkCorrectionsTable =
|
||||||
let dbtIdent = "corrections" :: Text
|
let dbtIdent = "corrections" :: Text
|
||||||
dbtStyle = def
|
dbtStyle = def
|
||||||
@ -960,7 +992,7 @@ mkCorrectionsTable =
|
|||||||
dbtCsvDecode = Nothing
|
dbtCsvDecode = Nothing
|
||||||
dbtExtraReps = []
|
dbtExtraReps = []
|
||||||
in \uid -> let dbtSQLQuery = dbtSQLQuery' uid
|
in \uid -> let dbtSQLQuery = dbtSQLQuery' uid
|
||||||
in dbTableWidget' validator DBTable{..}
|
in (_1 %~ getAny) <$> dbTableWidget validator DBTable{..}
|
||||||
|
|
||||||
|
|
||||||
-- | Table listing all qualifications that the given user is enrolled in
|
-- | Table listing all qualifications that the given user is enrolled in
|
||||||
@ -1027,8 +1059,8 @@ instance HasUser TblSupervisorData where
|
|||||||
hasUser = _dbrOutput . _1 . _entityVal
|
hasUser = _dbrOutput . _1 . _entityVal
|
||||||
|
|
||||||
-- | Table listing all supervisor of the given user
|
-- | Table listing all supervisor of the given user
|
||||||
mkSupervisorsTable :: UserId -> DB Widget
|
mkSupervisorsTable :: UserId -> DB (Bool, Widget)
|
||||||
mkSupervisorsTable uid = dbTableWidget' validator DBTable{..}
|
mkSupervisorsTable uid = over _1 getAny <$> dbTableWidget validator DBTable{..}
|
||||||
where
|
where
|
||||||
dbtIdent = "userSupervisedBy" :: Text
|
dbtIdent = "userSupervisedBy" :: Text
|
||||||
dbtStyle = def
|
dbtStyle = def
|
||||||
@ -1043,8 +1075,8 @@ mkSupervisorsTable uid = dbTableWidget' validator DBTable{..}
|
|||||||
dbtColonnade = mconcat
|
dbtColonnade = mconcat
|
||||||
[ colUserNameModalHdr MsgTableSupervisor ForProfileDataR
|
[ colUserNameModalHdr MsgTableSupervisor ForProfileDataR
|
||||||
, colUserEmail
|
, colUserEmail
|
||||||
|
, sortable (Just "rerouted") (i18nCell MsgTableRerouteActive) $ \(view $ resultUserSupervisor . _entityVal . _userSupervisorRerouteNotifications -> b) -> ifIconCell b IconReroute
|
||||||
, sortable (Just "postal-pref") (i18nCell MsgPrefersPostal) $ \(view $ resultUser . _userPrefersPostal -> b) -> iconFixedCell $ iconLetterOrEmail b
|
, sortable (Just "postal-pref") (i18nCell MsgPrefersPostal) $ \(view $ resultUser . _userPrefersPostal -> b) -> iconFixedCell $ iconLetterOrEmail b
|
||||||
, sortable (Just "rerouted") (i18nCell MsgTableRerouteActive) $ \(view $ resultUserSupervisor . _entityVal . _userSupervisorRerouteNotifications -> b) -> tickmarkCell b
|
|
||||||
, sortable (Just "cshort") (i18nCell MsgTableCompany) $ \(view $ resultUserSupervisor . _entityVal . _userSupervisorCompany -> mc) -> maybeCell mc (\(unCompanyKey -> c) -> anchorCell (FirmUsersR c) $ citext2widget c)
|
, sortable (Just "cshort") (i18nCell MsgTableCompany) $ \(view $ resultUserSupervisor . _entityVal . _userSupervisorCompany -> mc) -> maybeCell mc (\(unCompanyKey -> c) -> anchorCell (FirmUsersR c) $ citext2widget c)
|
||||||
, sortable (Just "reason") (i18nCell MsgSupervisorReason) $ \(view $ resultUserSupervisor . _entityVal . _userSupervisorReason -> mr) -> maybeCell mr textCell
|
, sortable (Just "reason") (i18nCell MsgSupervisorReason) $ \(view $ resultUserSupervisor . _entityVal . _userSupervisorReason -> mr) -> maybeCell mr textCell
|
||||||
]
|
]
|
||||||
@ -1068,8 +1100,8 @@ mkSupervisorsTable uid = dbTableWidget' validator DBTable{..}
|
|||||||
|
|
||||||
|
|
||||||
-- | Table listing all persons supervised by the given user
|
-- | Table listing all persons supervised by the given user
|
||||||
mkSuperviseesTable :: UserId -> DB Widget
|
mkSuperviseesTable :: UserId -> DB (Bool, Widget)
|
||||||
mkSuperviseesTable uid = dbTableWidget' validator DBTable{..}
|
mkSuperviseesTable uid = over _1 getAny <$> dbTableWidget validator DBTable{..}
|
||||||
where
|
where
|
||||||
dbtIdent = "userSupervisedBy" :: Text
|
dbtIdent = "userSupervisedBy" :: Text
|
||||||
dbtStyle = def
|
dbtStyle = def
|
||||||
@ -1084,8 +1116,8 @@ mkSuperviseesTable uid = dbTableWidget' validator DBTable{..}
|
|||||||
dbtColonnade = mconcat
|
dbtColonnade = mconcat
|
||||||
[ colUserNameModalHdr MsgTableSupervisee ForProfileDataR
|
[ colUserNameModalHdr MsgTableSupervisee ForProfileDataR
|
||||||
-- , colUserEmail
|
-- , colUserEmail
|
||||||
|
, sortable (Just "rerouted") (i18nCell MsgTableRerouteActive) $ \(view $ resultUserSupervisor . _entityVal . _userSupervisorRerouteNotifications -> b) -> ifIconCell b IconReroute
|
||||||
-- , sortable (Just "postal-pref") (i18nCell MsgPrefersPostal) $ \(view $ resultUser . _userPrefersPostal -> b) -> iconFixedCell $ iconLetterOrEmail b
|
-- , sortable (Just "postal-pref") (i18nCell MsgPrefersPostal) $ \(view $ resultUser . _userPrefersPostal -> b) -> iconFixedCell $ iconLetterOrEmail b
|
||||||
, sortable (Just "rerouted") (i18nCell MsgTableRerouteActive) $ \(view $ resultUserSupervisor . _entityVal . _userSupervisorRerouteNotifications -> b) -> tickmarkCell b
|
|
||||||
, sortable (Just "cshort") (i18nCell MsgTableCompany) $ \(view $ resultUserSupervisor . _entityVal . _userSupervisorCompany -> mc) -> maybeCell mc (\(unCompanyKey -> c) -> anchorCell (FirmUsersR c) $ citext2widget c)
|
, sortable (Just "cshort") (i18nCell MsgTableCompany) $ \(view $ resultUserSupervisor . _entityVal . _userSupervisorCompany -> mc) -> maybeCell mc (\(unCompanyKey -> c) -> anchorCell (FirmUsersR c) $ citext2widget c)
|
||||||
, sortable (Just "reason") (i18nCell MsgSupervisorReason) $ \(view $ resultUserSupervisor . _entityVal . _userSupervisorReason -> mr) -> maybeCell mr textCell
|
, sortable (Just "reason") (i18nCell MsgSupervisorReason) $ \(view $ resultUserSupervisor . _entityVal . _userSupervisorReason -> mr) -> maybeCell mr textCell
|
||||||
]
|
]
|
||||||
|
|||||||
@ -128,7 +128,7 @@ postUsersR = do
|
|||||||
return (usrSpvr, spvr E.^. UserSupervisorRerouteNotifications)
|
return (usrSpvr, spvr E.^. UserSupervisorRerouteNotifications)
|
||||||
let supervisors = intersperse (text2widget ", ") $
|
let supervisors = intersperse (text2widget ", ") $
|
||||||
(\(usr, E.Value reroutCom) -> linkUserWidget ForProfileDataR usr <> bool mempty icnReroute reroutCom) <$> supervisors'
|
(\(usr, E.Value reroutCom) -> linkUserWidget ForProfileDataR usr <> bool mempty icnReroute reroutCom) <$> supervisors'
|
||||||
icnReroute = text2widget " " <> toWgt (icon IconLetter)
|
icnReroute = text2widget " " <> toWgt (icon IconReroute)
|
||||||
pure $ mconcat supervisors
|
pure $ mconcat supervisors
|
||||||
, sortable (Just "last-login") (i18nCell MsgLastLogin) $ \DBRow{ dbrOutput = Entity _ User{..} } -> maybe mempty dateTimeCell userLastAuthentication
|
, sortable (Just "last-login") (i18nCell MsgLastLogin) $ \DBRow{ dbrOutput = Entity _ User{..} } -> maybe mempty dateTimeCell userLastAuthentication
|
||||||
, sortable (Just "auth-ldap") (i18nCell MsgAuthMode) $ \DBRow{ dbrOutput = Entity _ User{..} } -> i18nCell userAuthentication
|
, sortable (Just "auth-ldap") (i18nCell MsgAuthMode) $ \DBRow{ dbrOutput = Entity _ User{..} } -> i18nCell userAuthentication
|
||||||
|
|||||||
@ -412,6 +412,10 @@ citext2widget t = [whamlet|#{CI.original t}|]
|
|||||||
str2widget :: String -> WidgetFor site ()
|
str2widget :: String -> WidgetFor site ()
|
||||||
str2widget s = [whamlet|#{s}|]
|
str2widget s = [whamlet|#{s}|]
|
||||||
|
|
||||||
|
-- | hamlet does not like quotes
|
||||||
|
spaceWidget :: WidgetFor site ()
|
||||||
|
spaceWidget = str2widget " "
|
||||||
|
|
||||||
int2widget :: Int64 -> WidgetFor site ()
|
int2widget :: Int64 -> WidgetFor site ()
|
||||||
int2widget i = [whamlet|#{tshow i}|]
|
int2widget i = [whamlet|#{tshow i}|]
|
||||||
|
|
||||||
|
|||||||
@ -106,19 +106,21 @@ data Icon
|
|||||||
| IconBlocked
|
| IconBlocked
|
||||||
| IconCertificate
|
| IconCertificate
|
||||||
| IconPrintCenter
|
| IconPrintCenter
|
||||||
| IconLetter
|
| IconLetter -- only to be used for postal matters
|
||||||
| IconAt
|
| IconAt
|
||||||
| IconSupervisor
|
| IconSupervisor
|
||||||
| IconSupervisorForeign
|
| IconSupervisorForeign
|
||||||
|
| IconSuperior -- supervisor and head of department
|
||||||
-- IconWaitingForUser
|
-- IconWaitingForUser
|
||||||
| IconExpired
|
| IconExpired
|
||||||
| IconLocked
|
| IconLocked
|
||||||
| IconUnlocked
|
| IconUnlocked
|
||||||
| IconResetTries -- also see IconReset
|
| IconResetTries -- also see IconReset
|
||||||
| IconCompany
|
| IconCompany
|
||||||
| IconEdit
|
| IconEdit
|
||||||
| IconUserEdit
|
| IconUserEdit
|
||||||
-- IconMagic -- indicates automatic updates
|
-- IconMagic -- indicates automatic updates
|
||||||
|
| IconReroute -- for notification rerouting
|
||||||
|
|
||||||
deriving (Eq, Ord, Enum, Bounded, Show, Read, Generic)
|
deriving (Eq, Ord, Enum, Bounded, Show, Read, Generic)
|
||||||
deriving anyclass (Universe, Finite, NFData)
|
deriving anyclass (Universe, Finite, NFData)
|
||||||
@ -158,7 +160,7 @@ iconText = \case
|
|||||||
IconSFTHint -> "life-ring" -- for SheetFileType only
|
IconSFTHint -> "life-ring" -- for SheetFileType only
|
||||||
IconSFTSolution -> "exclamation-circle" -- for SheetFileType only
|
IconSFTSolution -> "exclamation-circle" -- for SheetFileType only
|
||||||
IconSFTMarking -> "check-circle" -- for SheetFileType only
|
IconSFTMarking -> "check-circle" -- for SheetFileType only
|
||||||
IconEmail -> "envelope" -- envelope is no longer unamibuous, use IconAt or IconLetter if email and postal need to be distinguished
|
IconEmail -> "envelope" -- envelope is no longer unambiguous, use IconAt or IconLetter if email and postal need to be distinguished
|
||||||
IconRegisterTemplate -> "file-alt"
|
IconRegisterTemplate -> "file-alt"
|
||||||
IconNoCorrectors -> "user-slash"
|
IconNoCorrectors -> "user-slash"
|
||||||
IconRemoveUser -> "user-slash"
|
IconRemoveUser -> "user-slash"
|
||||||
@ -207,6 +209,7 @@ iconText = \case
|
|||||||
IconAt -> "at" -- alternative for IconEmail to distinguish from IconLetter
|
IconAt -> "at" -- alternative for IconEmail to distinguish from IconLetter
|
||||||
IconSupervisor -> "head-side" -- must be notably different to user
|
IconSupervisor -> "head-side" -- must be notably different to user
|
||||||
IconSupervisorForeign -> "alien"
|
IconSupervisorForeign -> "alien"
|
||||||
|
IconSuperior -> "user-tie" -- user-crown
|
||||||
-- IconWaitingForUser -> "user-cog" -- Waiting on a user to do something
|
-- IconWaitingForUser -> "user-cog" -- Waiting on a user to do something
|
||||||
IconExpired -> "hourglass-end"
|
IconExpired -> "hourglass-end"
|
||||||
IconLocked -> "lock"
|
IconLocked -> "lock"
|
||||||
@ -216,7 +219,7 @@ iconText = \case
|
|||||||
IconEdit -> "edit"
|
IconEdit -> "edit"
|
||||||
IconUserEdit -> "user-edit"
|
IconUserEdit -> "user-edit"
|
||||||
-- IconMagic -> "wand-magic"
|
-- IconMagic -> "wand-magic"
|
||||||
|
IconReroute -> "directions"
|
||||||
nullaryPathPiece ''Icon $ camelToPathPiece' 1
|
nullaryPathPiece ''Icon $ camelToPathPiece' 1
|
||||||
deriveLift ''Icon
|
deriveLift ''Icon
|
||||||
|
|
||||||
@ -316,6 +319,8 @@ iconExamRegister :: Bool -> Markup
|
|||||||
iconExamRegister True = icon IconExamRegisterTrue
|
iconExamRegister True = icon IconExamRegisterTrue
|
||||||
iconExamRegister False = icon IconExamRegisterFalse
|
iconExamRegister False = icon IconExamRegisterFalse
|
||||||
|
|
||||||
|
-- | indicator whether notifications are sent by letter or email
|
||||||
|
-- use iconReroute if type of rerouting is unclear
|
||||||
iconLetterOrEmail :: Bool -> Markup
|
iconLetterOrEmail :: Bool -> Markup
|
||||||
iconLetterOrEmail True = icon IconLetter
|
iconLetterOrEmail True = icon IconLetter
|
||||||
iconLetterOrEmail False = icon IconAt
|
iconLetterOrEmail False = icon IconAt
|
||||||
|
|||||||
@ -114,18 +114,6 @@ $# SPDX-License-Identifier: AGPL-3.0-or-later
|
|||||||
_{MsgCompany}
|
_{MsgCompany}
|
||||||
<dd .deflist__dd>
|
<dd .deflist__dd>
|
||||||
^{compWgt}
|
^{compWgt}
|
||||||
$if numSupervisors > 0
|
|
||||||
<dt .deflist__dt>_{MsgProfileSupervisor}
|
|
||||||
$if numSupervisors > 3
|
|
||||||
\ #{numSupervisors}
|
|
||||||
<dd .deflist__dd>
|
|
||||||
^{mconcat supervisors}
|
|
||||||
$if numSupervisees > 0
|
|
||||||
<dt .deflist__dt>_{MsgProfileSupervisee}
|
|
||||||
$if length supervisees > 3
|
|
||||||
\ #{numSupervisees}
|
|
||||||
<dd .deflist__dd>
|
|
||||||
^{mconcat supervisees}
|
|
||||||
$if showAdminInfo
|
$if showAdminInfo
|
||||||
<dt .deflist__dt>
|
<dt .deflist__dt>
|
||||||
_{MsgUserCreated}
|
_{MsgUserCreated}
|
||||||
@ -197,67 +185,25 @@ $# SPDX-License-Identifier: AGPL-3.0-or-later
|
|||||||
$nothing
|
$nothing
|
||||||
^{formatTimeW SelFormatDateTime studyFeaturesLastObserved}
|
^{formatTimeW SelFormatDateTime studyFeaturesLastObserved}
|
||||||
<section>
|
<section>
|
||||||
<div .container>
|
|
||||||
$if hasRowsOwnedCourses
|
|
||||||
<div .container>
|
|
||||||
<h2>_{MsgProfileCourses}
|
|
||||||
<div .container>
|
|
||||||
^{ownedCoursesTable}
|
|
||||||
|
|
||||||
<div .container>
|
^{maybeTable' MsgProfileSupervisor (Just MsgProfileNoSupervisor) Nothing supervisorsTable}
|
||||||
<h2>_{MsgProfileCourseParticipations}
|
|
||||||
<div .container>
|
^{maybeTable' MsgProfileSupervisee (Just MsgProfileNoSupervisee) (Just (msg2widget MsgProfileSuperviseeReroute <> toWgt (iconLetterOrEmail userPrefersPostal))) superviseesTable}
|
||||||
^{enrolledCoursesTable}
|
|
||||||
|
|
||||||
<div .container>
|
<div .container>
|
||||||
<h2>_{MsgProfileQualifications}
|
<h2>_{MsgProfileQualifications}
|
||||||
<div .container>
|
<div .container>
|
||||||
^{qualificationsTable}
|
^{qualificationsTable}
|
||||||
|
|
||||||
<div .container>
|
^{maybeTable MsgProfileCourses ownedCoursesTable}
|
||||||
<h2>_{MsgProfileCourseExamResults}
|
|
||||||
<div .container>
|
|
||||||
^{examTable}
|
|
||||||
|
|
||||||
<div .container>
|
^{maybeTable MsgProfileCourseParticipations enrolledCoursesTable}
|
||||||
<h2>_{MsgProfileTutorials}
|
|
||||||
<div .container>
|
|
||||||
^{ownTutorialTable}
|
|
||||||
|
|
||||||
<div .container>
|
^{maybeTable MsgProfileSubmissionGroups submissionGroupTable}
|
||||||
<h2>_{MsgProfileTutorialParticipations}
|
|
||||||
<div .container>
|
|
||||||
^{tutorialTable}
|
|
||||||
|
|
||||||
<div .container>
|
^{maybeTable' MsgProfileSubmissions Nothing (Just (msg2widget MsgProfileGroupSubmissionDates)) submissionTable}
|
||||||
<h2>_{MsgProfileSubmissionGroups}
|
|
||||||
<div .container>
|
|
||||||
^{submissionGroupTable}
|
|
||||||
|
|
||||||
<div .container>
|
^{maybeTable' MsgTableCorrector Nothing (Just (msg2widget MsgProfileCorrectorRemark <> simpleLinkI MsgProfileCorrections CorrectionsR)) correctionsTable}
|
||||||
<h2>_{MsgProfileSubmissions}
|
|
||||||
<div .container>
|
|
||||||
^{submissionTable}
|
|
||||||
<em>_{MsgProfileRemark}
|
|
||||||
\ _{MsgProfileGroupSubmissionDates}
|
|
||||||
|
|
||||||
<div .container>
|
|
||||||
<h2> _{MsgTableCorrector}
|
|
||||||
<div .container>
|
|
||||||
^{correctionsTable}
|
|
||||||
|
|
||||||
<em>_{MsgProfileRemark}
|
|
||||||
\ _{MsgProfileCorrectorRemark}
|
|
||||||
<a href=@{CorrectionsR}>_{MsgProfileCorrections}
|
|
||||||
|
|
||||||
<div .container>
|
|
||||||
<h2> _{MsgProfileSupervisor}
|
|
||||||
<div .container>
|
|
||||||
^{supervisorsTable}
|
|
||||||
|
|
||||||
<div .container>
|
|
||||||
<h2> _{MsgProfileSupervisee}
|
|
||||||
<div .container>
|
|
||||||
^{superviseesTable}
|
|
||||||
|
|
||||||
^{profileRemarks}
|
^{profileRemarks}
|
||||||
|
|||||||
Reference in New Issue
Block a user