Пример #1
0
def index(request):
    Image = get_image_model()

    # Get images (filtered by user permission)
    images = permission_policy.instances_user_has_any_permission_for(
        request.user, ['change', 'delete']
    ).order_by('-created_at')

    # Search
    query_string = None
    if 'q' in request.GET:
        form = SearchForm(request.GET, placeholder=_("Search images"))
        if form.is_valid():
            query_string = form.cleaned_data['q']

            images = images.search(query_string)
    else:
        form = SearchForm(placeholder=_("Search images"))

    # Filter by collection
    current_collection = None
    collection_id = request.GET.get('collection_id')
    if collection_id:
        try:
            current_collection = Collection.objects.get(id=collection_id)
            images = images.filter(collection=current_collection)
        except (ValueError, Collection.DoesNotExist):
            pass

    paginator = Paginator(images, per_page=20)
    images = paginator.get_page(request.GET.get('p'))

    collections = permission_policy.collections_user_has_any_permission_for(
        request.user, ['add', 'change']
    )
    if len(collections) < 2:
        collections = None
    else:
        collections = Collection.order_for_display(collections)

    # Create response
    if request.is_ajax():
        return render(request, 'wagtailimages/images/results.html', {
            'images': images,
            'query_string': query_string,
            'is_searching': bool(query_string),
        })
    else:
        return render(request, 'wagtailimages/images/index.html', {
            'images': images,
            'query_string': query_string,
            'is_searching': bool(query_string),

            'search_form': form,
            'popular_tags': popular_tags_for_model(Image),
            'collections': collections,
            'current_collection': current_collection,
            'user_can_add': permission_policy.user_has_permission(request.user, 'add'),
        })
Пример #2
0
def index(request):
    # Get Videos (filtered by user permission)
    videos = Video.objects.all()

    # Search
    query_string = None
    if 'q' in request.GET:
        form = SearchForm(request.GET, placeholder=_("Search videos"))
        if form.is_valid():
            query_string = form.cleaned_data['q']

            videos = videos.search(query_string)
    else:
        form = SearchForm(placeholder=_("Search videos"))

    # Filter by collection
    current_collection = None
    collection_id = request.GET.get('collection_id')
    if collection_id:
        try:
            current_collection = Collection.objects.get(id=collection_id)
            videos = videos.filter(collection=current_collection)
        except (ValueError, Collection.DoesNotExist):
            pass

    paginator = Paginator(videos, per_page=25)
    
    collections = permission_policy.collections_user_has_any_permission_for(
        request.user, ['add', 'change']
    )
    if len(collections) < 2:
        collections = None
    else:
        collections = Collection.order_for_display(collections)
        
    page = paginator.get_page(request.GET.get('p'))

    # Create response
    if request.is_ajax():
        response = render(request, 'wagtailvideos/videos/results.html', {
            'videos': page,
            'query_string': query_string,
            'is_searching': bool(query_string),
        })
        return response
    else:
        response = render(request, 'wagtailvideos/videos/index.html', {
            'videos': page,
            'query_string': query_string,
            'is_searching': bool(query_string),

            'search_form': form,
            'popular_tags': popular_tags_for_model(Video),
            'current_collection': current_collection,
            'collections': collections,
        })
        return response
Пример #3
0
    def get(self, request, *args, **kwargs):
        collections = permission_policy.collections_user_has_any_permission_for(
            request.user, ["add", "change"])
        if len(collections) < 2:
            collections = None
        else:
            collections = Collection.order_for_display(collections)

        # Create response
        return super().get(request, *args, **kwargs)
Пример #4
0
def get_chooser_context(request):
    """Helper function to return common template context variables for the main chooser view"""

    collections = Collection.objects.all()
    if len(collections) < 2:
        collections = None
    else:
        collections = Collection.order_for_display(collections)

    return {
        'searchform': SearchForm(),
        'is_searching': False,
        'query_string': None,
        'popular_tags': popular_tags_for_model(get_media_model()),
        'collections': collections,
    }
Пример #5
0
def get_chooser_context(request):
    """Helper function to return common template context variables for the main chooser view"""

    collections = Collection.objects.all()
    if len(collections) < 2:
        collections = None
    else:
        collections = Collection.order_for_display(collections)

    return {
        'searchform': SearchForm(),
        'is_searching': False,
        'query_string': None,
        'will_select_format': request.GET.get('select_format'),
        'popular_tags': popular_tags_for_model(get_image_model()),
        'collections': collections,
    }
