<?php
include "gregorian_jalali.php";
class DateConverter extends Intent {
public $hasOtherIntents = true;
private $intentId = 6;
function init(){
$this->name = "dateCnv";
// preg_match('/(\d+((.|,)\d+)?)\S*\s*toman.*/', $input_line, $output_array);
$this->patterns[] = new Pattern("today","/امروز/i");
$this->patterns[] = new Pattern("today","/heute/i");
$this->patterns[] = new Pattern("now","/jetzt/i");
$this->patterns[] = new Pattern("tomorrow","/فردا/i");
$this->patterns[] = new Pattern("yesterday","/gestern/i");
$this->patterns[] = new Pattern("vorgestern","/vorgestern/i");
$this->patterns[] = new Pattern("vorgestern","/پریروز/i");
$this->patterns[] = new Pattern("yesterday","/دیروز/i");
$this->patterns[] = new Pattern("tomorrow","/morgen/i");
$this->patterns[] = new Pattern("overmorrow","/übermorgen/i");
$this->patterns[] = new Pattern("overmorrow","/پس فردا/i");
$this->patterns[] = new Pattern("nextWeek","/هفته بعد/i");
$this->patterns[] = new Pattern("nextWeek","/nächste woche/i");
$this->patterns[] = new Pattern("customNextDays","/(\d+) tage (nach|später)/i");
$this->patterns[] = new Pattern("customPrevDays","/(\d+) tage (vor|früher)/i");
$this->patterns[] = new Pattern("customNextDays","/((\d+)|[۰-۹]+) روز (بعد|دیگه)/i");
$this->patterns[] = new Pattern("customPrevDays","/([۰-۹]+) روز (قبل|پیش)/i");
$this->patterns[] = new Pattern("customPrevDays","/(\d+) روز (قبل|پیش)/i");
$this->patterns[] = new Pattern("customPrevHours","/((\d+)|[۰-۹]+) ساعت (قبل|پیش)/i");
$this->patterns[] = new Pattern("customNextHours","/((\d+)|[۰-۹]+) ساعت (بعد|دیگه)/i");
$this->patterns[] = new Pattern("customPrevHours","/((\d+)|[۰-۹]+) stunde (vor|früher)/i");
$this->patterns[] = new Pattern("customNextHours","/((\d+)|[۰-۹]+) stunde (nach|später)/i");
// $this->patterns[] = new Pattern("euroToman","/(\d+((.|,)\d+)?)\S*\s*euro.*/i");
// $this->patterns[] = new Pattern("euroToman","/(\d+((.|,)\d+)?)\S*\s*eur.*/i");
// $this->patterns[] = new Pattern("euroToman","/([۰-۹]+((.|,)[۰-۹]+)?)\S*\s*یورو.*/i");
// $this->patterns[] = new Pattern("euroToman","/([۰-۹]+((.|,)[۰-۹]+)?)\S*\s*یور.*/i");
// $this->patterns[] = new Pattern("euroToman","/(\d+((.|,)\d+)?)\S*\s*€.*/i");
// $this->patterns[] = new Pattern("euroToman","/([۰-۹]+((.|,)[۰-۹]+)?)\S*\s*€.*/i");
// $this->patterns[] = new Pattern("euroToman","/(\d+((.|,)\d+)?)\S*\s*yoro.*/i");
}
function getIntentID(){
return 6;
}
function act(){
if($this->getIS()->getTG()->getDB()->getNumberOfActivityWithIntentId($this->getIS()->getTG()->chat_id, $this->intentId)>4){
$this->getIS()->getTG()->getPatreonService()->sendJoinRequest();
}
if(!empty($this->data["entities"][0]['value'])){
$date = $this->data["entities"][0]['value'];
$date = $this->convertPersianNumbersToEnglish($date);
$date = $this->getCustomNextPrevDays($date);
} else {
$date = $this->getConvertedText();
}
$dt = new DateTime($date);
$dt->setTimezone(new DateTimeZone("Europe/Berlin"));
$dateTimeInGermany = $dt->format('Y/m/d H:i:s');
$germanyDateTimeParts = explode(" ", $dateTimeInGermany);
$dt->setTimezone(new DateTimeZone("Asia/Tehran"));
$dateInIran = $dt->format('Y/m/d H:i:s');
$dateTimeParts = explode(" ",$dateInIran);
$dateParts = explode("/", $dateTimeParts[0]);
$converter = gregorian_to_jalali($dateParts[0],$dateParts[1],$dateParts[2], $date);
$dateInPersian = $this->convertEnglishNumbersToPersian($converter);
$timeInPersian = $this->convertEnglishNumbersToPersian($dateTimeParts[1]);
// create a $dt object with the America/Denver timezone
$text = $this->generateMessage($germanyDateTimeParts[0], $dateInPersian, $germanyDateTimeParts[1], $timeInPersian);
$this->getIS()->getTG()->sendMessage($text,$this->getIS()->getTG()->chat_id);
}
function generateMessage($date, $converterPersian, $time, $timeInPersian){
$unixTimestamp = strtotime($date);
$dayOfWeek = date("l", $unixTimestamp);
$persianDayOfWeek = $this->convertEnglishDayToPersian($dayOfWeek);
$germanDayOfWeek = $this->convertEnglishDayToGerman($dayOfWeek);
$text =
$germanDayOfWeek." ".$date." ".
" ".$time.PHP_EOL.
" ".$persianDayOfWeek." ".$converterPersian.
" ".$timeInPersian;
$text .= PHP_EOL;
$text .= $this->getIS()->getTG()->botUsername."😊";
return $text;
}
function convertEnglishDayToGerman($input)
{
$english = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Sunday', 'Saturday'];
$german = [ 'Montag' , 'Dienstag' , 'Mitwoch' , 'Donnerstag' , 'Freitag' , 'Samstag' , 'Sonntag' ];
return str_replace($english, $german, $input);
}
function convertEnglishDayToPersian($input)
{
$english = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Sunday', 'Saturday'];
$persian = [ 'دوشنبه' , 'سه شنبه' , 'چهارشنبه' , 'پنج شنبه' , 'جمعه' , 'شنبه' , 'یکشنبه' ];
return str_replace($english, $persian, $input);
}
function convertPersianNumbersToEnglish($input)
{
$persian = ['۰', '۱', '۲', '۳', '۴', '٤', '۵', '٥', '٦', '۶', '۷', '۸', '۹'];
$english = [ 0 , 1 , 2 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , 8 , 9 ];
return str_replace($persian, $english, $input);
}
function convertEnglishNumbersToPersian($input)
{
$persian = ['۰', '۱', '۲', '۳', '۴', '٤', '۵', '٥', '٦', '۶', '۷', '۸', '۹'];
$english = [ 0 , 1 , 2 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , 8 , 9 ];
return str_replace($english,$persian, $input);
}
function getCustomNextPrevDays($days){
switch($this->usedPattern->name){
case "customPrevDays":
$result = date("Y/m/d H:i:s", strtotime("-".$days."day"));
break;
case "customNextDays":
$result = date("Y/m/d H:i:s", strtotime("+".$days."day"));
break;
case "customNextHours":
$result = date("Y/m/d H:i:s", strtotime("+".$days."hours"));
break;
case "customPrevHours":
$result = date("Y/m/d H:i:s", strtotime("-".$days."hours"));
break;
}
return $result;
}
function getConvertedText(){
$result = "";
switch($this->getUsedPattern()->name){
case "today":
$result = date("Y/m/d H:i:s");
break;
case "now":
$result = date("Y/m/d H:i:s");
break;
case "tomorrow":
$result = date("Y/m/d H:i:s", strtotime('+1day'));
break;
case "nextWeek":
$result = date("Y/m/d H:i:s", strtotime('+1 week'));
break;
case "overmorrow":
$result = date("Y/m/d H:i:s", strtotime('+2day'));
break;
case "vorgestern":
$dayBeforeYesterday = strtotime("-2 day");
$result = date("Y/m/d H:i:s", $dayBeforeYesterday);
break;
case "yesterday":
$yesterday = strtotime("-1 day");
$result = date("Y/m/d H:i:s", $yesterday);
break;
}
return $result;
}
}