chilek / lms

Lan Management System (LMS) public GIT repo
http://lms.org.pl
126 stars 136 forks source link

[documentview] podglad pdf - pusta strona #2330

Closed voytec69 closed 2 years ago

voytec69 commented 2 years ago

Po aktualizacji mam problem z podglądem dokumentów w pdf. Są one zdefiniowane typem własnym w definitions.php (pewna zaszłość). define('DOC_SKAN', -200); DOC_SKAN => trans('skan'),

W logach widzę, PHP Warning: Invalid argument supplied for foreach() in modules/documentview.php on line 76 PHP Warning: Invalid argument supplied for foreach() in modules/documentview.php on line 110

Wersja LMS: 28-git Wersja LMSDB: 2022110400 Wersja PostgreSQL: 13.8 Wersja PHP: 7.4.30

LMSGponZtePlugin Wersja oprogramowania: - Wersja bazy danych: 2022081100

LMSSmsCenterPlugin Wersja oprogramowania: - Wersja bazy danych: -

LMSWarehousePlugin Wersja oprogramowania: 2.6.14 Wersja bazy danych: 2022052000 Wersja LMS: 28-git Wersja LMSDB: 2022110400 Wersja PostgreSQL: 13.8 Wersja PHP: 7.4.30

LMSGponZtePlugin Wersja oprogramowania: - Wersja bazy danych: 2022081100

LMSSmsCenterPlugin Wersja oprogramowania: - Wersja bazy danych: -

LMSWarehousePlugin Wersja oprogramowania: 2.6.14 Wersja bazy danych: 2022052000

voytec69 commented 2 years ago

tak wygląda w bazie dokument którego nie mogę wyświetlić

SELECT * from documentattachments  WHERE docid = 317160 ORDER BY docid ASC, type DESC;
  id   | docid  |         filename         |   contenttype   |              md5sum              | type | cdate
-------+--------+--------------------------+-----------------+----------------------------------+------+-------
 29220 | 317160 | ssssss_DANUTA - u.pdf | application/pdf | 94197cc3186fb7b8b2f7ffd644ca7b8f |    0 |     0
voytec69 commented 2 years ago

Zapytania z procesu wyświetlania teg dokumentu wyglądają tak.

SELECT 1 FROM documents WHERE id = '317160';
 ?column?
----------
        1
(1 row)
SELECT d.id FROM documents d
                JOIN docrights r ON (r.doctype = d.type)
                WHERE d.id IN (317160)
                    AND d.type < 0
                    AND r.userid = '2'
                    AND (r.rights & 1) > 0;
   id
--------
 317160
(1 row)
SELECT filename, contenttype, md5sum
                    FROM documentattachments
                    WHERE docid IN ('317160') AND type = 1 ORDER BY docid ASC, type DESC;
 filename | contenttype | md5sum
----------+-------------+--------
(0 rows)
voytec69 commented 2 years ago

Commit 6527b4f8f550e00d647be8c35ddfa315862e91e1

Było https://github.com/chilek/lms/blob/578dbe342676fdb3bd92456fb9822f6a5a5b98df/modules/documentview.php#L52-L53

Jest https://github.com/chilek/lms/blob/6527b4f8f550e00d647be8c35ddfa315862e91e1/modules/documentview.php#L66-L69

Zmieniłem linie u siebie

https://github.com/chilek/lms/blob/6527b4f8f550e00d647be8c35ddfa315862e91e1/modules/documentview.php#L67

na

. ($attachments || !empty($attachmentid) ? '' : '')

I działa, ale to słabe rozwiązanie problemu :) i zapewne wygeneruje inne...

voytec69 commented 2 years ago

O ile dobrze rozumiem logikę documentadd.php to plik generowany w systemie ma https://github.com/chilek/lms/blob/fa49e3e1432ea2b733938d7efe6952418860e826/modules/documentadd.php#L235 a ten uploadowany ma https://github.com/chilek/lms/blob/fa49e3e1432ea2b733938d7efe6952418860e826/modules/documentadd.php#L252

jak to się ma do tego warunku type = 1 w documentview.php ?

chilek commented 2 years ago

