Prechádzať zdrojové kódy

[doc2] Delete a document from the new homepage

Romain Rigaux 10 rokov pred
rodič
commit
68ba158

+ 4 - 3
desktop/core/src/desktop/api2.py

@@ -124,10 +124,11 @@ def create_directory(request):
 @api_error_handler
 @require_POST
 def delete_document(request):
-  document_id = request.POST.get('document_id')
+  document_id = json.loads(request.POST.get('doc_id'))
+  skip_trash = json.loads(request.POST.get('skip_trash', 'false')) # TODO always false currently
 
-  document = Document2.objects.document(request.user, id=document_id)
-  if document.type == 'directory' and document.dependencies():
+  document = Document2.objects.document(request.user, doc_id=document_id)
+  if document.type == 'directory' and document.dependencies().count() > 1:
     raise PopupException(_('Directory is not empty'))
 
   document.delete()

+ 3 - 2
desktop/core/src/desktop/models.py

@@ -739,7 +739,7 @@ class Document2Manager(models.Manager):
 
   # TODO prevent get
   def document(self, user, doc_id):
-    return self.get_documents(user).get(id=doc_id)
+    return self.documents(user).get(id=doc_id)
 
   # TODO permissions
   def documents(self, user):
@@ -772,6 +772,7 @@ class Document2(models.Model):
   last_modified = models.DateTimeField(auto_now=True, db_index=True, verbose_name=_t('Time last modified'))
   version = models.SmallIntegerField(default=1, verbose_name=_t('Document version'), db_index=True)
   is_history = models.BooleanField(default=False, db_index=True)
+  # is_trashed
 
   tags = models.ManyToManyField('self', db_index=True)
   dependencies = models.ManyToManyField('self', db_index=True)
@@ -911,7 +912,7 @@ class Directory(Document2):
       raise ValidationError(_('Same directory %s for %s already exist') % (self.owner, self.name))
 
   def parent(self):
-    return Document2.objects.get(type='directory', dependencies=[self.pk])
+    return Document2.objects.get(type='directory', dependencies=[self.pk]) # or name__startswith=self.name
 
   def documents(self):
     return self.dependencies.all() # TODO perms

+ 29 - 10
desktop/core/src/desktop/static/desktop/js/home2.vm.js

@@ -21,6 +21,7 @@ function HomeViewModel(data) {
   self.documents = ko.observableArray();
   self.path = ko.mapping.fromJS('/');
   self.mkdirFormPath = ko.observable('');
+  self.deleteFormPath = ko.observable('');
 
   self.page = ko.observable(1);
   self.documentsPerPage = ko.observable(50);
@@ -85,16 +86,34 @@ function HomeViewModel(data) {
     $.post("/desktop/api2/doc/mkdir", {
       parent_path: ko.mapping.toJSON(self.path),
       name: ko.mapping.toJSON(self.mkdirFormPath)
-      }, function (data) {
-        if (data.status == 0) {
-          self.loadDocuments(self.path()); // TODO proper refresh
-          self.mkdirFormPath('');
-        }
-        else {
+    }, function (data) {
+      if (data.status == 0) {
+        self.loadDocuments(self.path()); // TODO proper refresh
+        self.mkdirFormPath('');
+      }
+      else {
           $(document).trigger("error", data.message);
-        }
-     }).fail(function (xhr) {
-       $(document).trigger("error", xhr.responseText);
-     });
+      }
+    }).fail(function (xhr) {
+      $(document).trigger("error", xhr.responseText);
+    });
   };
+
+  self.deleteDocument = function() {
+    $.post("/desktop/api2/doc/delete", {
+      doc_id: ko.mapping.toJSON(self.deleteFormPath),
+      skip_trash: ko.mapping.toJSON(false)
+    }, function (data) {
+      if (data.status == 0) {
+        self.loadDocuments(self.path()); // TODO proper refresh
+        self.mkdirFormPath('');
+      }
+      else {
+        $(document).trigger("error", data.message);
+      }
+    }).fail(function (xhr) {
+      $(document).trigger("error", xhr.responseText);
+    });
+  };
+
 }

+ 3 - 1
desktop/core/src/desktop/templates/home2.mako

@@ -141,8 +141,10 @@ ${ commonheader(_('Welcome Home'), "home", user) | n,unicode }
         <h2 class="card-heading simple">${_('My Documents')}</h2>
         <span data-bind="text: path"></span>
         <br/>
-        <input data-bind="value: mkdirFormPath"></input>
+        <input data-bind="value: mkdirFormPath" placeholder="dir name, e.g. projects"></input>
         <a href="javascript(0);" class="btn" data-bind="click: mkdir"><i class="fa fa-plus-circle"></i> ${ _('Create Directory') }</a>
+        <input data-bind="value: deleteFormPath" placeholder="doc id, e.g. 50491"></input>
+        <a href="javascript(0);" class="btn" data-bind="click: deleteDocument"><i class="fa fa-times"></i> ${ _('Delete') }</a>
 
         <div class="card-body">
           <p>