Note:

If you want to create a new page for developers, you should create it on the Moodle Developer Resource site.

Notes about legacy page classes

From MoodleDocs
Warning: This page is no longer in use. The information contained on the page should NOT be seen as relevant or reliable.


The page is some notes about the legacy lib/pagelib.php, and is solely for my benefit as I plan how to change it in Navigation 2.0 implementation plan without breaking backwards compatibility too badly ;-)

Definition of page classes

page_base subclasses that exist in core

List of the classes according to the file which defines them.

lib/pagelib.php
page_base, __construct, construct, init_full, init_quick, get_type, get_id, get_format_name, get_body_class, get_body_id, print_header, blocks_get_positions, blocks_default_position, blocks_move_position, blocks_get_default, url_get_path, url_get_parameters, url_get_full, user_allowed_editing, user_is_editing, edit_always
page_course extends page_base, init_full, init_quick, get_type, get_format_name, print_header, blocks_get_positions, blocks_default_position, blocks_move_position, blocks_get_default, url_get_path, url_get_parameters, user_allowed_editing, user_is_editing
page_generic_activity extends page_base, init_full, print_header, blocks_get_positions, blocks_default_position, url_get_parameters, url_get_path, user_allowed_editing, user_is_editing
✔ admin/pagelib.php
page_admin extends page_base, get_type, print_header, blocks_get_positions, blocks_default_position, blocks_move_position, blocks_get_default, url_get_path, url_get_parameters, user_allowed_editing, user_is_editing, init_extra, set_extra_button, set_extra_url_params
blog/blogpage.php why isn't this called pagelib.php?
page_blog extends page_base, init_full, init_quick, get_type, get_format_name, print_header, blocks_get_positions, blocks_default_position, blocks_move_position, blocks_get_default, url_get_path, url_get_parameters, user_allowed_editing, user_is_editing, get_extra_header_string
mod/chat/pagelib.php
page_chat extends page_generic_activity, init_quick, get_type
mod/data/pagelib.php
page_data extends page_generic_activity, init_quick, get_type, print_header
mod/lesson/pagelib.php
page_lesson extends page_generic_activity, get_type, print_header, blocks_get_positions, blocks_default_position, blocks_move_position, url_get_parameters, set_lessonpageid
mod/quiz/pagelib.php
page_quiz extends page_generic_activity, init_quick, get_type
my/pagelib.php
page_my_moodle extends page_base, get_type, print_header, blocks_get_positions, blocks_default_position, blocks_move_position, url_get_parameters, url_get_path, user_allowed_editing, user_is_editing
✔ tag/pagelib.php
page_tag extends page_base, get_type, get_format_name, print_header, print_footer, blocks_get_positions, blocks_default_position, blocks_move_position, url_get_parameters, url_get_path, user_allowed_editing, user_is_editing

Pagelib files in contrib

I checked the HEAD and 1.9 branches in contrib CVS.

patches/center_blocks_position_patch/lib/pagelib.php
This is a hack that becomes obsolete. No worries.
plugins/mod/dimdim/pagelib.php
page_dimdim extends page_generic_activity, init_quick, get_type, print_header
plugins/mod/game/pagelib.php
page_game extends page_generic_activity, init_quick, get_type, print_header
plugins/mod/oublog/pagelib.php
page_game extends page_generic_activity, init_quick, get_type
plugins/mod/wiki/pagelib.php
page_wiki extends page_generic_activity, init_quick, get_type, print_header, blocks_move_position

Uses of $PAGE

In core

190 references to $PAGE in 30 files

Pages that need a small amount of standard re-work (which should be documented on Migrating your code code to the 2.0 rendering API as I do it). That is, only uses the things listed as 'Calls to' in the next section.

  • course/format/scorm/format.php
  • course/format/social/format.php
  • course/format/topics/format.php
  • course/format/weeks/format.php
  • course/rest.php
  • course/view.php
  • lib/moodlelib.php - isediting function, which we may deprecate since we can now use $PAGE->is_editing() everywhere
  • lib/weblib.php - three todos that are waiting for $PAGE->context
  • mod/chat/view.php
  • mod/data/view.php
  • mod/lesson/action/continue.html
  • mod/lesson/action/continue.php
  • mod/lesson/locallib.php
  • mod/lesson/view.php - special $PAGE->set_lessonpageid bit. Replace with $PAGE->set_sub_page.
  • mod/lesson/viewend.php
  • mod/lesson/viewstart.php
  • mod/quiz/view.php
  • mod/resource/lib.php
  • my/index.php
  • tag/index.php
  • index.php

