TimeTrex/classes/bounce_handler/Make_statuscodes.php

123 lines
4.4 KiB
PHP
Raw Permalink Normal View History

2022-12-13 07:10:06 +01:00
<?php
/**
* Make status codes file
*
* Create the include file with all of the latest IANA standards RFC3463 + changes
*
* PHP version 5
*
* @category Email
* @package BounceHandler
* @author Multiple <cfortune@users.noreply.github.com>
* @license http://opensource.org/licenses/BSD-2-Clause BSD
* @link https://github.com/cfortune/PHP-Bounce-Handler/
*/
$codes_1_url='http://www.iana.org/assignments/smtp-enhanced-status-codes/'.
'smtp-enhanced-status-codes-1.csv';
$codes_3_url='http://www.iana.org/assignments/smtp-enhanced-status-codes/'.
'smtp-enhanced-status-codes-3.csv';
$nl="\n";
/**
* Split a line into sections to avoid going over 80 character limit
* whilst preserving PEAR standards.
*
* @param string $describer Describer line
* @param string $line Line to split
* @param string $nl New line character(s)
*
* @return void
*/
function splitIt($describer,$line,$nl)
{
if (strlen($describer.$line)>70) {
$line_start = $nl . str_repeat(' ', 7) . '"';
$line_continues = '".';
print $describer . $nl;
print str_repeat(' ', 4) . '= "';
$split = chunk_split($line, 72, $line_continues . $line_start);
print substr($split, 0, -strlen($line_continues . $line_start));
print '";' . $nl . $nl;
} else {
print $describer.'="'.$line.'";'.$nl;
}
}
print '<?php'.$nl;
print '/** '.$nl;
print ' * Bounce status codes.'.$nl;
print ' *'.$nl;
print ' * Auto-generated by Make_statuscodes.php'.$nl;
print ' * on '.date('Y-m-d H:i:s').$nl;
print ' * From the following URLs:'.$nl;
print ' * '.chunk_split($codes_1_url, 75, $nl.' * ').$nl;
print ' * '.chunk_split($codes_3_url, 75, $nl.' * ').$nl;
print ' *'.$nl;
print ' * PHP version 5'.$nl;
print ' *'.$nl;
print ' * @category Email'.$nl;
print ' * @package BounceHandler'.$nl;
print ' * @author Multiple <cfortune@users.noreply.github.com>'.$nl;
print ' * @license http://opensource.org/licenses/BSD-2-Clause BSD'.$nl;
print ' * @link https://github.com/cfortune/PHP-Bounce-Handler/'.$nl;
print ' */'.$nl.$nl;
$fh = fopen($codes_1_url, "r");
if ($fh !== false) {
$a = fgets($fh); // 1st line is titles
while (!feof($fh)) {
$a = fgetcsv($fh, 0, ',', '"');
if (false===isset($a[0]) || false===isset($a[1])
|| false===isset($a[2])
) {
die('Unable to read CSV line: '.print_r($a, true));
}
$a[0] = preg_replace('/\..*/', '', $a[0]); // 5.x.x -> 5
$a[1] = preg_replace('/\n\s*/', ' ', $a[1]); // remove line breaks
$a[1] = preg_replace('/\s\s+/', ' ', $a[1]); // remove double spaces
$a[1] = preg_replace('/"/', '\\"', $a[1]); // requote quotes
$a[2] = preg_replace('/\n\s*/', ' ', $a[2]); // remove line breaks
$a[2] = preg_replace('/\s\s+/', ' ', $a[2]); // remove double spaces
$a[2] = preg_replace('/"/', '\\"', $a[2]); // requote quotes
print '// '.$a[3].$nl;
splitIt('$status_code_classes[\''.$a[0].'\'][\'title\']', $a[1], $nl);
splitIt('$status_code_classes[\''.$a[0].'\'][\'descr\']', $a[2], $nl);
}
fclose($fh);
}
print "\n";
// X.7.17,Mailbox owner has changed,5XX,"This status code is
// returned when a message is
// received with a Require-Recipient-Valid-Since
// field or RRVS extension and the receiving
// system is able to determine that the intended
// recipient mailbox has not been under
// continuous ownership since the specified date.",
// [RFC-ietf-appsawg-rrvs-header-field-10] (Standards Track),M. Kucherawy,IESG
$fh = fopen($codes_3_url, "r");
if ($fh !== false) {
$a = fgets($fh); // 1st line is titles
while (!feof($fh)) {
$a = fgetcsv($fh, 0, ',', '"');
$a[0] = preg_replace('/^X./i', '', $a[0]); // X.5.0 -> 5.0
$a[1] = preg_replace('/\n\s*/', ' ', $a[1]); // remove line breaks
$a[1] = preg_replace('/\s\s+/', ' ', $a[1]); // remove double spaces
$a[1] = preg_replace('/"/', '\\"', $a[1]); // requote quotes
$a[3] = preg_replace('/\n\s*/', ' ', $a[3]); // remove line breaks
$a[3] = preg_replace('/\s\s+/', ' ', $a[3]); // remove double spaces
$a[3] = preg_replace('/"/', '\\"', $a[3]); // requote quotes
print '// '.$a[4].$nl;
splitIt('$status_code_subclasses[\''.$a[0].'\'][\'title\']', $a[1], $nl);
splitIt('$status_code_subclasses[\''.$a[0].'\'][\'descr\']', $a[3], $nl);
}
fclose($fh);
}