WP Trip Summary 0.3.2 – Marco Polo

Pentru versiunea 0.3.2 nu am planificat și nici nu am implementat nimic glorios, ci doar un braț de lucruri foarte utile și un mic experiment. Cel mai important este că am adăugat suport pentru încărcarea și procesarea fișierelor KML, pe lângă care, dincolo de a repara câteva mici probleme cu afișarea viewer-ului, sunt acum disponibile și:

o traducere-n limba germană (parțial furnizată de-un amabil utilizator de pe wordpress.org, parțial generată ajutându-mă Google Translate și domnul Gepetescu),
posibilitatea de-a filtra post-urile după tipul de tură, însoțită, desigur, de o coloană suplimentară pentru afișarea acestui tip;
oarecare completări ale manualelor în limba română (ro_RO) și engleză (en_US) (ideal, ar trebui să fie la zi, dar în practică probabil că sigur vor fi mereu în urmă).

De asemenea, am ridicat și versiunea minimă de PHP la 8.0, din două motive

– o parte din dependințele nou-apărute o necesită;
– nu am resurse pentru a asigura o plajă de compatibilitate foarte largă.

Modificări la listare

Modificări la listare

Suport pentru fișiere KML

Este o funcționalitate care ascunde o vadră de cod, bazată pe o librărie existentă, însă care acoperă incomplet până și esențialul specificațiilor KML și care nu mai e întreținută. Are, totuși o structură cu direcția în care-aș vrea să merg la un moment și cu celelalte procesoare (GPX și GeoJSON), deci am preluat-o ca bază pentru implementarea suportului de fișiere KML.

Până la urmă, deși am plecat la drum cu intenția unor modificări relativ mici, evenimentele au degenerat până-n punctul în care mă gândesc s-o extrag ca librărie de sine stătătoare. Câteva exemple importante și reprezentative luate la-ntâmplare:

– Recunoaște toate tipurile de geometrii definite de KML, inclusiv MultiGeometry;
– Am rearanjat structura de clase pentru a reflecta ierarhia de tipuri din standardul KML (ex. Folder și Document extind noua clasă Container, toate geometriile extind noua clasă Geometry etc.);
– Coordonatele geografice nu mai sunt citite-n forma lor brută (șir de caractere), ci procesate și puse la dispoziție folosind fie clasa Coordinate, fie Coordinates;
– Există o infrastructură minimă (dar suficientă pentru ceea ce-mi doream) de postprocesare – vezi clasa Processor.

Au rămas, desigur, elemente prevăzute de specificațiile KML încă neintegrate, majoritatea (dacă nu chiar exclusiv) meta-informații și extensii ale standardului. Altminteri, până acum a-nghițit fără să comenteze toate fișierele KML pe care le-am creat eu de-a lungul timpului ca parte a planificării propriilor ture și drumeții.

Jurnale de sistem

Acesta-i experimentul de care vorbeam, atâta doar că nu funcționalitatea-n sine, ci interfața aferentă. Ideea pe termen lung este, pe de o parte să fac modulul mai extensibil decât e acum (adică nu prea) și, pe de altă parte să elimin cât mai multe din actualele dependințe de interfață (CSS, JavaScript) într-una singură cu mențiunea că, evident, cel de-al doilea deziderat e musai să-l susțină pe primul.

Motivul e simplu: punctul care poate beneficia cel mai mult de extensibilitate este formularul de editare, ori acela are o interfață impudic de rigidă. În același timp, nu vedeam justificată o mutare atât de radicală ca a trece întreaga infrastructură pe ceva gen React (nici nu aveam chef de-așa ceva-n viața mea). Și, fiindcă era cea mai la-ndemână (adică cea mai familiară), am mers pe Bootstrap, versiunea 5 (5.3.2 momentan); în ciuda aparenței banalități, n-a fost lipsită de anumite probleme.

Jurnale de sistem

Jurnale de sistem

Prima și cea mai semnificativă fu izolarea claselor CSS ale Bootstrap doar la anumite elemente-n pagină, de-așa natură-ncât să nu interacționeze cu cele ale WordPress. Plecând de-aici, o soluție valabilă pentru Bootstrap 3 și Bootstrap 4, am produs ceva similar cu intervenții manuale-n anumite puncte.

Pentru a nu interveni-n paginile existente am decis să adaug o interfață experimentală pentru gestionarea (vizualizarea, decărcarea, ștergerea) jurnalelor de sistem care, începând cu versiunea 0.3.2 – Marco Polo, sunt generate cu Monolog. Inițial nu aveam de gând să păstrez ecranul în varianta finală, însă mi-a plăcut foarte mult ce-a ieșit; ca atare, a rămas.

Există câteva modalități de-a configura jurnalizarea, fie prin constante, fie prin două filtre:

– Se rotesc logurile au ba? Se definește ABP01_LOGS_ROTATE cu valoarea true/false în wp-config.php sau se adaugă o funcție drept callback pentru filtrul abp01_get_logger_config_rotate_logs și se returnează valoarea dorită (la fel, true/false) (implicit, este activă);
– Cât fișiere jurnal se păstrează? Se definește ABP01_LOGS_MAX_LOG_FILES cu valoarea număr întreg strict pozitiv în wp-config.php sau se adaugă o funcție drept callback pentru filtrul abp01_get_logger_config_max_log_files și se returnează valoarea dorită (la fel, număr întreg strict pozitiv) (implicit, valoarea este 10).

Mai întâi este verificată existența constantelor, apoi sunt apelate filtrele, deci valorile constantelor (sau cele implicite dacă nu sunt definite acele constante) pot fi suprascrise prin cele două filtre.

Glonțul pe la ureche

La fel ca ultima dată, era s-o dau de gard, de data asta cu autoloader-ul, care păstra convenția de-a converti-n minusculă prima literă din denumirile directoarelor din calea către clasa-ncărcată, convenție nemenținută-n librăria de prelucrare a fișierelor KML.

Pe Vindoză nu fură probleme, pentru că sistemul de fișiere este complet ignorant la diferențele dintre minuscule și majuscule. Pe sisteme tip Unix… fu altă discuție și noroc c-avusei inspirația să-mi mănânc propriul rahat înainte de-al publica: l-am instalat aci pe blog, pe care-am reușit să-l pun în genunchi și-așa observai scăparea.

Acu, trebuie să recunoaștem: e foarte contraproductivă abordarea, oricum ai da-o. Din fericire,  găsii o modalitate de-a activa case sensitivity din Powershell pentru un director dat (fără a avea nevoie de două doctorate, doar stând pe scaun și tastând!). Din și mai mare fericire, aceste atribute se propagă mai departe-n terminalul instanței WSL din care-mi rulez testele (din păcate… nu pot folosi de-acolo setfattr pentru a preconfigura dintr-un script beș aceleași proprietăți – computer says no, ce poți face?).

fsutil.exe file setCaseSensitiveInfo <path> disable

Efectul e că acum o să descopăr direct la rularea testelor dacă-i vreun bai în acest sens. Ceea ce-nseamnă mai puține erori cretine. Ceea ce-i un lucru bun, recomand.

În final, ca de obicei, repet unde poate fi găsit modulul:

  • Pe directorul de plug-in-uri al WordPress: aici.
  • Pe GitHub, pentru cei care au și înclinații/curiozități tehnice: aici.