Thank you Florian! I moved the dependency check to a function in
$wgExtensionFunctions and that did the trick.
Jason
--
Jason Ji
jason.y.ji(a)gmail.com
On Mon, Nov 2, 2015 at 11:48 AM, Florian Schmidt <
florian.schmidt.welzow(a)t-online.de> wrote:
Hi Jason,
you're right, the call to the callback is before[1] the loaded extensions
are added to the array[2] which is the backend for isLoaded(). You need to
put the dependency check after the extensions are loaded, e.g. into the
wgExtensionFunctions array[3], which is currently loaded after the load and
execution of LocalSettings.php (including wfLoadExtensions()s execution).
[1]
https://github.com/wikimedia/mediawiki/blob/e87668e86ce9ad20df05c1baa8e7cf3…
[2]
https://github.com/wikimedia/mediawiki/blob/e87668e86ce9ad20df05c1baa8e7cf3…
[3]
https://www.mediawiki.org/wiki/Manual:$wgExtensionFunctions
-----Ursprüngliche Nachricht-----
Von: Wikitech-l [mailto:wikitech-l-bounces@lists.wikimedia.org] Im
Auftrag von Jason Ji
Gesendet: Montag, 2. November 2015 17:15
An: Wikimedia developers <wikitech-l(a)lists.wikimedia.org>
Betreff: Re: [Wikitech-l] MW 1.25 new extension registration - PHP
constants
Hi Florian (or others),
This morning I tried to implement Florian's suggestion of using
ExtensionRegistry::getInstance()->isLoaded( 'ExtensionName' ) to check
dependencies, but ran into a roadblock. Hoping someone can help me out, and
I'll try to summarize what the problem is.
I've converted *VIKI *and *VikiTitleIcon *to the new extension
registration format. VikiTitleIcon depends on VIKI and prior to the new
extension registration format, it used to check for the *VIKIJS_VERSION*
PHP constant, else die(), as I described in my previous email. I wasn't
sure exactly where to use the new isLoaded() call in VikiTitleIcon, so I
took a best guess and used custom registration <
https://www.mediawiki.org/wiki/Manual:Extension_registration#Customizing_re…
to specify a 'callback' function,
wherein I check for isLoaded('VIKI') or
die() otherwise. I've confirmed that my callback is being called, but
unfortunately, this always causes the system to think that VIKI is not
loaded and dies, regardless of whether I've included
wfLoadExtension('VIKI') in LocalSettings.php.
I'm guessing that this has something to do with the order of execution for
registering extensions, and perhaps VIKI is only queued up for registration
with the ExtensionRegistry but hasn't finished registration before the
VikiTitleIcon registration callback gets called, so isLoaded('VIKI') is
returning false. But I'm not sure, because I don't know anything about the
internal workings of ExtensionRegistry. If the callback of VikiTitleIcon is
not the correct place to check for the loading of VIKI, is there a better
place?
Thanks,
--
Jason Ji
jason.y.ji(a)gmail.com
On Fri, Oct 30, 2015 at 3:36 PM, Jason Ji <jason.y.ji(a)gmail.com> wrote:
> And thanks to you for suggesting the idea and getting on it so quickly!
> --
> Jason Ji
> jason.y.ji(a)gmail.com
> On Fri, Oct 30, 2015 at 3:35 PM,
Florian Schmidt <
> florian.schmidt.welzow(a)t-online.de> wrote:
>> Hi,
>>
>> thanks for opening the task! :) I was free and started to work on
>> this some minutes ago, because I really like the idea, so I already
>> added a change to gerrit, before anyone has the chance to discuss
>> this :( But I hope, that we get such a function into
>> ExtensionRegistration! Big thanks again for bringing this up.
>>
>> Best,
>> Florian
>>
>> -----Ursprüngliche Nachricht-----
>> Von: Wikitech-l [mailto:wikitech-l-bounces@lists.wikimedia.org] Im
>> Auftrag von Jason Ji
>> Gesendet: Freitag, 30. Oktober 2015 20:25
>> An: Wikimedia developers <wikitech-l(a)lists.wikimedia.org>
>> Betreff: Re: [Wikitech-l] MW 1.25 new extension registration - PHP
>> constants
>>
>> Hi Florian,
>>
>> Thanks! For my immediate purposes, I think just doing the isLoaded()
>> check will probably suffice, as I don't actually have any need to
>> check versions at the moment. But I agree with your suggestion,
>> extending the 'requires'
>> section of extension.json does seem like it would be very helpful and
>> extension developer-friendly, and that's a great idea.
>>
>> I've opened a Phabricator task here
>> <https://phabricator.wikimedia.org/T117277>, but feel free to tweak
>> it if I've described something poorly or didn't tag it correctly -
>> I've never actually created a task in Phabricator before.
>>
>> Thanks!
>>
>> --
>> Jason Ji
>> jason.y.ji(a)gmail.com
>>
>> On Fri, Oct 30, 2015 at 2:06 PM, Florian Schmidt <
>> florian.schmidt.welzow(a)t-online.de> wrote:
>>
>> > You can, in your php extension code, so not inside the
>> > extension.json, check, if another extension is installed or not:
>>
>> >
ExtensionRegistry::getInstance()->isLoaded( 'ExtensionName' );
>>
>> > There's also a
"requires" section, which is parsed in
>> > extension.json, but it currently only supports MediaWiki core
>> > versions (it behaves like composer's requires section). I'm
>> > wondering, if dependencies like yours are widely used and if
>> > extending the requires section support to extensions would help to
>> > solve your problem (with that you could specify a specific version,
>> > a range of version or any version above a specific one, or all
>> > versions, too, so your VIKIJS_VERSION wouldn't be
>> needed anymore, too).
>> > Would you like to open a task in phabricator to discuss this?
>>
>> > Best,
>> > Florian
>>
>> > -----Ursprüngliche
Nachricht-----
>> > Von: Wikitech-l [mailto:wikitech-l-bounces@lists.wikimedia.org] Im
>> > Auftrag von Jason Ji
>> > Gesendet: Freitag, 30. Oktober 2015 17:00
>> > An: wikitech-l(a)lists.wikimedia.org
>> > Betreff: [Wikitech-l] MW 1.25 new extension registration - PHP
>> > constants
>>
>> > Hi there,
>>
>> > I'm the primary
developer of the VIKI
>> > <https://www.mediawiki.org/wiki/Extension:VIKI> extension and its
>> > two companion extensions, VikiSemanticTitle <
>> >
https://www.mediawiki.org/wiki/Extension:VikiSemanticTitle> and
>> > VikiTitleIcon <https://www.mediawiki.org/wiki/Extension:VikiTitleIcon
>.
>>
>> > I thought I'd
take a look at converting these three extensions to
>> > the new extension registration <
>> >
https://www.mediawiki.org/wiki/Manual:Extension_registration>
>> > format, but I ran into a problem. According to the documentation,
>> > the new extension registration does not support PHP constants <
>>
>>
https://www.mediawiki.org/wiki/Manual:Extension_registration/Limitati
>> ons
>> >.
>>
>> > I use a PHP
constant to declare an explicit dependency on VIKI for
>> > VikiSemanticTitle and VikiTitleIcon. In my VIKI.php file, I declare:
>>
>> > *define(
'VIKIJS_VERSION', '1.3');*
>>
>> > And then in
VikiSemanticTitle and VikiTitleIcon, I have a check
>> > that looks something like:
>>
>> > *if( !defined(
'VIKIJS_VERSION' ) ) {*
>> > * die('Error: The extension VikiSemanticTitle requires VIKI to be
>> > installed first.');*
>> > *}*
>>
>> > (As an aside, I
also happen to use VIKIJS_VERSION as my version
>> > number, which I increment as I release new versions. But that's not
>> > as
>> > important.)
>>
>> > Because the new
extension registration format doesn't support PHP
>> > constants, this no longer works, and I can't run VikiSemanticTitle
>> > and VikiTitleIcon alongside VIKI - the VIKIJS_VERSION constant is
>> > seemingly no longer defined, so any page load dies with the error
>> message above.
>>
>> > If I can't use
PHP constants anymore, does anyone have a better
>> > recommendation for declaring explicit dependencies? Or should I
>> > just avoid migrating the VIKI extensions to the new registration
format?
>>
>> > Thanks,
>>
>> > --
>> > Jason Ji
>> > jason.y.ji(a)gmail.com
>> > _______________________________________________
>> > Wikitech-l mailing list
>> > Wikitech-l(a)lists.wikimedia.org
>> >
https://lists.wikimedia.org/mailman/listinfo/wikitech-l
>>
>>
>> > _______________________________________________
>> > Wikitech-l mailing list
>> > Wikitech-l(a)lists.wikimedia.org
>> >
https://lists.wikimedia.org/mailman/listinfo/wikitech-l
>> _______________________________________________
>> Wikitech-l mailing list
>> Wikitech-l(a)lists.wikimedia.org
>>
https://lists.wikimedia.org/mailman/listinfo/wikitech-l
>>
>>
>> _______________________________________________
>> Wikitech-l mailing list
>> Wikitech-l(a)lists.wikimedia.org
>>
https://lists.wikimedia.org/mailman/listinfo/wikitech-l
>>
_______________________________________________
Wikitech-l mailing list
Wikitech-l(a)lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/wikitech-l
_______________________________________________
Wikitech-l mailing list
Wikitech-l(a)lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/wikitech-l