Пример #6
0
def index(request):
    Document = get_document_model()

    # Get documents (filtered by user permission)
    documents = permission_policy.instances_user_has_any_permission_for(
        request.user, ['change', 'delete']
    )

    # Ordering
    if 'ordering' in request.GET and request.GET['ordering'] in ['title', '-created_at']:
        ordering = request.GET['ordering']
    else:
        ordering = '-created_at'
    documents = documents.order_by(ordering)

    # Filter by collection
    current_collection = None
    collection_id = request.GET.get('collection_id')
    if collection_id:
        try:
            current_collection = Collection.objects.get(id=collection_id)
            documents = documents.filter(collection=current_collection)
        except (ValueError, Collection.DoesNotExist):
            pass

    # Search
    query_string = None
    if 'q' in request.GET:
        form = SearchForm(request.GET, placeholder=_("Search documents"))
        if form.is_valid():
            query_string = form.cleaned_data['q']
            documents = documents.search(query_string)
    else:
        form = SearchForm(placeholder=_("Search documents"))

    # Pagination
    paginator = Paginator(documents, per_page=20)
    documents = paginator.get_page(request.GET.get('p'))

    collections = permission_policy.collections_user_has_any_permission_for(
        request.user, ['add', 'change']
    )
    if len(collections) < 2:
        collections = None
    else:
        collections = Collection.order_for_display(collections)

    # Create response
    if request.is_ajax():
        return render(request, 'wagtaildocs/documents/results.html', {
            'ordering': ordering,
            'documents': documents,
            'query_string': query_string,
            'is_searching': bool(query_string),
        })
    else:
        return render(request, 'wagtaildocs/documents/index.html', {
            'ordering': ordering,
            'documents': documents,
            'query_string': query_string,
            'is_searching': bool(query_string),

            'search_form': form,
            'popular_tags': popular_tags_for_model(Document),
            'user_can_add': permission_policy.user_has_permission(request.user, 'add'),
            'collections': collections,
            'current_collection': current_collection,
        })
Пример #7
0
def add(request):
    Image = get_image_model()
    ImageForm = get_image_form(Image)

    collections = permission_policy.collections_user_has_permission_for(request.user, 'add')
    if len(collections) > 1:
        collections_to_choose = Collection.order_for_display(collections)
    else:
        # no need to show a collections chooser
        collections_to_choose = None

    if request.method == 'POST':
        if not request.is_ajax():
            return HttpResponseBadRequest("Cannot POST to this view without AJAX")

        if not request.FILES:
            return HttpResponseBadRequest("Must upload a file")

        # Build a form for validation
        form = ImageForm({
            'title': request.FILES['files[]'].name,
            'collection': request.POST.get('collection'),
        }, {
            'file': request.FILES['files[]'],
        }, user=request.user)

        if form.is_valid():
            # Save it
            image = form.save(commit=False)
            image.uploaded_by_user = request.user
            image.file_size = image.file.size
            image.file.seek(0)
            image._set_file_hash(image.file.read())
            image.file.seek(0)
            image.save()

            # Success! Send back an edit form for this image to the user
            return JsonResponse({
                'success': True,
                'image_id': int(image.id),
                'form': render_to_string('wagtailimages/multiple/edit_form.html', {
                    'image': image,
                    'form': get_image_edit_form(Image)(
                        instance=image, prefix='image-%d' % image.id, user=request.user
                    ),
                }, request=request),
            })
        else:
            # Validation error
            return JsonResponse({
                'success': False,

                # https://github.com/django/django/blob/stable/1.6.x/django/forms/util.py#L45
                'error_message': '\n'.join(['\n'.join([force_text(i) for i in v]) for k, v in form.errors.items()]),
            })
    else:
        form = ImageForm(user=request.user)

    return render(request, 'wagtailimages/multiple/add.html', {
        'max_filesize': form.fields['file'].max_upload_size,
        'help_text': form.fields['file'].help_text,
        'allowed_extensions': ALLOWED_EXTENSIONS,
        'error_max_file_size': form.fields['file'].error_messages['file_too_large_unknown_size'],
        'error_accepted_file_types': form.fields['file'].error_messages['invalid_image'],
        'collections': collections_to_choose,
    })
