Closed jakubboucek closed 6 years ago
Pokus první:
simple-autoload.php
require_once("simple-autoload.php");
$vyfakturuj_api = new VyfakturujAPI($options['api_email'],$options['api_key']);
$faktura_id = $_GET['id'];
$ret = $vyfakturuj_api->getInvoice($faktura_id);
Výsledek:
| Stack trace: | #0 /mywii.cz/public_html/wp-includes/shortcodes.php(319): Affiliate_WP_Simpleshop->affilsimple_shortcode('', '', 'simpleshop_trac...') | #1 [internal function]: do_shortcode_tag(Array) | #2 /mywii.cz/public_html/wp-includes/shortcodes.php(197): preg_replace_callback('/\[(\[?)(simple...', 'do_shortcode_ta...', '<p>Luxusn\xC4\x9B v\xC3\xA1...') | #3 /mywii.cz/public_html/wp-includes/class-wp-hook.php(286): do_shortcode('<p>Luxusn\xC4\x9B v\xC3\xA1...') | #4 /mywii.cz/public_html/wp-includes/plugin.php(203): WP_Hook->apply_filters('<p>Luxusn\xC4\x9B v\xC3\xA1...', Array) | #5 /mywii.cz/public_html/wp-includes/post-template.php(240): apply_filters('the_content', 'Luxusn\xC4\x9B v\xC3\xA1m d...') | #6 /mywii.cz/public_html/wp-content/themes/twentyseventeen/template- in /var/www/html/mywii.cz/public_html/wp-content/plugins/affilwp-simpleshop/affilwp-simpleshop.php on line 135
Pro naprosté upřesnění, řádek 135 mého pluginu je toto:
$ret = $vyfakturuj_api->getInvoice($faktura_id);
Pokus druhý: (ano, jsem lemra co nechce používat composer, takže jsem noční můra každého vývojáře) (pokračujeme tam, kde jsem skončil pokusem 2)
simple-autoload.php
z kořenové složky svého pluginuvyfakturuj-api-php
require_once("vyfakturuj-api-php/simple-autoload.php");
$vyfakturuj_api = new VyfakturujAPI($options['api_email'],$options['api_key']);
$faktura_id = $_GET['id'];
$ret = $vyfakturuj_api->getInvoice($faktura_id);
Výsledek naprosto stejný, jako v pokusu jedna. Jdu se morálně přesvědčit na composer
@pavel-janicek Zrovna jsem ti chtěl napsat, abys obsah složky nerozebíral a použil ji tak, jak je.
Že nepoužíváš Composer, to nevadí, aplikace by na tom neměla být závislá (jen s tím ty máš víc práce).
Mohl bys prosím před ten řádek 138, (tedy před $vyfakturuj_api->getInvoice($faktura_id);
) dát:
var_dump($vyfakturuj_api);
(a bacha, bude tam tvůj hash do Vyfakturuj - ten anonymizuj!)
Ok, pokračujeme na základě pokusu 3, nově volám:
$vyfakturuj_api = new VyfakturujAPI($options['api_email'],$options['api_key']);
var_dump($vyfakturuj_api);
$faktura_id = $_GET['id'];
$ret = $vyfakturuj_api->getInvoice($faktura_id);
Výsledek:
object(VyfakturujAPI)#276 (3) {
--
| ["login":protected]=>
| string(13) "info@mywii.cz"
| ["apiHash":protected]=>
| string(40) "xxxxxxxxxxxxxx"
| ["lastInfo":protected]=>
| NULL
| }
Cha! Tuším, kde je chyba. Nezapomínej, že na stejném Wordpressu je nainstalovaný Simpleshop, který má v sobě taktéž třídu VyfakturujAPI, která doopravdy neobsahuje funkci getInvoice
. Jdu chvíli zkusit detaktivovat Simpleshop...
Ano, když deaktivuji plugin SimpleShop, tak mi vše v pořádku prochází. Simpleshop byl aktivovaný dříve, takže si první registroval třídu VyfakturujAPI a můj plugin utřel nos...
Edit: Vtipné je, že následná aktivace SimpleShop pluginu to zase rozbije, i když byl celou dobu můj plugin aktivní
AHA! A neříkal jsem to, že mít v systému dvě skryté verze jedné knihovny je cesta do pekel? Říkal! :-)
Jenže z toho není dost dobře rozumná cesta, leda by se na to použil, – wait a moment – Composer!, který tohle řeší. To bohužel dost dobře ve Wordpressu nejde.
Jenže s tímhle už ti nemůže naše knihovna nijak pomoci. Sám vidíš, že jsem tvůj domnělý problém opravil a chyba se projevila, jen mnohem zákeřnější :-(
(zákeřnost vidím v tom, že předtím jsi dostal jasnou chybu a veděl jsi, kde je problém, teď systém sice zdánlivě naběhl, ale vzápětí havaroval na něčem, co nedávalo smysl)
Není cesta, jak to vyřešit. Nápad s přejmenováním jedné knihovny není řešení, jen to problém zase posune na jiné místo.
Ok, pokus další ... drž si klobouk, používám composer ... teda, tak napůl:
composer require vyfakturuj/vyfakturuj-api-php
vendor
require __DIR__ . '/vendor/autoload.php';
$vyfakturuj_api = new VyfakturujAPI($options['api_email'],$options['api_key']);
var_dump($vyfakturuj_api);
$faktura_id = $_GET['id'];
$ret = $vyfakturuj_api->getInvoice($faktura_id);
Výsledek:
object(VyfakturujAPI)#276 (3) {
--
| ["login":protected]=>
| string(13) "info@mywii.cz"
| ["apiHash":protected]=>
| string(40) "xxxxxxxxxxxxxxxxx"
| ["lastInfo":protected]=>
| NULL
| }
... A stále stejný Fatal Error :(
Moc se omlouvám, špatně jsem se vyjádřil: Composer to řeší skvěle, ale plugin pro SimpleShop, který máš, to dělá ještě po staru a "natvrdo" :-( A je potřeba upravit i ten.
Dělám na tom, ale jeho oprava vyjde v příštím týdnu.
Přidal jsem do pokynů k instalaci varování před důsledky duplicitní instalace.
Částečně řeší #2
Vylepšeno:
Prosím @pavel-janicek, jestli by se mohl podívat, zkusil si tuto verzi stáhnout a zkusit si to podle toho návodu naistalovat.
Následně obdobně opravíme i WP plugin pro SimpleShop.