redbitcz / vyfakturuj-api-php

PHP knihovna pro Vyfakturuj API
https://www.vyfakturuj.cz/api/
MIT License
2 stars 1 forks source link

Vylepšení manutální instalace #10

Closed jakubboucek closed 6 years ago

jakubboucek commented 6 years ago

Čá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.

pavel-janicek commented 6 years ago

Pokus první:

  1. Stáhnul jsem si ZIP soubor, rozbalil
  2. Ve svém pluginu jsem smazal složku libs (kde byla jenom původní Vyfakturuj.api.class.php)
  3. Z rozbaleného zip file jsem zkopíroval složku libs do svého pluginu
  4. Do kořenového adresáře pluginu jsem nahrál soubor simple-autoload.php
  5. V konstruktoru svého pluginu nově zavolal require_once("simple-autoload.php");
  6. Při volání Vyfakturuj API změnil konstruktor na $vyfakturuj_api = new VyfakturujAPI($options['api_email'],$options['api_key']);
  7. Pak jsem zavolal
    $faktura_id = $_GET['id'];
    $ret = $vyfakturuj_api->getInvoice($faktura_id);

Výsledek:

Uncaught Error: Call to undefined method VyfakturujAPI::getInvoice() in /mywii.cz/public_html/wp-content/plugins/affilwp-simpleshop/affilwp-simpleshop.php:135

  | 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);

pavel-janicek commented 6 years ago

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)

  1. Smazal jsem složku libs ve svém pluginu
  2. Smazal jsem simple-autoload.php z kořenové složky svého pluginu
  3. rozbalený adresář jsem přejmenoval na vyfakturuj-api-php
  4. Celý adresář (se všemi soubory) jsem zkopíroval do svého pluginu
  5. V constructoru nově volám require_once("vyfakturuj-api-php/simple-autoload.php");
  6. Volání Vyfakturuj je beze změny: $vyfakturuj_api = new VyfakturujAPI($options['api_email'],$options['api_key']);
  7. Stejné volání jako minule:
    $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

jakubboucek commented 6 years ago

@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!)

pavel-janicek commented 6 years ago

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
  | }
pavel-janicek commented 6 years ago

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...

pavel-janicek commented 6 years ago

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í

jakubboucek commented 6 years ago

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.

pavel-janicek commented 6 years ago

Ok, pokus další ... drž si klobouk, používám composer ... teda, tak napůl:

  1. Smazal jsem složku vyfakturuj-api-php ze svého pluginu
  2. Spustil jsem composer require vyfakturuj/vyfakturuj-api-php
  3. Vytvořila se mi složka vendor
  4. Ověřil jsem si, že složka obsahuje třídu Vyfakturuj - ano, obsahuje
  5. Constructor nově volá: require __DIR__ . '/vendor/autoload.php';
  6. Volání vyfakturuj beze změny:
    $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 :(

jakubboucek commented 6 years ago

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.

jakubboucek commented 6 years ago

Přidal jsem do pokynů k instalaci varování před důsledky duplicitní instalace.