This repository has been archived on 2020-01-20. You can view files and clone it, but cannot push or open issues or pull requests.
lilac/exporter/export.php
2011-08-18 14:54:38 +00:00

97 lines
2.7 KiB
PHP
Executable file

<?php
// Run as background process
/**
* Lilac Exporter
*/
// This is a dirty hack to allow calling from command line and from cli. I'd like to figure out
// a better way to do this.
if(file_exists('exporter')) {
chdir('exporter');
}
include_once('../includes/config.inc');
include_once('ExportJob.php');
include_once('ExportLogEntry.php');
ExportEngine::getAvailableEngines();
/**
* Potential Errors
* 10 - No job id provided on command line
* 20 - Job not found in database
* 30 - Import Engine not found (name provided in ImportConfig)
* 40 - Some error failure. View import job logs.
* 42 - SUCCESS WHEN FORKING SCRIPT
*/
set_time_limit(0); // Remove time limit
if (pcntl_fork()) { // Fork process
exit(42); // This marks a successful fork, so we should return success to the caller
}
posix_setsid(); // Make child process session leader
// Okay, we're now in our own execution space. Let's begin
// We need to restart Propel to regain access to the DB
Propel::init(LILAC_FS_ROOT . "includes/lilac-conf.php");
if(isset($argv[1]) && is_numeric($argv[1])) {
$exportJob = ExportJobPeer::retrieveByPK($argv[1]);
if(!$exportJob) {
print "Job with id: " . $argv[1] . " not found.\n";
exit(20);
}
$exportJob->clearLog();
// Okay, let's get the ExportConfig
$config = $exportJob->getConfig();
$config = unserialize($config);
$engineClass = $config->getEngineClass();
if(!class_exists($engineClass) || !is_subclass_of($engineClass, "ExportEngine")) {
$exportJob->addError("Export Engine of type " . $engineClass . " not found.");
exit(30);
}
}
else {
print "No job id provided.\n";
exit(10);
}
$exportJob->addNotice("Starting Background Export Process for Job: " . $exportJob->getName());
$exportJob->setStatus("Running");
$exportJob->setStatusCode(ExportJob::STATUS_RUNNING);
$exportJob->save();
$exportJob->addNotice("Initializing Export Engine: " . $engineClass);
$engine = new $engineClass($exportJob);
if(!$engine->init()) {
$exportJob->addError("Engine failed to initialize.");
$exportJob->setStatus("Failed - Engine failed to initialize.");
$exportJob->setEndTime(time());
$exportJob->setStatusCode(ExportJob::STATUS_FAILED);
$exportJob->save();
exit(40);
}
if(!$engine->export()) {
$exportJob->addError("Engine export process failed to complete successfully.");
$exportJob->setEndTime(time());
$exportJob->setStatus("Engine export process failed to complete successfully.");
$exportJob->setStatusCode(ExportJob::STATUS_FAILED);
$exportJob->save();
exit(40);
}
else {
$exportJob->setStatusCode(ExportJob::STATUS_FINISHED);
$exportJob->setEndTime(time());
$exportJob->setStatus("Complete");
$exportJob->addNotice("Completed Export.");
$exportJob->save();
}
?>