PDA

View Full Version : 4.2.3 Usercp Illegal string warning


TheAdminMarket
07-04-2015, 05:21 AM
Hello,

Does anybody knows what causes the follow PHP Warnings in UserCP with 4.2.3? Till 4.2.2 everything was working fine.


PHP Warning: Illegal string offset 'pm_messagelist' in ..../includes/class_core.php(4730) : eval()'d code on line 146

PHP Warning: Illegal string offset 'pm_newpm' in ..../includes/class_core.php(4730) : eval()'d code on line 151

PHP Warning: Illegal string offset 'pm_trackpm' in ..../includes/class_core.php(4730) : eval()'d code on line 152

PHP Warning: Illegal string offset 'pm_editfolders' in ..../includes/class_core.php(4730) : eval()'d code on line 153

PHP Warning: Illegal string offset 'substhreads_editfolders' in ..../includes/class_core.php(4730) : eval()'d code on line 169

PHP Warning: Illegal string offset 'profile' in ..../includes/class_core.php(4730) : eval()'d code on line 180

PHP Warning: Illegal string offset 'profilepic' in ..../includes/class_core.php(4730) : eval()'d code on line 183

PHP Warning: Illegal string offset 'avatar' in ..../includes/class_core.php(4730) : eval()'d code on line 190

PHP Warning: Illegal string offset 'signature' in ..../includes/class_core.php(4730) : eval()'d code on line 197

PHP Warning: Illegal string offset 'privacy' in ..../includes/class_core.php(4730) : eval()'d code on line 204

PHP Warning: Illegal string offset 'password' in ..../includes/class_core.php(4730) : eval()'d code on line 216

PHP Warning: Illegal string offset 'options' in ..../includes/class_core.php(4730) : eval()'d code on line 217

PHP Warning: Illegal string offset 'ignorelist' in ..../includes/class_core.php(4730) : eval()'d code on line 232

PHP Warning: Illegal string offset 'buddylist' in ..../includes/class_core.php(4730) : eval()'d code on line 247

PHP Warning: Illegal string offset 'event_reminders' in ..../includes/class_core.php(4730) : eval()'d code on line 252

PHP Warning: Illegal string offset 'attachments' in ..../includes/class_core.php(4730) : eval()'d code on line 262

PHP Warning: Illegal string offset 'deleteditems' in ..../includes/class_core.php(4730) : eval()'d code on line 276

PHP Warning: Illegal string offset 'moderateditems' in ..../includes/class_core.php(4730) : eval()'d code on line 314

PHP Warning: Illegal string offset 'newitems' in ..../includes/class_core.php(4730) : eval()'d code on line 367


My file contains the follow code at the top:


// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);
// #################### DEFINE IMPORTANT CONSTANTS #######################
define('THIS_SCRIPT', 'mgallery_usercp');
define('CSRF_PROTECTION', true);
define('CONTENT_PAGE', false);

// ################### PRE-CACHE TEMPLATES AND DATA ######################
// get special phrase groups
$phrasegroups = array(
'mediagallery',
'user',
'postbit',
'posting'
);
// get special data templates from the datastore
$specialtemplates = array(
'smiliecache',
'bbcodecache',
'attachmentcache',
);
// pre-cache templates used by all actions
$globaltemplates = array(
'USERCP_SHELL',
'usercp_nav_folderbit',
'mediagallery_addedit_photo'
);
// pre-cache templates used by specific actions
$actiontemplates = array();
// Stylesheets
$includecss = array();
$includecss['member'] = 'member.css';
$includecss['userprofile'] = 'userprofile.css';
$includecss['container'] = 'container.css';
// ######################### REQUIRE BACK-END ############################
require_once('./global.php');
require_once('./includes/functions_editor.php');
require_once('./includes/functions_newpost.php');
require_once('./includes/functions_user.php');
require_once('./includes/class_bbcode.php');
require_once('./includes/class_dm.php');
require_once('./includes/class_dm_pm.php');
require_once('./includes/functions_bigthree.php');
require_once('./mediagallery/includes/functions.php');


