From 5021cca59cc13d1bfa8ce039069748e0811eae3f Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Tue, 16 Apr 2019 15:14:33 +0200 Subject: [PATCH 1/2] Don't capture submit of all dbTable-Forms --- static/js/utils/asyncTable.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/static/js/utils/asyncTable.js b/static/js/utils/asyncTable.js index 9c731b33e..a8021817b 100644 --- a/static/js/utils/asyncTable.js +++ b/static/js/utils/asyncTable.js @@ -135,7 +135,7 @@ if (tableFilterForm) { gatherTableFilterInputs(tableFilterForm); - addTableFilterEventListeners(); + addTableFilterEventListeners(tableFilterForm); } } @@ -157,7 +157,7 @@ }); } - function addTableFilterEventListeners() { + function addTableFilterEventListeners(tableFilterForm) { tableFilterInputs.search.forEach(function(input) { var debouncedInput = debounce(function() { if (input.value.length === 0 || input.value.length > 2) { @@ -188,7 +188,7 @@ }); }); - element.addEventListener('submit', function(event) { + tableFilterForm.addEventListener('submit', function(event) { event.preventDefault(); updateFromTableFilter(); }); From 529b2f22c4b467fc503a7469aebc012128d3aad4 Mon Sep 17 00:00:00 2001 From: Steffen Jost Date: Tue, 16 Apr 2019 15:22:16 +0200 Subject: [PATCH 2/2] filter duplicate recipients silently --- messages/uniworx/de.msg | 2 +- src/Handler/Utils/Communication.hs | 34 +++++++++++++++++------------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/messages/uniworx/de.msg b/messages/uniworx/de.msg index 6f05189db..84c01ecaa 100644 --- a/messages/uniworx/de.msg +++ b/messages/uniworx/de.msg @@ -739,7 +739,7 @@ NavigationFavourites: Favoriten CommSubject: Betreff CommRecipients: Empfänger -CommDuplicateRecipients recipients@TextList: #{pluralDE (length recipients) "Doppelter" "Doppelte"} Empfänger: #{intercalate ", " recipients} +CommDuplicateRecipients n@Int: #{tshow n} #{pluralDE n "doppelter" "doppelte"} Empfänger ignoriert CommSuccess n@Int: Nachricht wurde an #{tshow n} Empfänger versandt CommCourseHeading: Kursmitteilung diff --git a/src/Handler/Utils/Communication.hs b/src/Handler/Utils/Communication.hs index 873781da7..dc8d6fe54 100644 --- a/src/Handler/Utils/Communication.hs +++ b/src/Handler/Utils/Communication.hs @@ -80,31 +80,35 @@ commR CommunicationRoute{..} = do [ pure ( AddRecipientGroups , Set.unions <$> apreq (multiSelectField . return $ mkOptionList [ Option (mr g) (Set.fromList $ map (Right . entityKey . snd) recs) (toPathPiece g) | (g,recs) <- Map.toList suggestedRecipients ] - ) ("" & addName (nudge . toPathPiece $ AddRecipientGroups)) Nothing + ) (fslI AddRecipientGroups & addName (nudge . toPathPiece $ AddRecipientGroups)) Nothing ) , do (g,recs) <- Map.toList suggestedRecipients return ( AddRecipientGroup g , Set.unions <$> apreq (multiSelectField . return $ mkOptionList [ Option userDisplayName (Set.singleton $ Right rid) (toPathPiece cid) | (cid, Entity rid User{..}) <- recs ] - ) ("" & addName (nudge . toPathPiece $ AddRecipientGroup g)) Nothing + ) (fslI (AddRecipientGroup g) & addName (nudge . toPathPiece $ AddRecipientGroup g)) Nothing ) , pure ( AddRecipientCustom - , Set.fromList . map (Left . CI.mk) <$> apreq multiEmailField ("" & addName (nudge $ toPathPiece AddRecipientCustom)) Nothing ) + , Set.fromList . map (Left . CI.mk) <$> apreq multiEmailField (fslI AddRecipientCustom & addName (nudge $ toPathPiece AddRecipientCustom)) Nothing ) ] - (addRes, addWdgt) <- multiActionM addOptions ("" & addName (nudge "select")) Nothing csrf + (addRes, addWdgt) <- multiActionM addOptions ("foobar" & addName (nudge "select")) Nothing csrf -- lookupUserDisplayName :: UserId -> UserDisplayName - lookupUserDisplayName <- liftHandlerT . runDB $ do - let uids = toListOf (_FormSuccess . folded . _Right) addRes - names <- forM uids getJustEntity - return $ \uid -> case filter ((== uid) . entityKey) names of - [Entity _ User{..}] -> userDisplayName - _other -> error "UserId lookpup failed" - let addRes' = addRes <&> \newSet oldMap -> if - | collisions <- newSet `Set.intersection` Set.fromList (Map.elems oldMap) - , not $ Set.null collisions -> - FormFailure [ mr . MsgCommDuplicateRecipients . map (either CI.original lookupUserDisplayName) $ Set.toList collisions ] - | otherwise -> FormSuccess . Map.fromList . zip [maybe 0 (succ . fst) (Map.lookupMax oldMap)..] $ Set.toList newSet + -- lookupUserDisplayName <- liftHandlerT . runDB $ do + -- let uids = toListOf (_FormSuccess . folded . _Right) addRes + -- names <- forM uids getJustEntity + -- return $ \uid -> case filter ((== uid) . entityKey) names of + -- [Entity _ User{..}] -> userDisplayName + -- _other -> error "UserId lookpup failed" + let addRes' = addRes <&> \newSet oldMap -> + -- if + -- | collisions <- newSet `Set.intersection` Set.fromList (Map.elems oldMap) + -- , not $ Set.null collisions -> + -- -- FormFailure [ mr . MsgCommDuplicateRecipients . map (either CI.original lookupUserDisplayName) $ Set.toList collisions ] + -- FormFailure [ mr . MsgCommDuplicateRecipients $ Set.size collisions ] + -- | otherwise -> FormSuccess . Map.fromList . zip [maybe 0 (succ . fst) (Map.lookupMax oldMap)..] $ Set.toList newSet + let freshSet = newSet `Set.difference` Set.fromList (Map.elems oldMap) + in FormSuccess . Map.fromList . zip [maybe 0 (succ . fst) (Map.lookupMax oldMap)..] $ Set.toList freshSet addWdgt' = mconcat [ toWidget csrf, addWdgt, fvInput submitView ] return (addRes', addWdgt')