From f86738dcb0bffeb0358528ad56dbdb7fdcf96eb1 Mon Sep 17 00:00:00 2001 From: OldHawk Date: Wed, 14 Jun 2017 17:28:40 +0800 Subject: [PATCH] feat(invitations): list Effective invitations on detail view --- config/env/torrents.js | 2 +- modules/core/client/app/trans-string-en.js | 14 +++++ modules/core/client/app/trans-string-zh.js | 14 +++++ modules/core/client/less/mt.less | 4 ++ .../client/config/invitations.client.menus.js | 2 +- .../invitations.client.controller.js | 16 ++++-- .../client/views/detail.client.view.html | 51 +++++++++++++++++-- .../invitations.server.controller.js | 47 +++++++++++++++-- 8 files changed, 135 insertions(+), 15 deletions(-) diff --git a/config/env/torrents.js b/config/env/torrents.js index 4260d9e5..5bee5554 100644 --- a/config/env/torrents.js +++ b/config/env/torrents.js @@ -19,7 +19,7 @@ module.exports = { allow_social_sign: true }, invite: { - open_invite: false, + open_invite: true, score_exchange: 10000, expires: 60 * 60 * 1000 * 24 }, diff --git a/modules/core/client/app/trans-string-en.js b/modules/core/client/app/trans-string-en.js index 69ced646..41e861a6 100644 --- a/modules/core/client/app/trans-string-en.js +++ b/modules/core/client/app/trans-string-en.js @@ -427,7 +427,21 @@ EXCHANGE_INVITATION_SUCCESSFULLY: 'Exchange invitation successfully', EXCHANGE_INVITATION_ERROR: 'Exchange invitation failed', INVITE_CLOSED: 'The invitation function is closed and you cannot exchange an invitations ...', + INVITE_INFO: 'The invitation function is closed and only admin/oper can use it ...', NOTE_CAPTION: 'Note!', + NOTE_TIP: 'Tip:', + + //invitation + INVITATION: { + MY_INVITATION: 'My invitations', + INVITE_NOTE: 'Please attention to the expiration time of the time limit invitation.', + TITLE_CREATEDAT: 'CreatedAt', + TITLE_EXPIRESAT: 'ExpiresAt', + TITLE_OPERATION: 'Operation', + TITLE_TOKEN: 'Token', + TITLE_SEND: 'Send an invitation' + }, + GET_INVITATIONS_ERROR: 'Get invitations failed', //user message box MESSAGES_INBOX: 'Messages Inbox', diff --git a/modules/core/client/app/trans-string-zh.js b/modules/core/client/app/trans-string-zh.js index 9ed5fe94..3f71cf91 100644 --- a/modules/core/client/app/trans-string-zh.js +++ b/modules/core/client/app/trans-string-zh.js @@ -427,7 +427,21 @@ EXCHANGE_INVITATION_SUCCESSFULLY: '限时邀请兑换成功', EXCHANGE_INVITATION_ERROR: '限时邀请兑换失败', INVITE_CLOSED: '邀请功能已关闭, 现在不能使用积分兑换邀请 ...', + INVITE_INFO: '邀请功能已关闭, 现在只有系统管理员可发送邀请 ...', NOTE_CAPTION: '请注意!', + NOTE_TIP: '提示:', + + //invitation + INVITATION: { + MY_INVITATION: '我的邀请', + INVITE_NOTE: '请注意限时邀请的过期时间.', + TITLE_CREATEDAT: '创建时间', + TITLE_EXPIRESAT: '过期时间', + TITLE_OPERATION: '操作', + TITLE_TOKEN: '哈希码', + TITLE_SEND: '发送邀请' + }, + GET_INVITATIONS_ERROR: '获取邀请列表失败', //user message box MESSAGES_INBOX: '消息收件箱', diff --git a/modules/core/client/less/mt.less b/modules/core/client/less/mt.less index e5cd6ed4..cb6dacd7 100644 --- a/modules/core/client/less/mt.less +++ b/modules/core/client/less/mt.less @@ -935,6 +935,10 @@ body { color: @mt-base-color; } +.color-mt-base { + color: @mt-base-color; +} + .curr-score { color: @mt-base-color; font-size: 48px; diff --git a/modules/invitations/client/config/invitations.client.menus.js b/modules/invitations/client/config/invitations.client.menus.js index 2385c692..1fccf582 100644 --- a/modules/invitations/client/config/invitations.client.menus.js +++ b/modules/invitations/client/config/invitations.client.menus.js @@ -2,7 +2,7 @@ 'use strict'; angular - .module('core') + .module('invitations') .run(menuConfig); menuConfig.$inject = ['menuService']; diff --git a/modules/invitations/client/controllers/invitations.client.controller.js b/modules/invitations/client/controllers/invitations.client.controller.js index 4fce4b6c..ce5d113a 100644 --- a/modules/invitations/client/controllers/invitations.client.controller.js +++ b/modules/invitations/client/controllers/invitations.client.controller.js @@ -5,10 +5,10 @@ .module('invitations') .controller('InviteController', InviteController); - InviteController.$inject = ['$rootScope', '$scope', '$state', '$translate', '$timeout', 'Authentication', '$window', 'MeanTorrentConfig', - 'NotifycationService', 'InvitationsService']; + InviteController.$inject = ['$scope', '$state', '$translate', '$timeout', 'Authentication', '$window', 'MeanTorrentConfig', 'NotifycationService', + 'InvitationsService']; - function InviteController($rootScope, $scope, $state, $translate, $timeout, Authentication, $window, MeanTorrentConfig, NotifycationService, + function InviteController($scope, $state, $translate, $timeout, Authentication, $window, MeanTorrentConfig, NotifycationService, InvitationsService) { var vm = this; vm.inviteConfig = MeanTorrentConfig.meanTorrentConfig.invite; @@ -22,9 +22,15 @@ } /** - * init + * getMyInvitations */ - vm.init = function () { + vm.getMyInvitations = function () { + InvitationsService.get({}, function (items) { + vm.my_invitations = items.my_invitations; + vm.used_invitations = items.used_invitations; + }, function (res) { + NotifycationService.showErrorNotify('GET_INVITATIONS_ERROR'); + }); }; } }()); diff --git a/modules/invitations/client/views/detail.client.view.html b/modules/invitations/client/views/detail.client.view.html index 4b478e72..37e92c33 100644 --- a/modules/invitations/client/views/detail.client.view.html +++ b/modules/invitations/client/views/detail.client.view.html @@ -1,5 +1,50 @@ -
-
-

