From aa194165210bee7e05b064851f3481aa2886cd99 Mon Sep 17 00:00:00 2001 From: nicolasconnault Date: Fri, 7 Aug 2009 01:16:41 +0000 Subject: [PATCH] MDL-19756 Added cloning of moodle_html_components in OUTPUT functions, to allow for one component to be rendered multiple times without changes to the object between renders (like paging_bar) --- lib/outputlib.php | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/lib/outputlib.php b/lib/outputlib.php index 4868985d0e..e5307b4ffd 100644 --- a/lib/outputlib.php +++ b/lib/outputlib.php @@ -2407,17 +2407,6 @@ class moodle_core_renderer extends moodle_renderer_base { $this->output_tag('span', array('class' => 'accesshide'), $target->text)); } - /** - * Given a html_textarea object, outputs an tag that uses the object's attributes. - * - * @param mixed $link A html_link object or a string URL (text param required in second case) - * @param string $text A descriptive text for the link. If $link is a html_link, this is not required. - * @return string HTML fragment - */ - public function textarea($textarea) { - - } - /** * Given a html_link object, outputs an tag that uses the object's attributes. * @@ -2429,6 +2418,7 @@ class moodle_core_renderer extends moodle_renderer_base { $attributes = array(); if (is_a($link, 'html_link')) { + $link = clone($link); $link->prepare(); $this->prepare_event_handlers($link); $attributes['href'] = prepare_url($link->url); @@ -2458,7 +2448,7 @@ class moodle_core_renderer extends moodle_renderer_base { */ public function confirm($message, $continue, $cancel) { if ($continue instanceof html_form) { - // ok + $continue = clone($continue); } else if (is_string($continue)) { $continueform = new html_form(); $continueform->url = new moodle_url($continue); @@ -2468,13 +2458,11 @@ class moodle_core_renderer extends moodle_renderer_base { $continueform->url = $continue; $continue = $continueform; } else { - var_dump($continue); throw new coding_exception('The continue param to $OUTPUT->confirm must be either a URL (string/moodle_url) or a html_form object.'); - } if ($cancel instanceof html_form) { - //ok + $cancel = clone($cancel); } else if (is_string($cancel)) { $cancelform = new html_form(); $cancelform->url = new moodle_url($cancel); @@ -2511,7 +2499,7 @@ class moodle_core_renderer extends moodle_renderer_base { if (empty($form->button) or !($form->button instanceof html_button)) { throw new coding_exception('$OUTPUT->button($form) requires $form to have a button (html_button) value'); } - + $form = clone($form); $form->button->prepare(); $this->prepare_event_handlers($form->button); @@ -2536,8 +2524,8 @@ class moodle_core_renderer extends moodle_renderer_base { * @return string HTML fragment */ public function form($form, $contents=null) { + $form = clone($form); $form->prepare(); - $this->prepare_event_handlers($form); if (empty($contents) && !empty($form->button)) { @@ -2601,6 +2589,7 @@ class moodle_core_renderer extends moodle_renderer_base { * @return string HTML fragment */ public function action_icon($icon) { + $icon = clone($icon); $icon->prepare(); $imageoutput = $this->image($icon->image); @@ -2637,7 +2626,7 @@ class moodle_core_renderer extends moodle_renderer_base { */ public function help_icon($icon) { global $COURSE; - + $icon = clone($icon); $icon->prepare(); $popup = new popup_action('click', $icon->link->url); @@ -2663,6 +2652,7 @@ class moodle_core_renderer extends moodle_renderer_base { * @return string HTML fragment */ public function link_to_popup($link, $image=null) { + $link = clone($link); $link->prepare(); $this->prepare_event_handlers($link); @@ -2704,6 +2694,7 @@ class moodle_core_renderer extends moodle_renderer_base { * @return string HTML fragment */ public function spacer($image) { + $image = clone($image); $image->prepare(); $image->add_class('spacer'); @@ -2728,6 +2719,7 @@ class moodle_core_renderer extends moodle_renderer_base { return false; } + $image = clone($image); $image->prepare(); $this->prepare_event_handlers($image); @@ -2779,6 +2771,8 @@ class moodle_core_renderer extends moodle_renderer_base { $userpic = new user_picture(); $userpic->user = $user; $userpic->courseid = $courseid; + } else { + $userpic = clone($userpic); } $userpic->prepare(); @@ -2857,6 +2851,7 @@ class moodle_core_renderer extends moodle_renderer_base { * @return string HTML structure */ public function htmllist($list) { + $list = clone($list); $list->prepare(); $this->prepare_event_handlers($list); @@ -3022,7 +3017,7 @@ class moodle_core_renderer extends moodle_renderer_base { } else if (!($option instanceof html_select_option)) { throw new coding_exception('$OUTPUT->radio($option) only accepts a html_select_option object as param.'); } - + $option = clone($option); $option->prepare(); $option->label->for = $option->id; $this->prepare_event_handlers($option); @@ -3061,7 +3056,7 @@ class moodle_core_renderer extends moodle_renderer_base { } else if (!($option instanceof html_select_option)) { throw new coding_exception('$OUTPUT->checkbox($option) only accepts a html_select_option object as param.'); } - + $option = clone($option); $option->prepare(); $option->label->for = $option->id; @@ -3096,6 +3091,7 @@ class moodle_core_renderer extends moodle_renderer_base { * @return string the HTML for the */ public function select_option($option) { + $option = clone($option); $option->prepare(); $this->prepare_event_handlers($option); @@ -3121,6 +3117,7 @@ class moodle_core_renderer extends moodle_renderer_base { * @return string the HTML for the */ public function textfield($field) { + $field = clone($field); $field->prepare(); $this->prepare_event_handlers($field); $output = $this->output_start_tag('span', array('class' => "textfield $field->name")); @@ -3142,6 +3139,7 @@ class moodle_core_renderer extends moodle_renderer_base { * @return HTML fragment */ public function label($label) { + $label = clone($label); $label->prepare(); $this->prepare_event_handlers($label); return $this->output_tag('label', array('for' => $label->for, 'class' => $label->get_classes_string()), $label->text); @@ -3260,7 +3258,7 @@ class moodle_core_renderer extends moodle_renderer_base { */ public function paging_bar($pagingbar) { $output = ''; - + $pagingbar = clone($pagingbar); $pagingbar->prepare(); if ($pagingbar->totalcount > $pagingbar->perpage) { @@ -3301,6 +3299,7 @@ class moodle_core_renderer extends moodle_renderer_base { * @return string the HTML to output. */ public function table(html_table $table) { + $table = clone($table); $table->prepare(); $attributes = array( 'id' => $table->id, -- 2.39.5