function icalendar_import() { @set_time_limit(0); if (isset($_GET['from_menu']) && $_GET['from_menu'] == 1) unset($_SESSION['history_back']); if (isset($_SESSION['history_back'])) { if ($_SESSION['history_back'] > 0) $_SESSION['history_back'] = $_SESSION['history_back'] - 1; if ($_SESSION['history_back'] == 0) unset($_SESSION['history_back']); ajx_current("back"); } else { $ok = false; $this->setTemplate('cal_import'); $filedata = array_var($_FILES, 'cal_file'); if (is_array($filedata)) { $filename = $filedata['tmp_name'].'vcal'; copy($filedata['tmp_name'], $filename); $events_data = CalFormatUtilities::decode_ical_file($filename); if (count($events_data)) { try { DB::beginWork(); foreach ($events_data as $ev_data) { $event = new ProjectEvent(); $event->setFromAttributes($ev_data); $event->save(); ApplicationLogs::createLog($event, ApplicationLogs::ACTION_ADD); $conditions = array('event_id' => $event->getId(), 'contact_id' => logged_user()->getId()); //insert only if not exists if (EventInvitations::findById($conditions) == null) { $invitation = new EventInvitation(); $invitation->setEventId($event->getId()); $invitation->setContactId(logged_user()->getId()); $invitation->setInvitationState(1); $invitation->save(); } //insert only if not exists if (ObjectSubscriptions::findBySubscriptions($event->getId()) == null) { $subscription = new ObjectSubscription(); $subscription->setObjectId($event->getId()); $subscription->setContactId(logged_user()->getId()); $subscription->save(); } $member_ids = array(); $context = active_context(); foreach ($context as $selection) { if ($selection instanceof Member) $member_ids[] = $selection->getId(); } $object_controller = new ObjectController(); $object_controller->add_to_members($event, $member_ids); } DB::commit(); $ok = true; flash_success(lang('success import events', count($events_data))); $_SESSION['history_back'] = 1; } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); } } else { flash_error(lang('no events to import')); } unset($filename); if (!$ok) ajx_current("empty"); } else if (array_var($_POST, 'atimportform', 0)) ajx_current("empty"); } }
function icalendar_import() { @set_time_limit(0); if (isset($_GET['from_menu']) && $_GET['from_menu'] == 1) { unset($_SESSION['history_back']); } if (isset($_SESSION['history_back'])) { if ($_SESSION['history_back'] > 0) { $_SESSION['history_back'] = $_SESSION['history_back'] - 1; } if ($_SESSION['history_back'] == 0) { unset($_SESSION['history_back']); } ajx_current("back"); } else { $ok = false; $this->setTemplate('cal_import'); $filedata = array_var($_FILES, 'cal_file'); if (is_array($filedata)) { $filename = $filedata['tmp_name'] . 'vcal'; copy($filedata['tmp_name'], $filename); $events_data = CalFormatUtilities::decode_ical_file($filename); if (count($events_data)) { try { DB::beginWork(); foreach ($events_data as $ev_data) { $event = new ProjectEvent(); $project = active_or_personal_project(); if ($ev_data['subject'] == '') { $ev_data['subject'] = lang('no subject'); } $event->setFromAttributes($ev_data); $event->save(); $event->addToWorkspace($project); $object_controller = new ObjectController(); $object_controller->add_subscribers($event); ApplicationLogs::createLog($event, null, ApplicationLogs::ACTION_ADD); $this->registerInvitations($ev_data, $event); if (isset($ev_data['confirmAttendance'])) { if ($event->getCreatedBy() instanceof User) { $this->change_invitation_state($ev_data['confirmAttendance'], $event->getId(), $event->getCreatedBy()->getId()); } } } DB::commit(); $ok = true; flash_success(lang('success import events', count($events_data))); $_SESSION['history_back'] = 1; } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); } } else { flash_error(lang('no events to import')); } unset($filename); if (!$ok) { ajx_current("empty"); } } else { if (array_var($_POST, 'atimportform', 0)) { ajx_current("empty"); } } } }
function getRepetitiveInstances($from_date, $to_date) { $instances = array(); if ($this->isRepetitive()) { $res = $this->forwardRepDate($from_date); $ref_date = $res['date']; $top_repeat_num = $this->getRepeatNum() - $res['count']; $last_repeat = $this->getRepeatEnd() instanceof DateTimeValue ? new DateTimeValue($this->getRepeatEnd()->getTimestamp()) : null; if ($this->getRepeatNum() > 0 && $top_repeat_num <= 0 || $last_repeat instanceof DateTimeValue && $last_repeat->getTimestamp() < $ref_date->getTimestamp()) { return array(); } $info = array(); foreach ($this->getColumns() as $col) { $info[$col] = $this->getColumnValue($col); } foreach ($this->getObject()->getColumns() as $col) { $info[$col] = $this->getObject()->getColumnValue($col); } $event = new ProjectEvent(); $event->setFromAttributes($info); $event->setStart(new DateTimeValue($this->getStart()->getTimestamp())); $event->setDuration(new DateTimeValue($this->getDuration()->getTimestamp())); $event->setId($this->getId()); $event->setNew(false); $event->setInvitations($this->getInvitations()); if (!$event->getRepeatH() > 0) { $instances[] = $event; } $num_repetitions = 0; while ($ref_date->getTimestamp() < $to_date->getTimestamp()) { if (!$event->getStart() instanceof DateTimeValue) { return $instances; } $diff = $ref_date->getTimestamp() - $event->getStart()->getTimestamp(); $event->setStart(new DateTimeValue($ref_date->getTimestamp())); if ($event->getDuration() instanceof DateTimeValue) { $event->getDuration()->advance($diff); } $info = array(); foreach ($event->getColumns() as $col) { $info[$col] = $event->getColumnValue($col); } foreach ($event->getObject()->getColumns() as $col) { $info[$col] = $event->getObject()->getColumnValue($col); } $new_event = new ProjectEvent(); $new_event->setFromAttributes($info); $new_event->setId($event->getId()); $new_event->setNew(false); $new_event->setInvitations($event->getInvitations()); $new_due_date = null; $new_st_date = null; if ($event->getStart() instanceof DateTimeValue) { $new_st_date = new DateTimeValue($event->getStart()->getTimestamp()); } if ($event->getDuration() instanceof DateTimeValue) { $new_due_date = new DateTimeValue($event->getDuration()->getTimestamp()); } if ($event->getRepeatD() > 0) { if ($new_st_date instanceof DateTimeValue) { $new_st_date = $new_st_date->add('d', $event->getRepeatD()); } if ($new_due_date instanceof DateTimeValue) { $new_due_date = $new_due_date->add('d', $event->getRepeatD()); } $ref_date->add('d', $event->getRepeatD()); } else { if ($event->getRepeatM() > 0) { if ($new_st_date instanceof DateTimeValue) { $new_st_date = $new_st_date->add('M', $event->getRepeatM()); } if ($new_due_date instanceof DateTimeValue) { $new_due_date = $new_due_date->add('M', $event->getRepeatM()); } $ref_date->add('M', $event->getRepeatM()); } else { if ($event->getRepeatY() > 0) { if ($new_st_date instanceof DateTimeValue) { $new_st_date = $new_st_date->add('y', $event->getRepeatY()); } if ($new_due_date instanceof DateTimeValue) { $new_due_date = $new_due_date->add('y', $event->getRepeatY()); } $ref_date->add('y', $event->getRepeatY()); } else { if ($event->getRepeatH() > 0) { $ordinal = 'first '; switch ($event->getRepeatWnum()) { case 1: $ordinal = "first "; break; case 2: $ordinal = "second "; break; case 3: $ordinal = "third "; break; case 4: $ordinal = "fourth "; break; } $days = array("0" => 'sunday ', "1" => 'monday ', "2" => 'tuesday ', "3" => 'wednesday ', "4" => 'thursday ', "5" => 'friday ', "6" => 'saturday '); $day_name = $days[$event->getRepeatDow() - 1]; if ($new_st_date instanceof DateTimeValue) { //set first day of the month $new_st_date->setDay(1); //date string $new_st_date_string = date("c", $new_st_date->getTimestamp()); //go to the fixed day $new_st_date_fixed = new DateTime(date("c", strtotime($ordinal . $day_name . " of " . $new_st_date_string))); $new_st_date = new DateTimeValue($new_st_date_fixed->getTimestamp()); } if ($new_due_date instanceof DateTimeValue) { //set first day of the month $new_due_date->setDay(1); //date string $new_due_date_string = date("c", $new_due_date->getTimestamp()); //go to the fixed day $new_due_date_fixed = new DateTime(date("c", strtotime($ordinal . $day_name . " of " . $new_due_date_string))); $new_due_date = new DateTimeValue($new_due_date_fixed->getTimestamp()); } $ref_date->add('M', $event->getRepeatMjump()); } } } } if ($new_st_date instanceof DateTimeValue) { $new_event->setStart($new_st_date); } if ($new_due_date instanceof DateTimeValue) { $new_event->setDuration($new_due_date); } $num_repetitions++; if ($top_repeat_num > 0 && $top_repeat_num == $num_repetitions) { break; } if ($last_repeat instanceof DateTimeValue && $last_repeat->getTimestamp() < $ref_date->getTimestamp()) { break; } $instances[] = $new_event; $event = $new_event; } } return $instances; }
function getRepetitiveInstances($from_date, $to_date) { $instances = array(); if ($this->isRepetitive()) { $res = $this->forwardRepDate($from_date); $ref_date = $res['date']; $top_repeat_num = $this->getRepeatNum() - $res['count']; $last_repeat = $this->getRepeatEnd() instanceof DateTimeValue ? new DateTimeValue($this->getRepeatEnd()->getTimestamp()) : null; if (($this->getRepeatNum() > 0 && $top_repeat_num <= 0) || ($last_repeat instanceof DateTimeValue && $last_repeat->getTimestamp() < $ref_date->getTimestamp())) { return array(); } $info = array(); foreach ($this->getColumns() as $col) $info[$col] = $this->getColumnValue($col); foreach ($this->getObject()->getColumns() as $col) $info[$col] = $this->getObject()->getColumnValue($col); $event = new ProjectEvent(); $event->setFromAttributes($info); $event->setStart(new DateTimeValue($this->getStart()->getTimestamp())); $event->setDuration(new DateTimeValue($this->getDuration()->getTimestamp())); $event->setId($this->getId()); $event->setNew(false); $event->setInvitations($this->getInvitations()); $instances[] = $event; $num_repetitions = 0; while ($ref_date->getTimestamp() < $to_date->getTimestamp()) { if (!($event->getStart() instanceof DateTimeValue)) return $instances; $diff = $ref_date->getTimestamp() - $event->getStart()->getTimestamp(); $event->setStart(new DateTimeValue($ref_date->getTimestamp())); if ($event->getDuration() instanceof DateTimeValue) { $event->getDuration()->advance($diff); } $info = array(); foreach ($event->getColumns() as $col) $info[$col] = $event->getColumnValue($col); foreach ($event->getObject()->getColumns() as $col) $info[$col] = $event->getObject()->getColumnValue($col); $new_event = new ProjectEvent(); $new_event->setFromAttributes($info); $new_event->setId($event->getId()); $new_event->setNew(false); $new_event->setInvitations($event->getInvitations()); $new_due_date = null; $new_st_date = null; if ($event->getStart() instanceof DateTimeValue ) { $new_st_date = new DateTimeValue($event->getStart()->getTimestamp()); } if ($event->getDuration() instanceof DateTimeValue ) { $new_due_date = new DateTimeValue($event->getDuration()->getTimestamp()); } if ($event->getRepeatD() > 0) { if ($new_st_date instanceof DateTimeValue) $new_st_date = $new_st_date->add('d', $event->getRepeatD()); if ($new_due_date instanceof DateTimeValue) $new_due_date = $new_due_date->add('d', $event->getRepeatD()); $ref_date->add('d', $event->getRepeatD()); } else if ($event->getRepeatM() > 0) { if ($new_st_date instanceof DateTimeValue) $new_st_date = $new_st_date->add('M', $event->getRepeatM()); if ($new_due_date instanceof DateTimeValue) $new_due_date = $new_due_date->add('M', $event->getRepeatM()); $ref_date->add('M', $event->getRepeatM()); } else if ($event->getRepeatY() > 0) { if ($new_st_date instanceof DateTimeValue) $new_st_date = $new_st_date->add('y', $event->getRepeatY()); if ($new_due_date instanceof DateTimeValue) $new_due_date = $new_due_date->add('y', $event->getRepeatY()); $ref_date->add('y', $event->getRepeatY()); } if ($new_st_date instanceof DateTimeValue) $new_event->setStart($new_st_date); if ($new_due_date instanceof DateTimeValue) $new_event->setDuration($new_due_date); $num_repetitions++; if ($top_repeat_num > 0 && $top_repeat_num == $num_repetitions) break; if ($last_repeat instanceof DateTimeValue && $last_repeat->getTimestamp() < $ref_date->getTimestamp()) break; $instances[] = $new_event; $event = $new_event; } } return $instances; }