global $CFG;
$this->name = $name;
- if ($url instanceof moodle_url) {
- $url = clone($url);
- } else {
- $url = new moodle_url($url);
- }
+ $url = new moodle_url($url);
if ($this->name) {
$_name = $this->name;
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
+/**
+ * This constant is used for html attributes which need to have an empty
+ * value and still be output by the renderers (e.g. alt="");
+ *
+ * @constant @EMPTY@
+ */
+define('HTML_ATTR_EMPTY', '@EMPTY@');
+
+
+/**
+ * Interface marking other classes as suitable for renderer_base::render()
+ * @author 2010 Petr Skoda (skodak) info@skodak.org
+ */
+interface renderable {
+ // intentionally empty
+}
+
+
+/**
+ * Component representing a user picture.
+ *
+ * @copyright 2009 Nicolas Connault, 2010 Petr Skoda
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @since Moodle 2.0
+ */
+class user_picture implements renderable {
+ /**
+ * List of mandatory fields in user record here.
+ * @var string
+ */
+ const FIELDS = 'id,picture,firstname,lastname,imagealt';
+
+ /**
+ * @var object $user A user object with at least fields id, picture, imagealt, firstname and lastname set.
+ */
+ public $user;
+ /**
+ * @var int $courseid The course id. Used when constructing the link to the user's profile,
+ * page course id used if not specified.
+ */
+ public $courseid;
+ /**
+ * @var bool $link add course profile link to image
+ */
+ public $link = true;
+ /**
+ * @var int $size Size in pixels. Special values are (true/1 = 100px) and (false/0 = 35px) for backward compatibility
+ */
+ public $size = 35;
+ /**
+ * @var boolean $alttext add non-blank alt-text to the image.
+ * Default true, set to false when image alt just duplicates text in screenreaders.
+ */
+ public $alttext = true;
+ /**
+ * @var boolean $popup Whether or not to open the link in a popup window.
+ */
+ public $popup = false;
+ /**
+ * @var string Image class attribute
+ */
+ public $class = 'userpicture';
+
+ /**
+ * User picture constructor.
+ *
+ * @param object $user user record with at least id, picture, imagealt, firstname and lastname set.
+ * @param array $options such as link, size, link, ...
+ */
+ public function __construct(stdClass $user) {
+ global $DB;
+
+ static $fields = null;
+ if (is_null($fields)) {
+ $fields = explode(',', self::FIELDS);
+ }
+
+ if (empty($user->id)) {
+ throw new coding_exception('User id is required when printing user avatar image.');
+ }
+
+ // only touch the DB if we are missing data and complain loudly...
+ $needrec = false;
+ foreach ($fields as $field) {
+ if (!array_key_exists($field, $user)) {
+ $needrec = true;
+ debugging('Missing '.$field.' property in $user object, this is a performance problem that needs to be fixed by a developer. '
+ .'Please use user_picture::fields() to get the full list of required fields.', DEBUG_DEVELOPER);
+ break;
+ }
+ }
+
+ if ($needrec) {
+ $this->user = $DB->get_record('user', array('id'=>$user->id), self::FIELDS, MUST_EXIST);
+ } else {
+ $this->user = clone($user);
+ }
+ }
+
+ /**
+ * Returns a list of required user fields, usefull when fetching required user info from db.
+ * @param string $tableprefix name of database table prefix in query
+ * @return string
+ */
+ public static function fields($tableprefix = '') {
+ if ($tableprefix === '') {
+ return self::FIELDS;
+ } else {
+ return "$tableprefix." . str_replace(',', ",$tableprefix.", self::FIELDS);
+ }
+ }
+}
+
+// ==== HTML writer and helper classes, will be probably moved elsewhere ======
+
+
+/**
+ * Simple html output class
+ * @copyright 2009 Tim Hunt, 2010 Petr Skoda
+ */
+class html_writer {
+ /**
+ * Outputs a tag with attributes and contents
+ * @param string $tagname The name of tag ('a', 'img', 'span' etc.)
+ * @param array $attributes The tag attributes (array('src' => $url, 'class' => 'class1') etc.)
+ * @param string $contents What goes between the opening and closing tags
+ * @return string HTML fragment
+ */
+ public static function tag($tagname, array $attributes = null, $contents) {
+ return self::start_tag($tagname, $attributes) . $contents . self::end_tag($tagname);
+ }
+
+ /**
+ * Outputs an opening tag with attributes
+ * @param string $tagname The name of tag ('a', 'img', 'span' etc.)
+ * @param array $attributes The tag attributes (array('src' => $url, 'class' => 'class1') etc.)
+ * @return string HTML fragment
+ */
+ public static function start_tag($tagname, array $attributes = null) {
+ return '<' . $tagname . self::attributes($attributes) . '>';
+ }
+
+ /**
+ * Outputs a closing tag
+ * @param string $tagname The name of tag ('a', 'img', 'span' etc.)
+ * @return string HTML fragment
+ */
+ public static function end_tag($tagname) {
+ return '</' . $tagname . '>';
+ }
+
+ /**
+ * Outputs an empty tag with attributes
+ * @param string $tagname The name of tag ('input', 'img', 'br' etc.)
+ * @param array $attributes The tag attributes (array('src' => $url, 'class' => 'class1') etc.)
+ * @return string HTML fragment
+ */
+ public static function empty_tag($tagname, array $attributes = null) {
+ return '<' . $tagname . self::attributes($attributes) . ' />';
+ }
+
+ /**
+ * Outputs a HTML attribute and value
+ * @param string $name The name of the attribute ('src', 'href', 'class' etc.)
+ * @param string $value The value of the attribute. The value will be escaped with {@link s()}
+ * @return string HTML fragment
+ */
+ public static function attribute($name, $value) {
+ if (is_array($value)) {
+ debugging("Passed an array for the HTML attribute $name", DEBUG_DEVELOPER);
+ }
+
+ $value = trim($value);
+ if ($value == HTML_ATTR_EMPTY) {
+ return ' ' . $name . '=""';
+ } else if ($value || is_numeric($value)) { // We want 0 to be output.
+ return ' ' . $name . '="' . s($value) . '"';
+ }
+ }
+
+ /**
+ * Outputs a list of HTML attributes and values
+ * @param array $attributes The tag attributes (array('src' => $url, 'class' => 'class1') etc.)
+ * The values will be escaped with {@link s()}
+ * @return string HTML fragment
+ */
+ public static function attributes(array $attributes = null) {
+ $attributes = (array)$attributes;
+ $output = '';
+ foreach ($attributes as $name => $value) {
+ $output .= self::attribute($name, $value);
+ }
+ return $output;
+ }
+
+ /**
+ * Generates random html element id.
+ * @param string $base
+ * @return string
+ */
+ public static function random_id($base='random') {
+ return uniqid($base);
+ }
+}
+
+
+// ===============================================================================================
+// TODO: Following components will be refactored soon
+
/**
* Base class for classes representing HTML elements, like html_select.
*
}
-/**
- * Component representing a user picture.
- *
- * @copyright 2009 Nicolas Connault
- * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- * @since Moodle 2.0
- */
-class user_picture extends html_image {
- /**
- * @var mixed $user A user object with at least fields id, picture, imagealt, firstname and lastname set.
- */
- public $user;
- /**
- * @var int $courseid The course id. Used when constructing the link to the user's profile,
- * page course id used if not specified.
- */
- public $courseid;
- /**
- * @var bool $link add course profile link to image
- */
- public $link = true;
- /**
- * @var int $size Size in pixels. Special values are (true/1 = 100px) and (false/0 = 35px) for backward compatibility
- */
- public $size = 35;
- /**
- * @var boolean $alttext add non-blank alt-text to the image.
- * Default true, set to false when image alt just duplicates text in screenreaders.
- */
- public $alttext = true;
- /**
- * @var boolean $popup Whether or not to open the link in a popup window.
- */
- public $popup = false;
-
- /**
- * @var link to profile if link requested
- */
- public $url;
-
- /**
- * User picture constructor.
- *
- * @param object $user user record with at least id, picture, imagealt, firstname and lastname set.
- * @param array $options such as link, size, link, ...
- */
- public function __construct(stdClass $user = null, array $options = null) {
- parent::__construct(null, $options);
-
- if ($user) {
- $this->user = $user;
- }
- }
-
- /**
- * @see lib/html_component#prepare()
- * @return void
- */
- public function prepare(renderer_base $output, moodle_page $page, $target) {
- global $CFG, $DB;
-
- if (empty($this->user)) {
- throw new coding_exception('A user_picture object must have a $user object before being rendered.');
- }
-
- if (empty($this->user->id)) {
- throw new coding_exception('User id missing in $user object.');
- }
-
- if (empty($this->courseid)) {
- $courseid = $page->course->id;
- } else {
- $courseid = $this->courseid;
- }
-
- // only touch the DB if we are missing data and complain loudly...
- $needrec = false;
-
- if (!array_key_exists('picture', $this->user)) {
- $needrec = true;
- debugging('Missing picture property in $user object, this is a performance problem that needs to be fixed by a developer.', DEBUG_DEVELOPER);
- }
- if ($this->alttext) {
- if (!array_key_exists('firstname', $this->user) || !array_key_exists('lastname', $this->user) || !array_key_exists('imagealt', $this->user)) {
- $needrec = true;
- debugging('Missing firstname, lastname or imagealt property in $user object, this is a performance problem that needs to be fixed by a developer.', DEBUG_DEVELOPER);
- }
- }
-
- if ($needrec) {
- $this->user = $DB->get_record('user', array('id'=>$this->user->id), 'id, firstname, lastname, imagealt');
- }
-
- if ($this->alttext) {
- if (!empty($user->imagealt)) {
- $this->alt = $user->imagealt;
- } else {
- $this->alt = get_string('pictureof', '', fullname($this->user));
- }
- } else {
- $this->alt = HTML_ATTR_EMPTY;
- }
-
- if ($this->link) {
- $this->url = new moodle_url('/user/view.php', array('id' => $this->user->id, 'course' => $courseid));
- } else {
- $this->url = null;
- $this->popup = false;
- }
-
- if (empty($this->size)) {
- $file = 'f2';
- $this->size = 35;
- } else if ($this->size === true or $this->size == 1) {
- $file = 'f1';
- $this->size = 100;
- } else if ($this->size >= 50) {
- $file = 'f1';
- } else {
- $file = 'f2';
- }
-
- if (!empty($this->size)) {
- $this->width = $this->size;
- $this->height = $this->size;
- }
-
- $this->add_class('userpicture');
-
- if (!empty($this->user->picture)) {
- require_once($CFG->libdir.'/filelib.php');
- $this->src = new moodle_url(get_file_url($this->user->id.'/'.$file.'.jpg', null, 'user'));
- } else { // Print default user pictures (use theme version if available)
- $this->add_class('defaultuserpic');
- $this->src = $output->pix_url('u/' . $file);
- }
-
- parent::prepare($output, $page, $target);
- }
-}
-
-
/**
* Component representing a help icon.
*
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
-/**
- * This constant is used for html attributes which need to have an empty
- * value and still be output by the renderers (e.g. alt="");
- *
- * @constant @EMPTY@
- */
-define('HTML_ATTR_EMPTY', '@EMPTY@');
-
require_once($CFG->libdir.'/outputcomponents.php');
require_once($CFG->libdir.'/outputactions.php');
require_once($CFG->libdir.'/outputfactories.php');
}
/**
- * Have we started output yet?
- * @return boolean true if the header has been printed.
- */
- public function has_started() {
- return $this->page->state >= moodle_page::STATE_IN_BODY;
- }
-
- /**
- * Outputs a tag with attributes and contents
- * @param string $tagname The name of tag ('a', 'img', 'span' etc.)
- * @param array $attributes The tag attributes (array('src' => $url, 'class' => 'class1') etc.)
- * @param string $contents What goes between the opening and closing tags
- * @return string HTML fragment
- */
- protected function output_tag($tagname, array $attributes = null, $contents) {
- return $this->output_start_tag($tagname, $attributes) . $contents .
- $this->output_end_tag($tagname);
- }
-
- /**
- * Outputs an opening tag with attributes
- * @param string $tagname The name of tag ('a', 'img', 'span' etc.)
- * @param array $attributes The tag attributes (array('src' => $url, 'class' => 'class1') etc.)
- * @return string HTML fragment
- */
- protected function output_start_tag($tagname, array $attributes = null) {
- return '<' . $tagname . $this->output_attributes($attributes) . '>';
- }
-
- /**
- * Outputs a closing tag
- * @param string $tagname The name of tag ('a', 'img', 'span' etc.)
- * @return string HTML fragment
- */
- protected function output_end_tag($tagname) {
- return '</' . $tagname . '>';
- }
-
- /**
- * Outputs an empty tag with attributes
- * @param string $tagname The name of tag ('input', 'img', 'br' etc.)
- * @param array $attributes The tag attributes (array('src' => $url, 'class' => 'class1') etc.)
- * @return string HTML fragment
+ * Returns rendered widget.
+ * @param renderable $widget intence with renderable interface
+ * @return string
*/
- protected function output_empty_tag($tagname, array $attributes = null) {
- return '<' . $tagname . $this->output_attributes($attributes) . ' />';
+ public function render(renderable $widget) {
+ $rendermethod = 'render_'.get_class($widget);
+ if (method_exists($this, $rendermethod)) {
+ return $this->$rendermethod($widget);
+ }
+ throw new coding_exception('Can not render widget, renderer method ('.$rendermethod.') not found.');
}
/**
- * Outputs a HTML attribute and value
- * @param string $name The name of the attribute ('src', 'href', 'class' etc.)
- * @param string $value The value of the attribute. The value will be escaped with {@link s()}
- * @return string HTML fragment
+ * Adds JS handlers needed for event execution for one html element id
+ * @param string $id
+ * @param component_action $actions
+ * @return void
*/
- protected function output_attribute($name, $value) {
- if (is_array($value)) {
- debugging("Passed an array for the HTML attribute $name", DEBUG_DEVELOPER);
- }
-
- $value = trim($value);
- if ($value == HTML_ATTR_EMPTY) {
- return ' ' . $name . '=""';
- } else if ($value || is_numeric($value)) { // We want 0 to be output.
- return ' ' . $name . '="' . s($value) . '"';
- }
+ public function add_action_handler($id, component_action $action) {
+ $this->page->requires->event_handler($id, $action->event, $action->jsfunction, $action->jsfunctionargs);
}
/**
- * Outputs a list of HTML attributes and values
- * @param array $attributes The tag attributes (array('src' => $url, 'class' => 'class1') etc.)
- * The values will be escaped with {@link s()}
- * @return string HTML fragment
+ * Have we started output yet?
+ * @return boolean true if the header has been printed.
*/
- protected function output_attributes(array $attributes = null) {
- $attributes = (array)$attributes;
- $output = '';
- foreach ($attributes as $name => $value) {
- $output .= $this->output_attribute($name, $value);
- }
- return $output;
+ public function has_started() {
+ return $this->page->state >= moodle_page::STATE_IN_BODY;
}
/**
* @return void;
*/
protected function prepare_event_handlers(html_component $component) {
+ //TODO: to be deleted soon
$actions = $component->get_actions();
if (!empty($actions) && is_array($actions) && $actions[0] instanceof component_action) {
foreach ($actions as $action) {
* @return void
*/
public static function apply_component_options(html_component $component, array $options = null) {
+ //TODO: to be deleted soon
$options = (array)$options;
foreach ($options as $key => $value) {
if ($key === 'class' or $key === 'classes') {
parent::__construct($page, $target);
}
+ /**
+ * Returns rendered widget.
+ * @param renderable $widget intence with renderable interface
+ * @return string
+ */
+ public function render(renderable $widget) {
+ $rendermethod = 'render_'.get_class($widget);
+ if (method_exists($this, $rendermethod)) {
+ return $this->$rendermethod($widget);
+ }
+ // pass to core renderer if method not found here
+ $this->output->render($widget);
+ }
+
/**
* Magic method used to pass calls otherwise meant for the standard renderer
* to it to ensure we don't go causing unnessecary greif.
$this->page->requires->js($jsurl->out(), true)->in_head();
$jsurl = $this->page->theme->javascript_url(true);
$this->page->requires->js($jsurl->out(), true);
-
+
// Perform a browser environment check for the flash version. Should only run once per login session.
if (isloggedin() && !empty($CFG->excludeoldflashclients) && empty($SESSION->flashversion)) {
$this->page->requires->yui2_lib('event');
// List alternate versions.
foreach ($this->page->alternateversions as $type => $alt) {
- $output .= $this->output_empty_tag('link', array('rel' => 'alternate',
+ $output .= html_writer::empty_tag('link', array('rel' => 'alternate',
'type' => $type, 'title' => $alt->title, 'href' => $alt->url));
}
}
$controlshtml = array();
foreach ($controls as $control) {
- $controlshtml[] = $this->output_tag('a', array('class' => 'icon',
+ $controlshtml[] = html_writer::tag('a', array('class' => 'icon',
'title' => $control['caption'], 'href' => $control['url']),
- $this->output_empty_tag('img', array('src' => $this->pix_url($control['icon'])->out(false, array(), false),
+ html_writer::empty_tag('img', array('src' => $this->pix_url($control['icon'])->out(false, array(), false),
'alt' => $control['caption'])));
}
- return $this->output_tag('div', array('class' => 'commands'), implode('', $controlshtml));
+ return html_writer::tag('div', array('class' => 'commands'), implode('', $controlshtml));
}
/**
$output = '';
$skipdest = '';
} else {
- $output = $this->output_tag('a', array('href' => '#sb-' . $bc->skipid, 'class' => 'skip-block'),
+ $output = html_writer::tag('a', array('href' => '#sb-' . $bc->skipid, 'class' => 'skip-block'),
get_string('skipa', 'access', $skiptitle));
- $skipdest = $this->output_tag('span', array('id' => 'sb-' . $bc->skipid, 'class' => 'skip-block-to'), '');
+ $skipdest = html_writer::tag('span', array('id' => 'sb-' . $bc->skipid, 'class' => 'skip-block-to'), '');
}
$bc->attributes['id'] = $bc->id;
$bc->attributes['class'] = $bc->get_classes_string();
- $output .= $this->output_start_tag('div', $bc->attributes);
+ $output .= html_writer::start_tag('div', $bc->attributes);
$controlshtml = $this->block_controls($bc->controls);
$title = '';
if ($bc->title) {
- $title = $this->output_tag('h2', null, $bc->title);
+ $title = html_writer::tag('h2', null, $bc->title);
}
if ($title || $controlshtml) {
- $output .= $this->output_tag('div', array('class' => 'header'),
- $this->output_tag('div', array('class' => 'title'),
+ $output .= html_writer::tag('div', array('class' => 'header'),
+ html_writer::tag('div', array('class' => 'title'),
$title . $controlshtml));
}
- $output .= $this->output_start_tag('div', array('class' => 'content'));
+ $output .= html_writer::start_tag('div', array('class' => 'content'));
$output .= $bc->content;
if ($bc->footer) {
- $output .= $this->output_tag('div', array('class' => 'footer'), $bc->footer);
+ $output .= html_writer::tag('div', array('class' => 'footer'), $bc->footer);
}
- $output .= $this->output_end_tag('div');
- $output .= $this->output_end_tag('div');
+ $output .= html_writer::end_tag('div');
+ $output .= html_writer::end_tag('div');
if ($bc->annotation) {
- $output .= $this->output_tag('div', array('class' => 'blockannotation'), $bc->annotation);
+ $output .= html_writer::tag('div', array('class' => 'blockannotation'), $bc->annotation);
}
$output .= $skipdest;
$row = 0;
$lis = array();
foreach ($items as $key => $string) {
- $item = $this->output_start_tag('li', array('class' => 'r' . $row));
+ $item = html_writer::start_tag('li', array('class' => 'r' . $row));
if (!empty($icons[$key])) { //test if the content has an assigned icon
- $item .= $this->output_tag('div', array('class' => 'icon column c0'), $icons[$key]);
+ $item .= html_writer::tag('div', array('class' => 'icon column c0'), $icons[$key]);
}
- $item .= $this->output_tag('div', array('class' => 'column c1'), $string);
- $item .= $this->output_end_tag('li');
+ $item .= html_writer::tag('div', array('class' => 'column c1'), $string);
+ $item .= html_writer::end_tag('li');
$lis[] = $item;
$row = 1 - $row; // Flip even/odd.
}
- return $this->output_tag('ul', array('class' => 'list'), implode("\n", $lis));
+ return html_writer::tag('ul', array('class' => 'list'), implode("\n", $lis));
}
/**
* @return string the HTML to be output.
*/
public function block_move_target($target) {
- return $this->output_tag('a', array('href' => $target->url, 'class' => 'blockmovetarget'),
- $this->output_tag('span', array('class' => 'accesshide'), $target->text));
+ return html_writer::tag('a', array('href' => $target->url, 'class' => 'blockmovetarget'),
+ html_writer::tag('span', array('class' => 'accesshide'), $target->text));
}
/**
$attributes['target'] = $CFG->framename;
}
- return $this->output_tag('a', $attributes, $link->text);
+ return html_writer::tag('a', $attributes, $link->text);
}
/**
}
$output = $this->box_start('generalbox', 'notice');
- $output .= $this->output_tag('p', array(), $message);
- $output .= $this->output_tag('div', array('class' => 'buttons'), $this->button($continue) . $this->button($cancel));
+ $output .= html_writer::tag('p', array(), $message);
+ $output .= html_writer::tag('div', array('class' => 'buttons'), $this->button($continue) . $this->button($cancel));
$output .= $this->box_end();
return $output;
}
'disabled' => $form->button->disabled,
'id' => $form->button->id);
- $buttonoutput = $this->output_empty_tag('input', $buttonattributes);
+ $buttonoutput = html_writer::empty_tag('input', $buttonattributes);
// Removing the button so it doesn't get output again
unset($form->button);
- return $this->output_tag('div', array('class' => 'singlebutton'), $this->form($form, $buttonoutput));
+ return html_writer::tag('div', array('class' => 'singlebutton'), $this->form($form, $buttonoutput));
}
/**
if (empty($contents) && !empty($form->button)) {
debugging("You probably want to use \$OUTPUT->single_button(\$form), please read that function's documentation", DEBUG_DEVELOPER);
} else if (empty($contents)) {
- $contents = $this->output_empty_tag('input', array('type' => 'submit', 'value' => get_string('ok')));
+ $contents = html_writer::empty_tag('input', array('type' => 'submit', 'value' => get_string('ok')));
} else if (!empty($form->button)) {
$form->button->prepare($this, $this->page, $this->target);
$this->prepare_event_handlers($form->button);
'disabled' => $form->button->disabled,
'id' => $form->button->id);
- $buttonoutput = $this->output_empty_tag('input', $buttonattributes);
+ $buttonoutput = html_writer::empty_tag('input', $buttonattributes);
// Hide the submit button if the button has a JS submit action
if ($form->jssubmitaction) {
- $buttonoutput = $this->output_start_tag('div', array('id' => "noscript$form->id")) . $buttonoutput . $this->output_end_tag('div');
+ $buttonoutput = html_writer::start_tag('div', array('id' => "noscript$form->id")) . $buttonoutput . html_writer::end_tag('div');
$this->page->requires->js_function_call('hide_item', array("noscript$form->id"));
}
$hiddenoutput = '';
foreach ($form->url->params() as $var => $val) {
- $hiddenoutput .= $this->output_empty_tag('input', array('type' => 'hidden', 'name' => $var, 'value' => $val));
+ $hiddenoutput .= html_writer::empty_tag('input', array('type' => 'hidden', 'name' => $var, 'value' => $val));
}
$formattributes = array(
'id' => $form->id,
'class' => $form->get_classes_string());
- $divoutput = $this->output_tag('div', array(), $hiddenoutput . $contents . $buttonoutput);
- $output = $this->output_tag('form', $formattributes, $divoutput);
+ $divoutput = html_writer::tag('div', array(), $hiddenoutput . $contents . $buttonoutput);
+ $output = html_writer::tag('form', $formattributes, $divoutput);
return $output;
}
$icon->link->text .= $icon->text;
}
- return $this->output_tag('span', array('class' => 'helplink'), $this->link($icon->link));
+ return html_writer::tag('span', array('class' => 'helplink'), $this->link($icon->link));
}
/**
$popupaction = new popup_action('click', $link->url, 'ratingscale');
$link->add_action($popupaction);
- return $this->output_tag('span', array('class' => 'helplink'), $this->link($link));
+ return html_writer::tag('span', array('class' => 'helplink'), $this->link($link));
}
/**
$attributes['width'] = $image->width;
}
- return $this->output_empty_tag('img', $attributes);
+ return html_writer::empty_tag('img', $attributes);
}
/**
* Print the specified user's avatar.
*
- * This method can be used in two ways:
+ * User avatar may be obtained in two ways:
* <pre>
* // Option 1: (shortcut for simple cases, preferred way)
* // $user has come from the DB and has fields id, picture, imagealt, firstname and lastname
* $OUTPUT->user_picture($user, array('popup'=>true));
*
- * // Option 2: (not recommended)
- * $userpic = new user_picture();
+ * // Option 2:
+ * $userpic = new user_picture($user);
* // Set properties of $userpic
- * $userpic->user = $user;
* $userpic->popup = true;
- * $OUTPUT->user_picture($userpic);
+ * $OUTPUT->render($userpic);
* </pre>
*
- * @param object|user_picture $user_or_userpicture Object with at least fields id, picture, imagealt, firstname, lastname
+ * @param object Object with at least fields id, picture, imagealt, firstname, lastname
* If any of these are missing, the database is queried. Avoid this
* if at all possible, particularly for reports. It is very bad for performance.
* @param array $options associative array with user picture options, used only if not a user_picture object,
* - link=true (make image clickable - the link leads to user profile)
* - popup=false (open in popup)
* - alttext=true (add image alt attribute)
- * - etc.
+ * - class = image class attribute (default 'userpicture')
* @return string HTML fragment
*/
- public function user_picture(stdClass $user_or_userpicture, array $options = null) {
+ public function user_picture(stdClass $user, array $options = null) {
+ $userpicture = new user_picture($user);
+ foreach ((array)$options as $key=>$value) {
+ if (array_key_exists($key, $userpicture)) {
+ $userpicture->$key = $value;
+ }
+ }
+ return $this->render($userpicture);
+ }
+
+ /**
+ * Internal implementation of user image rendering.
+ * @param user_picture $userpicture
+ * @return string
+ */
+ protected function render_user_picture(user_picture $userpicture) {
+ global $CFG, $DB;
- if ($user_or_userpicture instanceof user_picture) {
- // we need a clone because prepare() should not be called repeatedly
- $userpic = clone($user_or_userpicture);
+ $user = $userpicture->user;
+
+ if ($userpicture->alttext) {
+ if (!empty($user->imagealt)) {
+ $alt = $user->imagealt;
+ } else {
+ $alt = get_string('pictureof', '', fullname($user));
+ }
} else {
- $userpic = new user_picture($user_or_userpicture, $options);
+ $alt = HTML_ATTR_EMPTY;
+ }
+
+ if (empty($userpicture->size)) {
+ $file = 'f2';
+ $size = 35;
+ } else if ($userpicture->size === true or $userpicture->size == 1) {
+ $file = 'f1';
+ $size = 100;
+ } else if ($userpicture->size >= 50) {
+ $file = 'f1';
+ $size = $userpicture->size;
+ } else {
+ $file = 'f2';
+ $size = $userpicture->size;
}
- $userpic->prepare($this, $this->page, $this->target);
+ $class = $userpicture->class;
- // get the image html output fisrt, then wrap it in link if needed
- $output = $this->image($userpic);
+ if (!empty($user->picture)) {
+ require_once($CFG->libdir.'/filelib.php');
+ $src = new moodle_url(get_file_url($user->id.'/'.$file.'.jpg', null, 'user'));
+ } else { // Print default user pictures (use theme version if available)
+ $class .= ' defaultuserpic';
+ $src = $this->pix_url('u/' . $file);
+ }
- if ($userpic->link) {
- $link = new html_link();
- $link->url = $userpic->url;
- $link->text = $output;
- if ($userpic->popup) {
- $link->add_action(new popup_action('click', $userpic->url));
- }
- $output = $this->link($link);
+ $attributes = array('src'=>$src, 'alt'=>$alt, 'class'=>$class, 'width'=>$size, 'height'=>$size);
+
+ // get the image html output fisrt
+ $output = html_writer::empty_tag('img', $attributes);;
+
+ // then wrap it in link if needed
+ if (!$userpicture->link) {
+ return $output;
}
- return $output;
+ if (empty($userpicture->courseid)) {
+ $courseid = $this->page->course->id;
+ } else {
+ $courseid = $userpicture->courseid;
+ }
+
+ $url = new moodle_url($CFG->wwwroot.'/user/view.php', array('id' => $user->id, 'course' => $courseid));
+
+ $attributes = array('href'=>$url);
+
+ if ($userpicture->popup) {
+ $id = html_writer::random_id('userpicture');
+ $attributes['id'] = $id;
+ $this->add_action_handler($id, new popup_action('click', $url));
+ }
+
+ return html_writer::tag('a', $attributes, $output);
}
/**
$tag = 'ul';
}
- $output = $this->output_start_tag($tag, array('class' => $list->get_classes_string()));
+ $output = html_writer::start_tag($tag, array('class' => $list->get_classes_string()));
foreach ($list->items as $listitem) {
if ($listitem instanceof html_list) {
- $output .= $this->output_start_tag('li', array()) . "\n";
+ $output .= html_writer::start_tag('li', array()) . "\n";
$output .= $this->htmllist($listitem) . "\n";
- $output .= $this->output_end_tag('li') . "\n";
+ $output .= html_writer::end_tag('li') . "\n";
} else if ($listitem instanceof html_list_item) {
$listitem->prepare($this, $this->page, $this->target);
$this->prepare_event_handlers($listitem);
- $output .= $this->output_tag('li', array('class' => $listitem->get_classes_string()), $listitem->value) . "\n";
+ $output .= html_writer::tag('li', array('class' => $listitem->get_classes_string()), $listitem->value) . "\n";
} else {
- $output .= $this->output_tag('li', array(), $listitem) . "\n";
+ $output .= html_writer::tag('li', array(), $listitem) . "\n";
}
}
$output = $list->text . $output;
}
- return $output . $this->output_end_tag($tag);
+ return $output . html_writer::end_tag($tag);
}
/**
'style' => $span->style,
'title' => $span->title,
'id' => $span->id);
- return $this->output_tag('span', $attributes, $span->contents);
+ return html_writer::tag('span', $attributes, $span->contents);
}
/**
}
if ($select->rendertype == 'menu') {
- $html .= $this->output_start_tag('select', $attributes) . "\n";
+ $html .= html_writer::start_tag('select', $attributes) . "\n";
foreach ($select->options as $option) {
// $OUTPUT->select_option detects if $option is an option or an optgroup
$html .= $this->select_option($option);
}
- $html .= $this->output_end_tag('select') . "\n";
+ $html .= html_writer::end_tag('select') . "\n";
} else if ($select->rendertype == 'radio') {
$currentradio = 0;
foreach ($select->options as $option) {
$option->label->for = $option->id;
$this->prepare_event_handlers($option);
- $output = $this->output_start_tag('span', array('class' => "radiogroup $name rb{$currentradio[$name]}")) . "\n";
+ $output = html_writer::start_tag('span', array('class' => "radiogroup $name rb{$currentradio[$name]}")) . "\n";
$output .= $this->label($option->label);
if ($option->selected == 'selected') {
$option->selected = 'checked';
}
- $output .= $this->output_empty_tag('input', array(
+ $output .= html_writer::empty_tag('input', array(
'type' => 'radio',
'value' => $option->value,
'name' => $name,
'class' => $option->get_classes_string(),
'checked' => $option->selected));
- $output .= $this->output_end_tag('span');
+ $output .= html_writer::end_tag('span');
$currentradio[$name]++;
return $output;
}
$option->label->for = $option->id;
$this->prepare_event_handlers($option);
- $output = $this->output_start_tag('span', array('class' => "checkbox $name")) . "\n";
+ $output = html_writer::start_tag('span', array('class' => "checkbox $name")) . "\n";
if ($option->selected) {
$option->selected = 'checked';
$option->selected = '';
}
- $output .= $this->output_empty_tag('input', array(
+ $output .= html_writer::empty_tag('input', array(
'type' => 'checkbox',
'value' => $option->value,
'name' => $name,
'checked' => $option->selected));
$output .= $this->label($option->label);
- $output .= $this->output_end_tag('span');
+ $output .= html_writer::end_tag('span');
return $output;
}
$this->prepare_event_handlers($option);
if ($option instanceof html_select_option) {
- return $this->output_tag('option', array(
+ return html_writer::tag('option', array(
'value' => $option->value,
'disabled' => $option->disabled,
'class' => $option->get_classes_string(),
'selected' => $option->selected), $option->text);
} else if ($option instanceof html_select_optgroup) {
- $output = $this->output_start_tag('optgroup', array('label' => $option->text, 'class' => $option->get_classes_string()));
+ $output = html_writer::start_tag('optgroup', array('label' => $option->text, 'class' => $option->get_classes_string()));
foreach ($option->options as $selectoption) {
$output .= $this->select_option($selectoption);
}
- $output .= $this->output_end_tag('optgroup');
+ $output .= html_writer::end_tag('optgroup');
return $output;
}
}
* @return string the HTML for the <input>
*/
public function textfield($field) {
- return $this->output_tag('span', array('class' => "textfield $field->name"), $this->field($field));
+ return html_writer::tag('span', array('class' => "textfield $field->name"), $this->field($field));
}
/**
if (!empty($field->label->text)) {
$label = $this->label($field->label);
}
- return $label . $this->output_empty_tag('input', array(
+ return $label . html_writer::empty_tag('input', array(
'type' => $field->type,
'name' => $field->name,
'id' => $field->id,
$label = clone($label);
$label->prepare($this, $this->page, $this->target);
$this->prepare_event_handlers($label);
- return $this->output_tag('label', array('for' => $label->for, 'class' => $label->get_classes_string()), $label->text);
+ return html_writer::tag('label', array('for' => $label->for, 'class' => $label->get_classes_string()), $label->text);
}
/**
if (empty($message)) {
return '';
}
- return $this->output_tag('span', array('class' => 'error'), $message);
+ return html_writer::tag('span', array('class' => 'error'), $message);
}
/**
* @return string the HTML to output.
*/
public function notification($message, $classes = 'notifyproblem') {
- return $this->output_tag('div', array('class' =>
+ return html_writer::tag('div', array('class' =>
renderer_base::prepare_classes($classes)), clean_text($message));
}
$form->button->text = get_string('continue');
$form->method = 'get';
- return $this->output_tag('div', array('class' => 'continuebutton') , $this->button($form));
+ return html_writer::tag('div', array('class' => 'continuebutton') , $this->button($form));
}
/**
}
}
- return $this->output_tag('div', array('class' => 'paging'), $output);
+ return html_writer::tag('div', array('class' => 'paging'), $output);
}
/**
'cellpadding' => $table->cellpadding,
'cellspacing' => $table->cellspacing,
'class' => $table->get_classes_string());
- $output = $this->output_start_tag('table', $attributes) . "\n";
+ $output = html_writer::start_tag('table', $attributes) . "\n";
$countcols = 0;
if (!empty($table->head)) {
$countcols = count($table->head);
- $output .= $this->output_start_tag('thead', $table->headclasses) . "\n";
- $output .= $this->output_start_tag('tr', array()) . "\n";
+ $output .= html_writer::start_tag('thead', $table->headclasses) . "\n";
+ $output .= html_writer::start_tag('tr', array()) . "\n";
$keys = array_keys($table->head);
$lastkey = end($keys);
}
if ($table->rotateheaders) {
// we need to wrap the heading content
- $heading->text = $this->output_tag('span', null, $heading->text);
+ $heading->text = html_writer::tag('span', null, $heading->text);
}
$attributes = array(
if ($heading->header === true) {
$tagtype = 'th';
}
- $output .= $this->output_tag($tagtype, $attributes, $heading->text) . "\n";
+ $output .= html_writer::tag($tagtype, $attributes, $heading->text) . "\n";
}
- $output .= $this->output_end_tag('tr') . "\n";
- $output .= $this->output_end_tag('thead') . "\n";
+ $output .= html_writer::end_tag('tr') . "\n";
+ $output .= html_writer::end_tag('thead') . "\n";
}
if (!empty($table->data)) {
$oddeven = 1;
$keys = array_keys($table->data);
$lastrowkey = end($keys);
- $output .= $this->output_start_tag('tbody', array('class' => renderer_base::prepare_classes($table->bodyclasses))) . "\n";
+ $output .= html_writer::start_tag('tbody', array('class' => renderer_base::prepare_classes($table->bodyclasses))) . "\n";
foreach ($table->data as $key => $row) {
if (($row === 'hr') && ($countcols)) {
- $output .= $this->output_tag('td', array('colspan' => $countcols),
- $this->output_tag('div', array('class' => 'tabledivider'), '')) . "\n";
+ $output .= html_writer::tag('td', array('colspan' => $countcols),
+ html_writer::tag('div', array('class' => 'tabledivider'), '')) . "\n";
} else {
// Convert array rows to html_table_rows and cell strings to html_table_cell objects
if (!($row instanceof html_table_row)) {
$row->add_class('lastrow');
}
- $output .= $this->output_start_tag('tr', array('class' => $row->get_classes_string(), 'style' => $row->style, 'id' => $row->id)) . "\n";
+ $output .= html_writer::start_tag('tr', array('class' => $row->get_classes_string(), 'style' => $row->style, 'id' => $row->id)) . "\n";
$keys2 = array_keys($row->cells);
$lastkey = end($keys2);
if ($cell->header === true) {
$tagtype = 'th';
}
- $output .= $this->output_tag($tagtype, $tdattributes, $cell->text) . "\n";
+ $output .= html_writer::tag($tagtype, $tdattributes, $cell->text) . "\n";
}
}
- $output .= $this->output_end_tag('tr') . "\n";
+ $output .= html_writer::end_tag('tr') . "\n";
}
- $output .= $this->output_end_tag('tbody') . "\n";
+ $output .= html_writer::end_tag('tbody') . "\n";
}
- $output .= $this->output_end_tag('table') . "\n";
+ $output .= html_writer::end_tag('table') . "\n";
if ($table->rotateheaders && can_use_rotated_text()) {
$this->page->requires->yui2_lib('event');
* @return string the HTML to output.
*/
public function skip_link_target($id = '') {
- return $this->output_tag('span', array('id' => $id), '');
+ return html_writer::tag('span', array('id' => $id), '');
}
/**
if ($level < 1 or $level > 6) {
throw new coding_exception('Heading level must be an integer between 1 and 6.');
}
- return $this->output_tag('h' . $level,
+ return html_writer::tag('h' . $level,
array('id' => $id, 'class' => renderer_base::prepare_classes($classes)), $text);
}
* @return string the HTML to output.
*/
public function box_start($classes = 'generalbox', $id = '') {
- $this->opencontainers->push('box', $this->output_end_tag('div'));
- return $this->output_start_tag('div', array('id' => $id,
+ $this->opencontainers->push('box', html_writer::end_tag('div'));
+ return html_writer::start_tag('div', array('id' => $id,
'class' => 'box ' . renderer_base::prepare_classes($classes)));
}
* @return string the HTML to output.
*/
public function container_start($classes = '', $id = '') {
- $this->opencontainers->push('container', $this->output_end_tag('div'));
- return $this->output_start_tag('div', array('id' => $id,
+ $this->opencontainers->push('container', html_writer::end_tag('div'));
+ return html_writer::start_tag('div', array('id' => $id,
'class' => renderer_base::prepare_classes($classes)));
}
if (!empty($item->id)) {
$divattr['id'] = $item->id;
}
- $content = $this->output_tag('p', $divattr, $content) . $this->tree_block_contents($item->children);
+ $content = html_writer::tag('p', $divattr, $content) . $this->tree_block_contents($item->children);
if (!empty($item->preceedwithhr) && $item->preceedwithhr===true) {
- $content = $this->output_tag('hr', array(), null).$content;
+ $content = html_writer::tag('hr', array(), null).$content;
}
- $content = $this->output_tag('li', $liattr, $content);
+ $content = html_writer::tag('li', $liattr, $content);
$lis[] = $content;
}
- return $this->output_tag('ul', $attrs, implode("\n", $lis));
+ return html_writer::tag('ul', $attrs, implode("\n", $lis));
}
/**
$formattributes['id'] = 'subscriberform';
$formattributes['action'] = '';
$formattributes['method'] = 'post';
- $output .= $this->output_start_tag('form', $formattributes);
- $output .= $this->output_empty_tag('input', array('type'=>'hidden', 'name'=>'sesskey', 'value'=>sesskey()));
+ $output .= html_writer::start_tag('form', $formattributes);
+ $output .= html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>'sesskey', 'value'=>sesskey()));
$existingcell = new html_table_cell();
$existingcell->text = $existinguc->display(true);
$existingcell->set_classes(array('existing'));
$actioncell = new html_table_cell();
- $actioncell->text = $this->output_start_tag('div', array());
- $actioncell->text .= $this->output_empty_tag('input', array('type'=>'submit', 'name'=>'subscribe', 'value'=>$this->page->theme->larrow.' '.get_string('add'), 'class'=>'actionbutton'));
- $actioncell->text .= $this->output_empty_tag('br', array());
- $actioncell->text .= $this->output_empty_tag('input', array('type'=>'submit', 'name'=>'unsubscribe', 'value'=>$this->page->theme->rarrow.' '.get_string('remove'), 'class'=>'actionbutton'));
- $actioncell->text .= $this->output_end_tag('div', array());
+ $actioncell->text = html_writer::start_tag('div', array());
+ $actioncell->text .= html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'subscribe', 'value'=>$this->page->theme->larrow.' '.get_string('add'), 'class'=>'actionbutton'));
+ $actioncell->text .= html_writer::empty_tag('br', array());
+ $actioncell->text .= html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'unsubscribe', 'value'=>$this->page->theme->rarrow.' '.get_string('remove'), 'class'=>'actionbutton'));
+ $actioncell->text .= html_writer::end_tag('div', array());
$actioncell->set_classes(array('actions'));
$potentialcell = new html_table_cell();
$potentialcell->text = $potentialuc->display(true);
$table->data = array(html_table_row::make(array($existingcell, $actioncell, $potentialcell)));
$output .= $this->output->table($table);
- $output .= $this->output_end_tag('form');
+ $output .= html_writer::end_tag('form');
return $output;
}
*/
public function subscribed_users(user_selector_base $existingusers) {
$output = $this->output->box_start('subscriberdiv boxaligncenter');
- $output .= $this->output_tag('p', array(), get_string('forcessubscribe', 'forum'));
+ $output .= html_writer::tag('p', array(), get_string('forcessubscribe', 'forum'));
$output .= $existingusers->display(true);
$output .= $this->output->box_end();
return $output;
$attributes = array();
$attributes['class'] = 'slideshow';
$attributes['style'] = 'background-color:'.$lesson->bgcolor.';height:'.$lesson->height.'px;width:'.$lesson->width.'px;';
- $output = $this->output_start_tag('div', $attributes);
+ $output = html_writer::start_tag('div', $attributes);
}
/**
* Returns HTML to show the end of a slideshow
*/
public function slideshow_end() {
- $output = $this->output_end_tag('div');
+ $output = html_writer::end_tag('div');
}
/**
* Returns a P tag containing contents
if ($class !== '') {
$attributes['class'] = $class;
}
- $output = $this->output_tag('p', $attributes, $contents);
+ $output = html_writer::tag('p', $attributes, $contents);
}
/**
* Returns HTML to display add_highscores_form
$o .= $this->output->select($select);
}
}
- $o .= $this->output->output_start_tag('ul', array());
+ $o .= html_writer::start_tag('ul', array());
foreach ($allocation->reviewedby as $reviewerid => $assessmentid) {
- $o .= $this->output->output_start_tag('li', array());
+ $o .= html_writer::start_tag('li', array());
$o .= $this->output->user_picture($userinfo[$reviewerid], array('courseid' => $this->page->course->id, 'size' => 16));
$o .= fullname($userinfo[$reviewerid]);
$handler = new moodle_url($this->page->url, array('mode' => 'del', 'what' => $assessmentid, 'sesskey' => sesskey()));
$o .= $this->remove_allocation_icon($handler);
- $o .= $this->output->output_end_tag('li');
+ $o .= html_writer::end_tag('li');
}
- $o .= $this->output->output_end_tag('ul');
+ $o .= html_writer::end_tag('ul');
return $o;
}
} else {
$o .= $this->output->container(get_string('nothingtoreview', 'workshop'), 'info');
}
- $o .= $this->output->output_start_tag('ul', array());
+ $o .= html_writer::start_tag('ul', array());
foreach ($allocation->reviewerof as $authorid => $assessmentid) {
- $o .= $this->output->output_start_tag('li', array());
+ $o .= html_writer::start_tag('li', array());
$o .= $this->output->user_picture($userinfo[$authorid], array('courseid' => $this->page->course->id, 'size' => 16));
$o .= fullname($userinfo[$authorid]);
$handler = new moodle_url($this->page->url, array('mode' => 'del', 'what' => $assessmentid, 'sesskey' => sesskey()));
$o .= $this->remove_allocation_icon($handler);
- $o .= $this->output->output_end_tag('li');
+ $o .= html_writer::end_tag('li');
}
- $o .= $this->output->output_end_tag('ul');
+ $o .= html_writer::end_tag('ul');
return $o;
}
}
$sty = empty($message->sty) ? 'info' : $message->sty;
- $o = $this->output->output_tag('span', array(), $message->text);
- $closer = $this->output->output_tag('a', array('href' => $this->page->url->out()),
+ $o = html_writer::tag('span', array(), $message->text);
+ $closer = html_writer::tag('a', array('href' => $this->page->url->out()),
get_string('messageclose', 'workshop'));
$o .= $this->output->container($closer, 'status-message-closer');
if (isset($message->extra)) {
}
$o = $this->status_message($msg);
if (is_array($result)) {
- $o .= $this->output->output_start_tag('ul', array('class' => 'allocation-init-results'));
+ $o .= html_writer::start_tag('ul', array('class' => 'allocation-init-results'));
foreach ($result as $message) {
$parts = explode('::', $message);
$text = array_pop($parts);
// do not display allocation debugging messages
continue;
}
- $o .= $this->output->output_tag('li', array('class' => $class), $text) . "\n";
+ $o .= html_writer::tag('li', array('class' => $class), $text) . "\n";
}
- $o .= $this->output->output_end_tag('ul');
+ $o .= html_writer::end_tag('ul');
$o .= $this->output->continue_button($this->page->url->out());
}
return $o;
if ($format == "html") {
// this is the same as the code in the last else-branch
- $outputfiles .= $this->output->output_tag('li', array('class' => $type), $linkhtml);
+ $outputfiles .= html_writer::tag('li', array('class' => $type), $linkhtml);
} else if ($format == "text") {
$outputfiles .= $linktxt . "\n";
$outputimgs .= $this->output->container($preview);
} else {
// this is the same as the code in html if-branch
- $outputfiles .= $this->output->output_tag('li', array('class' => $type), $linkhtml);
+ $outputfiles .= html_writer::tag('li', array('class' => $type), $linkhtml);
}
}
}
$outputimgs = $this->output->container($outputimgs, 'images');
}
if ($format !== "text") {
- $outputfiles = $this->output->output_tag('ul', array('class' => 'files'), $outputfiles);
+ $outputfiles = html_writer::tag('ul', array('class' => 'files'), $outputfiles);
}
return $this->output->container($outputimgs . $outputfiles, 'attachments');
}
$row = new html_table_row();
$row->set_classes('phasetasks');
foreach ($plan as $phasecode => $phase) {
- $title = $this->output->output_tag('span', array(), $phase->title);
+ $title = html_writer::tag('span', array(), $phase->title);
$actions = '';
foreach ($phase->actions as $action) {
switch ($action->type) {
}
$title = $this->output->container($title, 'title');
$details = $this->output->container($task->details, 'details');
- $out .= $this->output->output_tag('li', array('class' => $classes), $title . $details);
+ $out .= html_writer::tag('li', array('class' => $classes), $title . $details);
}
if ($out) {
- $out = $this->output->output_tag('ul', array('class' => 'tasks'), $out);
+ $out = html_writer::tag('ul', array('class' => 'tasks'), $out);
}
return $out;
}
protected function sortable_heading($text, $sortid=null, $sortby=null, $sorthow=null) {
global $PAGE;
- $out = $this->output->output_tag('span', array('class'=>'text'), $text);
+ $out = html_writer::tag('span', array('class'=>'text'), $text);
if (!is_null($sortid)) {
if ($sortby !== $sortid or $sorthow !== 'ASC') {
protected function grading_report_participant(stdclass $participant, array $userinfo) {
$userid = $participant->userid;
$out = $this->output->user_picture($userinfo[$userid], array('courseid' => $this->page->course->id, 'size' => 35));
- $out .= $this->output->output_tag('span', array(), fullname($userinfo[$userid]));
+ $out .= html_writer::tag('span', array(), fullname($userinfo[$userid]));
return $out;
}
if ($shownames) {
$userid = $assessment->userid;
$name = $this->output->user_picture($userinfo[$userid], array('courseid' => $this->page->course->id, 'size' => 16));
- $name .= $this->output->output_tag('span', array('class' => 'fullname'), fullname($userinfo[$userid]));
- $name = $separator . $this->output->output_tag('span', array('class' => 'user'), $name);
+ $name .= html_writer::tag('span', array('class' => 'fullname'), fullname($userinfo[$userid]));
+ $name = $separator . html_writer::tag('span', array('class' => 'user'), $name);
} else {
$name = '';
}
/// retrieve the description of the description object
$paramdesc = "";
if (!empty($params->desc)) {
- $paramdesc .= $this->output_start_tag('span', array('style' => "color:#2A33A6"));
- $paramdesc .= $this->output_start_tag('i', array());
+ $paramdesc .= html_writer::start_tag('span', array('style' => "color:#2A33A6"));
+ $paramdesc .= html_writer::start_tag('i', array());
$paramdesc .= "//".$params->desc;
- $paramdesc .= $this->output_end_tag('i');
- $paramdesc .= $this->output_end_tag('span');
- $paramdesc .= $this->output_empty_tag('br', array());
+ $paramdesc .= html_writer::end_tag('i');
+ $paramdesc .= html_writer::end_tag('span');
+ $paramdesc .= html_writer::empty_tag('br', array());
}
/// description object is a list
if ($params instanceof external_multiple_structure) {
- return $paramdesc . "list of ( " . $this->output_empty_tag('br', array()) . $this->detailed_description_html($params->content) . ")";
+ return $paramdesc . "list of ( " . html_writer::empty_tag('br', array()) . $this->detailed_description_html($params->content) . ")";
} else if ($params instanceof external_single_structure) {
/// description object is an object
- $singlestructuredesc = $paramdesc."object {". $this->output_empty_tag('br', array());
+ $singlestructuredesc = $paramdesc."object {". html_writer::empty_tag('br', array());
foreach ($params->keys as $attributname => $attribut) {
- $singlestructuredesc .= $this->output_start_tag('b', array());
+ $singlestructuredesc .= html_writer::start_tag('b', array());
$singlestructuredesc .= $attributname;
- $singlestructuredesc .= $this->output_end_tag('b');
+ $singlestructuredesc .= html_writer::end_tag('b');
$singlestructuredesc .= " ".$this->detailed_description_html($params->keys[$attributname]);
}
$singlestructuredesc .= "} ";
- $singlestructuredesc .= $this->output_empty_tag('br', array());
+ $singlestructuredesc .= html_writer::empty_tag('br', array());
return $singlestructuredesc;
} else {
/// description object is a primary type (string, integer)
* @return <type>
*/
public function colored_box_with_pre_tag($title, $content, $rgb = 'FEEBE5') {
- $coloredbox = $this->output_start_tag('ins', array()); //TODO: this tag removes xhtml strict error but cause warning
- $coloredbox .= $this->output_start_tag('div', array('style' => "border:solid 1px #DEDEDE;background:#".$rgb.";color:#222222;padding:4px;"));
- $coloredbox .= $this->output_start_tag('pre', array());
- $coloredbox .= $this->output_start_tag('b', array());
+ $coloredbox = html_writer::start_tag('ins', array()); //TODO: this tag removes xhtml strict error but cause warning
+ $coloredbox .= html_writer::start_tag('div', array('style' => "border:solid 1px #DEDEDE;background:#".$rgb.";color:#222222;padding:4px;"));
+ $coloredbox .= html_writer::start_tag('pre', array());
+ $coloredbox .= html_writer::start_tag('b', array());
$coloredbox .= $title;
- $coloredbox .= $this->output_end_tag('b', array());
- $coloredbox .= $this->output_empty_tag('br', array());
+ $coloredbox .= html_writer::end_tag('b', array());
+ $coloredbox .= html_writer::empty_tag('br', array());
$coloredbox .= "\n".$content."\n";
- $coloredbox .= $this->output_end_tag('pre', array());
- $coloredbox .= $this->output_end_tag('div', array());
- $coloredbox .= $this->output_end_tag('ins', array());
+ $coloredbox .= html_writer::end_tag('pre', array());
+ $coloredbox .= html_writer::end_tag('div', array());
+ $coloredbox .= html_writer::end_tag('ins', array());
return $coloredbox;
}
EOF;
/// Some general information
- $documentationhtml = $this->output_start_tag('table', array('style' => "margin-left:auto; margin-right:auto;"));
- $documentationhtml .= $this->output_start_tag('tr', array());
- $documentationhtml .= $this->output_start_tag('td', array());
+ $documentationhtml = html_writer::start_tag('table', array('style' => "margin-left:auto; margin-right:auto;"));
+ $documentationhtml .= html_writer::start_tag('tr', array());
+ $documentationhtml .= html_writer::start_tag('td', array());
$documentationhtml .= get_string('wsdocumentationintro', 'webservice', $username);
- $documentationhtml .= $this->output_empty_tag('br', array());
- $documentationhtml .= $this->output_empty_tag('br', array());
+ $documentationhtml .= html_writer::empty_tag('br', array());
+ $documentationhtml .= html_writer::empty_tag('br', array());
/// Print button
$parameters = array ('wsusername' => $username, 'wspassword' => $password, 'print' => true);
$url = new moodle_url($CFG->wwwroot.'/webservice/wsdoc.php', $parameters); // Required
$documentationhtml .= $OUTPUT->single_button($url, get_string('print','webservice'));
- $documentationhtml .= $this->output_empty_tag('br', array());
+ $documentationhtml .= html_writer::empty_tag('br', array());
/// each functions will be displayed into a collapsible region (opened if printableformat = true)
if (empty($printableformat)) {
$documentationhtml .= print_collapsible_region_start('',
'aera_'.$functionname,
- $this->output_start_tag('strong', array()).$functionname.$this->output_end_tag('strong'),
+ html_writer::start_tag('strong', array()).$functionname.html_writer::end_tag('strong'),
false,
!$printableformat,
true);
} else {
- $documentationhtml .= $this->output_tag('strong', array(), $functionname);
- $documentationhtml .= $this->output_empty_tag('br', array());
+ $documentationhtml .= html_writer::tag('strong', array(), $functionname);
+ $documentationhtml .= html_writer::empty_tag('br', array());
}
/// function global description
- $documentationhtml .= $this->output_empty_tag('br', array());
- $documentationhtml .= $this->output_start_tag('div', array('style' => 'border:solid 1px #DEDEDE;background:#E2E0E0;color:#222222;padding:4px;'));
+ $documentationhtml .= html_writer::empty_tag('br', array());
+ $documentationhtml .= html_writer::start_tag('div', array('style' => 'border:solid 1px #DEDEDE;background:#E2E0E0;color:#222222;padding:4px;'));
$documentationhtml .= $description->description;
- $documentationhtml .= $this->output_end_tag('div');
- $documentationhtml .= $this->output_empty_tag('br', array());
- $documentationhtml .= $this->output_empty_tag('br', array());
+ $documentationhtml .= html_writer::end_tag('div');
+ $documentationhtml .= html_writer::empty_tag('br', array());
+ $documentationhtml .= html_writer::empty_tag('br', array());
/// function arguments documentation
- $documentationhtml .= $this->output_start_tag('span', array('style' => 'color:#EA33A6'));
+ $documentationhtml .= html_writer::start_tag('span', array('style' => 'color:#EA33A6'));
$documentationhtml .= get_string('arguments', 'webservice');
- $documentationhtml .= $this->output_end_tag('span');
- $documentationhtml .= $this->output_empty_tag('br', array());
+ $documentationhtml .= html_writer::end_tag('span');
+ $documentationhtml .= html_writer::empty_tag('br', array());
foreach ($description->parameters_desc->keys as $paramname => $paramdesc) {
/// a argument documentation
- $documentationhtml .= $this->output_start_tag('span', array('style' => 'font-size:80%'));
+ $documentationhtml .= html_writer::start_tag('span', array('style' => 'font-size:80%'));
$required = $paramdesc->required?get_string('required', 'webservice'):get_string('optional', 'webservice');
- $documentationhtml .= $this->output_start_tag('b', array());
+ $documentationhtml .= html_writer::start_tag('b', array());
$documentationhtml .= $paramname;
- $documentationhtml .= $this->output_end_tag('b');
+ $documentationhtml .= html_writer::end_tag('b');
$documentationhtml .= " (" .$required. ")"; // argument is required or optional ?
- $documentationhtml .= $this->output_empty_tag('br', array());
+ $documentationhtml .= html_writer::empty_tag('br', array());
$documentationhtml .= " ".$paramdesc->desc; // argument description
- $documentationhtml .= $this->output_empty_tag('br', array());
- $documentationhtml .= $this->output_empty_tag('br', array());
+ $documentationhtml .= html_writer::empty_tag('br', array());
+ $documentationhtml .= html_writer::empty_tag('br', array());
///general structure of the argument
$documentationhtml .= $this->colored_box_with_pre_tag(get_string('generalstructure', 'webservice'),
$this->detailed_description_html($paramdesc),
htmlentities($this->rest_param_description_html($paramdesc,$paramname)),
'FEEBE5');
}
- $documentationhtml .= $this->output_end_tag('span');
+ $documentationhtml .= html_writer::end_tag('span');
}
- $documentationhtml .= $this->output_empty_tag('br', array());
- $documentationhtml .= $this->output_empty_tag('br', array());
+ $documentationhtml .= html_writer::empty_tag('br', array());
+ $documentationhtml .= html_writer::empty_tag('br', array());
/// function response documentation
- $documentationhtml .= $this->output_start_tag('span', array('style' => 'color:#EA33A6'));
+ $documentationhtml .= html_writer::start_tag('span', array('style' => 'color:#EA33A6'));
$documentationhtml .= get_string('response', 'webservice');
- $documentationhtml .= $this->output_end_tag('span');
- $documentationhtml .= $this->output_empty_tag('br', array());
+ $documentationhtml .= html_writer::end_tag('span');
+ $documentationhtml .= html_writer::empty_tag('br', array());
/// function response description
- $documentationhtml .= $this->output_start_tag('span', array('style' => 'font-size:80%'));
+ $documentationhtml .= html_writer::start_tag('span', array('style' => 'font-size:80%'));
if (!empty($description->returns_desc->desc)) {
$documentationhtml .= $description->returns_desc->desc;
- $documentationhtml .= $this->output_empty_tag('br', array());
- $documentationhtml .= $this->output_empty_tag('br', array());
+ $documentationhtml .= html_writer::empty_tag('br', array());
+ $documentationhtml .= html_writer::empty_tag('br', array());
}
if (!empty($description->returns_desc)) {
///general structure of the response
'FEEBE5');
}
}
- $documentationhtml .= $this->output_end_tag('span');
- $documentationhtml .= $this->output_empty_tag('br', array());
- $documentationhtml .= $this->output_empty_tag('br', array());
+ $documentationhtml .= html_writer::end_tag('span');
+ $documentationhtml .= html_writer::empty_tag('br', array());
+ $documentationhtml .= html_writer::empty_tag('br', array());
/// function errors documentation for REST protocol
if (!empty($activatedprotocol['rest'])) {
- $documentationhtml .= $this->output_start_tag('span', array('style' => 'color:#EA33A6'));
+ $documentationhtml .= html_writer::start_tag('span', array('style' => 'color:#EA33A6'));
$documentationhtml .= get_string('errorcodes', 'webservice');
- $documentationhtml .= $this->output_end_tag('span');
- $documentationhtml .= $this->output_empty_tag('br', array());
- $documentationhtml .= $this->output_empty_tag('br', array());
- $documentationhtml .= $this->output_start_tag('span', array('style' => 'font-size:80%'));
+ $documentationhtml .= html_writer::end_tag('span');
+ $documentationhtml .= html_writer::empty_tag('br', array());
+ $documentationhtml .= html_writer::empty_tag('br', array());
+ $documentationhtml .= html_writer::start_tag('span', array('style' => 'font-size:80%'));
$errormessage = get_string('invalidparameter', 'debug');
$restexceptiontext =<<<EOF
<?xml version="1.0" encoding="UTF-8"?>
htmlentities($restexceptiontext),
'FEEBE5');
- $documentationhtml .= $this->output_end_tag('span');
+ $documentationhtml .= html_writer::end_tag('span');
}
- $documentationhtml .= $this->output_empty_tag('br', array());
- $documentationhtml .= $this->output_empty_tag('br', array());
+ $documentationhtml .= html_writer::empty_tag('br', array());
+ $documentationhtml .= html_writer::empty_tag('br', array());
if (empty($printableformat)) {
$documentationhtml .= print_collapsible_region_end(true);
}
}
/// close the table and return the documentation
- $documentationhtml .= $this->output_end_tag('td');
- $documentationhtml .= $this->output_end_tag('tr');
- $documentationhtml .= $this->output_end_tag('table');
+ $documentationhtml .= html_writer::end_tag('td');
+ $documentationhtml .= html_writer::end_tag('tr');
+ $documentationhtml .= html_writer::end_tag('table');
return $documentationhtml;
public function login_page_html($errormessage) {
global $CFG, $OUTPUT;
- $htmlloginpage = $this->output_start_tag('table', array('style' => "margin-left:auto; margin-right:auto;"));
- $htmlloginpage .= $this->output_start_tag('tr', array());
- $htmlloginpage .= $this->output_start_tag('td', array());
+ $htmlloginpage = html_writer::start_tag('table', array('style' => "margin-left:auto; margin-right:auto;"));
+ $htmlloginpage .= html_writer::start_tag('tr', array());
+ $htmlloginpage .= html_writer::start_tag('td', array());
$htmlloginpage .= get_string('wsdocumentationlogin', 'webservice');
- $htmlloginpage .= $this->output_empty_tag('br', array());
- $htmlloginpage .= $this->output_empty_tag('br', array());
- $htmlloginpage .= $this->output_empty_tag('br', array());
+ $htmlloginpage .= html_writer::empty_tag('br', array());
+ $htmlloginpage .= html_writer::empty_tag('br', array());
+ $htmlloginpage .= html_writer::empty_tag('br', array());
// /// Display detailed error message when can't login
// $htmlloginpage .= get_string('error','webservice',$errormessage);
-// $htmlloginpage .= $this->output_empty_tag('br', array());
-// $htmlloginpage .= $this->output_empty_tag('br', array());
+// $htmlloginpage .= html_writer::empty_tag('br', array());
+// $htmlloginpage .= html_writer::empty_tag('br', array());
//login form - we cannot use moodle form as we don't have sessionkey
$form = new html_form();
$field->value = get_string('wspassword', 'webservice');
$field->style = 'width: 30em;';
$contents .= $OUTPUT->textfield($field);
- $contents .= $this->output_empty_tag('br', array());
- $contents .= $this->output_empty_tag('br', array());
+ $contents .= html_writer::empty_tag('br', array());
+ $contents .= html_writer::empty_tag('br', array());
$htmlloginpage .= $OUTPUT->form($form, $contents);
- $htmlloginpage .= $this->output_end_tag('td');
- $htmlloginpage .= $this->output_end_tag('tr');
- $htmlloginpage .= $this->output_end_tag('table');
+ $htmlloginpage .= html_writer::end_tag('td');
+ $htmlloginpage .= html_writer::end_tag('tr');
+ $htmlloginpage .= html_writer::end_tag('table');
return $htmlloginpage;