Aktualizace SuperQC 1.4.2 a SuperCart 2.0.7 pro provoz na PHP 8.0

poslední aktualizace: 1.2.2021 pro PHP 8.0

Podrobný postup, jak upravit zdrojové kódy aplikace SuperQC verze 1.4.2 a SuperCart 2.0.7 v PHP 8.0 již neuvádím. Aktualizace je náročnější a řeším ji vždy individuálně.
Nadále ovšem platí, že SuperQC 1.4.2 a SuperCart 2.0.7 jsou již zastaralé systémy, obsahují bezpečnostní chyby a nedoporučuji je už vůbec dále provozovat.
Nabízím technické zajištění migrace např. na systémy Upgates, Nody nebo LiteCart.


V případě, že si chcete tuto službu objednat, pište na adresu info@itprostor.cz
Podmínkou je poskytnutí FTP přístupu ke zdrojovým kódům vašeho eshopu.
Cena aktualizace pro PHP 8.0 je stanovena vždy individuálně. 
V případě, že nebylo zasahováno do zdrojového kódu eshopu, je cena 2000 Kč (platba předem, cena je konečná - neplátce DPH)

Při objednání služby obdržíte krom níže uvedených úprav navíc i několik oprav vážných bezpečnostních chyb, které jsou v systému již od jeho vzniku.
Z logických důvodů tyto chyby a jejich opravu zde zveřejnit nemohu.

Níže uvedený návod je určený pouze pro programátory s dostatečnou znalostí PHP.


SuperQC 1.4.2 SuperCart 2.0.7 Poznámky

vytvořit soubor "mysqli.php" ve složce "sqc/include/odb/driver" pro SuperQC 1.x (nebo "core/include/odb/driver" pro SuperCart 2.x)
soubor vytvořte zkopírováním souboru mysql.php, který tam najdete již vytvořený
obsah nového souboru mysqli.php upravte tak, že:
název třídy "Odb_Driver_Mysql" přepište na "Odb_Driver_Mysqli"
všechny mysql funkce nahraďte odpovídajícími funkcemi mysqli
pozor - mysqli funkce mají jiné pořadí parametrů (více viz. manuál PHP)

v "sqc/include/core.php" řádek 440 pro SuperQC 1.x nebo 453 pro SuperCart 2.x - přepsat 'mysql' na 'mysqli'
původně: $db_type = 'mysql';
nově: $db_type = 'mysqli';

nutné pro PHP 5.6 a výše

v "sqc/include/def.php" na řádku 115 nastavit 'odb':
původně: Core::$def['db_library'] = version_compare(PHP_VERSION, '5.3', '<') ? 'odb' : 'notorm';
nově: Core::$def['db_library'] = 'odb';

v SuperCart 2.0.7
již provedeno
nutné pro PHP 5.6 a výše
v "sqc/include/core.php" zakomentovat nebo odmazat řádek 395
původně: require_once(APPROOT.'vendor/notorm/NotORM.php');
odmazat nebo nově: //require_once(APPROOT.'vendor/notorm/NotORM.php');
v SuperCart 2.0.7
již provedeno
nutné pro PHP 5.6 a výše
aktualizace knihovny PHPMailer (https://github.com/Synchro/PHPMailer)
(tato úprava je nutná pro zprovození odesílání emailů v PHP 5.6)
  • stáhněte zdrojové soubory knihovy PHPMailer na výše uvedeném odkazu - tlačítko "Download ZIP" vpravo
  • archív ZIP rozbalte a do složky "sqc/vendor/phpmailer" zkopírujte celý jeho obsah, jde hlavně o tyto soubory:
    - class.phpmailer.php
    - class.pop3.php
    - class.smtp.php
    - PHPMailerAutoload.php
  • následně upravte soubor "sqc/include/helpers.php" na řádku 284 u SuperQC 1.x (nebo "core/include/helpers.php" na řádku 307 pro SuperCart 2.x):
    původně: require_once APPROOT.'vendor/phpmailer/class.phpmailer.php';
    nově: require_once APPROOT.'vendor/phpmailer/PHPMailerAutoload.php';
nutné pro PHP 5.6 a výše
úprava souboru "sqc/admin/controller/dataimport.php" na řádku 976 pro SuperQC 1.x (nebo "core/admin/controller/dataimport.php" na řádku 975 pro SuperCart 2.x)
původně: public function _updateProduct($product, $data, $orig_data)
nově: public function _updateProduct(&$product, &$data, $orig_data)

tato úprava není bezpodmínečně nutná
pouze pokud používáte importy
pro PHP 5.6 a výše

úprava souboru "sqc/include/zip.php" na řádku 114 pro SuperQC 1.x (nebo "core/include/zip.php" na řádku 113 pro SuperCart 2.x)
původně: if($this->driver->open($this->archive, ZipArchive::OVERWRITE)){
nově: if($this->driver->open($this->archive, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE)){
tato úprava už není bezpodmínečně nutná
pouze pokud využíváte zálohy aplikace v administraci
pro PHP 5.6 a výše
úprava souboru "sqc/include/odb/single.php" na řádku 12 pro SuperQC 1.x (nebo "core/include/odb/single.php" na řádku 11 pro SuperCart 2.x)
původně: public function update($data, $toString = false)
nově: public function update($data, $toString = false, $single_row = null)
pro PHP 5.6 a výše

SuperQC 1.x tento instalační soubor neobsahuje, takže úpravu není třeba implementovat v této verzi

úprava souboru "install.php" na řádku 402 pro SuperCart 2.x buď pouze zakomentovat příkaz "continue":
původně: continue;
nově: //continue;

nebo úplně odmazat/odstranit funkci "copyFile" počínaje řádkem 388 až 423

tato funkce řeší instalaci ze vzdáleného úložiště, které stejně není v provozu, takže odstranění této funkce ničemu nevadí

zprovoznění instalace
pouze pro SuperCart 2.x
pro PHP 7
aktualizace knihovny FPDF (http://www.fpdf.org) - potřebná pro generování PDF s fakturami
knihovnu stáhněte z výše uvedené webové stránky a soubory zkopírujte do složky "sqc/vendor/fpdf" pro SuperQC 1.x nebo "core/vendor/fpdf" pro SuperCart 2.x
pro PHP 7.0