attachmenttype = 1 (pole type w tabeli documentattachments) - to załącznik główny dokumentu i jest zwykle generowany na podstawie szablonu HTML.

chilek commented 2 years ago

Jest

https://github.com/chilek/lms/blob/6527b4f8f550e00d647be8c35ddfa315862e91e1/modules/documentview.php#L66-L69

Jeśli do ?m=documentview przekazano attachmentid, tzn. że chcemy obejrzeć konkretny plik z załącznikem dokumentu i wtedy potrzebny jest warunek AND id = ' . $attachmentid, a jednocześnie nie powinniśmy testować, czy załącznik jest głównym (niepotrzebny więc warunek AND type = 1).

Jeśli $attachments jest niepuste, tzn. że chcemy obejrzeć wszystkie załączniki w postaci sklejonego HTML lub PDF i dlatego też nie powinniśmy tworzyć warunku AND type = 1).

Typ własny dokumentu nie ma nic wspólnego z typem załącznika. Typ dokumentu to pole type w tabeli documents, a typ załącznika dokumentu to pole type w tabeli documentattachments.

Z ciekawości - co pokazuje Ci polecenie:

pdfinfo 'ssssss_DANUTA - u.pdf'

?

chilek commented 2 years ago

Jaki wynik zwraca zapytanie:

SELECT filename, contenttype, md5sum
                    FROM documentattachments
                    WHERE docid = 317160;

?

voytec69 commented 2 years ago

Wynik już wrzucałem wyżej: https://github.com/chilek/lms/issues/2330#issuecomment-1306994706

i tu proces z logow postgresa. Jak widac dla tego dokumentu testowal warunek and type = 1 w konsekwencji nie zwraca tego co trzeba. https://github.com/chilek/lms/issues/2330#issuecomment-1307411928

Ta logika którą wprowadziłeś, za pewne nie ogarnia (bo skąd), sposobu dodawania pdfów (zaszłość) przez bok. Odbywa się to poprzez Dokument->Nowy dokument.

attachmenttype = 1 (pole type w tabeli documentattachments) - to załącznik główny dokumentu i jest zwykle generowany na podstawie szablonu HTML.

No czyli tu pewnie jest pies pogrzebany, bo dokument nie powstał na bazie żadnego szablonu.

Typ dokumentu skan jest własny, dodany w definitions.php

Zrzut ekranu 2022-11-9 o 18 56 42

Nie napisałem precyzyjnie też, bo to dotyczy wszystkich dokumentów dodanych w ten sposób, ten jeden to przykład tylko. (do momentu wprowadzenia tego warunku, otwierały się wszystkie bez problemu).

voytec69 commented 2 years ago

Żeby była jasność, to te pdfy to fizyczne skany nie wiem, ulotki, oświadczenia, mapki ale też samej umowy wydrukowanej i podpisanej przez klienta.

voytec69 commented 2 years ago

odwzorowałem to na demo.lms.org.pl https://demo.lms.org.pl/?m=documentlist&c=10 dokument aaa_test

voytec69 commented 2 years ago

@chilek potrzebne ci dodatkowe info?

chilek commented 2 years ago

Proszę o testy po poprawce, którą przesłałem.

voytec69 commented 2 years ago

To samo. PHP Warning: Invalid argument supplied for foreach() in /modules/documentview.php on line 76

Problem jest raczej w zapytaniu które powinno coś zwrócić.

voytec69 commented 2 years ago

Poprawka, jednak jest ok, mialem jedno niezamknięte okno LMSa, które wprowadziło mnie w błąd.

voytec69 commented 2 years ago

Dzięki, zamykam.

voytec69 commented 2 years ago

Jednak jak klika się w wiersz to się nie otwiera dokument. testowane na demo.lms.org.pl

https://user-images.githubusercontent.com/31625283/202678247-0ad29290-71f0-4cae-9354-66403a705d65.mov

interduo commented 2 years ago

Może warto użyć w tym miejscu: https://github.com/interduo/lms/blob/master/js/lms-ui-fileview.js ?

Fajnie to działa dla plików PDF.

chilek commented 2 years ago

Naprawione.