Known Bugs (and fixes) with v1.5.4
This thread is an announcement area where any bugs detected for v1.5.4 will be summarized.
The first is that the docs in the /docs/ folder have been reported to still contain the v1.5.3 docs in some cases.
You can find the latest docs online at www.zen-cart.com/docs ... where you'll see the v1.5.4 documentation for easy access.
T_STATIC error using PHP 5.2.x
NOTE: This is ONLY necessary if you're using PHP 5.2.x (but you should upgrade your PHP instead!)
If your server is still using PHP version 5.2.x (which is VERY OLD and now officially obsolete since 2011) and you try to use ZC v1.5.4 you may encounter an error akin to the following when trying to access the Admin area:
Error:
PHP Parse error: syntax error, unexpected T_STATIC in /admin/includes/classes/class.admin.zcObserverLogEventListener.php on line 118
Fix:
1. The BEST fix is to upgrade your PHP version to 5.4 or 5.5.
If you're using a hosting company which uses cPanel to manage your sites, such as Hostgator or Bluehost or Hostmonster etc, you can change PHP versions by logging in to cPanel, choosing the "PHP Configuration" icon, and choosing a newer version of PHP from the dropdown menu there.
Consult your hosting company for any assistance you need in changing PHP versions.
2. In the meantime, as a TEMPORARY fix, on line 118 of /admin/includes/classes/class.admin.zcObserverLogEventListener, change:
Code:
$levels = static::$levels;
to:
Code:
$levels = self::$levels;
Remember: PHP 5.2.x is obsolete and officially no longer supported by anybody. You should be upgrading your server's PHP version ASAP.
PHP Fatal error: 1101:BLOB/TEXT column 'logmessage' can't have a default value
NOTE: This is ONLY necessary if you're getting this specific error, and have STRICT_ALL_TABLES enabled in MySQL.
Symptom:
1. When trying to go to admin this generic error appears: "WARNING: An Error occurred, please refresh the page and try again."
2. Upon inspecting the /logs/ folder, the details of the error are described as:
Quote:
PHP Fatal error: 1101:BLOB/TEXT column 'logmessage' can't have a default value
IMPORTANT: YOU SHOULD USE v1.5.5 instead of continuing to use the old unsupported v1.5.4
NOTES:
This only happens when MySQL 5.5 or 5.6 is configured with sql_mode=STRICT_ALL_TABLES
And THAT IS RARE, since this is not presently enabled by default for most distributions.
If you're encountering it, chances are it's on Windows: some Windows distributions might have this enabled, or your server administrator might have enabled it in the server's my.cnf config settings.
Solution:
Edit the file "/your_renamed_admin/includes/classes/class.admin.zcObserverLogWriterDatabase.php"
around line 87 change the following code:
from:
Code:
if (!$found_logmessage)
{
$sql = "ALTER TABLE " . TABLE_ADMIN_ACTIVITY_LOG . " ADD COLUMN logmessage mediumtext NOT NULL default ''";
$db->Execute($sql);
}
// add 'severity' field of type varchar(9)
to:
Code:
if (!$found_logmessage)
{
$sql = "ALTER TABLE " . TABLE_ADMIN_ACTIVITY_LOG . " ADD COLUMN logmessage mediumtext NOT NULL";
$db->Execute($sql);
}
// add 'severity' field of type varchar(9)
Credit to @lhungil -- http://www.zen-cart.com/showthread.php?215713-fatal-error-1101&p=1268453#post1268453
template_default jQuery loader does not validate at http://validator.w3.org
NOTE: THIS IS UNNECESSARY IF YOU'RE USING AN HTML5 TEMPLATE
Symptom:
Some changes introduced for smarter jQuery and Ajax support in v1.5.4 may throw warnings in the W3C validator if you're using an XHTML/HTML4 template.
Resolution:
a) If you ARE using an HTML5 template on your site: no changes necessary!
b) If you're not putting an HTML5 template onto your site and you need it to pass XHTML validation in the W3C validator, you can make the changes I posted here:
http://www.zen-cart.com/showthread.p...71#post1268671
blank screen during zc_install because of xcache error
NOTE: This is only relevant IF your PHP configuration includes XCACHE and has it enabled
You can determine xcache availability by reviewing phpinfo for your site.
Symptom:
- Blank screen during zc_install
- No details in /logs/zcInstall-xxxxxx.log files
Fix:
One small change to zc_install/index.php as shown in this post:
http://www.zen-cart.com/showthread.p...53#post1268753
If Customer-Approval-Authorization is set to 1-Must be Authorized to Browse
NOTE: THIS ONLY APPLIES IF YOU'VE ENABLED THIS SETTING:
In your Admin->Configuration->Customer Details you've set Customer Approval Status - Authorization Pending to 1 (1 = Must be Authorized to Browse)
Symptoms:
- Possible symptom: visiting the site (or clicking "home") while not already logged in as an approved customer, the login page appears multiple times in the browser if the Authorization Pending setting is not set to 0
- Possible symptom: if using PayPal IPN then IPNs may not be getting processed if the Authorization Pending setting is not set to 0
- Possible symptom: any other scripts using the built-in ajax handler are not processing if the Authorization Pending setting is not set to 0
Easiest Fix:
1. If you don't need that Customer Approval option, then TURN IT OFF (set it to 0).
Code Fix:
2. But if you need the feature, you will need to make the following edits to /includes/init_includes/init_customer_auth.php, by adding the additional code as highlighted here:
Around line 55 you'll find a "switch" loop:
Code:
switch (true) {
/**
* bypass redirects for these scripts, to processing regardless of store mode or cust auth mode
*/
case (preg_match('|_handler\.php$|', $_SERVER['SCRIPT_NAME'])):
case (preg_match('|ajax\.php$|', $_SERVER['SCRIPT_NAME'])):
break;
case ($down_for_maint_flag && DOWN_FOR_MAINTENANCE_TYPE == 'strict'):
Around line 111 is another "switch" loop:
Code:
switch (true) {
/**
* check store status before authorizations
*/
case (STORE_STATUS != 0):
break;
/**
* bypass redirects for these scripts, to processing regardless of store mode or cust auth mode
*/
case (preg_match('|_handler\.php$|', $_SERVER['SCRIPT_NAME'])):
case (preg_match('|ajax\.php$|', $_SERVER['SCRIPT_NAME'])):
break;
case (CUSTOMERS_APPROVAL_AUTHORIZATION == '1' and $_SESSION['customer_id'] == ''):
Credit to @lhungil for suggestions
Inserting new language doesn't copy english content as default
NOTE: THIS ONLY APPLIES IF YOU ARE ADDING ANOTHER LANGUAGE
Symptom:
When you use the Admin page for adding a new language, it should normally copy all your English product/category descriptions to the descriptions in the new language, as defaults. (so that the descriptions aren't blank if a shopper chooses the new language for viewing).
If it ends up blank, it could be due to this bug.
Fix:
Make the simple code change posted here: http://www.zen-cart.com/showthread.p...62#post1269562
Admin page blank after login in PHP 5.2.xx
NOTE: This is ONLY necessary if you're using PHP 5.2.x (but you should upgrade your PHP instead!)
If your server is still using PHP version 5.2.x (which is VERY OLD and now officially obsolete since 2011) and you try to use ZC v1.5.4 you may encounter an error akin to the following when trying to access the Admin area:
Symptom:
Admin page, after login, is blank, and if you View Source on the page, it stops after displaying the time and IP address and a <br> tag.
Fix:
1. The BEST fix is to upgrade your PHP version to 5.4 or 5.5.
If you're using a hosting company which uses cPanel to manage your sites, such as Hostgator or Bluehost or Hostmonster etc, you can change PHP versions by logging in to cPanel, choosing the "PHP Configuration" icon, and choosing a newer version of PHP from the dropdown menu there.
Consult your hosting company for any assistance you need in changing PHP versions.
2. In the meantime, as a TEMPORARY fix, on line 236 of /admin/includes/header.php, add the // as shown below:
Code:
// echo @gethostname(); //what server am I working on?
Remember: PHP 5.2.x is obsolete and officially no longer supported by anybody. You should be upgrading your server's PHP version ASAP.
DO IT NOW! Yes, it IS that important!!!!!
Whoops your session timed out. OR Timeout during last stage of checkout
Symptom:
On the last page of checkout customers may intermittently encounter the "Whoops your session timed out. Please log in." message (or some variation of it).
Fix:
/includes/functions/sessions.php
On 3 lines, add ,- into the pattern, as shown below:
Code:
Line #111 : if (preg_replace('/[a-zA-Z0-9,-]/', '', session_id()) != '')
Line #125 : if (preg_replace('/[a-zA-Z0-9,-]/', '', $tempSessid) != '')
Line #138 : if (preg_replace('/[a-zA-Z0-9,-]/', '', $tempName) == '') return session_name($name);
Affects Zen Cart v1.3.9, 1.5.0, 1.5.1, 1.5.2, 1.5.3, 1.5.4 on PHP 5.0-and-newer if your PHP configuration has session.hash_bits_per_character set to 6.
The fix is the same for all versions, although the line numbers may be different, and in 1.3.9 some may be missing (and if you're using 1.3.9 you SHOULD be upgrading ASAP).
Credit to gunnzo for debugging this on a Dreamhost server. Thanks!
Pre-select cheapest shipping -- may not always fire
Symptom:
Normally during checkout you want it to auto-select the cheapest shipping option for your customer.
But in some configurations this may not happen, and thus no radio-buttons are pre-selected.
This affects versions v1.5.3 and v1.5.4.
Cause:
There was a condition missed when rewriting that section of the code for PHP 5.4 compatibility.
Fix:
The solution is simple:
/includes/modules/pages/checkout_shipping/header_php.php, line 212:
Change this:
Code:
if ( !isset($_SESSION['shipping']) && (zen_count_shipping_modules() > 1) ) $_SESSION['shipping'] = $shipping_modules->cheapest();
to this:
Code:
if ((!isset($_SESSION['shipping']) || (!isset($_SESSION['shipping']['id']) || $_SESSION['shipping']['id'] == '') && zen_count_shipping_modules() >= 1)) $_SESSION['shipping'] = $shipping_modules->cheapest();