Smarty
[ class tree: Smarty ] [ index: Smarty ] [ all elements ]

Source for file modifier.reltime.php

Documentation is available at modifier.reltime.php

  1. <?php
  2. /**
  3.  * Smarty plugin
  4.  * @package Smarty
  5.  * @subpackage plugins
  6.  */
  7.  
  8. /**
  9.  * smarty_modifier_reltime
  10.  */
  11. function smarty_modifier_reltime( $pTimeStamp, $pMode = 'long', $pFallback = 'bit_short_datetime' ) {
  12.     global $gBitSystem, $gBitSmarty;
  13.  
  14.     // if this feature is not desired, we simply don't use it.
  15.     if( !$gBitSystem->isFeatureActive( 'site_display_reltime' ) ) {
  16.         $gBitSmarty->loadPlugin( "smarty_modifier_$pFallback" );
  17.         $pFallback = "smarty_modifier_$pFallback";
  18.         return $pFallback( $pTimeStamp );
  19.     }
  20.  
  21.     $min   = 60;
  22.     $hour  = $min  * 60;
  23.     $day   = $hour * 24;
  24.     $week  = $day  * 7;
  25.  
  26.     $strf  = "H:i";
  27.  
  28.     if( !is_numeric( $pTimeStamp ) ) {
  29.         return $pTimeStamp;
  30.     }
  31.  
  32.     $delta = $gBitSystem->mServerTimestamp->getUTCTime() - $pTimeStamp;
  33.  
  34.     if( $delta < 0 ) {
  35.         $delta = -$delta;
  36.         return tra( "In the future" ).": ";
  37.     }
  38.  
  39.     if( $delta < 1 ) {
  40.         // seconds
  41.         return tra( "within the last second" );
  42.     } elseif( $delta < $min ) {
  43.         // minutes
  44.         return tra( "within the last minute" );
  45.     } elseif( $delta < $hour ) {
  46.         // hours
  47.         if( $delta < $min * 2 ) {
  48.             return tra( "one minute ago" );
  49.         } else {
  50.             return round( $delta / $min )." ".tra( "minutes ago" );
  51.         }
  52.     } elseif( $delta < $day ) {
  53.         // up to a day
  54.         if( $delta < $hour * 1.1 ) {
  55.             return tra( "one hour ago" );
  56.         } elseif( $delta < $day ) {
  57.             $delta_hours = floor( ( $delta - ( floor( $delta / $hour ) * $hour ) ) / $min );
  58.             if( $pMode == 'short' ) {
  59.                 return floor( $delta / $hour )."h {$delta_hours}m ago";
  60.             }
  61.             if( floor( $delta / $hour ) > 1 ){
  62.                 if( $delta_hours > 1 ){
  63.                     return floor( $delta / $hour )." hours {$delta_hours} minutes ago";
  64.                 } else {
  65.                     return floor( $delta / $hour )." hours {$delta_hours} minute ago";
  66.                 }
  67.             } else {
  68.                 if( $delta_hours > 1 ){
  69.                     return floor( $delta / $hour )." hour {$delta_hours} minutes ago";
  70.                 } else {
  71.                     return floor( $delta / $hour )." hour {$delta_hours} minute ago";
  72.                 }
  73.             }
  74.  
  75.         } else {
  76.  
  77.             return round( $delta / $hour )." ".tra( "hour(s) ago" );
  78.         }
  79.     } elseif( $delta < $week ) {
  80.         // up to a week
  81.         if( $delta < $day * 2 ) {
  82.             return tra( "Yesterday" )." ".date( $strf, $pTimeStamp );
  83.         } else {
  84.             if( $pMode == 'short' ) {
  85.                 return date( 'D '.$strf, $pTimeStamp );
  86.             }
  87.             return tra( date( 'l', $pTimeStamp ) )." ".date( $strf, $pTimeStamp );
  88.         }
  89.     } else {
  90.         // anything longer than a week
  91.         $gBitSmarty->loadPlugin( "smarty_modifier_$pFallback" );
  92.         $pFallback = "smarty_modifier_$pFallback";
  93.         return $pFallback( $pTimeStamp );
  94.     }
  95. }
  96. ?>

Documentation generated on Wed, 29 Jul 2015 13:57:10 +0000 by phpDocumentor 1.5.0-lsces