On Wed, 2 Feb 2005 20:42:10 +0100, Moritz Karbach <mailinglist(a)karba.ch> wrote:
first of all thanks for analyzing my code :-)
No problem - in fact, sorry for picking it apart to such an extent.
Firstly, it
allows any user to lock themselves
That's one thing I can tolerate.
Funny, I figured that would be the worst part. But I guess if you've
got total control over who has editing rights anyway (a CMS-style
environment, rather than a truly wiki-ish one), this isn't such a big
deal after all.
Secondly, the
content can be viewed by using the "preview" function:
But this I'd like to fix!
I guess it would be best to include some check after the page has been parsed,
but before it gets displayed. If there is a function that gathers the
categories (from db and from preview) and passes them to the parser, this
would be perfect.
I'm pretty sure it's the other way around - the "parser" has to go
through the wikitext, and pick out any category links it finds; these
are then plonked in the database for other use if the page is being
saved. On preview, they're just added in the little box at the bottom
of the page, without the database being updated.
But that doesn't remove the potential for grabbing a list of them -
Skin.php has a function called getCategoryLinks(), which grabs the
definitive list of categories from $wgOut (the instance of
OutputPage.php). If you were to use one of those as your source, I
think [although I wouldn't guarantee] you would get the categories
currently included on the page, even in preview, irrespective of
what's in the database.
It does mean, though, that you'll need to do the check *right at the
end* of the parsing - somewhere just before the HTML is actually
output, but after the wikitext has been parsed from beginning to end.
Is there some dataflow chart or something on the web,
where the parsing
mechanism is explained?
Hm, I believe you have just run into "Bug 1"
[
http://bugzilla.wikipedia.org/show_bug.cgi?id=1]. In other words, no,
not that I've ever seen. The codebase, particularly the parsing and
associated processing, is somewhat labyrinthine, I'm afraid - all done
through a complex tangle of Parser.php (don't be fooled, it's not so
much a parser as a bunch of loops and regexes), Skin.php (and its
sub-classes) and OutputPage.php.
There is some automatically generated [from source comments]
documentation at
http://wikipedia.sourceforge.net/docs/html/ -
although this seems to be out of date right now. There's also a few
fragments on the meta wiki, like
http://meta.wikimedia.org/wiki/MediaWiki_code_layout, for very general
overviews.
--
Rowan Collins BSc
[IMSoP]