From 5c00886db6c1a8e17a2cf465c9e13d17718df760 Mon Sep 17 00:00:00 2001 From: Pontoporeia Date: Sat, 28 Mar 2026 19:13:52 +0100 Subject: [PATCH] fix fgetcsv deprecation and apply pending DB migrations --- TODO.md | 2 ++ public/admin/import.php | 10 +++++----- storage/posterg.db | Bin 208896 -> 225280 bytes 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/TODO.md b/TODO.md index 132cfd9..2f5f255 100644 --- a/TODO.md +++ b/TODO.md @@ -437,6 +437,8 @@ Goal: rename the tables and column to the canonical M2M pattern (`tags`, `thesis `Database::setThesisLanguages()`, `setThesisFormats()`, `setThesisTags()` following the delete-then-reinsert pattern of `setThesisJury()`; `formulaire.php` and `edit.php` updated. +- [x] Fix `fgetcsv()` deprecation warnings in `import.php` - added explicit `$escape = ''` parameter to all 5 calls +- [x] Run all pending DB migrations (001–006) on `storage/posterg.db` - `tags`/`thesis_tags` tables now exist - [ ] **`RateLimit` uses per-file JSON on disk** - reads, writes, and `glob()`s the filesystem on every public request. For a low-traffic art-school site this is fine, but it creates a write-on-every-hit pattern. Consider switching to APCu (if available) or SQLite (single INSERT) diff --git a/public/admin/import.php b/public/admin/import.php index 154d1cf..237ed8f 100644 --- a/public/admin/import.php +++ b/public/admin/import.php @@ -48,10 +48,10 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['csv_file'])) { } // Skip first two rows (empty and headers) - fgetcsv($handle); // Empty row - $headers = fgetcsv($handle); // Header row - fgetcsv($handle); // Description row - $headers = fgetcsv($handle); // Actual column names + fgetcsv($handle, 0, ',', '"', ''); // Empty row + $headers = fgetcsv($handle, 0, ',', '"', ''); // Header row + fgetcsv($handle, 0, ',', '"', ''); // Description row + $headers = fgetcsv($handle, 0, ',', '"', ''); // Actual column names // Map CSV columns $columnMap = [ @@ -99,7 +99,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['csv_file'])) { // Process each row $lineNumber = 5; // Start after headers - while (($row = fgetcsv($handle)) !== false) { + while (($row = fgetcsv($handle, 0, ',', '"', '')) !== false) { $lineNumber++; // Skip empty rows diff --git a/storage/posterg.db b/storage/posterg.db index a4fd6690cf89fda62c02296af2764a57356eedae..67d5c98f3f06cdd0a7329b359ac6e99bf365442c 100644 GIT binary patch delta 1416 zcmaJ=VQ3q56u)E@_)y)3xirhH(wcvUY9PHD%f^z1B&WmNaD(lq_40Hku_h zcUimP)@BtyI2_GD|A?YfhxUU=L)8O62!$c+gPKvA-tWEl|1WO37dM6FeZEeLqWXw+5o3r&E8%YFte(By*60)ql(;Q!he*2bv%Lt!^UpSlaJ@tE~e9zdPfqKqo zi%|}cDMyZb!+wW51+q~$3x432;!T{?)djDQ;!`>p6R23osVJ$ONuu~Tv8k~!G^~sa zO^qdyJXaS>lQ$zL~4cde8c~Vy`6NEgE-b} zggfbeqGXx+r&4}E&mF`YN9Z@X=lN>*+*}H&2<=-s^tZs2U_v?90Uz%fd1o) zof5L2CW_6KKSivan3tHi=JVbYZz9`%f$pWmr#&;ms{5|%Z?dU(TXl{nJ1h_$KX z=2lcKn^E(+j8M{yX_0*Tf{K**a0sO}^irvKDfJ)7Bx)Ic0@3bz|CeY7q*+XZk7dfK z=dELc$n!)=H4tW-nX8;WZD}^%Y-YZt8_fHFbRCV8J|o!-I!+w?VGH9wU5iXx5j{e@ zR4qJBVEkxed};!nc-~4<2RNxaNRC)GpHb(tnfa7HL*}HVObYX}$8E>HZn`P48!=Uz zr61xuYL!ASM>(mVkaCYFwG#HEc`e?B8m|?6gtt~Bn+YlXtR(y4#fQwMPIHlFx)@6+ zLrI0)v|;58vbxy~Ta?7WHO18LG`&aIQGCAy4IYyjb?|1t ze=ZmIdo!7vDkb$NZ`dRL|FMKD-HNf!T?|6 aBi~;9RU?ywAsm#L%f@OeGf_wG`{2I-RJjZQ delta 1018 zcmZ`%ZAep57{2el+dbQL+ufXcCv$qOKxOK_#1JvjF%8OZ{SgG4xm%76wQcGw(9P;k z7Pz3!kG`ZN{1M_ubRZ~@zVJto5EOwRL`8qZ`jfw+n{FdUT{ztHyzleA&pFR|<6GMJ zmS)y$sG=y!C9m{%C|T)(s%77NNuG+2QT#T)$*=QI_yzt3Kf}kC6F%N(P%&i?3Jgd? z5y=~!7?C2X)fwC95@_$kR@|z6OBt1)DBh@B(|*vr*W#RanmKMG2dlqwcU0TzMHQ=h z%Kk)e*kV%YgO8{tQKLhG#RAjy(f(5*DJV^h4~PAc^q+TkdzyMZVsBIPagUga;{Ma% zL}}1fOBdi!5mUq3cvf&*@Y)oZjOhkmM|!6x+k;?42IQes^e%-6x~zPG+7xb*I|BKz zJi7s8Hw?#so1Qcw!Qp^QW!P~R2u_ZH1^0zvp1d4|IMBLP+&T^;+|`LZBor3H%{DR? zgNI5|GYKuAko|m}Ogv{B&8*N<_2)PxP7W1*4Sy2 z0zQL8D(!R~)J;|)!EJ?vIWXjxVgY~58y%D)frvMKk@O}j?7#*WZ90?95-Auf8{eib+9^h z0wNVKuV_=+2{9VnbG16)7aL@N4JIbvp2_YfGsW_Y%B-MF=32Wu`Z~qt6Jk_GWXZyG G=KcmNR8V&S