OpenCart — UASK.PRO

Can this shop be upgraded? Check before you promise

The question is not which OpenCart version to upgrade to, but whether the shop can be upgraded at all. What to inspect first, and why a major branch change is a different job.

The question to answer first is not "which version do we upgrade to" but "can we upgrade at all". Changing the major branch of OpenCart is replacing the front end, not swapping an engine. Check this before any price or date is promised.

Why the branch matters

Branch Themes Extensions
1.5.x its own system not compatible with later branches
2.0 to 2.3 .tpl templates, own folder hierarchy OCMOD 2.x
3.x Twig instead of .tpl OCMOD 3.x, partly incompatible with 2.x
4.x different directory structure almost everything has to be rewritten

Going from 2.3 to 3.x breaks every theme template (.tpl becomes .twig). A theme without an official 3.x build means buying a new theme.

If the shop runs a commercial theme and paid extensions written for the current branch, a jump to the next major branch is a rewrite of the front end. That is a different job at a different price, and the client should hear it before work starts.

What to look at

-- what is actually installed (adjust the oc_ table prefix)
SELECT type, GROUP_CONCAT(code) FROM oc_extension GROUP BY type;
ls catalog/view/theme/          # is there anything besides default?
ls system/*.ocmod.xml vqmod/xml/   # modifications that patch core files

The answer to "can we" comes from these three lists: the theme, the paid extensions and the modifications that patch core files.

Live shop or showcase

The mode of the whole job depends on whether orders are still arriving.

SELECT MAX(date_added) FROM oc_order;

SELECT HOUR(date_added), COUNT(*) FROM oc_order
WHERE date_added > NOW() - INTERVAL 60 DAY
GROUP BY 1 ORDER BY 1;

The hourly histogram is the only sound basis for choosing a release window. "At night" is not evidence: some shops have night peaks.

For a live shop, a staging database goes stale while the work is going on. Before release, take a fresh dump of the production database and run the same migrations on it.

See also: PHP compatibility scan, MyISAM to InnoDB.