@@ -6,9 +6,29 @@ import Data.Maybe
6
6
import Data.Aeson
7
7
import qualified Data.Text as T
8
8
9
+ import qualified Text.Blaze.Html5 as H
10
+
9
11
import Lichen.Config
10
12
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
12
32
13
33
data Config = Config
14
34
{ dataDir :: FilePath
@@ -19,7 +39,9 @@ data Config = Config
19
39
, language :: Language
20
40
, topMatches :: Int
21
41
, pathGenerator :: PathGenerator
22
- , pathBase :: FilePath
42
+ , submittySemester :: FilePath
43
+ , submittyCourse :: FilePath
44
+ , submittyAssignment :: FilePath
23
45
, sourceDir :: Maybe FilePath
24
46
, pastDirs :: [FilePath ]
25
47
}
@@ -33,21 +55,25 @@ instance FromJSON Config where
33
55
language <- fromMaybe (language defaultConfig) <$> o .:? " language"
34
56
topMatches <- fromMaybe (topMatches defaultConfig) <$> o .:? " top_matches"
35
57
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"
37
61
sourceDir <- fromMaybe (sourceDir defaultConfig) <$> o .:? " source_dir"
38
62
pastDirs <- fromMaybe (pastDirs defaultConfig) <$> o .:? " past_dirs"
39
63
return Config {.. }
40
64
41
65
defaultConfig :: Config
42
- defaultConfig = Config { dataDir = " .lichen "
66
+ defaultConfig = Config { dataDir = " plagiarism "
43
67
, concatDir = " concatenated"
44
68
, highlightDir = " highlighted"
45
69
, reportDir = " report"
46
70
, reportTitle = " Plagiarism Detection"
47
71
, language = langDummy
48
72
, topMatches = 100
49
73
, pathGenerator = generatePathSubmitty
50
- , pathBase = " "
74
+ , submittySemester = " invalid"
75
+ , submittyCourse = " invalid"
76
+ , submittyAssignment = " invalid"
51
77
, sourceDir = Nothing
52
78
, pastDirs = []
53
79
}
0 commit comments