|
@@ -1,6 +1,8 @@
|
1
|
1
|
# -*- coding: utf-8 -*-
|
2
|
2
|
import transaction
|
|
3
|
+
|
3
|
4
|
from sqlalchemy.orm import Query
|
|
5
|
+from tg.i18n import ugettext as _
|
4
|
6
|
|
5
|
7
|
from tracim.lib.userworkspace import RoleApi
|
6
|
8
|
from tracim.model.auth import Group
|
|
@@ -17,9 +19,12 @@ class WorkspaceApi(object):
|
17
|
19
|
def __init__(self, current_user: User):
|
18
|
20
|
self._user = current_user
|
19
|
21
|
|
|
22
|
+ def _base_query_without_roles(self):
|
|
23
|
+ return DBSession.query(Workspace).filter(Workspace.is_deleted==False)
|
|
24
|
+
|
20
|
25
|
def _base_query(self):
|
21
|
26
|
if self._user.profile.id>=Group.TIM_ADMIN:
|
22
|
|
- return DBSession.query(Workspace).filter(Workspace.is_deleted==False)
|
|
27
|
+ return self._base_query_without_roles()
|
23
|
28
|
|
24
|
29
|
return DBSession.query(Workspace).\
|
25
|
30
|
join(Workspace.roles).\
|
|
@@ -28,11 +33,14 @@ class WorkspaceApi(object):
|
28
|
33
|
|
29
|
34
|
def create_workspace(
|
30
|
35
|
self,
|
31
|
|
- label: str,
|
|
36
|
+ label: str='',
|
32
|
37
|
description: str='',
|
33
|
38
|
calendar_enabled: bool=False,
|
34
|
39
|
save_now: bool=False,
|
35
|
40
|
) -> Workspace:
|
|
41
|
+ if not label:
|
|
42
|
+ label = self.generate_label()
|
|
43
|
+
|
36
|
44
|
workspace = Workspace()
|
37
|
45
|
workspace.label = label
|
38
|
46
|
workspace.description = description
|
|
@@ -146,6 +154,19 @@ class WorkspaceApi(object):
|
146
|
154
|
def get_base_query(self) -> Query:
|
147
|
155
|
return self._base_query()
|
148
|
156
|
|
|
157
|
+ def generate_label(self) -> str:
|
|
158
|
+ """
|
|
159
|
+ :return: Generated workspace label
|
|
160
|
+ """
|
|
161
|
+ query = self._base_query_without_roles() \
|
|
162
|
+ .filter(Workspace.label.ilike('{0}%'.format(
|
|
163
|
+ _('Workspace'),
|
|
164
|
+ )))
|
|
165
|
+
|
|
166
|
+ return _('Workspace {}').format(
|
|
167
|
+ query.count() + 1,
|
|
168
|
+ )
|
|
169
|
+
|
149
|
170
|
|
150
|
171
|
class UnsafeWorkspaceApi(WorkspaceApi):
|
151
|
172
|
def _base_query(self):
|