1313use craft \db \Migration ;
1414use craft \db \Query ;
1515use craft \db \Table ;
16+ use craft \helpers \App ;
1617use craft \helpers \Json ;
1718use craft \helpers \MigrationHelper ;
1819use craft \migrations \BaseContentRefactorMigration ;
2122
2223use Exception ;
2324use ReflectionClass ;
25+ use DateTime ;
2426
2527use yii \db \Expression ;
2628
@@ -31,6 +33,9 @@ class m240921_000000_events3 extends Migration
3133
3234 public function safeUp (): bool
3335 {
36+ // Increase memory limit for this migration
37+ App::maxPowerCaptain ();
38+
3439 $ this ->update (Table::ELEMENTS , ['type ' => LegacyTicket::class], ['type ' => Ticket::class]);
3540 $ this ->update (Table::ELEMENTS , ['type ' => LegacyTicketType::class], ['type ' => TicketType::class]);
3641
@@ -174,7 +179,7 @@ public function safeUp(): bool
174179 }
175180
176181 // Move columns to legacy
177- $ this ->update ('{{%events_purchased_tickets}} ' , ['legacyTicketId ' => new Expression ('ticketId ' )]);
182+ $ this ->update ('{{%events_purchased_tickets}} ' , ['legacyTicketId ' => new Expression ('" ticketId" ' )]);
178183 $ this ->update ('{{%events_purchased_tickets}} ' , ['ticketId ' => null ]);
179184
180185 // Setup Indexes
@@ -264,7 +269,7 @@ public function safeUp(): bool
264269 $ purchasedTicketIds = (new Query ())
265270 ->select (['id ' ])
266271 ->from ('{{%events_purchased_tickets}} ' )
267- ->where (['legacyTicketId ' => $ ticketId ])
272+ ->where (['legacyTicketId ' => ( string ) $ ticketId ])
268273 ->column ();
269274
270275 if ($ purchasedTicketIds ) {
@@ -327,16 +332,36 @@ public function safeUp(): bool
327332 ->all ();
328333
329334 foreach ($ events as $ event ) {
335+ $ startDate = $ event ['startDate ' ] ?? null ;
336+ $ endDate = $ event ['endDate ' ] ?? null ;
337+
338+ // Fix invalid date combinations
339+ if (!$ startDate && !$ endDate ) {
340+ // Both null: set to 1/1/1970 12am-1am
341+ $ startDate = '1970-01-01 00:00:00 ' ;
342+ $ endDate = '1970-01-01 01:00:00 ' ;
343+ } else if (!$ startDate ) {
344+ // Start date null: set to end date - 1 hour
345+ $ endDateObj = new DateTime ($ endDate );
346+ $ endDateObj ->modify ('-1 hour ' );
347+ $ startDate = $ endDateObj ->format ('Y-m-d H:i:s ' );
348+ } else if (!$ endDate || strtotime ($ endDate ) < strtotime ($ startDate )) {
349+ // End date null or before start: set to start date + 1 hour
350+ $ startDateObj = new DateTime ($ startDate );
351+ $ startDateObj ->modify ('+1 hour ' );
352+ $ endDate = $ startDateObj ->format ('Y-m-d H:i:s ' );
353+ }
354+
330355 // Find or create (in case we run this again)
331356 $ session = Session::find ()
332357 ->eventId ($ event ['id ' ])
333- ->startDate ($ event [ ' startDate ' ] )
334- ->endDate ($ event [ ' endDate ' ] )
358+ ->startDate ($ startDate )
359+ ->endDate ($ endDate )
335360 ->one () ?? new Session ();
336361
337362 $ session ->setAttributes ([
338- 'startDate ' => $ event [ ' startDate ' ] ,
339- 'endDate ' => $ event [ ' endDate ' ] ,
363+ 'startDate ' => $ startDate ,
364+ 'endDate ' => $ endDate ,
340365 'allDay ' => (bool )$ event ['allDay ' ],
341366 ], false );
342367
@@ -447,7 +472,7 @@ public function safeUp(): bool
447472 'legacyTicketTypeId ' => $ legacyTicket ['typeId ' ],
448473 ], ['id ' => $ ticketType ->id ]);
449474
450- $ this ->update ('{{%events_purchased_tickets}} ' , ['ticketTypeId ' => $ ticketType ->id ], ['legacyTicketId ' => $ legacyTicket ['id ' ]]);
475+ $ this ->update ('{{%events_purchased_tickets}} ' , ['ticketTypeId ' => $ ticketType ->id ], ['legacyTicketId ' => ( string ) $ legacyTicket ['id ' ]]);
451476 }
452477
453478
@@ -469,13 +494,13 @@ public function safeUp(): bool
469494 }
470495
471496 $ legacyTicketId = (new Query ())
472- ->select (['legacyTicketId ' ])
497+ ->select (['" legacyTicketId" ' ])
473498 ->from ('{{%events_ticket_types}} ' )
474499 ->where (['id ' => $ ticketType ->id ])
475500 ->scalar ();
476501
477502 $ legacyTicketTypeId = (new Query ())
478- ->select (['typeId ' ])
503+ ->select (['" typeId" ' ])
479504 ->from ('{{%events_legacy_tickets}} ' )
480505 ->where (['id ' => $ legacyTicketId ])
481506 ->scalar ();
@@ -485,7 +510,7 @@ public function safeUp(): bool
485510 'legacyTicketTypeId ' => $ legacyTicketTypeId ,
486511 ], ['id ' => $ ticket ->id ]);
487512
488- $ this ->update ('{{%events_purchased_tickets}} ' , ['ticketId ' => $ ticket ->id ], ['legacyTicketId ' => $ legacyTicketId ]);
513+ $ this ->update ('{{%events_purchased_tickets}} ' , ['ticketId ' => $ ticket ->id ], ['legacyTicketId ' => ( string ) $ legacyTicketId ]);
489514 }
490515 }
491516
0 commit comments