progress in sitemap
This commit is contained in:
parent
6e36486064
commit
474a9a27a9
|
@ -1,5 +1,11 @@
|
||||||
twig:
|
twig:
|
||||||
file_name_pattern: '*.twig'
|
file_name_pattern: '*.twig'
|
||||||
|
form_themes: [
|
||||||
|
'bootstrap_5_layout.html.twig',
|
||||||
|
]
|
||||||
|
globals:
|
||||||
|
Jdate: "@Jdate"
|
||||||
|
twigFunctions: "@twigFunctions"
|
||||||
|
|
||||||
when@test:
|
when@test:
|
||||||
twig:
|
twig:
|
||||||
|
|
|
@ -22,3 +22,8 @@ services:
|
||||||
|
|
||||||
# add more service definitions when explicit configuration is needed
|
# add more service definitions when explicit configuration is needed
|
||||||
# please note that last definitions always *replace* previous ones
|
# please note that last definitions always *replace* previous ones
|
||||||
|
Jdate:
|
||||||
|
class: App\Service\Jdate
|
||||||
|
twigFunctions:
|
||||||
|
class: App\Service\twigFunctions
|
||||||
|
arguments: [ "@doctrine.orm.entity_manager" ]
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
namespace App\Controller;
|
namespace App\Controller;
|
||||||
|
|
||||||
|
use App\Entity\Post;
|
||||||
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
@ -14,4 +16,15 @@ class GeneralController extends AbstractController
|
||||||
{
|
{
|
||||||
return $this->render('general/home.html.twig');
|
return $this->render('general/home.html.twig');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[Route('/sitemap.xml', name: 'app_sitemap')]
|
||||||
|
public function app_sitemap(EntityManagerInterface $em): Response
|
||||||
|
{
|
||||||
|
$response = new Response();
|
||||||
|
$response->headers->set('Content-Type', 'text/xml');
|
||||||
|
$posts = $em->getRepository(Post::class)->findAll();
|
||||||
|
return $this->render('general/sitemap.html.twig',[
|
||||||
|
'posts'=>$posts
|
||||||
|
],$response);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
595
src/Service/Jdate.php
Normal file
595
src/Service/Jdate.php
Normal file
|
@ -0,0 +1,595 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* User: babak
|
||||||
|
* Date: 05/06/2018
|
||||||
|
* Time: 08:26 AM
|
||||||
|
*/
|
||||||
|
namespace App\Service;
|
||||||
|
|
||||||
|
class Jdate
|
||||||
|
{
|
||||||
|
public function shamsiDate($nyear,$nmoon,$nday)
|
||||||
|
{
|
||||||
|
$reg_day = jdate("d","now");
|
||||||
|
$reg_moon = jdate("m","now");
|
||||||
|
$reg_year = jdate("y","now");
|
||||||
|
|
||||||
|
$end_year = jdate("y",jmaketime(0,0,0,$reg_moon+$nmoon,$reg_day+$nday,$reg_year+1300+$nyear));
|
||||||
|
$end_moon = jdate("m",jmaketime(0,0,0,$reg_moon+$nmoon,$reg_day+$nday,$reg_year+1300+$nyear));
|
||||||
|
$end_day = jdate("d",jmaketime(0,0,0,$reg_moon+$nmoon,$reg_day+$nday,$reg_year+1300+$nyear));
|
||||||
|
|
||||||
|
if ($end_year < 10) $end_year = '0'.$end_year;
|
||||||
|
if ($end_moon < 10) $end_moon = '0'.$end_moon;
|
||||||
|
if ($end_day < 10) $end_day = '0'.$end_day;
|
||||||
|
|
||||||
|
$new_date = $end_year."/". $end_moon ."/".$end_day;
|
||||||
|
|
||||||
|
return $new_date;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function GetTodayDate()
|
||||||
|
{
|
||||||
|
return $this->jdate('Y/m/d',time());
|
||||||
|
}
|
||||||
|
public function time(){
|
||||||
|
return time();
|
||||||
|
}
|
||||||
|
public function fa2en($string) {
|
||||||
|
return strtr($string, array('۰'=>'0', '۱'=>'1', '۲'=>'2', '۳'=>'3', '۴'=>'4', '۵'=>'5', '۶'=>'6', '۷'=>'7', '۸'=>'8', '۹'=>'9', '٠'=>'0', '١'=>'1', '٢'=>'2', '٣'=>'3', '٤'=>'4', '٥'=>'5', '٦'=>'6', '٧'=>'7', '٨'=>'8', '٩'=>'9'));
|
||||||
|
}
|
||||||
|
public function jallaliToUnixTime($stringTime,$persianNum=true)
|
||||||
|
{
|
||||||
|
if($persianNum)
|
||||||
|
$stringTime = $this->fa2en($stringTime);
|
||||||
|
$ymd = explode('/',$stringTime);
|
||||||
|
$greDate = $this->jalali_to_gregorian($ymd[0],$ymd[1],$ymd[2]);
|
||||||
|
return strtotime($greDate[0].'/'.$greDate[1] . '/' .$greDate[2]);
|
||||||
|
}
|
||||||
|
/* F */
|
||||||
|
public function jdate($format,$timestamp='',$none='',$time_zone='Asia/Tehran',$tr_num='en'){
|
||||||
|
$T_sec=0;/* <= رفع خطاي زمان سرور ، با اعداد '+' و '-' بر حسب ثانيه */
|
||||||
|
if($time_zone!='local')date_default_timezone_set(($time_zone==='')?'Asia/Tehran':$time_zone);
|
||||||
|
$ts=$T_sec+(($timestamp==='')?time():$this->tr_num($timestamp));
|
||||||
|
$date=explode('_',date('H_i_j_n_O_P_s_w_Y',$ts));
|
||||||
|
list($j_y,$j_m,$j_d)=$this->gregorian_to_jalali($date[8],$date[3],$date[2]);
|
||||||
|
$doy=($j_m<7)?(($j_m-1)*31)+$j_d-1:(($j_m-7)*30)+$j_d+185;
|
||||||
|
$kab=(((($j_y%33)%4)-1)==((int)(($j_y%33)*0.05)))?1:0;
|
||||||
|
$sl=strlen($format);
|
||||||
|
$out='';
|
||||||
|
for($i=0; $i<$sl; $i++){
|
||||||
|
$sub=substr($format,$i,1);
|
||||||
|
if($sub=='\\'){
|
||||||
|
$out.=substr($format,++$i,1);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
switch($sub){
|
||||||
|
case'E':case'R':case'x':case'X':
|
||||||
|
$out.='http://jdf.scr.ir';
|
||||||
|
break;
|
||||||
|
case'B':case'e':case'g':
|
||||||
|
case'G':case'h':case'I':
|
||||||
|
case'T':case'u':case'Z':
|
||||||
|
$out.=date($sub,$ts);
|
||||||
|
break;
|
||||||
|
case'a':
|
||||||
|
$out.=($date[0]<12)?'ق.ظ':'ب.ظ';
|
||||||
|
break;
|
||||||
|
case'A':
|
||||||
|
$out.=($date[0]<12)?'قبل از ظهر':'بعد از ظهر';
|
||||||
|
break;
|
||||||
|
case'b':
|
||||||
|
$out.=(int)($j_m/3.1)+1;
|
||||||
|
break;
|
||||||
|
case'c':
|
||||||
|
$out.=$j_y.'/'.$j_m.'/'.$j_d.' ،'.$date[0].':'.$date[1].':'.$date[6].' '.$date[5];
|
||||||
|
break;
|
||||||
|
case'C':
|
||||||
|
$out.=(int)(($j_y+99)/100);
|
||||||
|
break;
|
||||||
|
case'd':
|
||||||
|
$out.=($j_d<10)?'0'.$j_d:$j_d;
|
||||||
|
break;
|
||||||
|
case'D':
|
||||||
|
$out.=$this->jdate_words(array('kh'=>$date[7]),' ');
|
||||||
|
break;
|
||||||
|
case'f':
|
||||||
|
$out.=$this->jdate_words(array('ff'=>$j_m),' ');
|
||||||
|
break;
|
||||||
|
case'F':
|
||||||
|
$out.=$this->jdate_words(array('mm'=>$j_m),' ');
|
||||||
|
break;
|
||||||
|
case'H':
|
||||||
|
$out.=$date[0];
|
||||||
|
break;
|
||||||
|
case'i':
|
||||||
|
$out.=$date[1];
|
||||||
|
break;
|
||||||
|
case'j':
|
||||||
|
$out.=$j_d;
|
||||||
|
break;
|
||||||
|
case'J':
|
||||||
|
$out.=$this->jdate_words(array('rr'=>$j_d),' ');
|
||||||
|
break;
|
||||||
|
case'k';
|
||||||
|
$out.=$this->tr_num(100-(int)($doy/($kab+365)*1000)/10,$$this->tr_num);
|
||||||
|
break;
|
||||||
|
case'K':
|
||||||
|
$out.=$this->tr_num((int)($doy/($kab+365)*1000)/10,$tr_num);
|
||||||
|
break;
|
||||||
|
case'l':
|
||||||
|
$out.=$this->jdate_words(array('rh'=>$date[7]),' ');
|
||||||
|
break;
|
||||||
|
case'L':
|
||||||
|
$out.=$kab;
|
||||||
|
break;
|
||||||
|
case'm':
|
||||||
|
$out.=$this->tr_num(($j_m>9)?$j_m:'0'.$j_m,$tr_num);
|
||||||
|
break;
|
||||||
|
case'M':
|
||||||
|
$out.=$this->jdate_words(array('km'=>$j_m),' ');
|
||||||
|
break;
|
||||||
|
case'n':
|
||||||
|
$out.=$j_m;
|
||||||
|
break;
|
||||||
|
case'N':
|
||||||
|
$out.=$date[7]+1;
|
||||||
|
break;
|
||||||
|
case'o':
|
||||||
|
$jdw=($date[7]==6)?0:$date[7]+1;
|
||||||
|
$dny=364+$kab-$doy;
|
||||||
|
$out.=($jdw>($doy+3) and $doy<3)?$j_y-1:(((3-$dny)>$jdw and $dny<3)?$j_y+1:$j_y);
|
||||||
|
break;
|
||||||
|
case'O':
|
||||||
|
$out.=$date[4];
|
||||||
|
break;
|
||||||
|
case'p':
|
||||||
|
$out.=$this->jdate_words(array('mb'=>$j_m),' ');
|
||||||
|
break;
|
||||||
|
case'P':
|
||||||
|
$out.=$date[5];
|
||||||
|
break;
|
||||||
|
case'q':
|
||||||
|
$out.=$this->jdate_words(array('sh'=>$j_y),' ');
|
||||||
|
break;
|
||||||
|
case'Q':
|
||||||
|
$out.=$kab+364-$doy;
|
||||||
|
break;
|
||||||
|
case'r':
|
||||||
|
$key=$this->jdate_words(array('rh'=>$date[7],'mm'=>$j_m));
|
||||||
|
$out.=$date[0].':'.$date[1].':'.$date[6].' '.$date[4].' '.$key['rh'].'، '.$j_d.' '.$key['mm'].' '.$j_y;
|
||||||
|
break;
|
||||||
|
case's':
|
||||||
|
$out.=$date[6];
|
||||||
|
break;
|
||||||
|
case'S':
|
||||||
|
$out.='ام';
|
||||||
|
break;
|
||||||
|
case't':
|
||||||
|
$out.=($j_m!=12)?(31-(int)($j_m/6.5)):($kab+29);
|
||||||
|
break;
|
||||||
|
case'U':
|
||||||
|
$out.=$ts;
|
||||||
|
break;
|
||||||
|
case'v':
|
||||||
|
$out.=$this->jdate_words(array('ss'=>($j_y%100)),' ');
|
||||||
|
break;
|
||||||
|
case'V':
|
||||||
|
$out.=$this->jdate_words(array('ss'=>$j_y),' ');
|
||||||
|
break;
|
||||||
|
case'w':
|
||||||
|
$out.=($date[7]==6)?0:$date[7]+1;
|
||||||
|
break;
|
||||||
|
case'W':
|
||||||
|
$avs=(($date[7]==6)?0:$date[7]+1)-($doy%7);
|
||||||
|
if($avs<0)$avs+=7;
|
||||||
|
$num=(int)(($doy+$avs)/7);
|
||||||
|
if($avs<4){
|
||||||
|
$num++;
|
||||||
|
}elseif($num<1){
|
||||||
|
$num=($avs==4 or $avs==((((($j_y%33)%4)-2)==((int)(($j_y%33)*0.05)))?5:4))?53:52;
|
||||||
|
}
|
||||||
|
$aks=$avs+$kab;
|
||||||
|
if($aks==7)$aks=0;
|
||||||
|
$out.=(($kab+363-$doy)<$aks and $aks<3)?'01':(($num<10)?'0'.$num:$num);
|
||||||
|
break;
|
||||||
|
case'y':
|
||||||
|
$out.=substr($j_y,2,2);
|
||||||
|
break;
|
||||||
|
case'Y':
|
||||||
|
$out.=$j_y;
|
||||||
|
break;
|
||||||
|
case'z':
|
||||||
|
$out.=$doy;
|
||||||
|
break;
|
||||||
|
default:$out.=$sub;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return($tr_num!='en')?$this->tr_num($out,'fa','.'):$out;
|
||||||
|
}
|
||||||
|
/* F */
|
||||||
|
public function jstrftime($format,$timestamp='',$none='',$time_zone='Asia/Tehran',$tr_num='fa'){
|
||||||
|
$T_sec=0;/* <= رفع خطاي زمان سرور ، با اعداد '+' و '-' بر حسب ثانيه */
|
||||||
|
if($time_zone!='local')date_default_timezone_set(($time_zone==='')?'Asia/Tehran':$time_zone);
|
||||||
|
$ts=$T_sec+(($timestamp==='')?time():tr_num($timestamp));
|
||||||
|
$date=explode('_',date('h_H_i_j_n_s_w_Y',$ts));
|
||||||
|
list($j_y,$j_m,$j_d)=$this->gregorian_to_jalali($date[7],$date[4],$date[3]);
|
||||||
|
$doy=($j_m<7)?(($j_m-1)*31)+$j_d-1:(($j_m-7)*30)+$j_d+185;
|
||||||
|
$kab=(((($j_y%33)%4)-1)==((int)(($j_y%33)*0.05)))?1:0;
|
||||||
|
$sl=strlen($format);
|
||||||
|
$out='';
|
||||||
|
for($i=0; $i<$sl; $i++){
|
||||||
|
$sub=substr($format,$i,1);
|
||||||
|
if($sub=='%'){
|
||||||
|
$sub=substr($format,++$i,1);
|
||||||
|
}else{
|
||||||
|
$out.=$sub;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
switch($sub){
|
||||||
|
/* Day */
|
||||||
|
case'a':
|
||||||
|
$out.=$this->jdate_words(array('kh'=>$date[6]),' ');
|
||||||
|
break;
|
||||||
|
case'A':
|
||||||
|
$out.=$this->jdate_words(array('rh'=>$date[6]),' ');
|
||||||
|
break;
|
||||||
|
case'd':
|
||||||
|
$out.=($j_d<10)?'0'.$j_d:$j_d;
|
||||||
|
break;
|
||||||
|
case'e':
|
||||||
|
$out.=($j_d<10)?' '.$j_d:$j_d;
|
||||||
|
break;
|
||||||
|
case'j':
|
||||||
|
$out.=str_pad($doy+1,3,0,STR_PAD_LEFT);
|
||||||
|
break;
|
||||||
|
case'u':
|
||||||
|
$out.=$date[6]+1;
|
||||||
|
break;
|
||||||
|
case'w':
|
||||||
|
$out.=($date[6]==6)?0:$date[6]+1;
|
||||||
|
break;
|
||||||
|
/* Week */
|
||||||
|
case'U':
|
||||||
|
$avs=(($date[6]<5)?$date[6]+2:$date[6]-5)-($doy%7);
|
||||||
|
if($avs<0)$avs+=7;
|
||||||
|
$num=(int)(($doy+$avs)/7)+1;
|
||||||
|
if($avs>3 or $avs==1)$num--;
|
||||||
|
$out.=($num<10)?'0'.$num:$num;
|
||||||
|
break;
|
||||||
|
case'V':
|
||||||
|
$avs=(($date[6]==6)?0:$date[6]+1)-($doy%7);
|
||||||
|
if($avs<0)$avs+=7;
|
||||||
|
$num=(int)(($doy+$avs)/7);
|
||||||
|
if($avs<4){
|
||||||
|
$num++;
|
||||||
|
}elseif($num<1){
|
||||||
|
$num=($avs==4 or $avs==((((($j_y%33)%4)-2)==((int)(($j_y%33)*0.05)))?5:4))?53:52;
|
||||||
|
}
|
||||||
|
$aks=$avs+$kab;
|
||||||
|
if($aks==7)$aks=0;
|
||||||
|
$out.=(($kab+363-$doy)<$aks and $aks<3)?'01':(($num<10)?'0'.$num:$num);
|
||||||
|
break;
|
||||||
|
case'W':
|
||||||
|
$avs=(($date[6]==6)?0:$date[6]+1)-($doy%7);
|
||||||
|
if($avs<0)$avs+=7;
|
||||||
|
$num=(int)(($doy+$avs)/7)+1;
|
||||||
|
if($avs>3)$num--;
|
||||||
|
$out.=($num<10)?'0'.$num:$num;
|
||||||
|
break;
|
||||||
|
/* Month */
|
||||||
|
case'b':
|
||||||
|
case'h':
|
||||||
|
$out.=$this->jdate_words(array('km'=>$j_m),' ');
|
||||||
|
break;
|
||||||
|
case'B':
|
||||||
|
$out.=$this->jdate_words(array('mm'=>$j_m),' ');
|
||||||
|
break;
|
||||||
|
case'm':
|
||||||
|
$out.=($j_m>9)?$j_m:'0'.$j_m;
|
||||||
|
break;
|
||||||
|
/* Year */
|
||||||
|
case'C':
|
||||||
|
$tmp=(int)($j_y/100);
|
||||||
|
$out.=($tmp>9)?$tmp:'0'.$tmp;
|
||||||
|
break;
|
||||||
|
case'g':
|
||||||
|
$jdw=($date[6]==6)?0:$date[6]+1;
|
||||||
|
$dny=364+$kab-$doy;
|
||||||
|
$out.=substr(($jdw>($doy+3) and $doy<3)?$j_y-1:(((3-$dny)>$jdw and $dny<3)?$j_y+1:$j_y),2,2);
|
||||||
|
break;
|
||||||
|
case'G':
|
||||||
|
$jdw=($date[6]==6)?0:$date[6]+1;
|
||||||
|
$dny=364+$kab-$doy;
|
||||||
|
$out.=($jdw>($doy+3) and $doy<3)?$j_y-1:(((3-$dny)>$jdw and $dny<3)?$j_y+1:$j_y);
|
||||||
|
break;
|
||||||
|
case'y':
|
||||||
|
$out.=substr($j_y,2,2);
|
||||||
|
break;
|
||||||
|
case'Y':
|
||||||
|
$out.=$j_y;
|
||||||
|
break;
|
||||||
|
/* Time */
|
||||||
|
case'H':
|
||||||
|
$out.=$date[1];
|
||||||
|
break;
|
||||||
|
case'I':
|
||||||
|
$out.=$date[0];
|
||||||
|
break;
|
||||||
|
case'l':
|
||||||
|
$out.=($date[0]>9)?$date[0]:' '.(int)$date[0];
|
||||||
|
break;
|
||||||
|
case'M':
|
||||||
|
$out.=$date[2];
|
||||||
|
break;
|
||||||
|
case'p':
|
||||||
|
$out.=($date[1]<12)?'قبل از ظهر':'بعد از ظهر';
|
||||||
|
break;
|
||||||
|
case'P':
|
||||||
|
$out.=($date[1]<12)?'ق.ظ':'ب.ظ';
|
||||||
|
break;
|
||||||
|
case'r':
|
||||||
|
$out.=$date[0].':'.$date[2].':'.$date[5].' '.(($date[1]<12)?'قبل از ظهر':'بعد از ظهر');
|
||||||
|
break;
|
||||||
|
case'R':
|
||||||
|
$out.=$date[1].':'.$date[2];
|
||||||
|
break;
|
||||||
|
case'S':
|
||||||
|
$out.=$date[5];
|
||||||
|
break;
|
||||||
|
case'T':
|
||||||
|
$out.=$date[1].':'.$date[2].':'.$date[5];
|
||||||
|
break;
|
||||||
|
case'X':
|
||||||
|
$out.=$date[0].':'.$date[2].':'.$date[5];
|
||||||
|
break;
|
||||||
|
case'z':
|
||||||
|
$out.=date('O',$ts);
|
||||||
|
break;
|
||||||
|
case'Z':
|
||||||
|
$out.=date('T',$ts);
|
||||||
|
break;
|
||||||
|
/* Time and Date Stamps */
|
||||||
|
case'c':
|
||||||
|
$key=$this->jdate_words(array('rh'=>$date[6],'mm'=>$j_m));
|
||||||
|
$out.=$date[1].':'.$date[2].':'.$date[5].' '.date('P',$ts).' '.$key['rh'].'، '.$j_d.' '.$key['mm'].' '.$j_y;
|
||||||
|
break;
|
||||||
|
case'D':
|
||||||
|
$out.=substr($j_y,2,2).'/'.(($j_m>9)?$j_m:'0'.$j_m).'/'.(($j_d<10)?'0'.$j_d:$j_d);
|
||||||
|
break;
|
||||||
|
case'F':
|
||||||
|
$out.=$j_y.'-'.(($j_m>9)?$j_m:'0'.$j_m).'-'.(($j_d<10)?'0'.$j_d:$j_d);
|
||||||
|
break;
|
||||||
|
case's':
|
||||||
|
$out.=$ts;
|
||||||
|
break;
|
||||||
|
case'x':
|
||||||
|
$out.=substr($j_y,2,2).'/'.(($j_m>9)?$j_m:'0'.$j_m).'/'.(($j_d<10)?'0'.$j_d:$j_d);
|
||||||
|
break;
|
||||||
|
/* Miscellaneous */
|
||||||
|
case'n':
|
||||||
|
$out.="\n";
|
||||||
|
break;
|
||||||
|
case't':
|
||||||
|
$out.="\t";
|
||||||
|
break;
|
||||||
|
case'%':
|
||||||
|
$out.='%';
|
||||||
|
break;
|
||||||
|
default:$out.=$sub;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return($tr_num!='en')?tr_num($out,'fa','.'):$out;
|
||||||
|
}
|
||||||
|
/* F */
|
||||||
|
public function jmktime($h='',$m='',$s='',$jm='',$jd='',$jy='',$none='',$timezone='Asia/Tehran'){
|
||||||
|
if($timezone!='local')date_default_timezone_set($timezone);
|
||||||
|
if($h===''){
|
||||||
|
return time();
|
||||||
|
}else{
|
||||||
|
list($h,$m,$s,$jm,$jd,$jy)=explode('_',$this->tr_num($h.'_'.$m.'_'.$s.'_'.$jm.'_'.$jd.'_'.$jy));
|
||||||
|
if($m===''){
|
||||||
|
return mktime($h);
|
||||||
|
}else{
|
||||||
|
if($s===''){
|
||||||
|
return mktime($h,$m);
|
||||||
|
}else{
|
||||||
|
if($jm===''){
|
||||||
|
return mktime($h,$m,$s);
|
||||||
|
}else{
|
||||||
|
$jdate=explode('_',$this->jdate('Y_j','','',$timezone,'en'));
|
||||||
|
if($jd===''){
|
||||||
|
list($gy,$gm,$gd)=$this->jalali_to_gregorian($jdate[0],$jm,$jdate[1]);
|
||||||
|
return mktime($h,$m,$s,$gm);
|
||||||
|
}else{
|
||||||
|
if($jy===''){
|
||||||
|
list($gy,$gm,$gd)=$this->jalali_to_gregorian($jdate[0],$jm,$jd);
|
||||||
|
return mktime($h,$m,$s,$gm,$gd);
|
||||||
|
}else{
|
||||||
|
list($gy,$gm,$gd)=$this->jalali_to_gregorian($jy,$jm,$jd);
|
||||||
|
return mktime($h,$m,$s,$gm,$gd,$gy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* F */
|
||||||
|
public function jgetdate($timestamp='',$none='',$timezone='Asia/Tehran',$tn='en'){
|
||||||
|
$ts=($timestamp==='')?time():$this->tr_num($timestamp);
|
||||||
|
$jdate=explode('_',jdate('F_G_i_j_l_n_s_w_Y_z',$ts,'',$timezone,$tn));
|
||||||
|
return array(
|
||||||
|
'seconds'=>$this->tr_num((int)$this->tr_num($jdate[6]),$tn),
|
||||||
|
'minutes'=>$this->tr_num((int)$this->tr_num($jdate[2]),$tn),
|
||||||
|
'hours'=>$jdate[1],
|
||||||
|
'mday'=>$jdate[3],
|
||||||
|
'wday'=>$jdate[7],
|
||||||
|
'mon'=>$jdate[5],
|
||||||
|
'year'=>$jdate[8],
|
||||||
|
'yday'=>$jdate[9],
|
||||||
|
'weekday'=>$jdate[4],
|
||||||
|
'month'=>$jdate[0],
|
||||||
|
0=>$this->tr_num($ts,$tn)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
/* F */
|
||||||
|
public function jcheckdate($jm,$jd,$jy){
|
||||||
|
list($jm,$jd,$jy)=explode('_',$this->tr_num($jm.'_'.$jd.'_'.$jy));
|
||||||
|
$l_d=($jm==12)?((((($jy%33)%4)-1)==((int)(($jy%33)*0.05)))?30:29):31-(int)($jm/6.5);
|
||||||
|
return($jm>12 or $jd>$l_d or $jm<1 or $jd<1 or $jy<1)?false:true;
|
||||||
|
}
|
||||||
|
/* F */
|
||||||
|
public function tr_num($str,$mod='en',$mf='٫'){
|
||||||
|
$num_a=array('0','1','2','3','4','5','6','7','8','9','.');
|
||||||
|
$key_a=array('۰','۱','۲','۳','۴','۵','۶','۷','۸','۹',$mf);
|
||||||
|
return($mod=='fa')?str_replace($num_a,$key_a,$str):str_replace($key_a,$num_a,$str);
|
||||||
|
}
|
||||||
|
/* F */
|
||||||
|
public function jdate_words($array,$mod=''){
|
||||||
|
foreach($array as $type=>$num){
|
||||||
|
$num=(int)$this->tr_num($num);
|
||||||
|
switch($type){
|
||||||
|
case'ss':
|
||||||
|
$sl=strlen($num);
|
||||||
|
$xy3=substr($num,2-$sl,1);
|
||||||
|
$h3=$h34=$h4='';
|
||||||
|
if($xy3==1){
|
||||||
|
$p34='';
|
||||||
|
$k34=array('ده','یازده','دوازده','سیزده','چهارده','پانزده','شانزده','هفده','هجده','نوزده');
|
||||||
|
$h34=$k34[substr($num,2-$sl,2)-10];
|
||||||
|
}else{
|
||||||
|
$xy4=substr($num,3-$sl,1);
|
||||||
|
$p34=($xy3==0 or $xy4==0)?'':' و ';
|
||||||
|
$k3=array('','','بیست','سی','چهل','پنجاه','شصت','هفتاد','هشتاد','نود');
|
||||||
|
$h3=$k3[$xy3];
|
||||||
|
$k4=array('','یک','دو','سه','چهار','پنج','شش','هفت','هشت','نه');
|
||||||
|
$h4=$k4[$xy4];
|
||||||
|
}
|
||||||
|
$array[$type]=(($num>99)?str_replace(array('12','13','14','19','20')
|
||||||
|
,array('هزار و دویست','هزار و سیصد','هزار و چهارصد','هزار و نهصد','دوهزار')
|
||||||
|
,substr($num,0,2)).((substr($num,2,2)=='00')?'':' و '):'').$h3.$p34.$h34.$h4;
|
||||||
|
break;
|
||||||
|
case'mm':
|
||||||
|
$key=array('فروردین','اردیبهشت','خرداد','تیر','مرداد','شهریور','مهر','آبان','آذر','دی','بهمن','اسفند');
|
||||||
|
$array[$type]=$key[$num-1];
|
||||||
|
break;
|
||||||
|
case'rr':
|
||||||
|
$key=array('یک','دو','سه','چهار','پنج','شش','هفت','هشت','نه','ده','یازده','دوازده','سیزده'
|
||||||
|
,'چهارده','پانزده','شانزده','هفده','هجده','نوزده','بیست','بیست و یک','بیست و دو','بیست و سه'
|
||||||
|
,'بیست و چهار','بیست و پنج','بیست و شش','بیست و هفت','بیست و هشت','بیست و نه','سی','سی و یک');
|
||||||
|
$array[$type]=$key[$num-1];
|
||||||
|
break;
|
||||||
|
case'rh':
|
||||||
|
$key=array('یکشنبه','دوشنبه','سه شنبه','چهارشنبه','پنجشنبه','جمعه','شنبه');
|
||||||
|
$array[$type]=$key[$num];
|
||||||
|
break;
|
||||||
|
case'sh':
|
||||||
|
$key=array('مار','اسب','گوسفند','میمون','مرغ','سگ','خوک','موش','گاو','پلنگ','خرگوش','نهنگ');
|
||||||
|
$array[$type]=$key[$num%12];
|
||||||
|
break;
|
||||||
|
case'mb':
|
||||||
|
$key=array('حمل','ثور','جوزا','سرطان','اسد','سنبله','میزان','عقرب','قوس','جدی','دلو','حوت');
|
||||||
|
$array[$type]=$key[$num-1];
|
||||||
|
break;
|
||||||
|
case'ff':
|
||||||
|
$key=array('بهار','تابستان','پاییز','زمستان');
|
||||||
|
$array[$type]=$key[(int)($num/3.1)];
|
||||||
|
break;
|
||||||
|
case'km':
|
||||||
|
$key=array('فر','ار','خر','تی','مر','شه','مه','آب','آذ','دی','به','اس');
|
||||||
|
$array[$type]=$key[$num-1];
|
||||||
|
break;
|
||||||
|
case'kh':
|
||||||
|
$key=array('ی','د','س','چ','پ','ج','ش');
|
||||||
|
$array[$type]=$key[$num];
|
||||||
|
break;
|
||||||
|
default:$array[$type]=$num;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return($mod==='')?$array:implode($mod,$array);
|
||||||
|
}
|
||||||
|
/** Gregorian & Jalali (Hijri_Shamsi,Solar) date converter Functions
|
||||||
|
Author: JDF.SCR.IR =>> Download Full Version : http://jdf.scr.ir/jdf
|
||||||
|
License: GNU/LGPL _ Open Source & Free _ Version: 2.70 : [2017=1395]
|
||||||
|
--------------------------------------------------------------------
|
||||||
|
1461 = 365*4 + 4/4 & 146097 = 365*400 + 400/4 - 400/100 + 400/400
|
||||||
|
12053 = 365*33 + 32/4 & 36524 = 365*100 + 100/4 - 100/100 */
|
||||||
|
/* F */
|
||||||
|
public function gregorian_to_jalali($gy,$gm,$gd,$mod=''){
|
||||||
|
list($gy,$gm,$gd)=explode('_',$this->tr_num($gy.'_'.$gm.'_'.$gd));/* <= Extra :اين سطر ، جزء تابع اصلي نيست */
|
||||||
|
$g_d_m=array(0,31,59,90,120,151,181,212,243,273,304,334);
|
||||||
|
if($gy > 1600){
|
||||||
|
$jy=979;
|
||||||
|
$gy-=1600;
|
||||||
|
}else{
|
||||||
|
$jy=0;
|
||||||
|
$gy-=621;
|
||||||
|
}
|
||||||
|
$gy2=($gm > 2)?($gy+1):$gy;
|
||||||
|
$days=(365*$gy) +((int)(($gy2+3)/4)) -((int)(($gy2+99)/100)) +((int)(($gy2+399)/400)) -80 +$gd +$g_d_m[$gm-1];
|
||||||
|
$jy+=33*((int)($days/12053));
|
||||||
|
$days%=12053;
|
||||||
|
$jy+=4*((int)($days/1461));
|
||||||
|
$days%=1461;
|
||||||
|
$jy+=(int)(($days-1)/365);
|
||||||
|
if($days > 365)$days=($days-1)%365;
|
||||||
|
if($days < 186){
|
||||||
|
$jm=1+(int)($days/31);
|
||||||
|
$jd=1+($days%31);
|
||||||
|
}else{
|
||||||
|
$jm=7+(int)(($days-186)/30);
|
||||||
|
$jd=1+(($days-186)%30);
|
||||||
|
}
|
||||||
|
return($mod==='')?array($jy,$jm,$jd):$jy .$mod .$jm .$mod .$jd;
|
||||||
|
}
|
||||||
|
/* F */
|
||||||
|
public function jalali_to_gregorian($jy,$jm,$jd,$mod=''){
|
||||||
|
list($jy,$jm,$jd)=explode('_',$this->tr_num($jy.'_'.$jm.'_'.$jd));/* <= Extra :اين سطر ، جزء تابع اصلي نيست */
|
||||||
|
if($jy > 979){
|
||||||
|
$gy=1600;
|
||||||
|
$jy-=979;
|
||||||
|
}else{
|
||||||
|
$gy=621;
|
||||||
|
}
|
||||||
|
$days=(365*$jy) +(((int)($jy/33))*8) +((int)((($jy%33)+3)/4)) +78 +$jd +(($jm<7)?($jm-1)*31:(($jm-7)*30)+186);
|
||||||
|
$gy+=400*((int)($days/146097));
|
||||||
|
$days%=146097;
|
||||||
|
if($days > 36524){
|
||||||
|
$gy+=100*((int)(--$days/36524));
|
||||||
|
$days%=36524;
|
||||||
|
if($days >= 365)$days++;
|
||||||
|
}
|
||||||
|
$gy+=4*((int)(($days)/1461));
|
||||||
|
$days%=1461;
|
||||||
|
$gy+=(int)(($days-1)/365);
|
||||||
|
if($days > 365)$days=($days-1)%365;
|
||||||
|
$gd=$days+1;
|
||||||
|
foreach(array(0,31,((($gy%4==0) and ($gy%100!=0)) or ($gy%400==0))?29:28 ,31,30,31,30,31,31,30,31,30,31) as $gm=>$v){
|
||||||
|
if($gd <= $v)break;
|
||||||
|
$gd-=$v;
|
||||||
|
}
|
||||||
|
return($mod==='')?array($gy,$gm,$gd):$gy .$mod .$gm .$mod .$gd;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function pastTime($time): string
|
||||||
|
{
|
||||||
|
|
||||||
|
$time = time() - $time; // to get the time since that moment
|
||||||
|
$tokens = array (
|
||||||
|
31536000 => 'سال',
|
||||||
|
2592000 => 'ماه',
|
||||||
|
604800 => 'هفته',
|
||||||
|
86400 => 'روز',
|
||||||
|
3600 => 'ساعت',
|
||||||
|
60 => 'دقیقه',
|
||||||
|
1 => 'ثانیه'
|
||||||
|
);
|
||||||
|
foreach ($tokens as $unit => $text) {
|
||||||
|
if ($time < $unit) continue;
|
||||||
|
$numberOfUnits = floor($time / $unit);
|
||||||
|
return $numberOfUnits.' '.$text . ' قبل ';
|
||||||
|
}
|
||||||
|
return 'چند ثانیه قبل';
|
||||||
|
}
|
||||||
|
}
|
101
src/Service/twigFunctions.php
Normal file
101
src/Service/twigFunctions.php
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
namespace App\Service;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Entity\ChangeReport;
|
||||||
|
use App\Entity\Settings;
|
||||||
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
use Symfony\Component\HttpFoundation\RequestStack;
|
||||||
|
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
|
||||||
|
|
||||||
|
class twigFunctions
|
||||||
|
{
|
||||||
|
private EntityManagerInterface $em;
|
||||||
|
|
||||||
|
protected $request;
|
||||||
|
protected RequestStack $requestStack;
|
||||||
|
|
||||||
|
function __construct(
|
||||||
|
EntityManagerInterface $entityManager,
|
||||||
|
RequestStack $request
|
||||||
|
)
|
||||||
|
{
|
||||||
|
$this->request = $request->getCurrentRequest();
|
||||||
|
$this->em = $entityManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function md5($val){
|
||||||
|
return md5($val);
|
||||||
|
}
|
||||||
|
public function gravatarHash($email){
|
||||||
|
return md5( strtolower( trim( $email) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
public function dayToNow($time){
|
||||||
|
|
||||||
|
$time = $time - time(); // to get the time since that moment
|
||||||
|
$tokens = array (
|
||||||
|
86400 => 'روز',
|
||||||
|
2592000 => 'ماه'
|
||||||
|
);
|
||||||
|
foreach ($tokens as $unit => $text) {
|
||||||
|
if ($time < $unit) continue;
|
||||||
|
return floor($time / $unit) . $text;
|
||||||
|
}
|
||||||
|
return 'چند ساعت ';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function pastTime($time){
|
||||||
|
|
||||||
|
$time = time() - $time; // to get the time since that moment
|
||||||
|
$tokens = array (
|
||||||
|
31536000 => 'سال',
|
||||||
|
2592000 => 'ماه',
|
||||||
|
604800 => 'هفته',
|
||||||
|
86400 => 'روز',
|
||||||
|
3600 => 'ساعت',
|
||||||
|
60 => 'دقیقه',
|
||||||
|
1 => 'ثانیه'
|
||||||
|
);
|
||||||
|
foreach ($tokens as $unit => $text) {
|
||||||
|
if ($time < $unit) continue;
|
||||||
|
$numberOfUnits = floor($time / $unit);
|
||||||
|
return $numberOfUnits.' '.$text . ' قبل ';
|
||||||
|
}
|
||||||
|
return 'چند ثانیه قبل';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function pastHash($hash){
|
||||||
|
$tokens = array (
|
||||||
|
1024 *1024 *1024 *1024 *1024 => 'اگزاهش',
|
||||||
|
1024 *1024 *1024 *1024 => 'پتاهش',
|
||||||
|
1024 *1024 *1024 => 'تراهش',
|
||||||
|
1024 *1024 => 'گیگاهش',
|
||||||
|
1024 => 'مگاهش',
|
||||||
|
1 => 'کیلوهش',
|
||||||
|
);
|
||||||
|
foreach ($tokens as $unit => $text) {
|
||||||
|
if ($hash < $unit) continue;
|
||||||
|
$numberOfUnits = floor($hash / $unit);
|
||||||
|
return $numberOfUnits.' '.$text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function systemSettings(){
|
||||||
|
return $this->em->getRepository(Settings::class)->findAll()[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCurrentUrl(){
|
||||||
|
return $this->request->getUri();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getctime($timestamp):string{
|
||||||
|
return date('c', $timestamp);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
20
templates/general/sitemap.html.twig
Normal file
20
templates/general/sitemap.html.twig
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<urlset
|
||||||
|
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
|
||||||
|
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
|
||||||
|
<!-- created with Free Online Sitemap Generator www.xml-sitemaps.com -->
|
||||||
|
<url>
|
||||||
|
<loc>{{ absolute_url(path('app_home')) }}</loc>
|
||||||
|
<lastmod>2025-01-09T06:58:03+00:00</lastmod>
|
||||||
|
<priority>1.00</priority>
|
||||||
|
</url>
|
||||||
|
{% for post in posts %}
|
||||||
|
{% if post.cat.code == 'plain' %}
|
||||||
|
<url>
|
||||||
|
<loc>{{ absolute_url(path('app_page',{'url':post.url})) }}</loc>
|
||||||
|
<lastmod>{{ twigFunctions.getctime(post.dateSubmit) }}</lastmod>
|
||||||
|
<priority>1.00</priority>
|
||||||
|
</url>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</urlset>
|
Loading…
Reference in a new issue