1*5153720fSfkaag71<?php 2*5153720fSfkaag71/** 3*5153720fSfkaag71 * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 4*5153720fSfkaag71 * @author Brend Wanders <b.wanders@utwente.nl> 5*5153720fSfkaag71 */ 6*5153720fSfkaag71// must be run within Dokuwiki 7*5153720fSfkaag71if(!defined('DOKU_INC')) die('Meh.'); 8*5153720fSfkaag71 9*5153720fSfkaag71/** 10*5153720fSfkaag71 * The date type. 11*5153720fSfkaag71 */ 12*5153720fSfkaag71class plugin_strata_type_date extends plugin_strata_type { 13*5153720fSfkaag71 function render($mode, &$R, &$triples, $value, $hint) { 14*5153720fSfkaag71 if(is_numeric($value)) { 15*5153720fSfkaag71 // use the hint if available 16*5153720fSfkaag71 $format = $hint ?: 'Y-m-d'; 17*5153720fSfkaag71 18*5153720fSfkaag71 // construct representation 19*5153720fSfkaag71 $date = new DateTime(); 20*5153720fSfkaag71 $date->setTimestamp((int)$value); 21*5153720fSfkaag71 22*5153720fSfkaag71 // render 23*5153720fSfkaag71 $R->cdata($date->format($format)); 24*5153720fSfkaag71 } else { 25*5153720fSfkaag71 $R->cdata($value); 26*5153720fSfkaag71 } 27*5153720fSfkaag71 return true; 28*5153720fSfkaag71 } 29*5153720fSfkaag71 30*5153720fSfkaag71 function normalize($value, $hint) { 31*5153720fSfkaag71 // use hint if available 32*5153720fSfkaag71 // (prefix with '!' te reset all fields to the unix epoch) 33*5153720fSfkaag71 $format = '!'. ($hint ?: 'Y-m-d'); 34*5153720fSfkaag71 35*5153720fSfkaag71 // try and parse the value 36*5153720fSfkaag71 $date = date_create_from_format($format, $value); 37*5153720fSfkaag71 38*5153720fSfkaag71 // handle failure in a non-intrusive way 39*5153720fSfkaag71 if($date === false) { 40*5153720fSfkaag71 return $value; 41*5153720fSfkaag71 } else { 42*5153720fSfkaag71 return $date->getTimestamp(); 43*5153720fSfkaag71 } 44*5153720fSfkaag71 } 45*5153720fSfkaag71 46*5153720fSfkaag71 function getInfo() { 47*5153720fSfkaag71 return array( 48*5153720fSfkaag71 'desc'=>'Stores and displays dates in the YYYY-MM-DD format. The optional hint can give a different format to use.', 49*5153720fSfkaag71 'tags'=>array('numeric'), 50*5153720fSfkaag71 'hint'=>'different date format' 51*5153720fSfkaag71 ); 52*5153720fSfkaag71 } 53*5153720fSfkaag71} 54