Skip to content

Commit 7b84515

Browse files
chamecobmcutler
authored andcommitted
Update default plagiarism directory (#45)
* Update default plagiarism directory * Move away from clunky Submitty path-base system
1 parent 4c04ced commit 7b84515

File tree

5 files changed

+35
-36
lines changed

5 files changed

+35
-36
lines changed

lichen.cabal

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ library
3535
, Lichen.Plagiarism.Render
3636
, Lichen.Plagiarism.Render.Index
3737
, Lichen.Plagiarism.Render.Compare
38-
, Lichen.Plagiarism.Render.PathGenerators
3938
, Lichen.Count.Main
4039
, Lichen.Count.Counters
4140
, Lichen.Diagnostics.Main
@@ -57,7 +56,6 @@ library
5756
, blaze-markup
5857
, clay
5958
, jmacro
60-
, text-format
6159
ghc-options: -Wall -fwarn-incomplete-patterns
6260
default-language: Haskell2010
6361

src/Lichen/Config/Plagiarism.hs

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,29 @@ import Data.Maybe
66
import Data.Aeson
77
import qualified Data.Text as T
88

9+
import qualified Text.Blaze.Html5 as H
10+
911
import Lichen.Config
1012
import Lichen.Config.Languages
11-
import Lichen.Plagiarism.Render.PathGenerators
13+
14+
newtype PathGenerator = PathGenerator { runPathGenerator :: Config -> String -> String -> H.AttributeValue }
15+
instance FromJSON PathGenerator where
16+
parseJSON (String s) = pure $ generatePathChoice generatePathSubmitty (Just $ T.unpack s)
17+
parseJSON _ = pure generatePathSubmitty
18+
19+
generatePathStatic :: PathGenerator
20+
generatePathStatic = PathGenerator $ \_ x y -> H.stringValue $ "compare/" ++ x ++ "_" ++ y ++ ".html"
21+
22+
generatePathSubmitty :: PathGenerator
23+
generatePathSubmitty = PathGenerator $ \c x y -> H.stringValue $ mconcat [ "index.php?semester=", submittySemester c
24+
, "&course=", submittyCourse c
25+
, "&assignment=", submittyAssignment c
26+
, "&component=admin&page=plagiarism&action=compare&studenta=", x, "&studentb=", y ]
27+
28+
generatePathChoice :: PathGenerator -> Maybe String -> PathGenerator
29+
generatePathChoice d Nothing = d
30+
generatePathChoice _ (Just "static") = generatePathStatic
31+
generatePathChoice _ _ = generatePathSubmitty
1232

1333
data Config = Config
1434
{ dataDir :: FilePath
@@ -19,7 +39,9 @@ data Config = Config
1939
, language :: Language
2040
, topMatches :: Int
2141
, pathGenerator :: PathGenerator
22-
, pathBase :: FilePath
42+
, submittySemester :: FilePath
43+
, submittyCourse :: FilePath
44+
, submittyAssignment :: FilePath
2345
, sourceDir :: Maybe FilePath
2446
, pastDirs :: [FilePath]
2547
}
@@ -33,21 +55,25 @@ instance FromJSON Config where
3355
language <- fromMaybe (language defaultConfig) <$> o .:? "language"
3456
topMatches <- fromMaybe (topMatches defaultConfig) <$> o .:? "top_matches"
3557
pathGenerator <- fromMaybe (pathGenerator defaultConfig) <$> o .:? "path_generator"
36-
pathBase <- fromMaybe (pathBase defaultConfig) <$> o .:? "path_base"
58+
submittySemester <- fromMaybe (submittySemester defaultConfig) <$> o .:? "submitty_semester"
59+
submittyCourse <- fromMaybe (submittyCourse defaultConfig) <$> o .:? "submitty_course"
60+
submittyAssignment <- fromMaybe (submittyAssignment defaultConfig) <$> o .:? "submitty_assignment"
3761
sourceDir <- fromMaybe (sourceDir defaultConfig) <$> o .:? "source_dir"
3862
pastDirs <- fromMaybe (pastDirs defaultConfig) <$> o .:? "past_dirs"
3963
return Config{..}
4064

4165
defaultConfig :: Config
42-
defaultConfig = Config { dataDir = ".lichen"
66+
defaultConfig = Config { dataDir = "plagiarism"
4367
, concatDir = "concatenated"
4468
, highlightDir = "highlighted"
4569
, reportDir = "report"
4670
, reportTitle = "Plagiarism Detection"
4771
, language = langDummy
4872
, topMatches = 100
4973
, pathGenerator = generatePathSubmitty
50-
, pathBase = ""
74+
, submittySemester = "invalid"
75+
, submittyCourse = "invalid"
76+
, submittyAssignment = "invalid"
5177
, sourceDir = Nothing
5278
, pastDirs = []
5379
}

src/Lichen/Plagiarism/Main.hs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import Lichen.Plagiarism.Concatenate
2424
import Lichen.Plagiarism.Highlight
2525
import Lichen.Plagiarism.Report
2626
import Lichen.Plagiarism.Walk
27-
import Lichen.Plagiarism.Render.PathGenerators
2827

2928
parseOptions :: Config -> Parser Config
3029
parseOptions dc = Config
@@ -36,7 +35,9 @@ parseOptions dc = Config
3635
<*> (languageChoice (language dc) <$> (optional . strOption $ long "language" <> short 'l' <> metavar "LANG" <> help "Language of student code"))
3736
<*> option auto (long "top-matches" <> short 't' <> metavar "N" <> showDefault <> value (topMatches dc) <> help "Number of top matches to report")
3837
<*> (generatePathChoice (pathGenerator dc) <$> (optional . strOption $ long "path-generator" <> metavar "GENERATOR" <> help "Path generation method for reports"))
39-
<*> strOption (long "path-base" <> metavar "BASE" <> value (pathBase dc) <> help "Base to prepend to report paths")
38+
<*> strOption (long "semester" <> metavar "SEMESTER" <> value (submittySemester dc) <> help "Semester for Submitty path generation")
39+
<*> strOption (long "course" <> metavar "COURSE" <> value (submittyCourse dc) <> help "Course for Submitty path generation")
40+
<*> strOption (long "assignment" <> metavar "ASSIGNMENT" <> value (submittyAssignment dc) <> help "Assignment for Submitty path generation")
4041
<*> optional (argument str (metavar "SOURCE_DIR"))
4142
<*> many (argument str (metavar "PAST_DIRS"))
4243

src/Lichen/Plagiarism/Render/Index.hs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,9 @@ import Numeric
1414
import Lichen.Util
1515
import Lichen.Config.Plagiarism
1616
import Lichen.Plagiarism.Render
17-
import Lichen.Plagiarism.Render.PathGenerators
1817

1918
renderEntry :: Show a => Config -> (Double, (b, a), (b, a)) -> H.Html
20-
renderEntry config (match, (_, x), (_, y)) = H.tr (H.td (H.a ! A.href (H.stringValue (pathBase config)
21-
<> runPathGenerator (pathGenerator config) (sq x) (sq y)) $ H.toHtml $ showFFloat (Just 2) (match * 100) "%")
19+
renderEntry config (match, (_, x), (_, y)) = H.tr (H.td (H.a ! A.href (runPathGenerator (pathGenerator config) config (sq x) (sq y)) $ H.toHtml $ showFFloat (Just 2) (match * 100) "%")
2220
<> H.td (hs x) <> H.td (hs y))
2321

2422
renderTable :: Show a => Config -> [(Double, (b, a), (b, a))] -> H.Html

src/Lichen/Plagiarism/Render/PathGenerators.hs

Lines changed: 0 additions & 24 deletions
This file was deleted.

0 commit comments

Comments
 (0)