Zefix_search/taskExecuter.php

143 lines
5.4 KiB
PHP

<?php
include "zefixAPI.php";
include "read_write_xlsx.php";
require_once "PHPMailer.php";
require_once "SMTP.php";
require_once "Exception.php";
use PHPMailer\PHPMailer\PHPMailer;
$maxExecutionTime = 300;
$taskDir = 'tasks';
$downloadDir = 'download';
$minTaskOldness = 30;
$latesEndTime = time() + $maxExecutionTime;
$smtppassword = getenv("smtppassword");
if(!is_dir($downloadDir)){
mkdir($downloadDir, 0755, true);
}
function doRequest($data, $filename, $username, $password)
{
echo "doing Request: ".json_encode($data);
echo "<br>";
$response = sendAPICompanySearchRequest($username, $password, $data);
$companyArray = json_decode($response, true);
$companyData = array();
foreach ($companyArray as $company) {
$companyData[] = [$company['name'],$company['ehraid'],$company['uid'],$company['chid'],$company['legalSeat'],$company['registryOfCommerceId'],$company['legalForm']['name']['de'],$company['status'],$company['sogcDate'],$company['deletionDate']];
}
if (! file_exists($filename)) {
// If File doesn't exist yet
$file = fopen($filename, 'w');
if($file) {
fputcsv($file, ['name', 'ehraid', 'uid', 'chid', 'legalSeat', 'registryOfCommerceId', 'legalForm', 'status', 'sogcDate', 'deletionDate']);
}
} else {
// If file already exists
$file = fopen($filename, 'a');
}
if ($file) {
foreach ($companyData as $row){
fputcsv($file, $row);
}
fclose($file);
}
}
function sendEmail($emailAddress, $filename, $smtppassword)
{
$mail = new PHPMailer();
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp.titan.email; smtp.titan.email'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'api@zefix.silias.ch'; // SMTP username
$mail->Password = $smtppassword; // SMTP password
$mail->SMTPSecure = 'SSL'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 465; // TCP port to connect to
$mail->isHTML(true);
$mail->setFrom('api@zefix.silias.ch', 'Silias Zefix Export');
$mail->addAddress($emailAddress);
$mail->addReplyTo('info@silias.ch', 'Silias KLG');
$mail->Subject = 'Ihr Export von Zefix ist bereit';
$mail->Body = 'Nutzen Sie den folgenden Link um ihre Daten herunterzuladen. Die Daten werden nach 48 Stunden automatisch von unserem Server gelöscht.\n<a href="https://zefix.silias.ch/'.$filename.'">https://zefix.silias.ch/'.$filename.'</a>';
if($mail->send()){
$status = "success";
$response = "Email is sent!";
}
else{
$status = "failed";
$response = "Something is wrong: <br>" . $mail->ErrorInfo;
}
echo "Email status:".$status;
echo "Email Response:".$response;
}
// Stop executing bevore reaching PHP Max Execution Time
function convertcsvToXlsx(string $csvFile, string $xlsxFile)
{
$csvData = [];
if (($handle = fopen($csvFile, "r")) !== false) {
while (($data = fgetcsv($handle, 1000, ",")) !== false) {
$csvData[] = $data;
}
fclose($handle);
} else {
echo "Failed to open $csvFile for reading.";
}
write_xlsxFile($xlsxFile, $csvData);
}
while($latesEndTime - time() > 60){
// If the directory for Tasks is already created
if(is_dir($taskDir)) {
$taskfiles = scandir($taskDir);
$taskfiles = array_diff($taskfiles, array('.', '..'));
sort($taskfiles);
// if there are any taks which are older then min oldness. To be sure the file writing process is finished.
if(count($taskfiles) > 0 && intval(explode("-", $taskfiles[0])[0]) + $minTaskOldness < time()) {
$taskString = file_get_contents($taskDir.'/'.$taskfiles[0]);
$task = json_decode($taskString, true);
// if there are any requests to do, do the first
if(count($task['requests']) > 0) {
doRequest($task['requests'][0], str_replace(".json", ".csv", $downloadDir.'/'.$taskfiles[0]), $username , $password);
echo "Request done";
echo "<br>";
array_shift($task['requests']);
$taskString = json_encode($task);
$taskfile = fopen($taskDir.'/'.$taskfiles[0], 'w');
if($taskfile){
fwrite($taskfile, $taskString);
fclose($taskfile);
}
}
// if there are no Requests left, send the E-Mail
else {
convertcsvToXlsx(str_replace(".json", ".csv", $downloadDir.'/'.$taskfiles[0]), str_replace(".json", ".xlsx", $downloadDir.'/'.$taskfiles[0]));
unlink(str_replace(".json", ".csv", $downloadDir.'/'.$taskfiles[0]));
sendEmail($task['email'], str_replace(".json", ".xlsx", $downloadDir.'/'.$taskfiles[0]), $smtppassword);
unlink($taskDir.'/'.$taskfiles[0]);
echo "Task File deleted";
echo "<br>";
}
} else {
// acutal Time - start time
echo "nothing to do after: ".strval(time() - ($latesEndTime - $maxExecutionTime));
echo "sleeping 10 seconds";
echo "<br>";
sleep(10);
}
}
}
?>