function display_add_field($recordid = 0, $formdata = null) { global $CFG, $DB, $OUTPUT; if ($formdata) { $fieldname = 'field_' . $this->field->id; if (isset($formdata->$fieldname)) { $content = $formdata->$fieldname; } else { $content = ''; } } else if ($recordid) { $content = trim($DB->get_field('data_content', 'content', array('fieldid'=>$this->field->id, 'recordid'=>$recordid))); } else { $content = ''; } $str = '<div title="' . s($this->field->description) . '">'; $str .= '<fieldset><legend><span class="accesshide">' . $this->field->name; if ($this->field->required) { $str .= ' ' . get_string('requiredelement', 'form') . '</span></legend>'; $image = html_writer::img($OUTPUT->pix_url('req'), get_string('requiredelement', 'form'), array('class' => 'req', 'title' => get_string('requiredelement', 'form'))); $str .= html_writer::div($image, 'inline-req'); } else { $str .= '</span></legend>'; } $i = 0; $requiredstr = ''; $options = explode("\n", $this->field->param1); foreach ($options as $radio) { $radio = trim($radio); if ($radio === '') { continue; // skip empty lines } $str .= '<input type="radio" id="field_'.$this->field->id.'_'.$i.'" name="field_' . $this->field->id . '" '; $str .= 'value="' . s($radio) . '" class="mod-data-input m-r-1" '; if ($content == $radio) { // Selected by user. $str .= 'checked />'; } else { $str .= '/>'; } $str .= '<label for="field_'.$this->field->id.'_'.$i.'">'.$radio.'</label><br />'; $i++; } $str .= '</fieldset>'; $str .= '</div>'; return $str; }
function display_add_field($recordid = 0, $formdata = null) { global $DB, $OUTPUT; if ($formdata) { $fieldname = 'field_' . $this->field->id; $content = $formdata->{$fieldname}; } else { if ($recordid) { $content = $DB->get_field('data_content', 'content', array('fieldid' => $this->field->id, 'recordid' => $recordid)); $content = trim($content); } else { $content = ''; } } $str = '<div title="' . s($this->field->description) . '">'; $options = array(); $rawoptions = explode("\n", $this->field->param1); foreach ($rawoptions as $option) { $option = trim($option); if (strlen($option) > 0) { $options[$option] = $option; } } $str .= '<label for="' . 'field_' . $this->field->id . '">'; $str .= html_writer::span($this->field->name, 'accesshide'); if ($this->field->required) { $image = html_writer::img($OUTPUT->pix_url('req'), get_string('requiredelement', 'form'), array('class' => 'req', 'title' => get_string('requiredelement', 'form'))); $str .= html_writer::div($image, 'inline-req'); } $str .= '</label>'; $str .= html_writer::select($options, 'field_' . $this->field->id, $content, array('' => get_string('menuchoose', 'data')), array('id' => 'field_' . $this->field->id, 'class' => 'mod-data-input custom-select')); $str .= '</div>'; return $str; }
function display_add_field($recordid = 0, $formdata = null) { global $CFG, $DB, $OUTPUT, $PAGE; require_once $CFG->dirroot . '/repository/lib.php'; // necessary for the constants used in args $args = new stdClass(); $args->accepted_types = '*'; $args->return_types = FILE_EXTERNAL; $args->context = $this->context; $args->env = 'url'; $fp = new file_picker($args); $options = $fp->options; $fieldid = 'field_url_' . $options->client_id; $straddlink = get_string('choosealink', 'repository'); $url = ''; $text = ''; if ($formdata) { $fieldname = 'field_' . $this->field->id . '_0'; $url = $formdata->{$fieldname}; $fieldname = 'field_' . $this->field->id . '_1'; if (isset($formdata->{$fieldname})) { $text = $formdata->{$fieldname}; } } else { if ($recordid) { if ($content = $DB->get_record('data_content', array('fieldid' => $this->field->id, 'recordid' => $recordid))) { $url = $content->content; $text = $content->content1; } } } $str = '<div title="' . s($this->field->description) . '">'; $label = '<label for="' . $fieldid . '"><span class="accesshide">' . $this->field->name . '</span>'; if ($this->field->required) { $label .= html_writer::img($OUTPUT->pix_url('req'), get_string('requiredelement', 'form'), array('class' => 'req', 'title' => get_string('requiredelement', 'form'))); } $label .= '</label>'; if (!empty($this->field->param1) and empty($this->field->param2)) { $str .= '<table><tr><td align="right">'; $str .= get_string('url', 'data') . ':</td><td>'; $str .= $label; $str .= '<input type="text" name="field_' . $this->field->id . '_0" id="' . $fieldid . '" value="' . $url . '" size="60" />'; $str .= '<button id="filepicker-button-' . $options->client_id . '" style="display:none">' . $straddlink . '</button></td></tr>'; $str .= '<tr><td align="right">' . get_string('text', 'data') . ':</td><td><input type="text" name="field_' . $this->field->id . '_1" id="field_' . $this->field->id . '_1" value="' . s($text) . '" size="60" /></td></tr>'; $str .= '</table>'; } else { // Just the URL field $str .= $label; $str .= '<input type="text" name="field_' . $this->field->id . '_0" id="' . $fieldid . '" value="' . s($url) . '" size="60" />'; if (count($options->repositories) > 0) { $str .= '<button id="filepicker-button-' . $options->client_id . '" class="visibleifjs">' . $straddlink . '</button>'; } } // print out file picker //$str .= $OUTPUT->render($fp); $module = array('name' => 'data_urlpicker', 'fullpath' => '/mod/data/data.js', 'requires' => array('core_filepicker')); $PAGE->requires->js_init_call('M.data_urlpicker.init', array($options), true, $module); $str .= '</div>'; return $str; }
function display_add_field($recordid = 0, $formdata = null) { global $DB, $OUTPUT; if ($formdata) { $fieldname = 'field_' . $this->field->id; if (isset($formdata->$fieldname)) { $content = $formdata->$fieldname; } else { $content = array(); } } else if ($recordid) { $content = $DB->get_field('data_content', 'content', array('fieldid'=>$this->field->id, 'recordid'=>$recordid)); $content = explode('##', $content); } else { $content = array(); } $str = '<div title="'.s($this->field->description).'">'; $str .= '<input name="field_' . $this->field->id . '[xxx]" type="hidden" value="xxx"/>'; // hidden field - needed for empty selection $str .= '<label for="field_' . $this->field->id . '" class="accesshide">'; $str .= html_writer::span($this->field->name); if ($this->field->required) { $str .= '<div class="inline-req">'; $str .= html_writer::img($OUTPUT->pix_url('req'), get_string('requiredelement', 'form'), array('class' => 'req', 'title' => get_string('requiredelement', 'form'))); $str .= '</div>'; } $str .= '</label>'; $str .= '<select name="field_' . $this->field->id . '[]" id="field_' . $this->field->id . '"'; $str .= ' multiple="multiple" class="mod-data-input form-control">'; foreach (explode("\n", $this->field->param1) as $option) { $option = trim($option); $str .= '<option value="' . s($option) . '"'; if (in_array($option, $content)) { // Selected by user. $str .= ' selected = "selected"'; } $str .= '>'; $str .= $option . '</option>'; } $str .= '</select>'; $str .= '</div>'; return $str; }
function display_add_field($recordid = 0, $formdata = null) { global $CFG, $DB, $OUTPUT; $content = array(); if ($formdata) { $fieldname = 'field_' . $this->field->id; $content = $formdata->$fieldname; } else if ($recordid) { $content = $DB->get_field('data_content', 'content', array('fieldid'=>$this->field->id, 'recordid'=>$recordid)); $content = explode('##', $content); } else { $content = array(); } $str = '<div title="' . s($this->field->description) . '">'; $str .= '<fieldset><legend><span class="accesshide">'.$this->field->name; if ($this->field->required) { $str .= '$nbsp;' . get_string('requiredelement', 'form'); $str .= '</span></legend>'; $image = html_writer::img($OUTPUT->pix_url('req'), get_string('requiredelement', 'form'), array('class' => 'req', 'title' => get_string('requiredelement', 'form'))); $str .= html_writer::div($image, 'inline-req'); } else { $str .= '</span></legend>'; } $i = 0; foreach (explode("\n", $this->field->param1) as $checkbox) { $checkbox = trim($checkbox); if ($checkbox === '') { continue; // skip empty lines } $str .= '<input type="hidden" name="field_' . $this->field->id . '[]" value="" />'; $str .= '<input type="checkbox" id="field_'.$this->field->id.'_'.$i.'" name="field_' . $this->field->id . '[]" '; $str .= 'value="' . s($checkbox) . '" class="mod-data-input m-r-1" '; if (array_search($checkbox, $content) !== false) { $str .= 'checked />'; } else { $str .= '/>'; } $str .= '<label for="field_'.$this->field->id.'_'.$i.'">'.$checkbox.'</label><br />'; $i++; } $str .= '</fieldset>'; $str .= '</div>'; return $str; }
function display_add_field($recordid = 0, $formdata = null) { global $CFG, $DB, $OUTPUT; $lat = ''; $long = ''; if ($formdata) { $fieldname = 'field_' . $this->field->id . '_0'; $lat = $formdata->$fieldname; $fieldname = 'field_' . $this->field->id . '_1'; $long = $formdata->$fieldname; } else if ($recordid) { if ($content = $DB->get_record('data_content', array('fieldid'=>$this->field->id, 'recordid'=>$recordid))) { $lat = $content->content; $long = $content->content1; } } $str = '<div title="'.s($this->field->description).'">'; $str .= '<fieldset><legend><span class="accesshide">'.$this->field->name.'</span></legend>'; $str .= '<table class="form-inline"><tr><td align="right">'; $classes = 'mod-data-input form-control-static'; $str .= '<label for="field_'.$this->field->id.'_0" class="' . $classes . '">' . get_string('latitude', 'data'); if ($this->field->required) { $str .= html_writer::img($OUTPUT->pix_url('req'), get_string('requiredelement', 'form'), array('class' => 'req', 'title' => get_string('requiredelement', 'form'))); } $classes = 'form-control m-x-1'; $str .= '</label></td><td>'; $str .= '<input class="' . $classes . '" type="text" name="field_'.$this->field->id.'_0" '; $str .= ' id="field_'.$this->field->id.'_0" value="'; $str .= s($lat).'" size="10" />°N</td></tr>'; $classes = 'mod-data-input form-control-static'; $str .= '<tr><td align="right"><label for="field_'.$this->field->id.'_1" class="' . $classes . '">'; $str .= get_string('longitude', 'data'); if ($this->field->required) { $str .= html_writer::img($OUTPUT->pix_url('req'), get_string('requiredelement', 'form'), array('class' => 'req', 'title' => get_string('requiredelement', 'form'))); } $classes = 'form-control m-x-1'; $str .= '</label></td><td><input class="' . $classes . '" type="text" '; $str .= 'name="field_'.$this->field->id.'_1" id="field_'.$this->field->id.'_1" value="'; $str .= s($long).'" size="10" />°E</td>'; $str .= '</tr>'; $str .= '</table>'; $str .= '</fieldset>'; $str .= '</div>'; return $str; }
public function get_content() { global $DB, $CFG, $OUTPUT; if ($this->content !== null) { return $this->content; } $this->content = new stdClass(); $this->content->text = ''; $courses = $DB->get_records('course'); //$this->content->text .= html_writer::start_tag('div',array('class' => 'span12')); foreach ($courses as $course) { $this->content->text .= html_writer::start_tag('div', array('class' => 'content font-recent span3')); $this->content->text .= html_writer::tag('a', $course->fullname, array('class' => 'font-recent', 'href' => $CFG->wwwroot . '/course/view.php?id=' . $course->id)); $this->content->text .= html_writer::img($CFG->wwwroot . '/pluginfile.php/27/course/overviewfiles/hinh1.jpg', '', array('class' => 'font-recent-image')); $this->content->text .= html_writer::end_tag('div'); } //$this->content->text .= html_writer::end_tag('div'); return $this->content; }
public function render_databasebookmarks($bookmarks) { $output = ''; $bookmarkslinks = array(); foreach ($bookmarks as $bookmark) { $bookmarkmarkup = ''; $url = new moodle_url("/mod/data/view.php", array('d' => $bookmark->instanceid, 'rid' => $bookmark->recordid)); $label = $bookmark->bookmarkname; $bookmarklink = html_writer::link($url, $label); $bookmarkmarkup .= html_writer::span($bookmarklink, 'bookmarklink'); $iconenrolremove = $this->output->pix_url('t/delete'); $iconimg = html_writer::img($iconenrolremove, get_string('delete')); $deletelink = html_writer::link('#', $iconimg, array('data-rid' => $bookmark->recordid, 'data-action' => 'delete', 'class' => 'data_deletebookmark_link')); $bookmarkmarkup .= html_writer::span($deletelink, 'deletelink'); $bookmarkslinks[] = $bookmarkmarkup; } $output .= html_writer::alist($bookmarkslinks, array('class' => 'block_databasebookmarks_bookmarklist')); return $output; }
/** * Returns the navigation bar home reference. * * The small logo is only rendered on pages where the logo is not displayed. * * @param bool $returnlink Whether to wrap the icon and the site name in links or not * @return string The site name, the small logo or both depending on the theme settings. */ public function navbar_home($returnlink = true) { global $CFG; if ($this->should_render_logo() || empty($this->page->theme->settings->smalllogo)) { // If there is no small logo we always show the site name. return $this->get_home_ref($returnlink); } $imageurl = $this->page->theme->setting_file_url('smalllogo', 'smalllogo'); $image = html_writer::img($imageurl, get_string('sitelogo', 'theme_' . $this->page->theme->name), array('class' => 'small-logo')); if ($returnlink) { $logocontainer = html_writer::link(new moodle_url('/'), $image, array('class' => 'small-logo-container', 'title' => get_string('home'))); } else { $logocontainer = html_writer::tag('span', $image, array('class' => 'small-logo-container')); } // Sitename setting defaults to true. if (!isset($this->page->theme->settings->sitename) || !empty($this->page->theme->settings->sitename)) { return $logocontainer . $this->get_home_ref($returnlink); } return $logocontainer; }
/** * Get page module html * @param cm_info $mod * @return string */ protected function mod_page_html(cm_info $mod) { if (!$mod->uservisible) { return ""; } $page = \theme_snap\local::get_page_mod($mod); $imgarr = \theme_snap\local::extract_first_image($page->content); $thumbnail = ''; if ($imgarr) { $img = html_writer::img($imgarr['src'], $imgarr['alt']); $thumbnail = "<div class=summary-figure>{$img}</div>"; } $readmore = get_string('readmore', 'theme_snap'); $close = get_string('close', 'theme_snap'); // Identify content elements which should force an AJAX lazy load. $elcontentblist = ['iframe', 'video', 'object', 'embed']; $content = $page->content; $lazyload = false; foreach ($elcontentblist as $el) { if (stripos($content, '<' . $el) !== false) { $content = ''; // Don't include the content as it is likely to slow the page load down considerably. $lazyload = true; } } $contentloaded = !$lazyload ? 1 : 0; $o = "\n {$thumbnail}\n <div class='summary-text'>\n {$page->summary}\n <p><a class='pagemod-readmore' href='{$mod->url}' data-pagemodcontext='{$mod->context->id}'>{$readmore}</a></p>\n </div>\n\n <div class=pagemod-content tabindex='-1' data-content-loaded={$contentloaded}>\n {$content}\n <div><hr><a class='snap-action-icon' href='#'>\n <i class='icon icon-office-52'></i><small>{$close}</small></a></div>\n </div>"; return $o; }
/** * Returns html for the atom and rss feeds. * * @param string $atomurl * @param string $rssurl * @return string */ public function ouwiki_get_feeds($atomurl, $rssurl) { $a = new stdClass(); $a->atom = $atomurl; $a->rss = $rssurl; $url = str_replace('&', '&', $atomurl); $rssicon = html_writer::img($this->output->pix_url('rss', 'ouwiki'), ''); $rsslink = html_writer::link($url, $rssicon, array('title' => get_string('feedalt', 'ouwiki'))); $content = html_writer::span(get_string('feedsubscribe', 'ouwiki', $a)); return html_writer::tag('p', $rsslink . $content, array('class' => 'ouw_subscribe')); }
/** * Returns icon of element * * @param array &$element An array representing an element in the grade_tree * @param bool $spacerifnone return spacer if no icon found * * @return string icon or spacer */ public function get_element_icon(&$element, $spacerifnone=false) { global $CFG, $OUTPUT; require_once $CFG->libdir.'/filelib.php'; $outputstr = ''; // Object holding pix_icon information before instantiation. $icon = new stdClass(); $icon->attributes = array( 'class' => 'icon itemicon' ); $icon->component = 'moodle'; $none = true; switch ($element['type']) { case 'item': case 'courseitem': case 'categoryitem': $none = false; $is_course = $element['object']->is_course_item(); $is_category = $element['object']->is_category_item(); $is_scale = $element['object']->gradetype == GRADE_TYPE_SCALE; $is_value = $element['object']->gradetype == GRADE_TYPE_VALUE; $is_outcome = !empty($element['object']->outcomeid); if ($element['object']->is_calculated()) { $icon->pix = 'i/calc'; $icon->title = s(get_string('calculatedgrade', 'grades')); } else if (($is_course or $is_category) and ($is_scale or $is_value)) { if ($category = $element['object']->get_item_category()) { $aggrstrings = grade_helper::get_aggregation_strings(); $stragg = $aggrstrings[$category->aggregation]; $icon->pix = 'i/calc'; $icon->title = s($stragg); switch ($category->aggregation) { case GRADE_AGGREGATE_MEAN: case GRADE_AGGREGATE_MEDIAN: case GRADE_AGGREGATE_WEIGHTED_MEAN: case GRADE_AGGREGATE_WEIGHTED_MEAN2: case GRADE_AGGREGATE_EXTRACREDIT_MEAN: $icon->pix = 'i/agg_mean'; break; case GRADE_AGGREGATE_SUM: $icon->pix = 'i/agg_sum'; break; } } } else if ($element['object']->itemtype == 'mod') { // Prevent outcomes displaying the same icon as the activity they are attached to. if ($is_outcome) { $icon->pix = 'i/outcomes'; $icon->title = s(get_string('outcome', 'grades')); } else { $modinfo = get_fast_modinfo($element['object']->courseid); $module = $element['object']->itemmodule; $instanceid = $element['object']->iteminstance; if (isset($modinfo->instances[$module][$instanceid])) { $icon->url = $modinfo->instances[$module][$instanceid]->get_icon_url(); } else { $icon->pix = 'icon'; $icon->component = $element['object']->itemmodule; } $icon->title = s(get_string('modulename', $element['object']->itemmodule)); } } else if ($element['object']->itemtype == 'manual') { if ($element['object']->is_outcome_item()) { $icon->pix = 'i/outcomes'; $icon->title = s(get_string('outcome', 'grades')); } else { $icon->pix = 'i/manual_item'; $icon->title = s(get_string('manualitem', 'grades')); } } break; case 'category': $none = false; $icon->pix = 'i/folder'; $icon->title = s(get_string('category', 'grades')); break; } if ($none) { if ($spacerifnone) { $outputstr = $OUTPUT->spacer() . ' '; } } else if (isset($icon->url)) { $outputstr = html_writer::img($icon->url, $icon->title, $icon->attributes); } else { $outputstr = $OUTPUT->pix_icon($icon->pix, $icon->title, $icon->component, $icon->attributes); } return $outputstr; }
public static function grading() { global $USER, $PAGE; $grading = self::all_ungraded($USER->id); if (empty($grading)) { return '<p>' . get_string('nograding', 'theme_snap') . '</p>'; } $output = $PAGE->get_renderer('theme_snap', 'core', RENDERER_TARGET_GENERAL); $out = ''; foreach ($grading as $ungraded) { $modinfo = get_fast_modinfo($ungraded->course); $course = $modinfo->get_course(); $cm = $modinfo->get_cm($ungraded->coursemoduleid); $modimageurl = $output->pix_url('icon', $cm->modname); $modname = get_string('modulename', 'mod_' . $cm->modname); $modimage = \html_writer::img($modimageurl, $modname); $ungradedtitle = "<small>{$course->fullname} / </small> {$cm->name}"; $xungraded = get_string('xungraded', 'theme_snap', $ungraded->ungraded); $function = '\\theme_snap\\activity::' . $cm->modname . '_num_submissions'; $a['completed'] = call_user_func($function, $ungraded->course, $ungraded->instanceid); $a['participants'] = self::course_participant_count($ungraded->course, $cm->modname); $xofysubmitted = get_string('xofysubmitted', 'theme_snap', $a); $info = '<span class="label label-info">' . $xofysubmitted . ', ' . $xungraded . '</span>'; $meta = ''; if (!empty($ungraded->closetime)) { $meta = $output->friendly_datetime($ungraded->closetime); } $out .= $output->snap_media_object($cm->url, $modimage, $ungradedtitle, $meta, $info); } return $out; }
/** * Returns an object containing HTML for the areas affected by settings. * * Do not add mmcmonkwearmouth specific logic in here, child themes should be able to * rely on that function just by declaring settings with similar names. * * @param renderer_base $output Pass in $OUTPUT. * @param moodle_page $page Pass in $PAGE. * @return stdClass An object with the following properties: * - navbarclass A CSS class to use on the navbar. By default ''. * - heading HTML to use for the heading. A logo if one is selected or the default heading. * - footnote HTML to use as a footnote. By default ''. */ function theme_mmcmonkwearmouth_get_html_for_settings(renderer_base $output, moodle_page $page) { global $CFG; $toReturn = new stdClass(); $toReturn->navbarclass = ''; if (!empty($page->theme->settings->logo)) { $toReturn->heading = html_writer::link($CFG->wwwroot, html_writer::img($output->pix_url('logo', 'theme'), 'logo', array('title' => get_string('home'), 'class' => 'logo')) . html_writer::tag('h3', 'Monkwearmouth Academy')); } else { $toReturn->heading = $output->page_heading(); } $toReturn->footnote = ''; if (!empty($page->theme->settings->footnote)) { $toReturn->footnote = '<div class="footnote text-center">' . format_text($page->theme->settings->footnote) . '</div>'; } return $toReturn; }
function display_add_field($recordid = 0, $formdata = null) { global $CFG, $DB, $OUTPUT, $PAGE, $USER; $file = false; $content = false; $displayname = ''; $fs = get_file_storage(); $context = $PAGE->context; $itemid = null; // editing an existing database entry if ($formdata) { $fieldname = 'field_' . $this->field->id . '_file'; $itemid = $formdata->{$fieldname}; } else { if ($recordid) { if ($content = $DB->get_record('data_content', array('fieldid' => $this->field->id, 'recordid' => $recordid))) { file_prepare_draft_area($itemid, $this->context->id, 'mod_data', 'content', $content->id); if (!empty($content->content)) { if ($file = $fs->get_file($this->context->id, 'mod_data', 'content', $content->id, '/', $content->content)) { $usercontext = context_user::instance($USER->id); if (!($files = $fs->get_area_files($usercontext->id, 'user', 'draft', $itemid, 'id DESC', false))) { return false; } if (empty($content->content1)) { // Print icon if file already exists $src = moodle_url::make_draftfile_url($itemid, '/', $file->get_filename()); $displayname = $OUTPUT->pix_icon(file_file_icon($file), get_mimetype_description($file), 'moodle', array('class' => 'icon')) . '<a href="' . $src . '" >' . s($file->get_filename()) . '</a>'; } else { $displayname = 'no file added'; } } } } } else { $itemid = file_get_unused_draft_itemid(); } } // database entry label $html = '<div title="' . s($this->field->description) . '">'; $html .= '<fieldset><legend><span class="accesshide">' . $this->field->name; if ($this->field->required) { $html .= ' ' . get_string('requiredelement', 'form') . '</span></legend>'; $image = html_writer::img($OUTPUT->pix_url('req'), get_string('requiredelement', 'form'), array('class' => 'req', 'title' => get_string('requiredelement', 'form'))); $html .= html_writer::div($image, 'inline-req'); } else { $html .= '</span></legend>'; } // itemid element $html .= '<input type="hidden" name="field_' . $this->field->id . '_file" value="' . $itemid . '" />'; $options = new stdClass(); $options->maxbytes = $this->field->param3; $options->maxfiles = 1; // Limit to one file for the moment, this may be changed if requested as a feature in the future. $options->itemid = $itemid; $options->accepted_types = '*'; $options->return_types = FILE_INTERNAL; $options->context = $PAGE->context; $fm = new form_filemanager($options); // Print out file manager. $output = $PAGE->get_renderer('core', 'files'); $html .= '<div class="mod-data-input">'; $html .= $output->render($fm); $html .= '</div>'; $html .= '</fieldset>'; $html .= '</div>'; return $html; }
/** * displays the full report * @param \stdClass $scorm full SCORM object * @param \stdClass $cm - full course_module object * @param \stdClass $course - full course object * @param string $download - type of download being requested */ public function display($scorm, $cm, $course, $download) { global $CFG, $DB, $OUTPUT, $PAGE; $contextmodule = \context_module::instance($cm->id); $action = optional_param('action', '', PARAM_ALPHA); $attemptids = optional_param_array('attemptid', array(), PARAM_RAW); $attemptsmode = optional_param('attemptsmode', SCORM_REPORT_ATTEMPTS_ALL_STUDENTS, PARAM_INT); $PAGE->set_url(new \moodle_url($PAGE->url, array('attemptsmode' => $attemptsmode))); if ($action == 'delete' && has_capability('mod/scorm:deleteresponses', $contextmodule) && confirm_sesskey()) { if (scorm_delete_responses($attemptids, $scorm)) { // Delete responses. echo $OUTPUT->notification(get_string('scormresponsedeleted', 'scorm'), 'notifysuccess'); } } // Find out current groups mode. $currentgroup = groups_get_activity_group($cm, true); // Detailed report. $mform = new \mod_scorm_report_objectives_settings($PAGE->url, compact('currentgroup')); if ($fromform = $mform->get_data()) { $pagesize = $fromform->pagesize; $showobjectivescore = $fromform->objectivescore; set_user_preference('scorm_report_pagesize', $pagesize); set_user_preference('scorm_report_objectives_score', $showobjectivescore); } else { $pagesize = get_user_preferences('scorm_report_pagesize', 0); $showobjectivescore = get_user_preferences('scorm_report_objectives_score', 0); } if ($pagesize < 1) { $pagesize = SCORM_REPORT_DEFAULT_PAGE_SIZE; } // Select group menu. $displayoptions = array(); $displayoptions['attemptsmode'] = $attemptsmode; $displayoptions['objectivescore'] = $showobjectivescore; $mform->set_data($displayoptions + array('pagesize' => $pagesize)); if ($groupmode = groups_get_activity_groupmode($cm)) { // Groups are being used. if (!$download) { groups_print_activity_menu($cm, new \moodle_url($PAGE->url, $displayoptions)); } } $formattextoptions = array('context' => \context_course::instance($course->id)); // We only want to show the checkbox to delete attempts // if the user has permissions and if the report mode is showing attempts. $candelete = has_capability('mod/scorm:deleteresponses', $contextmodule) && $attemptsmode != SCORM_REPORT_ATTEMPTS_STUDENTS_WITH_NO; // Select the students. $nostudents = false; if (empty($currentgroup)) { // All users who can attempt scoes. if (!($students = get_users_by_capability($contextmodule, 'mod/scorm:savetrack', 'u.id', '', '', '', '', '', false))) { echo $OUTPUT->notification(get_string('nostudentsyet')); $nostudents = true; $allowedlist = ''; } else { $allowedlist = array_keys($students); } unset($students); } else { // All users who can attempt scoes and who are in the currently selected group. $groupstudents = get_users_by_capability($contextmodule, 'mod/scorm:savetrack', 'u.id', '', '', '', $currentgroup, '', false); if (!$groupstudents) { echo $OUTPUT->notification(get_string('nostudentsingroup')); $nostudents = true; $groupstudents = array(); } $allowedlist = array_keys($groupstudents); unset($groupstudents); } if (!$nostudents) { // Now check if asked download of data. $coursecontext = \context_course::instance($course->id); if ($download) { $filename = clean_filename("{$course->shortname} " . format_string($scorm->name, true, $formattextoptions)); } // Define table columns. $columns = array(); $headers = array(); if (!$download && $candelete) { $columns[] = 'checkbox'; $headers[] = null; } if (!$download && $CFG->grade_report_showuserimage) { $columns[] = 'picture'; $headers[] = ''; } $columns[] = 'fullname'; $headers[] = get_string('name'); $extrafields = get_extra_user_fields($coursecontext); foreach ($extrafields as $field) { $columns[] = $field; $headers[] = get_user_field_name($field); } $columns[] = 'attempt'; $headers[] = get_string('attempt', 'scorm'); $columns[] = 'start'; $headers[] = get_string('started', 'scorm'); $columns[] = 'finish'; $headers[] = get_string('last', 'scorm'); $columns[] = 'score'; $headers[] = get_string('score', 'scorm'); $scoes = $DB->get_records('scorm_scoes', array("scorm" => $scorm->id), 'sortorder, id'); foreach ($scoes as $sco) { if ($sco->launch != '') { $columns[] = 'scograde' . $sco->id; $headers[] = format_string($sco->title, '', $formattextoptions); } } $params = array(); list($usql, $params) = $DB->get_in_or_equal($allowedlist, SQL_PARAMS_NAMED); // Construct the SQL. $select = 'SELECT DISTINCT ' . $DB->sql_concat('u.id', '\'#\'', 'COALESCE(st.attempt, 0)') . ' AS uniqueid, '; $select .= 'st.scormid AS scormid, st.attempt AS attempt, ' . \user_picture::fields('u', array('idnumber'), 'userid') . get_extra_user_fields_sql($coursecontext, 'u', '', array('email', 'idnumber')) . ' '; // This part is the same for all cases - join users and scorm_scoes_track tables. $from = 'FROM {user} u '; $from .= 'LEFT JOIN {scorm_scoes_track} st ON st.userid = u.id AND st.scormid = ' . $scorm->id; switch ($attemptsmode) { case SCORM_REPORT_ATTEMPTS_STUDENTS_WITH: // Show only students with attempts. $where = ' WHERE u.id ' . $usql . ' AND st.userid IS NOT NULL'; break; case SCORM_REPORT_ATTEMPTS_STUDENTS_WITH_NO: // Show only students without attempts. $where = ' WHERE u.id ' . $usql . ' AND st.userid IS NULL'; break; case SCORM_REPORT_ATTEMPTS_ALL_STUDENTS: // Show all students with or without attempts. $where = ' WHERE u.id ' . $usql . ' AND (st.userid IS NOT NULL OR st.userid IS NULL)'; break; } $countsql = 'SELECT COUNT(DISTINCT(' . $DB->sql_concat('u.id', '\'#\'', 'COALESCE(st.attempt, 0)') . ')) AS nbresults, '; $countsql .= 'COUNT(DISTINCT(' . $DB->sql_concat('u.id', '\'#\'', 'st.attempt') . ')) AS nbattempts, '; $countsql .= 'COUNT(DISTINCT(u.id)) AS nbusers '; $countsql .= $from . $where; $nbmaincolumns = count($columns); // Get number of main columns used. $objectives = get_scorm_objectives($scorm->id); $nosort = array(); foreach ($objectives as $scoid => $sco) { foreach ($sco as $id => $objectivename) { $colid = $scoid . 'objectivestatus' . $id; $columns[] = $colid; $nosort[] = $colid; if (!$displayoptions['objectivescore']) { // Display the objective name only. $headers[] = $objectivename; } else { // Display the objective status header with a "status" suffix to avoid confusion. $headers[] = $objectivename . ' ' . get_string('status', 'scormreport_objectives'); // Now print objective score headers. $colid = $scoid . 'objectivescore' . $id; $columns[] = $colid; $nosort[] = $colid; $headers[] = $objectivename . ' ' . get_string('score', 'scormreport_objectives'); } } } $emptycell = ''; // Used when an empty cell is being printed - in html we add a space. if (!$download) { $emptycell = ' '; $table = new \flexible_table('mod-scorm-report'); $table->define_columns($columns); $table->define_headers($headers); $table->define_baseurl($PAGE->url); $table->sortable(true); $table->collapsible(true); // This is done to prevent redundant data, when a user has multiple attempts. $table->column_suppress('picture'); $table->column_suppress('fullname'); foreach ($extrafields as $field) { $table->column_suppress($field); } foreach ($nosort as $field) { $table->no_sorting($field); } $table->no_sorting('start'); $table->no_sorting('finish'); $table->no_sorting('score'); $table->no_sorting('checkbox'); $table->no_sorting('picture'); foreach ($scoes as $sco) { if ($sco->launch != '') { $table->no_sorting('scograde' . $sco->id); } } $table->column_class('picture', 'picture'); $table->column_class('fullname', 'bold'); $table->column_class('score', 'bold'); $table->set_attribute('cellspacing', '0'); $table->set_attribute('id', 'attempts'); $table->set_attribute('class', 'generaltable generalbox'); // Start working -- this is necessary as soon as the niceties are over. $table->setup(); } else { if ($download == 'ODS') { require_once "{$CFG->libdir}/odslib.class.php"; $filename .= ".ods"; // Creating a workbook. $workbook = new \MoodleODSWorkbook("-"); // Sending HTTP headers. $workbook->send($filename); // Creating the first worksheet. $sheettitle = get_string('report', 'scorm'); $myxls = $workbook->add_worksheet($sheettitle); // Format types. $format = $workbook->add_format(); $format->set_bold(0); $formatbc = $workbook->add_format(); $formatbc->set_bold(1); $formatbc->set_align('center'); $formatb = $workbook->add_format(); $formatb->set_bold(1); $formaty = $workbook->add_format(); $formaty->set_bg_color('yellow'); $formatc = $workbook->add_format(); $formatc->set_align('center'); $formatr = $workbook->add_format(); $formatr->set_bold(1); $formatr->set_color('red'); $formatr->set_align('center'); $formatg = $workbook->add_format(); $formatg->set_bold(1); $formatg->set_color('green'); $formatg->set_align('center'); // Here starts workshhet headers. $colnum = 0; foreach ($headers as $item) { $myxls->write(0, $colnum, $item, $formatbc); $colnum++; } $rownum = 1; } else { if ($download == 'Excel') { require_once "{$CFG->libdir}/excellib.class.php"; $filename .= ".xls"; // Creating a workbook. $workbook = new \MoodleExcelWorkbook("-"); // Sending HTTP headers. $workbook->send($filename); // Creating the first worksheet. $sheettitle = get_string('report', 'scorm'); $myxls = $workbook->add_worksheet($sheettitle); // Format types. $format = $workbook->add_format(); $format->set_bold(0); $formatbc = $workbook->add_format(); $formatbc->set_bold(1); $formatbc->set_align('center'); $formatb = $workbook->add_format(); $formatb->set_bold(1); $formaty = $workbook->add_format(); $formaty->set_bg_color('yellow'); $formatc = $workbook->add_format(); $formatc->set_align('center'); $formatr = $workbook->add_format(); $formatr->set_bold(1); $formatr->set_color('red'); $formatr->set_align('center'); $formatg = $workbook->add_format(); $formatg->set_bold(1); $formatg->set_color('green'); $formatg->set_align('center'); $colnum = 0; foreach ($headers as $item) { $myxls->write(0, $colnum, $item, $formatbc); $colnum++; } $rownum = 1; } else { if ($download == 'CSV') { $csvexport = new \csv_export_writer("tab"); $csvexport->set_filename($filename, ".txt"); $csvexport->add_data($headers); } } } } if (!$download) { $sort = $table->get_sql_sort(); } else { $sort = ''; } // Fix some wired sorting. if (empty($sort)) { $sort = ' ORDER BY uniqueid'; } else { $sort = ' ORDER BY ' . $sort; } if (!$download) { // Add extra limits due to initials bar. list($twhere, $tparams) = $table->get_sql_where(); if ($twhere) { $where .= ' AND ' . $twhere; // Initial bar. $params = array_merge($params, $tparams); } if (!empty($countsql)) { $count = $DB->get_record_sql($countsql, $params); $totalinitials = $count->nbresults; if ($twhere) { $countsql .= ' AND ' . $twhere; } $count = $DB->get_record_sql($countsql, $params); $total = $count->nbresults; } $table->pagesize($pagesize, $total); echo \html_writer::start_div('scormattemptcounts'); if ($count->nbresults == $count->nbattempts) { echo get_string('reportcountattempts', 'scorm', $count); } else { if ($count->nbattempts > 0) { echo get_string('reportcountallattempts', 'scorm', $count); } else { echo $count->nbusers . ' ' . get_string('users'); } } echo \html_writer::end_div(); } // Fetch the attempts. if (!$download) { $attempts = $DB->get_records_sql($select . $from . $where . $sort, $params, $table->get_page_start(), $table->get_page_size()); echo \html_writer::start_div('', array('id' => 'scormtablecontainer')); if ($candelete) { // Start form. $strreallydel = addslashes_js(get_string('deleteattemptcheck', 'scorm')); echo \html_writer::start_tag('form', array('id' => 'attemptsform', 'method' => 'post', 'action' => $PAGE->url->out(false), 'onsubmit' => 'return confirm("' . $strreallydel . '");')); echo \html_writer::empty_tag('input', array('type' => 'hidden', 'name' => 'action', 'value' => 'delete')); echo \html_writer::empty_tag('input', array('type' => 'hidden', 'name' => 'sesskey', 'value' => sesskey())); echo \html_writer::start_div('', array('style' => 'display: none;')); echo \html_writer::input_hidden_params($PAGE->url); echo \html_writer::end_div(); echo \html_writer::start_div(); } $table->initialbars($totalinitials > 20); // Build table rows. } else { $attempts = $DB->get_records_sql($select . $from . $where . $sort, $params); } if ($attempts) { foreach ($attempts as $scouser) { $row = array(); if (!empty($scouser->attempt)) { $timetracks = scorm_get_sco_runtime($scorm->id, false, $scouser->userid, $scouser->attempt); } else { $timetracks = ''; } if (in_array('checkbox', $columns)) { if ($candelete && !empty($timetracks->start)) { $row[] = \html_writer::checkbox('attemptid[]', $scouser->userid . ':' . $scouser->attempt, false); } else { if ($candelete) { $row[] = ''; } } } if (in_array('picture', $columns)) { $user = new \stdClass(); $additionalfields = explode(',', \user_picture::fields()); $user = username_load_fields_from_object($user, $scouser, null, $additionalfields); $user->id = $scouser->userid; $row[] = $OUTPUT->user_picture($user, array('courseid' => $course->id)); } if (!$download) { $url = new \moodle_url('/user/view.php', array('id' => $scouser->userid, 'course' => $course->id)); $row[] = \html_writer::link($url, fullname($scouser)); } else { $row[] = fullname($scouser); } foreach ($extrafields as $field) { $row[] = s($scouser->{$field}); } if (empty($timetracks->start)) { $row[] = '-'; $row[] = '-'; $row[] = '-'; $row[] = '-'; } else { if (!$download) { $url = new \moodle_url('/mod/scorm/report/userreport.php', array('id' => $cm->id, 'user' => $scouser->userid, 'attempt' => $scouser->attempt)); $row[] = \html_writer::link($url, $scouser->attempt); } else { $row[] = $scouser->attempt; } if ($download == 'ODS' || $download == 'Excel') { $row[] = userdate($timetracks->start, get_string("strftimedatetime", "langconfig")); } else { $row[] = userdate($timetracks->start); } if ($download == 'ODS' || $download == 'Excel') { $row[] = userdate($timetracks->finish, get_string('strftimedatetime', 'langconfig')); } else { $row[] = userdate($timetracks->finish); } $row[] = scorm_grade_user_attempt($scorm, $scouser->userid, $scouser->attempt); } // Print out all scores of attempt. foreach ($scoes as $sco) { if ($sco->launch != '') { if ($trackdata = scorm_get_tracks($sco->id, $scouser->userid, $scouser->attempt)) { if ($trackdata->status == '') { $trackdata->status = 'notattempted'; } $strstatus = get_string($trackdata->status, 'scorm'); if ($trackdata->score_raw != '') { // If raw score exists, print it. $score = $trackdata->score_raw; // Add max score if it exists. if (isset($trackdata->score_max)) { $score .= '/' . $trackdata->score_max; } } else { // ...else print out status. $score = $strstatus; } if (!$download) { $url = new \moodle_url('/mod/scorm/report/userreporttracks.php', array('id' => $cm->id, 'scoid' => $sco->id, 'user' => $scouser->userid, 'attempt' => $scouser->attempt)); $row[] = \html_writer::img($OUTPUT->pix_url($trackdata->status, 'scorm'), $strstatus, array('title' => $strstatus)) . \html_writer::empty_tag('br') . \html_writer::link($url, $score, array('title' => get_string('details', 'scorm'))); } else { $row[] = $score; } // Iterate over tracks and match objective id against values. $scorm2004 = false; if (scorm_version_check($scorm->version, SCORM_13)) { $scorm2004 = true; $objectiveprefix = "cmi.objectives."; } else { $objectiveprefix = "cmi.objectives_"; } $keywords = array(".id", $objectiveprefix); $objectivestatus = array(); $objectivescore = array(); foreach ($trackdata as $name => $value) { if (strpos($name, $objectiveprefix) === 0 && strrpos($name, '.id') !== false) { $num = trim(str_ireplace($keywords, '', $name)); if (is_numeric($num)) { if ($scorm2004) { $element = $objectiveprefix . $num . '.completion_status'; } else { $element = $objectiveprefix . $num . '.status'; } if (isset($trackdata->{$element})) { $objectivestatus[$value] = $trackdata->{$element}; } else { $objectivestatus[$value] = ''; } if ($displayoptions['objectivescore']) { $element = $objectiveprefix . $num . '.score.raw'; if (isset($trackdata->{$element})) { $objectivescore[$value] = $trackdata->{$element}; } else { $objectivescore[$value] = ''; } } } } } // Interaction data. if (!empty($objectives[$trackdata->scoid])) { foreach ($objectives[$trackdata->scoid] as $name) { if (isset($objectivestatus[$name])) { $row[] = s($objectivestatus[$name]); } else { $row[] = $emptycell; } if ($displayoptions['objectivescore']) { if (isset($objectivescore[$name])) { $row[] = s($objectivescore[$name]); } else { $row[] = $emptycell; } } } } // End of interaction data. } else { // If we don't have track data, we haven't attempted yet. $strstatus = get_string('notattempted', 'scorm'); if (!$download) { $row[] = \html_writer::img($OUTPUT->pix_url('notattempted', 'scorm'), $strstatus, array('title' => $strstatus)) . \html_writer::empty_tag('br') . $strstatus; } else { $row[] = $strstatus; } // Complete the empty cells. for ($i = 0; $i < count($columns) - $nbmaincolumns; $i++) { $row[] = $emptycell; } } } } if (!$download) { $table->add_data($row); } else { if ($download == 'Excel' or $download == 'ODS') { $colnum = 0; foreach ($row as $item) { $myxls->write($rownum, $colnum, $item, $format); $colnum++; } $rownum++; } else { if ($download == 'CSV') { $csvexport->add_data($row); } } } } if (!$download) { $table->finish_output(); if ($candelete) { echo \html_writer::start_tag('table', array('id' => 'commands')); echo \html_writer::start_tag('tr') . \html_writer::start_tag('td'); echo \html_writer::link('javascript:select_all_in(\'DIV\', null, \'scormtablecontainer\');', get_string('selectall', 'scorm')) . ' / '; echo \html_writer::link('javascript:deselect_all_in(\'DIV\', null, \'scormtablecontainer\');', get_string('selectnone', 'scorm')); echo ' '; echo \html_writer::empty_tag('input', array('type' => 'submit', 'value' => get_string('deleteselected', 'scorm'), 'class' => 'btn btn-secondary')); echo \html_writer::end_tag('td') . \html_writer::end_tag('tr') . \html_writer::end_tag('table'); // Close form. echo \html_writer::end_tag('div'); echo \html_writer::end_tag('form'); } echo \html_writer::end_div(); if (!empty($attempts)) { echo \html_writer::start_tag('table', array('class' => 'boxaligncenter')) . \html_writer::start_tag('tr'); echo \html_writer::start_tag('td'); echo $OUTPUT->single_button(new \moodle_url($PAGE->url, array('download' => 'ODS') + $displayoptions), get_string('downloadods'), 'post', ['class' => 'm-t-1']); echo \html_writer::end_tag('td'); echo \html_writer::start_tag('td'); echo $OUTPUT->single_button(new \moodle_url($PAGE->url, array('download' => 'Excel') + $displayoptions), get_string('downloadexcel'), 'post', ['class' => 'm-t-1']); echo \html_writer::end_tag('td'); echo \html_writer::start_tag('td'); echo $OUTPUT->single_button(new \moodle_url($PAGE->url, array('download' => 'CSV') + $displayoptions), get_string('downloadtext'), 'post', ['class' => 'm-t-1']); echo \html_writer::end_tag('td'); echo \html_writer::start_tag('td'); echo \html_writer::end_tag('td'); echo \html_writer::end_tag('tr') . \html_writer::end_tag('table'); } } } else { if ($candelete && !$download) { echo \html_writer::end_div(); echo \html_writer::end_tag('form'); $table->finish_output(); } echo \html_writer::end_div(); } // Show preferences form irrespective of attempts are there to report or not. if (!$download) { $mform->set_data(compact('detailedrep', 'pagesize', 'attemptsmode')); $mform->display(); } if ($download == 'Excel' or $download == 'ODS') { $workbook->close(); exit; } else { if ($download == 'CSV') { $csvexport->download_file(); exit; } } } else { echo $OUTPUT->notification(get_string('noactivity', 'scorm')); } }
/** * Print the the list of tours. */ protected function print_tour_list() { global $PAGE, $OUTPUT; $this->header(); echo \html_writer::span(get_string('tourlist_explanation', 'tool_usertours')); $table = new table\tour_list(); $tours = helper::get_tours(); foreach ($tours as $tour) { $table->add_data_keyed($table->format_row($tour)); } $table->finish_output(); $actions = [(object) ['link' => helper::get_edit_tour_link(), 'linkproperties' => [], 'img' => 'b/tour-new', 'title' => get_string('newtour', 'tool_usertours')], (object) ['link' => helper::get_import_tour_link(), 'linkproperties' => [], 'img' => 'b/tour-import', 'title' => get_string('importtour', 'tool_usertours')], (object) ['link' => new \moodle_url('https://moodle.net/tours'), 'linkproperties' => ['target' => '_blank'], 'img' => 'b/tour-shared', 'title' => get_string('sharedtourslink', 'tool_usertours')]]; echo \html_writer::start_tag('div', ['class' => 'tour-actions']); echo \html_writer::start_tag('ul'); foreach ($actions as $config) { $action = \html_writer::start_tag('li'); $linkproperties = $config->linkproperties; $linkproperties['href'] = $config->link; $action .= \html_writer::start_tag('a', $linkproperties); $action .= \html_writer::img($OUTPUT->pix_url($config->img, 'tool_usertours'), $config->title); $action .= \html_writer::div($config->title); $action .= \html_writer::end_tag('a'); $action .= \html_writer::end_tag('li'); echo $action; } echo \html_writer::end_tag('ul'); echo \html_writer::end_tag('div'); // JS for Tour management. $PAGE->requires->js_call_amd('tool_usertours/managetours', 'setup'); $this->footer(); }
/** * Outputs the forum post indicated by $activity. * * @param object $activity the activity object the forum resides in * @param int $courseid the id of the course the forum resides in * @param bool $detail not used, but required for compatibilty with other modules * @param int $modnames not used, but required for compatibilty with other modules * @param bool $viewfullnames not used, but required for compatibilty with other modules */ function forum_print_recent_mod_activity($activity, $courseid, $detail, $modnames, $viewfullnames) { global $OUTPUT; $content = $activity->content; if ($content->parent) { $class = 'reply'; } else { $class = 'discussion'; } $tableoptions = ['border' => '0', 'cellpadding' => '3', 'cellspacing' => '0', 'class' => 'forum-recent']; $output = html_writer::start_tag('table', $tableoptions); $output .= html_writer::start_tag('tr'); $post = (object) ['parent' => $content->parent]; $forum = (object) ['type' => $content->forumtype]; $authorhidden = forum_is_author_hidden($post, $forum); // Show user picture if author should not be hidden. if (!$authorhidden) { $pictureoptions = ['courseid' => $courseid, 'link' => $authorhidden, 'alttext' => $authorhidden]; $picture = $OUTPUT->user_picture($activity->user, $pictureoptions); $output .= html_writer::tag('td', $picture, ['class' => 'userpicture', 'valign' => 'top']); } // Discussion title and author. $output .= html_writer::start_tag('td', ['class' => $class]); if ($content->parent) { $class = 'title'; } else { // Bold the title of new discussions so they stand out. $class = 'title bold'; } $output .= html_writer::start_div($class); if ($detail) { $aname = s($activity->name); $output .= html_writer::img($OUTPUT->pix_url('icon', $activity->type), $aname, ['class' => 'icon']); } $discussionurl = new moodle_url('/mod/forum/discuss.php', ['d' => $content->discussion]); $discussionurl->set_anchor('p' . $activity->content->id); $output .= html_writer::link($discussionurl, $content->subject); $output .= html_writer::end_div(); $timestamp = userdate($activity->timestamp); if ($authorhidden) { $authornamedate = $timestamp; } else { $fullname = fullname($activity->user, $viewfullnames); $userurl = new moodle_url('/user/view.php'); $userurl->params(['id' => $activity->user->id, 'course' => $courseid]); $by = new stdClass(); $by->name = html_writer::link($userurl, $fullname); $by->date = $timestamp; $authornamedate = get_string('bynameondate', 'forum', $by); } $output .= html_writer::div($authornamedate, 'user'); $output .= html_writer::end_tag('td'); $output .= html_writer::end_tag('tr'); $output .= html_writer::end_tag('table'); echo $output; }
/** * Print the relevant form element in the ADD template for this field * * @global object * @param int $recordid * @return string */ function display_add_field($recordid = 0, $formdata = null) { global $DB, $OUTPUT; if ($formdata) { $fieldname = 'field_' . $this->field->id; $content = $formdata->{$fieldname}; } else { if ($recordid) { $content = $DB->get_field('data_content', 'content', array('fieldid' => $this->field->id, 'recordid' => $recordid)); } else { $content = ''; } } // beware get_field returns false for new, empty records MDL-18567 if ($content === false) { $content = ''; } $str = '<div title="' . s($this->field->description) . '">'; $str .= '<label for="field_' . $this->field->id . '"><span class="accesshide">' . $this->field->name . '</span>'; if ($this->field->required) { $image = html_writer::img($OUTPUT->pix_url('req'), get_string('requiredelement', 'form'), array('class' => 'req', 'title' => get_string('requiredelement', 'form'))); $str .= html_writer::div($image, 'inline-req'); } $str .= '</label><input class="basefieldinput mod-data-input" type="text" name="field_' . $this->field->id . '"'; $str .= ' id="field_' . $this->field->id . '" value="' . s($content) . '" />'; $str .= '</div>'; return $str; }
function display_add_field($recordid = 0, $formdata = null) { global $CFG, $DB, $OUTPUT, $USER, $PAGE; $file = false; $content = false; $displayname = ''; $alttext = ''; $itemid = null; $fs = get_file_storage(); if ($formdata) { $fieldname = 'field_' . $this->field->id . '_file'; $itemid = $formdata->{$fieldname}; $fieldname = 'field_' . $this->field->id . '_alttext'; if (isset($formdata->{$fieldname})) { $alttext = $formdata->{$fieldname}; } } else { if ($recordid) { if ($content = $DB->get_record('data_content', array('fieldid' => $this->field->id, 'recordid' => $recordid))) { file_prepare_draft_area($itemid, $this->context->id, 'mod_data', 'content', $content->id); if (!empty($content->content)) { if ($file = $fs->get_file($this->context->id, 'mod_data', 'content', $content->id, '/', $content->content)) { $usercontext = context_user::instance($USER->id); if (!($files = $fs->get_area_files($usercontext->id, 'user', 'draft', $itemid, 'id DESC', false))) { return false; } if ($thumbfile = $fs->get_file($usercontext->id, 'user', 'draft', $itemid, '/', 'thumb_' . $content->content)) { $thumbfile->delete(); } if (empty($content->content1)) { // Print icon if file already exists $src = moodle_url::make_draftfile_url($itemid, '/', $file->get_filename()); $displayname = $OUTPUT->pix_icon(file_file_icon($file), get_mimetype_description($file), 'moodle', array('class' => 'icon')) . '<a href="' . $src . '" >' . s($file->get_filename()) . '</a>'; } else { $displayname = get_string('nofilesattached', 'repository'); } } } $alttext = $content->content1; } } else { $itemid = file_get_unused_draft_itemid(); } } $str = '<div title="' . s($this->field->description) . '">'; $str .= '<fieldset><legend><span class="accesshide">' . $this->field->name; if ($this->field->required) { $str .= ' ' . get_string('requiredelement', 'form') . '</span></legend>'; $image = html_writer::img($OUTPUT->pix_url('req'), get_string('requiredelement', 'form'), array('class' => 'req', 'title' => get_string('requiredelement', 'form'))); $str .= html_writer::div($image, 'inline-req'); } else { $str .= '</span></legend>'; } $str .= '<noscript>'; if ($file) { $src = file_encode_url($CFG->wwwroot . '/pluginfile.php/', $this->context->id . '/mod_data/content/' . $content->id . '/' . $file->get_filename()); $str .= '<img width="' . s($this->previewwidth) . '" height="' . s($this->previewheight) . '" src="' . $src . '" alt="" />'; } $str .= '</noscript>'; $options = new stdClass(); $options->maxbytes = $this->field->param3; $options->maxfiles = 1; // Only one picture permitted. $options->itemid = $itemid; $options->accepted_types = array('web_image'); $options->return_types = FILE_INTERNAL; $options->context = $PAGE->context; if (!empty($file)) { $options->filename = $file->get_filename(); $options->filepath = '/'; } $fm = new form_filemanager($options); // Print out file manager. $output = $PAGE->get_renderer('core', 'files'); $str .= '<div class="mod-data-input">'; $str .= $output->render($fm); $str .= '<div class="mdl-left">'; $str .= '<input type="hidden" name="field_' . $this->field->id . '_file" value="' . $itemid . '" />'; $str .= '<label for="field_' . $this->field->id . '_alttext">' . get_string('alttext', 'data') . '</label> <input type="text" name="field_' . $this->field->id . '_alttext" id="field_' . $this->field->id . '_alttext" value="' . s($alttext) . '" />'; $str .= '</div>'; $str .= '</div>'; $str .= '</fieldset>'; $str .= '</div>'; return $str; }
echo $OUTPUT->body_attributes(); ?> > <?php echo $OUTPUT->standard_top_of_body_html(); ?> <header role="banner" class="navbar navbar-fixed-top<?php echo $html->navbarclass; ?> moodle-has-zindex"> <nav role="navigation" class="navbar-inner"> <div class="container-fluid"> <a class="ufsc" href="http://www.ufsc.br"><?php echo html_writer::img(new moodle_url('/theme/clean/pix/brasao.ufsc.svg'), 'UFSC'); ?> </a> <a class="second" href="<?php echo $CFG->wwwroot; ?> "><h2><?php echo $SITE->shortname; ?> </h2></a> <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a> <?php
/** * Returns HTML to display action links for a page * * @param lesson_page $page * @param bool $printmove * @param bool $printaddpage * @return string */ public function page_action_links(lesson_page $page, $printmove, $printaddpage = false) { global $CFG; $actions = array(); if ($printmove) { $url = new moodle_url('/mod/lesson/lesson.php', array('id' => $this->page->cm->id, 'action' => 'move', 'pageid' => $page->id, 'sesskey' => sesskey())); $label = get_string('movepagenamed', 'lesson', format_string($page->title)); $img = html_writer::img($this->output->pix_url('t/move'), $label, array('class' => 'iconsmall')); $actions[] = html_writer::link($url, $img, array('title' => $label)); } $url = new moodle_url('/mod/lesson/editpage.php', array('id' => $this->page->cm->id, 'pageid' => $page->id, 'edit' => 1)); $label = get_string('updatepagenamed', 'lesson', format_string($page->title)); $img = html_writer::img($this->output->pix_url('t/edit'), $label, array('class' => 'iconsmall')); $actions[] = html_writer::link($url, $img, array('title' => $label)); $url = new moodle_url('/mod/lesson/view.php', array('id' => $this->page->cm->id, 'pageid' => $page->id)); $label = get_string('previewpagenamed', 'lesson', format_string($page->title)); $img = html_writer::img($this->output->pix_url('t/preview'), $label, array('class' => 'iconsmall')); $actions[] = html_writer::link($url, $img, array('title' => $label)); $url = new moodle_url('/mod/lesson/lesson.php', array('id' => $this->page->cm->id, 'action' => 'confirmdelete', 'pageid' => $page->id, 'sesskey' => sesskey())); $label = get_string('deletepagenamed', 'lesson', format_string($page->title)); $img = html_writer::img($this->output->pix_url('t/delete'), $label, array('class' => 'iconsmall')); $actions[] = html_writer::link($url, $img, array('title' => $label)); if ($printaddpage) { $options = array(); $manager = lesson_page_type_manager::get($page->lesson); $links = $manager->get_add_page_type_links($page->id); foreach ($links as $link) { $options[$link['type']] = $link['name']; } $options[0] = get_string('question', 'lesson'); $addpageurl = new moodle_url('/mod/lesson/editpage.php', array('id' => $this->page->cm->id, 'pageid' => $page->id, 'sesskey' => sesskey())); $addpageselect = new single_select($addpageurl, 'qtype', $options, null, array('' => get_string('addanewpage', 'lesson') . '...'), 'addpageafter' . $page->id); $addpageselector = $this->output->render($addpageselect); } if (isset($addpageselector)) { $actions[] = $addpageselector; } return implode(' ', $actions); }
/** * Get page module html * @param $mod * @return string */ protected function mod_page_html($mod) { if (!$mod->uservisible) { return ""; } global $DB; $sql = "SELECT * FROM {course_modules} cm\n JOIN {page} p ON p.id = cm.instance\n WHERE cm.id = ?"; $page = $DB->get_record_sql($sql, array($mod->id)); $context = context_module::instance($mod->id); $formatoptions = new stdClass(); $formatoptions->noclean = true; $formatoptions->overflowdiv = true; $formatoptions->context = $context; // Make sure we have some summary/extract text for the course page. if (!empty($page->intro)) { $page->summary = file_rewrite_pluginfile_urls($page->intro, 'pluginfile.php', $context->id, 'mod_page', 'intro', null); $page->summary = format_text($page->summary, $page->introformat, $formatoptions); } else { $preview = html_to_text($page->content, 0, false); $page->summary = shorten_text($preview, 200); } $content = file_rewrite_pluginfile_urls($page->content, 'pluginfile.php', $context->id, 'mod_page', 'content', $page->revision); $content = format_text($content, $page->contentformat, $formatoptions); $imgarr = \theme_snap\local::extract_first_image($content); $thumbnail = ''; if ($imgarr) { $img = html_writer::img($imgarr['src'], $imgarr['alt']); $thumbnail = "<div class=summary-figure>{$img}</div>"; } $readmore = get_string('readmore', 'theme_snap'); $close = get_string('close', 'theme_snap'); $o = "\n {$thumbnail}\n <div class='summary-text'>\n {$page->summary}\n <p><a class='pagemod-readmore' href='{$mod->url}'>{$readmore}</a></p>\n </div>\n\n <div class=pagemod-content tabindex='-1'>\n {$content}\n <div><hr><a class='snap-action-icon' href='#'>\n <i class='icon icon-office-52'></i><small>{$close}</small></a></div>\n </div>"; return $o; }
/** * Print a detailed representation of what a user has done with * a given particular instance of this module, for user activity reports. * * @global stdClass * @global object * @param object $course * @param object $user * @param object $mod * @param object $scorm * @return boolean */ function scorm_user_complete($course, $user, $mod, $scorm) { global $CFG, $DB, $OUTPUT; require_once("$CFG->libdir/gradelib.php"); $liststyle = 'structlist'; $now = time(); $firstmodify = $now; $lastmodify = 0; $sometoreport = false; $report = ''; // First Access and Last Access dates for SCOs. require_once($CFG->dirroot.'/mod/scorm/locallib.php'); $timetracks = scorm_get_sco_runtime($scorm->id, false, $user->id); $firstmodify = $timetracks->start; $lastmodify = $timetracks->finish; $grades = grade_get_grades($course->id, 'mod', 'scorm', $scorm->id, $user->id); if (!empty($grades->items[0]->grades)) { $grade = reset($grades->items[0]->grades); echo $OUTPUT->container(get_string('grade').': '.$grade->str_long_grade); if ($grade->str_feedback) { echo $OUTPUT->container(get_string('feedback').': '.$grade->str_feedback); } } if ($orgs = $DB->get_records_select('scorm_scoes', 'scorm = ? AND '. $DB->sql_isempty('scorm_scoes', 'launch', false, true).' AND '. $DB->sql_isempty('scorm_scoes', 'organization', false, false), array($scorm->id), 'sortorder, id', 'id, identifier, title')) { if (count($orgs) <= 1) { unset($orgs); $orgs = array(); $org = new stdClass(); $org->identifier = ''; $orgs[] = $org; } $report .= html_writer::start_div('mod-scorm'); foreach ($orgs as $org) { $conditions = array(); $currentorg = ''; if (!empty($org->identifier)) { $report .= html_writer::div($org->title, 'orgtitle'); $currentorg = $org->identifier; $conditions['organization'] = $currentorg; } $report .= html_writer::start_tag('ul', array('id' => '0', 'class' => $liststyle)); $conditions['scorm'] = $scorm->id; if ($scoes = $DB->get_records('scorm_scoes', $conditions, "sortorder, id")) { // Drop keys so that we can access array sequentially. $scoes = array_values($scoes); $level = 0; $sublist = 1; $parents[$level] = '/'; foreach ($scoes as $pos => $sco) { if ($parents[$level] != $sco->parent) { if ($level > 0 && $parents[$level - 1] == $sco->parent) { $report .= html_writer::end_tag('ul').html_writer::end_tag('li'); $level--; } else { $i = $level; $closelist = ''; while (($i > 0) && ($parents[$level] != $sco->parent)) { $closelist .= html_writer::end_tag('ul').html_writer::end_tag('li'); $i--; } if (($i == 0) && ($sco->parent != $currentorg)) { $report .= html_writer::start_tag('li'); $report .= html_writer::start_tag('ul', array('id' => $sublist, 'class' => $liststyle)); $level++; } else { $report .= $closelist; $level = $i; } $parents[$level] = $sco->parent; } } $report .= html_writer::start_tag('li'); if (isset($scoes[$pos + 1])) { $nextsco = $scoes[$pos + 1]; } else { $nextsco = false; } if (($nextsco !== false) && ($sco->parent != $nextsco->parent) && (($level == 0) || (($level > 0) && ($nextsco->parent == $sco->identifier)))) { $sublist++; } else { $report .= $OUTPUT->spacer(array("height" => "12", "width" => "13")); } if ($sco->launch) { $score = ''; $totaltime = ''; if ($usertrack = scorm_get_tracks($sco->id, $user->id)) { if ($usertrack->status == '') { $usertrack->status = 'notattempted'; } $strstatus = get_string($usertrack->status, 'scorm'); $report .= html_writer::img($OUTPUT->pix_url($usertrack->status, 'scorm'), $strstatus, array('title' => $strstatus)); } else { if ($sco->scormtype == 'sco') { $report .= html_writer::img($OUTPUT->pix_url('notattempted', 'scorm'), get_string('notattempted', 'scorm'), array('title' => get_string('notattempted', 'scorm'))); } else { $report .= html_writer::img($OUTPUT->pix_url('asset', 'scorm'), get_string('asset', 'scorm'), array('title' => get_string('asset', 'scorm'))); } } $report .= " $sco->title $score$totaltime".html_writer::end_tag('li'); if ($usertrack !== false) { $sometoreport = true; $report .= html_writer::start_tag('li').html_writer::start_tag('ul', array('class' => $liststyle)); foreach ($usertrack as $element => $value) { if (substr($element, 0, 3) == 'cmi') { $report .= html_writer::tag('li', $element.' => '.s($value)); } } $report .= html_writer::end_tag('ul').html_writer::end_tag('li'); } } else { $report .= " $sco->title".html_writer::end_tag('li'); } } for ($i = 0; $i < $level; $i++) { $report .= html_writer::end_tag('ul').html_writer::end_tag('li'); } } $report .= html_writer::end_tag('ul').html_writer::empty_tag('br'); } $report .= html_writer::end_div(); } if ($sometoreport) { if ($firstmodify < $now) { $timeago = format_time($now - $firstmodify); echo get_string('firstaccess', 'scorm').': '.userdate($firstmodify).' ('.$timeago.")".html_writer::empty_tag('br'); } if ($lastmodify > 0) { $timeago = format_time($now - $lastmodify); echo get_string('lastaccess', 'scorm').': '.userdate($lastmodify).' ('.$timeago.")".html_writer::empty_tag('br'); } echo get_string('report', 'scorm').":".html_writer::empty_tag('br'); echo $report; } else { print_string('noactivity', 'scorm'); } return true; }
/** * Builds the XHTML to display the control * * @param string $data Unused * @param string $query * @return string */ public function output_html($data, $query = '') { global $CFG, $OUTPUT; // Display strings. $txt = get_strings(array('administration', 'settings', 'edit', 'name', 'enable', 'disable', 'up', 'down', 'none')); $struninstall = get_string('uninstallplugin', 'core_admin'); $txt->updown = "{$txt->up}/{$txt->down}"; $antivirusesavailable = \core\antivirus\manager::get_available(); $activeantiviruses = explode(',', $CFG->antiviruses); $activeantiviruses = array_reverse($activeantiviruses); foreach ($activeantiviruses as $key => $antivirus) { if (empty($antivirusesavailable[$antivirus])) { unset($activeantiviruses[$key]); } else { $name = $antivirusesavailable[$antivirus]; unset($antivirusesavailable[$antivirus]); $antivirusesavailable[$antivirus] = $name; } } $antivirusesavailable = array_reverse($antivirusesavailable, true); $return = $OUTPUT->heading(get_string('actantivirushdr', 'antivirus'), 3, 'main', true); $return .= $OUTPUT->box_start('generalbox antivirusesui'); $table = new html_table(); $table->head = array($txt->name, $txt->enable, $txt->updown, $txt->settings, $struninstall); $table->colclasses = array('leftalign', 'centeralign', 'centeralign', 'centeralign', 'centeralign'); $table->id = 'antivirusmanagement'; $table->attributes['class'] = 'admintable generaltable'; $table->data = array(); // Iterate through auth plugins and add to the display table. $updowncount = 1; $antiviruscount = count($activeantiviruses); $baseurl = new moodle_url('/admin/antiviruses.php', array('sesskey' => sesskey())); foreach ($antivirusesavailable as $antivirus => $name) { // Hide/show link. $class = ''; if (in_array($antivirus, $activeantiviruses)) { $hideshowurl = $baseurl; $hideshowurl->params(array('action' => 'disable', 'antivirus' => $antivirus)); $hideshowimg = html_writer::img($OUTPUT->pix_url('t/hide'), 'disable', array('class' => 'iconsmall')); $hideshow = html_writer::link($hideshowurl, $hideshowimg); $enabled = true; $displayname = $name; } else { $hideshowurl = $baseurl; $hideshowurl->params(array('action' => 'enable', 'antivirus' => $antivirus)); $hideshowimg = html_writer::img($OUTPUT->pix_url('t/show'), 'enable', array('class' => 'iconsmall')); $hideshow = html_writer::link($hideshowurl, $hideshowimg); $enabled = false; $displayname = $name; $class = 'dimmed_text'; } // Up/down link. $updown = ''; if ($enabled) { if ($updowncount > 1) { $updownurl = $baseurl; $updownurl->params(array('action' => 'up', 'antivirus' => $antivirus)); $updownimg = html_writer::img($OUTPUT->pix_url('t/up'), 'up', array('class' => 'iconsmall')); $updown = html_writer::link($updownurl, $updownimg); } else { $updown .= html_writer::img($OUTPUT->pix_url('spacer'), '', array('class' => 'iconsmall')); } if ($updowncount < $antiviruscount) { $updownurl = $baseurl; $updownurl->params(array('action' => 'down', 'antivirus' => $antivirus)); $updownimg = html_writer::img($OUTPUT->pix_url('t/down'), 'down', array('class' => 'iconsmall')); $updown = html_writer::link($updownurl, $updownimg); } else { $updown .= html_writer::img($OUTPUT->pix_url('spacer'), '', array('class' => 'iconsmall')); } ++$updowncount; } // Settings link. if (file_exists($CFG->dirroot . '/lib/antivirus/' . $antivirus . '/settings.php')) { $eurl = new moodle_url('/admin/settings.php', array('section' => 'antivirussettings' . $antivirus)); $settings = html_writer::link($eurl, $txt->settings); } else { $settings = ''; } $uninstall = ''; if ($uninstallurl = core_plugin_manager::instance()->get_uninstall_url('antivirus_' . $antivirus, 'manage')) { $uninstall = html_writer::link($uninstallurl, $struninstall); } // Add a row to the table. $row = new html_table_row(array($displayname, $hideshow, $updown, $settings, $uninstall)); if ($class) { $row->attributes['class'] = $class; } $table->data[] = $row; } $return .= html_writer::table($table); $return .= get_string('configantivirusplugins', 'antivirus') . html_writer::empty_tag('br') . get_string('tablenosave', 'admin'); $return .= $OUTPUT->box_end(); return highlight($query, $return); }
/** * Construct a user menu, returning HTML that can be echoed out by a * layout file. * * @param stdClass $user A user object, usually $USER. * @param bool $withlinks true if a dropdown should be built. * @return string HTML fragment. */ public function user_menu($user = null, $withlinks = null) { global $USER, $CFG; require_once($CFG->dirroot . '/user/lib.php'); if (is_null($user)) { $user = $USER; } // Note: this behaviour is intended to match that of core_renderer::login_info, // but should not be considered to be good practice; layout options are // intended to be theme-specific. Please don't copy this snippet anywhere else. if (is_null($withlinks)) { $withlinks = empty($this->page->layout_options['nologinlinks']); } // Add a class for when $withlinks is false. $usermenuclasses = 'usermenu'; if (!$withlinks) { $usermenuclasses .= ' withoutlinks'; } $returnstr = ""; // If during initial install, return the empty return string. if (during_initial_install()) { return $returnstr; } $loginpage = $this->is_login_page(); $loginurl = get_login_url(); // If not logged in, show the typical not-logged-in string. if (!isloggedin()) { $returnstr = get_string('loggedinnot', 'moodle'); if (!$loginpage) { $returnstr .= " (<a href=\"$loginurl\">" . get_string('login') . '</a>)'; } return html_writer::div( html_writer::span( $returnstr, 'login' ), $usermenuclasses ); } // If logged in as a guest user, show a string to that effect. if (isguestuser()) { $returnstr = get_string('loggedinasguest'); if (!$loginpage && $withlinks) { $returnstr .= " (<a href=\"$loginurl\">".get_string('login').'</a>)'; } return html_writer::div( html_writer::span( $returnstr, 'login' ), $usermenuclasses ); } // Get some navigation opts. $opts = user_get_user_navigation_info($user, $this->page); $avatarclasses = "avatars"; $avatarcontents = html_writer::span($opts->metadata['useravatar'], 'avatar current'); $usertextcontents = $opts->metadata['userfullname']; // Other user. if (!empty($opts->metadata['asotheruser'])) { $avatarcontents .= html_writer::span( $opts->metadata['realuseravatar'], 'avatar realuser' ); $usertextcontents = $opts->metadata['realuserfullname']; $usertextcontents .= html_writer::tag( 'span', get_string( 'loggedinas', 'moodle', html_writer::span( $opts->metadata['userfullname'], 'value' ) ), array('class' => 'meta viewingas') ); } // Role. if (!empty($opts->metadata['asotherrole'])) { $role = core_text::strtolower(preg_replace('#[ ]+#', '-', trim($opts->metadata['rolename']))); $usertextcontents .= html_writer::span( $opts->metadata['rolename'], 'meta role role-' . $role ); } // User login failures. if (!empty($opts->metadata['userloginfail'])) { $usertextcontents .= html_writer::span( $opts->metadata['userloginfail'], 'meta loginfailures' ); } // MNet. if (!empty($opts->metadata['asmnetuser'])) { $mnet = strtolower(preg_replace('#[ ]+#', '-', trim($opts->metadata['mnetidprovidername']))); $usertextcontents .= html_writer::span( $opts->metadata['mnetidprovidername'], 'meta mnet mnet-' . $mnet ); } $returnstr .= html_writer::span( html_writer::span($usertextcontents, 'usertext') . html_writer::span($avatarcontents, $avatarclasses), 'userbutton' ); // Create a divider (well, a filler). $divider = new action_menu_filler(); $divider->primary = false; $am = new action_menu(); $am->initialise_js($this->page); $am->set_menu_trigger( $returnstr ); $am->set_alignment(action_menu::TR, action_menu::BR); $am->set_nowrap_on_items(); if ($withlinks) { $navitemcount = count($opts->navitems); $idx = 0; foreach ($opts->navitems as $key => $value) { switch ($value->itemtype) { case 'divider': // If the nav item is a divider, add one and skip link processing. $am->add($divider); break; case 'invalid': // Silently skip invalid entries (should we post a notification?). break; case 'link': // Process this as a link item. $pix = null; if (isset($value->pix) && !empty($value->pix)) { $pix = new pix_icon($value->pix, $value->title, null, array('class' => 'iconsmall')); } else if (isset($value->imgsrc) && !empty($value->imgsrc)) { $value->title = html_writer::img( $value->imgsrc, $value->title, array('class' => 'iconsmall') ) . $value->title; } $al = new action_menu_link_secondary( $value->url, $pix, $value->title, array('class' => 'icon') ); $am->add($al); break; } $idx++; // Add dividers after the first item and before the last item. if ($idx == 1 || $idx == $navitemcount - 1) { $am->add($divider); } } } return html_writer::div( $this->render($am), $usermenuclasses ); }
function scorm_get_toc_object($user, $scorm, $currentorg='', $scoid='', $mode='normal', $attempt='', $play=false, $organizationsco=null) { global $CFG, $DB, $PAGE, $OUTPUT; // Always pass the mode even if empty as that is what is done elsewhere and the urls have to match. $modestr = '&mode='; if ($mode != 'normal') { $modestr = '&mode='.$mode; } $result = array(); $incomplete = false; if (!empty($organizationsco)) { $result[0] = $organizationsco; $result[0]->isvisible = true; $result[0]->statusicon = ''; $result[0]->url = ''; } if ($scoes = scorm_get_scoes($scorm->id, $currentorg)) { // Retrieve user tracking data for each learning object. $usertracks = array(); foreach ($scoes as $sco) { if (!empty($sco->launch)) { if ($usertrack = scorm_get_tracks($sco->id, $user->id, $attempt)) { if ($usertrack->status == '') { $usertrack->status = 'notattempted'; } $usertracks[$sco->identifier] = $usertrack; } } } foreach ($scoes as $sco) { if (!isset($sco->isvisible)) { $sco->isvisible = true; } if (empty($sco->title)) { $sco->title = $sco->identifier; } if (scorm_version_check($scorm->version, SCORM_13)) { $sco->prereq = true; } else { $sco->prereq = empty($sco->prerequisites) || scorm_eval_prerequisites($sco->prerequisites, $usertracks); } if ($sco->isvisible) { if (!empty($sco->launch)) { if (empty($scoid) && ($mode != 'normal')) { $scoid = $sco->id; } if (isset($usertracks[$sco->identifier])) { $usertrack = $usertracks[$sco->identifier]; $strstatus = get_string($usertrack->status, 'scorm'); if ($sco->scormtype == 'sco') { $statusicon = html_writer::img($OUTPUT->pix_url($usertrack->status, 'scorm'), $strstatus, array('title' => $strstatus)); } else { $statusicon = html_writer::img($OUTPUT->pix_url('asset', 'scorm'), get_string('assetlaunched', 'scorm'), array('title' => get_string('assetlaunched', 'scorm'))); } if (($usertrack->status == 'notattempted') || ($usertrack->status == 'incomplete') || ($usertrack->status == 'browsed')) { $incomplete = true; if ($play && empty($scoid)) { $scoid = $sco->id; } } $strsuspended = get_string('suspended', 'scorm'); $exitvar = 'cmi.core.exit'; if (scorm_version_check($scorm->version, SCORM_13)) { $exitvar = 'cmi.exit'; } if ($incomplete && isset($usertrack->{$exitvar}) && ($usertrack->{$exitvar} == 'suspend')) { $statusicon = html_writer::img($OUTPUT->pix_url('suspend', 'scorm'), $strstatus.' - '.$strsuspended, array('title' => $strstatus.' - '.$strsuspended)); } } else { if ($play && empty($scoid)) { $scoid = $sco->id; } $incomplete = true; if ($sco->scormtype == 'sco') { $statusicon = html_writer::img($OUTPUT->pix_url('notattempted', 'scorm'), get_string('notattempted', 'scorm'), array('title' => get_string('notattempted', 'scorm'))); } else { $statusicon = html_writer::img($OUTPUT->pix_url('asset', 'scorm'), get_string('asset', 'scorm'), array('title' => get_string('asset', 'scorm'))); } } } } if (empty($statusicon)) { $sco->statusicon = html_writer::img($OUTPUT->pix_url('notattempted', 'scorm'), get_string('notattempted', 'scorm'), array('title' => get_string('notattempted', 'scorm'))); } else { $sco->statusicon = $statusicon; } $sco->url = 'a='.$scorm->id.'&scoid='.$sco->id.'¤torg='.$currentorg.$modestr.'&attempt='.$attempt; $sco->incomplete = $incomplete; if (!in_array($sco->id, array_keys($result))) { $result[$sco->id] = $sco; } } } // Get the parent scoes! $result = scorm_get_toc_get_parent_child($result, $currentorg); // Be safe, prevent warnings from showing up while returning array. if (!isset($scoid)) { $scoid = ''; } return array('scoes' => $result, 'usertracks' => $usertracks, 'scoid' => $scoid); }
continue; } $actions = array(); $deleteurl = new moodle_url('/mod/emarking/print/orphanpages.php', array('id' => $cm->id, 'delete' => $file->get_id())); $rotateurl = new moodle_url('/mod/emarking/print/orphanpages.php', array('id' => $cm->id, 'file' => $file->get_id(), 'rotate' => true)); if ($usercanupload) { $actions[] = $OUTPUT->action_icon($rotateurl, new pix_icon('i/return', get_string('rotatepage', 'mod_emarking'))); $actions[] = $OUTPUT->pix_icon('i/edit', get_string('rotatepage', 'mod_emarking'), '', array('style' => 'cursor:pointer;', 'onclick' => 'showfixform(' . $file->get_id() . ')')); } if (isset($file->anonymous)) { $actions[] = $OUTPUT->action_icon(moodle_url::make_pluginfile_url($context->id, 'mod_emarking', 'orphanpages', $emarking->id, '/', $file->anonymous->get_filename()), new pix_icon('i/show', get_string('anonymousfile', 'mod_emarking'))); } $actions[] = html_writer::div(html_writer::div(get_string('student', 'grades'), NULL, array('id' => 'error-student-' . $file->get_id())) . html_writer::tag('input', NULL, array('name' => 'student-' . $file->get_id(), 'type' => 'text', 'class' => 'studentname', 'tabindex' => $shown * 2, 'fileid' => $file->get_id())) . '<br/>' . html_writer::div(get_string('page', 'mod_emarking'), NULL, array('id' => 'error-pagenumber-' . $file->get_id())) . html_writer::select($options, 'page-' . $file->get_id(), '', false, array('tabindex' => $shown * 2 + 1, 'id' => 'page-' . $file->get_id())) . '<br/>' . html_writer::tag('button', get_string('cancel'), array('class' => 'btn', 'onclick' => 'return cancelchanges(' . $file->get_id() . ');')) . html_writer::tag('button', get_string('submit'), array('class' => 'btn', 'onclick' => 'return savechanges(' . $file->get_id() . ');')) . html_writer::tag('input', NULL, array('type' => 'hidden', 'name' => 'studentid-' . $file->get_id(), 'id' => 's' . $file->get_id())), 'fixorphanpage', array('id' => 'fix-' . $file->get_id())) . html_writer::div('', '', array('id' => 'content-' . $file->get_id())); $imgurl = moodle_url::make_pluginfile_url($context->id, 'mod_emarking', 'orphanpages', $emarking->id, '/', $file->get_filename()); $imgurl .= '?r=' . random_string(); $data = array($OUTPUT->action_link($imgurl, html_writer::div(html_writer::img($imgurl, $file->get_filename()), '', array('style' => 'height:100px; overflow:hidden; max-width:600px;'))), implode(' ', $actions)); if ($usercanupload) { $data[] = html_writer::checkbox('d[]', $file->get_id(), false, ''); } $table->data[] = $data; } echo html_writer::table($table); echo $OUTPUT->paging_bar($numorphanpages, $page, $perpage, $url); if ($usercanupload) { echo html_writer::start_tag('input', array('type' => 'submit', 'value' => get_string('deleteselectedpages', 'mod_emarking'), 'style' => 'float:right;')); echo "</form>"; } } $students = get_enrolled_users($context, 'mod/emarking:submit'); ?> <script type="text/javascript">
function display_add_field($recordid = 0, $formdata = null) { global $CFG, $DB, $OUTPUT, $PAGE; $text = ''; $format = 0; $str = '<div title="' . s($this->field->description) . '">'; $str .= '<label for="field_' . $this->field->id . '" class="accesshide">'; $str .= html_writer::span($this->field->name); if ($this->field->required) { $image = html_writer::img($OUTPUT->pix_url('req'), get_string('requiredelement', 'form'), array('class' => 'req', 'title' => get_string('requiredelement', 'form'))); $str .= html_writer::div($image, 'inline-req'); } $str .= '</label>'; editors_head_setup(); $options = $this->get_options(); $itemid = $this->field->id; $field = 'field_'.$itemid; if ($formdata) { $fieldname = 'field_' . $this->field->id . '_content1'; if (isset($formdata->$fieldname)) { $format = $formdata->$fieldname; } else { $format = file_get_unused_draft_itemid(); } $fieldname = 'field_' . $this->field->id . '_itemid'; if (isset($formdata->$fieldname)) { $draftitemid = clean_param($formdata->$fieldname, PARAM_INT); } else { $draftitemid = file_get_unused_draft_itemid(); } $fieldname = 'field_' . $this->field->id; if (isset($formdata->$fieldname)) { $text = $formdata->$fieldname; } } else if ($recordid && $content = $DB->get_record('data_content', array('fieldid' => $this->field->id, 'recordid' => $recordid))) { $format = $content->content1; $text = clean_text($content->content, $format); $text = file_prepare_draft_area($draftitemid, $this->context->id, 'mod_data', 'content', $content->id, $options, $text); } else { $draftitemid = file_get_unused_draft_itemid(); $format = FORMAT_HTML; } // get filepicker info // $fpoptions = array(); if ($options['maxfiles'] != 0 ) { $args = new stdClass(); // need these three to filter repositories list $args->accepted_types = array('web_image'); $args->return_types = (FILE_INTERNAL | FILE_EXTERNAL); $args->context = $this->context; $args->env = 'filepicker'; // advimage plugin $image_options = initialise_filepicker($args); $image_options->context = $this->context; $image_options->client_id = uniqid(); $image_options->maxbytes = $options['maxbytes']; $image_options->env = 'editor'; $image_options->itemid = $draftitemid; // moodlemedia plugin $args->accepted_types = array('video', 'audio'); $media_options = initialise_filepicker($args); $media_options->context = $this->context; $media_options->client_id = uniqid(); $media_options->maxbytes = $options['maxbytes']; $media_options->env = 'editor'; $media_options->itemid = $draftitemid; // advlink plugin $args->accepted_types = '*'; $link_options = initialise_filepicker($args); $link_options->context = $this->context; $link_options->client_id = uniqid(); $link_options->maxbytes = $options['maxbytes']; $link_options->env = 'editor'; $link_options->itemid = $draftitemid; $fpoptions['image'] = $image_options; $fpoptions['media'] = $media_options; $fpoptions['link'] = $link_options; } $editor = editors_get_preferred_editor($format); $strformats = format_text_menu(); $formats = $editor->get_supported_formats(); foreach ($formats as $fid) { $formats[$fid] = $strformats[$fid]; } $editor->set_text($text); $editor->use_editor($field, $options, $fpoptions); $str .= '<input type="hidden" name="'.$field.'_itemid" value="'.s($draftitemid).'" />'; $str .= '<div class="mod-data-input">'; $str .= '<div><textarea id="'.$field.'" name="'.$field.'" rows="'.$this->field->param3.'" cols="'.$this->field->param2.'" spellcheck="true">'.s($text).'</textarea></div>'; $str .= '<div><label class="accesshide" for="' . $field . '_content1">' . get_string('format') . '</label>'; $str .= '<select id="' . $field . '_content1" name="'.$field.'_content1">'; foreach ($formats as $key=>$desc) { $selected = ($format == $key) ? 'selected="selected"' : ''; $str .= '<option value="'.s($key).'" '.$selected.'>'.$desc.'</option>'; } $str .= '</select>'; $str .= '</div>'; $str .= '</div>'; $str .= '</div>'; return $str; }