Пример #8
0
def add(request):
    Document = get_document_model()
    DocumentForm = get_document_form(Document)
    DocumentMultiForm = get_document_multi_form(Document)

    collections = permission_policy.collections_user_has_permission_for(request.user, 'add')
    if len(collections) > 1:
        collections_to_choose = Collection.order_for_display(collections)
    else:
        # no need to show a collections chooser
        collections_to_choose = None

    if request.method == 'POST':
        if not request.is_ajax():
            return HttpResponseBadRequest("Cannot POST to this view without AJAX")

        if not request.FILES:
            return HttpResponseBadRequest("Must upload a file")

        # Build a form for validation
        form = DocumentForm({
            'title': request.FILES['files[]'].name,
            'collection': request.POST.get('collection'),
        }, {
            'file': request.FILES['files[]']
        }, user=request.user)

        if form.is_valid():
            # Save it
            doc = form.save(commit=False)
            doc.uploaded_by_user = request.user
            doc.file_size = doc.file.size

            # Set new document file hash
            doc.file.seek(0)
            doc._set_file_hash(doc.file.read())
            doc.file.seek(0)

            doc.save()

            # Success! Send back an edit form for this document to the user
            return JsonResponse({
                'success': True,
                'doc_id': int(doc.id),
                'form': render_to_string('wagtaildocs/multiple/edit_form.html', {
                    'doc': doc,
                    'form': DocumentMultiForm(
                        instance=doc, prefix='doc-%d' % doc.id, user=request.user
                    ),
                }, request=request),
            })
        else:
            # Validation error
            return JsonResponse({
                'success': False,

                # https://github.com/django/django/blob/stable/1.6.x/django/forms/util.py#L45
                'error_message': '\n'.join(['\n'.join([force_text(i) for i in v]) for k, v in form.errors.items()]),
            })
    else:
        form = DocumentForm(user=request.user)

    return render(request, 'wagtaildocs/multiple/add.html', {
        'help_text': form.fields['file'].help_text,
        'collections': collections_to_choose,
    })
Пример #9
0
def chooser(request):
    Document = get_document_model()

    if permission_policy.user_has_permission(request.user, 'add'):
        DocumentForm = get_document_form(Document)
        uploadform = DocumentForm(user=request.user)
    else:
        uploadform = None

    documents = Document.objects.all()

    # allow hooks to modify the queryset
    for hook in hooks.get_hooks('construct_document_chooser_queryset'):
        documents = hook(documents, request)

    q = None
    if 'q' in request.GET or 'p' in request.GET or 'collection_id' in request.GET:

        collection_id = request.GET.get('collection_id')
        if collection_id:
            documents = documents.filter(collection=collection_id)
        documents_exist = documents.exists()

        searchform = SearchForm(request.GET)
        if searchform.is_valid():
            q = searchform.cleaned_data['q']

            documents = documents.search(q)
            is_searching = True
        else:
            documents = documents.order_by('-created_at')
            is_searching = False

        # Pagination
        paginator = Paginator(documents, per_page=10)
        documents = paginator.get_page(request.GET.get('p'))

        return render(request, "wagtaildocs/chooser/results.html", {
            'documents': documents,
            'documents_exist': documents_exist,
            'uploadform': uploadform,
            'query_string': q,
            'is_searching': is_searching,
            'collection_id': collection_id,
        })
    else:
        searchform = SearchForm()

        collections = Collection.objects.all()
        if len(collections) < 2:
            collections = None
        else:
            collections = Collection.order_for_display(collections)

        documents = documents.order_by('-created_at')
        documents_exist = documents.exists()
        paginator = Paginator(documents, per_page=10)
        documents = paginator.get_page(request.GET.get('p'))

        return render_modal_workflow(request, 'wagtaildocs/chooser/chooser.html', None, {
            'documents': documents,
            'documents_exist': documents_exist,
            'uploadform': uploadform,
            'searchform': searchform,
            'collections': collections,
            'is_searching': False,
        }, json_data=get_chooser_context())
Пример #10
0
def add(request):
    Document = get_document_model()
    DocumentForm = get_document_form(Document)
    DocumentMultiForm = get_document_multi_form(Document)

    collections = permission_policy.collections_user_has_permission_for(
        request.user, 'add')
    if len(collections) > 1:
        collections_to_choose = Collection.order_for_display(collections)
    else:
        # no need to show a collections chooser
        collections_to_choose = None

    if request.method == 'POST':
        if not request.is_ajax():
            return HttpResponseBadRequest(
                "Cannot POST to this view without AJAX")

        if not request.FILES:
            return HttpResponseBadRequest("Must upload a file")

        # Build a form for validation
        form = DocumentForm(
            {
                'title': request.FILES['files[]'].name,
                'collection': request.POST.get('collection'),
            }, {'file': request.FILES['files[]']},
            user=request.user)

        if form.is_valid():
            # Save it
            doc = form.save(commit=False)
            doc.uploaded_by_user = request.user
            doc.file_size = doc.file.size

            # Set new document file hash
            doc.file.seek(0)
            doc._set_file_hash(doc.file.read())
            doc.file.seek(0)

            doc.save()

            # Success! Send back an edit form for this document to the user
            return JsonResponse({
                'success':
                True,
                'doc_id':
                int(doc.id),
                'form':
                render_to_string('wagtaildocs/multiple/edit_form.html', {
                    'doc':
                    doc,
                    'form':
                    DocumentMultiForm(instance=doc,
                                      prefix='doc-%d' % doc.id,
                                      user=request.user),
                },
                                 request=request),
            })
        else:
            # Validation error
            return JsonResponse({
                'success':
                False,

                # https://github.com/django/django/blob/stable/1.6.x/django/forms/util.py#L45
                'error_message':
                '\n'.join([
                    '\n'.join([force_str(i) for i in v])
                    for k, v in form.errors.items()
                ]),
            })
    else:
        form = DocumentForm(user=request.user)

    return render(
        request, 'wagtaildocs/multiple/add.html', {
            'help_text': form.fields['file'].help_text,
            'collections': collections_to_choose,
        })
