@ddj-v2/user-management 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,286 +1,286 @@
1
- {% import "components/user.html" as user with context %}
2
- {% import "components/form.html" as form with context %}
3
- {% extends "manage_base.html" %}
4
-
5
- {% block manage_content %}
6
- <div class="section">
7
- <div class="section__header">
8
- <h1 class="section__title">{{ _('User Detail') }} - {{ udoc.uname }} (#{{ udoc._id }})</h1>
9
- <div class="section__tools">
10
- <a href="{{ url('user_manage_main') }}" class="rounded button">
11
- <span class="icon icon-back"></span> {{ _('Back to List') }}
12
- </a>
13
- </div>
14
- </div>
15
-
16
- <!-- 用户基本信息 -->
17
- <div class="section__body">
18
- <div class="row">
19
- <div class="medium-8 columns">
20
- <h3>{{ _('Basic Information') }}</h3>
21
- <form method="post">
22
- <input type="hidden" name="operation" value="edit">
23
- <div class="row">
24
- <div class="medium-6 columns">
25
- {{ form.form_text({
26
- label: _('User ID'),
27
- name: 'uid',
28
- value: udoc._id,
29
- readonly: true
30
- }) }}
31
- </div>
32
- <div class="medium-6 columns">
33
- {{ form.form_text({
34
- label: _('Username'),
35
- name: 'uname',
36
- value: udoc.uname,
37
- required: true
38
- }) }}
39
- </div>
40
- </div>
41
- <div class="row">
42
- <div class="medium-12 columns">
43
- {{ form.form_text({
44
- label: _('Email'),
45
- name: 'mail',
46
- value: udoc.mail,
47
- type: 'email',
48
- required: true
49
- }) }}
50
- </div>
51
- </div>
52
- <div class="row">
53
- <div class="medium-6 columns">
54
- {{ form.form_text({
55
- label: _('School'),
56
- name: 'school',
57
- value: udoc.school or ''
58
- }) }}
59
- </div>
60
- <div class="medium-6 columns">
61
- {{ form.form_text({
62
- label: _('Registration Time'),
63
- name: 'regat',
64
- value: moment(udoc.regat).format('YYYY-MM-DD HH:mm:ss') if udoc.regat else '',
65
- readonly: true
66
- }) }}
67
- </div>
68
- </div>
69
- <div class="row">
70
- <div class="medium-12 columns">
71
- {{ form.form_textarea({
72
- label: _('Bio'),
73
- name: 'bio',
74
- value: udoc.bio or '',
75
- rows: 3
76
- }) }}
77
- </div>
78
- </div>
79
- <div class="row">
80
- <div class="medium-12 columns">
81
- <button type="submit" class="rounded primary button">
82
- <span class="icon icon-save"></span> {{ _('Save Changes') }}
83
- </button>
84
- </div>
85
- </div>
86
- </form>
87
- </div>
88
-
89
- <div class="medium-4 columns">
90
- <h3>{{ _('User Statistics') }}</h3>
91
- <dl class="large horizontal">
92
- <dt>{{ _('User ID') }}</dt>
93
- <dd>#{{ udoc._id }}</dd>
94
-
95
- <dt>{{ _('Registration Time') }}</dt>
96
- <dd>
97
- {% if udoc.regat %}
98
- {{ moment(udoc.regat).format('YYYY-MM-DD HH:mm') }}
99
- {% else %}
100
- -
101
- {% endif %}
102
- </dd>
103
-
104
- <dt>{{ _('Last Login') }}</dt>
105
- <dd>
106
- {% if udoc.loginat %}
107
- {{ moment(udoc.loginat).format('YYYY-MM-DD HH:mm') }}
108
- {% else %}
109
- -
110
- {% endif %}
111
- </dd>
112
-
113
- <dt>{{ _('Current Privilege') }}</dt>
114
- <dd>
115
- {% if udoc.priv == -1 %}
116
- <span class="badge badge--red">root</span>
117
- {% elif udoc.priv == 0 %}
118
- <span class="badge badge--gray">{{ _('Banned') }}</span>
119
- {% elif udoc.priv == 8 %}
120
- <span class="badge badge--yellow">Guest</span>
121
- {% elif udoc.priv == 4 %}
122
- <span class="badge badge--purple">System</span>
123
- {% elif udoc.priv == 16842756 %}
124
- <span class="badge badge--green">Default</span>
125
- {% else %}
126
- <span class="badge badge--blue">Other</span>
127
- {% endif %}
128
- <br><small>({{ udoc.priv }})</small>
129
- </dd>
130
-
131
- {% if dudoc %}
132
- <dt>{{ _('Domain Info') }}</dt>
133
- <dd>
134
- {% if dudoc.displayName %}
135
- {{ _('Display Name') }}: {{ dudoc.displayName }}<br>
136
- {% endif %}
137
- {% if dudoc.nSubmit %}
138
- {{ _('Submissions') }}: {{ dudoc.nSubmit }}<br>
139
- {% endif %}
140
- {% if dudoc.nAccept %}
141
- {{ _('Accepted') }}: {{ dudoc.nAccept }}<br>
142
- {% endif %}
143
- </dd>
144
- {% endif %}
145
- </dl>
146
- </div>
147
- </div>
148
- </div>
149
- </div>
150
-
151
- <!-- 权限管理 -->
152
- <div class="section">
153
- <div class="section__header">
154
- <h1 class="section__title">{{ _('Privilege Management') }}</h1>
155
- </div>
156
- <div class="section__body">
157
- <form method="post" class="row">
158
- <input type="hidden" name="operation" value="setPriv">
159
- <div class="medium-6 columns">
160
- {{ form.form_text({
161
- label: _('Privilege Value'),
162
- name: 'priv',
163
- value: udoc.priv,
164
- type: 'number'
165
- }) }}
166
- <p class="help-text">
167
- {{ _('Common values') }}:<br>
168
- -1: root<br>
169
- 0: {{ _('Banned') }}<br>
170
- 4: System<br>
171
- 8: Guest<br>
172
- 16842756: Default<br>
173
- {{ _('Other values will be marked as "Other"') }}
174
- </p>
175
- </div>
176
- <div class="medium-6 columns">
177
- <label>&nbsp;</label>
178
- <button type="submit" class="rounded button">
179
- <span class="icon icon-key"></span> {{ _('Update Privilege') }}
180
- </button>
181
- </div>
182
- </form>
183
- </div>
184
- </div>
185
-
186
- <!-- 密码重置 -->
187
- <div class="section">
188
- <div class="section__header">
189
- <h1 class="section__title">{{ _('Password Management') }}</h1>
190
- </div>
191
- <div class="section__body">
192
- <form method="post" class="row">
193
- <input type="hidden" name="operation" value="resetPassword">
194
- <div class="medium-6 columns">
195
- {{ form.form_text({
196
- label: _('New Password'),
197
- name: 'password',
198
- type: 'password',
199
- required: true
200
- }) }}
201
- </div>
202
- <div class="medium-6 columns">
203
- <label>&nbsp;</label>
204
- <button type="submit" class="rounded button warning" onclick="return confirm('{{ _('Are you sure to reset password?') }}')">
205
- <span class="icon icon-refresh"></span> {{ _('Reset Password') }}
206
- </button>
207
- </div>
208
- </form>
209
- </div>
210
- </div>
211
-
212
- <!-- 用户状态管理 -->
213
- <div class="section">
214
- <div class="section__header">
215
- <h1 class="section__title">{{ _('User Status') }}</h1>
216
- </div>
217
- <div class="section__body">
218
- <div class="row">
219
- {% if udoc.priv == 0 %}
220
- <div class="medium-6 columns">
221
- <form method="post" style="display: inline;">
222
- <input type="hidden" name="operation" value="unban">
223
- <button type="submit" class="rounded button success" onclick="return confirm('{{ _('Are you sure to unban this user?') }}')">
224
- <span class="icon icon-check"></span> {{ _('Unban User') }}
225
- </button>
226
- </form>
227
- </div>
228
- {% else %}
229
- {% if udoc.priv != -1 %}
230
- <div class="medium-6 columns">
231
- <form method="post" style="display: inline;">
232
- <input type="hidden" name="operation" value="ban">
233
- <button type="submit" class="rounded button alert" onclick="return confirm('{{ _('Are you sure to ban this user?') }}')">
234
- <span class="icon icon-close"></span> {{ _('Ban User') }}
235
- </button>
236
- </form>
237
- </div>
238
- {% endif %}
239
- {% endif %}
240
- </div>
241
- </div>
242
- </div>
243
-
244
- <style>
245
- .badge {
246
- display: inline-block;
247
- padding: 2px 6px;
248
- font-size: 11px;
249
- font-weight: bold;
250
- line-height: 1;
251
- color: #fff;
252
- text-align: center;
253
- white-space: nowrap;
254
- vertical-align: baseline;
255
- border-radius: 3px;
256
- }
257
-
258
- .badge--red { background-color: #d9534f; }
259
- .badge--blue { background-color: #5bc0de; }
260
- .badge--green { background-color: #5cb85c; }
261
- .badge--gray { background-color: #777; }
262
- .badge--yellow { background-color: #f0ad4e; }
263
- .badge--purple { background-color: #9b59b6; }
264
-
265
- .help-text {
266
- font-size: 12px;
267
- color: #666;
268
- margin-top: 5px;
269
- }
270
-
271
- .warning {
272
- background-color: #f0ad4e;
273
- border-color: #eea236;
274
- }
275
-
276
- .success {
277
- background-color: #5cb85c;
278
- border-color: #4cae4c;
279
- }
280
-
281
- .alert {
282
- background-color: #d9534f;
283
- border-color: #d43f3a;
284
- }
285
- </style>
1
+ {% import "components/user.html" as user with context %}
2
+ {% import "components/form.html" as form with context %}
3
+ {% extends "manage_base.html" %}
4
+
5
+ {% block manage_content %}
6
+ <div class="section">
7
+ <div class="section__header">
8
+ <h1 class="section__title">{{ _('User Detail') }} - {{ udoc.uname }} (#{{ udoc._id }})</h1>
9
+ <div class="section__tools">
10
+ <a href="{{ url('user_manage_main') }}" class="rounded button">
11
+ <span class="icon icon-back"></span> {{ _('Back to List') }}
12
+ </a>
13
+ </div>
14
+ </div>
15
+
16
+ <!-- 用户基本信息 -->
17
+ <div class="section__body">
18
+ <div class="row">
19
+ <div class="medium-8 columns">
20
+ <h3>{{ _('Basic Information') }}</h3>
21
+ <form method="post">
22
+ <input type="hidden" name="operation" value="edit">
23
+ <div class="row">
24
+ <div class="medium-6 columns">
25
+ {{ form.form_text({
26
+ label: _('User ID'),
27
+ name: 'uid',
28
+ value: udoc._id,
29
+ readonly: true
30
+ }) }}
31
+ </div>
32
+ <div class="medium-6 columns">
33
+ {{ form.form_text({
34
+ label: _('Username'),
35
+ name: 'uname',
36
+ value: udoc.uname,
37
+ required: true
38
+ }) }}
39
+ </div>
40
+ </div>
41
+ <div class="row">
42
+ <div class="medium-12 columns">
43
+ {{ form.form_text({
44
+ label: _('Email'),
45
+ name: 'mail',
46
+ value: udoc.mail,
47
+ type: 'email',
48
+ required: true
49
+ }) }}
50
+ </div>
51
+ </div>
52
+ <div class="row">
53
+ <div class="medium-6 columns">
54
+ {{ form.form_text({
55
+ label: _('School'),
56
+ name: 'school',
57
+ value: udoc.school or ''
58
+ }) }}
59
+ </div>
60
+ <div class="medium-6 columns">
61
+ {{ form.form_text({
62
+ label: _('Registration Time'),
63
+ name: 'regat',
64
+ value: moment(udoc.regat).format('YYYY-MM-DD HH:mm:ss') if udoc.regat else '',
65
+ readonly: true
66
+ }) }}
67
+ </div>
68
+ </div>
69
+ <div class="row">
70
+ <div class="medium-12 columns">
71
+ {{ form.form_textarea({
72
+ label: _('Bio'),
73
+ name: 'bio',
74
+ value: udoc.bio or '',
75
+ rows: 3
76
+ }) }}
77
+ </div>
78
+ </div>
79
+ <div class="row">
80
+ <div class="medium-12 columns">
81
+ <button type="submit" class="rounded primary button">
82
+ <span class="icon icon-save"></span> {{ _('Save Changes') }}
83
+ </button>
84
+ </div>
85
+ </div>
86
+ </form>
87
+ </div>
88
+
89
+ <div class="medium-4 columns">
90
+ <h3>{{ _('User Statistics') }}</h3>
91
+ <dl class="large horizontal">
92
+ <dt>{{ _('User ID') }}</dt>
93
+ <dd>#{{ udoc._id }}</dd>
94
+
95
+ <dt>{{ _('Registration Time') }}</dt>
96
+ <dd>
97
+ {% if udoc.regat %}
98
+ {{ moment(udoc.regat).format('YYYY-MM-DD HH:mm') }}
99
+ {% else %}
100
+ -
101
+ {% endif %}
102
+ </dd>
103
+
104
+ <dt>{{ _('Last Login') }}</dt>
105
+ <dd>
106
+ {% if udoc.loginat %}
107
+ {{ moment(udoc.loginat).format('YYYY-MM-DD HH:mm') }}
108
+ {% else %}
109
+ -
110
+ {% endif %}
111
+ </dd>
112
+
113
+ <dt>{{ _('Current Privilege') }}</dt>
114
+ <dd>
115
+ {% if udoc.priv == -1 %}
116
+ <span class="badge badge--red">root</span>
117
+ {% elif udoc.priv == 0 %}
118
+ <span class="badge badge--gray">{{ _('Banned') }}</span>
119
+ {% elif udoc.priv == 8 %}
120
+ <span class="badge badge--yellow">Guest</span>
121
+ {% elif udoc.priv == 4 %}
122
+ <span class="badge badge--purple">System</span>
123
+ {% elif udoc.priv == 16842756 %}
124
+ <span class="badge badge--green">Default</span>
125
+ {% else %}
126
+ <span class="badge badge--blue">Other</span>
127
+ {% endif %}
128
+ <br><small>({{ udoc.priv }})</small>
129
+ </dd>
130
+
131
+ {% if dudoc %}
132
+ <dt>{{ _('Domain Info') }}</dt>
133
+ <dd>
134
+ {% if dudoc.displayName %}
135
+ {{ _('Display Name') }}: {{ dudoc.displayName }}<br>
136
+ {% endif %}
137
+ {% if dudoc.nSubmit %}
138
+ {{ _('Submissions') }}: {{ dudoc.nSubmit }}<br>
139
+ {% endif %}
140
+ {% if dudoc.nAccept %}
141
+ {{ _('Accepted') }}: {{ dudoc.nAccept }}<br>
142
+ {% endif %}
143
+ </dd>
144
+ {% endif %}
145
+ </dl>
146
+ </div>
147
+ </div>
148
+ </div>
149
+ </div>
150
+
151
+ <!-- 权限管理 -->
152
+ <div class="section">
153
+ <div class="section__header">
154
+ <h1 class="section__title">{{ _('Privilege Management') }}</h1>
155
+ </div>
156
+ <div class="section__body">
157
+ <form method="post" class="row">
158
+ <input type="hidden" name="operation" value="setPriv">
159
+ <div class="medium-6 columns">
160
+ {{ form.form_text({
161
+ label: _('Privilege Value'),
162
+ name: 'priv',
163
+ value: udoc.priv,
164
+ type: 'number'
165
+ }) }}
166
+ <p class="help-text">
167
+ {{ _('Common values') }}:<br>
168
+ -1: root<br>
169
+ 0: {{ _('Banned') }}<br>
170
+ 4: System<br>
171
+ 8: Guest<br>
172
+ 16842756: Default<br>
173
+ {{ _('Other values will be marked as "Other"') }}
174
+ </p>
175
+ </div>
176
+ <div class="medium-6 columns">
177
+ <label>&nbsp;</label>
178
+ <button type="submit" class="rounded button">
179
+ <span class="icon icon-key"></span> {{ _('Update Privilege') }}
180
+ </button>
181
+ </div>
182
+ </form>
183
+ </div>
184
+ </div>
185
+
186
+ <!-- 密码重置 -->
187
+ <div class="section">
188
+ <div class="section__header">
189
+ <h1 class="section__title">{{ _('Password Management') }}</h1>
190
+ </div>
191
+ <div class="section__body">
192
+ <form method="post" class="row">
193
+ <input type="hidden" name="operation" value="resetPassword">
194
+ <div class="medium-6 columns">
195
+ {{ form.form_text({
196
+ label: _('New Password'),
197
+ name: 'password',
198
+ type: 'password',
199
+ required: true
200
+ }) }}
201
+ </div>
202
+ <div class="medium-6 columns">
203
+ <label>&nbsp;</label>
204
+ <button type="submit" class="rounded button warning" onclick="return confirm('{{ _('Are you sure to reset password?') }}')">
205
+ <span class="icon icon-refresh"></span> {{ _('Reset Password') }}
206
+ </button>
207
+ </div>
208
+ </form>
209
+ </div>
210
+ </div>
211
+
212
+ <!-- 用户状态管理 -->
213
+ <div class="section">
214
+ <div class="section__header">
215
+ <h1 class="section__title">{{ _('User Status') }}</h1>
216
+ </div>
217
+ <div class="section__body">
218
+ <div class="row">
219
+ {% if udoc.priv == 0 %}
220
+ <div class="medium-6 columns">
221
+ <form method="post" style="display: inline;">
222
+ <input type="hidden" name="operation" value="unban">
223
+ <button type="submit" class="rounded button success" onclick="return confirm('{{ _('Are you sure to unban this user?') }}')">
224
+ <span class="icon icon-check"></span> {{ _('Unban User') }}
225
+ </button>
226
+ </form>
227
+ </div>
228
+ {% else %}
229
+ {% if udoc.priv != -1 %}
230
+ <div class="medium-6 columns">
231
+ <form method="post" style="display: inline;">
232
+ <input type="hidden" name="operation" value="ban">
233
+ <button type="submit" class="rounded button alert" onclick="return confirm('{{ _('Are you sure to ban this user?') }}')">
234
+ <span class="icon icon-close"></span> {{ _('Ban User') }}
235
+ </button>
236
+ </form>
237
+ </div>
238
+ {% endif %}
239
+ {% endif %}
240
+ </div>
241
+ </div>
242
+ </div>
243
+
244
+ <style>
245
+ .badge {
246
+ display: inline-block;
247
+ padding: 2px 6px;
248
+ font-size: 11px;
249
+ font-weight: bold;
250
+ line-height: 1;
251
+ color: #fff;
252
+ text-align: center;
253
+ white-space: nowrap;
254
+ vertical-align: baseline;
255
+ border-radius: 3px;
256
+ }
257
+
258
+ .badge--red { background-color: #d9534f; }
259
+ .badge--blue { background-color: #5bc0de; }
260
+ .badge--green { background-color: #5cb85c; }
261
+ .badge--gray { background-color: #777; }
262
+ .badge--yellow { background-color: #f0ad4e; }
263
+ .badge--purple { background-color: #9b59b6; }
264
+
265
+ .help-text {
266
+ font-size: 12px;
267
+ color: #666;
268
+ margin-top: 5px;
269
+ }
270
+
271
+ .warning {
272
+ background-color: #f0ad4e;
273
+ border-color: #eea236;
274
+ }
275
+
276
+ .success {
277
+ background-color: #5cb85c;
278
+ border-color: #4cae4c;
279
+ }
280
+
281
+ .alert {
282
+ background-color: #d9534f;
283
+ border-color: #d43f3a;
284
+ }
285
+ </style>
286
286
  {% endblock %}