* All updates to user.lastaccess and user_lastaccess.timeaccess are paced to
60s of the last update on the same record -- this should reduce the heat
on those tables.
* Updates/inserts to user_lastaccess are down with raw SQL to avoid costly
schema lookups on every request.
Move the fixups for orphan courses to the newly minted
fix_coursecategory_orphans() -- and optimise it to take only 1 dbquery for
the common case.
If we do find lots of orphans, we issue 2 updates per orphan.
This cuts down dbqueries drastically - we used to have 2x the number of
courses in the site.
Two improvements for fix_course_sortorder()
- If the category has more courses than the shift range
use a larger shift range to avoid overlapping with itself
- If things do go wrong during the per-course sortorder updates,
rollback and try and call ourselves with a 'safe' flag.
Still - far from perfect. Probably the global sortorder approach
is broken. The sanest way is to rework things to always join against
course_categories and order by the combined sortorders.
I've tested both the "IN" subquery and the "FROM" subquery and, under sites
with more courses, the "FROM" one seems to perform slightly better. MDL-9381
Merged from MOODLE_18_STABLE
This makes get_my_courses() faster/lighter in 2 ways
- We fetch a ton less data from the DB
- We store a tone less data in the Session
In a test environment, with a student enrolled in 3 _empty_ courses
(just created, empty modinfo, etc), this shaves 50% off the session
size on-disk.
The problem is callers that may be expecting a given field to appear by
default. Next step: walk all callers...
Resetting it in load_all_capabilities() means it gets flushed everytime
role_assign() or role_unassign() is called on the current user, which should
be enough.
The cache is not reset when others assign/unassign roles, but Moodle has
always had this problem.
- get_user_listing() is now aware of remote users
- require_login() is now aware of remote users
- new auth plugins infrastructure in place
- is_internal_auth() is now a deprecated legacy call
- create_user_record()/update_user_record()/authenticate_user_login() handle multi-auth
- is_mnet_remote_user() checks for remoteness
- clean_param() handles PARAM_PEM and PARAM_BASE64
Also
- user_login_string() knows to offer a link to remote users to login @ their host
- XMLTDBTable field creation returns the field obj so that
the caller has a chance to set additional properties such as comment