1
0
mirror of https://github.com/PlagiarismCheck/moodle-plagiarism_pchkorg.git synced 2024-12-22 12:10:08 +00:00

Change capability name. Add information into README file #1 . Add PHPDOC. Version 2.3.

This commit is contained in:
Jane Adelmann 2019-02-06 15:38:23 +02:00
parent 079d44e31b
commit ce4f497868
No known key found for this signature in database
GPG Key ID: 4448AC31D0972D2F
18 changed files with 341 additions and 67 deletions

View File

@ -1,9 +1,54 @@
[![Build Status](https://travis-ci.org/PlagiarismCheck/moodle-plagiarism_pchkorg.svg?branch=master)](https://travis-ci.org/PlagiarismCheck/moodle-plagiarism_pchkorg)
Plagiarism Check Plugin.
Plagiarism Check Plugin. [![Build Status](https://travis-ci.org/PlagiarismCheck/moodle-plagiarism_pchkorg.svg?branch=master)](https://travis-ci.org/PlagiarismCheck/moodle-plagiarism_pchkorg)
---------------------
This plugin provide functionality for Plagiarismcheck.org service.
Plagiarismcheck.org is a sophisticated similarity search engine.
We advocate for bringing technology into academics to help instructors save time and motivate students write better papers.
We advocate for bringing technology into academics to help instructors save time and motivate students write better papers.
PlagiarismCheck.org has subscription-based pricing model. More information is available here.
http://plagiarismcheck.org
### With PlagiarismCheck you get:
1) AI Algorithm.
The algorithm that searches not only for word-to-word match, but also covers:
* word rearrangements
* word substitutions / synonymization
* changes from passive to active voice
* poor paraphrasing
* changes of alphabet from Latin to Cyrillic and vice versa
how_we_detect
2) Smart report.
* user can access all sources where similarity has been detected
* similarity found in quotes are highlighted in a different color and can be included/excluded from the total similarity percentage
* similarity found in references are highlighted in a different color and can be included/excluded from the total similarity percentage
3) Search database.
Depending on the type of subscription, there are several search options available:
* search via all publicly available resources
* create a personal archive for your school and search through it
* search in closed depositories and libraries
4) Usability.
* integration can be easily set up by an administrator of a Moodle account
* integration gives a chance to set up who will have an access to the software
* though the integration both students and instructors will have an access to the similarity reports
5) Resubmissions.
In case an instructor allows to resubmit works, PlagiarismCheck will be able to check all submissions without giving a false positive result
6) Throughput
* no restrictions on daily usage
* minimum downtime
* no limitations on how soon one can resubmit a work
7) Excellent customer service
response to clients' requests within 24 hours
24/7 admin support.

View File