Thank you

kh99
07-04-2015, 09:44 AM
It looks like that's in a template. It's using a string where an array is expected. I haven't seen anyone else mention that happening after upgrading to 4.2.3.

TheAdminMarket
07-04-2015, 12:38 PM
It looks like that's in a template. It's using a string where an array is expected. I haven't seen anyone else mention that happening after upgrading to 4.2.3.

The "funny" thing is that in my main site with 4.2.2 latest PL works fine. The exact same files in 4.2.3 shows these errors. The code works (eg the form is submitting and saved ok) but the screen is messed. Normal due to errors. I turn off all errors, warnings etc but still they appear on screen.

A final note. All mods were working fine before upgrading. And the errors are only in usercp pages. I did a test by moving the code of one such page to a non usercp page and it works fine.

kh99
07-04-2015, 12:49 PM
It looks like the problem is with the variable $navclass, in case that helps.

TheAdminMarket
07-04-2015, 01:25 PM
It looks like the problem is with the variable $navclass, in case that helps.

Thank you for your advice. I'll try it when my domain appears again in my new server. The code that I've for $navbar is:

// Construct Navbar
construct_usercp_nav('addeditphoto');
$navbits = construct_navbits(array(
'usercp.php' . $vbulletin->session->vars['sessionurl_q'] => $vbphrase['user_control_panel'],
'media_usercp.php' . $vbulletin->session->vars['sessionurl_q'] => $vbphrase['mediagallery_photo_rating'],
'' => $vbphrase['mediagallery_post_photo']
));
$navbar = render_navbar_template($navbits);

kh99
07-04-2015, 01:39 PM
Well, $navclass seems to be an array of CSS class names to be used for the different parts of the UserCP. It's set by calling the function construct_usercp_nav(), which is called before the USERCP template is used. But I don't see anything in the code you posted that has to do with that, and I don't know why 4.2.3 would make a difference.

TheAdminMarket
07-04-2015, 02:16 PM
Well, $navclass seems to be an array of CSS class names to be used for the different parts of the UserCP. It's set by calling the function construct_usercp_nav(), which is called before the USERCP template is used. But I don't see anything in the code you posted that has to do with that, and I don't know why 4.2.3 would make a difference.

The array of css is the variable: $includecss which as you can see in the example code below is registered in the page template. The code below works fine in 4.2.2 but shows warnings in 4.2.3


// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);
// #################### DEFINE IMPORTANT CONSTANTS #######################
define('THIS_SCRIPT', 'mgallery_usercp');
define('CSRF_PROTECTION', true);
define('CONTENT_PAGE', false);

// ################### PRE-CACHE TEMPLATES AND DATA ######################
// get special phrase groups
$phrasegroups = array(
'mediagallery',
'user',
'postbit',
'posting'
);
// get special data templates from the datastore
$specialtemplates = array(
'smiliecache',
'bbcodecache',
'attachmentcache',
);
// pre-cache templates used by all actions
$globaltemplates = array(
'USERCP_SHELL',
'usercp_nav_folderbit',
'mediagallery_addedit_photo'
);
// pre-cache templates used by specific actions
$actiontemplates = array();
// Stylesheets
$includecss = array();
$includecss['member'] = 'member.css';
$includecss['userprofile'] = 'userprofile.css';
$includecss['container'] = 'container.css';
// ######################### REQUIRE BACK-END ############################
require_once('./global.php');
require_once('./includes/functions_editor.php');
require_once('./includes/functions_newpost.php');
require_once('./includes/functions_user.php');
require_once('./includes/class_bbcode.php');
require_once('./includes/class_dm.php');
require_once('./includes/class_dm_pm.php');
require_once('./includes/functions_bigthree.php');
require_once('./mediagallery/includes/functions.php');
// Zero Shell Template
$shell_template = 0;
// ################################################## #####################
// ############################### Add/Edit ############################
// ################################################## #####################
if ($_REQUEST['do'] == 'addedit')
{
// Construct Navbar
construct_usercp_nav('addeditphoto');
$navbits = construct_navbits(array(
'usercp.php' . $vbulletin->session->vars['sessionurl_q'] => $vbphrase['user_control_panel'],
'media_usercp.php' . $vbulletin->session->vars['sessionurl_q'] => $vbphrase['mediagallery_photo_rating'],
'' => $vbphrase['mediagallery_post_photo']
));
$navbar = render_navbar_template($navbits);
// Prepare Template
$templater = vB_Template::create('mediagallery_addedit');
$templater->register('editorid', $editorid);
$templater->register('messagearea', $messagearea);
$templater->register('id', $photo[id]);
$templater->register('mediatype', $photo[mediatype]);
$templater->register('title', $photo[title]);
$templater->register('addtags', $addtags);
$templater->register('selectcategory', $selectcategory);
$templater->register('urlid', $urlid);
$templater->register('editmode', $editmode);
$HTML = $templater->render();
// Add UserCP Shell Template
$shell_template = 1;
}

