Ejemplo n.º 1
0
/**
 * Actual implementation of the rest coures functionality, delete all the
 * glossary responses for course $data->courseid.
 * @param $data the data submitted from the reset course.
 * @return array status array
 */
function glossary_reset_userdata($data)
{
    global $CFG;
    require_once $CFG->libdir . '/filelib.php';
    $componentstr = get_string('modulenameplural', 'glossary');
    $status = array();
    $allentriessql = "SELECT e.id\n                        FROM {$CFG->prefix}glossary_entries e\n                             INNER JOIN {$CFG->prefix}glossary g ON e.glossaryid = g.id\n                       WHERE g.course = {$data->courseid}";
    $allglossariessql = "SELECT g.id\n                            FROM {$CFG->prefix}glossary g\n                           WHERE g.course={$data->courseid}";
    // delete entries if requested
    if (!empty($data->reset_glossary_all) or !empty($data->reset_glossary_types) and in_array('main', $data->reset_glossary_types) and in_array('secondary', $data->reset_glossary_types)) {
        delete_records_select('glossary_ratings', "entryid IN ({$allentriessql})");
        delete_records_select('glossary_comments', "entryid IN ({$allentriessql})");
        delete_records_select('glossary_entries', "glossaryid IN ({$allglossariessql})");
        if ($glossaries = get_records_sql($allglossariessql)) {
            foreach ($glossaries as $glossaryid => $unused) {
                fulldelete($CFG->dataroot . "/{$data->courseid}/moddata/glossary/{$glossaryid}");
            }
        }
        // remove all grades from gradebook
        if (empty($data->reset_gradebook_grades)) {
            glossary_reset_gradebook($data->courseid);
        }
        $status[] = array('component' => $componentstr, 'item' => get_string('resetglossariesall', 'glossary'), 'error' => false);
    } else {
        if (!empty($data->reset_glossary_types)) {
            $mainentriessql = "{$allentries} AND g.mainglossary=1";
            $secondaryentriessql = "{$allentries} AND g.mainglossary=0";
            $mainglossariessql = "{$allglossariessql} AND g.mainglossary=1";
            $secondaryglossariessql = "{$allglossariessql} AND g.mainglossary=0";
            if (in_array('main', $data->reset_glossary_types)) {
                delete_records_select('glossary_ratings', "entryid IN ({$mainentriessql})");
                delete_records_select('glossary_comments', "entryid IN ({$mainentriessql})");
                delete_records_select('glossary_entries', "glossaryid IN ({$mainglossariessql})");
                if ($glossaries = get_records_sql($mainglossariessql)) {
                    foreach ($glossaries as $glossaryid => $unused) {
                        fulldelete("{$CFG->dataroot}/{$data->courseid}/moddata/glossary/{$glossaryid}");
                    }
                }
                // remove all grades from gradebook
                if (empty($data->reset_gradebook_grades)) {
                    glossary_reset_gradebook($data->courseid, 'main');
                }
                $status[] = array('component' => $componentstr, 'item' => get_string('resetglossaries', 'glossary'), 'error' => false);
            } else {
                if (in_array('secondary', $data->reset_glossary_types)) {
                    delete_records_select('glossary_ratings', "entryid IN ({$secondaryentriessql})");
                    delete_records_select('glossary_comments', "entryid IN ({$secondaryentriessql})");
                    delete_records_select('glossary_entries', "glossaryid IN ({$secondaryglossariessql})");
                    // remove exported source flag from entries in main glossary
                    execute_sql("UPDATE {$CFG->prefix}glossary_entries\n                            SET sourceglossaryid=0\n                          WHERE glossaryid IN ({$mainglossariessql})", false);
                    if ($glossaries = get_records_sql($secondaryglossariessql)) {
                        foreach ($glossaries as $glossaryid => $unused) {
                            fulldelete("{$CFG->dataroot}/{$data->courseid}/moddata/glossary/{$glossaryid}");
                        }
                    }
                    // remove all grades from gradebook
                    if (empty($data->reset_gradebook_grades)) {
                        glossary_reset_gradebook($data->courseid, 'secondary');
                    }
                    $status[] = array('component' => $componentstr, 'item' => get_string('resetglossaries', 'glossary') . ': ' . get_string('secondaryglossary', 'glossary'), 'error' => false);
                }
            }
        }
    }
    // remove entries by users not enrolled into course
    if (!empty($data->reset_glossary_notenrolled)) {
        $entriessql = "SELECT e.id, e.userid, e.glossaryid, u.id AS userexists, u.deleted AS userdeleted\n                         FROM {$CFG->prefix}glossary_entries e\n                              INNER JOIN {$CFG->prefix}glossary g ON e.glossaryid = g.id\n                              LEFT OUTER JOIN {$CFG->prefix}user u ON e.userid = u.id\n                        WHERE g.course = {$data->courseid} AND e.userid > 0";
        $course_context = get_context_instance(CONTEXT_COURSE, $data->courseid);
        $notenrolled = array();
        if ($rs = get_recordset_sql($entriessql)) {
            while ($entry = rs_fetch_next_record($rs)) {
                if (array_key_exists($entry->userid, $notenrolled) or !$entry->userexists or $entry->userdeleted or !has_capability('moodle/course:view', $course_context, $entry->userid)) {
                    delete_records('glossary_ratings', 'entryid', $entry->id);
                    delete_records('glossary_comments', 'entryid', $entry->id);
                    delete_records('glossary_entries', 'id', $entry->id);
                    fulldelete("{$CFG->dataroot}/{$data->courseid}/moddata/glossary/{$entry->glossaryid}");
                    $notenrolled[$entry->userid] = true;
                }
            }
            rs_close($rs);
            $status[] = array('component' => $componentstr, 'item' => get_string('deletenotenrolled', 'glossary'), 'error' => false);
        }
    }
    // remove all ratings
    if (!empty($data->reset_glossary_ratings)) {
        delete_records_select('glossary_ratings', "entryid IN ({$allentriessql})");
        // remove all grades from gradebook
        if (empty($data->reset_gradebook_grades)) {
            glossary_reset_gradebook($data->courseid);
        }
        $status[] = array('component' => $componentstr, 'item' => get_string('deleteallratings'), 'error' => false);
    }
    // remove all comments
    if (!empty($data->reset_glossary_comments)) {
        delete_records_select('glossary_comments', "entryid IN ({$allentriessql})");
        $status[] = array('component' => $componentstr, 'item' => get_string('deleteallcomments'), 'error' => false);
    }
    /// updating dates - shift may be negative too
    if ($data->timeshift) {
        shift_course_mod_dates('glossary', array('assesstimestart', 'assesstimefinish'), $data->timeshift, $data->courseid);
        $status[] = array('component' => $componentstr, 'item' => get_string('datechanged'), 'error' => false);
    }
    return $status;
}
Ejemplo n.º 2
0
/**
 * Actual implementation of the reset course functionality, delete all the
 * glossary responses for course $data->courseid.
 *
 * @global object
 * @param $data the data submitted from the reset course.
 * @return array status array
 */
