Textpattern CMS support forum
You are not logged in. Register | Login | Help
- Topics: Active | Unanswered
Re: Fatal error
gavnosis wrote #329859:
Why (O-Y-O-Y) would installed plugins not be listed within Textpattern itself
Therein lies the conundrum. Short of it being a filesystem issue – unlikely since Diagnostics says all files are present and correct – or a table-specific connectivity issue, I’m floundering here to understand why this is happening.
Random thoughts:
- Put your site into debugging mode and visit the Plugins panel. See if any errors are kicked out. You can flick it back to Live immediately after.
- Check your table collations on the txp_plugin table match the other tables. Maybe some of the rows/columns have the wrong collation and Txp is having a hard time interpreting the data.
- Check your table indexes are intact and are indexing data. There should be two:
UNIQUE name (name),
INDEX status_type_idx (status, type)
Past that, I’m struggling, sorry.
The smd plugin menagerie — for when you need one more gribble of power from Textpattern. Bleeding-edge code available on GitHub.
Txp Builders – finely-crafted code, design and Txp
Offline
Re: Fatal error
Thank you for the suggestion. And, oh, this doesn’t look good in plugins in debugging mode
User_Error "Illegal mix of collations (utf8_general_ci,COERCIBLE) and (latin1_german2_ci,IMPLICIT) for operation 'strcmp'"
in… /textpattern/lib/txplib_db.php at line 453.
And there’s more, too :-(
adminErrorHandler()
textpattern/lib/txplib_db.php:453 trigger_error()
textpattern/lib/txplib_db.php:1191 safe_query()
textpattern/lib/txplib_db.php:1039 startRows()
textpattern/include/txp_plugin.php:190 safe_rows_start()
textpattern/include/txp_plugin.php:56 plugin_list()
textpattern/index.php:228 include()
Warning "mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, bool given"
Offline
Re: Fatal error
Okay, result! That’s all fixable and explains it.
I’ve seen this on other tables where stuff just doesn’t appear in the admin side because the database can’t resolve the collation conflicts. That second error is a byproduct of the first so it’ll go away when the collations are fixed.
I’d suggest inspecting the collations used on other tables. Find a table that renders fine (without errors in debugging mode) on the admin side – pages, forms, textpattern, link, images, whatever – and take a look at the collation it uses for columns. Then go to your txp_plugin table and alter the collation on any columns that don’t match. I suspect that any with latin1_german2_ci will need to become utf8_general_ci, but it could be the other way around depending on where your database is located and its language and so forth.
Once you’ve altered those, the Plugins panel should load fine. You can verify it with a quick trip to debugging mode and if there are any stragglers, they’ll show up.
Quite how this situation occurs, btw, is not something that’s apparent to me. It just does. If anybody knows why or how this happens (perhaps content itself is encoded in a particular collation and Txp doesn’t correct it, taking it verbatim?) then I’d love to find out what causes it.
Last edited by Bloke (2021-04-16 08:04:06)
The smd plugin menagerie — for when you need one more gribble of power from Textpattern. Bleeding-edge code available on GitHub.
Txp Builders – finely-crafted code, design and Txp
Offline
Re: Fatal error
Thank you Stef
Pretty much everything has collations of latin1_german2_ci, including txp_plugin
txp_page latin1_german2_ci
txp_image latin1_german2_ci
In fact the only there tables which don’t are these
txp_skin utf8_general_ci
txp_token utf8_general_ci
smd_tags utf8_general_ci
Would I change these three to latin1_german2_ci?
Offline
Re: Fatal error
If latin1_german2_ci is the dominant collation then, sure, use that. Whichever is least work :)
Check for column collations as well as table collations. Each column in each table has its own collation and they should all match for a seamless ride.
The smd plugin menagerie — for when you need one more gribble of power from Textpattern. Bleeding-edge code available on GitHub.
Txp Builders – finely-crafted code, design and Txp
Offline
Re: Fatal error
Bloke wrote #329865:
I’ve seen this on other tables where stuff just doesn’t appear in the admin side because the database can’t resolve the collation conflicts. That second error is a byproduct of the first so it’ll go away when the collations are fixed.
[…]
Quite how this situation occurs, btw, is not something that’s apparent to me. It just does. If anybody knows why or how this happens (perhaps content itself is encoded in a particular collation and Txp doesn’t correct it, taking it verbatim?) then I’d love to find out what causes it.
Same here. It’s baffled me a few times, especially with oooold sites where hosting organisation has changed more than once. Some European hosters (and MediaTemple back in the day, inexplicably) set the MySQL collation to their (European) datacenter location, which causes snags when you move to another host that doesn’t necessarily support that collation.
Last edited by gaekwad (2021-04-16 09:35:08)
Offline
Re: Fatal error
Well, firstly a big thank you for helping me fix a thing which I didn’t know was broken ;-)
I have changed the tables collations and tables columns collations to utf8_general_ci
This has allowed me to see all the plugins installed again (hooray), although I’m not sure I could enter Mastermind on undertanding the differences between unicode characters types (I’m hoping this collation isn’t some terrible faux pas which will have you rolling your eyes in despair…)
I have then changed the line in Claire’s cbe_frontauth plugin as suggested
include_once(txpath.'/include/txp_admin.php');
And this unfortunately takes me back to my original error message
Fatal error: Uncaught Error: Call to undefined function txp_validate()
As an alternative, is there another better way to have a password protected area of the website, which will display one thing if a user is logged in and something else if they’re not?
Offline
Re: Fatal error
gavnosis wrote #329879:
I’m hoping this collation isn’t some terrible faux pas
Glad you got it sorted. Collations are a law unto themselves so you’re not alone being a little in the dark. I’m sure somebody out there understands them, but that person ain’t me!
this unfortunately takes me back to my original error message
Drat. I’ll have to look more closely at the code.
As an alternative, is there another better way to have a password protected area of the website, which will display one thing if a user is logged in and something else if they’re not?
If you don’t mind letting people log in via the back-end then how about <txp:if_logged_in>?
The smd plugin menagerie — for when you need one more gribble of power from Textpattern. Bleeding-edge code available on GitHub.
Txp Builders – finely-crafted code, design and Txp
Offline
Re: Fatal error
If you don’t mind letting people log in via the back-end then how about <txp:if_logged_in>?
And just do something funny with one of the (your!) plugins to restrict everything?
I just quite liked there being a nice box on the page which said login …and then was pleased with myself to show a sticky article if not logged in and the other articles in the section if they were
I almost needed a lie down after thinking up something so fiendishly clever (Like Pooh bear, with only a small brain)
Last edited by gavnosis (2021-04-16 16:49:57)
Offline
Re: Fatal error
gavnosis wrote #329882:
And just do something funny with one of the (your!) plugins to restrict everything?
Sure, or rah_privileges. If you want to be even cleverer, I’ve done this in the past:
Front-end
<a href="/textpattern">Login</a>
<txp:if_logged_in>
Show sticky content
</txp:if_logged_in>
Back-end
- Set all your semi-untrusted front-end editors to the same group (e.g. Staff Writer).
- Use rah_privileges to turn off everything of interest for StaffWriter. Just in case.
- Write a five-line plugin that detects if the user is a StaffWriter on a page with /textpattern in it. If so, redirect them to the front-end instead. Bonus points for redirecting them to the page they came from if you can somehow get the referer header from the page where they clicked Login.
:)
The smd plugin menagerie — for when you need one more gribble of power from Textpattern. Bleeding-edge code available on GitHub.
Txp Builders – finely-crafted code, design and Txp
Offline
Re: Fatal error
Thank you Stef,
I think you might have mixed me up with a super hero, and I was with you until stage 3 ;-)
Me? Write a plugin?? Well, I’ll dust off my ‘PHP Programming for Beginners’ book. What’s the worst that could happen?
Offline
Re: Fatal error
gavnosis wrote #329897:
I think you might have mixed me up with a super hero, and I was with you until stage 3 ;-)
Haha, well if you get stuck and would like a hand with it, just let me know. I have a bunch of tiny little helper plugins dotted around that do various things like this, so it should be a cinch to cobble those together into one to suit your requirements. Just let me know how far you get and which role you’ve chosen as your no access to the admin side group and how opinionated you want to be with redirecting (and where they should end up, etc).
The smd plugin menagerie — for when you need one more gribble of power from Textpattern. Bleeding-edge code available on GitHub.
Txp Builders – finely-crafted code, design and Txp
Offline