Browse Source

Fix when "agenda external id" exists but the event chamilo doesn't exist

See BT#13441
jmontoyaa 7 years ago
parent
commit
d58ec0c912
1 changed files with 67 additions and 23 deletions
  1. 67 23
      main/cron/import_csv.php

+ 67 - 23
main/cron/import_csv.php

@@ -1222,34 +1222,78 @@ class ImportCsv
                         $report['mail_not_sent_because_date']++;
                     }
                 }
+
                 $content = '';
                 if ($update && isset($item['item_id'])) {
-                    //the event already exists, just update
-                    $eventResult = $agenda->editEvent(
-                        $item['item_id'],
-                        $event['start'],
-                        $event['end'],
-                        false,
-                        $event['title'],
-                        $content,
-                        array('everyone'), // $usersToSend
-                        array(), //$attachmentArray = array(),
-                        [], //$attachmentCommentList
-                        $eventComment,
-                        $color,
-                        false,
-                        false,
-                        $this->defaultAdminId
-                    );
-
-                    if ($eventResult !== false) {
-                        $this->logger->addInfo(
-                            "Event updated #".$item['item_id']." External cal Id: (".$externalEventId.") $info"
+                    $eventInfo = $agenda->get_event($item['item_id']);
+                    if (empty($eventInfo)) {
+                        // Means that agenda external id exists but the event doesn't exist
+                        $this->logger->addInfo("external event id exists: $externalEventId");
+                        $this->logger->addInfo("but Chamilo event don't exists: ".$item['item_id']);
+
+                        $eventId = $agenda->addEvent(
+                            $event['start'],
+                            $event['end'],
+                            false,
+                            $event['title'],
+                            $content,
+                            array('everyone'), // $usersToSend
+                            false, //$addAsAnnouncement = false
+                            null, //  $parentEventId
+                            array(), //$attachmentArray = array(),
+                            [], //$attachmentCommentList
+                            $eventComment,
+                            $color
                         );
+
+                        if (!empty($eventId)) {
+                            $this->logger->addInfo("Chamilo event created: ".$eventId);
+                            $values = $extraFieldValue->get_values_by_handler_and_field_id(
+                                $item['item_id'],
+                                $extraFieldInfo['id']
+                            );
+
+                            foreach ($values as $extraFieldValueItem) {
+                                $params = [
+                                    'id' => $extraFieldValueItem['id'],
+                                    'item_id' => $eventId
+                                ];
+                                $extraFieldValue->update($params);
+                                $this->logger->addInfo(
+                                    'Updating calendar extra field  #'.$extraFieldValueItem['id'].' new item_id: '.$eventId.' old item_id: '.$item['item_id']
+                                );
+                            }
+                        } else {
+                            $this->logger->addInfo("Error while creating event external id: $externalEventId");
+                        }
                     } else {
-                        $this->logger->addInfo(
-                            "Error while updating event with external id: $externalEventId"
+                        // The event already exists, just update
+                        $eventResult = $agenda->editEvent(
+                            $item['item_id'],
+                            $event['start'],
+                            $event['end'],
+                            false,
+                            $event['title'],
+                            $content,
+                            array('everyone'), // $usersToSend
+                            array(), //$attachmentArray = array(),
+                            [], //$attachmentCommentList
+                            $eventComment,
+                            $color,
+                            false,
+                            false,
+                            $this->defaultAdminId
                         );
+
+                        if ($eventResult !== false) {
+                            $this->logger->addInfo(
+                                "Event updated #".$item['item_id']." External cal Id: (".$externalEventId.") $info"
+                            );
+                        } else {
+                            $this->logger->addInfo(
+                                "Error while updating event with external id: $externalEventId"
+                            );
+                        }
                     }
                 } else {
                     // New event. Create it.