Пример #1
0
 /**
  * @param stdClass $data row data
  * @return string HTML for the fullname column
  */
 public function col_fullname($data)
 {
     if (is_null($data->realuserid)) {
         // User is in the git history but does not have an account in this Moodle site.
         $user = new stdClass();
         $user->firstname = $data->firstname;
         $user->lastname = $data->lastname;
         // Additional fields so fullname() doesn't display a developer debug message.
         $user->firstnamephonetic = null;
         $user->lastnamephonetic = null;
         $user->middlename = null;
         $user->alternatename = null;
     } else {
         $user = user_picture::unalias($data, null, "realuserid", "realuser");
     }
     return fullname($user);
 }
Пример #2
0
 public function test_user_picture_fields_unaliasing_null()
 {
     $fields = user_picture::fields();
     $fields = array_map('trim', explode(',', $fields));
     $fakerecord = new stdClass();
     $fakerecord->aliasedid = 42;
     foreach ($fields as $field) {
         if ($field !== 'id') {
             $fakerecord->{'prefix' . $field} = "Value of {$field}";
         }
     }
     $fakerecord->prefixcustom1 = 'Value of custom1';
     $fakerecord->prefiximagealt = null;
     $returned = user_picture::unalias($fakerecord, array('custom1'), 'aliasedid', 'prefix');
     $this->assertEqual($returned->id, 42);
     $this->assertEqual($returned->imagealt, null);
     foreach ($fields as $field) {
         if ($field !== 'id' and $field !== 'imagealt') {
             $this->assertEqual($returned->{$field}, "Value of {$field}");
         }
     }
     $this->assertEqual($returned->custom1, 'Value of custom1');
 }
 /**
  * Formats the column userpic.
  *
  * @param stdClass $row Table row.
  * @return string Output produced.
  */
 protected function col_userpic($row)
 {
     global $CFG, $OUTPUT;
     if ($this->identitymode == block_xp_manager::IDENTITY_OFF && $this->userid != $row->userid) {
         static $guestuser = null;
         if ($guestuser === null) {
             $guestuser = guest_user();
         }
         return $OUTPUT->user_picture($guestuser, array('link' => false, 'alttext' => false));
     }
     return $OUTPUT->user_picture(user_picture::unalias($row, null, 'userid'));
 }
Пример #4
0
 /**
  * Extracts feedback from the given assessment record
  *
  * @param stdClass $assessment record as returned by eg {@see self::get_assessment_by_id()}
  */
 public function __construct(stdClass $assessment)
 {
     $this->provider = user_picture::unalias($assessment, null, 'gradinggradeoverbyx', 'overby');
     $this->content = $assessment->feedbackreviewer;
     $this->format = $assessment->feedbackreviewerformat;
 }
Пример #5
0
 /**
  * Returns and array of users + enrolment details.
  *
  * Given an array of user id's this function returns and array of user enrolments for those users
  * as well as enough user information to display the users name and picture for each enrolment.
  *
  * @global moodle_database $DB
  * @param array $userids
  * @return array
  */
 public function get_users_enrolments(array $userids)
 {
     global $DB;
     $instances = $this->get_enrolment_instances();
     $plugins = $this->get_enrolment_plugins(false);
     if (!empty($this->instancefilter)) {
         $instancesql = ' = :instanceid';
         $instanceparams = array('instanceid' => $this->instancefilter);
     } else {
         list($instancesql, $instanceparams) = $DB->get_in_or_equal(array_keys($instances), SQL_PARAMS_NAMED, 'instanceid0000');
     }
     $userfields = user_picture::fields('u');
     list($idsql, $idparams) = $DB->get_in_or_equal($userids, SQL_PARAMS_NAMED, 'userid0000');
     list($sort, $sortparams) = users_order_by_sql('u');
     $sql = "SELECT ue.id AS ueid, ue.status, ue.enrolid, ue.userid, ue.timestart, ue.timeend, ue.modifierid, ue.timecreated, ue.timemodified, {$userfields}\n                  FROM {user_enrolments} ue\n             LEFT JOIN {user} u ON u.id = ue.userid\n                 WHERE ue.enrolid {$instancesql} AND\n                       u.id {$idsql}\n              ORDER BY {$sort}";
     $rs = $DB->get_recordset_sql($sql, $idparams + $instanceparams + $sortparams);
     $users = array();
     foreach ($rs as $ue) {
         $user = user_picture::unalias($ue);
         $ue->id = $ue->ueid;
         unset($ue->ueid);
         if (!array_key_exists($user->id, $users)) {
             $user->enrolments = array();
             $users[$user->id] = $user;
         }
         $ue->enrolmentinstance = $instances[$ue->enrolid];
         $ue->enrolmentplugin = $plugins[$ue->enrolmentinstance->enrol];
         $users[$user->id]->enrolments[$ue->id] = $ue;
     }
     $rs->close();
     return $users;
 }