// ################################################## #####################
// ########################### UserCP Shell Template ###################
// ################################################## #####################
if ($shell_template == 1)
{
$navclass = 'active';
$templater = vB_Template::create('USERCP_SHELL');
$templater->register_page_templates();
$templater->register('includecss', $includecss);
$templater->register('cpnav', $cpnav);
$templater->register('HTML', $HTML);
$templater->register('navbar', $navbar);
$templater->register('navclass', $navclass);
$templater->register('onload', $onload);
$templater->register('pagetitle', $pagetitle);
$templater->register('template_hook', $template_hook);
print_output($templater->render());
}

kh99
07-04-2015, 03:03 PM
$includecss is the array of css files to include. $navclass is an array of class names.

Anyway, you're calling construct_usercp_nav(), if do is 'addeditphoto', so that should be OK. Is that the entire script? If not, then look for a condition where $shell_template == 1 but you have not called construct_usercp_nav(). Otherwise, maybe a plugin is changing $navclass?

Could it be the reason you don't see those messages in 4.2.2 is because error messages are turned off?

TheAdminMarket
07-04-2015, 03:31 PM
Even if I can't test it right now seems that we're going closer to the bug:

Could it be the reason you don't see those messages in 4.2.2 is because error messages are turned off?
No, as I've tested without the Hide all that I had in config.php

If not, then look for a condition where $shell_template == 1 but you have not called construct_usercp_nav()

All are in place.

Anyway, you're calling construct_usercp_nav(), if do is 'addeditphoto', so that should be OK.
Here is the only difference. The do=addedit and not addeditphoto. But works with 4.2.2 as is.

kh99
07-04-2015, 03:36 PM
Here is the only difference. The do=addedit and not addeditphoto. But works with 4.2.2 as is.

That was my mistake, addedit is right (or at least as far as I know from looking at the code you posted). If it really is supposed to be 'addeditphoto' then I agree that it doesn't look like it would make any difference to this problem.

When you can test, you could put in code to print out the value of $navclass at different places, and I'm sure you'll be able to figure it out.

TheAdminMarket
07-04-2015, 03:50 PM
That was my mistake, addedit is right (or at least as far as I know from looking at the code you posted). If it really is supposed to be 'addeditphoto' then I agree that it doesn't look like it would make any difference to this problem.

When you can test, you could put in code to print out the value of $navclass at different places, and I'm sure you'll be able to figure it out.

I'll do it when my site will be visible again. Thank you very much for your kind help. Really appreciated.

--------------- Added 05 Jul 2015 at 10:35 ---------------

For those who maybe have the same problem, at least in my case, I found the solution. Don't know why but the assignement to $navclass must not exists.

Currently in my code, I had:

$navclass = 'active';
$templater->register('navclass', $navclass);
Having as refference the profile.php I found that there is no any value assignment to $navclass but only:

$templater->register('navclass', $navclass);
so I commented out the assignment 'active' and now it works fine.

Once again I want to thank @kh99 for the time that he spent trying to figure out the bug.

Hav