Пример #11
0
def chooser(request):
    Document = get_document_model()

    if permission_policy.user_has_permission(request.user, 'add'):
        DocumentForm = get_document_form(Document)
        uploadform = DocumentForm(user=request.user)
    else:
        uploadform = None

    documents = Document.objects.all()

    # allow hooks to modify the queryset
    for hook in hooks.get_hooks('construct_document_chooser_queryset'):
        documents = hook(documents, request)

    q = None
    if 'q' in request.GET or 'p' in request.GET or 'collection_id' in request.GET:

        collection_id = request.GET.get('collection_id')
        if collection_id:
            documents = documents.filter(collection=collection_id)
        documents_exist = documents.exists()

        searchform = SearchForm(request.GET)
        if searchform.is_valid():
            q = searchform.cleaned_data['q']

            documents = documents.search(q)
            is_searching = True
        else:
            documents = documents.order_by('-created_at')
            is_searching = False

        # Pagination
        paginator, documents = paginate(request, documents, per_page=10)

        return render(
            request, "wagtaildocs/chooser/results.html", {
                'documents': documents,
                'documents_exist': documents_exist,
                'uploadform': uploadform,
                'query_string': q,
                'is_searching': is_searching,
                'collection_id': collection_id,
            })
    else:
        searchform = SearchForm()

        collections = Collection.objects.all()
        if len(collections) < 2:
            collections = None
        else:
            collections = Collection.order_for_display(collections)

        documents = documents.order_by('-created_at')
        documents_exist = documents.exists()
        paginator, documents = paginate(request, documents, per_page=10)

        return render_modal_workflow(request,
                                     'wagtaildocs/chooser/chooser.html',
                                     None, {
                                         'documents': documents,
                                         'documents_exist': documents_exist,
                                         'uploadform': uploadform,
                                         'searchform': searchform,
                                         'collections': collections,
                                         'is_searching': False,
                                     },
                                     json_data=get_chooser_context())
Пример #12
0
def add(request):
    mediaPath = os.path.dirname(
        os.path.dirname(os.path.dirname(
            os.path.dirname(__file__)))) + '/media/original_images'
    Image = get_image_model()
    ImageForm = get_image_form(Image)

    collections = permission_policy.collections_user_has_permission_for(
        request.user, 'add')
    if len(collections) > 1:
        collections_to_choose = Collection.order_for_display(collections)
    else:
        # no need to show a collections chooser
        collections_to_choose = None

    if request.method == 'POST':
        if not request.is_ajax():
            return HttpResponseBadRequest(
                "Cannot POST to this view without AJAX")

        if not request.FILES:
            return HttpResponseBadRequest("Must upload a file")

        # Build a form for validation
        form = ImageForm(
            {
                'title': request.FILES['files[]'].name,
                'collection': request.POST.get('collection'),
            }, {
                'file': request.FILES['files[]'],
            },
            user=request.user)

        if form.is_valid():
            # Save it
            image = form.save(commit=False)
            image.uploaded_by_user = request.user
            image.file_size = image.file.size
            image.file.seek(0)
            image._set_file_hash(image.file.read())
            image.file.seek(0)

            # 在已经上传的txt中寻找与该图像ClothCode相同且最新上传的,否则提示错误
            clothCode = str(request.FILES['files[]'].name)[0:6]
            try:
                doc = Document.objects.get(ClothCode=clothCode)
                image.BatchNum = doc.BatchNum
                image.Specs = doc.Specs
                image.ClothCode = doc.ClothCode
            except ObjectDoesNotExist:
                return JsonResponse({
                    'success': False,

                    # https://github.com/django/django/blob/stable/1.6.x/django/forms/util.py#L45
                    'error_message': "未上传该图片对应说明文档(同名)"
                })
            image.save()

            # Success! Send back an edit form for this image to the user
            return JsonResponse({
                'success':
                True,
                'image_id':
                int(image.id),
                'form':
                render_to_string('wagtailimages/multiple/edit_form.html', {
                    'image':
                    image,
                    'form':
                    get_image_edit_form(Image)(instance=image,
                                               prefix='image-%d' % image.id,
                                               user=request.user),
                },
                                 request=request),
            })
        else:
            # Validation error
            return JsonResponse({
                'success':
                False,

                # https://github.com/django/django/blob/stable/1.6.x/django/forms/util.py#L45
                'error_message':
                '\n'.join([
                    '\n'.join([force_text(i) for i in v])
                    for k, v in form.errors.items()
                ]),
            })
    else:
        form = ImageForm(user=request.user)

    return render(
        request, 'wagtailimages/multiple/add.html', {
            'max_filesize':
            form.fields['file'].max_upload_size,
            'help_text':
            form.fields['file'].help_text,
            'allowed_extensions':
            ALLOWED_EXTENSIONS,
            'error_max_file_size':
            form.fields['file'].error_messages['file_too_large_unknown_size'],
            'error_accepted_file_types':
            form.fields['file'].error_messages['invalid_image'],
            'collections':
            collections_to_choose,
        })