Пример #6
0
/**
 * takes a list of records, the current data, a search string,
 * and mode to display prints the translated template
 *
 * @global object
 * @global object
 * @param string $template
 * @param array $records
 * @param object $data
 * @param string $search
 * @param int $page
 * @param bool $return
 * @param object $jumpurl a moodle_url by which to jump back to the record list (can be null)
 * @return mixed
 */
function data_print_template($template, $records, $data, $search = '', $page = 0, $return = false, moodle_url $jumpurl = null)
{
    global $CFG, $DB, $OUTPUT;
    $cm = get_coursemodule_from_instance('data', $data->id);
    $context = context_module::instance($cm->id);
    static $fields = array();
    static $dataid = null;
    if (empty($dataid)) {
        $dataid = $data->id;
    } else {
        if ($dataid != $data->id) {
            $fields = array();
        }
    }
    if (empty($fields)) {
        $fieldrecords = $DB->get_records('data_fields', array('dataid' => $data->id));
        foreach ($fieldrecords as $fieldrecord) {
            $fields[] = data_get_field($fieldrecord, $data);
        }
    }
    if (empty($records)) {
        return;
    }
    if (!$jumpurl) {
        $jumpurl = new moodle_url('/mod/data/view.php', array('d' => $data->id));
    }
    $jumpurl = new moodle_url($jumpurl, array('page' => $page, 'sesskey' => sesskey()));
    foreach ($records as $record) {
        // Might be just one for the single template
        // Replacing tags
        $patterns = array();
        $replacement = array();
        // Then we generate strings to replace for normal tags
        foreach ($fields as $field) {
            $patterns[] = '[[' . $field->field->name . ']]';
            $replacement[] = highlight($search, $field->display_browse_field($record->id, $template));
        }
        $canmanageentries = has_capability('mod/data:manageentries', $context);
        // Replacing special tags (##Edit##, ##Delete##, ##More##)
        $patterns[] = '##edit##';
        $patterns[] = '##delete##';
        if (data_user_can_manage_entry($record, $data, $context)) {
            $replacement[] = '<a href="' . $CFG->wwwroot . '/mod/data/edit.php?d=' . $data->id . '&amp;rid=' . $record->id . '&amp;sesskey=' . sesskey() . '"><img src="' . $OUTPUT->pix_url('t/edit') . '" class="iconsmall" alt="' . get_string('edit') . '" title="' . get_string('edit') . '" /></a>';
            $replacement[] = '<a href="' . $CFG->wwwroot . '/mod/data/view.php?d=' . $data->id . '&amp;delete=' . $record->id . '&amp;sesskey=' . sesskey() . '"><img src="' . $OUTPUT->pix_url('t/delete') . '" class="iconsmall" alt="' . get_string('delete') . '" title="' . get_string('delete') . '" /></a>';
        } else {
            $replacement[] = '';
            $replacement[] = '';
        }
        $moreurl = $CFG->wwwroot . '/mod/data/view.php?d=' . $data->id . '&amp;rid=' . $record->id;
        if ($search) {
            $moreurl .= '&amp;filter=1';
        }
        $patterns[] = '##more##';
        $replacement[] = '<a href="' . $moreurl . '"><img src="' . $OUTPUT->pix_url('t/preview') . '" class="iconsmall" alt="' . get_string('more', 'data') . '" title="' . get_string('more', 'data') . '" /></a>';
        $patterns[] = '##moreurl##';
        $replacement[] = $moreurl;
        $patterns[] = '##delcheck##';
        if ($canmanageentries) {
            $replacement[] = html_writer::checkbox('delcheck[]', $record->id, false, '', array('class' => 'recordcheckbox'));
        } else {
            $replacement[] = '';
        }
        $patterns[] = '##user##';
        $replacement[] = '<a href="' . $CFG->wwwroot . '/user/view.php?id=' . $record->userid . '&amp;course=' . $data->course . '">' . fullname($record) . '</a>';
        $patterns[] = '##userpicture##';
        $ruser = user_picture::unalias($record, null, 'userid');
        $replacement[] = $OUTPUT->user_picture($ruser, array('courseid' => $data->course));
        $patterns[] = '##export##';
        if (!empty($CFG->enableportfolios) && ($template == 'singletemplate' || $template == 'listtemplate') && (has_capability('mod/data:exportentry', $context) || data_isowner($record->id) && has_capability('mod/data:exportownentry', $context))) {
            require_once $CFG->libdir . '/portfoliolib.php';
            $button = new portfolio_add_button();
            $button->set_callback_options('data_portfolio_caller', array('id' => $cm->id, 'recordid' => $record->id), 'mod_data');
            list($formats, $files) = data_portfolio_caller::formats($fields, $record);
            $button->set_formats($formats);
            $replacement[] = $button->to_html(PORTFOLIO_ADD_ICON_LINK);
        } else {
            $replacement[] = '';
        }
        $patterns[] = '##timeadded##';
        $replacement[] = userdate($record->timecreated);
        $patterns[] = '##timemodified##';
        $replacement[] = userdate($record->timemodified);
        $patterns[] = '##approve##';
        if (has_capability('mod/data:approve', $context) && $data->approval && !$record->approved) {
            $approveurl = new moodle_url($jumpurl, array('approve' => $record->id));
            $approveicon = new pix_icon('t/approve', get_string('approve', 'data'), '', array('class' => 'iconsmall'));
            $replacement[] = html_writer::tag('span', $OUTPUT->action_icon($approveurl, $approveicon), array('class' => 'approve'));
        } else {
            $replacement[] = '';
        }
        $patterns[] = '##disapprove##';
        if (has_capability('mod/data:approve', $context) && $data->approval && $record->approved) {
            $disapproveurl = new moodle_url($jumpurl, array('disapprove' => $record->id));
            $disapproveicon = new pix_icon('t/block', get_string('disapprove', 'data'), '', array('class' => 'iconsmall'));
            $replacement[] = html_writer::tag('span', $OUTPUT->action_icon($disapproveurl, $disapproveicon), array('class' => 'disapprove'));
        } else {
            $replacement[] = '';
        }
        $patterns[] = '##approvalstatus##';
        if (!$data->approval) {
            $replacement[] = '';
        } else {
            if ($record->approved) {
                $replacement[] = get_string('approved', 'data');
            } else {
                $replacement[] = get_string('notapproved', 'data');
            }
        }
        $patterns[] = '##comments##';
        if ($template == 'listtemplate' && $data->comments) {
            if (!empty($CFG->usecomments)) {
                require_once $CFG->dirroot . '/comment/lib.php';
                list($context, $course, $cm) = get_context_info_array($context->id);
                $cmt = new stdClass();
                $cmt->context = $context;
                $cmt->course = $course;
                $cmt->cm = $cm;
                $cmt->area = 'database_entry';
                $cmt->itemid = $record->id;
                $cmt->showcount = true;
                $cmt->component = 'mod_data';
                $comment = new comment($cmt);
                $replacement[] = $comment->output(true);
            }
        } else {
            $replacement[] = '';
        }
        // actual replacement of the tags
        $newtext = str_ireplace($patterns, $replacement, $data->{$template});
        // no more html formatting and filtering - see MDL-6635
        if ($return) {
            return $newtext;
        } else {
            echo $newtext;
            // hack alert - return is always false in singletemplate anyway ;-)
            /**********************************
             *    Printing Ratings Form       *
             *********************************/
            if ($template == 'singletemplate') {
                //prints ratings options
                data_print_ratings($data, $record);
            }
            /**********************************
             *    Printing Comments Form       *
             *********************************/
            if ($template == 'singletemplate' && $data->comments) {
                if (!empty($CFG->usecomments)) {
                    require_once $CFG->dirroot . '/comment/lib.php';
                    list($context, $course, $cm) = get_context_info_array($context->id);
                    $cmt = new stdClass();
                    $cmt->context = $context;
                    $cmt->course = $course;
                    $cmt->cm = $cm;
                    $cmt->area = 'database_entry';
                    $cmt->itemid = $record->id;
                    $cmt->showcount = true;
                    $cmt->component = 'mod_data';
                    $comment = new comment($cmt);
                    $comment->output(false);
                }
            }
        }
    }
}
Пример #7
0
 /**
  * Get a user's messages read and unread.
  *
  * @param int $userid
  * @return message[]
  */
 public static function get_user_messages($userid)
 {
     global $DB;
     $select = 'm.id, m.useridfrom, m.useridto, m.subject, m.fullmessage, m.fullmessageformat, m.fullmessagehtml, ' . 'm.smallmessage, m.timecreated, m.notification, m.contexturl, m.contexturlname, ' . \user_picture::fields('u', null, 'useridfrom', 'fromuser');
     $records = $DB->get_records_sql("\n        (\n                SELECT {$select}, 1 unread\n                  FROM {message} m\n            INNER JOIN {user} u ON u.id = m.useridfrom\n                 WHERE m.useridto = ?\n                       AND contexturl IS NULL\n        ) UNION ALL (\n                SELECT {$select}, 0 unread\n                  FROM {message_read} m\n            INNER JOIN {user} u ON u.id = m.useridfrom\n                 WHERE m.useridto = ?\n                       AND contexturl IS NULL\n        )\n          ORDER BY timecreated DESC\n        ", array($userid, $userid), 0, 5);
     $messages = array();
     foreach ($records as $record) {
         $message = new message($record);
         $message->set_fromuser(\user_picture::unalias($record, null, 'useridfrom', 'fromuser'));
         $messages[] = $message;
     }
     return $messages;
 }