@ -14,16 +14,32 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* @package plagiarism_pchkorg
* @category plagiarism
* @copyright PlagiarismCheck.org, https://plagiarismcheck.org/
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* Class plagiarism_pchkorg_api_provider
*/
class plagiarism_pchkorg_api_provider {
/**
* @var
*/
private $token;
/**
* @var string
*/
private $endpoint;
/**
* @var
*/
private $lasterror;
/**
@ -40,11 +56,28 @@ class plagiarism_pchkorg_api_provider {
$this->lasterror = $lasterror;
}
/**
* plagiarism_pchkorg_api_provider constructor.
*
* @param $token
* @param string $endpoint
*/
public function __construct($token, $endpoint = 'https://plagiarismcheck.org') {
$this->token = $token;
$this->endpoint = $endpoint;
}
/**
* @param $authorhash
* @param $cousereid
* @param $assignmentid
* @param $submissionid
* @param $attachmentid
* @param $content
* @param $mime
* @param $filename
* @return |null
*/
public function send_group_text($authorhash, $cousereid, $assignmentid, $submissionid, $attachmentid, $content, $mime,
$filename) {
@ -88,6 +121,18 @@ class plagiarism_pchkorg_api_provider {
return $id;
}
/**
* @param $boundary
* @param $authorhash
* @param $cousereid
* @param $assignmentid
* @param $submissionid
* @param $attachmentid
* @param $content
* @param $mime
* @param $filename
* @return string
*/
private function get_body_for_group($boundary,
$authorhash,
$cousereid,
@ -114,6 +159,12 @@ class plagiarism_pchkorg_api_provider {
return $body;
}
/**
* @param $content
* @param $mime
* @param $filename
* @return |null
*/
public function send_text($content, $mime, $filename) {
$boundary = sprintf('PLAGCHECKBOUNDARY-%s', uniqid(time()));
@ -147,6 +198,12 @@ class plagiarism_pchkorg_api_provider {
return $id;
}
/**
* @param $name
* @param $value
* @param $boundary
* @return string
*/
private function get_part($name, $value, $boundary) {
$eol = "\r\n";
@ -157,6 +214,14 @@ class plagiarism_pchkorg_api_provider {
return $part;
}
/**
* @param $name
* @param $value
* @param $mime
* @param $filename
* @param $boundary
* @return string
*/
private function get_file_part($name, $value, $mime, $filename, $boundary) {
$eol = "\r\n";
@ -169,6 +234,13 @@ class plagiarism_pchkorg_api_provider {
return $part;
}
/**
* @param $boundary
* @param $content
* @param $mime
* @param $filename
* @return string
*/
private function get_body($boundary, $content, $mime, $filename) {
$eol = "\r\n";
@ -180,14 +252,25 @@ class plagiarism_pchkorg_api_provider {
return $body;
}
/**
* @param $email
* @return string
*/
public function user_email_to_hash($email) {
return hash('sha256', $this->token . $email);
}
/**
* @return bool
*/
public function is_group_token() {
return 'G-' === \substr($this->token, 0, 2);
}
/**
* @param string $email
* @return bool
*/
public function is_group_member($email = '') {
if (!$this->is_group_token()) {
return true;
@ -213,6 +296,10 @@ class plagiarism_pchkorg_api_provider {
return false;
}
/**
* @param $textid
* @return |null
*/
public function check_text($textid) {
$curl = new curl();
$response = $curl->get($this->endpoint . '/api/v1/text/' . $textid, array(), array(
@ -235,10 +322,17 @@ class plagiarism_pchkorg_api_provider {
return null;
}
/**
* @param $id
* @return string
*/
public function get_report_action($id) {
return "{$this->endpoint}/lms/public-report/{$id}/";
}
/**
* @return string
*/
public function generate_api_token() {
global $USER;
@ -249,6 +343,10 @@ class plagiarism_pchkorg_api_provider {
return $this->token;
}
/**
* @param $mime
* @return bool
*/
public function is_supported_mime($mime) {
return in_array($mime, array(
'application/msword',

View File

@ -14,21 +14,47 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* @package plagiarism_pchkorg
* @category plagiarism
* @copyright PlagiarismCheck.org, https://plagiarismcheck.org/
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* Class plagiarism_pchkorg_config_model
*/
class plagiarism_pchkorg_config_model {
/**
* @var
*/
private $db;
/**
* plagiarism_pchkorg_config_model constructor.
*
* @param $DB
*/
public function __construct($DB) {
$this->db = $DB;
}
/**
* @param $module
* @return mixed
*/
public function fetch_by_module($module) {
return $this->db->get_records('plagiarism_pchkorg_config', array(
'cm' => $module,
));
}
/**
* @param $module
* @return bool
*/
public function is_enabled_for_module($module) {
$configs = $this->fetch_by_module($module);
$enabled = false;
@ -45,6 +71,10 @@ class plagiarism_pchkorg_config_model {
return $enabled;
}
/**
* @param $name
* @param $value
*/
public function set_system_config($name, $value) {
$this->db->delete_records('plagiarism_pchkorg_config', array(
'cm' => 0,
@ -59,6 +89,10 @@ class plagiarism_pchkorg_config_model {
$this->db->insert_record('plagiarism_pchkorg_config', $record);
}
/**
* @param $name
* @return |null
*/
public function get_system_config($name) {
$records = $this->db->get_records('plagiarism_pchkorg_config', array(
'cm' => 0,
@ -72,6 +106,9 @@ class plagiarism_pchkorg_config_model {
return null;
}
/**
* @return array
*/
public function get_all_system_config() {
$records = $this->db->get_records('plagiarism_pchkorg_config', array(
'cm' => 0,

View File

@ -1,21 +0,0 @@
<?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/>.
defined('MOODLE_INTERNAL') || die();
class plagiarism_pchkorg_file_loader {
}

View File

@ -14,9 +14,25 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* @package plagiarism_pchkorg
* @category plagiarism
* @copyright PlagiarismCheck.org, https://plagiarismcheck.org/
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* Class plagiarism_pchkorg_url_generator
*/
class plagiarism_pchkorg_url_generator {
/**
* @param $cmid
* @param $fileid
* @return moodle_url
* @throws moodle_exception
*/
public function get_check_url($cmid, $fileid) {
return new moodle_url(sprintf(
'/plagiarism/pchkorg/page/report.php?cmid=%s&file=%s',
@ -26,6 +42,10 @@ class plagiarism_pchkorg_url_generator {
);
}
/**
* @return moodle_url
* @throws moodle_exception
*/
public function get_status_url() {
return new moodle_url('/plagiarism/pchkorg/page/status.php');
}

View File

@ -14,12 +14,24 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* @package plagiarism_pchkorg
* @category plagiarism
* @copyright PlagiarismCheck.org, https://plagiarismcheck.org/
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace plagiarism_pchkorg\privacy;
defined('MOODLE_INTERNAL') || die();
use core_privacy\local\metadata\collection;
/**
* Class provider
*
* @package plagiarism_pchkorg\privacy
*/
class provider implements
\core_privacy\local\metadata\provider,
\core_privacy\local\request\plugin\provider {
@ -27,6 +39,10 @@ class provider implements
// This trait must be included.
use \core_privacy\local\legacy_polyfill;
/**
* @param collection $collection
* @return collection
*/
public static function _get_metadata(collection $collection) {
$collection->add_subsystem_link(

View File

@ -1,32 +0,0 @@
<?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/>.
if (!defined('MOODLE_INTERNAL')) {
die('Direct access to this script is forbidden.');
}
$capabilities = array(
'plagiarism/pchkorg:check' => array(
'riskbitmask' => RISK_PERSONAL,
'captype' => 'write',
'contextlevel' => CONTEXT_MODULE,
'archetypes' => array(
'editingteacher' => CAP_ALLOW,
'teacher' => CAP_ALLOW,
'manager' => CAP_ALLOW,
),
),
);

View File

@ -14,6 +14,13 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* @package plagiarism_pchkorg
* @category plagiarism
* @copyright PlagiarismCheck.org, https://plagiarismcheck.org/
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
function xmldb_plagiarism_pchkorg_install() {

View File

@ -14,10 +14,23 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* @package plagiarism_pchkorg
* @category plagiarism
* @copyright PlagiarismCheck.org, https://plagiarismcheck.org/
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* Class plagiarism_pchkorg_setup_form
*/
class plagiarism_pchkorg_setup_form extends moodleform {
/**
* @throws coding_exception
*/
public function definition() {
$mform = &$this->_form;
@ -42,6 +55,12 @@ class plagiarism_pchkorg_setup_form extends moodleform {
$this->add_action_buttons(true);
}
/**
* @param $message
* @param null $param
* @return string
* @throws coding_exception
*/
public static function trans($message, $param = null) {
return get_string($message, 'plagiarism_pchkorg', $param);
}

View File

@ -14,12 +14,25 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* @package plagiarism_pchkorg
* @category plagiarism
* @copyright PlagiarismCheck.org, https://plagiarismcheck.org/
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
require_once($CFG->libdir . '/formslib.php');
/**
* Class send_text_form
*/
class send_text_form extends moodleform {
// Add elements to form.
/**
* @throws coding_exception
*/
public function definition() {
$mform = $this->_form; // Don't forget the underscore!
@ -29,6 +42,5 @@ class send_text_form extends moodleform {
$mform->setType('cmid', PARAM_INT);
$this->add_action_buttons(false, get_string('pchkorg_submit', 'plagiarism_pchkorg'));
}
}

36
lib.php
View File

@ -14,6 +14,13 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* @package plagiarism_pchkorg
* @category plagiarism
* @copyright PlagiarismCheck.org, https://plagiarismcheck.org/
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
global $CFG;
@ -25,6 +32,9 @@ require_once(__DIR__ . '/classes/plagiarism_pchkorg_config_model.php');
require_once(__DIR__ . '/classes/plagiarism_pchkorg_url_generator.php');
require_once(__DIR__ . '/classes/plagiarism_pchkorg_api_provider.php');
/**
* Class plagiarism_plugin_pchkorg
*/
class plagiarism_plugin_pchkorg extends plagiarism_plugin {
/**
* hook to allow plagiarism specific information to be displayed beside a submission
@ -46,6 +56,10 @@ class plagiarism_plugin_pchkorg extends plagiarism_plugin {
$cmid = $linkarray['cmid'];
$file = $linkarray['file'];
$context = null;
if (!empty($cmid)) {
$context = context_module::instance($cmid);// Get context of course.
}
if (!$pchkorgconfigmodel->is_enabled_for_module($cmid)) {
return '';
@ -59,6 +73,11 @@ class plagiarism_plugin_pchkorg extends plagiarism_plugin {
return '';
}
$isgranted = !empty($context) && has_capability('mod/assign:view', $context, null);
if (!$isgranted) {
return '';
}
$where = new \stdClass();
$where->cm = $cmid;
$where->fileid = $file->get_id();
@ -81,6 +100,10 @@ class plagiarism_plugin_pchkorg extends plagiarism_plugin {
/* hook to save plagiarism specific settings on a module settings page
* @param object $data - data from an mform submission.
*/
/**
* @param $data
* @throws dml_exception
*/
public function save_form_elements($data) {
global $DB;
@ -113,6 +136,13 @@ class plagiarism_plugin_pchkorg extends plagiarism_plugin {
}
}
/**
* @param object $mform
* @param object $context
* @param string $modulename
* @throws coding_exception
* @throws dml_exception
*/
public function get_form_elements_module($mform, $context, $modulename = '') {
if (!$context || !isset($modulename)) {
return;
@ -174,6 +204,12 @@ class plagiarism_plugin_pchkorg extends plagiarism_plugin {
echo $OUTPUT->box_end();
}
/**
* @param $message
* @param null $param
* @return string
* @throws coding_exception
*/
public static function trans($message, $param = null) {
return get_string($message, 'plagiarism_pchkorg', $param);
}

View File

@ -14,6 +14,13 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* @package plagiarism_pchkorg
* @category plagiarism
* @copyright PlagiarismCheck.org, https://plagiarismcheck.org/
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once(__DIR__ . '/../../../config.php');
require_once(__DIR__ . '/../lib.php');
require_once(__DIR__ . '/../form/send_text_form.php');
@ -37,7 +44,7 @@ $cm = get_coursemodule_from_id('', $cmid);
require_login($cm->course, true, $cm);
$context = context_module::instance($cm->id);
header('Content-Type: application/json');
$isgranted = is_viewing($context, null, 'plagiarism/pchkorg:check');
$isgranted = has_capability('mod/assign:view', $context, null);
if (!$isgranted) {
die('{error: "access denied"}');
}

View File

@ -14,6 +14,13 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* @package plagiarism_pchkorg
* @category plagiarism
* @copyright PlagiarismCheck.org, https://plagiarismcheck.org/
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once(__DIR__ . '/../../../config.php');
require_once(__DIR__ . '/../lib.php');
require_once(__DIR__ . '/../form/send_text_form.php');
@ -36,7 +43,8 @@ $cm = get_coursemodule_from_id('', $cmid, 0, false, MUST_EXIST);
require_login($cm->course, true, $cm);
$context = context_module::instance($cm->id);// Get context of course.
$isgranted = is_viewing($context, null, 'plagiarism/pchkorg:check');
$isgranted = has_capability('mod/assign:view', $context, null);
if (!$isgranted) {
die('403 permission denied');
}

View File

@ -13,10 +13,11 @@
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* pl * plagiarism.php - allows the admin to configure plagiarism stuff
*
* @package plagiarism_pchkorg
* @category plagiarism
* @copyright PlagiarismCheck.org, https://plagiarismcheck.org/
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

View File

@ -26,9 +26,9 @@ defined('MOODLE_INTERNAL') || die();
if (!isset($plugin)) {
$plugin = new stdClass();
}
$plugin->version = 2019020501;
$plugin->version = 2019020601;
$plugin->requires = 2017051501; // Requires Moodle 3.3 .
$plugin->release = 'v2.2';
$plugin->release = 'v2.3';
$plugin->maturity = MATURITY_STABLE;
$plugin->component = 'plagiarism_pchkorg';

View File

@ -14,6 +14,13 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* @package plagiarism_pchkorg
* @category plagiarism
* @copyright PlagiarismCheck.org, https://plagiarismcheck.org/
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
$ajaxurl = new moodle_url('/plagiarism/pchkorg/page/check.php');

View File

@ -14,6 +14,13 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* @package plagiarism_pchkorg
* @category plagiarism
* @copyright PlagiarismCheck.org, https://plagiarismcheck.org/
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
if (empty($error)) {

View File

@ -14,6 +14,13 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* @package plagiarism_pchkorg
* @category plagiarism
* @copyright PlagiarismCheck.org, https://plagiarismcheck.org/
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
echo $OUTPUT->header();