Example #1
0
 /**
  * Returns the list of gradable areas provided by the given component
  *
  * This performs a callback to the library of the relevant plugin to obtain
  * the list of supported areas.
  *
  * @param string $component normalized component name
  * @return array of (string)areacode => (string)localized title of the area
  */
 public static function available_areas($component)
 {
     global $CFG;
     list($plugintype, $pluginname) = core_component::normalize_component($component);
     if ($component === 'core_grading') {
         return array();
     } else {
         if ($plugintype === 'mod') {
             return plugin_callback('mod', $pluginname, 'grading', 'areas_list', null, array());
         } else {
             throw new coding_exception('Unsupported area location');
         }
     }
 }
Example #2
0
    /**
    * Checks if the item exists and is NOT owned by the current owner. Uses a callback to find out what table to look in.
    * @param string plugintype the type of plugin ie 'mod'
    * @param string pluginname the name of the plugin ie 'forum'
    * @return boolean True if the callback doesn't exist. True if the item exists and doesn't belong to the current user. False otherwise.
    */
    public function check_item_and_owner($plugintype, $pluginname, $itemid) {
        global $DB, $USER;

        list($tablename,$itemidcol,$useridcol) = plugin_callback($plugintype, $pluginname, 'rating', 'item_check_info');

        if (!empty($tablename)) {
            $item = $DB->get_record($tablename, array($itemidcol=>$itemid), $useridcol);
            if ($item) {
                if ($item->userid!=$USER->id) {
                    return true;
                }
            }

            return false;//item doesn't exist or belongs to the current user
        } else {
            return true;//callback doesn't exist
        }
    }
Example #3
0
 /**
  * Handle uploads not containing file - create the course module, ask the mod to
  * set itself up, then return the result to the browser
  *
  * @param string $content the content uploaded to the browser
  */
 protected function handle_other_upload($content)
 {
     // Check this plugin is registered to handle this type of upload
     if (!$this->dnduploadhandler->has_type_handler($this->module->name, $this->type)) {
         $info = (object) array('modname' => $this->module->name, 'type' => $this->type);
         throw new moodle_exception('moddoesnotsupporttype', 'moodle', $info);
     }
     // Create a course module to hold the new instance.
     $this->create_course_module();
     // Ask the module to set itself up.
     $moduledata = $this->prepare_module_data(null, $content);
     $instanceid = plugin_callback('mod', $this->module->name, 'dndupload', 'handle', array($moduledata), 'invalidfunction');
     if ($instanceid === 'invalidfunction') {
         throw new coding_exception("{$this->module->name} does not support drag and drop upload (missing {$this->module->name}_dndupload_handle function");
     }
     // Finish setting up the course module.
     $this->finish_setup_course_module($instanceid);
 }
Example #4
0
 /**
  * Revoke validate callbacks
  *
  * @param stdClass $params addtionall parameters need to add to callbacks
  */
 protected function validate($params = array())
 {
     foreach ($params as $key => $value) {
         $this->comment_param->{$key} = $value;
     }
     $validation = plugin_callback($this->plugintype, $this->pluginname, 'comment', 'validate', array($this->comment_param), false);
     if (!$validation) {
         throw new comment_exception('invalidcommentparam');
     }
 }
 /**
  * Validates a submitted rating
  * @param array $params submitted data
  *            context => object the context in which the rated items exists [required]
  *            component => The component the rating belongs to [required]
  *            ratingarea => The ratingarea the rating is associated with [required]
  *            itemid => int the ID of the object being rated [required]
  *            scaleid => int the scale from which the user can select a rating. Used for bounds checking. [required]
  *            rating => int the submitted rating
  *            rateduserid => int the id of the user whose items have been rated. NOT the user who submitted the ratings. 0 to update all. [required]
  *            aggregation => int the aggregation method to apply when calculating grades ie RATING_AGGREGATE_AVERAGE [optional]
  * @return boolean true if the rating is valid. False if callback wasnt found and will throw rating_exception if rating is invalid
  */
 public function check_rating_is_valid($params)
 {
     if (!isset($params['context'])) {
         throw new coding_exception('The context option is a required option when checking rating validity.');
     }
     if (!isset($params['component'])) {
         throw new coding_exception('The component option is now a required option when checking rating validity');
     }
     if (!isset($params['ratingarea'])) {
         throw new coding_exception('The ratingarea option is now a required option when checking rating validity');
     }
     if (!isset($params['itemid'])) {
         throw new coding_exception('The itemid option is now a required option when checking rating validity');
     }
     if (!isset($params['scaleid'])) {
         throw new coding_exception('The scaleid option is now a required option when checking rating validity');
     }
     if (!isset($params['rateduserid'])) {
         throw new coding_exception('The rateduserid option is now a required option when checking rating validity');
     }
     list($plugintype, $pluginname) = normalize_component($params['component']);
     //this looks for a function like forum_rating_validate() in mod_forum lib.php
     //wrapping the params array in another array as call_user_func_array() expands arrays into multiple arguments
     $isvalid = plugin_callback($plugintype, $pluginname, 'rating', 'validate', array($params), null);
     //if null then the callback doesn't exist
     if ($isvalid === null) {
         $isvalid = false;
         debugging('rating validation callback not found for component ' . clean_param($component, PARAM_ALPHANUMEXT));
     }
     return $isvalid;
 }