Пример #8
0
/**
 * Returns all users who has completed a specified feedback since a given time
 * many thanks to Manolescu Dorel, who contributed these two functions
 *
 * @global object
 * @global object
 * @global object
 * @global object
 * @uses CONTEXT_MODULE
 * @param array $activities Passed by reference
 * @param int $index Passed by reference
 * @param int $timemodified Timestamp
 * @param int $courseid
 * @param int $cmid
 * @param int $userid
 * @param int $groupid
 * @return void
 */
function feedback_get_recent_mod_activity(&$activities, &$index,
                                          $timemodified, $courseid,
                                          $cmid, $userid="", $groupid="") {

    global $CFG, $COURSE, $USER, $DB;

    if ($COURSE->id == $courseid) {
        $course = $COURSE;
    } else {
        $course = $DB->get_record('course', array('id'=>$courseid));
    }

    $modinfo = get_fast_modinfo($course);

    $cm = $modinfo->cms[$cmid];

    $sqlargs = array();

    $userfields = user_picture::fields('u', null, 'useridagain');
    $sql = " SELECT fk . * , fc . * , $userfields
                FROM {feedback_completed} fc
                    JOIN {feedback} fk ON fk.id = fc.feedback
                    JOIN {user} u ON u.id = fc.userid ";

    if ($groupid) {
        $sql .= " JOIN {groups_members} gm ON  gm.userid=u.id ";
    }

    $sql .= " WHERE fc.timemodified > ? AND fk.id = ? ";
    $sqlargs[] = $timemodified;
    $sqlargs[] = $cm->instance;

    if ($userid) {
        $sql .= " AND u.id = ? ";
        $sqlargs[] = $userid;
    }

    if ($groupid) {
        $sql .= " AND gm.groupid = ? ";
        $sqlargs[] = $groupid;
    }

    if (!$feedbackitems = $DB->get_records_sql($sql, $sqlargs)) {
        return;
    }

    $cm_context = context_module::instance($cm->id);

    if (!has_capability('mod/feedback:view', $cm_context)) {
        return;
    }

    $accessallgroups = has_capability('moodle/site:accessallgroups', $cm_context);
    $viewfullnames   = has_capability('moodle/site:viewfullnames', $cm_context);
    $groupmode       = groups_get_activity_groupmode($cm, $course);

    $aname = format_string($cm->name, true);
    foreach ($feedbackitems as $feedbackitem) {
        if ($feedbackitem->userid != $USER->id) {

            if ($groupmode == SEPARATEGROUPS and !$accessallgroups) {
                $usersgroups = groups_get_all_groups($course->id,
                                                     $feedbackitem->userid,
                                                     $cm->groupingid);
                if (!is_array($usersgroups)) {
                    continue;
                }
                $usersgroups = array_keys($usersgroups);
                $intersect = array_intersect($usersgroups, $modinfo->get_groups($cm->groupingid));
                if (empty($intersect)) {
                    continue;
                }
            }
        }

        $tmpactivity = new stdClass();

        $tmpactivity->type      = 'feedback';
        $tmpactivity->cmid      = $cm->id;
        $tmpactivity->name      = $aname;
        $tmpactivity->sectionnum= $cm->sectionnum;
        $tmpactivity->timestamp = $feedbackitem->timemodified;

        $tmpactivity->content = new stdClass();
        $tmpactivity->content->feedbackid = $feedbackitem->id;
        $tmpactivity->content->feedbackuserid = $feedbackitem->userid;

        $tmpactivity->user = user_picture::unalias($feedbackitem, null, 'useridagain');
        $tmpactivity->user->fullname = fullname($feedbackitem, $viewfullnames);

        $activities[$index++] = $tmpactivity;
    }

    return;
}
Пример #9
0
/**
 * Returns all glossary entries since a given time for specified glossary
 *
 * @param array $activities sequentially indexed array of objects
 * @param int   $index
 * @param int   $timestart
 * @param int   $courseid
 * @param int   $cmid
 * @param int   $userid defaults to 0
 * @param int   $groupid defaults to 0
 * @return void adds items into $activities and increases $index
 */
