1
0
mirror of https://github.com/Chouchen/ShikiryuRSS.git synced 2024-05-19 18:21:31 +02:00
ShikiryuRSS/src/SRSSTools.php
2023-04-11 23:49:03 +02:00

192 lines
5.2 KiB
PHP

<?php
namespace Shikiryu\SRSS;
use DateTime;
use DateTimeInterface;
class SRSSTools
{
/*public static function check($check, $flag)
{
return match ($flag) {
'nohtml' => self::noHTML($check),
'link' => self::checkLink($check),
'html' => self::HTML4XML($check),
'date' => self::getRSSDate($check),
'email' => self::checkEmail($check),
'int' => self::checkInt($check),
'hour' => self::checkHour($check),
'day' => self::checkDay($check),
'folder' => [],
'media_type' => self::checkMediaType($check),
'media_medium' => self::checkMediaMedium($check),
'bool' => self::checkBool($check),
'medium_expression' => self::checkMediumExpression($check)
};
}*/
/**
* format the RSS to the wanted format
* @param $format string wanted format
* @param $date string RSS date
* @return string date
*/
public static function formatDate($format, $date)
{
return date($format, strtotime($date));
}
/**
* format a date for RSS format
* @param string $date date to format
* @param string $format
* @return string
*/
public static function getRSSDate($date, $format='')
{
$datepos = 'dDjlNSwzWFmMntLoYyaABgGhHisueIOPTZcrU';
if($format != '' && preg_match('~^(['.$datepos.']{1})(-|/)(['.$datepos.']{1})(-|/)(['.$datepos.']{1})$~', $format, $match)){
$sep = $match[2];
$format = '%'.$match[1].$sep.'%'.$match[3].$sep.'%'.$match[5];
if($dateArray = strptime($date, $format)){
$mois = (int)$dateArray['tm_mon'] + 1;
$annee = strlen($dateArray['tm_year']) > 2 ? '20'.substr($dateArray['tm_year'], -2) : '19'.$dateArray['tm_year'];
$date = $annee.'-'.$mois.'-'.$dateArray['tm_mday'];
return date("D, d M Y H:i:s T", strtotime($date));
}
return '';
}
if(strtotime($date) !==false ){
return date("D, d M Y H:i:s T", strtotime($date));
}
if (count(explode(' ', $date)) === 2) {
return DateTime::createFromFormat('Y-m-d H:i:s', $date)->format(DateTimeInterface::RSS);
}
[$j, $m, $a] = explode('/', $date);
return date("D, d M Y H:i:s T", strtotime($a.'-'.$m.'-'.$j));
}
/**
* check if it's an url
* @param $check string to check
* @return string|boolean the filtered data, or FALSE if the filter fails.
*/
public static function checkLink($check)
{
return filter_var($check, FILTER_VALIDATE_URL);
}
/**
* make a string XML-compatible
* @param $check string to format
* @return string formatted string
* TODO CDATA ?
*/
public static function HTML4XML($check)
{
return htmlspecialchars($check);
}
/**
* delete html tags
* @param $check string to format
* @return string formatted string
*/
public static function noHTML($check)
{
return strip_tags($check);
}
/**
* check if it's a day (in RSS terms)
* @param $check string to check
* @return string the day, or empty string
*/
public static function checkDay($check)
{
$possibleDay = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];
return in_array(strtolower($check), $possibleDay) ? $check : '';
}
/**
* check if it's an email
* @param $check string to check
* @return string|boolean the filtered data, or FALSE if the filter fails.
*/
public static function checkEmail($check)
{
return filter_var($check, FILTER_VALIDATE_EMAIL);
}
/**
* check if it's an hour (in RSS terms)
* @param $check string to check
* @return string|boolean the filtered data, or FALSE if the filter fails.
*/
public static function checkHour($check)
{
$options = [
'options' => [
'default' => 0,
'min_range' => 0,
'max_range' => 23
]
];
return filter_var($check, FILTER_VALIDATE_INT, $options);
}
/**
* check if it's an int
* @param $check int to check
* @return int|boolean the filtered data, or FALSE if the filter fails.
*/
public static function checkInt($check)
{
return filter_var($check, FILTER_VALIDATE_INT);
}
/**
* @param $check
*
* @return mixed
*/
private static function checkMediaType($check)
{
return $check;
}
/**
* @param $check
*
* @return mixed|null
*/
private static function checkMediaMedium($check)
{
return in_array($check, ['image', 'audio', 'video', 'document', 'executable']) ? $check : null;
}
/**
* @param $check
*
* @return mixed|null
*/
private static function checkBool($check)
{
return in_array($check, ['true', 'false']) ? $check : null;
}
/**
* @param $check
*
* @return mixed|null
*/
private static function checkMediumExpression($check)
{
return in_array($check, ['sample', 'full', 'nonstop']) ? $check : null;
}
}