From e0cfc117c7bd9025d3594377e26c43e47506d841 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Thu, 27 Aug 2015 17:32:33 -0400 Subject: [PATCH 01/67] changing function signature for messaging.getMessages @julianlam should this be moved to 0.8.0? --- src/controllers/accounts.js | 7 ++++++- src/messaging.js | 15 ++++++++++----- src/socket.io/modules.js | 7 ++++++- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/controllers/accounts.js b/src/controllers/accounts.js index cafcabafcb..5023d24d55 100644 --- a/src/controllers/accounts.js +++ b/src/controllers/accounts.js @@ -623,7 +623,12 @@ accountsController.getChats = function(req, res, next) { async.parallel({ toUser: async.apply(user.getUserFields, toUid, ['uid', 'username']), - messages: async.apply(messaging.getMessages, req.user.uid, toUid, 'recent', false), + messages: async.apply(messaging.getMessages, { + fromuid: req.user.uid, + touid: toUid, + since: 'recent', + isNew: false + }), allowed: async.apply(messaging.canMessage, req.user.uid, toUid) }, next); } diff --git a/src/messaging.js b/src/messaging.js index bb1ce85182..fbb61199ca 100644 --- a/src/messaging.js +++ b/src/messaging.js @@ -96,11 +96,16 @@ var db = require('./database'), }); }; - Messaging.getMessages = function(fromuid, touid, since, isNew, callback) { - var uids = sortUids(fromuid, touid); + Messaging.getMessages = function(params, callback) { + var fromuid = params.fromuid, + touid = params.touid, + since = params.since, + isNew = params.isNew, + count = params.count || parseInt(meta.config.chatMessageInboxSize, 10) || 250; + + var uids = sortUids(fromuid, touid), + min = Date.now() - (terms[since] || terms.day); - var count = parseInt(meta.config.chatMessageInboxSize, 10) || 250; - var min = Date.now() - (terms[since] || terms.day); if (since === 'recent') { count = 49; min = 0; @@ -166,7 +171,7 @@ var db = require('./database'), message.newSet = true; } else if (index > 0 && message.fromuid !== messages[index-1].fromuid) { // If the previous message was from the other person, this is also a new set - message.newSet = true + message.newSet = true; } return message; diff --git a/src/socket.io/modules.js b/src/socket.io/modules.js index 95380a4b49..9ceecf1cb8 100644 --- a/src/socket.io/modules.js +++ b/src/socket.io/modules.js @@ -22,7 +22,12 @@ SocketModules.chats.get = function(socket, data, callback) { return callback(new Error('[[error:invalid-data]]')); } - Messaging.getMessages(socket.uid, data.touid, data.since, false, callback); + Messaging.getMessages({ + fromuid: socket.uid, + touid: data.touid, + since: data.since, + isNew: false + }, callback); }; SocketModules.chats.send = function(socket, data, callback) { From 643abb692672d2eebfddcb515ceeb7be4d053a30 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Thu, 27 Aug 2015 17:37:34 -0400 Subject: [PATCH 02/67] if params.count is passed in, min should be 0 --- src/messaging.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/messaging.js b/src/messaging.js index fbb61199ca..e42b6758c9 100644 --- a/src/messaging.js +++ b/src/messaging.js @@ -104,7 +104,7 @@ var db = require('./database'), count = params.count || parseInt(meta.config.chatMessageInboxSize, 10) || 250; var uids = sortUids(fromuid, touid), - min = Date.now() - (terms[since] || terms.day); + min = params.count ? 0 : Date.now() - (terms[since] || terms.day); if (since === 'recent') { count = 49; From 0be3bd189379f4cc05afb703f91bffb6310bcda2 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 27 Aug 2015 17:49:46 -0400 Subject: [PATCH 03/67] removed ajaxify.variables --- public/src/ajaxify.js | 1 - public/src/variables.js | 37 ------------------------------------- 2 files changed, 38 deletions(-) diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index da8b2e6e9e..84a6e6591d 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -58,7 +58,6 @@ $(document).ready(function() { $('#footer, #content').removeClass('hide').addClass('ajaxifying'); - ajaxify.variables.flush(); ajaxify.loadData(url, function(err, data) { if (err) { return onAjaxError(err, url, callback, quiet); diff --git a/public/src/variables.js b/public/src/variables.js index 1a4b4e244c..52674df429 100644 --- a/public/src/variables.js +++ b/public/src/variables.js @@ -2,47 +2,10 @@ /*global ajaxify*/ (function(ajaxify) { - var parsedVariables = {}; ajaxify.variables = {}; - ajaxify.variables.set = function(key, value) { - if (typeof console !== 'undefined' && console.warn) { - console.warn('[deprecated] variables.set is deprecated, please use ajaxify.data, key=' + key); - } - parsedVariables[key] = value; - }; - - ajaxify.variables.get = function(key) { - if (typeof console !== 'undefined' && console.warn) { - console.warn('[deprecated] variables.get is deprecated, please use ajaxify.data, key=' + key); - } - return parsedVariables[key]; - }; - - ajaxify.variables.flush = function() { - parsedVariables = {}; - }; - ajaxify.variables.parse = function() { - $('#content [template-variable]').each(function(index, element) { - var value = null; - - switch ($(element).attr('template-type')) { - case 'boolean': - value = ($(element).val() === 'true' || $(element).val() === '1') ? true : false; - break; - case 'int': - case 'integer': - value = parseInt($(element).val(), 10); - break; - default: - value = $(element).val(); - break; - } - - ajaxify.variables.set($(element).attr('template-variable'), value); - }); var dataEl = $('#content [ajaxify-data]'); if (dataEl.length) { ajaxify.data = JSON.parse(decodeURIComponent(dataEl.attr('ajaxify-data'))); From 80b13c94c8d784d594747150aab2a7f318ee017e Mon Sep 17 00:00:00 2001 From: psychobunny Date: Thu, 27 Aug 2015 17:54:36 -0400 Subject: [PATCH 04/67] snackbar translation for acp --- public/src/admin/admin.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/public/src/admin/admin.js b/public/src/admin/admin.js index 91771a13b2..a1ac7376f3 100644 --- a/public/src/admin/admin.js +++ b/public/src/admin/admin.js @@ -105,15 +105,17 @@ } function launchSnackbar(params) { - var bar = $.snackbar({ - content: "" + params.title + "" + params.message, - timeout: 3000, - htmlAllowed: true - }); + translator.translate("" + params.title + "" + params.message, function(html) { + var bar = $.snackbar({ + content: html, + timeout: 3000, + htmlAllowed: true + }); - if (params.clickfn) { - bar.on('click', params.clickfn); - } + if (params.clickfn) { + bar.on('click', params.clickfn); + } + }); } function configureSlidemenu() { From 71cad7e1819dd0c3ba77cf6024388546d4ab8781 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Thu, 27 Aug 2015 17:58:29 -0400 Subject: [PATCH 05/67] chat teaser --- src/messaging.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/messaging.js b/src/messaging.js index e42b6758c9..71887ff365 100644 --- a/src/messaging.js +++ b/src/messaging.js @@ -253,6 +253,22 @@ var db = require('./database'), }, users: function(next) { user.getMultipleUserFields(uids, ['uid', 'username', 'picture', 'status'] , next); + }, + chatTeasers: function(next) { + var teasers = []; + async.each(uids, function(fromuid, next) { + Messaging.getMessages({ + fromuid: fromuid, + touid: uid, + isNew: false, + count: 1 + }, function(err, teaser) { + teasers.push(teaser[0]); + next(err); + }); + }, function(err) { + next(err, teasers); + }); } }, function(err, results) { if (err) { @@ -277,6 +293,7 @@ var db = require('./database'), if (user) { user.unread = results.unread[index]; user.status = sockets.isUserOnline(user.uid) ? user.status : 'offline'; + user.chatTeaser = results.chatTeasers[index]; } }); From ef65b711de0453d9c89a0a45b2654716ba9494f0 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 27 Aug 2015 18:07:16 -0400 Subject: [PATCH 06/67] removed template-variables --- src/views/admin/extend/rewards.tpl | 4 ---- src/views/admin/general/navigation.tpl | 1 - src/views/admin/manage/category.tpl | 1 - src/views/admin/manage/groups.tpl | 1 - src/views/admin/manage/users.tpl | 1 - src/views/partials/variables/account.tpl | 2 -- src/views/partials/variables/account/edit.tpl | 3 --- src/views/partials/variables/account/profile.tpl | 1 - src/views/partials/variables/category.tpl | 6 ------ src/views/partials/variables/groups/details.tpl | 2 -- src/views/partials/variables/reset_code.tpl | 1 - src/views/partials/variables/tag.tpl | 1 - src/views/partials/variables/topic.tpl | 11 ----------- 13 files changed, 35 deletions(-) delete mode 100644 src/views/partials/variables/account.tpl delete mode 100644 src/views/partials/variables/account/edit.tpl delete mode 100644 src/views/partials/variables/account/profile.tpl delete mode 100644 src/views/partials/variables/category.tpl delete mode 100644 src/views/partials/variables/groups/details.tpl delete mode 100644 src/views/partials/variables/reset_code.tpl delete mode 100644 src/views/partials/variables/tag.tpl delete mode 100644 src/views/partials/variables/topic.tpl diff --git a/src/views/admin/extend/rewards.tpl b/src/views/admin/extend/rewards.tpl index 29bf0b8288..9d2a2fd0f4 100644 --- a/src/views/admin/extend/rewards.tpl +++ b/src/views/admin/extend/rewards.tpl @@ -60,10 +60,6 @@ - - - - diff --git a/src/views/admin/general/navigation.tpl b/src/views/admin/general/navigation.tpl index eca07b44c1..779d6bf5a9 100644 --- a/src/views/admin/general/navigation.tpl +++ b/src/views/admin/general/navigation.tpl @@ -82,7 +82,6 @@ coreplugin - diff --git a/src/views/admin/manage/category.tpl b/src/views/admin/manage/category.tpl index a73ca45444..7d76b0b176 100644 --- a/src/views/admin/manage/category.tpl +++ b/src/views/admin/manage/category.tpl @@ -131,4 +131,3 @@ save - \ No newline at end of file diff --git a/src/views/admin/manage/groups.tpl b/src/views/admin/manage/groups.tpl index e2079e74b4..72ad905427 100644 --- a/src/views/admin/manage/groups.tpl +++ b/src/views/admin/manage/groups.tpl @@ -77,6 +77,5 @@ - diff --git a/src/views/admin/manage/users.tpl b/src/views/admin/manage/users.tpl index 96df92ca3f..275e1d6255 100644 --- a/src/views/admin/manage/users.tpl +++ b/src/views/admin/manage/users.tpl @@ -118,7 +118,6 @@
- diff --git a/src/views/partials/variables/account.tpl b/src/views/partials/variables/account.tpl deleted file mode 100644 index cc63770339..0000000000 --- a/src/views/partials/variables/account.tpl +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/src/views/partials/variables/account/edit.tpl b/src/views/partials/variables/account/edit.tpl deleted file mode 100644 index d8e5d259cc..0000000000 --- a/src/views/partials/variables/account/edit.tpl +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/src/views/partials/variables/account/profile.tpl b/src/views/partials/variables/account/profile.tpl deleted file mode 100644 index be91685112..0000000000 --- a/src/views/partials/variables/account/profile.tpl +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/views/partials/variables/category.tpl b/src/views/partials/variables/category.tpl deleted file mode 100644 index 984002411a..0000000000 --- a/src/views/partials/variables/category.tpl +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/views/partials/variables/groups/details.tpl b/src/views/partials/variables/groups/details.tpl deleted file mode 100644 index 5379a4a8aa..0000000000 --- a/src/views/partials/variables/groups/details.tpl +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/src/views/partials/variables/reset_code.tpl b/src/views/partials/variables/reset_code.tpl deleted file mode 100644 index ab630d7cff..0000000000 --- a/src/views/partials/variables/reset_code.tpl +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/views/partials/variables/tag.tpl b/src/views/partials/variables/tag.tpl deleted file mode 100644 index 486ba8245c..0000000000 --- a/src/views/partials/variables/tag.tpl +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/views/partials/variables/topic.tpl b/src/views/partials/variables/topic.tpl deleted file mode 100644 index 4f3c15180d..0000000000 --- a/src/views/partials/variables/topic.tpl +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file From 48512bff6b90a89418adddfa93e265dffb3630cf Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 27 Aug 2015 19:22:51 -0400 Subject: [PATCH 07/67] get rid of app.exposeConfigToTemplates --- public/src/ajaxify.js | 4 +++- public/src/app.js | 14 -------------- src/controllers/api.js | 4 ++-- src/middleware/admin.js | 5 +++-- src/middleware/middleware.js | 11 ++++------- 5 files changed, 12 insertions(+), 26 deletions(-) diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index 84a6e6591d..057847351b 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -214,8 +214,10 @@ $(document).ready(function() { if (!data) { return; } + ajaxify.data = data; - data.relative_path = RELATIVE_PATH; + data.config = config; + $(window).trigger('action:ajaxify.dataLoaded', {url: url, data: data}); if (callback) { diff --git a/public/src/app.js b/public/src/app.js index 6fb289b041..8b83c5a3c1 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -406,18 +406,6 @@ app.cacheBuster = null; } }; - app.exposeConfigToTemplates = function() { - $(document).ready(function() { - templates.setGlobal('loggedIn', config.loggedIn); - templates.setGlobal('relative_path', RELATIVE_PATH); - for(var key in config) { - if (config.hasOwnProperty(key)) { - templates.setGlobal('config.' + key, config[key]); - } - } - }); - }; - function createHeaderTooltips() { var env = utils.findBootstrapEnvironment(); if (env === 'xs' || env === 'sm') { @@ -651,8 +639,6 @@ app.cacheBuster = null; showWelcomeMessage = window.location.href.indexOf('loggedin') !== -1; - app.exposeConfigToTemplates(); - socketIOConnect(); app.cacheBuster = config['cache-buster']; diff --git a/src/controllers/api.js b/src/controllers/api.js index ed0be22efe..9bbb6dc5d7 100644 --- a/src/controllers/api.js +++ b/src/controllers/api.js @@ -70,8 +70,8 @@ apiController.getConfig = function(req, res, next) { config.environment = process.env.NODE_ENV; config.loggedIn = !!req.user; config['cache-buster'] = meta.config['cache-buster'] || ''; - config['script-buster'] = meta.js.hash; - config['css-buster'] = meta.css.hash; + config['script-buster'] = meta.js.hash || ''; + config['css-buster'] = meta.css.hash || ''; config.requireEmailConfirmation = parseInt(meta.config.requireEmailConfirmation, 10) === 1; config.topicPostSort = meta.config.topicPostSort || 'oldest_to_newest'; config.categoryTopicSort = meta.config.categoryTopicSort || 'newest_to_oldest'; diff --git a/src/middleware/admin.js b/src/middleware/admin.js index cba2bc8bec..db4116adc6 100644 --- a/src/middleware/admin.js +++ b/src/middleware/admin.js @@ -93,15 +93,16 @@ middleware.renderHeader = function(req, res, data, next) { res.locals.config = results.config; var templateValues = { - relative_path: nconf.get('relative_path'), + config: results.config, configJSON: JSON.stringify(results.config), + relative_path: results.config.relative_path, user: userData, userJSON: JSON.stringify(userData).replace(/'/g, "\\'"), plugins: results.custom_header.plugins, authentication: results.custom_header.authentication, scripts: results.scripts, 'cache-buster': meta.config['cache-buster'] ? 'v=' + meta.config['cache-buster'] : '', - env: process.env.NODE_ENV ? true : false, + env: process.env.NODE_ENV ? true : false }; templateValues.template = {name: res.locals.template}; diff --git a/src/middleware/middleware.js b/src/middleware/middleware.js index a94fd55038..df6f0a79ff 100644 --- a/src/middleware/middleware.js +++ b/src/middleware/middleware.js @@ -214,15 +214,11 @@ middleware.renderHeader = function(req, res, data, callback) { 'brand:logo:alt': meta.config['brand:logo:alt'] || '', 'brand:logo:display': meta.config['brand:logo']?'':'hide', allowRegistration: registrationType === 'normal' || registrationType === 'admin-approval', - searchEnabled: plugins.hasListeners('filter:search.query') + searchEnabled: plugins.hasListeners('filter:search.query'), + config: res.locals.config, + relative_path: res.locals.config.relative_path }; - for (var key in res.locals.config) { - if (res.locals.config.hasOwnProperty(key)) { - templateValues[key] = res.locals.config[key]; - } - } - templateValues.configJSON = JSON.stringify(res.locals.config); async.parallel({ @@ -337,6 +333,7 @@ middleware.processRender = function(req, res, next) { } options.loggedIn = req.user ? parseInt(req.user.uid, 10) !== 0 : false; + options.relative_path = nconf.get('relative_path'); options.template = {name: template}; options.template[template] = true; res.locals.template = template; From a1fb234b8b826d5f86234eb46dce866de1249e78 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 27 Aug 2015 19:25:16 -0400 Subject: [PATCH 08/67] config.cache-buster --- src/views/partials/requirejs-config.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/partials/requirejs-config.tpl b/src/views/partials/requirejs-config.tpl index 0666e6ffdf..84b19a3a05 100644 --- a/src/views/partials/requirejs-config.tpl +++ b/src/views/partials/requirejs-config.tpl @@ -2,7 +2,7 @@ require.config({ baseUrl: "{relative_path}/src/modules", waitSeconds: 3, - urlArgs: "{cache-buster}", + urlArgs: "{config.cache-buster}", paths: { 'forum': '../client', 'vendor': '../../vendor', From ba39a432e782b9ce1c36e61a3289ea74aecfeb18 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 28 Aug 2015 13:03:40 -0400 Subject: [PATCH 09/67] fixed #3517 --- src/plugins.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins.js b/src/plugins.js index 32b38ffdda..7abf65dafa 100644 --- a/src/plugins.js +++ b/src/plugins.js @@ -109,7 +109,7 @@ var fs = require('fs'), }, function(next) { // If some plugins are incompatible, throw the warning here - if (Plugins.versionWarning.length) { + if (Plugins.versionWarning.length && nconf.get('isPrimary') === 'true') { process.stdout.write('\n'); winston.warn('[plugins/load] The following plugins may not be compatible with your version of NodeBB. This may cause unintended behaviour or crashing. In the event of an unresponsive NodeBB caused by this plugin, run `./nodebb reset -p PLUGINNAME` to disable it.'); for(var x=0,numPlugins=Plugins.versionWarning.length;x Date: Thu, 27 Aug 2015 23:14:31 -0400 Subject: [PATCH 10/67] 404 fix --- public/src/ajaxify.js | 3 ++- src/routes/index.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index 057847351b..ee37ad0288 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -110,6 +110,7 @@ $(document).ready(function() { textStatus = err.textStatus; if (data) { + data.responseJSON.config = config; var status = parseInt(data.status, 10); if (status === 403 || status === 404 || status === 500 || status === 502) { if (status === 502) { @@ -117,7 +118,7 @@ $(document).ready(function() { } $('#footer, #content').removeClass('hide').addClass('ajaxifying'); - return renderTemplate(url, status.toString(), data.responseJSON, (new Date()).getTime(), callback); + return renderTemplate(url, status.toString(), data.responseJSON, callback); } else if (status === 401) { app.alertError('[[global:please_log_in]]'); app.previousUrl = url; diff --git a/src/routes/index.js b/src/routes/index.js index 67238e4dbe..a59b50a5e8 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -189,7 +189,7 @@ function handle404(app, middleware) { res.status(404); if (res.locals.isAPI) { - return res.json({path: req.path, title: '[[global:404.title]]'}); + return res.json({path: req.path.replace(/^\/api/, ''), title: '[[global:404.title]]'}); } middleware.buildHeader(req, res, function() { From a0cd4b49f5cb7e75de0ac65a2da66fac7e0da302 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Fri, 28 Aug 2015 13:04:02 -0400 Subject: [PATCH 11/67] when a category is deleted, set the children's parent to 0 --- src/categories/delete.js | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/categories/delete.js b/src/categories/delete.js index 8483efaf72..7bfe03a005 100644 --- a/src/categories/delete.js +++ b/src/categories/delete.js @@ -49,13 +49,30 @@ module.exports = function(Categories) { function removeFromParent(cid, callback) { async.waterfall([ function(next) { - Categories.getCategoryField(cid, 'parentCid', next); + async.parallel({ + parentCid: function(next) { + Categories.getCategoryField(cid, 'parentCid', next); + }, + children: function(next) { + db.getSortedSetRange('cid:' + cid + ':children', 0, -1, next); + } + }, next); }, - function(parentCid, next) { - parentCid = parseInt(parentCid, 10) || 0; - db.sortedSetRemove('cid:' + parentCid + ':children', cid, next); + function(results, next) { + async.parallel([ + function(next) { + results.parentCid = parseInt(results.parentCid, 10) || 0; + db.sortedSetRemove('cid:' + results.parentCid + ':children', cid, next); + }, + function(next) { + async.each(results.children, function(cid, next) { + db.setObjectField('category:' + cid, 'parentCid', 0, next); + }, next); + } + ], next); } - ], callback); - + ], function(err, results) { + callback(err); + }); } }; \ No newline at end of file From f4bf82a34992a7ab939c43854cd5f9c509cf4e58 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Fri, 28 Aug 2015 13:09:21 -0400 Subject: [PATCH 12/67] closes #3510 increase email confirm reset to 24 hours --- src/user/email.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/user/email.js b/src/user/email.js index c5beb6c1e3..c982cb53d5 100644 --- a/src/user/email.js +++ b/src/user/email.js @@ -58,7 +58,7 @@ var async = require('async'), }, next); }, function(next) { - db.expireAt('confirm:' + confirm_code, Math.floor(Date.now() / 1000 + 60 * 60 * 2), next); + db.expireAt('confirm:' + confirm_code, Math.floor(Date.now() / 1000 + 60 * 60 * 24), next); }, function(next) { user.getUserField(uid, 'username', next); From f21325a91ba66d61e837cbccb0072e29044dda0b Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 28 Aug 2015 13:19:06 -0400 Subject: [PATCH 13/67] add back missing ENDIF to complete admin header conditional This fixes #3516 --- src/views/admin/partials/menu.tpl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/views/admin/partials/menu.tpl b/src/views/admin/partials/menu.tpl index 8b4a775fb8..4c483ad1ba 100644 --- a/src/views/admin/partials/menu.tpl +++ b/src/views/admin/partials/menu.tpl @@ -83,6 +83,7 @@ + - -