function glossary_get_recent_mod_activity(&$activities, &$index, $timestart, $courseid, $cmid, $userid = 0, $groupid = 0) {
    global $COURSE, $USER, $DB;

    if ($COURSE->id == $courseid) {
        $course = $COURSE;
    } else {
        $course = $DB->get_record('course', array('id' => $courseid));
    }

    $modinfo = get_fast_modinfo($course);
    $cm = $modinfo->cms[$cmid];
    $context = context_module::instance($cm->id);

    if (!$cm->uservisible) {
        return;
    }

    $viewfullnames = has_capability('moodle/site:viewfullnames', $context);
    // Groups are not yet supported for glossary. See MDL-10728 .
    /*
    $accessallgroups = has_capability('moodle/site:accessallgroups', $context);
    $groupmode = groups_get_activity_groupmode($cm, $course);
     */

    $params['timestart'] = $timestart;

    if ($userid) {
        $userselect = "AND u.id = :userid";
        $params['userid'] = $userid;
    } else {
        $userselect = '';
    }

    if ($groupid) {
        $groupselect = 'AND gm.groupid = :groupid';
        $groupjoin   = 'JOIN {groups_members} gm ON  gm.userid=u.id';
        $params['groupid'] = $groupid;
    } else {
        $groupselect = '';
        $groupjoin   = '';
    }

    $approvedselect = "";
    if (!has_capability('mod/glossary:approve', $context)) {
        $approvedselect = " AND ge.approved = 1 ";
    }

    $params['timestart'] = $timestart;
    $params['glossaryid'] = $cm->instance;

    $ufields = user_picture::fields('u', null, 'userid');
    $entries = $DB->get_records_sql("
              SELECT ge.id AS entryid, ge.glossaryid, ge.concept, ge.definition, ge.approved,
                     ge.timemodified, $ufields
                FROM {glossary_entries} ge
                JOIN {user} u ON u.id = ge.userid
                     $groupjoin
               WHERE ge.timemodified > :timestart
                 AND ge.glossaryid = :glossaryid
                     $approvedselect
                     $userselect
                     $groupselect
            ORDER BY ge.timemodified ASC", $params);

    if (!$entries) {
        return;
    }

    foreach ($entries as $entry) {
        // Groups are not yet supported for glossary. See MDL-10728 .
        /*
        $usersgroups = null;
        if ($entry->userid != $USER->id) {
            if ($groupmode == SEPARATEGROUPS and !$accessallgroups) {
                if (is_null($usersgroups)) {
                    $usersgroups = groups_get_all_groups($course->id, $entry->userid, $cm->groupingid);
                    if (is_array($usersgroups)) {
                        $usersgroups = array_keys($usersgroups);
                    } else {
                        $usersgroups = array();
                    }
                }
                if (!array_intersect($usersgroups, $modinfo->get_groups($cm->groupingid))) {
                    continue;
                }
            }
        }
         */

        $tmpactivity                       = new stdClass();
        $tmpactivity->user                 = user_picture::unalias($entry, null, 'userid');
        $tmpactivity->user->fullname       = fullname($tmpactivity->user, $viewfullnames);
        $tmpactivity->type                 = 'glossary';
        $tmpactivity->cmid                 = $cm->id;
        $tmpactivity->glossaryid           = $entry->glossaryid;
        $tmpactivity->name                 = format_string($cm->name, true);
        $tmpactivity->sectionnum           = $cm->sectionnum;
        $tmpactivity->timestamp            = $entry->timemodified;
        $tmpactivity->content              = new stdClass();
        $tmpactivity->content->entryid     = $entry->entryid;
        $tmpactivity->content->concept     = $entry->concept;
        $tmpactivity->content->definition  = $entry->definition;
        $tmpactivity->content->approved    = $entry->approved;

        $activities[$index++] = $tmpactivity;
    }

    return true;
}
Пример #10
0
/**
 * Returns all quiz graded users since a given time for specified quiz
 */
function quiz_get_recent_mod_activity(&$activities, &$index, $timestart, $courseid, $cmid, $userid = 0, $groupid = 0)
{
    global $CFG, $USER, $DB;
    require_once $CFG->dirroot . '/mod/quiz/locallib.php';
    $course = get_course($courseid);
    $modinfo = get_fast_modinfo($course);
    $cm = $modinfo->cms[$cmid];
    $quiz = $DB->get_record('quiz', array('id' => $cm->instance));
    if ($userid) {
        $userselect = "AND u.id = :userid";
        $params['userid'] = $userid;
    } else {
        $userselect = '';
    }
    if ($groupid) {
        $groupselect = 'AND gm.groupid = :groupid';
        $groupjoin = 'JOIN {groups_members} gm ON  gm.userid=u.id';
        $params['groupid'] = $groupid;
    } else {
        $groupselect = '';
        $groupjoin = '';
    }
    $params['timestart'] = $timestart;
    $params['quizid'] = $quiz->id;
    $ufields = user_picture::fields('u', null, 'useridagain');
    if (!($attempts = $DB->get_records_sql("\n              SELECT qa.*,\n                     {$ufields}\n                FROM {quiz_attempts} qa\n                     JOIN {user} u ON u.id = qa.userid\n                     {$groupjoin}\n               WHERE qa.timefinish > :timestart\n                 AND qa.quiz = :quizid\n                 AND qa.preview = 0\n                     {$userselect}\n                     {$groupselect}\n            ORDER BY qa.timefinish ASC", $params))) {
        return;
    }
    $context = context_module::instance($cm->id);
    $accessallgroups = has_capability('moodle/site:accessallgroups', $context);
    $viewfullnames = has_capability('moodle/site:viewfullnames', $context);
    $grader = has_capability('mod/quiz:viewreports', $context);
    $groupmode = groups_get_activity_groupmode($cm, $course);
    $usersgroups = null;
    $aname = format_string($cm->name, true);
    foreach ($attempts as $attempt) {
        if ($attempt->userid != $USER->id) {
            if (!$grader) {
                // Grade permission required.
                continue;
            }
            if ($groupmode == SEPARATEGROUPS and !$accessallgroups) {
                $usersgroups = groups_get_all_groups($course->id, $attempt->userid, $cm->groupingid);
                $usersgroups = array_keys($usersgroups);
                if (!array_intersect($usersgroups, $modinfo->get_groups($cm->groupingid))) {
                    continue;
                }
            }
        }
        $options = quiz_get_review_options($quiz, $attempt, $context);
        $tmpactivity = new stdClass();
        $tmpactivity->type = 'quiz';
        $tmpactivity->cmid = $cm->id;
        $tmpactivity->name = $aname;
        $tmpactivity->sectionnum = $cm->sectionnum;
        $tmpactivity->timestamp = $attempt->timefinish;
        $tmpactivity->content = new stdClass();
        $tmpactivity->content->attemptid = $attempt->id;
        $tmpactivity->content->attempt = $attempt->attempt;
        if (quiz_has_grades($quiz) && $options->marks >= question_display_options::MARK_AND_MAX) {
            $tmpactivity->content->sumgrades = quiz_format_grade($quiz, $attempt->sumgrades);
            $tmpactivity->content->maxgrade = quiz_format_grade($quiz, $quiz->sumgrades);
        } else {
            $tmpactivity->content->sumgrades = null;
            $tmpactivity->content->maxgrade = null;
        }
        $tmpactivity->user = user_picture::unalias($attempt, null, 'useridagain');
        $tmpactivity->user->fullname = fullname($tmpactivity->user, $viewfullnames);
        $activities[$index++] = $tmpactivity;
    }
}
Пример #11
0
 /**
  * Prepares column userpic for display
  * @param stdClass $row
  * @return string
  */
 public function col_userpic($row)
 {
     global $OUTPUT;
     $user = user_picture::unalias($row, [], $this->useridfield);
     return $OUTPUT->user_picture($user, array('courseid' => $this->feedbackstructure->get_cm()->course));
 }
Пример #12
0
 /**
  * Helper function for creating a contact object.
  *
  * @param \stdClass $contact
  * @param string $prefix
  * @return \stdClass
  */
 public static function create_contact($contact, $prefix = '')
 {
     global $PAGE;
     // Create the data we are going to pass to the renderable.
     $userfields = \user_picture::unalias($contact, array('lastaccess'), $prefix . 'id', $prefix);
     $data = new \stdClass();
     $data->userid = $userfields->id;
     $data->useridfrom = null;
     $data->fullname = fullname($userfields);
     // Get the user picture data.
     $userpicture = new \user_picture($userfields);
     $userpicture->size = 1;
     // Size f1.
     $data->profileimageurl = $userpicture->get_url($PAGE)->out(false);
     $userpicture->size = 0;
     // Size f2.
     $data->profileimageurlsmall = $userpicture->get_url($PAGE)->out(false);
     // Store the message if we have it.
     $data->ismessaging = false;
     $data->lastmessage = null;
     $data->messageid = null;
     if (isset($contact->smallmessage)) {
         $data->ismessaging = true;
         // Strip the HTML tags from the message for displaying in the contact area.
         $data->lastmessage = clean_param($contact->smallmessage, PARAM_NOTAGS);
         $data->useridfrom = $contact->useridfrom;
         if (isset($contact->messageid)) {
             $data->messageid = $contact->messageid;
         }
     }
     // Check if the user is online.
     $data->isonline = self::is_online($userfields->lastaccess);
     $data->isblocked = isset($contact->blocked) ? (bool) $contact->blocked : false;
     $data->isread = isset($contact->isread) ? (bool) $contact->isread : false;
     $data->unreadcount = isset($contact->unreadcount) ? $contact->unreadcount : null;
     return $data;
 }
Пример #13
0
 /**
  * Get a user's messages read and unread.
  *
  * @param int $userid
  * @param int $since optional timestamp, only return newer messages
  * @return message[]
  */
 public static function get_user_messages($userid, $since = null)
 {
     global $DB;
     if ($since === null) {
         $since = time() - 12 * WEEKSECS;
     }
     $select = 'm.id, m.useridfrom, m.useridto, m.subject, m.fullmessage, m.fullmessageformat, m.fullmessagehtml, ' . 'm.smallmessage, m.timecreated, m.notification, m.contexturl, m.contexturlname, ' . \user_picture::fields('u', null, 'useridfrom', 'fromuser');
     $sql = "\n        (\n                SELECT {$select}, 1 unread\n                  FROM {message} m\n            INNER JOIN {user} u ON u.id = m.useridfrom AND u.deleted = 0\n                 WHERE m.useridto = :userid1\n                       AND contexturl IS NULL\n                       AND m.timecreated > :fromdate1\n                       AND m.timeusertodeleted = 0\n        ) UNION ALL (\n                SELECT {$select}, 0 unread\n                  FROM {message_read} m\n            INNER JOIN {user} u ON u.id = m.useridfrom AND u.deleted = 0\n                 WHERE m.useridto = :userid2\n                       AND contexturl IS NULL\n                       AND m.timecreated > :fromdate2\n                       AND m.timeusertodeleted = 0\n        )\n          ORDER BY timecreated DESC";
     $params = array('userid1' => $userid, 'userid2' => $userid, 'fromdate1' => $since, 'fromdate2' => $since);
     $records = $DB->get_records_sql($sql, $params, 0, 5);
     $messages = array();
     foreach ($records as $record) {
         $message = new message($record);
         $message->set_fromuser(\user_picture::unalias($record, null, 'useridfrom', 'fromuser'));
         $messages[] = $message;
     }
     return $messages;
 }
Пример #14
0
 /**
  * Retrieve a user object from a record.
  *
  * This comes handy when {@link self::add_user_fields} was used.
  *
  * @param stdClass $record The record.
  * @return stdClass A user object.
  */
 public static function get_user_from_record($record)
 {
     return user_picture::unalias($record, null, 'userdataid', 'userdata');
 }
Пример #15
0
    $table->attributes['class'] = 'generaltable contributionlist submitted';
    $table->head = array(get_string('contribid', 'local_amos'), get_string('contribstatus', 'local_amos'), get_string('contribsubject', 'local_amos'), get_string('contribtimemodified', 'local_amos'), get_string('contribassignee', 'local_amos'), get_string('language', 'local_amos'), get_string('strings', 'local_amos'));
    $table->colclasses = array('id', 'status', 'subject', 'timemodified', 'assignee', 'language', 'strings');
    foreach ($contributions as $contribution) {
        $url = new moodle_url($PAGE->url, array('id' => $contribution->id));
        $cells = array();
        $cells[] = new html_table_cell(html_writer::link($url, '#' . $contribution->id));
        $status = get_string('contribstatus' . $contribution->status, 'local_amos');
        $cells[] = new html_table_cell(html_writer::link($url, $status));
        $cells[] = new html_table_cell(html_writer::link($url, s($contribution->subject)));
        $time = is_null($contribution->timemodified) ? $contribution->timecreated : $contribution->timemodified;
        $cells[] = new html_table_cell(userdate($time, get_string('strftimedaydatetime', 'langconfig')));
        if (is_null($contribution->assigneeid)) {
            $assignee = get_string('contribassigneenone', 'local_amos');
        } else {
            $assignee = new user_picture(user_picture::unalias($contribution, null, 'assigneeid', 'assignee'));
            $assignee->size = 16;
            $assignee = $output->render($assignee) . s(fullname($assignee->user));
        }
        $cells[] = new html_table_cell($assignee);
        $cells[] = new html_table_cell(s($contribution->lang));
        $cells[] = new html_table_cell(s($contribution->strings));
        $row = new html_table_row($cells);
        $row->attributes['class'] = 'status' . $contribution->status;
        $table->data[] = $row;
    }
    echo $output->heading(get_string('contribsubmittedsome', 'local_amos', count($contributions)));
    echo html_writer::table($table);
}
if ($closed) {
    echo $output->single_button(new moodle_url($PAGE->url, array('closed' => false)), get_string('contribclosedno', 'local_amos'), 'get', array('class' => 'singlebutton showclosed'));
Пример #16
0
 public function col_userpic($row)
 {
     global $OUTPUT;
     return $OUTPUT->user_picture(user_picture::unalias($row, null, 'id'));
 }