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)
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'),
)
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
url = 'gsiftp://' + host + path + '/' + name
- print url
-
try:
FTPOperation(request.session['proxy']).mkdir(url)
except FTPException as e:
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)
$('#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);
$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">×</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>
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
@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):