Vanilla 1 is no longer supported or maintained. If you need a copy, you can get it here.
HackerOne users: Testing against this community violates our program's Terms of Service and will result in your bounty being denied.
Options

Extensions list broken

edited April 2006 in Vanilla 1.0 Help
Instead of displaying all of the extensions in the list, Vanilla displays the right number, but thinks they're all the whisper plugin:

image

Any ideas?

Running PHP 5.0.4 on Windows, if it's any help. (If it's PHP5 that's the problem then that's fine, since the host I'll be putting this on is still on 4.x)
«1

Comments

  • Options
    whoa busted. are all the extensions in the extensions folder?
  • Options
    Yup, all the files are present and correct. This is a brand spanking new install, I'm trying it out locally before I use it properly on my site.
  • Options
    did you turn on all the extensions? they should all be off by default if i remember correctly.
  • Options
    also look at your appg/extensions.php and see what is in that.
  • Options
    I can only turn whispers on, because that's the only one that's there :P It appears like this whether the whispers extension is turned on or off.
  • Options
    Only whispers is being loaded in appg/extensions.php.
  • Options
    MarkMark Vanilla Staff
    I've had another member report this bug and he's granted me access to his server so I can figure out what the problem is. he's got php5 as well, so it is definitely related to that. I imagine it's a simple matter of changing a looping method or something. I'm planning on having this bug fixed for Friday's revision.
  • Options
    /me waits for mark
  • Options
    He's too quick for you :P Righto, sounds like it's related to PHP5 then. In what file are extensions loaded, out of interest?
  • Options
    MarkMark Vanilla Staff
    Extensions are managed by the appg/extensions.php file. All that form does is add (or remove) an include line to the actual extension in that file.
  • Options
    Yeah I'd guessed that - where is the code that displays the extensions on the admin page, though? I've had a poke but I think I'm just being blind or something :/
  • Options
    Ah, got it, in settings.php. I'll have a play with it, see if I can't work it out :)
  • Options
    MarkMark Vanilla Staff
    Yeah - it should be in the controls/settings.php control file. The class is ExtensionForm, which is an implementation of PostBackControl. All of the fancy directory reading stuff happens in the constructor. I don't know why I told you that since you already knew. But I did.
  • Options
    edited July 2005
    It's got to be to do with the way PHP5 handles objects. When you append the $this->Extensions array with $Extension, it seems to be modifying that instance of the object when you modify the other instances - so when you call $Extension->Clear(), it's also clearing the instance in $this->Extensions, too, just like if you passed a reference to $Extensions. Thus, when you add the next extensions info into $Extension, it's also modifying the first instance, and in the third loop it modifies the first and second too and so on. (If you'll excuse the shoddy explanation) I'm really not sure why, as you're not passing a reference - it should be cloning the object - but that's what seems to be happening, since a dump of $Extensions each time shows each individual extension, but a dump of $this->Extensions after the loop shows each array item as Whispers.
  • Options
    edited July 2005
    You can fix it on PHP5 by changing it to:

    $this->Extensions[] = clone $Extension;

    But I would presume that breaks PHP4, since it has no idea what cloning objects is.

    e: I guess you could do it the somewhat ugly way:
    
    if(version_compare(PHP_VERSION, '5.0.0', 'ge')) {
    	$this->Extensions[] = clone $Extension;
    } else {
    	$this->Extensions[] = $Extension;
    }
    
    but it doesn't really seem like an elegant solution.
  • Options
    MarkMark Vanilla Staff
    cool - thanks for looking into this. I'll take a closer look at php 5 and see if there is some alternate method I can come up with.
  • Options
    Looking back, not even the ugly way would work, since it's still syntactically incorrect in PHP4. Hmm.
  • Options
    edited July 2005
    I just found another solution to the bug:

    Setting
    php_admin_value zend.ze1_compatibility_mode 1
    in the apache config also fixes this issue. It definitely has to do with PHP5s object handling.
  • Options
    MarkMark Vanilla Staff
    Sweet! Thanks 413x!
  • Options
    Hmm, weird. It seems like an integral part of PHP5's OOP, I wouldn't have expected you to be able to turn it off so easily. I wonder how it affects other applications?
This discussion has been closed.