Пример #13
0
def index(request):
    Document = get_document_model()

    # Get documents (filtered by user permission)
    documents = permission_policy.instances_user_has_any_permission_for(
        request.user, ['change', 'delete']
    )

    # Ordering
    if 'ordering' in request.GET and request.GET['ordering'] in ['title', '-created_at']:
        ordering = request.GET['ordering']
    else:
        ordering = '-created_at'
    documents = documents.order_by(ordering)

    # Filter by collection
    current_collection = None
    collection_id = request.GET.get('collection_id')
    if collection_id:
        try:
            current_collection = Collection.objects.get(id=collection_id)
            documents = documents.filter(collection=current_collection)
        except (ValueError, Collection.DoesNotExist):
            pass

    # Search
    query_string = None
    if 'q' in request.GET:
        form = SearchForm(request.GET, placeholder=_("Search documents"))
        if form.is_valid():
            query_string = form.cleaned_data['q']
            documents = documents.search(query_string)
    else:
        form = SearchForm(placeholder=_("Search documents"))

    # Pagination
    paginator = Paginator(documents, per_page=20)
    documents = paginator.get_page(request.GET.get('p'))

    collections = permission_policy.collections_user_has_any_permission_for(
        request.user, ['add', 'change']
    )
    if len(collections) < 2:
        collections = None
    else:
        collections = Collection.order_for_display(collections)

    # Create response
    if request.is_ajax():
        return render(request, 'wagtaildocs/documents/results.html', {
            'ordering': ordering,
            'documents': documents,
            'query_string': query_string,
            'is_searching': bool(query_string),
        })
    else:
        return render(request, 'wagtaildocs/documents/index.html', {
            'ordering': ordering,
            'documents': documents,
            'query_string': query_string,
            'is_searching': bool(query_string),

            'search_form': form,
            'popular_tags': popular_tags_for_model(Document),
            'user_can_add': permission_policy.user_has_permission(request.user, 'add'),
            'collections': collections,
            'current_collection': current_collection,
        })
