file renaming in gridftp
authorMaciej Tronowski <mtro@man.poznan.pl>
Fri, 10 Apr 2015 12:17:35 +0000 (14:17 +0200)
committerMaciej Tronowski <mtro@man.poznan.pl>
Fri, 10 Apr 2015 12:17:35 +0000 (14:17 +0200)
filex/forms.py
filex/urls.py
filex/views.py
qcg/templates/qcg/gridftp.html
qcg/views.py

index 132bd73..a934aaf 100644 (file)
@@ -6,3 +6,10 @@ 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)
+
+
+class RenameForm(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())
+    src = forms.CharField(label=u'Stara nazwa', max_length=256, widget=forms.HiddenInput())
+    dst = forms.CharField(label=u'Nowa nazwa', max_length=256)
index 9fa3991..3e3a65a 100644 (file)
@@ -9,4 +9,5 @@ urlpatterns = patterns('',
     url(r'^info/$', views.info, name='info'),
     url(r'^delete/$', views.delete, name='delete'),
     url(r'^mkdir/$', views.mkdir, name='mkdir'),
+    url(r'^move/$', views.move, name='move'),
 )
index b72432b..68c9ad9 100644 (file)
@@ -5,7 +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.forms import NewDirForm, RenameForm
 
 from filex.ftp import FTPOperation, FTPException
 from filex.uploadhandler import with_ftp_upload_handler
@@ -148,8 +148,6 @@ def mkdir(request):
 
         url = 'gsiftp://' + host + path + '/' + name
 
-        print url
-
         try:
             FTPOperation(request.session['proxy']).mkdir(url)
         except FTPException as e:
@@ -160,3 +158,31 @@ def mkdir(request):
         msg = form.errors
 
     return JsonResponse({'msg': msg}, status=400)
+
+
+@require_POST
+def move(request):
+    check_auth(request)
+
+    # TODO actual data validation
+    form = RenameForm(request.POST)
+
+    if form.is_valid():
+        host = form.cleaned_data['host']
+        path = form.cleaned_data['path']
+        src = form.cleaned_data['src']
+        dst = form.cleaned_data['dst']
+
+        src_url = 'gsiftp://' + host + path + '/' + src
+        dst_url = 'gsiftp://' + host + path + '/' + dst
+
+        try:
+            FTPOperation(request.session['proxy']).move(src_url, dst_url)
+        except FTPException as e:
+            msg = e.message
+        else:
+            return JsonResponse({'success': True})
+    else:
+        msg = form.errors
+
+    return JsonResponse({'msg': msg}, status=400)
index d830b29..c457396 100644 (file)
@@ -23,7 +23,7 @@
                 $('#status').text(msg);
             }
 
-            filex.files.on('change:checked', function() {
+            filex.files.on('change:checked reset', function() {
                 var selected = filex.selectedFiles().length;
 
                 $('#btn-rename').toggleClass('disabled', selected != 1);
@@ -87,7 +87,7 @@
                 $confirmModal.modal();
             });
 
-            $('#mkdir-form').submit(function(e) {
+            $('#mkdir-form').on('submit', function(e) {
                 var $this = $(this);
 
                 e.preventDefault();
                     filex.idle();
                 });
             });
+
+            $('#rename-form').on('show.bs.modal', function() {
+                var $this = $(this);
+
+                var file = filex.selectedFiles()[0];
+
+                $this.find('#id_host').val(filex.host);
+                $this.find('#id_path').val(filex.path.full());
+                $this.find('#id_src').val(file.get('name'));
+                $this.find('#id_dst').val(file.get('name'));
+            }).on('submit', function(e) {
+                var $this = $(this);
+
+                e.preventDefault();
+                filex.busy();
+                $this.modal('hide');
+
+                $.post($this.attr('action'), $this.serialize(), function(response) {
+                    status('Nazwę zmieniono pomyślnie');
+                    filex.reloadFiles();
+                }, 'json').fail(function(xhr) {
+                    status('Wystąpił błąd: ' + xhr.responseJSON.msg);
+                    filex.idle();
+                });
+            });
         })
     </script>
 {% endblock extra_js %}
             </div>
         </div>
     </form>
+
+    <form id="rename-form" action="{% url 'filex:move' %}" class="modal fade form-horizontal" tabindex="-1" role="dialog" aria-labelledby="rename-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="rename-modal-label">Zmień nazwę</h4>
+                </div>
+                <div class="modal-body">
+                    {% csrf_token %}
+                    {% bootstrap_form rename_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 %}
                     <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>
+                    <button id="btn-rename" class="btn btn-default navbar-btn disabled"  data-toggle="modal" data-target="#rename-form">Zmień nazwę</button>
                     <button id="btn-delete" class="btn btn-default navbar-btn disabled">Usuń</button>
                 </div>
             </div>
index 69f8286..5aebbd5 100644 (file)
@@ -14,8 +14,8 @@ 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 filex.forms import NewDirForm, RenameForm
 from qcg.forms import FiltersForm, ColumnsForm, JobDescriptionForm, EnvFormSet
 from qcg.utils import paginator_context
 from qcg.service import update_user_data, submit_job
@@ -183,7 +183,7 @@ def job_new(request):
 
 @login_required
 def gridftp(request):
-    return render(request, 'qcg/gridftp.html', {'new_dir_form': NewDirForm()})
+    return render(request, 'qcg/gridftp.html', {'new_dir_form': NewDirForm(), 'rename_form': RenameForm()})
 
 
 def gridftp_upload(request):