File "when.php"
Full path: /home/argothem/www/organecyberpresse/plugins/auto/newsletters/v3.0.1/inc/when.php
File size: 5.03 KB
MIME-type: text/x-php
Charset: 8 bit
<?php
/**
* Plugin Newsletters
* (c) 2012 Cedric Morin
* Licence GNU/GPL
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
/**
* Recuperer la prochaine occurence d'une repetition
* (occurence aprs la date $prev si fournie)
*
* @param string $date_start
* @param string $rule
* @param string $prev
* @return string
*/
function when_rule_to_next_date($date_start,$rule,$prev=''){
include_spip("lib/when/src/When");
include_spip("lib/when/src/Valid");
try {
$r = new When\When();
$r->startDate(new DateTime($date_start))->rrule($rule);
if (!$prev) {
$prev = $date_start;
}
while ($next=$r->getNextOccurrence(new DateTime($prev))
AND $prev AND strtotime($prev)>=strtotime($next->format("Y-m-d H:i:s")));
if ($next){
return $next->format("Y-m-d H:i:s");
}
return '';
}
catch (Exception $e){
return $e->getMessage();
}
}
/**
* Afficher en texte clair une regle de repetition
* @param string $rule
* @param string $sep
* @return string
*/
function when_rule_to_texte($rule, $sep=", "){
$r = when_rule_ro_array($rule);
$texte = array();
// FREQ + INTERVAL
// array('SECONDLY', 'MINUTELY', 'HOURLY', 'DAILY', 'WEEKLY', 'MONTHLY', 'YEARLY');
if (isset($r['FREQ'])){
$interval = (isset($r['INTERVAL'])?$r['INTERVAL']:1);
$chaine = "when:info_freq_".$r['FREQ'];
$texte[] = singulier_ou_pluriel($interval,$chaine,$chaine."_nb");
}
// TODO : "BYSETPOS"
if (isset($r['BYWEEKNO']))
$texte[] = singulier_ou_pluriel($r['BYWEEKNO'],"when:info_byweek_1","when:info_byweek_nb");
if (isset($r['WKST']))
$texte[] = when_wkst_to_texte($r['WKST']);
if (isset($r['BYDAY']))
$texte[] = when_byday_to_texte($r['BYDAY']);
if (isset($r['BYMONTHDAY']))
$texte[] = when_bymonthday_to_texte($r['BYMONTHDAY']);
if (isset($r['BYMONTH']))
$texte[] = when_bymonth_to_texte($r['BYMONTH']);
if (isset($r['BYYEARDAY']))
$texte[] = when_byyearday_to_texte($r['BYYEARDAY']);
if (isset($r['COUNT']) AND $r['COUNT']>1)
$texte[] = singulier_ou_pluriel($r['COUNT'],"when:info_1_fois","when:info_nb_fois");
if (isset($r['UNTIL']) AND $r['UNTIL']){
$texte[] = _T('when:info_until_date',array('date'=>affdate(date('Y-m-d H:i:s',strtotime($r['UNTIL'])))));
}
$texte = array_filter($texte);
return implode($sep,$texte);
}
/**
* Transformer une rule texte en tableau constitue de chacun de ses arguments
* @param string $rule_string
* @return array
*/
function when_rule_ro_array($rule_string){
$licites = array("INTERVAL","FREQ","BYWEEKNO","WKST","BYDAY","BYMONTHDAY","BYMONTH","BYYEARDAY","COUNT","UNTIL","BYSETPOS");
$r = array();
// strip off a trailing semi-colon
$rule_string = trim($rule_string, ";");
$parts = explode(";", $rule_string);
foreach($parts as $part) {
list($rule, $param) = explode("=", $part);
if (in_array($rule,$licites))
$r[$rule] = $param;
}
return $r;
}
/**
* WKST en texte clair
* @param string $wkst
* @return string
*/
function when_wkst_to_texte($wkst){
$day2n = array('SU'=>1, 'MO'=>2, 'TU'=>3, 'WE'=>4, 'TH'=>5, 'FR'=>6, 'SA'=>7);
return "("._T('when:info_wkst_day',array('day'=>_T("date_jour_".$day2n[$wkst]))).")";
}
/**
* BYDAY en texte clair
* @param string $bydays
* @return string
*/
function when_byday_to_texte($bydays){
$day2n = array('SU'=>1, 'MO'=>2, 'TU'=>3, 'WE'=>4, 'TH'=>5, 'FR'=>6, 'SA'=>7);
$texte = array();
$bydays = explode(',',$bydays);
foreach ($bydays as $byday){
$day = substr($byday,-2);
$day = _T("date_jour_".$day2n[$day]);
$by = intval($byday);
if ($by){
if ($by<0) $by = "moins_".(-$by);
$texte[] = _T('when:info_byday_'.$by.'_day',array('day'=>$day));
}
else {
$texte[] = _T('when:info_byday_day',array('day'=>$day));
}
}
return implode(", ",$texte);
}
/**
* BYMONTHDAY en texte clair
* @param string $bydays
* @return string
*/
function when_bymonthday_to_texte($bydays){
return when_byXday_to_texte($bydays, 'month');
}
/**
* BYYEARDAY en texte clair
* @param $bydays
* @return string
*/
function when_byyearday_to_texte($bydays){
return when_byXday_to_texte($bydays, 'year');
}
/**
* function support pour BYMONTHDAY/BYYEARDAY
* @param string $bydays
* @param string $x
* @return string
*/
function when_byXday_to_texte($bydays, $x='month'){
$texte = array();
$bydays = explode(',',$bydays);
foreach ($bydays as $byday){
if ($byday<0){
if ($byday==2)
$texte[] = _T('when:info_by'.$x.'day_moins_2');
else
$texte[] = singulier_ou_pluriel($byday,'when:info_by'.$x.'day_moins_1','when:info_by'.$x.'day_moins_nb');
}
else {
$texte[] = singulier_ou_pluriel($byday,'when:info_by'.$x.'day_1','when:info_by'.$x.'day_nb');
}
}
return implode(", ",$texte);
}
/**
* BYMONTH en texte clair
* @param $bymonths
* @return mixed|string
*/
function when_bymonth_to_texte($bymonths){
$months = array();
$bymonths = explode(",",$bymonths);
foreach ($bymonths as $bymonth){
$months[] = _T('date_mois_'.$bymonth);
}
$nb = count($months);
$months = implode(', ',$months);
if ($nb==1) return _T('when:info_bymonth_1',array('month'=>$months));
elseif ($nb>1) return _T('when:info_bymonth_nb',array('months'=>$months));
return "";
}