Пример #14
0
def add(request):
    Image = get_image_model()
    ImageForm = get_image_form(Image)

    collections = permission_policy.collections_user_has_permission_for(request.user, 'add')
    if len(collections) > 1:
        collections_to_choose = Collection.order_for_display(collections)
    else:
        # no need to show a collections chooser
        collections_to_choose = None

    if request.method == 'POST':
        if not request.is_ajax():
            return HttpResponseBadRequest("Cannot POST to this view without AJAX")

        if not request.FILES:
            return HttpResponseBadRequest("Must upload a file")

        # Build a form for validation
        form = ImageForm({
            'title': request.FILES['files[]'].name,
            'collection': request.POST.get('collection'),
        }, {
            'file': request.FILES['files[]'],
        }, user=request.user)

        if form.is_valid():
            # Save it
            image = form.save(commit=False)
            image.uploaded_by_user = request.user
            image.file_size = image.file.size
            image.file.seek(0)
            image._set_file_hash(image.file.read())
            image.file.seek(0)
            image.save()

            # Success! Send back an edit form for this image to the user
            return JsonResponse({
                'success': True,
                'image_id': int(image.id),
                'form': render_to_string('wagtailimages/multiple/edit_form.html', {
                    'image': image,
                    'edit_action': reverse('wagtailimages:edit_multiple', args=(image.id,)),
                    'delete_action': reverse('wagtailimages:delete_multiple', args=(image.id,)),
                    'form': get_image_edit_form(Image)(
                        instance=image, prefix='image-%d' % image.id, user=request.user
                    ),
                }, request=request),
            })
        elif 'file' in form.errors:
            # The uploaded file is invalid; reject it now
            return JsonResponse({
                'success': False,
                'error_message': '\n'.join(form.errors['file']),
            })
        else:
            # Some other field of the image form has failed validation, e.g. a required metadata field
            # on a custom image model. Store the image as an UploadedImage instead and present the
            # edit form so that it will become a proper Image when successfully filled in
            uploaded_image = UploadedImage.objects.create(
                file=request.FILES['files[]'], uploaded_by_user=request.user
            )
            image = Image(title=request.FILES['files[]'].name, collection_id=request.POST.get('collection'))

            return JsonResponse({
                'success': True,
                'uploaded_image_id': uploaded_image.id,
                'form': render_to_string('wagtailimages/multiple/edit_form.html', {
                    'uploaded_image': uploaded_image,
                    'edit_action': reverse('wagtailimages:create_multiple_from_uploaded_image', args=(uploaded_image.id,)),
                    'delete_action': reverse('wagtailimages:delete_upload_multiple', args=(uploaded_image.id,)),
                    'form': get_image_edit_form(Image)(
                        instance=image, prefix='uploaded-image-%d' % uploaded_image.id, user=request.user
                    ),
                }, request=request),
            })
    else:
        # Instantiate a dummy copy of the form that we can retrieve validation messages and media from;
        # actual rendering of forms will happen on AJAX POST rather than here
        form = ImageForm(user=request.user)

        return TemplateResponse(request, 'wagtailimages/multiple/add.html', {
            'max_filesize': form.fields['file'].max_upload_size,
            'help_text': form.fields['file'].help_text,
            'allowed_extensions': ALLOWED_EXTENSIONS,
            'error_max_file_size': form.fields['file'].error_messages['file_too_large_unknown_size'],
            'error_accepted_file_types': form.fields['file'].error_messages['invalid_image_extension'],
            'collections': collections_to_choose,
            'form_media': form.media,
        })
Пример #15
0
    def post(self, request, *args, **kwargs):
        try:
            DocumentForm = get_document_form(self.model)
        except AttributeError:
            DocumentForm = get_document_form(self.document_model)
        if not request.is_ajax():
            return HttpResponseBadRequest(
                "Cannot POST to this view without AJAX")

        if not request.FILES:
            return HttpResponseBadRequest("Must upload a file")

        # Build a form for validation
        form = DocumentForm(
            {
                'title': request.FILES['file'].name,
                'collection': request.POST.get('collection'),
            }, {'file': request.FILES['file']},
            user=request.user)

        if form.is_valid():
            # Save it
            doc = form.save(commit=False)
            doc.doc_type = self.doc_type
            if 'sub_type' in request.POST:
                print('sub_type:', request.POST['sub_type'])
                doc.sub_type = Subjects.objects.get(
                    pk=request.POST['sub_type'])
            doc.uploaded_by_user = request.user
            doc.file_size = doc.file.size

            # Set new document file hash
            doc.file.seek(0)
            doc._set_file_hash(doc.file.read())
            doc.file.seek(0)
            doc.save()
            print(doc, doc.sub_type)

            collections = permission_policy.collections_user_has_any_permission_for(
                request.user, ['add', 'change'])
            if len(collections) < 2:
                collections = None
            else:
                collections = Collection.order_for_display(collections)

            return JsonResponse({
                'success':
                True,
                'documents': [{
                    'title': doc.title,
                    'file_size': doc.file_size
                } for doc in self.get_documents()],
                'collections':
                collections,
                'doc_id':
                int(doc.id),
            })
        else:
            # Validation error
            return JsonResponse({
                'success':
                False,
                # https://github.com/django/django/blob/stable/1.6.x/django/forms/util.py#L45
                'error_message':
                '\n'.join([
                    '\n'.join([force_text(i) for i in v])
                    for k, v in form.errors.items()
                ]),
            })
