/** * Calculate a sha1 has of either a single file or a list * of files based on the data set by load_data. * * @return string */ public function get_sha1() { if ($this->plugin && $this->editor) { $plugin = $this->get_submission_plugin(); $options = portfolio_format_text_options(); $options->context = context_module::instance($this->cmid); $text = format_text($plugin->get_editor_text($this->editor, $this->sid), $plugin->get_editor_format($this->editor, $this->sid), $options); $textsha1 = sha1($text); $filesha1 = ''; try { $filesha1 = $this->get_sha1_file(); } catch (portfolio_caller_exception $e) { // No files. } return sha1($textsha1 . $filesha1); } return $this->get_sha1_file(); }
/** * this is a very cut down version of what is in forum_make_mail_post * * @global object * @param int $post * @return string */ private function prepare_post($post, $fileoutputextras = null) { global $DB; static $users; if (empty($users)) { $users = array($this->user->id => $this->user); } if (!array_key_exists($post->userid, $users)) { $users[$post->userid] = $DB->get_record('user', array('id' => $post->userid)); } // add the user object on to the post so we can pass it to the leap writer if necessary $post->author = $users[$post->userid]; $viewfullnames = true; // format the post body $options = portfolio_format_text_options(); $format = $this->get('exporter')->get('format'); $formattedtext = format_text($post->message, $post->messageformat, $options, $this->get('course')->id); $formattedtext = portfolio_rewrite_pluginfile_urls($formattedtext, $this->modcontext->id, 'mod_forum', 'post', $post->id, $format); $output = '<table border="0" cellpadding="3" cellspacing="0" class="forumpost">'; $output .= '<tr class="header"><td>'; // can't print picture. $output .= '</td>'; if ($post->parent) { $output .= '<td class="topic">'; } else { $output .= '<td class="topic starter">'; } $output .= '<div class="subject">' . format_string($post->subject) . '</div>'; $fullname = fullname($users[$post->userid], $viewfullnames); $by = new stdClass(); $by->name = $fullname; $by->date = userdate($post->modified, '', $this->user->timezone); $output .= '<div class="author">' . get_string('bynameondate', 'forum', $by) . '</div>'; $output .= '</td></tr>'; $output .= '<tr><td class="left side" valign="top">'; $output .= '</td><td class="content">'; $output .= $formattedtext; if (is_array($this->keyedfiles) && array_key_exists($post->id, $this->keyedfiles) && is_array($this->keyedfiles[$post->id]) && count($this->keyedfiles[$post->id]) > 0) { $output .= '<div class="attachments">'; $output .= '<br /><b>' . get_string('attachments', 'forum') . '</b>:<br /><br />'; foreach ($this->keyedfiles[$post->id] as $file) { $output .= $format->file_output($file) . '<br/ >'; } $output .= "</div>"; } $output .= '</td></tr></table>' . "\n\n"; return $output; }
/** * helper function to get the html content of an entry * for both this class and the full glossary exporter * this is a very simplified version of the dictionary format output, * but with its 500 levels of indirection removed * and file rewriting handled by the portfolio export format. * * @param stdclass $course * @param stdclass $cm * @param stdclass $glossary * @param stdclass $entry * * @return string */ public static function entry_content($course, $cm, $glossary, $entry, $aliases, $format) { global $OUTPUT, $DB; $entry = clone $entry; $context = get_context_instance(CONTEXT_MODULE, $cm->id); $options = portfolio_format_text_options(); $options->trusted = $entry->definitiontrust; $options->context = $context; $output = '<table class="glossarypost dictionary" cellspacing="0">' . "\n"; $output .= '<tr valign="top">' . "\n"; $output .= '<td class="entry">' . "\n"; $output .= '<div class="concept">'; $output .= format_text($OUTPUT->heading($entry->concept, 3), FORMAT_MOODLE, $options); $output .= '</div> ' . "\n"; $entry->definition = format_text($entry->definition, $entry->definitionformat, $options); $output .= portfolio_rewrite_pluginfile_urls($entry->definition, $context->id, 'mod_glossary', 'entry', $entry->id, $format); if (isset($entry->footer)) { $output .= $entry->footer; } $output .= '</td></tr>' . "\n"; if (!empty($aliases)) { $aliases = explode(',', $aliases->alias); $output .= '<tr valign="top"><td class="entrylowersection">'; $key = count($aliases) == 1 ? 'alias' : 'aliases'; $output .= get_string($key, 'glossary') . ': '; foreach ($aliases as $alias) { $output .= s($alias) . ','; } $output = substr($output, 0, -1); $output .= '</td></tr>' . "\n"; } if ($entry->sourceglossaryid == $cm->instance) { if (!($maincm = get_coursemodule_from_instance('glossary', $entry->glossaryid))) { return ''; } $filecontext = get_context_instance(CONTEXT_MODULE, $maincm->id); } else { $filecontext = $context; } $fs = get_file_storage(); if ($files = $fs->get_area_files($filecontext->id, 'mod_glossary', 'attachment', $entry->id, "timemodified", false)) { $output .= '<table border="0" width="100%"><tr><td>' . "\n"; foreach ($files as $file) { $output .= $format->file_output($file); } $output .= '</td></tr></table>' . "\n"; } $output .= '</table>' . "\n"; return $output; }
function portfolio_prepare_package($exporter, $user) { $submission = $this->get_submission($user->id); $options = portfolio_format_text_options(); $html = format_text($submission->data1, $submission->data2, $options); $html = portfolio_rewrite_pluginfile_urls($html, $this->context->id, 'mod_assignment', $this->filearea, $submission->id, $exporter->get('format')); if (in_array($exporter->get('formatclass'), array(PORTFOLIO_FORMAT_PLAINHTML, PORTFOLIO_FORMAT_RICHHTML))) { if ($files = $exporter->get('caller')->get('multifiles')) { foreach ($files as $f) { $exporter->copy_existing_file($f); } } return $exporter->write_new_file($html, 'assignment.html', !empty($files)); } else if ($exporter->get('formatclass') == PORTFOLIO_FORMAT_LEAP2A) { $leapwriter = $exporter->get('format')->leap2a_writer(); $entry = new portfolio_format_leap2a_entry('assignmentonline' . $this->assignment->id, $this->assignment->name, 'resource', $html); $entry->add_category('web', 'resource_type'); $entry->published = $submission->timecreated; $entry->updated = $submission->timemodified; $entry->author = $user; $leapwriter->add_entry($entry); if ($files = $exporter->get('caller')->get('multifiles')) { $leapwriter->link_files($entry, $files, 'assignmentonline' . $this->assignment->id . 'file'); foreach ($files as $f) { $exporter->copy_existing_file($f); } } $exporter->write_new_file($leapwriter->to_xml(), $exporter->get('format')->manifest_name(), true); } else { debugging('invalid format class: ' . $exporter->get('formatclass')); } }
/** * Helper function to call {@link format_text()} on exported text. * * We need to call {@link format_text()} to convert the text into HTML, but * we have to keep the original @@PLUGINFILE@@ placeholder there without a * warning so that {@link portfolio_rewrite_pluginfile_urls()} can do its work. * * @param string $text * @param int $format * @return string HTML */ protected function format_exported_text($text, $format) { $text = str_replace('@@PLUGINFILE@@', '@@ORIGINALPLUGINFILE@@', $text); $html = format_text($text, $format, portfolio_format_text_options()); $html = str_replace('@@ORIGINALPLUGINFILE@@', '@@PLUGINFILE@@', $html); return $html; }
/** * this is a very cut down version of what is in referentiel_certificat print_lib * * @global object * @return string */ private function prepare_certificat() { global $DB; $output = ''; if (!empty($this->certificat)) { $fullname = ''; $fullnameteacher = get_string('l_inconnu', 'referentiel'); if (!empty($this->certificat->userid)) { $user = $DB->get_record('user', array('id' => $this->certificat->userid)); if ($user) { $fullname = fullname($user, true); $login = $user->username; } } if (!empty($this->certificat->teacherid)) { $teacher = $DB->get_record('user', array('id' => $this->certificat->teacherid)); if ($teacher) { $fullnameteacher = fullname($teacher, true); } } $by = new stdClass(); $by->name = $fullnameteacher; $by->date = date("Y-m-d H:i:s"); $liste_empreintes = referentiel_purge_dernier_separateur(referentiel_get_liste_empreintes_competence($this->certificat->ref_referentiel), '/'); $liste_description_competences_poids = referentiel_purge_dernier_separateur(referentiel_get_liste_poids($this->certificat->ref_referentiel), '|'); // $liste_competences=referentiel_affiche_competences_certificat('/',':',$this->certificat->competences_certificat, $liste_empreintes); $liste_competences = $this->affiche_competences_validees('/', ':', $this->certificat->competences_certificat, $liste_empreintes, $liste_description_competences_poids); // format the body $s = '<h3>' . get_string('certification', 'referentiel') . ' '; if (!empty($this->occurrence->url_referentiel)) { $s .= get_string('referentiel', 'referentiel') . ' <a href="' . $this->occurrence->url_referentiel . '" target="_blank">' . $this->occurrence->code_referentiel . '</a></h3>' . "\n"; } else { $s .= get_string('referentiel', 'referentiel') . ' ' . $this->occurrence->code_referentiel . '</h3>' . "\n"; } $s .= '<p><b>' . get_string('name', 'referentiel') . ':</b> ' . $fullname . ' (<i>' . $login . '</i>)<br />' . '<b>' . get_string('userid', 'referentiel') . '</b>: #' . $this->certificat->userid . '<br />' . '<b>' . get_string('id', 'referentiel') . get_string('certificat', 'referentiel') . '</b>: #' . $this->certificat->id . '<br />' . '<b>' . get_string('competences_certificat', 'referentiel') . ':</b><br />' . $liste_competences . '<br />' . "\n"; // .'<b>'.get_string('competences_declarees', 'referentiel', $fullname).':</b><br />'.$this->certificat->competences_activite.'<br />' if (!empty($this->certificat->verrou)) { $s .= '<i>' . get_string('certificat', 'referentiel') . ' ' . get_string('verrou', 'referentiel') . '</i><br />' . "\n"; } if (!empty($this->certificat->synthese_certificat)) { $s .= '<b>' . get_string('synthese_certificat', 'referentiel') . ':</b> ' . $this->certificat->synthese_certificat . '<br />' . "\n"; } if (empty($this->certificat->decision_jury)) { $s .= '<b>' . get_string('decisionnotfound', 'referentiel', date("Y-m-d")) . '</b><br />'; } else { $s .= '<b>' . get_string('decision_jury', 'referentiel') . ':</b> ' . $this->certificat->decision_jury . '<br />'; } if (!empty($this->certificat->teacherid)) { $s .= '<b>' . get_string('referent', 'referentiel') . ':</b> ' . referentiel_get_user_info($this->certificat->teacherid) . '<br />'; } if (!empty($this->certificat->date_decision)) { $s .= '<b>' . get_string('date_decision', 'referentiel') . ':</b> ' . userdate($this->certificat->date_decision) . '<br />'; } if (!empty($this->certificat->commentaire_certificat)) { $s .= '<b>' . get_string('commentaire_certificat', 'referentiel') . ': </b>' . $this->certificat->commentaire_certificat . '</p>' . "\n"; } $s .= '</p>' . "\n"; // echo $s; // exit; $options = portfolio_format_text_options(); $format = $this->get('exporter')->get('format'); $formattedtext = format_text($s, FORMAT_HTML, $options); // $formattedtext = portfolio_rewrite_pluginfile_urls($formattedtext, $this->context->id, 'mod_referentiel', 'certificat', $certificat->id, $format); $output = '<table border="0" cellpadding="3" cellspacing="1" bgcolor="#333300">'; $output .= '<tr valign="top" bgcolor="#ffffff"><td>'; $output .= '<div><b>' . get_string('certificat', 'referentiel') . ' ' . format_string($this->occurrence->code_referentiel) . '</b></div>'; if (!empty($this->certificat->decision_jury)) { $output .= '<div>' . get_string('proposedbynameondate', 'referentiel', $by) . '</div>'; } else { $output .= '<div>' . get_string('evaluatedbynameondate', 'referentiel', $by) . '</div>'; } $output .= '</td></tr>'; $output .= '<tr valign="top" bgcolor="#ffffff"><td align="left">'; $output .= $formattedtext; $output .= '</td></tr></table>' . "\n\n"; } return $output; }
/** * Obtains page html suitable for use in portfolio export. * @param object $pageversion Page and version data * @param array $attachments Attachments array indexed by versionid * @param object $context Moodle context object * @param object $ouwiki OU wiki object * @param object $subwiki Subwiki object * @param object $course Course object * @param bool $withannotations If true, includes annotations * @param portfolio_format $portfolioformat Portfolio format * @param string $plugin the portfolio plugin being used. * @return string HTML code */ static function get_page_html($pageversion, $attachments, $context, $ouwiki, $subwiki, $course, $withannotations, portfolio_format $portfolioformat, $plugin) { global $DB; // Format the page body $options = portfolio_format_text_options(); $formattedtext = format_text($pageversion->xhtml, $pageversion->xhtmlformat, $options, $course->id); $formattedtext = portfolio_rewrite_pluginfile_urls($formattedtext, $context->id, 'mod_ouwiki', 'content', $pageversion->versionid, $portfolioformat); // Get annotations - only if using annotation system. prevents unnecessary db access if ($ouwiki->annotation) { $annotations = ouwiki_get_annotations($pageversion); } else { $annotations = array(); } // Convert or remove the annotations if ($ouwiki->annotation && count($annotations)) { ouwiki_highlight_existing_annotations($formattedtext, $annotations, $withannotations ? 'portfolio' : 'clear'); } // Do overall page, starting with title $title = $pageversion->title; if ($title === null) { $title = get_string('startpage', 'ouwiki'); } $output = html_writer::tag('h2', s($title)); // Last change info $user = (object) array('id' => $pageversion->userid, 'firstname' => $pageversion->firstname, 'lastname' => $pageversion->lastname); $lastchange = get_string('lastchange', 'ouwiki', (object) array('date' => userdate($pageversion->timecreated), 'userlink' => ouwiki_display_user($user, $course->id))); $output .= html_writer::tag('p', html_writer::tag('small', html_writer::tag('i', $lastchange))); // Main text $output .= html_writer::tag('div', $formattedtext); // Word count if ($ouwiki->enablewordcount) { $wordcount = get_string('numwords', 'ouwiki', $pageversion->wordcount); $output .= html_writer::tag('div', html_writer::empty_tag('br')); $output .= html_writer::tag('p', html_writer::tag('small', $wordcount), array('class' => 'ouw_wordcount')); } // Attachments if ($attachments[$pageversion->versionid]) { $output .= html_writer::start_tag('div', array('class' => 'attachments')); $output .= html_writer::tag('h3', get_string('attachments', 'ouwiki')); $output .= html_writer::start_tag('ul'); foreach ($attachments[$pageversion->versionid] as $file) { if ($plugin == 'rtf') { $filename = $file->get_filename(); $path = moodle_url::make_pluginfile_url($context->id, 'mod_ouwiki', 'attachment', $pageversion->versionid, '/', $filename, true); $atag = html_writer::tag('a', $filename, array('href' => $path)); } else { $atag = $portfolioformat->file_output($file); } $output .= html_writer::tag('li', $atag); } $output .= html_writer::end_tag('ul'); $output .= html_writer::end_tag('div'); } return $output; }
/** * Obtains page html suitable for use in portfolio export. * @param object $pageversion Page and version data * @param array $attachments Attachments array indexed by versionid * @param object $context Moodle context object * @param object $ouwiki OU wiki object * @param object $subwiki Subwiki object * @param object $course Course object * @param bool $withannotations If true, includes annotations * @param portfolio_format $portfolioformat Portfolio format * @param string $plugin the portfolio plugin being used. * @return string HTML code */ public static function get_page_html($pageversion, $attachments, $context, $ouwiki, $subwiki, $course, $withannotations, portfolio_format $portfolioformat, $plugin) { global $DB; // Format the page body. $options = portfolio_format_text_options(); $options->filter = true; $formattedtext = portfolio_rewrite_pluginfile_urls($pageversion->xhtml, $context->id, 'mod_ouwiki', 'content', $pageversion->versionid, $portfolioformat); $formattedtext = format_text($formattedtext, $pageversion->xhtmlformat, $options, $course->id); // Get annotations - only if using annotation system. prevents unnecessary db access. if ($ouwiki->annotation) { $annotations = ouwiki_get_annotations($pageversion); } else { $annotations = array(); } // Convert or remove the annotations. if ($ouwiki->annotation && count($annotations)) { ouwiki_highlight_existing_annotations($formattedtext, $annotations, $withannotations ? 'portfolio' : 'clear'); } // Do overall page, starting with title. $title = $pageversion->title; if ($title === '') { $title = get_string('startpage', 'ouwiki'); } $output = html_writer::tag('h2', s($title)); // Last change info. $user = new stdClass(); foreach (explode(',', user_picture::fields()) as $field) { if ($field == 'id') { $user->id = $pageversion->userid; } else { $user->{$field} = $pageversion->{$field}; } } $lastchange = get_string('lastchange', 'ouwiki', (object) array('date' => userdate($pageversion->timecreated), 'userlink' => ouwiki_display_user($user, $course->id))); $output .= html_writer::tag('p', html_writer::tag('small', html_writer::tag('i', $lastchange))); // Main text. $output .= html_writer::tag('div', $formattedtext); // Word count. if ($ouwiki->enablewordcount) { $wordcount = get_string('numwords', 'ouwiki', $pageversion->wordcount); $output .= html_writer::tag('div', html_writer::empty_tag('br')); $output .= html_writer::tag('p', html_writer::tag('small', $wordcount), array('class' => 'ouw_wordcount')); } // Attachments. if ($attachments[$pageversion->versionid]) { $output .= html_writer::start_tag('div', array('class' => 'attachments')); $output .= html_writer::tag('h3', get_string('attachments', 'ouwiki')); $output .= html_writer::start_tag('ul'); foreach ($attachments[$pageversion->versionid] as $file) { if ($plugin == 'rtf') { $filename = $file->get_filename(); $path = moodle_url::make_pluginfile_url($context->id, 'mod_ouwiki', 'attachment', $pageversion->versionid, '/', $filename, true); $atag = html_writer::tag('a', $filename, array('href' => $path)); } else { $atag = $portfolioformat->file_output($file); } $output .= html_writer::tag('li', $atag); } $output .= html_writer::end_tag('ul'); $output .= html_writer::end_tag('div'); } // Replace all user links with user name so that you can not access user links from within exported document. $output = preg_replace('~<a href="[^"]*/user/view.php[^"]*"\\s*>(.*?)</a>~', '$1', $output); return $output; }