public function getSummary()
 {
     $txt = '';
     if ($this->eventHistoryModel->getIsNew()) {
         $txt .= "New! \n";
     }
     if ($this->eventHistoryModel->isAnyChangeFlagsUnknown()) {
         $txt .= $this->eventHistoryModel->getDescription();
     } else {
         if ($this->eventHistoryModel->getSummaryChanged()) {
             $txt .= "Summary Changed. \n";
         }
         if ($this->eventHistoryModel->getDescriptionChanged()) {
             $txt .= "Description Changed. \n";
         }
         if ($this->eventHistoryModel->getUrlChanged()) {
             $txt .= "URL Changed. \n";
         }
         if ($this->eventHistoryModel->getStartAtChanged()) {
             $txt .= "Start Changed. \n";
         }
         if ($this->eventHistoryModel->getEndAtChanged()) {
             $txt .= "End Changed. \n";
         }
         if ($this->eventHistoryModel->getCountryIdChanged()) {
             $txt .= "Country Changed.\n";
         }
         if ($this->eventHistoryModel->getTimezoneChanged()) {
             $txt .= "Timezone Changed. \n";
         }
         if ($this->eventHistoryModel->getAreaIdChanged()) {
             $txt .= "Area Changed. \n";
         }
         if ($this->eventHistoryModel->getVenueIdChanged()) {
             $txt .= "Venue Changed. \n";
         }
         if ($this->eventHistoryModel->getIsVirtualChanged()) {
             $txt .= "Is Virtual Changed. \n";
         }
         if ($this->eventHistoryModel->getIsPhysicalChanged()) {
             $txt .= "Is Physical Changed.\n";
         }
         if ($this->eventHistoryModel->getIsDeletedChanged()) {
             $txt .= 'Deleted Changed: ' . ($this->eventHistoryModel->getIsDeleted() ? "Deleted" : "Restored") . "\n";
         }
         if ($this->eventHistoryModel->getIsCancelledChanged()) {
             $txt .= 'cancelled Changed: ' . ($this->eventHistoryModel->getIsCancelled() ? "Cancelled" : "Restored") . "\n";
         }
     }
     return $txt;
 }
 public function applyChangeToFutureEvents()
 {
     $startDiff = $this->initalEvent->getStartAtInUTC()->diff($this->initialEventJustBeforeLastChange->getStartAtInUTC());
     $endDiff = $this->initalEvent->getEndAtInUTC()->diff($this->initialEventJustBeforeLastChange->getEndAtInUTC());
     foreach ($this->futureEvents as $futureEvent) {
         $this->futureEventsProposedChanges[$futureEvent->getSlug()] = new EventInRecurSetProposedChangesModel();
         if (($this->initalEventLastChange->getCountryIdChanged() || $this->initalEventLastChange->getVenueIdChanged() || $this->initalEventLastChange->getAreaIdChanged()) && ($this->initalEvent->getCountryId() != $futureEvent->getCountryId() || $this->initalEvent->getAreaId() != $futureEvent->getAreaId() || $this->initalEvent->getVenueId() != $futureEvent->getVenueId())) {
             $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setCountryAreaVenueIdChangePossible(true);
             if ($this->initialEventJustBeforeLastChange->getCountryId() != $futureEvent->getCountryId() || $this->initialEventJustBeforeLastChange->getAreaId() != $futureEvent->getAreaId() || $this->initialEventJustBeforeLastChange->getVenueId() != $futureEvent->getVenueId()) {
                 $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setCountryAreaVenueIdChangeSelected(true);
             }
         }
         if ($this->initalEventLastChange->getSummaryChanged()) {
             $summary = $this->initalEvent->getSummary();
             // change month title
             $currentMonthLong = $this->initalEvent->getStartAtInUTC()->format('F');
             $currentMonthShort = $this->initalEvent->getStartAtInUTC()->format('M');
             if (stripos($summary, $currentMonthLong) !== false) {
                 $summary = str_ireplace($currentMonthLong, $futureEvent->getStartAtInUTC()->format('F'), $summary);
             } else {
                 if (stripos($summary, $currentMonthShort) !== false) {
                     $summary = str_ireplace($currentMonthShort, $futureEvent->getStartAtInUTC()->format('M'), $summary);
                 }
             }
             if ($summary != $futureEvent->getSummary()) {
                 $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setSummary($summary);
                 $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setSummaryChangePossible(true);
                 $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setSummaryChangeSelected(true);
             }
         }
         if ($this->initalEventLastChange->getDescriptionChanged() && $this->initalEvent->getDescription() != $futureEvent->getDescription()) {
             $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setDescriptionChangePossible(true);
             if ($this->initialEventJustBeforeLastChange->getDescription() == $futureEvent->getDescription()) {
                 $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setDescriptionChangeSelected(true);
             }
         }
         if ($this->initalEventLastChange->getUrlChanged() && $this->initalEvent->getUrl() != $futureEvent->getUrl()) {
             $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setUrlChangePossible(true);
             if ($this->initialEventJustBeforeLastChange->getUrl() == $futureEvent->getUrl()) {
                 $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setUrlChangeSelected(true);
             }
         }
         if ($this->initalEventLastChange->getTicketUrlChanged() && $this->initalEvent->getTicketUrl() != $futureEvent->getTicketUrl()) {
             $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setTicketUrlChangePossible(true);
             if ($this->initialEventJustBeforeLastChange->getTicketUrl() == $futureEvent->getTicketUrl()) {
                 $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setTicketUrlChangeSelected(true);
             }
         }
         if ($this->initalEventLastChange->getTimezoneChanged() && $this->initalEvent->getTimezone() != $futureEvent->getTimezone()) {
             $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setTimezoneChangePossible(true);
             if ($this->initialEventJustBeforeLastChange->getTimezone() == $futureEvent->getTimezone()) {
                 $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setTimezoneChangeSelected(true);
             }
         }
         if ($this->initalEventLastChange->getIsPhysicalChanged() && $this->initalEvent->getIsPhysical() != $futureEvent->getIsPhysical()) {
             $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setIsPhysicalChangePossible(true);
             if ($this->initialEventJustBeforeLastChange->getIsPhysical() == $futureEvent->getIsPhysical()) {
                 $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setIsPhysicalChangeSelected(true);
             }
         }
         if ($this->initalEventLastChange->getIsVirtualChanged() && $this->initalEvent->getIsVirtual() != $futureEvent->getIsVirtual()) {
             $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setIsVirtualChangePossible(true);
             if ($this->initialEventJustBeforeLastChange->getIsVirtual() == $futureEvent->getIsVirtual()) {
                 $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setIsVirtualChangeSelected(true);
             }
         }
         if ($this->initalEventLastChange->getIsCancelledChanged() && $this->initalEvent->getIsCancelled() != $futureEvent->getIsCancelled()) {
             $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setIsCancelledChangePossible(true);
             if ($this->initialEventJustBeforeLastChange->getIsCancelled() == $futureEvent->getIsCancelled()) {
                 $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setIsCancelledChangeSelected(true);
             }
         }
         if ($startDiff->y != 0 || $startDiff->m != 0 || $startDiff->d != 0 || $startDiff->h != 0 || $startDiff->i != 0 || $startDiff->s != 0 || ($endDiff->y != 0 || $endDiff->m != 0 || $endDiff->d != 0 || $endDiff->h != 0 || $endDiff->i != 0 || $endDiff->s != 0)) {
             $start = clone $futureEvent->getStartAtInUTC();
             $start->sub($startDiff);
             $end = clone $futureEvent->getEndAtInUTC();
             $end->sub($endDiff);
             $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setStartEndAtChangePossible(true);
             $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setStartEndAtChangeSelected(true);
             $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setStartAt($start);
             $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setEndAt($end);
         }
         foreach ($this->customFields as $customField) {
             if ($this->initalEventLastChange->hasCustomField($customField) && $this->initalEvent->getCustomField($customField) != $futureEvent->getCustomField($customField)) {
                 $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setCustomFieldChangePossible($customField, true);
                 if ($this->initialEventJustBeforeLastChange->getCustomField($customField) == $futureEvent->getCustomField($customField)) {
                     $this->futureEventsProposedChanges[$futureEvent->getSlug()]->setCustomFieldChangeSelected($customField, true);
                 }
             }
         }
     }
 }
 function testSetChangedFlagsFromLastCancel()
 {
     $lastHistory = new EventHistoryModel();
     $lastHistory->setFromDataBaseRow(array('event_id' => 1, 'summary' => 'New Event', 'description' => '', 'user_account_id' => 1, 'created_at' => '2014-02-01 10:00:00', 'start_at' => '2014-02-03 10:00:00', 'end_at' => '2014-02-03 15:00:00', 'is_deleted' => 0, 'is_cancelled' => 0, 'country_id' => '', 'timezone' => '', 'venue_id' => 45, 'url' => '', 'ticket_url' => '', 'is_virtual' => 0, 'is_physical' => 0, 'area_id' => '', 'summary_changed' => 0, 'description_changed' => 0, 'start_at_changed' => 0, 'end_at_changed' => 0, 'is_deleted_changed' => 0, 'country_id_changed' => 0, 'timezone_changed' => 0, 'venue_id_changed' => 0, 'url_changed' => 0, 'is_virtual_changed' => 0, 'is_physical_changed' => 0, 'area_id_changed' => 0, 'custom_fields' => null, 'custom_fields_changed' => null));
     $eventHistory = new EventHistoryModel();
     $eventHistory->setFromDataBaseRow(array('event_id' => 1, 'summary' => 'New Event', 'description' => '', 'user_account_id' => 1, 'created_at' => '2014-02-01 10:00:00', 'start_at' => '2014-02-03 10:00:00', 'end_at' => '2014-02-03 15:00:00', 'is_deleted' => 0, 'is_cancelled' => 1, 'country_id' => '', 'timezone' => '', 'venue_id' => 45, 'url' => '', 'ticket_url' => '', 'is_virtual' => 0, 'is_physical' => 0, 'area_id' => '', 'summary_changed' => 0, 'description_changed' => 0, 'start_at_changed' => 0, 'end_at_changed' => 0, 'is_deleted_changed' => 0, 'country_id_changed' => 0, 'timezone_changed' => 0, 'venue_id_changed' => 0, 'url_changed' => 0, 'is_virtual_changed' => 0, 'is_physical_changed' => 0, 'area_id_changed' => 0, 'custom_fields' => null, 'custom_fields_changed' => null));
     $eventHistory->setChangedFlagsFromLast($lastHistory);
     $this->assertEquals(false, $eventHistory->getSummaryChanged());
     $this->assertEquals(false, $eventHistory->getDescriptionChanged());
     $this->assertEquals(false, $eventHistory->getStartAtChanged());
     $this->assertEquals(false, $eventHistory->getEndAtChanged());
     $this->assertEquals(false, $eventHistory->getIsDeletedChanged());
     $this->assertEquals(true, $eventHistory->getIsCancelledChanged());
     $this->assertEquals(false, $eventHistory->getCountryIdChanged());
     $this->assertEquals(false, $eventHistory->getTimezoneChanged());
     $this->assertEquals(false, $eventHistory->getVenueIdChanged());
     $this->assertEquals(false, $eventHistory->getUrlChanged());
     $this->assertEquals(false, $eventHistory->getTicketUrlChanged());
     $this->assertEquals(false, $eventHistory->getIsVirtualChanged());
     $this->assertEquals(false, $eventHistory->getIsPhysicalChanged());
     $this->assertEquals(false, $eventHistory->getAreaIdChanged());
     $this->assertEquals(false, $eventHistory->getIsNew());
 }
 public function ensureChangedFlagsAreSet(EventHistoryModel $eventhistory)
 {
     global $DB;
     // do we already have them?
     if (!$eventhistory->isAnyChangeFlagsUnknown()) {
         return;
     }
     // load last.
     $stat = $DB->prepare("SELECT * FROM event_history WHERE event_id = :id AND created_at < :at " . "ORDER BY created_at DESC");
     $stat->execute(array('id' => $eventhistory->getId(), 'at' => $eventhistory->getCreatedAt()->format("Y-m-d H:i:s")));
     if ($stat->rowCount() == 0) {
         $eventhistory->setChangedFlagsFromNothing();
     } else {
         while ($eventhistory->isAnyChangeFlagsUnknown() && ($lastHistoryData = $stat->fetch())) {
             $lastHistory = new EventHistoryModel();
             $lastHistory->setFromDataBaseRow($lastHistoryData);
             $eventhistory->setChangedFlagsFromLast($lastHistory);
         }
     }
     // Save back to DB
     $sqlFields = array();
     $sqlParams = array('id' => $eventhistory->getId(), 'created_at' => $eventhistory->getCreatedAt()->format("Y-m-d H:i:s"), 'is_new' => $eventhistory->getIsNew() ? 1 : 0);
     if ($eventhistory->getSummaryChangedKnown()) {
         $sqlFields[] = " summary_changed = :summary_changed ";
         $sqlParams['summary_changed'] = $eventhistory->getSummaryChanged() ? 1 : -1;
     }
     if ($eventhistory->getDescriptionChangedKnown()) {
         $sqlFields[] = " description_changed = :description_changed ";
         $sqlParams['description_changed'] = $eventhistory->getDescriptionChanged() ? 1 : -1;
     }
     if ($eventhistory->getStartAtChangedKnown()) {
         $sqlFields[] = " start_at_changed = :start_at_changed ";
         $sqlParams['start_at_changed'] = $eventhistory->getStartAtChanged() ? 1 : -1;
     }
     if ($eventhistory->getEndAtChangedKnown()) {
         $sqlFields[] = " end_at_changed = :end_at_changed ";
         $sqlParams['end_at_changed'] = $eventhistory->getEndAtChanged() ? 1 : -1;
     }
     if ($eventhistory->getVenueIdChangedKnown()) {
         $sqlFields[] = " venue_id_changed = :venue_id_changed ";
         $sqlParams['venue_id_changed'] = $eventhistory->getVenueIdChanged() ? 1 : -1;
     }
     if ($eventhistory->getAreaIdChangedKnown()) {
         $sqlFields[] = " area_id_changed = :area_id_changed ";
         $sqlParams['area_id_changed'] = $eventhistory->getAreaIdChanged() ? 1 : -1;
     }
     if ($eventhistory->getCountryIdChangedKnown()) {
         $sqlFields[] = " country_id_changed = :country_id_changed ";
         $sqlParams['country_id_changed'] = $eventhistory->getCountryIdChanged() ? 1 : -1;
     }
     if ($eventhistory->getTimezoneChangedKnown()) {
         $sqlFields[] = " timezone_changed = :timezone_changed ";
         $sqlParams['timezone_changed'] = $eventhistory->getTimezoneChanged() ? 1 : -1;
     }
     if ($eventhistory->getUrlChangedKnown()) {
         $sqlFields[] = " url_changed = :url_changed ";
         $sqlParams['url_changed'] = $eventhistory->getUrlChanged() ? 1 : -1;
     }
     if ($eventhistory->getTicketUrlChangedKnown()) {
         $sqlFields[] = " ticket_url_changed = :ticket_url_changed ";
         $sqlParams['ticket_url_changed'] = $eventhistory->getTicketUrlChanged() ? 1 : -1;
     }
     if ($eventhistory->getIsPhysicalChangedKnown()) {
         $sqlFields[] = " is_physical_changed = :is_physical_changed ";
         $sqlParams['is_physical_changed'] = $eventhistory->getIsPhysicalChanged() ? 1 : -1;
     }
     if ($eventhistory->getIsVirtualChangedKnown()) {
         $sqlFields[] = " is_virtual_changed = :is_virtual_changed ";
         $sqlParams['is_virtual_changed'] = $eventhistory->getIsVirtualChanged() ? 1 : -1;
     }
     if ($eventhistory->getIsCancelledChangedKnown()) {
         $sqlFields[] = " is_cancelled_changed = :is_cancelled_changed ";
         $sqlParams['is_cancelled_changed'] = $eventhistory->getIsCancelledChanged() ? 1 : -1;
     }
     if ($eventhistory->getIsDeletedChangedKnown()) {
         $sqlFields[] = " is_deleted_changed = :is_deleted_changed ";
         $sqlParams['is_deleted_changed'] = $eventhistory->getIsDeletedChanged() ? 1 : -1;
     }
     if ($eventhistory->getIsDuplicateOfIdChangedKnown()) {
         $sqlFields[] = " is_duplicate_of_id_changed = :is_duplicate_of_id_changed ";
         $sqlParams['is_duplicate_of_id_changed'] = $eventhistory->getIsDuplicateOfIdChanged() ? 1 : -1;
     }
     $sqlFields[] = " custom_fields_changed=:custom_fields_changed ";
     $sqlParams['custom_fields_changed'] = $eventhistory->getCustomFieldsChangedForDataBase();
     $statUpdate = $DB->prepare("UPDATE event_history SET " . " is_new = :is_new, " . implode(" , ", $sqlFields) . " WHERE event_id = :id AND created_at = :created_at");
     $statUpdate->execute($sqlParams);
 }