Skip to content

Commit

Permalink
chore(settings): custom date formats
Browse files Browse the repository at this point in the history
  • Loading branch information
polonel committed Jan 8, 2019
1 parent 8e2be18 commit 7b16004
Show file tree
Hide file tree
Showing 32 changed files with 297 additions and 102 deletions.
12 changes: 6 additions & 6 deletions src/controllers/api/v1/tickets.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ function buildGraphData(arr, days, callback) {

if (_.isFunction(callback))
return callback(graphData);
else
return graphData;

return graphData;
}

function buildAvgResponse(ticketArray, callback) {
Expand All @@ -71,8 +71,8 @@ function buildAvgResponse(ticketArray, callback) {

if (_.isFunction(callback))
return callback(cbObj);
else
return cbObj;

return cbObj;
}

/**
Expand Down Expand Up @@ -420,8 +420,8 @@ apiTickets.createPublicTicket = function(req, res) {

if (defaultType.value)
return next(null, defaultType.value, group, savedUser);
else
return next('Failed: Invalid Default Ticket Type.');

return next('Failed: Invalid Default Ticket Type.');
});
},

Expand Down
6 changes: 4 additions & 2 deletions src/controllers/api/v1/users.js
Original file line number Diff line number Diff line change
Expand Up @@ -866,8 +866,10 @@ apiUsers.checkEmail = function(req, res) {
UserSchema.getUserByEmail(email, function(err, users) {
if (err) return res.status(400).json({success: false, error: err.message});

if (!_.isNull(users)) return res.json({success: true, exist: true});
else return res.json({success: true, exist: false});
if (!_.isNull(users))
return res.json({success: true, exist: true});

return res.json({success: true, exist: false});
});
};

Expand Down
20 changes: 10 additions & 10 deletions src/controllers/settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ var settingsController = {};

settingsController.content = {};

function initViewContant(view, req) {
function initViewContent(view, req) {
var content = {};
content.title = 'Settings';
content.nav = 'settings';
Expand Down Expand Up @@ -69,71 +69,71 @@ function renderView(res, content) {
settingsController.general = function(req, res) {
if (!checkPerms(req, 'settings:view')) return res.redirect('/');

var content = initViewContant('general', req);
var content = initViewContent('general', req);

renderView(res, content);
};

settingsController.appearance = function(req, res) {
if (!checkPerms(req, 'settings:view')) return res.redirect('/');

var content = initViewContant('appearance', req);
var content = initViewContent('appearance', req);

renderView(res, content);
};

settingsController.ticketSettings = function(req, res) {
if (!checkPerms(req, 'settings:tickets')) return res.redirect('/settings');

var content = initViewContant('tickets', req);
var content = initViewContent('tickets', req);

renderView(res, content);
};

settingsController.mailerSettings = function(req, res) {
if (!checkPerms(req, 'settings:mailer')) return res.redirect('/settings');

var content = initViewContant('mailer', req);
var content = initViewContent('mailer', req);

renderView(res, content);
};

settingsController.notificationsSettings = function(req, res) {
if (!checkPerms(req, 'settings:notifications')) return res.redirect('/settings');

var content = initViewContant('notifications', req);
var content = initViewContent('notifications', req);

renderView(res, content);
};

settingsController.tpsSettings = function(req, res) {
if (!checkPerms(req, 'settings:tps')) return res.redirect('/settings');

var content = initViewContant('tps', req);
var content = initViewContent('tps', req);

renderView(res, content);
};

settingsController.backupSettings = function(req, res) {
if (!checkPerms(req, 'settings:backup')) return res.redirect('/settings');

var content = initViewContant('backup', req);
var content = initViewContent('backup', req);

renderView(res, content);
};

settingsController.legal = function(req, res) {
if (!checkPerms(req, 'settings:legal')) return res.redirect('/settings');

var content = initViewContant('legal', req);
var content = initViewContent('legal', req);

renderView(res, content);
};

settingsController.logs = function(req, res) {
if (!checkPerms(req, 'settings:logs')) return res.redirect('/settings');

var content = initViewContant('logs', req);
var content = initViewContent('logs', req);

var fs = require('fs'),
path = require('path'),
Expand Down
15 changes: 13 additions & 2 deletions src/helpers/hbs/helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,15 @@ require('moment-duration-format');
// The module to be exported
var helpers = {

concat: function(a, b, space, comma) {
if (space && (comma === false || _.isObject(comma)))
return a.toString() + ' ' + b.toString();
else if (comma === true)
return a.toString() + ', ' + b.toString();
else
return a.toString() + b.toString();
},

contains: function (str, pattern, options) {
if (str.indexOf(pattern) !== -1)
return options.fn(this);
Expand Down Expand Up @@ -481,15 +490,17 @@ var helpers = {
return moment.duration(duration, parseFormat).format('Y [year], M [month], d [day], h [hour], m [min]', { trim: 'both'});
},

calendarDate: function(date) {
calendarDate: function(date, fallback) {
if (_.isObject(fallback))
fallback = 'll [at] LT';
moment.updateLocale('en', {
calendar: {
sameDay: '[Today at] LT',
lastDay: '[Yesterday at] LT',
nextDay: '[Tomorrow at] LT',
lastWeek: '[Last] ddd [at] LT',
nextWeek: 'ddd [at] LT',
sameElse: 'L'
sameElse: fallback
}
});
return moment.utc(date).tz(global.timezone).calendar();
Expand Down
58 changes: 41 additions & 17 deletions src/helpers/viewdata/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,38 @@ viewController.getData = function(request, cb) {
return callback();
},
function(callback) {
settingSchema.getSetting('gen:shortDateFormat', function(err, setting) {
if (!err && setting && setting.value)
viewdata.shortDateFormat = setting.value;
else
viewdata.shortDateFormat = 'MM/DD/YYYY';

return callback();
});
async.parallel([
function(done) {
settingSchema.getSetting('gen:timeFormat', function(err, setting) {
if (!err && setting && setting.value)
viewdata.timeFormat = setting.value;
else
viewdata.timeFormat = 'hh:mma';

return done();
});
},
function(done) {
settingSchema.getSetting('gen:shortDateFormat', function(err, setting) {
if (!err && setting && setting.value)
viewdata.shortDateFormat = setting.value;
else
viewdata.shortDateFormat = 'MM/DD/YYYY';

return done();
});
},
function(done) {
settingSchema.getSetting('gen:longDateFormat', function(err, setting) {
if (!err && setting && setting.value)
viewdata.longDateFormat = setting.value;
else
viewdata.longDateFormat = 'MM/DD/YYYY h:mma';

return done();
});
}
], callback);
},
function(callback) {
viewdata.ticketSettings = {};
Expand Down Expand Up @@ -151,16 +175,16 @@ viewController.getData = function(request, cb) {
if (!viewdata.hasCustomFavicon) {
viewdata.favicon = '/img/favicon.ico';
return callback();
} else {
settingSchema.getSetting('gen:customfaviconfilename', function(err, faviconFilename) {
if (!err && faviconFilename && !_.isUndefined(faviconFilename.value))
viewdata.favicon = '/assets/' + faviconFilename.value;
else
viewdata.favicon = '/img/favicon.ico';

return callback();
});
}

settingSchema.getSetting('gen:customfaviconfilename', function(err, faviconFilename) {
if (!err && faviconFilename && !_.isUndefined(faviconFilename.value))
viewdata.favicon = '/assets/' + faviconFilename.value;
else
viewdata.favicon = '/img/favicon.ico';

return callback();
});
});
},
function(callback) {
Expand Down
10 changes: 5 additions & 5 deletions src/middleware/middleware.js
Original file line number Diff line number Diff line change
Expand Up @@ -92,12 +92,12 @@ middleware.redirectIfUser = function(req, res, next) {

middleware.ensurel2Auth = function(req, res, next) {
if (req.session.l2auth === 'totp') {
if (req.user)
{if (req.user.role !== 'user')
if (req.user) {
if (req.user.role !== 'user')
return res.redirect('/dashboard');
else
return res.redirect('/tickets');}
else

return res.redirect('/tickets');
} else
return next();
} else
return res.redirect('/l2auth');
Expand Down
47 changes: 44 additions & 3 deletions src/public/js/angularjs/controllers/settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,10 @@ define([
'moment',
'moment_timezone',
'velocity',
'history'],
'history',
'angularjs/services'],
function(angular, _, $, helpers, ui, UIkit, EasyMDE, moment) {
return angular.module('trudesk.controllers.settings', ['ngSanitize'])
return angular.module('trudesk.controllers.settings', ['ngSanitize', 'trudesk.services.settings'])
.directive('selectize', function($timeout) {
return {
restrict: 'A',
Expand All @@ -44,7 +45,7 @@ define([
}
};
})
.controller('settingsCtrl', function($scope, $http, $timeout, $log, $window) {
.controller('settingsCtrl', function(SettingsService, $scope, $http, $timeout, $log, $window) {
var mdeToolbarItems = [
{
name: 'bold',
Expand Down Expand Up @@ -108,6 +109,11 @@ define([
var privacyPolicyMDE = null;

$scope.init = function() {
// Set using Service due to handlebars escaping backslashes
$scope.timeFormat = SettingsService.getSettings().timeFormat.value;
$scope.shortDateFormat = SettingsService.getSettings().shortDateFormat.value;
$scope.longDateFormat = SettingsService.getSettings().longDateFormat.value;

var $uploadButton = $('#logo-upload-select').parent();
var uploadLogoSettings = {
action: '/settings/general/uploadlogo',
Expand Down Expand Up @@ -540,6 +546,23 @@ define([
});
};

$scope.saveTimeFormatClicked = function() {
$http.put('/api/v1/settings', {
name: 'gen:timeFormat',
value: $scope.timeFormat
}, {
headers: {
'Content-Type': 'application/json'
}
}).then(function successCallback() {
SettingsService.getSettings().timeFormat.value = $scope.timeFormat;
helpers.UI.showSnackbar('Setting Saved.', false);
}, function errorCallback(err) {
helpers.showSnackbar('Error: ' + err, true);
$log.error(err);
});
};

$scope.saveShortDateFormatClicked = function() {
$http.put('/api/v1/settings', {
name: 'gen:shortDateFormat',
Expand All @@ -549,6 +572,24 @@ define([
'Content-Type': 'application/json'
}
}).then(function successCallback() {
SettingsService.getSettings().shortDateFormat.value = $scope.shortDateFormat;
helpers.UI.showSnackbar('Setting Saved.', false);
}, function errorCallback(err) {
helpers.showSnackbar('Error: ' + err, true);
$log.error(err);
});
};

$scope.saveLongDateFormatClicked = function() {
$http.put('/api/v1/settings', {
name: 'gen:longDateFormat',
value: $scope.longDateFormat
}, {
headers: {
'Content-Type': 'application/json'
}
}).then(function successCallback() {
SettingsService.getSettings().longDateFormat.value = $scope.longDateFormat;
helpers.UI.showSnackbar('Setting Saved.', false);
}, function errorCallback(err) {
helpers.showSnackbar('Error: ' + err, true);
Expand Down
2 changes: 1 addition & 1 deletion src/public/js/modules/chat.js
Original file line number Diff line number Diff line change
Expand Up @@ -528,7 +528,7 @@ define('modules/chat',[
html += '</div>';
html += '<div class="chat-box-messages scrollable">';
if (userMeta && userMeta.deletedAt)
html += '<div class="chat-box-deletedAt">Conversation deleted at ' + moment(userMeta.deletedAt).format('MM.D.YY \\at h:mma') + '</div>';
html += '<div class="chat-box-deletedAt">Conversation deleted at ' + moment(userMeta.deletedAt).format(helpers.getShortDateFormat() + ' ' + helpers.getTimeFormat()) + '</div>';
html += '<div class="chat-message-list" data-chat-userid="' + user._id + '">';
html += '</div>';
html += '<div class="user-is-typing-wrapper hide">';
Expand Down
28 changes: 28 additions & 0 deletions src/public/js/modules/helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -1254,13 +1254,41 @@ function($, _, moment, UIkit, CountUp, Waves, Selectize, Snackbar, ROLES, Cookie
return timezone;
};

helpers.getTimeFormat = function() {
if (window.trudeskSettingsService)
return window.trudeskSettingsService.getSettings().timeFormat.value;
else
return 'hh:mma';
};

helpers.getCalendarDate = function(date) {
moment.updateLocale('en', {
calendar: {
sameDay: '[Today at] LT',
lastDay: '[Yesterday at] LT',
nextDay: '[Tomorrow at] LT',
lastWeek: '[Last] ddd [at] LT',
nextWeek: 'ddd [at] LT',
sameElse: helpers.getShortDateFormat()
}
});
return moment.utc(date).tz(this.getTimezone()).calendar();
};

helpers.getShortDateFormat = function() {
if (window.trudeskSettingsService)
return window.trudeskSettingsService.getSettings().shortDateFormat.value;
else
return 'MM/DD/YYYY';
};

helpers.getLongDateFormat = function() {
if (window.trudeskSettingsService)
return window.trudeskSettingsService.getSettings().longDateFormat.value;
else
return 'MM/DD/YYYY h:mma';
};

helpers.formatDate = function(date, format) {
var timezone = this.getTimezone();
if (!timezone)
Expand Down
Loading

0 comments on commit 7b16004

Please sign in to comment.