On 19/11/2010 21:53, don undeen wrote:
> here I am, posting fixes to my own problems...
>
> in SMW_refreshData.php, around line 166,
> where you see:
>      $title = Title::newFromText( $page );
>
> I added after that:
>      $wgTitle = $title;
>
> and that seems to take care of it.
>
> This fix could probably go into SF instead, but it's probably appropriate that
> it be on that script; similar code is the MW's refreshLinks.php
>
> anways, if anyone's having a similar problem, there you go.

There is usually a problem if code is relying on $wgTitle. Normally, 
MediaWiki controls what is in $wgTitle, and uses it for its own 
purposes. There are only very few places where extensions can safely 
work with the contents of this variable (for example, SMW uses it to get 
the extracted semantic data in a hook *after* parsing). Note that 
$wgTitle must never be used during parsing. In this situation, the title 
is obtained from $wgParser->getTitle() only.

Let me be more explicit:

*** $wgTitle must typically not be used in extensions. ***

*** $wgTitle must typically not be set in extensions. ***

Looking into this, I now found a bug in SMW where $wgTitle was set in 
SMWSQLStore2::refreshData(). It is inappropriate and dangerous to set a 
global MediaWiki variable in this place. I have now fixed this. Code 
that relies on $wgTitle being set by a method that is actually meant to 
provide basic storage manipulation operations (independent of the 
current MW application state) should urgently reconsider its design 
assumptions.

The only exception where $wgTitle might be set in extension code is when 
an extension starts new parsing operations, i.e. is at the beginning of 
MediaWiki control flow. This can indeed happen in maintenance scripts 
(it does in refreshLinks.php), but normally not for batch processed 
pages as in our above refresh script. Looking at MediaWiki's scripts, 
one can see that $wgTitle is often set to a place holder value that has 
no significance to the current task, e.g.

./maintenance/runJobs.php:57:
    $wgTitle = Title::newFromText( 'RunJobs.php' );

Summing up: it is neither common nor required to set $wgTitle in 
extensions or in maintenance scripts, unless the respective code is the 
start of a new global processing activity (such as in MW's 
refreshLinks.php). It is wrong and potentially harmful to set $wgTitle 
in functions that can be called in jobs (such as the refreshData 
function I mentioned above).

I suppose that the problem discussed in this thread ultimately comes 
from an unsuitable access to $wgTitle. Setting the variable in 
SMW_refreshData.php would not be wrong (since it is an entry point and 
$wgTitle was not set before), but it would not solve the underlying bug. 
Indeed, the only thing that happens in this script afterwards is that an 
update job is run. Code in jobs must not depend on $wgTitle. Never. 
Working around the issue in this one place is not going to solve it. The 
issue needs to be addressed at its root instead: either at the 
inappropriate use of $wgTitle in SF or at the code that calls SF in a 
context that it is not meant to be run in.

Cheers,

Markus


