소스 검색

Closes #142: Generate folders default labels

Bastien Sevajol (Algoo) 8 년 전
부모
커밋
0abc63e5c1
2개의 변경된 파일49개의 추가작업 그리고 2개의 파일을 삭제
  1. 26 0
      tracim/tracim/lib/content.py
  2. 23 2
      tracim/tracim/lib/workspace.py

+ 26 - 0
tracim/tracim/lib/content.py 파일 보기

336
 
336
 
337
     def create(self, content_type: str, workspace: Workspace, parent: Content=None, label:str ='', do_save=False, is_temporary: bool=False) -> Content:
337
     def create(self, content_type: str, workspace: Workspace, parent: Content=None, label:str ='', do_save=False, is_temporary: bool=False) -> Content:
338
         assert content_type in ContentType.allowed_types()
338
         assert content_type in ContentType.allowed_types()
339
+
340
+        if not label:
341
+            label = self.generate_folder_label(workspace, parent)
342
+
339
         content = Content()
343
         content = Content()
340
         content.owner = self._user
344
         content.owner = self._user
341
         content.parent = parent
345
         content.parent = parent
1036
             )
1040
             )
1037
         )
1041
         )
1038
         return query.one()
1042
         return query.one()
1043
+
1044
+    def generate_folder_label(
1045
+            self,
1046
+            workspace: Workspace,
1047
+            parent: Content=None,
1048
+    ) -> str:
1049
+        """
1050
+        Generate a folder label
1051
+        :param workspace: Future folder workspace
1052
+        :param parent: Parent of foture folder (can be None)
1053
+        :return: Generated folder name
1054
+        """
1055
+        query = self._base_query(workspace=workspace)\
1056
+            .filter(Content.label.ilike('{0}%'.format(
1057
+                _('New folder'),
1058
+            )))
1059
+        if parent:
1060
+            query = query.filter(Content.parent == parent)
1061
+
1062
+        return _('New folder {0}').format(
1063
+            query.count() + 1,
1064
+        )

+ 23 - 2
tracim/tracim/lib/workspace.py 파일 보기

1
 # -*- coding: utf-8 -*-
1
 # -*- coding: utf-8 -*-
2
 import transaction
2
 import transaction
3
+
3
 from sqlalchemy.orm import Query
4
 from sqlalchemy.orm import Query
5
+from tg.i18n import ugettext as _
4
 
6
 
5
 from tracim.lib.userworkspace import RoleApi
7
 from tracim.lib.userworkspace import RoleApi
6
 from tracim.model.auth import Group
8
 from tracim.model.auth import Group
17
     def __init__(self, current_user: User):
19
     def __init__(self, current_user: User):
18
         self._user = current_user
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
     def _base_query(self):
25
     def _base_query(self):
21
         if self._user.profile.id>=Group.TIM_ADMIN:
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
         return DBSession.query(Workspace).\
29
         return DBSession.query(Workspace).\
25
             join(Workspace.roles).\
30
             join(Workspace.roles).\
28
 
33
 
29
     def create_workspace(
34
     def create_workspace(
30
             self,
35
             self,
31
-            label: str,
36
+            label: str='',
32
             description: str='',
37
             description: str='',
33
             calendar_enabled: bool=False,
38
             calendar_enabled: bool=False,
34
             save_now: bool=False,
39
             save_now: bool=False,
35
     ) -> Workspace:
40
     ) -> Workspace:
41
+        if not label:
42
+            label = self.generate_label()
43
+
36
         workspace = Workspace()
44
         workspace = Workspace()
37
         workspace.label = label
45
         workspace.label = label
38
         workspace.description = description
46
         workspace.description = description
146
     def get_base_query(self) -> Query:
154
     def get_base_query(self) -> Query:
147
         return self._base_query()
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
 class UnsafeWorkspaceApi(WorkspaceApi):
171
 class UnsafeWorkspaceApi(WorkspaceApi):
151
     def _base_query(self):
172
     def _base_query(self):