In the beginning, there was Article.php.  And the Article class had methods 
like Article::view(), Article::delete(), Article::protect(), etc.  And the 
fundamental codeflow of Mediawiki consisted of something along the lines of:

$article = new Article( $title );
$action = wfGetTheActionSomehow();
$article->$action();

Over time Article has grown and bloated to become our third largest class 
(after ZhConversion and Parser).  Several of its action methods have been 
spun out to separate files (EditPage.php, ProtectionForm.php and 
HistoryPage.php, among others).  It's long overdue that this process be 
carried through to its natural conclusion with all action methods spun out 
into some new structure.

There are essentially two competing possibilities for structuring this, and 
they reflect the two parallel systems we have for "doing things other than 
viewing" to a wiki.  One is action parameters, and the other is special 
pages.  We have action=edit, or Special:MovePage, for instance; they have a 
similar function but different structure.  We have action=delete to get rid 
of stuff, but then Special:Undelete to bring it back again. 
Special:Whatlinkshere and action=history are another pair of pages which 
have very similar principles (getting data that relates to a given page) but 
different implementations.

For either case in the backend I would think we'd want to create an 
ActionPage base class and an EditActionPage from that, which looks 
internally rather like a SpecialPage construct, might even subclass it.  I'd 
like to ask people's opinions about which they think would work better in 
the frontend for, say, editing or protecting.  If people think it would be 
better as a special page we'd make 
http://foo.example.com/w/index.php?title=Bar&action=edit a hard redirect to 
Special:Edit/Bar; that has the significant advantage of being able to be 
formed as an internal link.  Conversely if we'd like to keep it an action it 
would make sense to redirect Special:MovePage/Bar back to 
?title=Bar&action=move.  Or is something more exotic like 
[[Action:Edit/Bar]] a possibility?

Thoughts?

--HM 



_______________________________________________
Wikitech-l mailing list
Wikitech-l@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/wikitech-l

Reply via email to