瀏覽代碼

Closes #142: Generate folders default labels

Bastien Sevajol (Algoo) 7 年之前
父節點
當前提交
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,6 +336,10 @@ class ContentApi(object):
336 336
 
337 337
     def create(self, content_type: str, workspace: Workspace, parent: Content=None, label:str ='', do_save=False, is_temporary: bool=False) -> Content:
338 338
         assert content_type in ContentType.allowed_types()
339
+
340
+        if not label:
341
+            label = self.generate_folder_label(workspace, parent)
342
+
339 343
         content = Content()
340 344
         content.owner = self._user
341 345
         content.parent = parent
@@ -1036,3 +1040,25 @@ class ContentApi(object):
1036 1040
             )
1037 1041
         )
1038 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,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):