From 1ba862ec6e467b46944dc62e96dae2a0814e85cd Mon Sep 17 00:00:00 2001 From: Petr Skoda Date: Sun, 27 Dec 2009 23:31:46 +0000 Subject: [PATCH] MDL-21198 going back to the original spacer syntax, image component improvements, plus some regression fixes --- blog/external_blogs.php | 10 ++--- calendar/lib.php | 5 +-- course/lib.php | 16 ++----- course/recent.php | 4 +- course/search.php | 5 +-- lib/adminlib.php | 9 ++-- lib/deprecatedlib.php | 10 +---- lib/outputcomponents.php | 10 ++++- lib/outputrenderers.php | 85 +++++++++++++++++++++++++---------- mod/hotpot/report/default.php | 5 +-- mod/hotpot/review.php | 5 +-- mod/survey/report.php | 10 +---- mod/survey/view.php | 4 +- search/stats.php | 4 +- 14 files changed, 93 insertions(+), 89 deletions(-) diff --git a/blog/external_blogs.php b/blog/external_blogs.php index 5628a65b2e..9dc71676c5 100644 --- a/blog/external_blogs.php +++ b/blog/external_blogs.php @@ -72,14 +72,14 @@ if (!empty($blogs)) { $table->head = array(get_string('name'), get_string('url'), get_string('timefetched', 'blog'), get_string('valid', 'blog'), get_string('actions')); foreach ($blogs as $blog) { - $validicon = html_image::make($OUTPUT->pix_url('i/tick_green_big')); - $validicon->alt = get_string('feedisvalid', 'blog'); - $validicon->title = get_string('feedisvalid', 'blog'); - if ($blog->failedlastsync) { - $validicon->src = $OUTPUT->pix_url('i/cross_red_big'); + $validicon = html_image::make($OUTPUT->pix_url('i/cross_red_big')); $validicon->alt = get_string('feedisinvalid', 'blog'); $validicon->title = get_string('feedisinvalid', 'blog'); + } else { + $validicon = html_image::make($OUTPUT->pix_url('i/tick_green_big')); + $validicon->alt = get_string('feedisvalid', 'blog'); + $validicon->title = get_string('feedisvalid', 'blog'); } $editicon = new moodle_action_icon; diff --git a/calendar/lib.php b/calendar/lib.php index ce1deadc5a..8e2ee1a547 100644 --- a/calendar/lib.php +++ b/calendar/lib.php @@ -545,10 +545,7 @@ function calendar_print_event($event, $showactions=true) { if (!empty($event->icon)) { echo $event->icon; } else { - $spacer = new html_image(); - $spacer->height = 16; - $spacer->width = 16; - echo $OUTPUT->spacer($spacer) . '
'; + echo $OUTPUT->spacer(array('height'=>16, 'width'=>16, 'br'=>true)); // should be done with CSS instead } echo ''; echo ''; diff --git a/course/lib.php b/course/lib.php index 80fbbaa27c..f680d82a90 100644 --- a/course/lib.php +++ b/course/lib.php @@ -1349,10 +1349,7 @@ function print_section($course, $section, $mods, $modnamesused, $absolute=false, } if ($mod->indent) { - $spacer = new html_image(); - $spacer->height = 12; - $spacer->width = 20 * $mod->indent; - echo $OUTPUT->spacer($spacer); + echo $OUTPUT->spacer(array('height'=>12, 'width'=>(20 * $mod->indent))); // should be done with CSS instead } $extra = ''; @@ -1968,10 +1965,8 @@ function print_category_info($category, $depth, $showcourses = false) { $indent = $depth*30; $rows = count($courses) + 1; echo ''; - $spacer = new html_image(); - $spacer->height = 10; - $spacer->width = $indent; - echo $OUTPUT->spacer($spacer) . '
'; + + echo $OUTPUT->spacer(array('height'=>10, 'width'=>$indent, 'br'=>true)); // should be done with CSS instead echo ''; } @@ -2024,10 +2019,7 @@ function print_category_info($category, $depth, $showcourses = false) { if ($depth) { $indent = $depth*20; echo ''; - $spacer = new html_image(); - $spacer->height = 10; - $spacer->width = $indent; - echo $OUTPUT->spacer($spacer) . '
'; + echo $OUTPUT->spacer(array('height'=>10, 'width'=>$indent, 'br'=>true)); // should be done with CSS instead echo ''; } diff --git a/course/recent.php b/course/recent.php index 31e8cbcbb0..f0e7e8c893 100644 --- a/course/recent.php +++ b/course/recent.php @@ -225,9 +225,7 @@ if (!empty($activities)) { if (($activity->type == 'section') && ($param->sortby == 'default')) { if ($inbox) { echo $OUTPUT->box_end(); - $spacer = new html_image(); - $spacer->height = 30; - echo $OUTPUT->spacer($spacer) . '
'; + echo $OUTPUT->spacer(array('height'=>30, 'br'=>true)); // should be done with CSS instead } echo $OUTPUT->box_start(); echo "

$activity->name

"; diff --git a/course/search.php b/course/search.php index 011209c11d..66053e4394 100644 --- a/course/search.php +++ b/course/search.php @@ -239,10 +239,7 @@ $course->summary .= $displaylist[$course->category]; $course->summary .= "

"; print_course($course, $search); - $spacer = new html_image(); - $spacer->height = 5; - $spacer->width = 5; - echo $OUTPUT->spacer($spacer) . '
'; + echo $OUTPUT->spacer(array('height'=>5, 'width'=>5, 'br'=>true)); // should be done with CSS instead } } else { /// Show editing UI. diff --git a/lib/adminlib.php b/lib/adminlib.php index e7e1bbde0f..a3baf54b2d 100644 --- a/lib/adminlib.php +++ b/lib/adminlib.php @@ -6025,22 +6025,21 @@ class admin_setting_managerepository extends admin_setting { // display up/down link $updown = ''; - $spacer = new html_image(); - $spacer->height = 15; - $spacer->width = 15; + $spacer = $OUTPUT->spacer(array('height'=>15, 'width'=>15)); // should be done with CSS instead + if ($updowncount > 1) { $updown .= "baseurl&move=up&type=".$i->get_typename()."\">"; $updown .= "pix_url('t/up') . "\" alt=\"up\" /> "; } else { - $updown .= $OUTPUT->spacer($spacer); + $updown .= $spacer; } if ($updowncount < count($instances)) { $updown .= "baseurl&move=down&type=".$i->get_typename()."\">"; $updown .= "pix_url('t/down') . "\" alt=\"down\" />"; } else { - $updown .= $OUTPUT->spacer($spacer); + $updown .= $spacer; } $updowncount++; diff --git a/lib/deprecatedlib.php b/lib/deprecatedlib.php index 77b18be65a..3ebeecf396 100644 --- a/lib/deprecatedlib.php +++ b/lib/deprecatedlib.php @@ -2613,15 +2613,7 @@ function print_spacer($height=1, $width=1, $br=true, $return=false) { debugging('print_spacer() has been deprecated. Please change your code to use $OUTPUT->spacer().'); - $spacer = new html_image(); - $spacer->height = $height; - $spacer->width = $width; - - $output = $OUTPUT->spacer($spacer); - - if ($br) { - $output .= '
'; - } + $output = $OUTPUT->spacer(array('height'=>$height, 'width'=>$width, 'br'=>$br)); if ($return) { return $output; diff --git a/lib/outputcomponents.php b/lib/outputcomponents.php index ebd98aaf1c..213c9289be 100644 --- a/lib/outputcomponents.php +++ b/lib/outputcomponents.php @@ -1357,6 +1357,14 @@ class html_image extends labelled_html_component { * @var string $src The path to the image being used */ public $src; + /** + * @var int $width of image + */ + public $width; + /** + * @var int $height of image + */ + public $height; /** * @see lib/html_component#prepare() @@ -1367,7 +1375,7 @@ class html_image extends labelled_html_component { throw new coding_exception('html_image requires a $src value (moodle_url).'); } - $this->add_class('image'); //TODO. remove this like somehow + // no general class here, use custom class instead or img element directly in css selectors parent::prepare($output, $page, $target); } diff --git a/lib/outputrenderers.php b/lib/outputrenderers.php index 6bba46774f..78ead9f985 100644 --- a/lib/outputrenderers.php +++ b/lib/outputrenderers.php @@ -204,6 +204,23 @@ class renderer_base { } return $output; } + + /** + * Helper function for applying of html_component options + * @param html_component $component + * @param array $options + * @return void + */ + protected function apply_component_options(html_component $component, array $options = null) { + $options = (array)$options; + foreach ($options as $key => $value) { + if ($key === 'class' or $key === 'classes') { + $component->add_classes($value); + } else if (array_key_exists($key, $component)) { + $component->$key = $value; + } + } + } } @@ -1123,21 +1140,25 @@ class core_renderer extends renderer_base { /** * Creates and returns a spacer image with optional line break. * - * @param html_image $image Subclass of html_component - * + * @param array $options id, alt, width=1, height=1, etc. + * special options br=false (break after spacer) * @return string HTML fragment */ - public function spacer($image) { - $image = clone($image); - - if (empty($image->src)) { - $image->src = $this->pix_url('spacer')->out(false, array(), false); + public function spacer(array $options = null) { + $options = (array)$options; + if (empty($options['width'])) { + $options['width'] = 1; + } + if (empty($options['height'])) { + $options['height'] = 1; } + $options['class'] = 'spacer'; - $image->prepare($this, $this->page, $this->target); - $image->add_class('spacer'); + $output = $this->image($this->pix_url('spacer'), $options); - $output = $this->image($image); + if (!empty($options['br'])) { + $output .= '
'; + } return $output; } @@ -1145,16 +1166,31 @@ class core_renderer extends renderer_base { /** * Creates and returns an image. * - * @param html_image $image Subclass of html_component + * @param html_image|moodle_url|string $image_or_url image or url of the image + * @param array $options image attributes such as title, id, alt, widht, height * * @return string HTML fragment */ - public function image($image) { - if ($image === false) { + public function image($image_or_url, array $options = null) { + if ($image_or_url === false) { return false; + + } else if ($image_or_url instanceof html_image) { + $image = clone($image_or_url); + + } else { + if ($image_or_url instanceof moodle_url) { + $image = new html_image(); + $image->src = clone($image_or_url); + } else { + // must be a string + $image = new html_image(); + $image->src = new moodle_url($image_or_url); + } + + $this->apply_component_options($image, $options); } - $image = clone($image); $image->prepare($this, $this->page, $this->target); $this->prepare_event_handlers($image); @@ -1166,9 +1202,15 @@ class core_renderer extends renderer_base { 'title' => $image->title, 'id' => $image->id); - if (!empty($image->height) || !empty($image->width)) { - $attributes['style'] .= $this->prepare_legacy_width_and_height($image); + // do not use prepare_legacy_width_and_height() here, + // xhtml strict allows width&height and inline styles break theming too! + if (!empty($image->height)) { + $attributes['height'] = $image->height; + } + if (!empty($image->width)) { + $attributes['width'] = $image->width; } + return $this->output_empty_tag('img', $attributes); } @@ -1189,7 +1231,7 @@ class core_renderer extends renderer_base { * $OUTPUT->user_picture($userpic); * * - * @param object $user_or_userpicture Object with at least fields id, picture, imagealt, firstname, lastname + * @param object|user_picture $user_or_userpicture 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, @@ -1199,6 +1241,7 @@ class core_renderer extends renderer_base { * - link=true (make image clickable - the link leads to user profile) * - popup=false (open in popup) * - alttext=true (add image alt attribute) + * - etc. * @return string HTML fragment */ public function user_picture(stdClass $user_or_userpicture, array $options = null) { @@ -1210,13 +1253,7 @@ class core_renderer extends renderer_base { } else { $userpic = new user_picture(); $userpic->user = $user_or_userpicture; - $options = (array)$options; - $allowed = array('courseid', 'size', 'link', 'popup', 'alttext'); - foreach ($allowed as $key) { - if (array_key_exists($key, $options)) { - $userpic->$key = $options[$key]; - } - } + $this->apply_component_options($userpic, $options); } $userpic->prepare($this, $this->page, $this->target); diff --git a/mod/hotpot/report/default.php b/mod/hotpot/report/default.php index 6e2de078a8..a11a1a6edb 100644 --- a/mod/hotpot/report/default.php +++ b/mod/hotpot/report/default.php @@ -352,10 +352,7 @@ class hotpot_default_report { $this->print_html_finish($table); if (($i+1)<$count) { - $spacer = new html_image(); - $spacer->height = 30; - $spacer->width = 10; - echo $OUTPUT->spacer($spacer) . '
'; + echo $OUTPUT->spacer(array('height'=>30, 'width'=>10, 'br'=>true)); // should be done with CSS instead } } } diff --git a/mod/hotpot/review.php b/mod/hotpot/review.php index 89b42ffd55..894a3a8d68 100644 --- a/mod/hotpot/review.php +++ b/mod/hotpot/review.php @@ -150,10 +150,7 @@ function hotpot_print_review_buttons(&$course, &$hotpot, &$attempt, $context) { } print "\n\n"; print ''; - $spacer = new html_image(); - $spacer->height = 4; - $spacer->width = 1; - echo $OUTPUT->spacer($spacer); + echo $OUTPUT->spacer(array('height'=>4, 'width'=>1)); // should be done with CSS instead print "\n"; print "\n"; } diff --git a/mod/survey/report.php b/mod/survey/report.php index 0347fc592e..72d51eae7b 100644 --- a/mod/survey/report.php +++ b/mod/survey/report.php @@ -167,10 +167,7 @@ } echo $OUTPUT->box_end(); - $spacer = new html_image(); - $spacer->height = 30; - $spacer->width = 30; - echo $OUTPUT->spacer($spacer) . '
'; + echo $OUTPUT->spacer(array('height'=>30, 'width'=>30, 'br'=>true)); // should be done with CSS instead /// Print the menu across the top @@ -307,10 +304,7 @@ echo $OUTPUT->table($table); - $spacer = new html_image(); - $spacer->height = 30; - $spacer->width = 1; - echo $OUTPUT->spacer($spacer); + echo $OUTPUT->spacer(array('height'=>30)); // should be done with CSS instead } } } diff --git a/mod/survey/view.php b/mod/survey/view.php index ae0418bf1b..552405b9fc 100644 --- a/mod/survey/view.php +++ b/mod/survey/view.php @@ -103,9 +103,7 @@ } else { echo $OUTPUT->box(format_module_intro('survey', $survey, $cm->id), 'generalbox', 'intro'); - $spacer = new html_image(); - $spacer->height = 30; - echo $OUTPUT->spacer(clone($spacer)) . '
'; + echo $OUTPUT->spacer(array('height'=>30, 'width'=>1, 'br'=>true)); // should be done with CSS instead $questions = $DB->get_records_list("survey_questions", "id", explode(',', $survey->questions)); $questionorder = explode(",", $survey->questions); diff --git a/search/stats.php b/search/stats.php index c28f73cef3..72e06a7fd0 100644 --- a/search/stats.php +++ b/search/stats.php @@ -106,9 +106,7 @@ require_once($CFG->dirroot.'/search/lib.php'); } echo $OUTPUT->table($admin_table); - $spacer = new html_image(); - $spacer->height = 20; - echo $OUTPUT->spacer(clone($spacer)) . '
'; + echo $OUTPUT->spacer(array('height'=>20, 'br'=>true)); // should be done with CSS instead echo $OUTPUT->heading($solutionsstr); unset($admin_table->data); -- 2.39.5