%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/widgets/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/widgets/TimeAgo.php |
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2015 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\widgets;
use Yii;
use yii\base\InvalidConfigException;
use yii\base\Widget;
/**
* Shows a given date & time as automatically updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago").
*
* @author luke
*/
class TimeAgo extends Widget
{
/**
* @var string Database (Y-m-d H:i:s) or Unix timestamp
*/
public $timestamp;
/**
* @var int|bool defines if the timeAgo calculation shold only be used within a certain time interval in seconds.
* (default Yii::$app->params['formatter']['timeAgoBefore'])
* @since 1.7
*/
public $timeAgoBefore;
/**
* @var int|bool defines if the time information should only be added within a certain time interval in seconds this
* is only used if the timeAgo calculation is not active. (default Yii::$app->params['formatter']['timeAgoHideTimeAfter'])
* @since 1.7
*/
public $hideTimeAfter;
/**
* @var bool defines if a static render method should be used (default Yii::$app->params['formatter']['timeAgoStatic'])
* @since 1.7
*/
public $staticTimeAgo;
/**
* @var string Additional prefixed information (e.g. "Created on") for title tooltip overlay
* @since 1.9
*/
public $titlePrefixInfo;
/**
* @inheritdoc
*/
public function init()
{
parent::init();
if ($this->hideTimeAfter === null) {
$this->hideTimeAfter = Yii::$app->params['formatter']['timeAgoHideTimeAfter'];
}
if ($this->timeAgoBefore === null) {
$this->timeAgoBefore = Yii::$app->params['formatter']['timeAgoBefore'];
}
if ($this->staticTimeAgo === null) {
$this->staticTimeAgo = Yii::$app->params['formatter']['timeAgoStatic'];
}
// Make sure we get an timestamp in server tz
if (is_numeric($this->timestamp)) {
$this->timestamp = date('Y-m-d H:i:s', $this->timestamp);
}
$this->timestamp = strtotime($this->timestamp);
}
/**
* @inheritdoc
*/
public function run()
{
if ($this->isRenderStatic()) {
return $this->renderStatic();
}
$elapsed = time() - $this->timestamp;
if ($this->isTimeAgoElapsed($elapsed)) {
return $this->renderDateTime($elapsed);
}
return $this->renderTimeAgo();
}
/**
* @return bool
*/
private function isRenderStatic()
{
return $this->staticTimeAgo;
}
/**
* @return string
* @throws InvalidConfigException
*/
private function renderStatic()
{
$isoDate = date("c", $this->timestamp);
return '<time class="tt time timeago" datetime="' . $isoDate . '" title="' . $this->titlePrefixInfo . $this->getFullDateTime() . '">' . Yii::$app->formatter->asRelativeTime($this->timestamp) . '</time>';
}
/**
* @param $elapsed
* @return bool
*/
private function isTimeAgoElapsed($elapsed)
{
return $this->timeAgoBefore !== false && $elapsed >= $this->timeAgoBefore;
}
/**
* Show full date
*
* @param $elapsed
* @return string output of full date and time
* @throws InvalidConfigException
*/
public function renderDateTime($elapsed)
{
// Show time when within specified range
if ($this->isHideTimeAfter($elapsed)) {
$date = Yii::$app->formatter->asDate($this->timestamp, 'medium');
} else {
$date = $this->getFullDateTime();
}
$isoDate = date("c", $this->timestamp);
return '<time class="tt time timeago" datetime="' . $isoDate . '" title="' . $this->titlePrefixInfo . $this->getFullDateTime() . '">' . $date . '</time>';
}
/**
* @param $elapsed
* @return bool
*/
private function isHideTimeAfter($elapsed)
{
return $this->hideTimeAfter !== false && $elapsed >= $this->hideTimeAfter;
}
/**
* Render TimeAgo Javascript
*
* @return string timeago span
* @throws InvalidConfigException
*/
public function renderTimeAgo()
{
// Convert timestamp to ISO 8601
$date = date("c", $this->timestamp);
return '<time class="tt time timeago" data-ui-addition="timeago" datetime="' . $date . '" title="' . $this->titlePrefixInfo . $this->getFullDateTime() . '">' . $this->getFullDateTime() . '</time>';
}
/**
* Returns full date as text
*
* @return string
* @throws InvalidConfigException
*/
protected function getFullDateTime()
{
if (isset(Yii::$app->params['formatter']['timeAgoFullDateCallBack']) && is_callable(Yii::$app->params['formatter']['timeAgoFullDateCallBack'])) {
return call_user_func(Yii::$app->params['formatter']['timeAgoFullDateCallBack'], $this->timestamp);
}
return Yii::$app->formatter->asDate($this->timestamp, 'medium') . ' - ' . Yii::$app->formatter->asTime($this->timestamp, 'short');
}
}