invitations detail

+
+
+
+
+ +
+
+ +
+
+
+ +
{{ 'INVITATION.MY_INVITATION' | translate }} ({{vm.my_invitations.length}}) +
+
+

{{ 'NOTE_TIP' | translate }} {{ 'INVITATION.INVITE_NOTE' | translate }}

+
+ +
+ + + + + + + + + + + + + + + + + + + +
#{{'INVITATION.TITLE_TOKEN' | translate}}{{'INVITATION.TITLE_CREATEDAT' | translate}}{{'INVITATION.TITLE_EXPIRESAT' | translate}}{{'INVITATION.TITLE_OPERATION' | translate}}
{{$index+1}}{{r.token}}{{r.createdat | date:'yyyy-MM-dd HH:mm:ss'}}{{r.expiresat | date:'yyyy-MM-dd HH:mm:ss'}} + {{'INVITATION.TITLE_SEND' | translate}} +
+
+
+
+
diff --git a/modules/invitations/server/controllers/invitations.server.controller.js b/modules/invitations/server/controllers/invitations.server.controller.js index 327147de..6ef3090f 100644 --- a/modules/invitations/server/controllers/invitations.server.controller.js +++ b/modules/invitations/server/controllers/invitations.server.controller.js @@ -20,6 +20,7 @@ exports.create = function (req, res) { var invitation = new Invitation(); invitation.expiresat = Date.now() + config.meanTorrentConfig.invite.expires; invitation.user = req.user; + invitation.token = req.user.randomAsciiString(32); invitation.save(function (err) { if (err) { @@ -51,13 +52,49 @@ exports.create = function (req, res) { * List of Invitations */ exports.list = function (req, res) { - Invitation.find().sort('-created').populate('user', 'displayName').exec(function (err, invitations) { - if (err) { - return res.status(422).send({ - message: errorHandler.getErrorMessage(err) + var findMyInvitations = function (callback) { + Invitation.find({ + user: req.user._id, + status: 0, + expiresat: {$gt: Date.now()} + }) + .sort('createdat') + .populate('user') + .exec(function (err, invitations) { + if (err) { + callback(err, null); + } else { + callback(null, invitations); + } }); + }; + + var findUsedInvitations = function (callback) { + Invitation.find({ + where: { + user: req.user._id, + status: 2 + } + }) + .sort('registeredat') + .populate('user') + .exec(function (err, invitations) { + if (err) { + callback(err, null); + } else { + callback(null, invitations); + } + }); + }; + + async.parallel([findMyInvitations, findUsedInvitations], function (err, results) { + if (err) { + return res.status(422).send(err); } else { - res.json(invitations); + res.json({ + my_invitations: results[0], + used_invitations: results[1] + }); } }); };