summaryrefslogtreecommitdiff
path: root/smartyplugins/modifier.reltime.php
blob: 7b88c499ff276493d3c8c9432c2f111fc744e80d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
namespace Bitweaver\Plugins;

use Bitweaver\KernelTools;

/**
 * Smarty plugin
 * @package Smarty
 * @subpackage plugins
 */

/**
 * smarty_modifier_reltime
 */
function smarty_modifier_reltime( $pTimeStamp, $pMode = 'long', $pFallback = 'bit_short_datetime' ) {
	global $gBitSystem, $gBitSmarty;

	// if this feature is not desired, we simply don't use it.
	if( !$gBitSystem->isFeatureActive( 'site_display_reltime' ) ) {
//		$gBitSmarty->loadPlugin( "smarty_modifier_$pFallback" );
		$pFallback = "Bitweaver\\Plugins\\smarty_modifier_$pFallback";
		return $pFallback( $pTimeStamp );
	}

	$min   = 60;
	$hour  = $min  * 60;
	$day   = $hour * 24;
	$week  = $day  * 7;

	$strf  = "H:i";

	if( !is_numeric( $pTimeStamp ) ) {
		return $pTimeStamp;
	}

	$delta = $gBitSystem->mServerTimestamp->getUTCTime() - $pTimeStamp;

	if( $delta < 0 ) {
		$delta = -$delta;
		return KernelTools::tra( "In the future" ).": ";
	}

	if( $delta < 1 ) {
		// seconds
		return KernelTools::tra( "within the last second" );
	} elseif( $delta < $min ) {
		// minutes
		return KernelTools::tra( "within the last minute" );
	} elseif( $delta < $hour ) {
		// hours
		if( $delta < $min * 2 ) {
			return KernelTools::tra( "one minute ago" );
		}
			return round( $delta / $min )." ".KernelTools::tra( "minutes ago" );

	} elseif( $delta < $day ) {
		// up to a day
		if( $delta < $hour * 1.1 ) {
			return KernelTools::tra( "one hour ago" );
		} elseif( $delta < $day ) {
			$delta_hours = floor( ( $delta - floor( $delta / $hour ) * $hour ) / $min );
			if( $pMode == 'short' ) {
				return floor( $delta / $hour )."h {$delta_hours}m ago";
			}
			if( floor( $delta / $hour ) > 1 ){
				if( $delta_hours > 1 ){
					return floor( $delta / $hour )." hours {$delta_hours} minutes ago";
				}
					return floor( $delta / $hour )." hours {$delta_hours} minute ago";

			}
				if( $delta_hours > 1 ){
					return floor( $delta / $hour )." hour {$delta_hours} minutes ago";
				}
					return floor( $delta / $hour )." hour {$delta_hours} minute ago";

		}

			return round( $delta / $hour )." ".KernelTools::tra( "hour(s) ago" );

	} elseif( $delta < $week ) {
		// up to a week
		if( $delta < $day * 2 ) {
			return KernelTools::tra( "Yesterday" )." ".date( $strf, $pTimeStamp );
		}
			if( $pMode == 'short' ) {
				return date( 'D '.$strf, $pTimeStamp );
			}
			return KernelTools::tra( date( 'l', $pTimeStamp ) )." ".date( $strf, $pTimeStamp );

	}
		// anything longer than a week
//		$gBitSmarty->loadPlugin( "smarty_modifier_$pFallback" );
		$pFallback = "Bitweaver\\Plugins\\smarty_modifier_$pFallback";
		return $pFallback( $pTimeStamp );

}