Example #6
0
 /**
  * Add a new comment
  * @param string $content
  * @return mixed
  */
 public function add($content)
 {
     global $CFG, $DB, $USER, $OUTPUT;
     if (empty($this->postcap)) {
         return COMMENT_ERROR_INSUFFICIENT_CAPS;
     }
     $now = time();
     $newcmt = new stdclass();
     $newcmt->contextid = $this->contextid;
     $newcmt->commentarea = $this->commentarea;
     $newcmt->itemid = $this->itemid;
     $newcmt->content = $content;
     $newcmt->format = FORMAT_MOODLE;
     $newcmt->userid = $USER->id;
     $newcmt->timecreated = $now;
     if (!empty($this->plugintype)) {
         // moodle module will check content
         $ret = plugin_callback($this->plugintype, $this->pluginname, FEATURE_COMMENT, 'add', array(&$newcmt, $this->options), true);
         if (!$ret) {
             return COMMENT_ERROR_MODULE_REJECT;
         }
     }
     $cmt_id = $DB->insert_record('comments', $newcmt);
     if (!empty($cmt_id)) {
         $newcmt->id = $cmt_id;
         $newcmt->time = userdate($now, get_string('strftimerecent', 'langconfig'));
         $newcmt->username = fullname($USER);
         $newcmt->content = format_text($newcmt->content);
         $userpic = moodle_user_picture::make($USER, $this->course->id);
         $userpic->size = 16;
         $newcmt->avatar = $OUTPUT->user_picture($userpic);
         return $newcmt;
     } else {
         return COMMENT_ERROR_DB;
     }
 }
Example #7
0
 /**
  * Print comments
  * @param int $page
  * @return bool return false if no comments available
  */
 public function print_comments($page = 0)
 {
     global $OUTPUT, $CFG, $OUTPUT, $DB;
     $count = $DB->count_records('comments');
     $comments = $this->get_comments($page);
     if (count($comments) == 0) {
         echo $OUTPUT->notification(get_string('nocomments', 'moodle'));
         return false;
     }
     $table = new html_table();
     $table->head = array(html_writer::checkbox('selectall', '', false, get_string('selectall'), array('id' => 'comment_select_all', 'class' => 'comment-report-selectall')), get_string('author', 'search'), get_string('content'), get_string('action'));
     $table->align = array('left', 'left', 'left', 'left');
     $table->attributes = array('class' => 'generaltable commentstable');
     $table->data = array();
     $link = new moodle_url('/comment/index.php', array('action' => 'delete', 'sesskey' => sesskey()));
     foreach ($comments as $c) {
         $this->setup_plugin($c);
         if (!empty($this->plugintype)) {
             $context_url = plugin_callback($this->plugintype, $this->pluginname, 'comment', 'url', array($c));
         }
         $checkbox = html_writer::checkbox('comments', $c->id, false);
         $action = html_writer::link(new moodle_url($link, array('commentid' => $c->id)), get_string('delete'));
         if (!empty($context_url)) {
             $action .= html_writer::empty_tag('br');
             $action .= html_writer::link($context_url, get_string('commentincontext'), array('target' => '_blank'));
         }
         $table->data[] = array($checkbox, $c->fullname, $c->content, $action);
     }
     echo html_writer::table($table);
     echo $OUTPUT->paging_bar($count, $page, $this->perpage, $CFG->wwwroot . '/comment/index.php');
     return true;
 }
