diff --git a/src/Api/Model/Languageforge/Lexicon/LexProjectModel.php b/src/Api/Model/Languageforge/Lexicon/LexProjectModel.php index 61c0aa0bad..c02579d99c 100644 --- a/src/Api/Model/Languageforge/Lexicon/LexProjectModel.php +++ b/src/Api/Model/Languageforge/Lexicon/LexProjectModel.php @@ -99,6 +99,7 @@ public function getPublicSettings($userId) $settings = parent::getPublicSettings($userId); $settings['currentUserRole'] = $this->users[$userId]->role; $settings['hasSendReceive'] = $this->hasSendReceive(); + $settings['lastSyncedDate'] = $this->lastSyncedDate->asDateTimeInterface()->format(\DateTime::RFC2822); return array_merge($settings, LexBaseViewDto::encode($this->id->asString(), $userId)); } diff --git a/src/angular-app/languageforge/lexicon/js/filters.js b/src/angular-app/languageforge/lexicon/js/filters.js deleted file mode 100644 index ec992c0729..0000000000 --- a/src/angular-app/languageforge/lexicon/js/filters.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -/* Filters */ - -angular.module('lexicon.filters', []) - .filter('orderAsArray', function() { - return function(obj, keyName) { - var result = []; - angular.forEach(obj, function(val, key) { - var newVal = angular.copy(val); - // if keyName defined, include key in val object - if (keyName) { - newVal[keyName] = key; - } - result.push(newVal); - }); - return result; - }; - }) - .filter('relativetime', function() { - return function(timestamp) { - // see http://momentjs.com/docs/ - return moment(timestamp).fromNow(); - }; - }) - ; diff --git a/src/angular-app/languageforge/lexicon/js/lexicon.services.sendReceive.js b/src/angular-app/languageforge/lexicon/js/lexicon.services.sendReceive.js index 7b81ecc711..fb603dc13c 100644 --- a/src/angular-app/languageforge/lexicon/js/lexicon.services.sendReceive.js +++ b/src/angular-app/languageforge/lexicon/js/lexicon.services.sendReceive.js @@ -26,8 +26,8 @@ angular.module('lexicon.services') }; }]) .service('lexSendReceive', ['sessionService', 'silNoticeService', 'lexSendReceiveApi', - '$interval', 'lexEditorDataService', - function (sessionService, notice, sendReceiveApi, $interval, editorData) { + '$interval', 'lexEditorDataService', '$filter', + function (sessionService, notice, sendReceiveApi, $interval, editorData, $filter) { const syncStatusInterval = 3000; // ms const pollUpdateInterval = 32000; // ms const cloneStatusInterval = 3000; // ms @@ -191,7 +191,7 @@ angular.module('lexicon.services') // UI strings corresponding to SRState in the LfMerge state file. // SRStates with an "LF_" prefix are languageforge overrides - this.syncNotice = function syncNotice() { + this.syncNotice = function syncNotice(projectSettings) { if (angular.isUndefined(status)) return; switch (status.SRState) { @@ -204,7 +204,14 @@ angular.module('lexicon.services') return 'Pending'; case 'IDLE': case 'SYNCED': - return 'Synced'; + if (angular.isDefined(projectSettings) && + angular.isDefined(projectSettings.lastSyncedDate) + ) { + return 'Last sync: ' + $filter('relativetime')(projectSettings.lastSyncedDate); + } else { + return 'Synced'; + } + case 'LF_UNSYNCED': return 'Un-synced'; case 'HOLD': diff --git a/src/angular-app/languageforge/lexicon/lexicon.js b/src/angular-app/languageforge/lexicon/lexicon.js index 34a53047fd..becad2b702 100644 --- a/src/angular-app/languageforge/lexicon/lexicon.js +++ b/src/angular-app/languageforge/lexicon/lexicon.js @@ -18,7 +18,6 @@ angular.module('lexicon', 'lexicon.settings', 'lexicon.sync', 'lexicon.services', - 'lexicon.filters', 'pascalprecht.translate' ]) .config(['$stateProvider', '$urlRouterProvider', '$translateProvider', @@ -66,7 +65,6 @@ angular.module('lexicon', var pristineLanguageCode; $scope.project = sessionService.session.project; - $scope.syncNotice = sendReceive.syncNotice; $scope.rights = rights; $scope.rights.showControlBar = function showControlBar() { diff --git a/src/angular-app/languageforge/lexicon/views/sync.html b/src/angular-app/languageforge/lexicon/views/sync.html index 4aa2af2763..5ff0c51bcd 100644 --- a/src/angular-app/languageforge/lexicon/views/sync.html +++ b/src/angular-app/languageforge/lexicon/views/sync.html @@ -7,7 +7,7 @@ data-ng-disabled="disableSyncButton()" data-ng-click="syncProject()"> {{'Send/Receive' | translate}} -
{{syncNotice()}}
+
{{syncNotice(projectSettings)}}
diff --git a/src/angular-app/languageforge/lexicon/views/sync.js b/src/angular-app/languageforge/lexicon/views/sync.js index 37e14921c7..a1780b1e78 100644 --- a/src/angular-app/languageforge/lexicon/views/sync.js +++ b/src/angular-app/languageforge/lexicon/views/sync.js @@ -8,6 +8,7 @@ angular.module('lexicon.sync', ['ui.bootstrap', 'bellows.services', 'palaso.ui.n lexProjectService.setBreadcrumbs('sync', 'Synchronize'); $scope.syncNotice = sendReceive.syncNotice; + $scope.projectSettings = sessionService.session.projectSettings; $scope.showSyncButton = function showSyncButton() { return !sessionService.session.project.isArchived && rights.canEditUsers() &&