diff --git a/app/assets/js/start.js b/app/assets/js/start.js
index 4e22b232..b50d8bef 100644
--- a/app/assets/js/start.js
+++ b/app/assets/js/start.js
@@ -50,6 +50,15 @@ $(function() {
// App setup
window.CachetHQ = {};
+ moment.locale(Global.locale);
+
+ $('abbr.timeago').each(function () {
+ var $el = $(this);
+ $el
+ .livestamp($el.data('timeago'))
+ .popover();
+ });
+
window.CachetHQ.Notifier = function () {
this.notify = function (message, type, options) {
type = (typeof type === 'undefined' || type === 'error') ? 'error' : type;
diff --git a/app/config/app.php b/app/config/app.php
index 0efbe921..539138aa 100644
--- a/app/config/app.php
+++ b/app/config/app.php
@@ -95,6 +95,9 @@ return [
'providers' => [
+ /*
+ * Laravel Framework Service Providers...
+ */
'Illuminate\Foundation\Providers\ArtisanServiceProvider',
'Illuminate\Auth\AuthServiceProvider',
'Illuminate\Cache\CacheServiceProvider',
@@ -120,6 +123,9 @@ return [
'Illuminate\Validation\ValidationServiceProvider',
'Illuminate\View\ViewServiceProvider',
+ /*
+ * Packages Service Providers...
+ */
'Dingo\Api\Provider\ApiServiceProvider',
'GrahamCampbell\Security\SecurityServiceProvider',
'GrahamCampbell\Binput\BinputServiceProvider',
@@ -128,7 +134,11 @@ return [
'Roumen\Feed\FeedServiceProvider',
'Thujohn\Rss\RssServiceProvider',
'Jenssegers\Date\DateServiceProvider',
+ 'McCool\LaravelAutoPresenter\LaravelAutoPresenterServiceProvider',
+ /*
+ * Application Service Providers...
+ */
'CachetHQ\Cachet\Providers\AuthServiceProvider',
'CachetHQ\Cachet\Providers\ConsoleServiceProvider',
'CachetHQ\Cachet\Providers\RepositoryServiceProvider',
diff --git a/app/views/layout/master.blade.php b/app/views/layout/master.blade.php
index 82032641..5101a488 100644
--- a/app/views/layout/master.blade.php
+++ b/app/views/layout/master.blade.php
@@ -46,6 +46,10 @@
@endif
+
diff --git a/app/views/partials/incidents.blade.php b/app/views/partials/incidents.blade.php
index 76152379..07f952d1 100644
--- a/app/views/partials/incidents.blade.php
+++ b/app/views/partials/incidents.blade.php
@@ -14,7 +14,10 @@
{{ $incident->name }}
-
{{ $incident->created_at->diffForHumans() }}
+
+
+
+
@if($incident->hasMessage())
diff --git a/bower.json b/bower.json
index cb6abfb0..328fd280 100644
--- a/bower.json
+++ b/bower.json
@@ -1,18 +1,20 @@
{
- "name": "Cachet",
- "dependencies": {
- "bootstrap-sass-official": "~3.3.1",
- "humane-js": "~3.2.2",
- "ionicons": "~2.0.0",
- "jquery": "~2.1.1",
- "jquery-minicolors": "~2.1.10",
- "jquery-serialize-object": "~2.4.3",
- "lodash": "~2.4.1",
- "messenger": "~1.4.1",
- "Sortable": "~1.0.0",
- "animate-sass": "~0.6.2"
- },
- "resolutions": {
- "jquery": "~2.1.1"
- }
+ "name": "Cachet",
+ "dependencies": {
+ "bootstrap-sass-official": "~3.3.1",
+ "humane-js": "~3.2.2",
+ "ionicons": "~2.0.0",
+ "jquery": "~2.1.1",
+ "jquery-minicolors": "~2.1.10",
+ "jquery-serialize-object": "~2.4.3",
+ "lodash": "~2.4.1",
+ "messenger": "~1.4.1",
+ "Sortable": "~1.0.0",
+ "animate-sass": "~0.6.2",
+ "moment": "~2.8.4",
+ "livestampjs": "~1.1.2"
+ },
+ "resolutions": {
+ "jquery": "~2.1.1"
+ }
}
diff --git a/composer.json b/composer.json
index cbbd2fa9..bbc971c6 100644
--- a/composer.json
+++ b/composer.json
@@ -22,7 +22,8 @@
"roumen/feed": "~2.8",
"thujohn/rss": "~1.0",
"watson/validating": "0.10.*",
- "jenssegers/date": "~2.0"
+ "jenssegers/date": "~2.0",
+ "mccool/laravel-auto-presenter": "~2.2@dev"
},
"require-dev": {
"phpunit/phpunit": "~4.3",
diff --git a/composer.lock b/composer.lock
index 878c4600..4b5b5188 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
- "hash": "50862b080034db5b187b78c30807c1d5",
+ "hash": "b561fa017bd12ef775f7765fe28d8839",
"packages": [
{
"name": "classpreloader/classpreloader",
@@ -1458,6 +1458,60 @@
],
"time": "2014-12-10 16:59:07"
},
+ {
+ "name": "mccool/laravel-auto-presenter",
+ "version": "2.2.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ShawnMcCool/laravel-auto-presenter.git",
+ "reference": "79e1eab2528262e325419e9441967bd390c4b667"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ShawnMcCool/laravel-auto-presenter/zipball/79e1eab2528262e325419e9441967bd390c4b667",
+ "reference": "79e1eab2528262e325419e9441967bd390c4b667",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/events": "4.2.*",
+ "illuminate/pagination": "4.2.*",
+ "illuminate/support": "4.2.*",
+ "illuminate/view": "4.2.*",
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "~0.8",
+ "phpunit/phpunit": "~4.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "McCool\\LaravelAutoPresenter": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "graham@mineuk.com"
+ },
+ {
+ "name": "Shawn McCool",
+ "email": "shawn@heybigname.com"
+ }
+ ],
+ "description": "A system for auto-decorating models with presenter objects.",
+ "keywords": [
+ "eloquent",
+ "laravel",
+ "lpm",
+ "presenter"
+ ],
+ "time": "2015-01-07 21:55:43"
+ },
{
"name": "monolog/monolog",
"version": "1.12.0",
@@ -3792,7 +3846,9 @@
],
"aliases": [],
"minimum-stability": "stable",
- "stability-flags": [],
+ "stability-flags": {
+ "mccool/laravel-auto-presenter": 20
+ },
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
diff --git a/gulpfile.js b/gulpfile.js
index 2c7b610f..833c3245 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -27,6 +27,8 @@ gulp.task('default', function() {
'bower_components/lodash/dist/lodash.js',
'bower_components/messenger/build/js/messenger.js',
'bower_components/Sortable/Sortable.js',
+ 'bower_components/moment/min/moment-with-locales.js',
+ 'bower_components/livestampjs/livestamp.js',
'bower_components/jquery-minicolors/jquery.minicolors.js',
'bower_components/jquery-serialize-object/jquery.serialize-object.js',
'js/app.js',
diff --git a/src/Models/Incident.php b/src/Models/Incident.php
index 4838d2b7..213e5144 100644
--- a/src/Models/Incident.php
+++ b/src/Models/Incident.php
@@ -7,6 +7,7 @@ use Dingo\Api\Transformer\TransformableInterface;
use GrahamCampbell\Markdown\Facades\Markdown;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletingTrait;
+use McCool\LaravelAutoPresenter\PresenterInterface;
use Watson\Validating\ValidatingTrait;
/**
@@ -21,7 +22,7 @@ use Watson\Validating\ValidatingTrait;
* @property \Carbon\Carbon $updated_at
* @property \Carbon\Carbon $deleted_at
*/
-class Incident extends Model implements TransformableInterface
+class Incident extends Model implements TransformableInterface, PresenterInterface
{
use SoftDeletingTrait, ValidatingTrait;
@@ -52,6 +53,16 @@ class Incident extends Model implements TransformableInterface
*/
protected $appends = ['humanStatus'];
+ /**
+ * Get presenter class.
+ *
+ * @return string
+ */
+ public function getPresenter()
+ {
+ return 'CachetHQ\Cachet\Presenters\IncidentPresenter';
+ }
+
/**
* An incident belongs to a component.
*
diff --git a/src/Presenters/IncidentPresenter.php b/src/Presenters/IncidentPresenter.php
new file mode 100644
index 00000000..62b2601f
--- /dev/null
+++ b/src/Presenters/IncidentPresenter.php
@@ -0,0 +1,50 @@
+resource = $incident;
+ }
+
+ /**
+ * Present diff for humans date time.
+ *
+ * @return string
+ */
+ public function created_at_diff()
+ {
+ return (new Date($this->resource->created_at))->diffForHumans();
+ }
+
+ /**
+ * Present formated date time.
+ *
+ * @return string
+ */
+ public function created_at_formated()
+ {
+ return ucfirst((new Date($this->resource->created_at))->format('l j F Y H:i:s'));
+ }
+
+ /**
+ * Present formated date time.
+ *
+ * @return string
+ */
+ public function created_at_iso()
+ {
+ return $this->resource->created_at->toISO8601String();
+ }
+}