This repository has been archived on 2020-02-18. You can view files and clone it, but cannot push or open issues or pull requests.
ical-drupal-calendar/import.php

110 lines
2.8 KiB
PHP

<?php
namespace Pandy06269\iCalDrupal;
use Pandy06269\iCalDrupal\includes\DrupalConfigFileReader;
use Pandy06269\iCalDrupal\includes\DrupalDatabaseEventWriter;
use Pandy06269\iCalDrupal\includes\Event;
use Pandy06269\iCalDrupal\includes\ICSFileReader;
//define('DEBUG', true);
function autoload_include_file($class)
{
$class = substr($class, strlen('Pandy06269\\iCalDrupal\\'));
$filePath = sprintf('%s/%s.php', __DIR__, str_replace('\\', DIRECTORY_SEPARATOR, $class));
require_once $filePath;
}
spl_autoload_register('\Pandy06269\iCalDrupal\autoload_include_file');
if ($argc !== 3)
{
echo sprintf('Usage: %s <path to ical file> <path to Drupal config file>' . PHP_EOL, $argv[0]);
exit(1);
}
try
{
$pathToICSFile = trim($argv[1]);
$pathToDrupalConfig = trim($argv[2]);
$icsReader = new ICSFileReader($pathToICSFile);
$drupalReader = new DrupalConfigFileReader($pathToDrupalConfig);
echo sprintf('Reading iCal data from %s' . PHP_EOL, $icsReader->getPath());
echo sprintf('Using Drupal connection details from %s' . PHP_EOL, $drupalReader->getPath());
echo '---' . PHP_EOL;
$events = $icsReader->getEvents();
echo sprintf('%d event%s found' . PHP_EOL, count($events), count($events) == 1 ? '' : 's');
echo '---' . PHP_EOL;
/** @var Event $event */
$index = 0;
foreach ($events as $event)
{
echo sprintf('%d: %s | %s' . PHP_EOL, $index, $event->getUid(), $event->getStartDate()->format('H:i:s d/M/Y'));
echo $event->getTitle() . PHP_EOL;
if (strlen($event->getDescription()))
{
echo PHP_EOL . $event->getDescription() . PHP_EOL;
}
echo '---' . PHP_EOL;
$index++;
}
echo PHP_EOL . '*** Imported ICS file ***' . PHP_EOL;
if (count($events) == 0)
{
exit(0);
}
echo '*** Ready to upload to Drupal ***' . PHP_EOL . PHP_EOL;
$character = readline('Do you want to continue? ');
if (strtolower($character) !== 'y')
{
exit(0);
}
echo PHP_EOL;
$target = new DrupalDatabaseEventWriter($drupalReader);
$target->open();
$numberCompleted = 0;
/** @var Event $event */
foreach ($events as $event)
{
echo sprintf('Uploading event %s ... ', $event->getUid());
try
{
$target->write($event);
echo 'OK' . PHP_EOL;
}
catch (\Exception $e)
{
echo 'failed' . PHP_EOL;
throw $e;
}
$numberCompleted++;
}
echo sprintf('%d event%s added successfully, disconnecting...' . PHP_EOL, $numberCompleted, $numberCompleted == 1 ? '' : 's');
$target->close();
echo 'Done' . PHP_EOL;
}
catch (\Exception $e)
{
echo sprintf('Caught exception: %s' . PHP_EOL, $e->getMessage());
echo $e->getTraceAsString();
}