/**
  * Observer function to handle the assessable_uploaded event in mod_forum.
  * @param \mod_forum\event\assessable_uploaded $event
  */
 public static function forum_file_uploaded(\mod_forum\event\assessable_uploaded $event)
 {
     global $CFG;
     require_once $CFG->dirroot . '/plagiarism/urkund/lib.php';
     $eventdata = $event->get_data();
     $eventdata['eventtype'] = 'forum_file_uploaded';
     $urkund = new plagiarism_plugin_urkund();
     $urkund->event_handler($eventdata);
 }
Exemplo n.º 2
0
/**
 * Sends post content to plagiarism plugin
 * @param object $post Forum post object
 * @param object $cm Course-module
 * @param string $name
 * @return bool
*/
function forum_trigger_content_uploaded_event($post, $cm, $name)
{
    $context = context_module::instance($cm->id);
    $fs = get_file_storage();
    $files = $fs->get_area_files($context->id, 'mod_forum', 'attachment', $post->id, "timemodified", false);
    $params = array('context' => $context, 'objectid' => $post->id, 'other' => array('content' => $post->message, 'pathnamehashes' => array_keys($files), 'discussionid' => $post->discussion, 'triggeredfrom' => $name));
    $event = \mod_forum\event\assessable_uploaded::create($params);
    $event->trigger();
    return true;
}
 public function create_file_event($params)
 {
     return \mod_forum\event\assessable_uploaded::create($params);
 }
    /**
     * Get all relevant submission data to requeue submission for the cron to process.
     */
    public function recreate_submission_event()
    {
        global $DB, $CFG;
        // Create module object.
        $moduleclass = "turnitin_" . $this->cm->modname;
        $moduleobject = new $moduleclass();
        // Some data depends on submission type.
        switch ($this->submissiondata->submissiontype) {
            case 'file':
                $file = $this->get_file_info();
                // Collate data and trigger new event for the cron to process.
                if ($CFG->branch >= 26) {
                    $params = array('context' => context_module::instance($this->cm->id), 'courseid' => $this->cm->course, 'objectid' => $file->get_itemid(), 'userid' => $this->submissiondata->userid, 'other' => array('content' => '', 'pathnamehashes' => array($this->submissiondata->identifier)));
                    // Forum attachments need the discussion id to be set.
                    if ($this->cm->modname == "forum") {
                        $discussionid = $moduleobject->get_discussionid($this->data['forumdata']);
                        $params['other']['discussionid'] = $discussionid;
                        $params['other']['triggeredfrom'] = 'turnitin_recreate_submission_event';
                    }
                    $event = $moduleobject->create_file_event($params);
                    if ($this->cm->modname != "forum") {
                        $event->set_legacy_files(array($this->submissiondata->identifier => $file));
                    }
                    $event->trigger();
                } else {
                    $eventdata = new stdClass();
                    $eventdata->modulename = $this->cm->modname;
                    $eventdata->cmid = $this->cm->id;
                    $eventdata->courseid = $this->cm->course;
                    $eventdata->itemid = $file->get_itemid();
                    $eventdata->userid = $this->submissiondata->userid;
                    $eventdata->pathnamehashes = array($this->submissiondata->identifier);
                    events_trigger('assessable_file_uploaded', $eventdata);
                }
                break;
            case 'text_content':
                // Get the actual text content.
                $onlinetextdata = $moduleobject->get_onlinetext($this->submissiondata->userid, $this->cm);
                // Collate data and trigger new event for the cron to process.
                if ($CFG->branch >= 26) {
                    $params = array('context' => context_module::instance($this->cm->id), 'courseid' => $this->cm->course, 'objectid' => $onlinetextdata->itemid, 'userid' => $this->submissiondata->userid, 'other' => array('pathnamehashes' => array(), 'content' => trim($onlinetextdata->onlinetext), 'format' => $onlinetextdata->onlineformat));
                    $event = $moduleobject->create_text_event($params, $this->cm);
                    $event->trigger();
                } else {
                    $eventdata = new stdClass();
                    $eventdata->modulename = $this->cm->modname;
                    $eventdata->cmid = $this->cm->id;
                    $eventdata->courseid = $this->cm->course;
                    $eventdata->itemid = $onlinetextdata->itemid;
                    $eventdata->userid = $this->submissiondata->userid;
                    $eventdata->content = trim($onlinetextdata->onlinetext);
                    events_trigger('assessable_content_uploaded', $eventdata);
                }
                break;
            case 'forum_post':
                $discussionid = $moduleobject->get_discussionid($this->data['forumdata']);
                $forum = $DB->get_record("forum", array("id" => $this->cm->instance));
                // Some forum types don't pass in certain values on main forum page.
                if ((empty($discussionid) || $querystrid != 0) && ($forum->type == 'blog' || $forum->type == 'single')) {
                    $discussion = $DB->get_record_sql('SELECT FD.id
				                                                FROM {forum_posts} FP JOIN {forum_discussions} FD
				                                                ON FP.discussion = FD.id
				                                                WHERE FD.forum = ? AND FD.course = ?
				                                                AND FP.userid = ? AND FP.message LIKE ? ', array($forum->id, $forum->course, $this->submissiondata->userid, $this->data['forumpost']));
                    $discussionid = $discussion->id;
                }
                $submission = $DB->get_record_select('forum_posts', " userid = ? AND message LIKE ? AND discussion = ? ", array($this->submissiondata->userid, $this->data['forumpost'], $discussionid));
                // Collate data and trigger new event for the cron to process.
                if ($CFG->branch >= 26) {
                    $params = array('context' => context_module::instance($this->cm->id), 'courseid' => $this->cm->course, 'objectid' => $submission->id, 'userid' => $this->submissiondata->userid, 'other' => array('pathnamehashes' => '', 'content' => trim($this->data['forumpost']), 'discussionid' => $discussionid, 'triggeredfrom' => 'turnitin_recreate_submission_event'));
                    $event = \mod_forum\event\assessable_uploaded::create($params);
                    $event->trigger();
                } else {
                    $eventdata = new stdClass();
                    $eventdata->modulename = $this->cm->modname;
                    $eventdata->cmid = $this->cm->id;
                    $eventdata->courseid = $this->cm->course;
                    $eventdata->itemid = $submission->id;
                    $eventdata->userid = $this->submissiondata->userid;
                    $eventdata->content = trim($this->data['forumpost']);
                    events_trigger('assessable_content_uploaded', $eventdata);
                }
                break;
        }
        $submissiondata = new stdClass();
        $submissiondata->id = $this->id;
        $submissiondata->statuscode = 'pending';
        return $DB->update_record('plagiarism_turnitin_files', $submissiondata);
    }