function glossary_reset_userdata($data) {
    global $CFG, $DB;
    require_once($CFG->dirroot.'/rating/lib.php');

    $componentstr = get_string('modulenameplural', 'glossary');
    $status = array();

    $allentriessql = "SELECT e.id
                        FROM {glossary_entries} e
                             JOIN {glossary} g ON e.glossaryid = g.id
                       WHERE g.course = ?";

    $allglossariessql = "SELECT g.id
                           FROM {glossary} g
                          WHERE g.course = ?";

    $params = array($data->courseid);

    $fs = get_file_storage();

    $rm = new rating_manager();
    $ratingdeloptions = new stdClass;
    $ratingdeloptions->component = 'mod_glossary';
    $ratingdeloptions->ratingarea = 'entry';

    // delete entries if requested
    if (!empty($data->reset_glossary_all)
         or (!empty($data->reset_glossary_types) and in_array('main', $data->reset_glossary_types) and in_array('secondary', $data->reset_glossary_types))) {

        $params[] = 'glossary_entry';
        $DB->delete_records_select('comments', "itemid IN ($allentriessql) AND commentarea=?", $params);
        $DB->delete_records_select('glossary_alias',    "entryid IN ($allentriessql)", $params);
        $DB->delete_records_select('glossary_entries', "glossaryid IN ($allglossariessql)", $params);

        // now get rid of all attachments
        if ($glossaries = $DB->get_records_sql($allglossariessql, $params)) {
            foreach ($glossaries as $glossaryid=>$unused) {
                if (!$cm = get_coursemodule_from_instance('glossary', $glossaryid)) {
                    continue;
                }
                $context = get_context_instance(CONTEXT_MODULE, $cm->id);
                $fs->delete_area_files($context->id, 'mod_glossary', 'attachment');

                //delete ratings
                $ratingdeloptions->contextid = $context->id;
                $rm->delete_ratings($ratingdeloptions);
            }
        }

        // remove all grades from gradebook
        if (empty($data->reset_gradebook_grades)) {
            glossary_reset_gradebook($data->courseid);
        }

        $status[] = array('component'=>$componentstr, 'item'=>get_string('resetglossariesall', 'glossary'), 'error'=>false);

    } else if (!empty($data->reset_glossary_types)) {
        $mainentriessql         = "$allentries AND g.mainglossary=1";
        $secondaryentriessql    = "$allentries AND g.mainglossary=0";

        $mainglossariessql      = "$allglossariessql AND g.mainglossary=1";
        $secondaryglossariessql = "$allglossariessql AND g.mainglossary=0";

        if (in_array('main', $data->reset_glossary_types)) {
            $params[] = 'glossary_entry';
            $DB->delete_records_select('comments', "itemid IN ($mainentriessql) AND commentarea=?", $params);
            $DB->delete_records_select('glossary_entries', "glossaryid IN ($mainglossariessql)", $params);

            if ($glossaries = $DB->get_records_sql($mainglossariessql, $params)) {
                foreach ($glossaries as $glossaryid=>$unused) {
                    if (!$cm = get_coursemodule_from_instance('glossary', $glossaryid)) {
                        continue;
                    }
                    $context = get_context_instance(CONTEXT_MODULE, $cm->id);
                    $fs->delete_area_files($context->id, 'mod_glossary', 'attachment');

                    //delete ratings
                    $ratingdeloptions->contextid = $context->id;
                    $rm->delete_ratings($ratingdeloptions);
                }
            }

            // remove all grades from gradebook
            if (empty($data->reset_gradebook_grades)) {
                glossary_reset_gradebook($data->courseid, 'main');
            }

            $status[] = array('component'=>$componentstr, 'item'=>get_string('resetglossaries', 'glossary'), 'error'=>false);

        } else if (in_array('secondary', $data->reset_glossary_types)) {
            $params[] = 'glossary_entry';
            $DB->delete_records_select('comments', "itemid IN ($secondaryentriessql) AND commentarea=?", $params);
            $DB->delete_records_select('glossary_entries', "glossaryid IN ($secondaryglossariessql)", $params);
            // remove exported source flag from entries in main glossary
            $DB->execute("UPDATE {glossary_entries
                             SET sourceglossaryid=0
                           WHERE glossaryid IN ($mainglossariessql)", $params);

            if ($glossaries = $DB->get_records_sql($secondaryglossariessql, $params)) {
                foreach ($glossaries as $glossaryid=>$unused) {
                    if (!$cm = get_coursemodule_from_instance('glossary', $glossaryid)) {
                        continue;
                    }
                    $context = get_context_instance(CONTEXT_MODULE, $cm->id);
                    $fs->delete_area_files($context->id, 'mod_glossary', 'attachment');

                    //delete ratings
                    $ratingdeloptions->contextid = $context->id;
                    $rm->delete_ratings($ratingdeloptions);
                }
            }

            // remove all grades from gradebook
            if (empty($data->reset_gradebook_grades)) {
                glossary_reset_gradebook($data->courseid, 'secondary');
            }

            $status[] = array('component'=>$componentstr, 'item'=>get_string('resetglossaries', 'glossary').': '.get_string('secondaryglossary', 'glossary'), 'error'=>false);
        }
    }

    // remove entries by users not enrolled into course
    if (!empty($data->reset_glossary_notenrolled)) {
        $entriessql = "SELECT e.id, e.userid, e.glossaryid, u.id AS userexists, u.deleted AS userdeleted
                         FROM {glossary_entries} e
                              JOIN {glossary} g ON e.glossaryid = g.id
                              LEFT JOIN {user} u ON e.userid = u.id
                        WHERE g.course = ? AND e.userid > 0";

        $course_context = get_context_instance(CONTEXT_COURSE, $data->courseid);
        $notenrolled = array();
        $rs = $DB->get_recordset_sql($entriessql, $params);
        if ($rs->valid()) {
            foreach ($rs as $entry) {
                if (array_key_exists($entry->userid, $notenrolled) or !$entry->userexists or $entry->userdeleted
                  or !is_enrolled($course_context , $entry->userid)) {
                    $DB->delete_records('comments', array('commentarea'=>'glossary_entry', 'itemid'=>$entry->id));
                    $DB->delete_records('glossary_entries', array('id'=>$entry->id));

                    if ($cm = get_coursemodule_from_instance('glossary', $entry->glossaryid)) {
                        $context = get_context_instance(CONTEXT_MODULE, $cm->id);
                        $fs->delete_area_files($context->id, 'mod_glossary', 'attachment', $entry->id);

                        //delete ratings
                        $ratingdeloptions->contextid = $context->id;
                        $rm->delete_ratings($ratingdeloptions);
                    }
                }
            }
            $status[] = array('component'=>$componentstr, 'item'=>get_string('deletenotenrolled', 'glossary'), 'error'=>false);
        }
        $rs->close();
    }

    // remove all ratings
    if (!empty($data->reset_glossary_ratings)) {
        //remove ratings
        if ($glossaries = $DB->get_records_sql($allglossariessql, $params)) {
            foreach ($glossaries as $glossaryid=>$unused) {
                if (!$cm = get_coursemodule_from_instance('glossary', $glossaryid)) {
                    continue;
                }
                $context = get_context_instance(CONTEXT_MODULE, $cm->id);

                //delete ratings
                $ratingdeloptions->contextid = $context->id;
                $rm->delete_ratings($ratingdeloptions);
            }
        }

        // remove all grades from gradebook
        if (empty($data->reset_gradebook_grades)) {
            glossary_reset_gradebook($data->courseid);
        }
        $status[] = array('component'=>$componentstr, 'item'=>get_string('deleteallratings'), 'error'=>false);
    }

    // remove comments
    if (!empty($data->reset_glossary_comments)) {
        $params[] = 'glossary_entry';
        $DB->delete_records_select('comments', "itemid IN ($allentriessql) AND commentarea= ? ", $params);
        $status[] = array('component'=>$componentstr, 'item'=>get_string('deleteallcomments'), 'error'=>false);
    }

    /// updating dates - shift may be negative too
    if ($data->timeshift) {
        shift_course_mod_dates('glossary', array('assesstimestart', 'assesstimefinish'), $data->timeshift, $data->courseid);
        $status[] = array('component'=>$componentstr, 'item'=>get_string('datechanged'), 'error'=>false);
    }

    return $status;
}
Ejemplo n.º 3
0
/**
 * Actual implementation of the rest coures functionality, delete all the
 * glossary responses for course $data->courseid.
 * @param $data the data submitted from the reset course.
 * @return array status array
 */
function glossary_reset_userdata($data)
{
    global $CFG, $DB;
    $componentstr = get_string('modulenameplural', 'glossary');
    $status = array();
    $allentriessql = "SELECT e.id\n                        FROM {glossary_entries} e\n                             JOIN {glossary} g ON e.glossaryid = g.id\n                       WHERE g.course = ?";
    $allglossariessql = "SELECT g.id\n                           FROM {glossary} g\n                          WHERE g.course = ?";
    $params = array($data->courseid);
    $fs = get_file_storage();
    // delete entries if requested
    if (!empty($data->reset_glossary_all) or !empty($data->reset_glossary_types) and in_array('main', $data->reset_glossary_types) and in_array('secondary', $data->reset_glossary_types)) {
        $DB->delete_records_select('glossary_ratings', "entryid IN ({$allentriessql})", $params);
        $DB->delete_records_select('glossary_comments', "entryid IN ({$allentriessql})", $params);
        $DB->delete_records_select('glossary_entries', "glossaryid IN ({$allglossariessql})", $params);
        // now get rid of all attachments
        if ($glossaries = $DB->get_records_sql($allglossariessql, $params)) {
            foreach ($glossaries as $glossaryid => $unused) {
                if (!($cm = get_coursemodule_from_instance('glossary', $glossaryid))) {
                    continue;
                }
                $context = get_context_instance(CONTEXT_MODULE, $cm->id);
                $fs->delete_area_files($context->id, 'glossary_attachment');
            }
        }
        // remove all grades from gradebook
        if (empty($data->reset_gradebook_grades)) {
            glossary_reset_gradebook($data->courseid);
        }
        $status[] = array('component' => $componentstr, 'item' => get_string('resetglossariesall', 'glossary'), 'error' => false);
    } else {
        if (!empty($data->reset_glossary_types)) {
            $mainentriessql = "{$allentries} AND g.mainglossary=1";
            $secondaryentriessql = "{$allentries} AND g.mainglossary=0";
            $mainglossariessql = "{$allglossariessql} AND g.mainglossary=1";
            $secondaryglossariessql = "{$allglossariessql} AND g.mainglossary=0";
            if (in_array('main', $data->reset_glossary_types)) {
                $DB->delete_records_select('glossary_ratings', "entryid IN ({$mainentriessql})", $params);
                $DB->delete_records_select('glossary_comments', "entryid IN ({$mainentriessql})", $params);
                $DB->delete_records_select('glossary_entries', "glossaryid IN ({$mainglossariessql})", $params);
                if ($glossaries = $DB->get_records_sql($mainglossariessql, $params)) {
                    foreach ($glossaries as $glossaryid => $unused) {
                        if (!($cm = get_coursemodule_from_instance('glossary', $glossaryid))) {
                            continue;
                        }
                        $context = get_context_instance(CONTEXT_MODULE, $cm->id);
                        $fs->delete_area_files($context->id, 'glossary_attachment');
                    }
                }
                // remove all grades from gradebook
                if (empty($data->reset_gradebook_grades)) {
                    glossary_reset_gradebook($data->courseid, 'main');
                }
                $status[] = array('component' => $componentstr, 'item' => get_string('resetglossaries', 'glossary'), 'error' => false);
            } else {
                if (in_array('secondary', $data->reset_glossary_types)) {
                    $DB->delete_records_select('glossary_ratings', "entryid IN ({$secondaryentriessql})", $params);
                    $DB->delete_records_select('glossary_comments', "entryid IN ({$secondaryentriessql})", $params);
                    $DB->delete_records_select('glossary_entries', "glossaryid IN ({$secondaryglossariessql})", $params);
                    // remove exported source flag from entries in main glossary
                    $DB->execute("UPDATE {glossary_entries\n                             SET sourceglossaryid=0\n                           WHERE glossaryid IN ({$mainglossariessql})", $params);
                    if ($glossaries = $DB->get_records_sql($secondaryglossariessql, $params)) {
                        foreach ($glossaries as $glossaryid => $unused) {
                            if (!($cm = get_coursemodule_from_instance('glossary', $glossaryid))) {
                                continue;
                            }
                            $context = get_context_instance(CONTEXT_MODULE, $cm->id);
                            $fs->delete_area_files($context->id, 'glossary_attachment');
                        }
                    }
                    // remove all grades from gradebook
                    if (empty($data->reset_gradebook_grades)) {
                        glossary_reset_gradebook($data->courseid, 'secondary');
                    }
                    $status[] = array('component' => $componentstr, 'item' => get_string('resetglossaries', 'glossary') . ': ' . get_string('secondaryglossary', 'glossary'), 'error' => false);
                }
            }
        }
    }
    // remove entries by users not enrolled into course
    if (!empty($data->reset_glossary_notenrolled)) {
        $entriessql = "SELECT e.id, e.userid, e.glossaryid, u.id AS userexists, u.deleted AS userdeleted\n                         FROM {glossary_entries} e\n                              JOIN {glossary} g ON e.glossaryid = g.id\n                              LEFT JOIN {user} u ON e.userid = u.id\n                        WHERE g.course = ? AND e.userid > 0";
        $course_context = get_context_instance(CONTEXT_COURSE, $data->courseid);
        $notenrolled = array();
        if ($rs = $DB->get_recordset_sql($entriessql, $params)) {
            foreach ($rs as $entry) {
                if (array_key_exists($entry->userid, $notenrolled) or !$entry->userexists or $entry->userdeleted or !has_capability('moodle/course:view', $course_context, $entry->userid)) {
                    $DB->delete_records('glossary_ratings', array('entryid' => $entry->id));
                    $DB->delete_records('glossary_comments', array('entryid' => $entry->id));
                    $DB->delete_records('glossary_entries', array('id' => $entry->id));
                    if ($cm = get_coursemodule_from_instance('glossary', $entry->glossaryid)) {
                        $context = get_context_instance(CONTEXT_MODULE, $cm->id);
                        $fs->delete_area_files($context->id, 'glossary_attachment', $entry->id);
                    }
                }
            }
            $rs->close();
            $status[] = array('component' => $componentstr, 'item' => get_string('deletenotenrolled', 'glossary'), 'error' => false);
        }
    }
    // remove all ratings
    if (!empty($data->reset_glossary_ratings)) {
        $DB->delete_records_select('glossary_ratings', "entryid IN ({$allentriessql})", $params);
        // remove all grades from gradebook
        if (empty($data->reset_gradebook_grades)) {
            glossary_reset_gradebook($data->courseid);
        }
        $status[] = array('component' => $componentstr, 'item' => get_string('deleteallratings'), 'error' => false);
    }
    // remove all comments
    if (!empty($data->reset_glossary_comments)) {
        $DB->delete_records_select('glossary_comments', "entryid IN ({$allentriessql})", $params);
        $status[] = array('component' => $componentstr, 'item' => get_string('deleteallcomments'), 'error' => false);
    }
    /// updating dates - shift may be negative too
    if ($data->timeshift) {
        shift_course_mod_dates('glossary', array('assesstimestart', 'assesstimefinish'), $data->timeshift, $data->courseid);
        $status[] = array('component' => $componentstr, 'item' => get_string('datechanged'), 'error' => false);
    }
    return $status;
}