From bceeb4ba5a9ccdbe77aa050b4ebf340330aa02f7 Mon Sep 17 00:00:00 2001 From: OldHawk Date: Wed, 5 Jul 2017 17:01:59 +0800 Subject: [PATCH] feat(forums): load forums list data --- modules/core/client/app/trans-string-en.js | 5 +- modules/core/client/app/trans-string-zh.js | 5 +- .../admin/forums-admin.client.controller.js | 199 ++++++++++++++++++ .../controllers/forums.client.controller.js | 167 +-------------- modules/forums/client/less/forum.less | 62 ++++++ .../views/admin/configure.client.view.html | 6 +- .../client/views/index.client.view.html | 72 ++++++- .../controllers/forums.server.controller.js | 3 +- 8 files changed, 348 insertions(+), 171 deletions(-) create mode 100644 modules/forums/client/controllers/admin/forums-admin.client.controller.js diff --git a/modules/core/client/app/trans-string-en.js b/modules/core/client/app/trans-string-en.js index 6a2fcde1..b90f8049 100644 --- a/modules/core/client/app/trans-string-en.js +++ b/modules/core/client/app/trans-string-en.js @@ -653,7 +653,10 @@ MODERATORS: 'Moderators', DESC: 'Description', CATEGORY: 'Category', - READONLY: 'Only oper/admin can post new topic' + READONLY: 'Only oper/admin can post new topic', + TOPICS: 'Topics', + REPLIES: 'Replies', + LAST_REPLY: 'Last Reply' } }, diff --git a/modules/core/client/app/trans-string-zh.js b/modules/core/client/app/trans-string-zh.js index f5f9132e..5d21a56c 100644 --- a/modules/core/client/app/trans-string-zh.js +++ b/modules/core/client/app/trans-string-zh.js @@ -653,7 +653,10 @@ MODERATORS: '版主', DESC: '描述', CATEGORY: '分类', - READONLY: '只有管理员可以发起新话题' + READONLY: '只有管理员可以发起新话题', + TOPICS: '主题数', + REPLIES: '回贴数', + LAST_REPLY: '最近回复' } }, diff --git a/modules/forums/client/controllers/admin/forums-admin.client.controller.js b/modules/forums/client/controllers/admin/forums-admin.client.controller.js new file mode 100644 index 00000000..51d34e1e --- /dev/null +++ b/modules/forums/client/controllers/admin/forums-admin.client.controller.js @@ -0,0 +1,199 @@ +(function () { + 'use strict'; + + angular + .module('forums') + .controller('ForumsAdminController', ForumsAdminController); + + ForumsAdminController.$inject = ['$scope', '$state', '$translate', 'Authentication', 'MeanTorrentConfig', 'ForumsAdminService', 'SideOverlay', '$filter', 'NotifycationService', + 'marked', 'ModalConfirmService']; + + function ForumsAdminController($scope, $state, $translate, Authentication, MeanTorrentConfig, ForumsAdminService, SideOverlay, $filter, NotifycationService, + marked, ModalConfirmService) { + var vm = this; + vm.forumsConfig = MeanTorrentConfig.meanTorrentConfig.forumsConfig; + vm.user = Authentication.user; + + vm.addModeratorPopover = { + title: 'FORUMS.MODERATOR_TITLE', + templateUrl: 'add-moderator.html', + items: [] + }; + + /** + * init + */ + vm.init = function () { + ForumsAdminService.query({}, function (items) { + vm.forums = items; + console.log(items); + + angular.forEach(vm.forums, function (f) { + vm.addModeratorPopover.items.push(f._id, false); + }); + }); + }; + + /** + * popupCreateForum + * @param evt + */ + vm.popupCreateForum = function (evt) { + vm.forum = { + name: '', + desc: '', + category: 'discuss', + order: 0, + readOnly: false + }; + + vm.actionTitle = 'FORUMS.BTN_ADD_FORUM'; + vm.isEdit = false; + vm.categoryChanged(); + SideOverlay.open(evt, 'popupSlide'); + }; + /** + * popupEditForum + * @param evt + * @param f: forum + */ + vm.popupEditForum = function (evt, f) { + if (f) { + vm.forum = new ForumsAdminService(f); + vm.actionTitle = 'FORUMS.BTN_EDIT_FORUM'; + vm.isEdit = true; + SideOverlay.open(evt, 'popupSlide'); + } + }; + + /** + * + */ + vm.categoryChanged = function () { + vm.selectedForums = $filter('filter')(vm.forums, { + category: vm.forum.category + }); + + vm.forum.order = vm.selectedForums.length; + }; + + /** + * createNewForum + */ + vm.createNewForum = function () { + var f = new ForumsAdminService(vm.forum); + f.$save(function (res) { + NotifycationService.showSuccessNotify('FORUMS.ADD_SUCCESSFULLY'); + vm.forum = undefined; + SideOverlay.close(null, 'popupSlide'); + vm.init(); + }, function (res) { + NotifycationService.showErrorNotify(res.data.message, 'FORUMS.ADD_FAILED'); + }); + }; + + /** + * editForum + */ + vm.editForum = function () { + vm.forum.$update(function (res) { + NotifycationService.showSuccessNotify('FORUMS.EDIT_SUCCESSFULLY'); + vm.forum = undefined; + SideOverlay.close(null, 'popupSlide'); + vm.init(); + }, function (res) { + NotifycationService.showErrorNotify(res.data.message, 'FORUMS.EDIT_FAILED'); + }); + }; + + /** + * deleteForum + */ + vm.deleteForum = function () { + var modalOptions = { + closeButtonText: $translate.instant('FORUMS.DELETE_CONFIRM_CANCEL'), + actionButtonText: $translate.instant('FORUMS.DELETE_CONFIRM_OK'), + headerText: $translate.instant('FORUMS.DELETE_CONFIRM_HEADER_TEXT'), + bodyText: $translate.instant('FORUMS.DELETE_CONFIRM_BODY_TEXT') + }; + + ModalConfirmService.showModal({}, modalOptions) + .then(function (result) { + vm.forum.$remove(function (res) { + NotifycationService.showSuccessNotify('FORUMS.DELETE_SUCCESSFULLY'); + vm.forum = undefined; + SideOverlay.close(null, 'popupSlide'); + vm.init(); + }, function (res) { + NotifycationService.showErrorNotify(res.data.message, 'FORUMS.DELETE_FAILED'); + }); + }); + }; + + /** + * getForumDesc + * @param f: forum + * @returns {*} + */ + vm.getForumDesc = function (f) { + if (f) { + return marked(f.desc, {sanitize: true}); + } + }; + + /** + * addModerator + */ + vm.addModerator = function () { + ForumsAdminService.addModerator({ + _id: vm.forum._id, + _username: vm.addModeratorPopover.username + }, function (res) { + NotifycationService.showSuccessNotify('FORUMS.ADD_MODERATOR_SUCCESSFULLY'); + vm.addModeratorPopover.items[vm.forum._id] = false; + vm.init(); + }, function (res) { + NotifycationService.showErrorNotify(res.data.message, 'FORUMS.ADD_MODERATOR_FAILED'); + vm.addModeratorPopover.items[vm.forum._id] = false; + }); + }; + + /** + * addModeratorClicked + * @param f: forum + */ + vm.addModeratorClicked = function (f) { + vm.addModeratorPopover.username = undefined; + vm.addModeratorPopover.items[f._id] = true; + + vm.forum = f; + }; + + /** + * removeModeratorClicked + * @param f forum + * @param m moderator + */ + vm.removeModeratorClicked = function (f, m) { + var modalOptions = { + closeButtonText: $translate.instant('FORUMS.DELETE_CONFIRM_CANCEL'), + actionButtonText: $translate.instant('FORUMS.DELETE_CONFIRM_OK'), + headerText: $translate.instant('FORUMS.DELETE_CONFIRM_HEADER_TEXT'), + bodyText: $translate.instant('FORUMS.REMOVE_CONFIRM_BODY_TEXT') + }; + + ModalConfirmService.showModal({}, modalOptions) + .then(function (result) { + ForumsAdminService.removeModerator({ + _id: f._id, + _username: m.username + }, function (res) { + NotifycationService.showSuccessNotify('FORUMS.REMOVE_MODERATOR_SUCCESSFULLY'); + vm.init(); + }, function (res) { + NotifycationService.showErrorNotify(res.data.message, 'FORUMS.REMOVE_MODERATOR_FAILED'); + }); + }); + }; + } +}()); diff --git a/modules/forums/client/controllers/forums.client.controller.js b/modules/forums/client/controllers/forums.client.controller.js index 8f182fe3..f13d094a 100644 --- a/modules/forums/client/controllers/forums.client.controller.js +++ b/modules/forums/client/controllers/forums.client.controller.js @@ -5,131 +5,24 @@ .module('forums') .controller('ForumsController', ForumsController); - ForumsController.$inject = ['$scope', '$state', '$translate', 'Authentication', 'MeanTorrentConfig', 'ForumsAdminService', 'SideOverlay', '$filter', 'NotifycationService', + ForumsController.$inject = ['$scope', '$state', '$translate', 'Authentication', 'MeanTorrentConfig', 'ForumsService', 'SideOverlay', '$filter', 'NotifycationService', 'marked', 'ModalConfirmService']; - function ForumsController($scope, $state, $translate, Authentication, MeanTorrentConfig, ForumsAdminService, SideOverlay, $filter, NotifycationService, + function ForumsController($scope, $state, $translate, Authentication, MeanTorrentConfig, ForumsService, SideOverlay, $filter, NotifycationService, marked, ModalConfirmService) { var vm = this; vm.forumsConfig = MeanTorrentConfig.meanTorrentConfig.forumsConfig; vm.user = Authentication.user; - vm.addModeratorPopover = { - title: 'FORUMS.MODERATOR_TITLE', - templateUrl: 'add-moderator.html', - items: [] - }; - /** * init */ vm.init = function () { - ForumsAdminService.query({}, function (items) { + ForumsService.query({}, function (items) { vm.forums = items; - console.log(items); - - angular.forEach(vm.forums, function (f) { - vm.addModeratorPopover.items.push(f._id, false); - }); }); }; - /** - * popupCreateForum - * @param evt - */ - vm.popupCreateForum = function (evt) { - vm.forum = { - name: '', - desc: '', - category: 'discuss', - order: 0, - readOnly: false - }; - - vm.actionTitle = 'FORUMS.BTN_ADD_FORUM'; - vm.isEdit = false; - vm.categoryChanged(); - SideOverlay.open(evt, 'popupSlide'); - }; - /** - * popupEditForum - * @param evt - * @param f: forum - */ - vm.popupEditForum = function (evt, f) { - if (f) { - vm.forum = new ForumsAdminService(f); - vm.actionTitle = 'FORUMS.BTN_EDIT_FORUM'; - vm.isEdit = true; - SideOverlay.open(evt, 'popupSlide'); - } - }; - - /** - * - */ - vm.categoryChanged = function () { - vm.selectedForums = $filter('filter')(vm.forums, { - category: vm.forum.category - }); - - vm.forum.order = vm.selectedForums.length; - }; - - /** - * createNewForum - */ - vm.createNewForum = function () { - var f = new ForumsAdminService(vm.forum); - f.$save(function (res) { - NotifycationService.showSuccessNotify('FORUMS.ADD_SUCCESSFULLY'); - vm.forum = undefined; - SideOverlay.close(null, 'popupSlide'); - vm.init(); - }, function (res) { - NotifycationService.showErrorNotify(res.data.message, 'FORUMS.ADD_FAILED'); - }); - }; - - /** - * editForum - */ - vm.editForum = function () { - vm.forum.$update(function (res) { - NotifycationService.showSuccessNotify('FORUMS.EDIT_SUCCESSFULLY'); - vm.forum = undefined; - SideOverlay.close(null, 'popupSlide'); - vm.init(); - }, function (res) { - NotifycationService.showErrorNotify(res.data.message, 'FORUMS.EDIT_FAILED'); - }); - }; - - /** - * deleteForum - */ - vm.deleteForum = function () { - var modalOptions = { - closeButtonText: $translate.instant('FORUMS.DELETE_CONFIRM_CANCEL'), - actionButtonText: $translate.instant('FORUMS.DELETE_CONFIRM_OK'), - headerText: $translate.instant('FORUMS.DELETE_CONFIRM_HEADER_TEXT'), - bodyText: $translate.instant('FORUMS.DELETE_CONFIRM_BODY_TEXT') - }; - - ModalConfirmService.showModal({}, modalOptions) - .then(function (result) { - vm.forum.$remove(function (res) { - NotifycationService.showSuccessNotify('FORUMS.DELETE_SUCCESSFULLY'); - vm.forum = undefined; - SideOverlay.close(null, 'popupSlide'); - vm.init(); - }, function (res) { - NotifycationService.showErrorNotify(res.data.message, 'FORUMS.DELETE_FAILED'); - }); - }); - }; - /** * getForumDesc * @param f: forum @@ -141,59 +34,5 @@ } }; - /** - * addModerator - */ - vm.addModerator = function () { - ForumsAdminService.addModerator({ - _id: vm.forum._id, - _username: vm.addModeratorPopover.username - }, function (res) { - NotifycationService.showSuccessNotify('FORUMS.ADD_MODERATOR_SUCCESSFULLY'); - vm.addModeratorPopover.items[vm.forum._id] = false; - vm.init(); - }, function (res) { - NotifycationService.showErrorNotify(res.data.message, 'FORUMS.ADD_MODERATOR_FAILED'); - vm.addModeratorPopover.items[vm.forum._id] = false; - }); - }; - - /** - * addModeratorClicked - * @param f: forum - */ - vm.addModeratorClicked = function (f) { - vm.addModeratorPopover.username = undefined; - vm.addModeratorPopover.items[f._id] = true; - - vm.forum = f; - }; - - /** - * removeModeratorClicked - * @param f forum - * @param m moderator - */ - vm.removeModeratorClicked = function (f, m) { - var modalOptions = { - closeButtonText: $translate.instant('FORUMS.DELETE_CONFIRM_CANCEL'), - actionButtonText: $translate.instant('FORUMS.DELETE_CONFIRM_OK'), - headerText: $translate.instant('FORUMS.DELETE_CONFIRM_HEADER_TEXT'), - bodyText: $translate.instant('FORUMS.REMOVE_CONFIRM_BODY_TEXT') - }; - - ModalConfirmService.showModal({}, modalOptions) - .then(function (result) { - ForumsAdminService.removeModerator({ - _id: f._id, - _username: m.username - }, function (res) { - NotifycationService.showSuccessNotify('FORUMS.REMOVE_MODERATOR_SUCCESSFULLY'); - vm.init(); - }, function (res) { - NotifycationService.showErrorNotify(res.data.message, 'FORUMS.REMOVE_MODERATOR_FAILED'); - }); - }); - }; } }()); diff --git a/modules/forums/client/less/forum.less b/modules/forums/client/less/forum.less index 2909192c..d8fd3ed6 100644 --- a/modules/forums/client/less/forum.less +++ b/modules/forums/client/less/forum.less @@ -25,10 +25,60 @@ } .forum-list { + .table-category { + border-radius: 6px; + } .forum-desc { word-break: break-all; color: #999; } + table { + border-spacing: 0; + border-collapse: inherit; + border: solid 3px @brand-primary; + thead { + background-color: @brand-primary; + border: solid 1px @brand-primary; + color: #efefef; + tr { + th { + border: solid 2px @brand-primary; + padding: 13px 10px; + } + } + } + tbody { + tr { + td { + border-top: none; + border-bottom: dotted 1px @brand-primary; + p { + margin-bottom: 5px; + &:last-child { + margin-bottom: 0; + } + } + .forum-icon { + float: left; + font-size: 25px; + color: #ff6600; + margin: 25px 10px; + } + .forum-info { + margin-left: 60px; + } + } + &:hover { + background-color: rgba(160, 196, 228, 0.15); + } + } + tr:last-child { + td { + border-bottom: none; + } + } + } + } } .add-moderator-popover { @@ -37,3 +87,15 @@ width: 250px; height: auto; } + +.pagetop { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAMAAABOo35HAAAAJ1BMVEUzMzM5OTk9PT07Ozs0NDQ3Nzc8PDw1NTUyMjI2NjY4ODg6OjoxMTEsnJNsAAAgfUlEQVR42syda5ukugqF1WjEy///vad1yl67iyLvZDNznp1P59I16AoSWEAYBq1xKvNAa6lltQHWVuo2fFq2TGWlX9taK8tYy7TYZ+m1bCyj1GWgNZdpDH6/VYnPgTXWMluAw7TbnwDL9in4I5tLHXNgaWvrFj3IMR0pzdKDhKjbpb6WB8uuTbchVl9LgcWA2FLrlgJLgKwG6psAizbdVgGZAmurNXxWG/SJAljwHK1P7ahlzoM1l3o0PlFQLQJLRnyw1natlgGLH9Wu7cqDdX0E1tyuBFiyr4uBIciCJfsKhgDAImtCJ0wOLDavNqJqMViLXpWsDYMFlq/xLywMFm0ZaM6lvznNYs2R+gJYsOn0EFnNuqwJe0gMFmz6ZuwhZcBib802qS+ARdYE9LcpZJG/GR8h/X4xg9UZa5CMudCLouHkd92vY8iG5mGHMmpbwRewOCu76NY8Lge7nnPvR9vrb+h927ActdYyroPBppPm7LGMbSyXjG0wi75j2HRSXxvWS0Y9lljGImsCpjGIuZYvCVMp05eYLYBrLbBhQjSQcXzLWGaLccC1R+prw/YtowQyLDghQH+1GXuZpusN5r3UKdqVPbT/7O7ZMC+XjLLM175M09d/GKzlOoMF36Ov40vG/iXjuGTs+kzAmvC+SW+n6VaorzU/8hxcq36M6utlvHZhvl7pJUOv4n/M6rs6qOZHhtn1xV9wyaoEuk/HwLvejvVLxPj97X1vz2oGXgGpr6CSDEmdatWrwKajf2H2bIeT8W5VVpYhB8O83t577AH8J64mrexQLT209lj6LADdT2m9hyurB+bWZ29VzLmbzUD4n2ZEOhR+mnEkw2yQmbce3lKaxbwJx0ThJyd9+6eB9IE466/0NuI9959HyhHwJg020+xlzCMZ30bfzLGwraXH0UG+R9yqrEpgTVh/b70t0tv3pTfd710R+8LreZ51fNwEi2XcR/24Pjs5aCGPc38du/AOhNze3W1VvDVh/T2d3kavor8DXs+xmaf7kt1y35BjYYEhlLVwUEVW5XTWhPT32s3bjNDSkbI46h2Ig2V8aQyuRwPHBSgLR8YvOmRZxv5Ly501IfP7skUoQkfK1yrr+fvqe/1CdoKW2SPj9zf9XB8ZDJWsSp3cEdLWx6/lzAjDdf+In+tlRkrx28GvUkrZf1fGcpSCUHkDWUppWR/vP9W6OSUBMXttqor3bQKSBAgi5/O1FbHu1ifk3GqVP9Z8jWW8H2Y7gvOg7ct+O6rW3o5yP0zgXYIve8so7VexbwfUeZe8xi8Z92aOSyzDTPHYCZ5GwJs8x5v4lc9x7G3VzyVmg2LeZHlk3D53yPI8MgI2CLzMU3Gqk/HmHMZkPJNlOlIGC7w/HbJefXnTJSPwlW2QjJjMZOpdzrAXoncEMr5FloFLLocfuBZkduSSg8MfkJlAvXvUJeDlkP1gJ73+cmTcCvbMfT0Bi0ecof+eLQgl9WCd1uQHa/uSIZ5CziEzOky966S4xSickHPon4yX9k/PrXDMkRRAxiObJ2dYR+OlBZMcN8jzgDUJCCrH8ogr7FBfE1H8gV8J6C+wjJDTkcM93QZSettJSCJZpld5iFUmJPsp3FkytB0NMrOfwpVVGcQcQn6jOzereF+HMLCZnJsNHR5xH5At7c5tiRkeGu5dAdWirL+chSOUAcUXwMIqXaNDFvLwpFil4UoPTm+79Jepdzs3xddQ4cHVa42IeTsNyExYQL1bCBXrL2+6nrWsYCRg8R+uRbuVUN+2c2mwmUi0sXNpWxMsnezsmzTB2oyd2b5aWF6+NpOXShYZLK535OpKBsv/mCV0sLCgv1CnuiFY/WrJysFg8ROyNekPxjiJwmDxI/K2MVj8iLxtedWCAw3A4npdLoAGsPgozSsWm1UGlMFiIBhQBouBSB81qL+ckiWwuHmFU7IEFnqCqVftqOAA3oTAojddjKj3NQUWs0Fcb5I/IUwli02wCG9mYRksLM20/MnPkcxJZBmDxeErsbAMFpJhbE1wMTGyLfGSYgFYEMo0ZCgNBGCharE1yapWba4rKMuCdS4V1mIMlpH6HmuzBDWjWNqRWuJ1ZzEZLJTREvKnwBrbYKWcLFWJzvMarkPHJYDVtEljQ8SsAurMZ9hmtQ4kvX6TUTgtXmvJug62lguMeJ3yXwAs8k8wssu7DqwWCBYRCqsRrfHfdh04qFLbXS425D2lfmQGSzEVhLjZcIeVr6wGYDX1H0X898MdLg1WhnHMkH+C+v8RSCfa6ZmU/i0vP9JgBmvUdgBnm6doYEl9YeWOiENKTmB5SzEOvCxJ/pU8+Zfn/hRNH6BZsb2TBArdGCymqvLsH9Ny/L3vAFawG/wWIr0ALEyjZS0j96XAgrcWWIwxHzUAVtYrYOXIJ1n1PSFY3nVPlGwAWPkkq0dksERLddtSCywLukV7BDS+WBNYGarK2un7eWhUfIO9Ax9AnSQqmgKPg4i1o1GbrJ4WuASCTrRYRhlU/8X8JDvyn2povpaqysGXBWJts6By/1pBQW665EiVecOvWjC9ChkJjlt8y/PyqUx6LpTU4ZyDytEXNVVTrz5bRr8dt4x9cDWrkO1AR963PD+dyUUyIP7GMklBVZ5u7aCpWhh3ZrN8NfFTDa22Jvh8mWtxHbuu/RFdd777wrWOut5hjnTQUKv1SXXqqvgeV6zrQhZvdo/9qSYaOENKKvg6YrdFYE24nV4yVEfqK77B5SAi0FXBf2qqHkape2eo6to1o6bqfNOA7w6QmFF3gVhYJcr+w9MIbGFT9bHtDdeHVUtdLZ9k/GzyPf5NO4rpXpEf2+FswF3xHZJlzNI9h7jFPYPXilIQ3I9MLc8mLAM3k0P2uztANjZwUl8HcXTzB/cRlqqesLipOuyZZOLWnd7NpurAmlAa6HF2Go+oiu+vBR28QYH1tZaTTJtzVLUoG1u45Vm2+frrvVfGWmt13QHQ9tv3Ko/eLusR8xzy4Ma3i060aCPLm29AncjOr+dOXtf22/7BXqt8bl7/9DpPOfItgkLtj07V2ybiSwg+lG4UKzW4YajZnnoRR9ZxqB3OiMIWyjncwaY+rvtl68GI+sNnd5QT1Kbvo/Pr8UaPo46dh85zpIASm3cOj1YwZovi5/h4Dt2a07GZkEGzgRu35XLcB7m7BIOpd+f40V0ekloC38a57hY6foHD7NlMTm4Z3kvy9jcBGU9k2Vv7I7Q8D9L++IUO7VojpNBSKBawmUQhQFP1W+tokJJFH9YHq+2WZy0FMx9Zdwtb2Y3uOOKg1VPv7aZqH+QH8QvlyvUqet5Gy7OWY+TbuXrPr3iWB+gQoN5dU3X8en33Tu2KuyVm0qu48B4YeSiYkfETUSEZMjVAtFGG2JMh2o7JbTlUoEJ3rY4UefmN89h2BftYMONvFnS38cGtmKxYAkfeue4VwX5kyOnEx8Wlt+y6vBx5p2+xTyVdWoZhkZ5B4ULn1ZuDLq3TQc55HmahvZgvKYczI5DRR0vm6ahSRIiB7oM1aRjIo1TJABg6a9J1pAQtz3juMeEnGTpkgc0EaxLH/CADc1uMqNl80XsIlVKoLfTiG5xvGZZIlVOG+JYxzmZdQOSvOG/66m/xs1AmkmQ9c/faz3/livP85fkQBUIN11+6PH/585fn58cycGkNf4QMFrsFf38sA9epMlhcWkO5+vzAD24qZbBYffOjZFDe+Bp/5HYhOUpGBvDvj5LhixwYLF72EIGjMvtZsNRPbzChLguW/hU+QhgsXvMdDNoGHyGCxSW1rBMMFsY8+cFqXFozFy81P1itbJZoUU8MVkuN7KMzfA9cdwKLRx0Fa/8rI/vYw2ewWGANjpXsMMiyzR877iBDDGBB7Cfxx8BgFQ8WOXfOvNAzFn1izUqBoJmzlJXBKoXBGo5wm3e3ITnNUrJntKFfs/jfjVYpc1KzZOJ3mP3TDRbn6hfLg+X9zqDTfYdgAcCCaUrgOQBY7Jd6IjB/GjaGKTHNyWCx76CizTxYmlxaZoh1ACywvRAMZcAS2RpoXT9Y7MKLkc+CxZuuIz8PlrNL8AQIFhsWMfJJsCD9Ak4QgIVmibNHDBbTDt+O/B8MpA0Se6haDBb3Hx5OtQgsJrQ8nZUHa1ZAw9ciMVjc/8IzQhksDnXMZyvyYEFAAx3oABZ0VkELOoPF2TAIpgEs4N0ATQaLoWDigcHizmnI6ANYbE2AeCCwmHJI6O/5+9mdd0d6nPSJM1gnTGpK3jl6zlQorCOEN61RxU6vLE2KbnBA9VZ1TkSTJvu7t1HdSuQY9JsDje+DV46gUb0Rkw4q/yXHAGn4eNKoxvQ1yVYyjbPFFRXjXgIFh8ZWFdGwI1v2oL8BohlO8KisLbhuXzoTKSanDlVmey5VaDVbniKTz4ns9dRkEoM4o7PPUgWT6lODpCHpb1xmewMh5aOMoe+xY6zqZj8mDRnm8zgp7cts3X+ndDSXO/gyW0ArckGVlwasJN2V5sKmQ0O8m8PrSnOp0IH1d3aNRbdXILQIEx8AtbC6UZYm3KW5asPQfN3esrxoQovaI2f4hIkq8mMnleZXYExfG3+f+n8v0e3SXF+kxqyBuYrkaPhnR+pGuEaThUT1CC2ozOLSXGH1cSKNSnMdb8Id6Brf5+rTg3lHTrHYNJ4/H1JL/vj4GS2g+sLWHpuP6e2097XRzmxTB7rdZbaNcf2+Nvp0vgmZxlmThULr8xEtzNXLT/MKuRt0i8xu06nPMjhUh3je0QyV9p4OehqAW08iUKDMtunIC6tpxz6kUmrPTNZafF8FN012jfS8mmVLS2/1JQYdcjjS0T79bqdXeXozaekgrzj41RvIUirKUA/WvYXNElh9N13XloY9diYbCKW58E258KyO7j1IRnnNMYXfqQMQCpxkkXdnUzlnpz/y3zRS7+pujJdm4AVkDtTn6NIGUPSbuuCgW+eXBUrTEzmOOhSQd+H2ajXpBGQm0i7zQr7GKl/dR/bsRfpOQ85k+G+QyWKzWc1i0GJmAU9IIaW79iTqm7GAgYZYrivjNf/4EHf3M7ju0fv1gmrVHN5G5SdT7xb1D/mxk+bYSEIryKWyI28+GmAWV31q0RzemMzkYlU//NOFkoLKFW0ip6Jcfe9lW7a4qJzK+D3f4m/agTwPjRWTDNEIarqVr+7pID7bNuu8EsteWuiwgru7IyYvmMMLZDyzsPbj5hvpLdwHS7yKCAVesm8BVkQd+bvAhmcOrxmkabo7OsXaSpMb3Rb83nW1gKpq99gBR03Uu2zIoa8FxmH2dlWIKR5kI+E+WMwxeCaWd1HZD15HpLg3k6Ts2Sc56Tt/b+piWNbBeFINa0lQZouXbTFWTL2bLeqChLo35HTimECbgRPBuXJ0O7tH+hTACnM6wn217NxXGE9lEoD6y2AdaEf9weDMXGucAV5EzXmezEyy/GA2uQ8eLU4QQkaf610ZLKKiu8fks/5yme26TJNDi5xZRwTC+xJYWLSef92E/orwO22fXIhHIbhhbx0n8gQWG+6/OUxmPqaxI9DbRbTQ+oUVTyhiD1lg0V1EvOUHUHG8oR3dvY5qASJM5YGs4osRWH1+R8Z55diVc/WemGJC2hZ4D7AmCBZ3oPddzIX6y3cEd1GewkrXj+GxnAAL7BHcmdXXemP0F2UwkZ6VZJoQ1VfMs5JSYPG1wTZCKJydDqRcfZDyofSsLsvgzu4kWEDGd5CEYBqHOV7fZbay3RAljVVYyfNoyLgTyxmwgCfv4ljwE2guaYXQaimCt2p2+Q9HLOEA+oPAEhnfek09VW6A7dRYchZdyid4KO+5ngvJWM4/MJN1n5vtzMGG9IY8S7z2IlxapUOC/sbKH+xLY5XEZyj/uukZQMFJz224Fi95Jz7l45dKBt/tYkPGqeI4AAuqp/ORHdNI6Pc2Uj5aKkZFftL/TtgzWJwDz9Mz3GjAzrVP+TBWHCZwTTiHO5hM4X6gfn6SSVs93htaYXICCBR6WQaLs7899ZfILLNqeRAFjf8f+Cn9vo8EFiSSMpxygp9kflHgIFb6PUfrABbUGiZ67ZP8JP+RPjthBZpJjVMAFkRkWZOT6Kcj/ZVB1/EIRD8yjAgWVE9nD7P8RFcTaRugJawS+2mj3gXAguppIL3+OgXvvxBVXs1mqwIg8NNwbls3WMAA5Ul4DtSZtFV4I8Idums5dXiAZkGRYfaFrd1SndBfoXUEZgkLgtgDEFirhaYOBBDpJaj2FUjpnP6ajb+GPFmCn2QtudvQzOC6hFzKYd0HFcrB4UD625hxpumyOX5SDLSfkRv0h48UHfDxr+6AQaVs0OzffR2EurGCMunu8lgx0L51VB1yMKeFwqrRwgktw6zJr2BNIGY/wslCs1phLRWPqdnFF0rObt4RuO5w04ifw3tDpDJp6K5FL8NB9Wp7c7OM4H4STuj6EtxPTdUzxc/cTm9vM83c1BCydey/aq6V/hcN8IBIhx35sOVZwz9brY2cag2GvIYV30HiHrIj6kRrTNEZLOME3ggELc82aPgnBEhEZvrugKDiO1AsvtEqmiwkgy8ZbRYWuKnhaRYxi5pRZuDAQLVcd0A8+TVoqaa70lxXi5ehWafRCAj+4huto+ojaRTKMZmp7gDJCCe/BtYE9VeGCZr06rj+W0pkvTvXjraM8b4fN/gbJDN/3CuCk1+PgGoD1ToKtk6qa+Qo3YplLxhwQovZUmpU7s3FoYe6A7jp99XJ2iXjYlXd8EiYLruTjKDXQTFMs8j+CIbkgYziOqigC7Q4n7u5bl/dIUxTXLteRWNJ5+Y5pwuVotnc2J5adADyOq8CdTf5Fb+r4i5UgyvedPjDcoesHPkW6x44wziHt9T97HIDLjEu2mqOnVxdBSolNeUMoww5h2LkaRqEvwuEZ+Tepmp3Jw85mGpJC8S4+3BcBSrGR8EFLnD5CY6mMd105p1hnsPryEwOXXjyqzzAZR4CT5ZIHe/D8lRNNXdSSKRQWDJoDm9IZnJQLIcDzAgG356FdVG9mX8Nx4pAfksN2Ii4vyCsm4w30S3tya8aO0lkPMeretpmy7Nv7sR8rB/+SXN4/QwkzjC3Jr86PqQ3mXSxsNGsaKMZ0/5GMyL8PGsUzOGFZCZniD2HY47N66WiP7Cwb5POdb4AIx9XTzevR3SHLJCZnHzw9mm7v/9Hbw3yPFhz7mXUO0C+A+4qGwNEINsy31T9suqSEdhtrOVuXi8lmiUw3NZL3vqhzprt3JfR5+sSdBdI84IwyKSgjX4I6Ftv8SPmjFPLUdAhi4y8j4IHXLdVEVkMZCZYk2aUGQZOrL/EworDCRgYyOjbQISf7Ho7kjUYCyXPmGaynlSAxA5paiarS9/05+pPmMnKGUcuf+P74Fl/kYXlSQOBI08FM3wfPBc9sl4wWPxPgMcHYMEtb3DTGYPFtVC86QwW1NOyb8Jg8ewHC5rxCCwm49EhZbCwNtN4x/JgKaNvkKtHsBgMLllksBgNHlbGYHFGHwpmACyI+6CDMQOWUlwcQufBkiOPuXoGC2IeeEsAC/QXignyYOkMBNcdweL7EXjTGSxuteH7KBgs9He2FXIYABZEGrDpBBbrLxeQ5MGS3w6uO4BFE92heg3A4hNqHz+s/QAcACy4AigLFte2CQdtenKA7VxK/bgmxbltI9RbaBH8uzTAlk/ahYbIsGbx25bj0xqhWiOhWWVNalbfQBlyrRksnvwXKDaBxVRJgRgKwIoplPAdE6chBDTA+xFYfFPN/3q7oy01jhgIoEtmAc3C/39vAvGmzkEW15N2Mq9e3Ey1UEvVKmn/b07DGwN4g2WyFTO8FsHq80XQzBJgOYR3NGmwTLauR/AOVC7Xwtw2gAU4THMaLEcnThPWwXoq5EBmASx4E0jQV1kH7pfBOlK+DF0hwHLjAcsxDJYTGvNEBssVpp8FjT7AglZzmSmVdcK0jjOl1k6bpFlnSt311mDZ7/mQMVi8q0+Xt3Ww3FTR1FztsXq4JJqvwfIrJxZtxDJ/vnvZm6zQnPX57OlS9Ehk6d+X8qY0lz+EvToRyOc5lOaUW1zsqN3aVIww1Iev30in8OxyybhUEWfqOTOrIFPmMB113qyfu9+IJ26pPEP/SinQ57pO1LPOCjlPQq8fqsHbu7Fx9dHqY3EbNoydbBIj6MNlvk1udftrjf0WidHM+WX32W6xV5gOchB5E08/CEBtWoQyPyvQexHYWDrlqWTV+OWxCKwCXJVA8Mkeuw1UrTTXnIIziZehQG1oEptb9Bt9l9kGrjhIUAqY6F6VMtuhFFMMu2tDKiVmTVORNTwasJfWsDi2DSCdvYlnAV2HIWNtBk3Th5M5fvltZDt6IfHpyiLJPhJ2mgjT/i3y6sGnur/pXGabb5AJUUelwtvlNpbF5unfITvaKdceyGfLI3RWaW7vZOvOua08vD1N+vzi7WC+j3CyyTggfkBzi2Z1TUw9PinNZY/kfqa1MltOfu0Zss03YmqrnKJdTV86UxFtDq9Lc9sxxbElpybgYOhyaumWZi7eXGabV4lOrZ14w0kJZcUkfDm1MiAkTpYfdenz8zrKn4jU9Gksv7pGzLDu36G7BkW8GCSexHov6a8kcVuzW37q0HTZ5xrYjimL+Hos9VkaZbCdBy0Lvcr2IrmTKR4eOfTshfuiHoEQe0PL5PHYStuk6an7/rj/7t/Gz+OTcEEvGqzrkEeCer8mKLMjvYLjno+ty5ZXmW1wuwwHuZmEa3RqPj7rPvCdGDRfdYX0uRIc3secwiPGxpYLidUfYA0F4m4m3cOmOTCbuC/Tn9Pk155Sztmqk/DzKH1OSrlftyGScY4/BcPxz9uPtCKGcnToTA2TX3twCDIe8oyv6n2A+hzeOs+xpcuH01DhsbVjMhk2sw7Vk52GPkBdTI2LIN7Vd+lz77QzE4HuEjOQCJF7xZ2BjOedTu8D1Jp0YQaS+3f31la9044ZeVPvCYafazQCTBULZgx7nn/t2+EmXe5mm1e5Ng5EXXMtpunE58dMrSL15hShZOJfQ0AhBTp1WOFXvpIHQ33IjHWm1D9it6yLsD58aPQ4NaFQfm/tappwtJaVSrjtTZpX+bg1qMxDH6Hen3ANSRDM16x72MMHVIe65vKVO1y3uQWu6CnXOecOe6+VTtm+FKw9hEezFSwAb5KnyGauGFaqI/bF2W883PZULlhg7lnuftBy1fpwg2UFugtmDFbX2GE7MJNs4WzAdRDBsgYYzLrAcrOMJQdqk3GvYIPlA8h39QDLjLy9iR9/nJOjDJZn5VnfC7Dg6xZMAw8uGyUVNlhWoDu8NFgO5O1N/LgoxuGYwQIblPcdVhFY6BusRPU4u+OKGIHF0sw6FjUYrP9/opNLbwynwbriuIKPNljudW5v4sc/ssqbAizh7Z75AEtJ31f5Rf04tQT1brCsQH833xAFagArpbnv1gBt4MeBgaXCBsuTM9G8GGBlhuDbNYb9OMqzfr3D8vTHtVbBKs5kVbQXsFbXWD0PT+8ta/8dYG3bbXwet7HrYO1v17ghyFoL4q1fNFjOQZ2zGazkoJ8Lc+sXqCoNQTJYPkTM2RossxsW2vtx5marMFgmHvwHBsvW6Wq/A/WlTj8NljfdvIbBsjdZ5GwtHLHtGSy2C3ILEoNlu1nlbF0Tb69msOyR7NUMlj0S5PR6rKO0hRssexN7RoO10CBhLeHJptt+DZax5tsSLHsTm+/6LHeTXgbLWn2lVQbLVNX6RHfLWp2wAyxvus2XYPkLWgq/zPyZ9NoLYKGuyxu3Rivn+63wf7UwshsnO8CC6cMlACzGJhjIPlzhBy5ImR1hzP94Bz+5yNmmPNUxgTnbGaottScwStrvXJvc5Y84rhHGdOnoIJyhN/Gfph5o+0h5Hk5SusZZ8hz5YzcXxyb5PjHCLh2dRdU4phgrpagwGo/2NyiFV8eIKHfPKZGEI+LJPkuez9EMo68H5fQNqm9VyziPos7NR8h+R8lzhHKO0BAtjZLnJqqGi5h96LmmuRet4hu0CHP2LnluFfAInhySdclzE1WLNzEbNEtHoyPBLHdmeLPkOTvkTMc5T34Rg6iaWaXJzAiCR/ljof8fXWNQmUTVSPicRo6S52CIY4o8eb3M4R0mv1YNVBjtt9vtLKoeNt3m2yTPs6h68iamO6s+hxlmTQRR94Gkgv1a8lzx+/ehsBClefd48rKoevAmoL7u5cl1qfg+D94EpjXY7RBR3Hq44XT6NsQIg1cZDAue8cw5vHmVQcErHe/lRUaBV3lILI+vcZHkOV7lX65x3S49OLD8EX/cu0Vtv/qhp/Pa2hxTvf/3F/tl4fbW+z75Q03WyfDPk197cHhoJut+2fqx7DW2l6xcA3wOrVF/H+QtVIb7OZ1PsMUeHO7N0SGx2P8ZyWfL/f7bloTB/ewtGIYHerw6HF3nTdp0WU41LwXkXXQGUXULDlsFKkP+atPGNSO3s0EmQzD5tc/L76meQ6ZvUfXk6xJn/kj2W3DmZBJz7Jt0dCCOFIxPQsFp7GRIBBvWc9Mhqv5ZwletAlU0RR/+mafLFsew3wxCdUXwrO01J9lZ2N73LU/rndbZTPO3gyL45w3CCkwFybJE5c1u2+K23/5t5kZEg2o8e2lv0jY3XqWzPCAzIakeeIomeQa7yjudLqpukmfc85j17KLqgZ06JKfPFMSBAav6TKM8kvHe9KyRwyJOOa8B8wUfGQ46bEHjPdEclOqQPv06xz1NxvctA7+SvYEv4kXjHIaMs74tpwdZFl+f7jxgM21Yc4A7BJI2LbKwmVn9joFxuYq9ztMPJ1BF6QI2fV5je6zBW2wXR7wPQB9enR7PdTdoEr0X2UxvOriFcAUwX1DQMxhpdo1rSngTDbAthubc9JUW5zZfB/qFAbb0jJZUu3k+CGmUChosF/L5TsfN8y2n95saLM+n9Q/VYPlHxiJUg2W8/RsyWPkl40UFlgBXebPBcmUxeROD5XseeWeD5TOCX8FgOeLkphssN7cFb7IGFtig2tGggWDZfCsZEcBylqyA1GA5rmWmY7CcJRcL3wyW3S8qL1bASt2KTcJgofRRZJnB8gxFxHoEayV61lRLgxULVRZhsLhI/idUrwEs1bahIxnAOpqM/wlXEb4f2H+uhwAAAABJRU5ErkJggg==); + background-color: #333; + background-attachment: fixed; + color: #e5e5e5; + .page-header { + margin-top: 30px; + margin-bottom: 30px; + border-bottom: none; + } +} diff --git a/modules/forums/client/views/admin/configure.client.view.html b/modules/forums/client/views/admin/configure.client.view.html index b62474fa..79392448 100644 --- a/modules/forums/client/views/admin/configure.client.view.html +++ b/modules/forums/client/views/admin/configure.client.view.html @@ -1,4 +1,4 @@ -
+
@@ -7,7 +7,7 @@
- {{ 'FORUMS.CATEGORY.'+cat.name | translate }} +

{{ 'FORUMS.CATEGORY.'+cat.name | translate }}

@@ -21,7 +21,7 @@ - +

{{f.name}} R [{{'FORUMS.LINK_EDIT' | translate}}] [ +
+
+
+
+ +
+
+ +
+
+
+ +
+ + +
+ + + + + + + + + + + + + + + + + +
{{'FORUMS.CATEGORY.'+cat.name | translate}}{{'FORUMS.FIELDS.TOPICS' | translate}}{{'FORUMS.FIELDS.REPLIES' | translate}}{{'FORUMS.FIELDS.LAST_REPLY' | translate}}
+ + +
+

{{f.name}} + R +

+ +

+ +

{{'FORUMS.FIELDS.MODERATORS' | translate}}: {{m.username}}

+
+
{{f.topicCount}}{{f.replyCount}} +
+
+
+
+
\ No newline at end of file diff --git a/modules/forums/server/controllers/forums.server.controller.js b/modules/forums/server/controllers/forums.server.controller.js index 45e67a49..6f319ad5 100644 --- a/modules/forums/server/controllers/forums.server.controller.js +++ b/modules/forums/server/controllers/forums.server.controller.js @@ -20,7 +20,8 @@ var path = require('path'), exports.list = function (req, res) { Forum.find() .sort('order -createdat') - .populate('lastTopic') + .populate('lastNewTopic') + .populate('lastReplyTopic') .populate('moderators', 'username displayName profileImageURL uploaded downloaded') .exec(function (err, forums) { if (err) {