From ebf64ae8a9878924d47997562db83c4ec8e9adcc Mon Sep 17 00:00:00 2001 From: bernardhanna Date: Tue, 1 Jul 2025 12:51:14 +0100 Subject: [PATCH] Add example Excel file and importer update --- app/Imports/GenericEventsImport.php | 61 +++++++++++++++++----------- resources/excel/example.xlsx | Bin 18767 -> 12284 bytes 2 files changed, 37 insertions(+), 24 deletions(-) diff --git a/app/Imports/GenericEventsImport.php b/app/Imports/GenericEventsImport.php index 810ac3bbd..b667de49e 100644 --- a/app/Imports/GenericEventsImport.php +++ b/app/Imports/GenericEventsImport.php @@ -12,6 +12,7 @@ use Maatwebsite\Excel\Concerns\WithCustomValueBinder; use Maatwebsite\Excel\Concerns\WithHeadingRow; use PhpOffice\PhpSpreadsheet\Shared\Date; +use Illuminate\Support\Str; class GenericEventsImport extends BaseEventsImport implements ToModel, WithCustomValueBinder, WithHeadingRow { @@ -39,7 +40,7 @@ protected function parseDate($value): ?string } try { return Carbon::parse($value)->format('Y-m-d H:i:s'); - } catch (\Exception $e) { + } catch (\Exception) { Log::warning("Invalid date: {$value}"); return null; } @@ -51,7 +52,7 @@ protected function parseDate($value): ?string protected function parseBool($value): bool { $v = strtolower(trim((string) $value)); - return in_array($v, ['1', 'true', 'yes', 'y'], true); + return in_array($v, ['1','true','yes','y'], true); } /** @@ -61,7 +62,6 @@ public function model(array $row): ?Model { // 1) normalize numeric floats $row = $this->normalizeRow($row); - Log::info('Importing row:', $row); // 2) required fields @@ -86,15 +86,19 @@ public function model(array $row): ?Model $creatorId = User::where('email', trim($row['creator_id']))->value('id'); } elseif (!empty($row['contact_email']) && filter_var($row['contact_email'], FILTER_VALIDATE_EMAIL)) { [$local] = explode('@', trim($row['contact_email']), 2); - $creatorId = User::where('email', 'like', $local.'@%')->value('id'); + $creatorId = User::where('email', 'like', "{$local}@%" + )->value('id'); } - // leave null if not resolvable - // 4) base attributes + // 4) build attribute array + $picture = trim($row['image_path'] ?? ''); + if ($picture && !Str::startsWith($picture, ['http://','https://'])) { + $picture = 'https://codeweek-s3.s3.amazonaws.com' . $picture; + } $attrs = [ 'status' => 'APPROVED', 'title' => trim($row['activity_title']), - 'slug' => str_slug(trim($row['activity_title'])), + 'slug' => Str::slug(trim($row['activity_title'])), 'organizer' => trim($row['name_of_organisation']), 'description' => trim($row['description']), 'organizer_type' => trim($row['type_of_organisation']), @@ -104,8 +108,10 @@ public function model(array $row): ?Model 'user_email' => trim($row['contact_email'] ?? ''), 'creator_id' => $creatorId, 'country_iso' => strtoupper(trim($row['country'])), - 'picture' => trim($row['image_path'] ?? ''), - 'participants_count' => isset($row['participants_count']) ? (int) $row['participants_count'] : null, + 'picture' => $picture, + 'participants_count' => isset($row['participants_count']) + ? (int) $row['participants_count'] + : null, 'mass_added_for' => 'Excel', 'start_date' => $this->parseDate($row['start_date']), 'end_date' => $this->parseDate($row['end_date']), @@ -113,32 +119,29 @@ public function model(array $row): ?Model ? "{$row['latitude']},{$row['longitude']}" : '', 'longitude' => trim((string) ($row['longitude'] ?? '')), - 'latitude' => trim((string) ($row['latitude'] ?? '')), + 'latitude' => trim((string) ($row['latitude'] ?? '')), 'language' => isset($row['language']) ? strtolower(explode('_', trim($row['language']))[0]) : 'en', 'pub_date' => now(), 'created' => now(), 'updated' => now(), - // ensure boolean default for non-nullable 'recurring_event' => $this->parseBool($row['recurring_event'] ?? ''), ]; - // 5) optional counts + // 5) optional counts & booleans foreach (['males_count','females_count','other_count'] as $c) { if (isset($row[$c])) { $attrs[$c] = (int) $row[$c]; } } - - // 6) optional booleans foreach (['is_extracurricular_event','is_standard_school_curriculum','is_use_resource'] as $b) { if (isset($row[$b])) { $attrs[$b] = $this->parseBool($row[$b]); } } - // 7) multi‑choice arrays + // 6) multi-choice fields if (!empty($row['activity_format'])) { $attrs['activity_format'] = $this->validateMultiChoice( $row['activity_format'], @@ -164,29 +167,39 @@ public function model(array $row): ?Model ); } - // 8) contact_person fallback - if (Schema::hasColumn('events', 'contact_person') - && !empty($row['contact_email']) - ) { + // 7) contact_person fallback + if (Schema::hasColumn('events','contact_person') && !empty($row['contact_email'])) { $attrs['contact_person'] = trim($row['contact_email']); } - // 9) persist & pivot attaches + // 8) duplicate check: skip if an existing event has identical attributes + $dupQuery = Event::query(); + foreach ($attrs as $field => $value) { + // only check scalar/stringable + if (is_scalar($value) || is_null($value)) { + $dupQuery->where($field, $value); + } + } + if ($dupQuery->exists()) { + Log::info('Duplicate event detected, skipping import.', $attrs); + return null; + } + + // 9) persist & attach relations try { $event = new Event; - foreach ($attrs as $key => $value) { - $event->$key = $value; + foreach ($attrs as $k => $v) { + $event->$k = $v; } $event->save(); if (!empty($row['audience_comma_separated_ids'])) { $aud = array_filter( explode(',', $row['audience_comma_separated_ids']), - fn($i) => is_numeric($i) && $i > 0 && $i <= 100 + fn($i) => is_numeric($i) && $i>0 && $i<=100 ); $event->audiences()->attach(array_unique($aud)); } - if (!empty($row['theme_comma_separated_ids'])) { $themes = $this->validateThemes($row['theme_comma_separated_ids']); $event->themes()->attach($themes); diff --git a/resources/excel/example.xlsx b/resources/excel/example.xlsx index f495188c20ccfd5989b781ddd5bf49c87082dc3a..78271608cd14dc8a3f9b09a91eed2b2d15925434 100644 GIT binary patch delta 9364 zcmZ{K1yGyawsw#LMT(T*8r%Z}m*QUBU5i_B4KBg0xO<^cC{Wzp-J!TciSm#s{FGp#cQw>oDaJ5C!N{bP!mfEAQ9j z2&B49|B4rSrBuAgmQ;_NcgS|a*icvD;JzOGU=w4e=AM|E-bHDHq{{bN%j;l5yA(Zr zq!`iV_1Fydx5clhCLh)|?A*NkZRl6Fd#*0*+&Wqxz5VZozB?OhMWVL-*}3p_ZEG>0 zpbRv*cm?IZADUU3xShLr*RoF80DZlF9*^yO`#4owKDV(j@xEjEEpL9h*ZFYdglEU{ z*QbrZoC{Is^qA8j6a8<>jvs(?Kg~V7?jU`qpWek!L}FJ}?K`-6bQy1+=hLsSI}<)O z{oa^3xxTP!`pK8!)X}=?B4tB8_qa4#10eUf2PGyZwSr?=}GJAVRuA?#MBQpnq(6&|sV+U-{U#E+|zgv&3 zO)Ty95v(6l{%(5k{sO)0x!Hr-tp3^Dee>6lt?L5iNz}Xh?)${STpx7P2(=3`-|6$a zcg@jw}ME5L<2P+84oRZhup z4B(r>-bff<#jxanfhK;Tc|43uvt3de$Q&pmP0qaedMK>&Pzq$|7$vp*fRTh|0;R(< zJA09YX3Y^TrTa*lgy#GtPusixEn2Gi5w-Ab^CLqNn%5HuZ~LMv3a)Yn;a>cWlnZMs z-%FTA_fr|kF9iP0tA7KPGW)@FuhG!aH|H5}MDTKr4Ugc-f1g>L_I)N5UW+nLv>{`Z zR1H2y@=#B7#f_u8yK)(!$&wHV_uJx>6sWWMmkQov!~A~dxE0f(y!3U6OW#D)_eVnY z=)2Gd51XioJsI|hzJ>n#qU5SR)$LRHcWyc~-of9?#xb~;H350h({8tBoy4s|C_!Aob8kQ3FtF@DCSND_(_3QXh@UK;BXuX^?YP6 z$`4EA{sECoO70M*VwrM@%+`eXWQnL(TRPiB4Us$5m~rUTrB|)62;QPMsE_+a;F&%% zv6M^};fk@WCGzhlS!OY}oE*7H76Cz%&XT66S6C$Ke<;3DVa@_gP%vrN^FjJGn|}aF z?$Ck$;Ut~)p|w&R;TzVB2zOCZy|TQt@zYQcp4nYCSH#lVc11AxN{%MeF%6zPWu^Kp zjY1CrnO&};^oyG`+XuP2$FyBXCfPd$Qzq1()zc5_xHj(h-^gg{z1NZ?W(0 z+Lh6jLgseM4(!q5FL5MklZik{*5xGxb%lH$sTtc9FU;j$JnQ-sK?AY@CKwbyFsUnT zP9U5my7J@GIJ(#zy))3F3Pb9ym9awlDf+?Yb+I`o?Wz%Oy~w@PeE|LG(s%))CvJ@h!PF4<)l1XJ`cHtK&o5b2gp=1V`R1YOLH5{-;Q~c65?cq z;#Z-$TkDEps-bAOSX5GwL_m`7`{=}I8VK2-bgUM_KU!w!i?G-&q{+9FbIAvKc(PHN zm}ppWoZh3vu?cL}!8ZOP7+uBuaRL3NpVinB{!B)p*lLzwDj`9VeHG*_gl*6wUdF*H zf^CCj)S0G<-o5k*Zd+(5;e@pZYhglGk>j)_ix*}p63CVEg^13K57SE2l7zun({jGI zSDLA|do2~v=yL2HumGu5DPlYfIYbW?!6yT}mnKeD8g^y^WJ0bYa>0zH;YXQliMHkZ zXsJkxv+ucMrvv2b&m|7PF?*oxHGR_-R0YA;L!JY~!5|?MNT`07!XTo-GVmH=cSRI! z6p9%pO=SDvpo{)2ku+-$GYV1U;NIul7*l_InObOwTE0?-Xcl;Ri#;|>4ObbA)h)OB z@EL-K#Ts`R1R{E;SPUvQB`HYKMfE!YhcR+F07JuA<6s3La0_4MQZJ!|O}5C}8tHv7 z-r?8WXR~aY%rVqbwwB4)&Je8uFW<0lDe2f8#%~0U}A|tV=lO>8x*wsC8nYSh>!{)(k8njaN zl7U1OgO*I!m}%pskjfYOjD=-dd!XPo1D08=G6V|w%5DoH6MSzjKX^LH;JSW>1rJg6 zQ~8}L3|N%zs^w>7h;nf*dvk2{>*Hp@&50rr_N67^_l-qm=mGDlCFR0(a@C=3nP4&| z7d63jJO@TT8Qg+rm~P_UVl=fJN6usj3bn#%pp$>N5k)|h`6JE%)cm?5>@*8VjXu|% zHX((S&YR+E8D+gotpHXswY2K~IRV2DPh%#O%`TM_g1e|nPEB{fCCzOMlR^k(7yIo{ zE3>80B^QneFL?)__kHjJDpwP>B`fchq7S{~v%!hfB)X)TGBt6z?~sS6yn;@Z52`i0 z)slw6r|tbSXwb!B;4k%%r5;^rP#-f2+3utv^6o-^OSQ{Yef^l&{7%Mx+6dROR-}nK z*-+10%H@&ts%zpIs`#u&QPog>JglvZ=AV7^F7xYu3S0h!>gvdm^|hBWj+`*kEg#io z8HhoC1%)MHOcN0u(u@95_T*tlQgdSPX{++=E)q?s3xHBs)Ww;6NS2nS=!0|@ffA@m z_~YvOjNjx9BKK|GTj# z*NV?p9%=!U$E+ga$Bd=^HE<7!GDav84X+D8x2W?m>8XqXg`1H8)Lc{0vQfoi%fXl1 z0&9pt6=-HrDB_r}KXCQ=3$oc(gTl;!NKwI@E*UOn*N~_dM5%z^=8ty+=4+kFu2eHr zQLwvk8<#0139M!Aq3^^mBS!M{aJ#@*L2@~vP>mxA)d)h>P~_URI{159m{hOg%)HQ1 zFBLKDJ`fV;NT41o3Po4F*V*3aeYhF8J&qZu33yRH4Z8`4cOB`6-h*H(&b-e4$U_GV zv0_kw*(5@oS%W%BJycl%o-HQ217a45*@+R#m4$WlGZok-4wRj`XDd2f7_=lMYPir& z9IV-j=1=|Ft|YsBA3n3eo5)$X04hWqk!N;F9u6^V{0u=SmJHD*A=#&;ft(Z*uE}x` z2;E-Ezp|DJg)kQp7KxLL2#Z+=`$j((C7jk(Zw?YkpKhtUrK8d_jejt53+fi985xKR z)$%)udL*KR2a9r*2g(Ii!#v^*&pd6n#yi6nw2V5N>OOAO?TNBEo~5k{K&R zo~y)!k`hFJ+7k>r=-YHTmqoE};Ha4j#vC|a^#)gy~{AbH!l~d1MUJ6c# zVWBz?-ZT@8L(D=6dFs^>WTkH;ARhFtm~LseisED`$%9NqgxZ{2MA)V5Ipf9!UT(*h zS3CO~%;ntW*l@gdeuw3y`VL8mT+sosA+2|?huSrMO}|BRui1TSufQ5|BDBH>pRn$g zoVzU^9L<(usMLo-2Oh8RnNs=G84MaVO1P_hpI!Bd_Sp!m#EK~6WnnS%fB709C4B?; zHBO&lsijJ|q5?^I6x`Q3;KO_f1D+2jalOV&9n!RuE;1vO7 z14O}nDu7A_Gc4^L1I_-+q@WB2vGM;0q2s?1%t*Y&%64pxYNA4kpvHvHB@tzu;nsqz zw#V#^bmF5w%MWM8jDmw?fflthNoXK}LL^5a=5EFABakZ)aIy2SK48|>8Q~NUf_j;e zh^ZyDef9wicwam-VgtZn>u^GhFxApQet3Q5fV|-K1+zjN;EFS^lu)B=Z5DNRU9PSz zOesb)%0N-o3}bho5aSFSiiwG2cfbfL0=dJh00vU4ysV>t4t60t*s5eC8o2mX5Lg(DW)+953|JTz%(@2copos>j@7 zvSjU)o`3!q@3X0FCF5o}DR|gyo*NNvgL@V(&aODdKV3+_!sADfM+!YBlWjZ5){G7* znqGXzr9CS(&A)2gs=!WoVIkasO@FI z>`tAyGuO%_H3;598ga15*zn-r2QwDR1cFer_T&#*=wRk#0=rycw@Y^ERROu-(TXU2 z-4Q@BhN%=mXhkVoV{+|z>kZc@=m;9@sV_za#aXn6pd*Pv*;*=$(QY$P0`fU!vHgkm z5;3)(R25PyHq(w2uE${VXRl)m^ZQo?MUq+{T-d=|#^^`GkjvZt0h;KZ7}b;LPx~>m z%GSn7jY_B-%MLWALoUxFBAk@sT?NN_bdLVTrEyU>()i@d%0e|+hWl^5ij$jB|bo{J^6 z6O^6EC@s65kIl3b)S1ZmRCc`(OKdM_J(1B^cD)#zX)ow?p3&CiwiMrD@24$mcD~+d zaj`mSBy>>ozasSCy+*gFZPS1BvPcC-F{*)YV{_?*vQB_1mOFUx%rs(4U0NlO+z`qYD zQffGOp_wxZePE*S{BAGC7L$62hqB&RQlRH{+&C)QL|0SwTLrxH+glXN6VnjF*TU(J zt0@UjdnzhN=8fOm&f@%Sa@jKXG(IGK%CU7cs!yNTwVbTSY2;~j`=H=i(5*dIHNfp5 zSmq@$_ljB(#G6_j?b`erq>1%Y(1kDYEsepUAC!Eqw05ANDz`>{Z|+#>?mLNtPf_Nl zwdNiXPG1%aA&EtwJV119K5G|HzF<;+ITYBlM^w>*Cb2#LeADYatLK%Z%=2(cs zcnyuwf3!};X$;f-fJ6E!Yy&6PEe4P|Ma5W4&3K5D%7>PU6Jc@ls$Uejj*X@s zvQd-8(B&RyAf2n%`fWe3*;>m~z8bHMQH`2OC{63H84A+4o#*w-j?qbIGDoJHygXg{ zX#8AX@;8ILuO>*!XGt&5oWw8vSD83r;Ah&R`7e$(^093Lf|TF0Oe@?qL=I4aTDS;_Ld zbcnkMYZI92S51iIk35`xk19>D)U0$g+4~au4&>lqS$EUImGn7-Xi#wMZWro<~|oj0M-x?pCuaIz0?yHDj13uP`oV2ZUt$OF7Zz z3Y+nv8z~20)9<-=71lvJy6dhQeWCB}*=!?sin-S*Nz-B3`ypmV!we~yNnH9>W`E=| z+4KzcIm6sMY1p;pRPD7gtlM25l|Nx^OJ=t^ z#4F74YI-B^*A|DI{Bv#o(}*z!TH2T5ggR9iR6Q)$FJMKb*T|OJDlsb;J6>6k>64o_ zk;n(5M$pcmg#>)qt!!nY+RG?y8Ix91EbQ-YIlBV+@yVrpF?@q9JE)trfYAyCZ$X?+M{Nx zVZb2t*BOp!WX3fG6{Iq!3)AKV+MIDW%seW=Oj_?w-)wdoAhiZ`S$tre747NaT92Jg z@5QIarTH3=)if6m$aFz0GA-uEVv+{qT`=G|*x-#@Sityf#XWG+#B%gM(hv0EbyETZ zb4*HE3cq2dS%x6bytwMWWSZY%)g}Q9q%LYCNKhM5vDu1y>p4eRCRNEnBd&jZ8A9=> zpYlCJOXHQ5Nc5!r`?6eYaE7y#%^yRx>?uHIDMsSeLZlw8mB7P`O8Yj1P9hd(dEoYj zr|LQ4g8ZJ2XqR&pKB_Pa8t@jNWFeOFZBCqD;8Mo#PFYE~!8?@P^~WTJnNiYvI-eVD zf^hFWm5v}j_v2-zUJ-^&=yJ<0IXayizLKjSmTk-nYe0Ivx&Sd98LwkO35pnpMp-ag z|K5SiacH7@?borYWUn+k&lf+eL}5WR(KyoN+M8c{Hmc6zni@(C^^I_(^S%hli%*9! z6=m3@V*Kn8(zNdOW%kUeU)GlPS*-d^>cIzf-I$=vz#i^FcrQa)*I?oPT*TtF6*Ios1ejg+mnjHyM~b7S<9h;l8@Dd zqw`Pe1<9HX=9uHRim8j>&cl3&fG`IXTkkToCR6vkN2rAQ@yaLTRF241owe6-dt;~L ztJn|f5p@_DkNX?(Xye8Ek-cm5gDabVMN*s=d`ky|Uy%%Ih+veZBFAKTd@v3GD_2M?sUUUh8(yAP2R?q5w z4kdU2(pL4v@cix~462H`2gp6NW?Z%IDK-XP%X0HFWVD^hiL>qIF3>BUh8Y=nU4|HW z{{AJ{IH{05i&NHo2a3|wxu(e4m-gnbic?-y zy`gdHi8p0`gHj2m+b_fF$eWn;iD?-W#$3H$fCTLW=@AiR*u@d&UJ$JdgKlaCnLe8TILBV z|Mn*yO!d%VVu;*z*A}?QHtG^eE9wo-NErTjIoV$8Btfs+E_8dWrgvMoG`-^VXfn~+ zOCaV{o$wp2LIhka<1=bbBPsu+3gSELNXw^U&0bpInpqaSnJvnqo?rOuw0VEG+3r@z zoV1-3yH}17tazkCS#*&ld)6L->R|v?>`Va5a%swcuEXMN;(ahUstzZ=G(g8DhYnk( zp&b&3p#S8M3_DA!h!mVNJ&e?9eH2FyUs;-ZvS1LaoxM9a6VpJZfmHDv-7EUisq)!b zQ*potqJ`nG@*u_%#(s-zp@Ns$e{vn0IAU8j^!XGQP2JM9(o_P`gI}bFt2IKchIrA0 z#p>%2h^NAjw}sQ?N56n^hL65qXQ>)w)w+19{)*Wo{i-5$n;N4G*;=bB4|t{ZU|^u) zthPU?e!eeMa$|pY$l_#iw`p)wB!iMr)9d=p)w_){K*~>H1NgM@e^&4D{zF`^vKffs(&JM!_qh=@N8xxeneiZ5W7uMv` zUafts*Sa%^_5|UL^qmZdKyic~4O{JbPZ5`tvA8F+DcuH}A?$CWY}**{iQ`K`COOZp0b18~DG)u-v9@y#7kCdDj^)_k3V8YsteeT?fH7ED>-51lqqjqMQU zEEHQO)i|0)U|VWOt|&qf{OO*G73Clf)44$$>?6u6@BF?dclcF68M*v$D)#2PwKCGu z<$Fhph%tN=Y**uHjuJOXs2y|0ecsD=UK001x>pHxd*6u^DLx1YLM=$I+L}7vE*xGS z{L;$5?%<{zbPh+VHh}cwZ5GJ_XShIQlAqq`2|}bHakMiqLhDcP(|_j^}9$ z2pp_qjwWsgov%m52+StA!Szi-xP83*fol+iS!j7)ka_0a`tcAxhhu|EWZ1C^ z+6aZ;I<&pRZ7JoOy}cxq!|DAi&~ZcbEqdX>kh5bE`MMtTVedovD@*a~aDl07_n_Rg ze9=nPjc#LMg&oR2tk6oZ*3Y)J%k88AtYb-(4}O$J^56}S1Nqk`Wh8LIJFMm@YpOsy z66H_dq!9&D$zsZEVEQiXYM-xm+^Q3?gi3ePf!e zECtzt0ByHMP(Su96Hzg2(OUlra)B-R!DOmNU$B6MmkT!0O{@&#gpil z!y@&Kn~C$3_&3WO71Wj$so5b`c?5oT)i+i)m?0|8`6Zi2`kpHR@-F4Jt$(%jjGM~H zvq|%wYMcuPAR6+hwsnfun_l_9KNcJy<{9S|^%lN~-7FwXxc#m8IZiZdy!=$YwggSf)7Y!KVeJQ0^sW!hKB=Y9(LH1?r+>ki>&0y@lzLobEWw80jSstB8 z%%^q2Dh?t&S*^F>+N^yvU+y@cQuX=JZ)dp& z!8Wh@JtJmTA0*Wi9h28_^&O1ytib*JqCt9nmS$}kA$qzIJCTFE4 zvp7n$N0B_?j`{FS{ngI+E21x5_X8tlDhb1N)D`|Wno41PJh4_#P}!frv!Ij^Cm6Wr zJLP5wrT(vpX;)WTR-BgkvWUM%##)*_OCxA{U}|IkslRrUhLI@Jl+fbo-xScB=J4^d zbN^$i>6+KOuT|BPr86p+-BbP7t(uAaalO0@)(cyb#qws0aqk6!_5N;4hW9n`7q^Myzf{LfVy1*zlbC6Bb{Kg&-tQrH6Y+xqYc*Z&N-l4bd*o>l)h zVF3VW0RR3u#ZBqtpiA+W#eAN#z+}k~t6!&7$Ws5a?cXyP|KE23fP^W>vY>xn`ggim z|MAixT?&gF=`*gJ9N8Nlco}#*aCkYtw>NiowrBTtbWl}9K*R_9&kdn%{SU-F8Yggw z7P$2!{{hv)l)@-UmeM8n56uZVGQ?Bnlv6q4e;7DMHK_8y=SRfI0Kn`2*tW=$LMu;) JqQv&B{V$j7cH95} delta 16015 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 F{|ASt;kp0-