2023-09-25 12:43:51 +02:00
< ? php
2023-09-25 15:45:26 +02:00
include " zefixAPI.php " ;
2023-09-25 23:11:53 +02:00
include " read_write_xlsx.php " ;
2023-09-25 12:43:51 +02:00
2023-09-25 23:49:38 +02:00
require_once " PHPMailer.php " ;
require_once " SMTP.php " ;
require_once " Exception.php " ;
use PHPMailer\PHPMailer\PHPMailer ;
2023-09-25 22:54:59 +02:00
$maxExecutionTime = 300 ;
2023-09-25 13:49:34 +02:00
$taskDir = 'tasks' ;
2023-09-25 15:45:26 +02:00
$downloadDir = 'download' ;
2023-09-25 22:52:09 +02:00
$minTaskOldness = 30 ;
2023-09-25 14:29:53 +02:00
$latesEndTime = time () + $maxExecutionTime ;
2023-09-25 23:49:38 +02:00
$smtppassword = getenv ( " smtppassword " );
2023-09-25 15:45:26 +02:00
if ( ! is_dir ( $downloadDir )){
mkdir ( $downloadDir , 0755 , true );
}
function doRequest ( $data , $filename , $username , $password )
2023-09-25 13:49:34 +02:00
{
2023-09-25 15:45:26 +02:00
$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 );
}
2023-09-25 13:49:34 +02:00
}
2023-09-25 12:43:51 +02:00
2023-09-25 22:52:09 +02:00
2023-09-25 23:49:38 +02:00
function sendEmail ( $emailAddress , $filename , $smtppassword )
2023-09-25 13:49:34 +02:00
{
2023-09-25 23:49:38 +02:00
$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 );
2023-09-25 23:57:40 +02:00
$mail -> setFrom ( 'api@zefix.silias.ch' , 'Silias Zefix Export' );
2023-09-25 23:49:38 +02:00
$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! " ;
2023-09-25 22:52:09 +02:00
}
2023-09-25 23:49:38 +02:00
else {
$status = " failed " ;
$response = " Something is wrong: <br> " . $mail -> ErrorInfo ;
}
echo " Email status: " . $status ;
echo " Email Response: " . $response ;
2023-09-25 13:49:34 +02:00
}
2023-09-25 14:29:53 +02:00
// Stop executing bevore reaching PHP Max Execution Time
2023-09-25 20:51:32 +02:00
function convertcsvToXlsx ( string $csvFile , string $xlsxFile )
2023-09-25 20:18:24 +02:00
{
2023-09-25 22:22:50 +02:00
$csvData = [];
2023-09-25 20:18:24 +02:00
2023-09-25 22:22:50 +02:00
if (( $handle = fopen ( $csvFile , " r " )) !== false ) {
while (( $data = fgetcsv ( $handle , 1000 , " , " )) !== false ) {
$csvData [] = $data ;
2023-09-25 20:51:32 +02:00
}
2023-09-25 22:22:50 +02:00
fclose ( $handle );
} else {
echo " Failed to open $csvFile for reading. " ;
2023-09-25 20:51:32 +02:00
}
2023-09-25 22:22:50 +02:00
write_xlsxFile ( $xlsxFile , $csvData );
2023-09-25 20:18:24 +02:00
}
2023-09-25 14:29:53 +02:00
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 );
2023-09-25 22:52:09 +02:00
// 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 ()) {
2023-09-25 14:29:53 +02:00
$taskString = file_get_contents ( $taskDir . '/' . $taskfiles [ 0 ]);
$task = json_decode ( $taskString , true );
2023-09-25 13:49:34 +02:00
2023-09-25 14:29:53 +02:00
// if there are any requests to do, do the first
if ( count ( $task [ 'requests' ]) > 0 ) {
2023-09-25 15:45:26 +02:00
doRequest ( $task [ 'requests' ][ 0 ], str_replace ( " .json " , " .csv " , $downloadDir . '/' . $taskfiles [ 0 ]), $username , $password );
2023-09-25 14:29:53 +02:00
array_shift ( $task [ 'requests' ]);
$taskString = json_encode ( $task );
$taskfile = fopen ( $taskDir . '/' . $taskfiles [ 0 ], 'w' );
if ( $taskfile ){
fwrite ( $taskfile , $taskString );
fclose ( $taskfile );
}
2023-09-25 13:49:34 +02:00
}
2023-09-25 14:29:53 +02:00
// if there are no Requests left, send the E-Mail
2023-09-25 13:49:34 +02:00
else {
2023-09-25 20:16:47 +02:00
convertcsvToXlsx ( str_replace ( " .json " , " .csv " , $downloadDir . '/' . $taskfiles [ 0 ]), str_replace ( " .json " , " .xlsx " , $downloadDir . '/' . $taskfiles [ 0 ]));
2023-09-25 22:52:09 +02:00
unlink ( str_replace ( " .json " , " .csv " , $downloadDir . '/' . $taskfiles [ 0 ]));
2023-09-25 23:49:38 +02:00
sendEmail ( $task [ 'email' ], str_replace ( " .json " , " .xlsx " , $downloadDir . '/' . $taskfiles [ 0 ]), $smtppassword );
2023-09-25 14:29:53 +02:00
unlink ( $taskDir . '/' . $taskfiles [ 0 ]);
echo " Task File deleted " ;
2023-09-25 15:45:26 +02:00
echo " <br> " ;
2023-09-25 14:29:53 +02:00
}
} else {
// acutal Time - start time
echo " nothing to do after: " . strval ( time () - ( $latesEndTime - $maxExecutionTime ));
echo " sleeping 10 seconds " ;
2023-09-25 15:45:26 +02:00
echo " <br> " ;
2023-09-25 14:29:53 +02:00
sleep ( 10 );
2023-09-25 13:49:34 +02:00
}
}
}
?>