xref: /plugin/strata/types/date.php (revision 5153720fcc1dd2b6e63035d45f7c2bc32e429371)
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