Пример #16
0
def add(request):
    Image = get_image_model()
    ImageForm = get_image_form(Image)

    collections = permission_policy.collections_user_has_permission_for(
        request.user, 'add')
    if len(collections) > 1:
        collections_to_choose = Collection.order_for_display(collections)
    else:
        # no need to show a collections chooser
        collections_to_choose = None

    if request.method == 'POST':
        if not request.is_ajax():
            return HttpResponseBadRequest(
                "Cannot POST to this view without AJAX")

        if not request.FILES:
            return HttpResponseBadRequest("Must upload a file")

        # Build a form for validation
        form = ImageForm(
            {
                'title': request.FILES['files[]'].name,
                'collection': request.POST.get('collection'),
            }, {
                'file': request.FILES['files[]'],
            },
            user=request.user)

        if form.is_valid():
            # Save it
            image = form.save(commit=False)
            image.uploaded_by_user = request.user
            image.file_size = image.file.size
            image.file.seek(0)
            image._set_file_hash(image.file.read())
            image.file.seek(0)
            image.save()

            # Success! Send back an edit form for this image to the user
            return JsonResponse({
                'success':
                True,
                'image_id':
                int(image.id),
                'form':
                render_to_string('wagtailimages/multiple/edit_form.html', {
                    'image':
                    image,
                    'form':
                    get_image_edit_form(Image)(instance=image,
                                               prefix='image-%d' % image.id,
                                               user=request.user),
                },
                                 request=request),
            })
        else:
            # Validation error
            return JsonResponse({
                'success':
                False,

                # https://github.com/django/django/blob/stable/1.6.x/django/forms/util.py#L45
                'error_message':
                '\n'.join([
                    '\n'.join([force_str(i) for i in v])
                    for k, v in form.errors.items()
                ]),
            })
    else:
        # Instantiate a dummy copy of the form that we can retrieve validation messages and media from;
        # actual rendering of forms will happen on AJAX POST rather than here
        form = ImageForm(user=request.user)

        return render(
            request, 'wagtailimages/multiple/add.html', {
                'max_filesize':
                form.fields['file'].max_upload_size,
                'help_text':
                form.fields['file'].help_text,
                'allowed_extensions':
                ALLOWED_EXTENSIONS,
                'error_max_file_size':
                form.fields['file'].
                error_messages['file_too_large_unknown_size'],
                'error_accepted_file_types':
                form.fields['file'].error_messages['invalid_image'],
                'collections':
                collections_to_choose,
                'form_media':
                form.media,
            })
Пример #17
0
def import_from_drive(request):
    if not can_import(request.user):
        raise PermissionDenied

    collections = permission_policy.collections_user_has_permission_for(
        request.user, "add")
    collections_to_choose = json.dumps([
        (collection.id, collection.name)
        for collection in Collection.order_for_display(collections)
    ])
    Image = get_image_model()
    ImageForm = get_image_form(Image)

    if request.method == "POST":
        # Build a form for validation
        wagtail_id = request.POST.get("wagtail_id")
        if request.POST["action"] == "replace" and wagtail_id:
            existing_image = get_image_model().objects.get(pk=wagtail_id)
            form = ImageForm(
                {
                    "title": existing_image.title,
                    "collection": existing_image.collection.id,
                },
                {
                    "file": request.FILES["image_file"],
                },
                user=request.user,
                instance=existing_image,
            )
        else:

            form = ImageForm(
                {
                    "title": request.POST.get("name", ""),
                    "collection": request.POST.get("collection"),
                },
                {
                    "file": request.FILES["image_file"],
                },
                user=request.user,
            )

        if form.is_valid():
            # Save it
            image = form.save(commit=False)
            image.uploaded_by_user = request.user
            image.file_size = image.file.size
            image.file.seek(0)
            image._set_file_hash(image.file.read())
            image.file.seek(0)
            image.save()
            drive_id = request.POST.get("drive_id")
            if drive_id:
                DriveIDMapping.objects.update_or_create(
                    image=image, defaults={"drive_id": drive_id})

            # Success! Send back an edit form for this image to the user
            return JsonResponse({
                "success":
                True,
                "image_id":
                int(image.id),
                "edit_action":
                reverse("wagtail_image_import:edit", args=(image.id, )),
                "delete_action":
                reverse("wagtailimages:delete_multiple", args=(image.id, )),
                "form":
                render_to_string(
                    "wagtail_image_import/edit_form.html",
                    {
                        "image":
                        image,
                        "form":
                        get_image_edit_form(Image)(
                            instance=image,
                            prefix="image-%d" % image.id,
                            user=request.user,
                        ),
                    },
                    request=request,
                ),
            })
        elif "file" in form.errors:
            # The uploaded file is invalid; reject it now
            return JsonResponse({
                "success": False,
                "error": "\n".join(form.errors["file"]),
            })
        else:
            # Some other field of the image form has failed validation, e.g. a required metadata field
            # on a custom image model. Store the image as an UploadedImage instead and present the
            # edit form so that it will become a proper Image when successfully filled in
            uploaded_image = UploadedImage.objects.create(
                file=request.FILES["image_file"],
                uploaded_by_user=request.user)
            image = Image(
                title=request.POST.get("name", ""),
                collection_id=request.POST.get("collection"),
            )

            return JsonResponse({
                "error":
                "The image was uploaded, but needs additional input to be saved. Errors: "
                + "\n".join([
                    field + ": " + error
                    for field, error_list in form.errors.items()
                    for error in error_list
                ]),
                "success":
                True,
                "uploaded_image_id":
                uploaded_image.id,
                "edit_action":
                reverse(
                    "wagtail_image_import:create_from_uploaded_image",
                    args=(uploaded_image.id, ),
                ),
                "delete_action":
                reverse(
                    "wagtailimages:delete_upload_multiple",
                    args=(uploaded_image.id, ),
                ),
                "form":
                render_to_string(
                    "wagtail_image_import/edit_form.html",
                    {
                        "uploaded_image":
                        uploaded_image,
                        "form":
                        get_image_edit_form(Image)(
                            instance=image,
                            prefix="uploaded-image-%d" % uploaded_image.id,
                            user=request.user,
                        ),
                    },
                    request=request,
                ),
            })
    # manually set the Google picker parent folder if a function is provided
    drive_parent_finder = getattr(
        settings, "WAGTAILIMAGEIMPORT_SET_DRIVE_PARENT_FUNCTION", "")
    drive_parent = (import_string(drive_parent_finder)(request)
                    if drive_parent_finder else "root")

    client_secret = json.loads(
        settings.WAGTAILIMAGEIMPORT_GOOGLE_OAUTH_CLIENT_SECRET)
    context = {
        "app_id": client_secret["web"]["project_id"],
        "client_id": client_secret["web"]["client_id"],
        "picker_api_key": settings.WAGTAILIMAGEIMPORT_GOOGLE_PICKER_API_KEY,
        "collections": collections_to_choose,
        "drive_parent": drive_parent,
    }
    return render(request, "wagtail_image_import/import.html", context=context)
