/** * Print resource info and workaround link when JS not available. * @param object $resource * @param object $cm * @param object $course * @param stored_file $file main file * @return does not return */ function resource_print_workaround($resource, $cm, $course, $file) { global $CFG, $OUTPUT; resource_print_header($resource, $cm, $course); resource_print_heading($resource, $cm, $course, true); resource_print_intro($resource, $cm, $course, true); $resource->mainfile = $file->get_filename(); echo '<div class="resourceworkaround">'; switch (resource_get_final_display_type($resource)) { case RESOURCELIB_DISPLAY_POPUP: $path = '/' . $file->get_contextid() . '/mod_resource/content/' . $resource->revision . $file->get_filepath() . $file->get_filename(); $fullurl = file_encode_url($CFG->wwwroot . '/pluginfile.php', $path, false); $options = empty($resource->displayoptions) ? array() : unserialize($resource->displayoptions); $width = empty($options['popupwidth']) ? 620 : $options['popupwidth']; $height = empty($options['popupheight']) ? 450 : $options['popupheight']; $wh = "width={$width},height={$height},toolbar=no,location=no,menubar=no,copyhistory=no,status=no,directories=no,scrollbars=yes,resizable=yes"; $extra = "onclick=\"window.open('{$fullurl}', '', '{$wh}'); return false;\""; echo resource_get_clicktoopen($file, $resource->revision, $extra); break; case RESOURCELIB_DISPLAY_NEW: $extra = 'onclick="this.target=\'_blank\'"'; echo resource_get_clicktoopen($file, $resource->revision, $extra); break; case RESOURCELIB_DISPLAY_DOWNLOAD: echo resource_get_clicktodownload($file, $resource->revision); break; case RESOURCELIB_DISPLAY_OPEN: default: echo resource_get_clicktoopen($file, $resource->revision); break; } echo '</div>'; echo $OUTPUT->footer(); die; }
/** * Given a course_module object, this function returns any * "extra" information that may be needed when printing * this activity in a course listing. * * See {@link get_array_of_activities()} in course/lib.php * * @param object $coursemodule * @return object info */ function resource_get_coursemodule_info($coursemodule) { global $CFG, $DB; require_once("$CFG->libdir/filelib.php"); require_once("$CFG->dirroot/mod/resource/locallib.php"); require_once($CFG->libdir.'/completionlib.php'); $context = get_context_instance(CONTEXT_MODULE, $coursemodule->id); if (!$resource = $DB->get_record('resource', array('id'=>$coursemodule->instance), 'id, name, display, displayoptions, tobemigrated, revision')) { return NULL; } $info = new stdClass(); $info->name = $resource->name; if ($resource->tobemigrated) { $info->icon ='i/cross_red_big'; return $info; } $fs = get_file_storage(); $files = $fs->get_area_files($context->id, 'mod_resource', 'content', 0, 'sortorder DESC, id ASC', false); // TODO: this is not very efficient!! if (count($files) >= 1) { $mainfile = array_pop($files); $info->icon = file_extension_icon($mainfile->get_filename()); $resource->mainfile = $mainfile->get_filename(); } $display = resource_get_final_display_type($resource); if ($display == RESOURCELIB_DISPLAY_POPUP) { $fullurl = "$CFG->wwwroot/mod/resource/view.php?id=$coursemodule->id&redirect=1"; $options = empty($resource->displayoptions) ? array() : unserialize($resource->displayoptions); $width = empty($options['popupwidth']) ? 620 : $options['popupwidth']; $height = empty($options['popupheight']) ? 450 : $options['popupheight']; $wh = "width=$width,height=$height,toolbar=no,location=no,menubar=no,copyhistory=no,status=no,directories=no,scrollbars=yes,resizable=yes"; $info->extra = "onclick=\"window.open('$fullurl', '', '$wh'); return false;\""; } else if ($display == RESOURCELIB_DISPLAY_NEW) { $fullurl = "$CFG->wwwroot/mod/resource/view.php?id=$coursemodule->id&redirect=1"; $info->extra = "onclick=\"window.open('$fullurl'); return false;\""; } else if ($display == RESOURCELIB_DISPLAY_OPEN) { $fullurl = "$CFG->wwwroot/mod/resource/view.php?id=$coursemodule->id&redirect=1"; $info->extra = "onclick=\"window.location.href ='$fullurl';return false;\""; } else if ($display == RESOURCELIB_DISPLAY_DOWNLOAD) { if (empty($mainfile)) { return NULL; } // do not open any window because it would be left there after download $path = '/'.$context->id.'/mod_resource/content/'.$resource->revision.$mainfile->get_filepath().$mainfile->get_filename(); $fullurl = addslashes_js(file_encode_url($CFG->wwwroot.'/pluginfile.php', $path, true)); // When completion information is enabled for download files, make // the JavaScript version go to the view page with redirect set, // instead of directly to the file, otherwise we can't make it tick // the box for them if (!$course = $DB->get_record('course', array('id'=>$coursemodule->course), 'id, enablecompletion')) { return NULL; } $completion = new completion_info($course); if ($completion->is_enabled($coursemodule) == COMPLETION_TRACKING_AUTOMATIC) { $fullurl = "$CFG->wwwroot/mod/resource/view.php?id=$coursemodule->id&redirect=1"; } $info->extra = "onclick=\"window.open('$fullurl'); return false;\""; } return $info; }
die; } $fs = get_file_storage(); $files = $fs->get_area_files($context->id, 'mod_resource', 'content', 0, 'sortorder DESC, id ASC', false); // TODO: this is not very efficient!! if (count($files) < 1) { resource_print_filenotfound($resource, $cm, $course); die; } else { $file = reset($files); unset($files); } if ($redirect) { // coming from course page or url index page // this redirect trick solves caching problems when tracking views ;-) $path = '/' . $context->id . '/mod_resource/content/' . $resource->revision . $file->get_filepath() . $file->get_filename(); $fullurl = file_encode_url($CFG->wwwroot . '/pluginfile.php', $path, false); redirect($fullurl); } $resource->mainfile = $file->get_filename(); switch (resource_get_final_display_type($resource)) { case RESOURCELIB_DISPLAY_EMBED: resource_display_embed($resource, $cm, $course, $file); break; case RESOURCELIB_DISPLAY_FRAME: resource_display_frame($resource, $cm, $course, $file); break; default: resource_print_workaround($resource, $cm, $course, $file); break; }
if ($resource->tobemigrated) { resource_print_tobemigrated($resource, $cm, $course); die; } $fs = get_file_storage(); $files = $fs->get_area_files($context->id, 'mod_resource', 'content', 0, 'sortorder DESC, id ASC', false); // TODO: this is not very efficient!! if (count($files) < 1) { resource_print_filenotfound($resource, $cm, $course); die; } else { $file = reset($files); unset($files); } $resource->mainfile = $file->get_filename(); $displaytype = resource_get_final_display_type($resource); if ($displaytype == RESOURCELIB_DISPLAY_OPEN || $displaytype == RESOURCELIB_DISPLAY_DOWNLOAD) { // For 'open' and 'download' links, we always redirect to the content - except // if the user just chose 'save and display' from the form then that would be // confusing if (!isset($_SERVER['HTTP_REFERER']) || strpos($_SERVER['HTTP_REFERER'], 'modedit.php') === false) { $redirect = true; } } if ($redirect) { // coming from course page or url index page // this redirect trick solves caching problems when tracking views ;-) $path = '/' . $context->id . '/mod_resource/content/' . $resource->revision . $file->get_filepath() . $file->get_filename(); $fullurl = moodle_url::make_file_url('/pluginfile.php', $path, $displaytype == RESOURCELIB_DISPLAY_DOWNLOAD); redirect($fullurl); }
/** * Given a course_module object, this function returns any * "extra" information that may be needed when printing * this activity in a course listing. * * See {@link get_array_of_activities()} in course/lib.php * * @param stdClass $coursemodule * @return cached_cm_info info */ function resource_get_coursemodule_info($coursemodule) { global $CFG, $DB; require_once("$CFG->libdir/filelib.php"); require_once("$CFG->dirroot/mod/resource/locallib.php"); require_once($CFG->libdir.'/completionlib.php'); $context = context_module::instance($coursemodule->id); if (!$resource = $DB->get_record('resource', array('id'=>$coursemodule->instance), 'id, name, display, displayoptions, tobemigrated, revision, intro, introformat')) { return NULL; } $info = new cached_cm_info(); $info->name = $resource->name; if ($coursemodule->showdescription) { // Convert intro to html. Do not filter cached version, filters run at display time. $info->content = format_module_intro('resource', $resource, $coursemodule->id, false); } if ($resource->tobemigrated) { $info->icon ='i/invalid'; return $info; } $fs = get_file_storage(); $files = $fs->get_area_files($context->id, 'mod_resource', 'content', 0, 'sortorder DESC, id ASC', false); // TODO: this is not very efficient!! if (count($files) >= 1) { $mainfile = reset($files); $info->icon = file_file_icon($mainfile, 24); $resource->mainfile = $mainfile->get_filename(); } $display = resource_get_final_display_type($resource); if ($display == RESOURCELIB_DISPLAY_POPUP) { $fullurl = "$CFG->wwwroot/mod/resource/view.php?id=$coursemodule->id&redirect=1"; $options = empty($resource->displayoptions) ? array() : unserialize($resource->displayoptions); $width = empty($options['popupwidth']) ? 620 : $options['popupwidth']; $height = empty($options['popupheight']) ? 450 : $options['popupheight']; $wh = "width=$width,height=$height,toolbar=no,location=no,menubar=no,copyhistory=no,status=no,directories=no,scrollbars=yes,resizable=yes"; $info->onclick = "window.open('$fullurl', '', '$wh'); return false;"; } else if ($display == RESOURCELIB_DISPLAY_NEW) { $fullurl = "$CFG->wwwroot/mod/resource/view.php?id=$coursemodule->id&redirect=1"; $info->onclick = "window.open('$fullurl'); return false;"; } // If any optional extra details are turned on, store in custom data $info->customdata = $resource->displayoptions; return $info; }
/** * Given a course_module object, this function returns any * "extra" information that may be needed when printing * this activity in a course listing. * * See {@link get_array_of_activities()} in course/lib.php * * @param object $coursemodule * @return object info */ function resource_get_coursemodule_info($coursemodule) { global $CFG, $DB; require_once "{$CFG->libdir}/filelib.php"; require_once "{$CFG->dirroot}/mod/resource/locallib.php"; if (!($resource = $DB->get_record('resource', array('id' => $coursemodule->instance), 'id, name, display, displayoptions, tobemigrated, mainfile, revision'))) { return NULL; } $info = new object(); $info->name = $resource->name; if ($resource->tobemigrated) { $info->icon = 'i/cross_red_big'; return $info; } $info->icon = str_replace(array('.gif', '.png'), '', file_extension_icon($resource->mainfile)); $display = resource_get_final_display_type($resource); if ($display == RESOURCELIB_DISPLAY_POPUP) { $fullurl = "{$CFG->wwwroot}/mod/resource/view.php?id={$coursemodule->id}&redirect=1"; $options = empty($resource->displayoptions) ? array() : unserialize($resource->displayoptions); $width = empty($options['popupwidth']) ? 620 : $options['popupwidth']; $height = empty($options['popupheight']) ? 450 : $options['popupheight']; $wh = "width={$width},height={$height},toolbar=no,location=no,menubar=no,copyhistory=no,status=no,directories=no,scrollbars=yes,resizable=yes"; $info->extra = urlencode("onclick=\"window.open('{$fullurl}', '', '{$wh}'); return false;\""); } else { if ($display == RESOURCELIB_DISPLAY_NEW) { $fullurl = "{$CFG->wwwroot}/mod/resource/view.php?id={$coursemodule->id}&redirect=1"; $info->extra = urlencode("onclick=\"window.open('{$fullurl}'); return false;\""); } else { if ($display == RESOURCELIB_DISPLAY_OPEN) { $fullurl = "{$CFG->wwwroot}/mod/resource/view.php?id={$coursemodule->id}&redirect=1"; $info->extra = urlencode("onclick=\"window.location.href ='{$fullurl}';return false;\""); } else { if ($display == RESOURCELIB_DISPLAY_DOWNLOAD) { // do not open any window because it would be left there after download $context = get_context_instance(CONTEXT_MODULE, $coursemodule->id); $path = '/' . $context->id . '/resource_content/' . $resource->revision . $resource->mainfile; $fullurl = addslashes_js(file_encode_url($CFG->wwwroot . '/pluginfile.php', $path, true)); $info->extra = urlencode("onclick=\"window.open('{$fullurl}'); return false;\""); } } } } return $info; }
/** * Given a course_module object, this function returns any * "extra" information that may be needed when printing * this activity in a course listing. * * See {@link get_array_of_activities()} in course/lib.php * * @param stdClass $coursemodule * @return cached_cm_info info */ function resource_get_coursemodule_info($coursemodule) { global $CFG, $DB; require_once "{$CFG->libdir}/filelib.php"; require_once "{$CFG->dirroot}/mod/resource/locallib.php"; require_once $CFG->libdir . '/completionlib.php'; $context = context_module::instance($coursemodule->id); if (!($resource = $DB->get_record('resource', array('id' => $coursemodule->instance), 'id, name, display, displayoptions, tobemigrated, revision, intro, introformat'))) { return NULL; } $info = new cached_cm_info(); $info->name = $resource->name; if ($coursemodule->showdescription) { // Convert intro to html. Do not filter cached version, filters run at display time. $info->content = format_module_intro('resource', $resource, $coursemodule->id, false); } if ($resource->tobemigrated) { $info->icon = 'i/invalid'; return $info; } $fs = get_file_storage(); $files = $fs->get_area_files($context->id, 'mod_resource', 'content', 0, 'sortorder DESC, id ASC', false); // TODO: this is not very efficient!! if (count($files) >= 1) { $mainfile = reset($files); $info->icon = file_file_icon($mainfile, 24); $resource->mainfile = $mainfile->get_filename(); } $display = resource_get_final_display_type($resource); if ($display == RESOURCELIB_DISPLAY_POPUP) { $fullurl = "{$CFG->wwwroot}/mod/resource/view.php?id={$coursemodule->id}&redirect=1"; $options = empty($resource->displayoptions) ? array() : unserialize($resource->displayoptions); $width = empty($options['popupwidth']) ? 620 : $options['popupwidth']; $height = empty($options['popupheight']) ? 450 : $options['popupheight']; $wh = "width={$width},height={$height},toolbar=no,location=no,menubar=no,copyhistory=no,status=no,directories=no,scrollbars=yes,resizable=yes"; $info->onclick = "window.open('{$fullurl}', '', '{$wh}'); return false;"; } else { if ($display == RESOURCELIB_DISPLAY_NEW) { $fullurl = "{$CFG->wwwroot}/mod/resource/view.php?id={$coursemodule->id}&redirect=1"; $info->onclick = "window.open('{$fullurl}'); return false;"; } } // If any optional extra details are turned on, store in custom data, // add some file details as well to be used later by resource_get_optional_details() without retriving. // Do not store filedetails if this is a reference - they will still need to be retrieved every time. if (($filedetails = resource_get_file_details($resource, $coursemodule)) && empty($filedetails['isref'])) { $displayoptions = @unserialize($resource->displayoptions); $displayoptions['filedetails'] = $filedetails; $info->customdata = serialize($displayoptions); } else { $info->customdata = $resource->displayoptions; } return $info; }