admin.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. module.exports = function(app) {
  2. 'use strict';
  3. var debug = require('debug')('crowi:routes:admin')
  4. , models = app.set('models')
  5. , Page = models.Page
  6. , User = models.User
  7. , Config = models.Config
  8. , MAX_PAGE_LIST = 5
  9. , actions = {};
  10. function createPager(currentPage, pageCount, itemCount, maxPageList) {
  11. var pager = {};
  12. pager.currentPage = currentPage;
  13. pager.pageCount = pageCount;
  14. pager.itemCount = itemCount;
  15. pager.previous = null;
  16. if (currentPage > 1) {
  17. pager.previous = currentPage - 1;
  18. }
  19. pager.next = null;
  20. if (currentPage < pageCount) {
  21. pager.next = currentPage + 1;
  22. }
  23. pager.pages = [];
  24. var pagerMin = Math.max(1, Math.ceil(currentPage - maxPageList/2));
  25. var pagerMax = Math.min(pageCount, Math.floor(currentPage + maxPageList/2));
  26. if (pagerMin == 1) {
  27. if (MAX_PAGE_LIST < pageCount) {
  28. pagerMax = MAX_PAGE_LIST;
  29. } else {
  30. pagerMax = pageCount;
  31. }
  32. }
  33. if (pagerMax == pageCount) {
  34. if ((pagerMax - MAX_PAGE_LIST) < 1) {
  35. pagerMin = 1;
  36. } else {
  37. pagerMin = pagerMax - MAX_PAGE_LIST;
  38. }
  39. }
  40. pager.previousDots = null;
  41. if (pagerMin > 1) {
  42. pager.previousDots = true;
  43. }
  44. pager.nextDots = null;
  45. if (pagerMax < pageCount) {
  46. pager.nextDots = true;
  47. }
  48. for (var i = pagerMin;
  49. i <= pagerMax;
  50. i++) {
  51. pager.pages.push(i);
  52. }
  53. return pager;
  54. }
  55. actions.index = function(req, res) {
  56. return res.render('admin/index');
  57. };
  58. actions.app = {};
  59. actions.app.index = function(req, res) {
  60. var settingForm;
  61. settingForm = Config.setupCofigFormData('crowi', req.config);
  62. debug('settingForm', settingForm);
  63. return res.render('admin/app', {
  64. settingForm: settingForm,
  65. });
  66. };
  67. actions.app.settingUpdate = function(req, res) {
  68. };
  69. actions.user = {};
  70. actions.user.index = function(req, res) {
  71. var page = parseInt(req.query.page) || 0;
  72. User.findUsersWithPagination({page: page}, function(err, users, pageCount, itemCount) {
  73. var pager = createPager(page, pageCount, itemCount, MAX_PAGE_LIST);
  74. return res.render('admin/users', {
  75. users: users,
  76. pager: pager
  77. });
  78. });
  79. };
  80. actions.user.makeAdmin = function(req, res) {
  81. var id = req.params.id;
  82. User.findById(id, function(err, userData) {
  83. userData.makeAdmin(function(err, userData) {
  84. if (err === null) {
  85. req.flash('successMessage', userData.name + 'さんのアカウントを管理者に設定しました。');
  86. } else {
  87. req.flash('errorMessage', '更新に失敗しました。');
  88. debug(err, userData);
  89. }
  90. return res.redirect('/admin/users');
  91. });
  92. });
  93. };
  94. actions.user.removeFromAdmin = function(req, res) {
  95. var id = req.params.id;
  96. User.findById(id, function(err, userData) {
  97. userData.removeFromAdmin(function(err, userData) {
  98. if (err === null) {
  99. req.flash('successMessage', userData.name + 'さんのアカウントを管理者から外しました。');
  100. } else {
  101. req.flash('errorMessage', '更新に失敗しました。');
  102. debug(err, userData);
  103. }
  104. return res.redirect('/admin/users');
  105. });
  106. });
  107. };
  108. actions.user.activate = function(req, res) {
  109. var id = req.params.id;
  110. User.findById(id, function(err, userData) {
  111. userData.statusActivate(function(err, userData) {
  112. if (err === null) {
  113. req.flash('successMessage', userData.name + 'さんのアカウントを承認しました');
  114. } else {
  115. req.flash('errorMessage', '更新に失敗しました。');
  116. debug(err, userData);
  117. }
  118. return res.redirect('/admin/users');
  119. });
  120. });
  121. };
  122. actions.user.suspend = function(req, res) {
  123. var id = req.params.id;
  124. User.findById(id, function(err, userData) {
  125. userData.statusSuspend(function(err, userData) {
  126. if (err === null) {
  127. req.flash('successMessage', userData.name + 'さんのアカウントを利用停止にしました');
  128. } else {
  129. req.flash('errorMessage', '更新に失敗しました。');
  130. debug(err, userData);
  131. }
  132. return res.redirect('/admin/users');
  133. });
  134. });
  135. };
  136. actions.api = {};
  137. actions.api.appSetting = function(req, res) {
  138. var form = req.body.settingForm;
  139. debug("posted form", req.form);
  140. debug("posted form", form);
  141. if (req.form.isValid) {
  142. Config.updateNamespaceByArray('crowi', form, function(err, config) {
  143. Config.updateConfigCache('crowi', config)
  144. return res.json({status: true});
  145. });
  146. } else {
  147. return res.json({status: false, message: req.form.errors.join('\n')});
  148. }
  149. };
  150. return actions;
  151. };