Pages that need a bit more work that that:

  • Things relating to page-admin and $PAGE->section
    • admin/settings.php
    • blocks/admin_bookmarks/block_admin_bookmarks.php
    • blocks/admin_tree/block_admin_tree.php
    • lib/adminlib.php
  • blocks/moodleblock.class.php - checks $PAGE->type and ->id

Pages that will need major rework

  • lib/blocklib.php
  • admin/stickyblocks.php - will be replaced by the new block editing UI.
  • blog
    • blog/footer.php
    • blog/header.php - sets lots of stuff like $PAGE->courseid, $PAGE->filterselect, $PAGE->tagid - looks like abuse of global variables.

In contrib

204 references, but 122 if you exclude contrib/old on the 1.9 branch. 163 references if you exclude contrib/old on the HEAD branch.

Calls to

  • $PAGE = page_create_object(...)
  • $pageblocks = blocks_setup($PAGE, ...)
  • blocks_print_group($PAGE, ...)
  • $pageblocks = blocks_get_by_page($PAGE)
  • $PAGE->user_allowed_editing()
  • $PAGE->user_is_editing()
  • $missingblocks = blocks_get_missing($PAGE, $pageblocks) Missing blocks are really means blocks that the user is allowed to add to this page.
  • $PAGE->print_header($title)
  • $PAGE->url_get_full(...)
  • unset($PAGE->_user_allowed_editing) horribly, I have seen this hack in several places! will not be backwards compatible, but there will be a new method to do this.

We should be able to support all that in a backwards compatible way.

More complex stuff in

  • patches/blocktopbottom/... - but that will be obsolete.
  • patches/center_blocks_position_patch/... - but that will be obsolete.
  • patches/dragmath seems to ship a custom lib/adminlib.php - no idea why, but I am not going to worry about breaking it.
  • plugins/mod/customlabel/_goodies/course/format/page/actions/activities.php refers to a non-existent $PAGE->print_tabs(...).
  • plugins/theme/wood_custom_corners/header.html does some nasty hacking based on page type. Will break.

I expect most of that will break, but I don't think there is anything that important in that list.

What happens to the various pagelib methods

init_full
init_quick
need to work out if any of this logic is important, and if so move it
✔ blocks_get_positions
✔ blocks_default_position
✔ blocks_move_position
obsoleted by the new blocks system. We will just make deprecated functions that do nothing just to prevent fatal errors.
✔ blocks_get_default
actually, we don't need a general default blocks mechanism. Instead we should be using sticky blocks for most things. The one exception is default blocks on the course page. We will implement that as a special case using the existing $CFG variables.
✔ user_allowed_editing
the logic from subclass implementations needs to be moved elsewhere
✔ user_is_editing
keep
✔ get_type
becomes return $PAGE->pagetype
✔ get_format_name
this is used to filter the allowed blocks by course format, something only about 2 blocks actually take advantage of. I think the correct solution is to set $PAGE->pagetype to, e.g. course-view-weeks or course-edit-weeks on the course view/edit page, and make get_format_name a deprecated synonym for get_type.
get_id
only used by blocklib when working out what blocks appear on a page, so remove after upgrading the blocks database tables
print_header
need to examine the logic in all subclasses, and work out what to do about it
✔ edit_always
only used by admin/stickyblocks.php - though the reference is actually in lib/blockslib.php - remove
✔ url_get_path
✔ url_get_full
keep deprecated implementations in terms of $PAGE->url
✔ url_get_parameters
move logic from subclasses that used to be here elsewhere, then reimplement in terms of $PAGE->url
✔ get_body_class
✔ get_body_id
not used anywhere, remove
✔ init_extra
set_extra_button
✔ set_extra_url_params
hacks I added to the admin page class - fix admin and remove
✔ get_extra_header_string
only used by blog - remove
set_lessonpageid
only used by lesson - remove and use with $PAGE->subpage instead
✔ print_footer
only defined/used in tags - remove.
✔ $CFG->pagepath
This was an evil hack - remove - replace with $PAGE->set_pagetype()
ADMIN_STICKYBLOCKS
this constant is defined by admin/stickyblocks.php as a hack to let the blocks code know we are editing stickyblocks. Remove this once the new blocks editing is done.

See also