Пример #18
0
def add(request):
    # 定义字典确定产品规格
    dic1 = {'L': "临时品种", 'X': "打样品种", 'C': "常规品种"}
    dic2 = {'N': "尼丝纺", 'T': "塔丝隆", 'P': "春亚纺", 'S': "桃皮绒",
            'J': "锦涤纺", 'R': "麂皮绒", 'D': "涤塔夫", 'Q': "其它品种"}
    dic3 = {'T': "平纹", 'W': "斜纹", 'B': "格子", 'S': "缎纹"}
    # 路径
    mediaPath = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))) + '/media/documents'
    Document = get_document_model()
    DocumentForm = get_document_form(Document)
    DocumentMultiForm = get_document_multi_form(Document)

    collections = permission_policy.collections_user_has_permission_for(request.user, 'add')
    if len(collections) > 1:
        collections_to_choose = Collection.order_for_display(collections)
    else:
        # no need to show a collections chooser
        collections_to_choose = None

    if request.method == 'POST':
        if not request.is_ajax():
            return HttpResponseBadRequest("Cannot POST to this view without AJAX")

        if not request.FILES:
            return HttpResponseBadRequest("Must upload a file")

        # Build a form for validation
        print(request.FILES['files[]'].name)

        form = DocumentForm({
            'title': request.FILES['files[]'].name,
            'collection': request.POST.get('collection'),
        }, {
            'file': request.FILES['files[]']
        }, user=request.user)

        if form.is_valid():
            # Save it
            print(333)
            doc = form.save(commit=False)
            doc.uploaded_by_user = request.user
            doc.file_size = doc.file.size

            # Set new document file hash
            doc.file.seek(0)
            doc._set_file_hash(doc.file.read())
            doc.file.seek(0)

            # set BatchNum,Specs

            doc.file.readline()
            doc.Info = str(doc.file.readline())
            line = doc.Info
            # 提取line中的产品规格及产品批号
            specs = dic1.get(line[2], "XXXX") + "--" + dic2.get(line[3], "XXXX") + "--" + dic3.get(line[4], "XXXX")
            batchNum = line[5:11]
            clothCode = str(request.FILES['files[]'])[0:6]
            doc.BatchNum = batchNum
            doc.Specs = specs
            doc.ClothCode = clothCode
            doc.save()


            # Success! Send back an edit form for this document to the user
            return JsonResponse({
                'success': True,
                'doc_id': int(doc.id),
                'form': render_to_string('wagtaildocs/multiple/edit_form.html', {
                    'doc': doc,
                    'form': DocumentMultiForm(
                        instance=doc, prefix='doc-%d' % doc.id, user=request.user
                    ),
                }, request=request),
            })
        else:
            # Validation error
            print(222)
            return JsonResponse({
                'success': False,

                # https://github.com/django/django/blob/stable/1.6.x/django/forms/util.py#L45
                'error_message': '\n'.join(['\n'.join([force_text(i) for i in v]) for k, v in form.errors.items()]),
            })


    else:
        form = DocumentForm(user=request.user)

    return render(request, 'wagtaildocs/multiple/add.html', {
        'help_text': form.fields['file'].help_text,
        'collections': collections_to_choose,
    })