creating new directory
authorMaciej Tronowski <mtro@man.poznan.pl>
Fri, 10 Apr 2015 10:26:04 +0000 (12:26 +0200)
committerMaciej Tronowski <mtro@man.poznan.pl>
Fri, 10 Apr 2015 10:26:04 +0000 (12:26 +0200)
filex/forms.py [new file with mode: 0644]
filex/ftp.py
filex/urls.py
filex/views.py
qcg/templates/qcg/gridftp.html
qcg/views.py

diff --git a/filex/forms.py b/filex/forms.py
new file mode 100644 (file)
index 0000000..132bd73
--- /dev/null
@@ -0,0 +1,8 @@
+# coding=utf-8
+from django import forms
+
+
+class NewDirForm(forms.Form):
+    host = forms.CharField(label=u'Host', max_length=256, widget=forms.HiddenInput())
+    path = forms.CharField(label=u'Ścieżka', max_length=1024, widget=forms.HiddenInput())
+    name = forms.CharField(label=u'Nazwa', max_length=256)
index 4997176..38b23a5 100644 (file)
@@ -145,3 +145,8 @@ class FTPOperation:
         self.cli.rmdir(url, self._done, None, self.op_attr)
 
         self.wait()
+
+    def mkdir(self, url):
+        self.cli.mkdir(url, self._done, None, self.op_attr)
+
+        self.wait()
index f1c2ba2..9fa3991 100644 (file)
@@ -8,4 +8,5 @@ urlpatterns = patterns('',
     url(r'^upload/$', views.upload, name='upload'),
     url(r'^info/$', views.info, name='info'),
     url(r'^delete/$', views.delete, name='delete'),
+    url(r'^mkdir/$', views.mkdir, name='mkdir'),
 )
index b37a6ce..b72432b 100644 (file)
@@ -5,6 +5,7 @@ from django.http import JsonResponse, StreamingHttpResponse
 from django.template.defaultfilters import filesizeformat
 from django.utils.formats import date_format
 from django.views.decorators.http import require_POST
+from filex.forms import NewDirForm
 
 from filex.ftp import FTPOperation, FTPException
 from filex.uploadhandler import with_ftp_upload_handler
@@ -131,3 +132,31 @@ def delete(request):
             done.append(name)
 
     return JsonResponse({'done': done, 'fail': fail})
+
+
+@require_POST
+def mkdir(request):
+    check_auth(request)
+
+    # TODO actual data validation
+    form = NewDirForm(request.POST)
+
+    if form.is_valid():
+        host = form.cleaned_data['host']
+        path = form.cleaned_data['path']
+        name = form.cleaned_data['name']
+
+        url = 'gsiftp://' + host + path + '/' + name
+
+        print url
+
+        try:
+            FTPOperation(request.session['proxy']).mkdir(url)
+        except FTPException as e:
+            msg = e.message
+        else:
+            return JsonResponse({'success': True})
+    else:
+        msg = form.errors
+
+    return JsonResponse({'msg': msg}, status=400)
index 2505b04..0477aa8 100644 (file)
@@ -1,5 +1,5 @@
 {% extends 'qcg/base.html' %}
-{% load staticfiles %}
+{% load staticfiles bootstrap3 %}
 
 {% block extra_css %}
     <link href="{% static 'qcg/selectize/selectize.bootstrap3.css' %}" rel="stylesheet">
         $(function () {
             var statusTimeout;
 
+            function status(msg) {
+                clearTimeout(statusTimeout);
+                statusTimeout = setTimeout(function() {
+                    $('#status').text('');
+                }, 3000);
+
+                $('#status').text(msg);
+            }
+
             filex.files.on('change:checked', function() {
                 var selected = filex.selectedFiles().length;
 
                             filex.idle();
                         }
                         else {
-                            clearTimeout(statusTimeout);
-                            statusTimeout = setTimeout(function() {
-                                $('#status').text('');
-                            }, 3000);
-
-                            $('#status').text('Usuwanie zakończone pomyślnie');
+                            status('Usuwanie zakończone pomyślnie');
                         }
 
                         if (response.done.length)
 
                 $confirmModal.modal();
             });
+
+            $('#mkdir-form').submit(function(e) {
+                var $this = $(this);
+
+                e.preventDefault();
+                filex.busy();
+                $this.modal('hide');
+
+                $this.find('#id_host').val(filex.host);
+                $this.find('#id_path').val(filex.path.full());
+
+                $.post($this.attr('action'), $this.serialize(), function(response) {
+                    status('Katalog utworzono pomyślnie');
+                    filex.reloadFiles();
+                }, 'json')
+            });
         })
     </script>
 {% endblock extra_js %}
             </div>
         </div>
     </div>
+
+    <form id="mkdir-form" action="{% url 'filex:mkdir' %}" class="modal fade form-horizontal" tabindex="-1" role="dialog" aria-labelledby="mkdir-modal-label" aria-hidden="true">
+        <div class="modal-dialog">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">&times;</span>
+                    </button>
+                    <h4 class="modal-title" id="mkdir-modal-label">Nowy katalog</h4>
+                </div>
+                <div class="modal-body">
+                    {% csrf_token %}
+                    {% bootstrap_form new_dir_form layout='horizontal' %}
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-default" data-dismiss="modal">Anuluj</button>
+                    <button type="submit" class="btn btn-primary">OK</button>
+                </div>
+            </div>
+        </div>
+    </form>
 {% endblock container %}
 
 {% block footer %}
             <div class="btn-toolbar" role="toolbar" style="float: left">
                 <div class="btn-group" role="group">
                     <button id="btn-upload" class="btn btn-default navbar-btn">Wgraj plik</button>
-                    <button class="btn btn-default navbar-btn">Utwórz katalog</button>
+                    <button class="btn btn-default navbar-btn" data-toggle="modal" data-target="#mkdir-form">Utwórz katalog</button>
                 </div>
                 <div class="btn-group" role="group">
                     <button id="btn-rename" class="btn btn-default navbar-btn disabled">Zmień nazwę</button>
index 27fdf87..69f8286 100644 (file)
@@ -14,6 +14,7 @@ from django.utils.http import urlencode
 from django.utils.timezone import UTC
 from django_openid_auth.views import make_consumer
 from openid.extensions import ax
+from filex.forms import NewDirForm
 
 from qcg.forms import FiltersForm, ColumnsForm, JobDescriptionForm, EnvFormSet
 from qcg.utils import paginator_context
@@ -182,7 +183,7 @@ def job_new(request):
 
 @login_required
 def gridftp(request):
-    return render(request, 'qcg/gridftp.html')
+    return render(request, 'qcg/gridftp.html', {'new_dir_form': NewDirForm()})
 
 
 def gridftp_upload(request):