forked from moodle/moodle
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplagiarismlib.php
163 lines (154 loc) · 5.8 KB
/
plagiarismlib.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* plagiarismlib.php - Contains core Plagiarism related functions.
*
* @since Moodle 2.0
* @package core
* @subpackage plagiarism
* @copyright 2010 Dan Marsden http://danmarsden.com
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
if (!defined('MOODLE_INTERNAL')) {
die('Direct access to this script is forbidden.');
}
/**
* displays the similarity score and provides a link to the full report if allowed.
*
* @param object $linkarray contains all relevant information for the plugin to generate a link
* @return string - url to allow login/viewing of a similarity report
*/
function plagiarism_get_links($linkarray) {
global $CFG;
if (empty($CFG->enableplagiarism)) {
return '';
}
$plagiarismplugins = plagiarism_load_available_plugins();
$output = '';
foreach ($plagiarismplugins as $plugin => $dir) {
require_once($dir.'/lib.php');
$plagiarismclass = "plagiarism_plugin_$plugin";
$plagiarismplugin = new $plagiarismclass;
$output .= $plagiarismplugin->get_links($linkarray);
}
if (!empty($output)) {
return html_writer::span($output, 'core_plagiarism_links');
}
return '';
}
/**
* returns array of plagiarism details about specified file
*
* @deprecated Since Moodle 4.0. - this function was a placeholder and not used in core.
* @todo MDL-71326 This is to be moved from here to deprecatedlib.php in Moodle 4.4
* @param int $cmid
* @param int $userid
* @param object $file moodle file object
* @return array - sets of details about specified file, one array of details per plagiarism plugin
* - each set contains at least 'analyzed', 'score', 'reporturl'
*/
function plagiarism_get_file_results($cmid, $userid, $file) {
global $CFG;
$text = 'plagiarism_get_file_results is deprecated, please use plagiarism_get_links() or plugin specific functions.';
debugging($text, DEBUG_DEVELOPER);
$allresults = array();
if (empty($CFG->enableplagiarism)) {
return $allresults;
}
$plagiarismplugins = plagiarism_load_available_plugins();
foreach ($plagiarismplugins as $plugin => $dir) {
require_once($dir.'/lib.php');
$plagiarismclass = "plagiarism_plugin_$plugin";
$plagiarismplugin = new $plagiarismclass;
$allresults[] = $plagiarismplugin->get_file_results($cmid, $userid, $file);
}
return $allresults;
}
/**
* Allows a plagiarism plugin to print a button/link at the top of activity overview report pages.
*
* @deprecated Since Moodle 4.0 - Please use {plugin name}_before_standard_top_of_body_html instead.
* @todo MDL-71326 Remove this method.
* @param object $course - full Course object
* @param object $cm - full cm object
* @return string
*/
function plagiarism_update_status($course, $cm) {
global $CFG;
if (empty($CFG->enableplagiarism)) {
return '';
}
$plagiarismplugins = plagiarism_load_available_plugins();
$output = '';
foreach ($plagiarismplugins as $plugin => $dir) {
require_once($dir.'/lib.php');
$plagiarismclass = "plagiarism_plugin_$plugin";
$plagiarismplugin = new $plagiarismclass;
$reflectionmethod = new ReflectionMethod($plagiarismplugin, 'update_status');
if ($reflectionmethod->getDeclaringClass()->getName() == get_class($plagiarismplugin)) {
$text = 'plagiarism_plugin::update_status() is deprecated.';
$text .= ' Use plagiarism_' . $plugin . '_before_standard_top_of_body_html() instead';
debugging($text, DEBUG_DEVELOPER);
}
$output .= $plagiarismplugin->update_status($course, $cm);
}
return $output;
}
/**
* Function that prints the student disclosure notifying that the files will be checked for plagiarism
* @param integer $cmid - the cmid of this module
* @return string
*/
function plagiarism_print_disclosure($cmid) {
global $CFG;
if (empty($CFG->enableplagiarism)) {
return '';
}
$plagiarismplugins = plagiarism_load_available_plugins();
$output = '';
foreach ($plagiarismplugins as $plugin => $dir) {
require_once($dir.'/lib.php');
$plagiarismclass = "plagiarism_plugin_$plugin";
$plagiarismplugin = new $plagiarismclass;
$output .= $plagiarismplugin->print_disclosure($cmid);
}
return $output;
}
/**
* Helper function - also loads lib file of plagiarism plugin
*
* @return array of available plugins
*/
function plagiarism_load_available_plugins() {
global $CFG;
if (empty($CFG->enableplagiarism)) {
return array();
}
$plagiarismplugins = core_component::get_plugin_list('plagiarism');
$availableplugins = array();
foreach ($plagiarismplugins as $plugin => $dir) {
// Check this plugin is enabled and a lib file exists.
$pluginenabled = get_config('plagiarism_'.$plugin, 'enabled');
if ($pluginenabled && file_exists($dir."/lib.php")) {
require_once($dir.'/lib.php');
$plagiarismclass = "plagiarism_plugin_$plugin";
if (class_exists($plagiarismclass)) {
$availableplugins[$plugin] = $dir;
}
}
}
return $availableplugins;
}