> ________________________________
> From: don undeen<donund...@yahoo.com>
> To: smw dev list<semediawiki-devel@lists.sourceforge.net>
> Sent: Fri, November 19, 2010 4:43:42 PM
> Subject: Re: [SMW-devel] having trouble with "creates pages with form" feature
> on SMW_refreshdata.php
>
>
> oh, and when I run maintenance/refreshLinks.php, in main mediawiki directory,
> the createPage jobs get created just fine, and all that passes through the 
> same
> semanticforms code.
> So maybe the problem is in SMW...
>
>
>
>
> ________________________________
> From: don undeen<donund...@yahoo.com>
> To: smw dev list<semediawiki-devel@lists.sourceforge.net>
> Sent: Fri, November 19, 2010 4:38:01 PM
> Subject: having trouble  with "creates pages with form" feature on
> SMW_refreshdata.php
>
>
> hey guys,
> I'm having some trouble running SMW_refreshData.php on pages with the
> "creates pages with form" property.
>
> The idea is that if there's a page with a property pointing to a non-existant
> page,
> and that property has the property "Creates pages with form::blah",
> then a job task will be set up to create a page using form "blah", with the 
> page
> name of the non-existant page.
>
> Make sense? Anways, when I try to run SMW_refreshData.php, and it encounters 
> one
> of those pages with the broken link. I get the error:
>
> Empty $wgTitle in OutputPage::parse
> Backtrace:
> #0 [internal function]: OutputPage->parse('This is a minor...', true, true)
> #1 D:\xampp\htdocs\metwikiupgrade\includes\StubObject.php(58):
> call_user_func_array(Array, Array)
> #2  D:\xampp\htdocs\metwikiupgrade\includes\StubObject.php(76):
> StubObject->_call('parse', Array)
> #3 [internal function]: StubObject->__call('parse', Array)
> #4 D:\xampp\htdocs\metwikiupgrade\includes\GlobalFunctions.php(740):
> StubObject->parse('This is a minor...', true, true)
> #5
> D:\xampp\htdocs\metwikiupgrade\extensions\SemanticForms\includes\SF_FormUtils.php(488):
>   wfMsgExt('minoredit', Array)
> #6
> D:\xampp\htdocs\metwikiupgrade\extensions\SemanticForms\includes\SF_FormPrinter.php(1032):
>   SFFormUtils::minorEditInputHTML(false, NULL, Array)
> #7
> D:\xampp\htdocs\metwikiupgrade\extensions\SemanticForms\includes\SF_LinkUtils.php(198):
>   SFFormPrinter->formHTML('<noinclude>?Thi...', false, false, NULL, NULL, 
> 'Some
> very long ...', NULL)
> #8
> D:\xampp\htdocs\metwikiupgrade\extensions\SemanticForms\includes\SF_LinkUtils.php(149):
>   SFLinkUtils::createLinkedPage(Object(Title))
> #9 [internal function]:  SFLinkUtils::setBrokenLink(Object(SkinOntoSkin3),
> Object(Title), Array, '00.19.13', Array, NULL)
> #10 D:\xampp\htdocs\metwikiupgrade\includes\Hooks.php(117):
> call_user_func_array(Array, Array)
> #11 D:\xampp\htdocs\metwikiupgrade\includes\Linker.php(222):
> wfRunHooks('LinkEnd', Array)
> #12 D:\xampp\htdocs\metwikiupgrade\includes\Linker.php(513):
> Linker->link(Object(Title), '00.19.13', Array, Array, 'broken')
> #13 D:\xampp\htdocs\metwikiupgrade\includes\parser\LinkHolderArray.php(233):
> Linker->makeBrokenLinkObj(Object(Title), '00.19.13', '')
> #14 D:\xampp\htdocs\metwikiupgrade\includes\parser\LinkHolderArray.php(115):
> LinkHolderArray->replaceInternal('<p><br />?</p>?...')
> #15 D:\xampp\htdocs\metwikiupgrade\includes\parser\Parser.php(4101):
> LinkHolderArray->replace('<p><br />?</p>?...')
> #16 D:\xampp\htdocs\metwikiupgrade\includes\parser\Parser.php(344):
> Parser->replaceLinkHolders('<p><br />?</p>?...')
> #17
> D:\xampp\htdocs\metwikiupgrade\extensions\SemanticMediaWiki\includes\jobs\SMW_UpdateJob.php(60):
>   Parser->parse('{{Interactive F...', Object(Title), Object(ParserOptions), 
> true,
> true, 3372)
> #18
> D:\xampp\htdocs\metwikiupgrade\extensions\SemanticMediaWiki\maintenance\SMW_refreshData.php(170):
>   SMWUpdateJob->run()
> #19 {main}
>
>
> I think this is because this is running from a script, and therefor $wgTitle
> isn't set, because $wgTitle is supposed to be the title of the loaded page? is
> that right?
>
> the part that expects the wgTitle to be in place is in the wiki core:
> includes/OutputPage.php
> I dont' think I should be changing that.
>
> But looks like that's only called because of the call in SF to
> wfMsgExt('minoredit', Array)
> Do we need that?
> Or should I spoof up a wgTitle object when I first notice that it's null,
> somewhere in
>
> SF_LinitUtils.php::createLinkedPage
>
> Any Idea what's up? I'm using the SemanticForms 1.9.1, with the patch from 
> Halo,
> just to make things a bit more complicated.
>
> All my other versions of things are in line with the latest stable halo
> releases.
>
>
> I feel like this may have been something I've fixed in the past, but lost due 
> to
> upgrades.
> Maybe Yaron remembers something about this...
>
>
>
> ------------------------------------------------------------------------------
> Beautiful is writing same markup. Internet Explorer 9 supports
> standards for HTML5, CSS3, SVG 1.1,  ECMAScript5, and DOM L2&  L3.
> Spend less time writing and  rewriting code and more time creating great
> experiences on the web. Be a part of the beta today
> http://p.sf.net/sfu/msIE9-sfdev2dev
>
>
>
> _______________________________________________
> Semediawiki-devel mailing list
> Semediawiki-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/semediawiki-devel


------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1,  ECMAScript5, and DOM L2 & L3.
Spend less time writing and  rewriting code and more time creating great
experiences on the web. Be a part of the beta today
http://p.sf.net/sfu/msIE9-sfdev2dev
_______________________________________________
Semediawiki-devel mailing list
Semediawiki-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/semediawiki-devel

Reply via email to