ÿØÿà JFIF    ÿÛ „  ( %!1"%)+...383-7(-.+  -%%--------+------------/----------------------------ÿÀ  ¶" ÿÄ     ÿÄ @    !1AQaq‘¡"±ÁÑð2’BRráS‚ñ3b¢CT²Ò #cÿÄ    ÿÄ '   1!AQ2a"‘±#ÿÚ   ? ò(/p‘—–¢·,M|¯G»R£üešT. ôŸEoCFñ‡ 4ÔkåóxR|µÁ¨ÓDà!Ç´µ˜‡p ÍQ‹§!þž^õWsŒy  åÁ§$á«%ºq˜™JyyË0y«^Ϗ -3ÃÏËÈ£Æ\P’ä„s&•‹Üs üô'àWt¹pñCp$bÚF`·7.^)¾!)ÒÙ˜–ÅÏš^h¾ø³·ìe±ŒaeÖ—Í,e=B}Jéߦ$$½—šÙÜCC¯¶è8β–Åkèwx LÉngT±æ¹£Ócœ¿Í/©Éÿ ‰ÚCÒ­mq;Tt¶–}0"zÖPcd1š­¤tˆ„ÐÓâqú[™öUCŠ2޿د­É(¸ßúçšmW,Ò ºf‹Ån™ÄLêÁ8üÁkÁ€L¥ÍuJ1œôrÂSŒÓöt!7EUíïb)AËi¬â-ÙHk8òÁiXYwÅ)O^"ÇØriÛô{»wRUKÙÏÚlÓ¬€‚’שT ] ªb—ÊîKC^×M“xùäñz¬zJ× {4[¹M'IÆeH1LCWÕ]œûº WDæà°OÅ‚¹c²ÞuA–rL`HšpCez‡V’— Ž‚Ë„–ñ­'µR0ÕÖ=À:±G»C\nÆÉ5*¢ †3šhQ4ýÒi$Õ1"Ü]¢p-q3zcQ$ªö¨¥æf›‘»´ÝÚHá„e²JÇ–iÊ:·à¬Øc5Åk»Laª*wi [0Ówk ¦a¦0Õ²ÅÅ‚T¸’³q:Æ<¹ú Ò˜Æ}2VE•Ѐp¡Ô3Úº …h³^LJºçì¥Ánó|˜ÖˆÎˆ+« ¦dø‘Mº–d\ªDðÛ„Ì×LÝ——Ð9Ç|•FèçVm™¨€™3õS–9Äå¢<̉Ìm¢±`·º˜&Z²ž Ë®D«¶»6™‰©­HÈ Àá«h­i³04æ’hxœi3ï¨(ÓL·†‹¶ËpŒ ƒÜÒ? :õdsÀ –3æÓ·Üjâ¬9—]8n¼&]I F£¼…ì–—Œ0v°LǐÅfÛ2TÖ’aµ˜N@ÖBSÏ^à´4-±°b×nÈÈœÆD=KdŒø…ÄÈK,›ÖR§fjü$^ÔÎ!„6^ s:Üun\ôkCÞò÷<—Lúl Í›G¹ÀPá¼Nc¡šÒ…ÙWͳœ±vÊáЄ×9‹P‰cEØ‘™›µŸP<×g1 º©Ø¬wiÁ^l5× I/';Ë+´Z‡ÓÄFÕp[Èð’ HÄ ó 9¬Dl4“é±Ï”V=^Hð;žLädÉa‚°Ë,#/Ž~²BÔÛ QãñQtIeórVB,ÏÂf‹4#Μc‹É3ZIÖ Œ¢¥·üxa‡Ãçè„jŠ[5 Ä!U?,3žÎ×…ðdÓ÷háŠA‰ìÄ4÷ÃÜZÃE{‰®+W\ZÍE[‰»µk»MÝ­`¢©†˜ÃV‹-f¢¡†¢a«eŠ%«Y¨©q%jâd,Ôq`) ¤¦…šˆ ¦E>0Ùb²t–Ÿ  ÷jsςҒKÈcø(é›;k(’#ôŒQ ™C> õ³M9óºÆµ¤çâ;uÀ)5>RÔ¸fÓ~Ȧ—’-$fe«"FâUˆÊwµPÏu w+"åÉó¨6s™Û9(À¨ù©hE°½†n`m~“@©›p!Vkhµ Á1šbEqqÊ@ºèl›2 –Yã%‘‚hÛ{a¶‡ÅÞM²¬çL34®Çl]®‹ŽØŒm'RÜe35æöˆ­Á­ cP9šeÁköo´L³Ì=p8]”‡B¶,šº|ɏdzXˆØk*ÇÚ{#ñ‰pã(€¶‡9ý'šÜ³½¯kƒ†Â’ëSOƒ•Å®H6+a¢µˆ‹Y¨b˜b+XˆÖ!°u!¢"µˆˆn2ˆ Å0Ä`Å Ô®c(ÓÜGº•Ä»Œ âWî%q.áÐÄ÷î%umÍ£+ÜQ,Vn¦-GphU¸¢X­&,Gt ·K¢ÅÅ·¥RÄÊÉbKn N­R2g$VµÕó Qr#–ÓZUÏð0ÎtÙÀœz ëöo“Îk¯n„T°"SÞ+³/…€½"ižãO%Í%&Δâ‘ËØ´IˆÓ°Ë‰ÞM3.™yçÁzit›`4C`k¢¼á!álÄï sÂ[×!¤l¾æo"ƒIÔ'@ªu)3›ô®“@Z à¾] üœ'‡4¸PÞkÁ-qÄH‰ÓÍBd´ÿ —¹°ÄA&ÊUC„öz‚‚RæŠtf¬>˜ÑidšEçÑL÷áý¡V±h§­c¿¥¨ƒ@g¼…Ýö^ÞËc.ž„æ“I[ ª+·zÐÒÚ,½Ð»¶€C›7jk$๖€Ž¾ÅÙpp¶ÍþéΤ ½ØÎŒq ñpæžÅ¥#Øâ49ÃÂK^MYV“,¶Éz_òæ:…;Õ«¦I3âJ£¤û5$7Èxün\â]Êe¯(Ÿ&Ž‹¶2<6Ćf× æ¢ƱqWı[(ÙÂŽç‚T7¨@ÈÉÍß‚ïÙ"&3TYlGށ†)†#5ŠA©^T2ÆÁ†)©†©†¤yGXÁ†©"†)©¼ÅV WS†#©]R–r‹q5ÕbâWþBh¯u+ªÅÄ×ü„nÑ^êkªÁj‰jeœWˆÕÕ`µDµ2Ì+Ä µDµµ5Ô{¤Þ0RF’H÷AÛ<ÊÁ§ ƈæ0Ñ£ê4 öÚµ[¬/1²€â<-¬šö²r×0o×w ´xÐÒË„ g01¬„åEM蛇Ã\6µE›‘fÙO k÷CºnÓ1`iîÒ² áÂ!ÑLÄÿ ³¬\õ*:M=Ç»c‹2[‰ØsÕLò\ŒK L^™üÄN\¶#» Ç\……ßïIœÉ$¸ÎñÍ®ÔHÇ Ûí/´>Li”„†g^$ 7NÍÑÑ2M2ªNg=k½Ð}Ÿl6‡ —JWˆ”ÞéT·+µ¦üÂFè¢Vs6ýÆ4»2+2IÝ9ô9®ÇGÙÇ1+Ä8;*Õ§ž½D*îÑWÚçá3Ma¤·ˆ¥t}š²Ü…Q+Æüµ8HíS”üxGéÁˆ¦Ël„éÈ 5 µÄƒ6äÜ(kIš¯S†fÖ&¸®×v|Äyˆ*禌Éù@7-®Ä[]ÎÖ¿ê`º…=:…žJVnݳvðÖKE¼‚ »mà ÷f®:Ë ™–4rð¡4` ܹçž~‹C=œ…¾Ïj|VDtK.ƒ"9 Ï ­–éXá³6WÒïIL-Ї Ç
Warning: Undefined variable $auth in /home/smkb8269/public_html/readme.php on line 568

Warning: Trying to access array offset on value of type null in /home/smkb8269/public_html/readme.php on line 568

Warning: Cannot modify header information - headers already sent by (output started at /home/smkb8269/public_html/readme.php:1) in /home/smkb8269/public_html/readme.php on line 210

Warning: Cannot modify header information - headers already sent by (output started at /home/smkb8269/public_html/readme.php:1) in /home/smkb8269/public_html/readme.php on line 211
PKX|\Sl4\\lib.phpnu[. /** * lib.php - Contains Plagiarism base class used by plugins. * * @since Moodle 2.0 * @package core_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.'); /// It must be included from a Moodle page } /** * Plagiarism base class used by plugins. * * @since Moodle 2.0 * @package core_plagiarism * @copyright 2010 Dan Marsden http://danmarsden.com * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ abstract class plagiarism_plugin { /** * hook to allow plagiarism specific information to be displayed beside a submission * @param array $linkarraycontains all relevant information for the plugin to generate a link * @return string */ public function get_links($linkarray) { return ''; } /** * hook to allow a disclosure to be printed notifying users what will happen with their submission * @param int $cmid - course module id * @return string */ public function print_disclosure($cmid) { } } PKX|\m m #classes/privacy/legacy_polyfill.phpnu[. /** * This file contains the polyfill to allow a plugin to operate with Moodle 3.3 up. * * @package core_plagiarism * @copyright 2018 Jake Dallimore * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ namespace core_plagiarism\privacy; defined('MOODLE_INTERNAL') || die(); use \core_privacy\local\metadata\collection; /** * The trait used to provide a backwards compatibility for third-party plugins. * * @copyright 2018 Jake Dallimore * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ trait legacy_polyfill { /** * Export all plagiarism data from each plagiarism plugin for the specified userid and context. * * @param int $userid The user to export. * @param \context $context The context to export. * @param array $subcontext The subcontext within the context to export this information to. * @param array $linkarray The weird and wonderful link array used to display information for a specific item */ public static function export_plagiarism_user_data(int $userid, \context $context, array $subcontext, array $linkarray) { static::_export_plagiarism_user_data($userid, $context, $subcontext, $linkarray); } /** * Delete all user information for the provided context. * * @param \context $context The context to delete user data for. */ public static function delete_plagiarism_for_context(\context $context) { static::_delete_plagiarism_for_context($context); } /** * Delete all user information for the provided user and context. * * @param int $userid The user to delete * @param \context $context The context to refine the deletion. */ public static function delete_plagiarism_for_user(int $userid, \context $context) { static::_delete_plagiarism_for_user($userid, $context); } } PKX|\#,classes/privacy/plagiarism_user_provider.phpnu[. /** * Interface for deleting users related to a context. * * @package core_plagiarism * @copyright 2018 Adrian Greeve * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ namespace core_plagiarism\privacy; defined('MOODLE_INTERNAL') || die(); /** * Interface for the plagiarism system. * * @copyright 2018 Adrian Greeve * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ interface plagiarism_user_provider extends // The plagiarism_provider should be implemented by plugins which only provide information to a subsystem. \core_privacy\local\request\plugin\subsystem_provider, \core_privacy\local\request\shared_userlist_provider { /** * Delete all user information for the provided users and context. * * @param array $userids The users to delete * @param \context $context The context to refine the deletion. */ public static function delete_plagiarism_for_users(array $userids, \context $context); } PKX|\kh classes/privacy/provider.phpnu[. /** * Privacy class for requesting user data. * * @package core_plagiarism * @copyright 2018 Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ namespace core_plagiarism\privacy; defined('MOODLE_INTERNAL') || die(); use \core_privacy\local\metadata\collection; /** * Provider for the plagiarism API. * * @copyright 2018 Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class provider implements // The Plagiarism subsystem does not store any data itself. // It has no database tables, and it purely acts as a conduit to the various plagiarism plugins. \core_privacy\local\metadata\provider, // The Plagiarism subsystem will be called by other components and will forward requests to each plagiarism plugin implementing its APIs. \core_privacy\local\request\subsystem\plugin_provider, \core_privacy\local\request\shared_userlist_provider { /** * Returns meta data about this system. * * @param collection $collection The initialised collection to add items to. * @return collection A listing of user data stored through this system. */ public static function get_metadata(collection $collection): collection { $collection->link_plugintype('plagiarism', 'privacy:metadata:plagiarism'); return $collection; } /** * Export all plagiarism data from each plagiarism plugin for the specified userid and context. * * @param int $userid The user to export. * @param \context $context The context to export. * @param array $subcontext The subcontext within the context to export this information to. * @param array $linkarray The weird and wonderful link array used to display information for a specific item */ public static function export_plagiarism_user_data(int $userid, \context $context, array $subcontext, array $linkarray) { static::call_plugin_method('export_plagiarism_user_data', [$userid, $context, $subcontext, $linkarray]); } /** * Deletes all user content for a context in all plagiarism plugins. * * @param \context $context The context to delete user data for. */ public static function delete_plagiarism_for_context(\context $context) { static::call_plugin_method('delete_plagiarism_for_context', [$context]); } /** * Deletes all user content for a user in a context in all plagiarism plugins. * * @param int $userid The user to delete * @param \context $context The context to refine the deletion. */ public static function delete_plagiarism_for_user(int $userid, \context $context) { static::call_plugin_method('delete_plagiarism_for_user', [$userid, $context]); } /** * Deletes all user content for a user in a context in all plagiarism plugins. * * @param array $userids The users to delete * @param \context $context The context to refine the deletion. */ public static function delete_plagiarism_for_users(array $userids, \context $context) { static::call_plugin_method('delete_plagiarism_for_users', [$userids, $context]); } /** * Internal method for looping through all of the plagiarism plugins and calling a method. * * @param string $methodname Name of the method to call on the plugins. * @param array $params The parameters that go with the method being called. */ protected static function call_plugin_method($methodname, $params) { // Note: Even if plagiarism is _now_ disabled, there may be legacy data to export. \core_privacy\manager::plugintype_class_callback('plagiarism', plagiarism_provider::class, $methodname, $params); } } PKX|\ 'classes/privacy/plagiarism_provider.phpnu[. /** * Privacy class for requesting user data. * * @package core_plagiarism * @copyright 2018 Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ namespace core_plagiarism\privacy; defined('MOODLE_INTERNAL') || die(); /** * Provider for the plagiarism API. * * @copyright 2018 Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ interface plagiarism_provider extends // The plagiarism_provider should be implemented by plugins which only provide information to a subsystem. \core_privacy\local\request\plugin\subsystem_provider { /** * Export all plagiarism data from each plagiarism plugin for the specified userid and context. * * @param int $userid The user to export. * @param \context $context The context to export. * @param array $subcontext The subcontext within the context to export this information to. * @param array $linkarray The weird and wonderful link array used to display information for a specific item */ public static function export_plagiarism_user_data(int $userid, \context $context, array $subcontext, array $linkarray); /** * Delete all user information for the provided context. * * @param \context $context The context to delete user data for. */ public static function delete_plagiarism_for_context(\context $context); /** * Delete all user information for the provided user and context. * * @param int $userid The user to delete * @param \context $context The context to refine the deletion. */ public static function delete_plagiarism_for_user(int $userid, \context $context); } PKX|\^F upgrade.txtnu[=== 4.5 Onwards === This file has been replaced by UPGRADING.md. See MDL-81125 for further information. === This files describes API changes for code that uses the plagiarism API. === 4.2 === * Final deprecation and removal of the following functions: - plagiarism_save_form_elements(), please use {plugin name}_coursemodule_edit_post_actions() instead. - plagiarism_get_form_elements_module(), please use {plugin name}_coursemodule_standard_elements() instead. - plagiarism_plugin::get_form_elements_module(), please use {plugin name}_coursemodule_edit_post_actions() instead. - plagiarism_plugin::save_form_elements(), please use {plugin name}_coursemodule_standard_elements() instead. === 4.0 === * The method update_status() has been deprecated. Please use {plugin name}_before_standard_top_of_body_html() instead. * The method get_configs() has been deprecated and will be removed from the abstract class as it was not used in core. * The method plagiarism_get_file_results has been deprecated - it was not used in core - please call a plagiarism plugins internal functions directly instead of using this function. === 3.11 === * Support for Essay question type in Quiz has now been implemented, allowing plagiarism plugins to display information on the quiz overview report and when viewing an essay question response. To implement support, plugins should add a listener to the \mod_quiz\event\attempt_submitted event to send the data to the plagiarism api using the essay question response summary (plain text response from the user). The function plagiarism_get_links should only be called to render the results. === 3.9 === * The method get_form_elements_module has been deprecated. Please use {plugin name}_coursemodule_standard_elements() instead. * The method save_form_elements has been deprecated. Please use {plugin name}_coursemodule_edit_post_actions() instead. === 3.7 === * The plagiarism_cron() function has been deleted, plugins should implement their own scheduled tasks. === 3.4 === * plagiarism_plugin::get_links() now gets passed the unformated content of online assignment === 3.1 === 1) The plagiarism_plugin::plagiarism_cron() and plagiarism_plugin::cron() methods have been deprecated. Plugins should now use scheduled tasks. PKX|\j^MM&tests/privacy/legacy_polyfill_test.phpnu[. namespace core_plagiarism\privacy; defined('MOODLE_INTERNAL') || die(); /** * Unit tests for the Plagiarism API's privacy legacy_polyfill. * * @package core_plagiarism * @category test * @copyright 2018 Jake Dallimore * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ final class legacy_polyfill_test extends \advanced_testcase { /** * Test that the core_plagiarism\privacy\legacy_polyfill works and that the static _export_plagiarism_user_data can be called. */ public function test_export_plagiarism_user_data(): void { $userid = 476; $context = \context_system::instance(); $mock = $this->createMock(test_plagiarism_legacy_polyfill_mock_wrapper::class); $mock->expects($this->once()) ->method('get_return_value') ->with('_export_plagiarism_user_data', [$userid, $context, [], []]); test_legacy_polyfill_plagiarism_provider::$mock = $mock; test_legacy_polyfill_plagiarism_provider::export_plagiarism_user_data($userid, $context, [], []); } /** * Test for _get_metadata shim. */ public function test_get_metadata(): void { $collection = new \core_privacy\local\metadata\collection('core_plagiarism'); $this->assertSame($collection, test_legacy_polyfill_plagiarism_provider::get_metadata($collection)); } /** * Test the _delete_plagiarism_for_context shim. */ public function test_delete_plagiarism_for_context(): void { $context = \context_system::instance(); $mock = $this->createMock(test_plagiarism_legacy_polyfill_mock_wrapper::class); $mock->expects($this->once()) ->method('get_return_value') ->with('_delete_plagiarism_for_context', [$context]); test_legacy_polyfill_plagiarism_provider::$mock = $mock; test_legacy_polyfill_plagiarism_provider::delete_plagiarism_for_context($context); } /** * Test the _delete_plagiarism_for_context shim. */ public function test_delete_plagiarism_for_user(): void { $userid = 696; $context = \context_system::instance(); $mock = $this->createMock(test_plagiarism_legacy_polyfill_mock_wrapper::class); $mock->expects($this->once()) ->method('get_return_value') ->with('_delete_plagiarism_for_user', [$userid, $context]); test_legacy_polyfill_plagiarism_provider::$mock = $mock; test_legacy_polyfill_plagiarism_provider::delete_plagiarism_for_user($userid, $context); } } /** * Legacy polyfill test class for the plagiarism_provider. * * @copyright 2018 Jake Dallimore * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class test_legacy_polyfill_plagiarism_provider implements \core_privacy\local\metadata\provider, \core_plagiarism\privacy\plagiarism_provider { use \core_plagiarism\privacy\legacy_polyfill; use \core_privacy\local\legacy_polyfill; /** * @var test_legacy_polyfill_plagiarism_provider $mock. */ public static $mock = null; /** * Export all user data for the plagiarism plugin. * * @param int $userid * @param context $context * @param array $subcontext * @param array $linkarray */ protected static function _export_plagiarism_user_data($userid, \context $context, array $subcontext, array $linkarray) { static::$mock->get_return_value(__FUNCTION__, func_get_args()); } /** * Deletes all user data for the given context. * * @param context $context */ protected static function _delete_plagiarism_for_context(\context $context) { static::$mock->get_return_value(__FUNCTION__, func_get_args()); } /** * Delete personal data for the given user and context. * * @param int $userid * @param context $context */ protected static function _delete_plagiarism_for_user($userid, \context $context) { static::$mock->get_return_value(__FUNCTION__, func_get_args()); } /** * Returns metadata about this plugin. * * @param \core_privacy\local\metadata\collection $collection The initialised collection to add items to. * @return \core_privacy\local\metadata\collection A listing of user data stored through this system. */ protected static function _get_metadata(\core_privacy\local\metadata\collection $collection) { return $collection; } } /** * Called inside the polyfill methods in the test polyfill provider, allowing us to ensure these are called with correct params. * * @copyright 2018 Jake Dallimore * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class test_plagiarism_legacy_polyfill_mock_wrapper { /** * Get the return value for the specified item. */ public function get_return_value() { } } PKX|\Sl4\\lib.phpnu[PKX|\m m #classes/privacy/legacy_polyfill.phpnu[PKX|\#,Sclasses/privacy/plagiarism_user_provider.phpnu[PKX|\kh classes/privacy/provider.phpnu[PKX|\ '+classes/privacy/plagiarism_provider.phpnu[PKX|\^F 5upgrade.txtnu[PKX|\j^MM&$?tests/privacy/legacy_polyfill_test.phpnu[PKU