Example #8
0
 /**
  * Add a new comment
  * @param string $content
  * @return mixed
  */
 public function add($content, $format = FORMAT_MOODLE)
 {
     global $CFG, $DB, $USER, $OUTPUT;
     if (empty($this->postcap)) {
         throw new comment_exception('nopermissiontocomment');
     }
     $now = time();
     $newcmt = new stdClass();
     $newcmt->contextid = $this->contextid;
     $newcmt->commentarea = $this->commentarea;
     $newcmt->itemid = $this->itemid;
     $newcmt->content = $content;
     $newcmt->format = $format;
     $newcmt->userid = $USER->id;
     $newcmt->timecreated = $now;
     if (!empty($this->plugintype)) {
         // moodle module will check content
         $ret = plugin_callback($this->plugintype, $this->pluginname, FEATURE_COMMENT, 'add', array(&$newcmt, $this->args), true);
         if (!$ret) {
             throw new comment_exception('modulererejectcomment');
         }
     }
     $cmt_id = $DB->insert_record('comments', $newcmt);
     if (!empty($cmt_id)) {
         $newcmt->id = $cmt_id;
         $newcmt->time = userdate($now, get_string('strftimerecent', 'langconfig'));
         $newcmt->fullname = fullname($USER);
         $url = new moodle_url('/user/view.php', array('id' => $USER->id, 'course' => $this->courseid));
         $newcmt->profileurl = $url->out();
         $newcmt->content = format_text($newcmt->content, $format, array('overflowdiv' => true));
         $newcmt->avatar = $OUTPUT->user_picture($USER, array('size' => 16));
         return $newcmt;
     } else {
         throw new comment_exception('dbupdatefailed');
     }
 }
Example #9
0
 /**
  * Print comments
  * @param int $page 
  */
 function print_comments($page = 0)
 {
     global $CFG, $OUTPUT, $DB;
     $this->perpage = 10;
     $count = $DB->count_records_sql('SELECT COUNT(*) FROM {comments} c');
     $comments = $this->get_comments($page);
     $table = new html_table();
     $table->head = array('<input type="checkbox" id="comment_select_all"/>', 'author', 'content', 'action');
     $table->align = array('left', 'left', 'left', 'left');
     $table->width = "95%";
     $table->data = array();
     foreach ($comments as $c) {
         $this->_setup_plugin($c);
         if (!empty($this->plugintype)) {
             $url = plugin_callback($this->plugintype, $this->pluginname, FEATURE_COMMENT, 'url', array($c));
         }
         $checkbox = '<input type="checkbox" name="comments" value="' . $c->id . '" />';
         $action = '';
         $action .= "<a href='{$CFG->wwwroot}/comment/index.php?action=delete&amp;sesskey=" . sesskey() . "&amp;commentid={$c->id}'>" . get_string('delete') . '</a>';
         $action .= "<br />";
         if (!empty($url)) {
             $action .= "<a target='_blank' href='{$url}'>" . get_string('commentincontext') . '</a>';
         }
         $table->data[] = array($checkbox, $c->username, $c->content, $action);
     }
     echo $OUTPUT->table($table);
     echo $OUTPUT->paging_bar(moodle_paging_bar::make($count, $page, $this->perpage, $CFG->wwwroot . '/comment/index.php'));
 }
Example #10
0
 /**
  * Print comments
  * @param int $page
  */
 function print_comments($page = 0)
 {
     global $CFG, $OUTPUT, $DB;
     $count = $DB->count_records_sql('SELECT COUNT(*) FROM {comments} c');
     $comments = $this->get_comments($page);
     $table = new html_table();
     $table->head = array(html_writer::checkbox('selectall', '', false, get_string('selectall'), array('id' => 'comment_select_all', 'class' => 'comment-report-selectall')), get_string('author', 'search'), get_string('content'), get_string('action'));
     $table->align = array('left', 'left', 'left', 'left');
     $table->attributes = array('class' => 'generaltable commentstable');
     $table->data = array();
     $linkbase = $CFG->wwwroot . '/comment/index.php?action=delete&sesskey=' . sesskey();
     foreach ($comments as $c) {
         $link = $linkbase . '&commentid=' . $c->id;
         $this->setup_plugin($c);
         if (!empty($this->plugintype)) {
             $context_url = plugin_callback($this->plugintype, $this->pluginname, FEATURE_COMMENT, 'url', array($c));
         }
         $checkbox = html_writer::checkbox('comments', $c->id, false);
         $action = html_writer::link($link, get_string('delete'));
         if (!empty($context_url)) {
             $action .= html_writer::tag('br', null);
             $action .= html_writer::link($context_url, get_string('commentincontext'), array('target' => '_blank'));
         }
         $table->data[] = array($checkbox, $c->fullname, $c->content, $action);
     }
     echo html_writer::table($table);
     echo $OUTPUT->paging_bar($count, $page, $this->perpage, $CFG->wwwroot . '/comment/index.php');
 }