Ejemplo n.º 1
0
 def save_model(self, request, obj, form, change):
     """
     Imposta alcune proprietà di base del file quando viene creato manualmente
     Inoltre adatta il tipo di oggetto in base all'estensione effettiva
     """
     # Le personalizzazioni valgono solo se l'oggetto non è stato ancora salvato
     if not obj.pk:
         if not obj.original_filename:
             obj.original_filename = os.path.basename(obj.path)
         if not obj.owner_id:
             obj.owner_id = request.user.pk
         if not obj.is_public:
             obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT
         try:
             obj.folder_id = int(request.GET.get('parent_id', None))
         except TypeError:
             pass
         # codice analogo a filer.admin.clipboardadmin per la gestione dei tipi
         for filer_class in filer_settings.FILER_FILE_MODELS:
             FileSubClass = load_object(filer_class)
             if obj.file and FileSubClass.matches_file_type(obj.file.path, None, request):
                 break
         else:
             FileSubClass = load_object(filer_settings.FILER_FILE_MODELS[-1])
         ConcreteFileClass = FileSubClass
         if ConcreteFileClass:
             new = ConcreteFileClass()
             for k, v in obj.__dict__.items():
                 new.__dict__[k] = v
             super(AdminDocumento, self).save_model(request, new, form, change)
             obj.pk = new.pk
             return
     super(AdminDocumento, self).save_model(request, obj, form, change)
Ejemplo n.º 2
0
def get_allowed_sites(request, model=None):
    if settings.ALLOWED_SITES_FOR_USER and request and model:
        get_sites_for = load_object(settings.ALLOWED_SITES_FOR_USER)
        return get_sites_for(request.user, model)

    if global_settings.CMS_PERMISSION and request:
        from cms.utils.permissions import get_user_sites_queryset
        return get_user_sites_queryset(request.user)

    return Site.objects.all()
Ejemplo n.º 3
0
    def ajax_upload(self, request, folder_id=None):
        """
        Receives an upload from the uploader. Receives only one file at a time.
        """
        mimetype = "application/json" if request.is_ajax() else "text/html"
        content_type_key = 'mimetype' if DJANGO_1_4 else 'content_type'
        response_params = {content_type_key: mimetype}
        try:
            upload, filename, is_raw = handle_upload(request)

            # Get clipboad
            clipboard = Clipboard.objects.get_or_create(user=request.user)[0]

            # find the file type
            for filer_class in filer_settings.FILER_FILE_MODELS:
                FileSubClass = load_object(filer_class)
                # TODO: What if there are more than one that qualify?
                if FileSubClass.matches_file_type(filename, upload, request):
                    FileForm = modelform_factory(model=FileSubClass,
                                                 fields=('original_filename',
                                                         'owner', 'file'))
                    break
            uploadform = FileForm(
                {
                    'original_filename': filename,
                    'owner': request.user.pk
                }, {'file': upload})
            if uploadform.is_valid():
                file_obj = uploadform.save(commit=False)
                # Enforce the FILER_IS_PUBLIC_DEFAULT
                file_obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT
                file_obj.save()
                clipboard_item = ClipboardItem(clipboard=clipboard,
                                               file=file_obj)
                clipboard_item.save()
                json_response = {
                    'thumbnail': file_obj.icons['32'],
                    'alt_text': '',
                    'label': str(file_obj),
                }
                return HttpResponse(json.dumps(json_response),
                                    **response_params)
            else:
                form_errors = '; '.join([
                    '%s: %s' % (field, ', '.join(errors))
                    for field, errors in list(uploadform.errors.items())
                ])
                raise UploadException(
                    "AJAX request not valid: form invalid '%s'" %
                    (form_errors, ))
        except UploadException as e:
            return HttpResponse(json.dumps({'error': str(e)}),
                                **response_params)
Ejemplo n.º 4
0
    def ajax_upload(self, request, folder_id=None):
        """
        Receives an upload from the uploader. Receives only one file at a time.
        """
        mimetype = "application/json" if request.is_ajax() else "text/html"
        content_type_key = 'mimetype' if DJANGO_1_4 else 'content_type'
        response_params = {content_type_key: mimetype}
        try:
            upload, filename, is_raw = handle_upload(request)

            # Get clipboad
            clipboard = Clipboard.objects.get_or_create(user=request.user)[0]

            # find the file type
            for filer_class in filer_settings.FILER_FILE_MODELS:
                FileSubClass = load_object(filer_class)
                # TODO: What if there are more than one that qualify?
                if FileSubClass.matches_file_type(filename, upload, request):
                    FileForm = modelform_factory(
                        model=FileSubClass,
                        fields=('original_filename', 'owner', 'file')
                    )
                    break
            uploadform = FileForm({'original_filename': filename,
                                   'owner': request.user.pk},
                                  {'file': upload})
            if uploadform.is_valid():
                file_obj = uploadform.save(commit=False)
                # Enforce the FILER_IS_PUBLIC_DEFAULT
                file_obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT
                file_obj.save()
                clipboard_item = ClipboardItem(
                    clipboard=clipboard, file=file_obj)
                clipboard_item.save()
                json_response = {
                    'thumbnail': file_obj.icons['32'],
                    'alt_text': '',
                    'label': str(file_obj),
                }
                return HttpResponse(json.dumps(json_response),
                                    **response_params)
            else:
                form_errors = '; '.join(['%s: %s' % (
                    field,
                    ', '.join(errors)) for field, errors in list(
                        uploadform.errors.items())
                ])
                raise UploadException(
                    "AJAX request not valid: form invalid '%s'" % (
                        form_errors,))
        except UploadException as e:
            return HttpResponse(json.dumps({'error': str(e)}),
                                **response_params)
Ejemplo n.º 5
0
 def save_model(self, request, obj, form, change):
     """
     Imposta alcune proprietà di base del file quando viene creato manualmente
     Inoltre adatta il tipo di oggetto in base all'estensione effettiva
     """
     # Le personalizzazioni valgono solo se l'oggetto non è stato ancora salvato
     if not obj.pk:
         if not obj.original_filename:
             obj.original_filename = os.path.basename(obj.path)
         if not obj.owner_id:
             obj.owner_id = request.user.pk
         if not obj.is_public:
             obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT
         try:
             obj.folder_id = int(request.GET.get('parent_id', None))
         except TypeError:
             pass
         # codice analogo a filer.admin.clipboardadmin per la gestione dei tipi
         for filer_class in filer_settings.FILER_FILE_MODELS:
             FileSubClass = load_object(filer_class)
             if obj.file and FileSubClass.matches_file_type(
                     obj.file.path, None, request):
                 break
         else:
             FileSubClass = load_object(
                 filer_settings.FILER_FILE_MODELS[-1])
         ConcreteFileClass = FileSubClass
         if ConcreteFileClass:
             new = ConcreteFileClass()
             for k, v in obj.__dict__.items():
                 new.__dict__[k] = v
             super(AdminDocumento, self).save_model(request, new, form,
                                                    change)
             obj.pk = new.pk
             return
     super(AdminDocumento, self).save_model(request, obj, form, change)
Ejemplo n.º 6
0
    def ajax_upload(self, request, folder_id=None):
        """
        receives an upload from the uploader. Receives only one file at the time.
        """
        mimetype = "application/json" if request.is_ajax() else "text/html"
        try:
            upload, filename, is_raw = handle_upload(request)

            # Get clipboad
            clipboard = Clipboard.objects.get_or_create(user=request.user)[0]

            # find the file type
            for filer_class in filer_settings.FILER_FILE_MODELS:
                FileSubClass = load_object(filer_class)
                #TODO: What if there are more than one that qualify?
                if FileSubClass.matches_file_type(filename, upload, request):
                    FileForm = modelform_factory(model=FileSubClass,
                                                 fields=('original_filename',
                                                         'owner', 'file'))
                    break
            uploadform = FileForm(
                {
                    'original_filename': filename,
                    'owner': request.user.pk
                }, {'file': upload})
            if uploadform.is_valid():
                file_obj = uploadform.save(commit=False)
                # Enforce the FILER_IS_PUBLIC_DEFAULT
                file_obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT
                file_obj.save()
                clipboard_item = ClipboardItem(clipboard=clipboard,
                                               file=file_obj)
                clipboard_item.save()
                try:
                    json_response = {
                        'thumbnail': file_obj.icons['32'],
                        'alt_text': '',
                        'label': unicode(file_obj),
                    }
                except Exception, e:
                    json_response = {
                        'thumbnail': None,
                        'alt_text': '',
                        'label': unicode(file_obj),
                    }
                return HttpResponse(simplejson.dumps(json_response),
                                    mimetype=mimetype)
            else:
Ejemplo n.º 7
0
    def ajax_upload(self, request, folder_id=None):
        """
        receives an upload from the uploader. Receives only one file at the time.
        """
        mimetype = "application/json" if request.is_ajax() else "text/html"
        try:
            upload, filename, is_raw = handle_upload(request)

            # Get clipboad
            clipboard = Clipboard.objects.get_or_create(user=request.user)[0]

            # find the file type
            for filer_class in filer_settings.FILER_FILE_MODELS:
                FileSubClass = load_object(filer_class)
                #TODO: What if there are more than one that qualify?
                if FileSubClass.matches_file_type(filename, upload, request):
                    FileForm = modelform_factory(
                        model = FileSubClass,
                        fields = ('original_filename', 'owner', 'file')
                    )
                    break
            uploadform = FileForm({'original_filename': filename,
                                   'owner': request.user.pk},
                                  {'file': upload})
            if uploadform.is_valid():
                file_obj = uploadform.save(commit=False)
                # Enforce the FILER_IS_PUBLIC_DEFAULT
                file_obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT
                file_obj.save()
                clipboard_item = ClipboardItem(
                                    clipboard=clipboard, file=file_obj)
                clipboard_item.save()
                try:
                    json_response = {
                        'thumbnail': file_obj.icons['32'],
                        'alt_text': '',
                        'label': unicode(file_obj),
                    }
                except Exception, e:
                    json_response = {
                        'thumbnail': None,
                        'alt_text': '',
                        'label': unicode(file_obj),
                    }
                return HttpResponse(simplejson.dumps(json_response),
                                    mimetype=mimetype)
            else:
Ejemplo n.º 8
0
FILER_SERVERS.rec_update(getattr(settings, 'FILER_SERVERS', {}))

def update_server_settings(settings, defaults, s, t):
    if not settings[s][t]['ENGINE']:
        settings[s][t]['ENGINE'] = defaults[s][t]['ENGINE']
        settings[s][t]['OPTIONS'] = defaults[s][t]['OPTIONS']
    return settings

update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, 'private', 'main')
update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, 'private', 'thumbnails')



# Public media (media accessible without any permission checks)
FILER_PUBLICMEDIA_STORAGE = get_storage_class(FILER_STORAGES['public']['main']['ENGINE'])(**FILER_STORAGES['public']['main']['OPTIONS'])
FILER_PUBLICMEDIA_UPLOAD_TO = load_object(FILER_STORAGES['public']['main']['UPLOAD_TO'])
if 'UPLOAD_TO_PREFIX' in FILER_STORAGES['public']['main']:
    FILER_PUBLICMEDIA_UPLOAD_TO = load_object('filer.utils.generate_filename.prefixed_factory')(FILER_PUBLICMEDIA_UPLOAD_TO, FILER_STORAGES['public']['main']['UPLOAD_TO_PREFIX'])
FILER_PUBLICMEDIA_THUMBNAIL_STORAGE = get_storage_class(FILER_STORAGES['public']['thumbnails']['ENGINE'])(**FILER_STORAGES['public']['thumbnails']['OPTIONS'])
FILER_PUBLICMEDIA_THUMBNAIL_OPTIONS = FILER_STORAGES['public']['thumbnails']['THUMBNAIL_OPTIONS']


# Private media (media accessible through permissions checks)
FILER_PRIVATEMEDIA_STORAGE = get_storage_class(FILER_STORAGES['private']['main']['ENGINE'])(**FILER_STORAGES['private']['main']['OPTIONS'])
FILER_PRIVATEMEDIA_UPLOAD_TO = load_object(FILER_STORAGES['private']['main']['UPLOAD_TO'])
if 'UPLOAD_TO_PREFIX' in FILER_STORAGES['private']['main']:
    FILER_PRIVATEMEDIA_UPLOAD_TO = load_object('filer.utils.generate_filename.prefixed_factory')(FILER_PRIVATEMEDIA_UPLOAD_TO, FILER_STORAGES['private']['main']['UPLOAD_TO_PREFIX'])
FILER_PRIVATEMEDIA_THUMBNAIL_STORAGE = get_storage_class(FILER_STORAGES['private']['thumbnails']['ENGINE'])(**FILER_STORAGES['private']['thumbnails']['OPTIONS'])
FILER_PRIVATEMEDIA_THUMBNAIL_OPTIONS = FILER_STORAGES['private']['thumbnails']['THUMBNAIL_OPTIONS']
FILER_PRIVATEMEDIA_SERVER = load_object(FILER_SERVERS['private']['main']['ENGINE'])(**FILER_SERVERS['private']['main']['OPTIONS'])
FILER_PRIVATEMEDIA_THUMBNAIL_SERVER = load_object(FILER_SERVERS['private']['thumbnails']['ENGINE'])(**FILER_SERVERS['private']['thumbnails']['OPTIONS'])
Ejemplo n.º 9
0
def get_filer_file_field():
    base_field = getattr(settings, 'FILER_FILE_FIELD',
                         'filer.fields.file.FilerFileField')
    return load_object(base_field)
Ejemplo n.º 10
0
def get_filer_image_field():
    base_field = getattr(settings, 'FILER_IMAGE_FIELD',
                         'filer.fields.image.FilerImageField')
    return load_object(base_field)
Ejemplo n.º 11
0
def ajax_upload(request, folder_id=None):
    """
    Receives an upload from the uploader. Receives only one file at a time.
    """
    mimetype = "application/json" if request.is_ajax() else "text/html"
    content_type_key = 'mimetype' if DJANGO_1_4 else 'content_type'
    response_params = {content_type_key: mimetype}
    folder = None
    if folder_id:
        try:
            # Get folder
            folder = Folder.objects.get(pk=folder_id)
        except Folder.DoesNotExist:
            return HttpResponse(json.dumps({'error': NO_FOLDER_ERROR}),
                                **response_params)

    # check permissions
    if folder and not folder.has_add_children_permission(request):
        return HttpResponse(json.dumps({'error': NO_PERMISSIONS_FOR_FOLDER}),
                            **response_params)
    try:
        if len(request.FILES) == 1:
            # dont check if request is ajax or not, just grab the file
            upload, filename, is_raw = handle_request_files_upload(request)
        else:
            # else process the request as usual
            upload, filename, is_raw = handle_upload(request)
        # TODO: Deprecated/refactor
        # Get clipboad
        # clipboard = Clipboard.objects.get_or_create(user=request.user)[0]

        # find the file type
        for filer_class in filer_settings.FILER_FILE_MODELS:
            FileSubClass = load_object(filer_class)
            # TODO: What if there are more than one that qualify?
            if FileSubClass.matches_file_type(filename, upload, request):
                FileForm = modelform_factory(model=FileSubClass,
                                             fields=('original_filename',
                                                     'owner', 'file'))
                break
        uploadform = FileForm(
            {
                'original_filename': filename,
                'owner': request.user.pk
            }, {'file': upload})
        if uploadform.is_valid():
            file_obj = uploadform.save(commit=False)
            # Enforce the FILER_IS_PUBLIC_DEFAULT
            file_obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT
            file_obj.folder = folder
            file_obj.save()
            # TODO: Deprecated/refactor
            # clipboard_item = ClipboardItem(
            #     clipboard=clipboard, file=file_obj)
            # clipboard_item.save()

            # Try to generate thumbnails.
            if not file_obj.icons:
                # There is no point to continue, as we can't generate
                # thumbnails for this file. Usual reasons: bad format or
                # filename.
                file_obj.delete()
                # This would be logged in BaseImage._generate_thumbnails()
                # if FILER_ENABLE_LOGGING is on.
                return HttpResponse(json.dumps(
                    {'error': 'failed to generate icons for file'}),
                                    status=500,
                                    **response_params)

            thumbnail = None
            # Backwards compatibility: try to get specific icon size (32px)
            # first. Then try medium icon size (they are already sorted),
            # fallback to the first (smallest) configured icon.
            for size in (['32'] +
                         filer_settings.FILER_ADMIN_ICON_SIZES[1::-1]):
                try:
                    thumbnail = file_obj.icons[size]
                    break
                except KeyError:
                    continue

            json_response = {
                'thumbnail': thumbnail,
                'alt_text': '',
                'label': str(file_obj),
                'file_id': file_obj.pk,
            }
            # prepare preview thumbnail
            if type(file_obj) == Image:
                thumbnail_180_options = {
                    'size': (180, 180),
                    'crop': True,
                    'upscale': True,
                }
                thumbnail_180 = file_obj.file.get_thumbnail(
                    thumbnail_180_options)
                json_response['thumbnail_180'] = thumbnail_180.url
                json_response['original_image'] = file_obj.url
            return HttpResponse(json.dumps(json_response), **response_params)
        else:
            form_errors = '; '.join([
                '%s: %s' % (field, ', '.join(errors))
                for field, errors in list(uploadform.errors.items())
            ])
            raise UploadException("AJAX request not valid: form invalid '%s'" %
                                  (form_errors, ))
    except UploadException as e:
        return HttpResponse(json.dumps({'error': str(e)}),
                            status=500,
                            **response_params)
Ejemplo n.º 12
0
    def ajax_upload(self, request, folder_id=None):
        """
        receives an upload from the uploader. Receives only one file at the time.
        """
        mimetype = "application/json" if request.is_ajax() else "text/html"
        content_type_key = 'content_type'
        response_params = {content_type_key: mimetype}
        folder = None
        if folder_id:
            try:
                # Get folder
                folder = Folder.objects.get(pk=folder_id)
            except Folder.DoesNotExist:
                return HttpResponse(json.dumps({'error': NO_FOLDER_ERROR}),
                                    **response_params)

        # check permissions
        if folder and not folder.has_add_children_permission(request):
            return HttpResponse(
                json.dumps({'error': NO_PERMISSIONS_FOR_FOLDER}),
                **response_params)
        try:
            if len(request.FILES) == 1:
                # dont check if request is ajax or not, just grab the file
                upload, filename, is_raw = handle_request_files_upload(request)
            else:
                # else process the request as usual
                upload, filename, is_raw = handle_upload(request)

            # Get clipboad
            # TODO: Deprecated/refactor
            # clipboard = Clipboard.objects.get_or_create(user=request.user)[0]

            # find the file type
            for filer_class in media_settings.MEDIA_FILE_MODELS:
                FileSubClass = load_object(filer_class)
                # TODO: What if there are more than one that qualify?
                if FileSubClass.matches_file_type(filename, upload, request):
                    FileForm = modelform_factory(model=FileSubClass,
                                                 fields=('original_filename',
                                                         'owner', 'file'))
                    break
            uploadform = FileForm(
                {
                    'original_filename': filename,
                    'owner': request.user.pk
                }, {'file': upload})
            if uploadform.is_valid():
                file_obj = uploadform.save(commit=False)
                # Enforce the FILER_IS_PUBLIC_DEFAULT
                file_obj.is_public = settings.MEDIA_IS_PUBLIC_DEFAULT
                file_obj.folder = folder
                file_obj.save()
                # TODO: Deprecated/refactor
                # clipboard_item = ClipboardItem(
                #    clipboard=clipboard, file=file_obj)
                # clipboard_item.save()
                json_response = {
                    'thumbnail': file_obj.icons['32'],
                    'alt_text': '',
                    'label': str(file_obj),
                    'file_id': file_obj.pk,
                }
                return HttpResponse(json.dumps(json_response),
                                    **response_params)
            else:
                form_errors = '; '.join([
                    '%s: %s' % (field, ', '.join(errors))
                    for field, errors in list(uploadform.errors.items())
                ])
                raise UploadException(
                    "AJAX request not valid: form invalid '%s'" %
                    (form_errors, ))
        except UploadException as e:
            return HttpResponse(json.dumps({'error': str(e)}),
                                **response_params)
Ejemplo n.º 13
0
def get_filer_file_field():
    base_field = getattr(settings, 'FILER_FILE_FIELD', 'filer.fields.file.FilerFileField')
    return load_object(base_field)
Ejemplo n.º 14
0
 def test_loader_loads_subclass(self):
     result = load_object(TestTargetClass)
     self.assertEqual(result, TestTargetClass)
Ejemplo n.º 15
0
 def test_loader_loads_class(self):
     result = load_object(TestTargetClass())
     self.assertEqual(result.__class__, TestTargetClass)
Ejemplo n.º 16
0
 def test_loader_loads_strings_properly(self):
     target = 'tests.test_utils.TestTargetClass'
     result = load_object(target)  # Should return an instance
     self.assertEqual(result, TestTargetClass)
Ejemplo n.º 17
0
    def ajax_upload(self, request, folder_id=None):
        """
        receives an upload from the uploader. Receives only one file at the time.
        """
        mimetype = "application/json" if request.is_ajax() else "text/html"
        content_type_key = 'content_type'
        response_params = {content_type_key: mimetype}
        folder = None
        if folder_id:
            try:
                # Get folder
                folder = Folder.objects.get(pk=folder_id)
            except Folder.DoesNotExist:
                return HttpResponse(json.dumps({'error': NO_FOLDER_ERROR}),
                                    **response_params)

        # check permissions
        if folder and not folder.has_add_children_permission(request):
            return HttpResponse(
                json.dumps({'error': NO_PERMISSIONS_FOR_FOLDER}),
                **response_params)
        try:
            if len(request.FILES) == 1:
                # dont check if request is ajax or not, just grab the file
                upload, filename, is_raw = handle_request_files_upload(request)
            else:
                # else process the request as usual
                upload, filename, is_raw = handle_upload(request)

            # Get clipboad
            # TODO: Deprecated/refactor
            # clipboard = Clipboard.objects.get_or_create(user=request.user)[0]

            # find the file type
            for filer_class in media_settings.MEDIA_FILE_MODELS:
                FileSubClass = load_object(filer_class)
                # TODO: What if there are more than one that qualify?
                if FileSubClass.matches_file_type(filename, upload, request):
                    FileForm = modelform_factory(
                        model=FileSubClass,
                        fields=('original_filename', 'owner', 'file')
                    )
                    break
            uploadform = FileForm({'original_filename': filename,
                                   'owner': request.user.pk},
                                  {'file': upload})
            if uploadform.is_valid():
                file_obj = uploadform.save(commit=False)
                # Enforce the FILER_IS_PUBLIC_DEFAULT
                file_obj.is_public = settings.MEDIA_IS_PUBLIC_DEFAULT
                file_obj.folder = folder
                file_obj.save()
                # TODO: Deprecated/refactor
                # clipboard_item = ClipboardItem(
                #    clipboard=clipboard, file=file_obj)
                # clipboard_item.save()
                json_response = {
                    'thumbnail': file_obj.icons['32'],
                    'alt_text': '',
                    'label': str(file_obj),
                    'file_id': file_obj.pk,
                }
                return HttpResponse(json.dumps(json_response),
                                    **response_params)
            else:
                form_errors = '; '.join(['%s: %s' % (
                    field,
                    ', '.join(errors)) for field, errors in list(uploadform.errors.items())
                ])
                raise UploadException(
                    "AJAX request not valid: form invalid '%s'" % (form_errors,))
        except UploadException as e:
            return HttpResponse(json.dumps({'error': str(e)}),
                                **response_params)
Ejemplo n.º 18
0
FILER_PRIVATEMEDIA_URL = os.path.normpath( getattr(settings, 'FILER_PRIVATEMEDIA_URL', os.path.join(settings.MEDIA_URL,FILER_PRIVATEMEDIA_PREFIX) ) )
FILER_PRIVATEMEDIA_ROOT = os.path.abspath( os.path.join(settings.MEDIA_ROOT, FILER_PRIVATEMEDIA_PREFIX ) )


FILER_ADMIN_ICON_SIZES = (
        '16', '32', '48', '64', 
)

# Public media (media accessible without any permission checks)
FILER_PUBLICMEDIA_STORAGE = load_object(getattr(
                    settings,
                    'FILER_PUBLICMEDIA_STORAGE',
                    storage_factory(
                        klass=PublicFileSystemStorage,
                        location=os.path.abspath(
                            os.path.join(settings.MEDIA_ROOT,
                                         'filer')),
                        base_url=urlparse.urljoin(settings.MEDIA_URL,
                                                  'filer/')
                    )))
FILER_PUBLICMEDIA_UPLOAD_TO = load_object(getattr(settings, 'FILER_PUBLICMEDIA_UPLOAD_TO', 'filer.utils.generate_filename.by_date'))
FILER_PUBLICMEDIA_THUMBNAIL_STORAGE = load_object(getattr(
                    settings,
                    'FILER_PUBLICMEDIA_THUMBNAIL_STORAGE',
                    storage_factory(
                        klass=PublicFileSystemStorage,
                        location=os.path.abspath(
                            os.path.join(settings.MEDIA_ROOT,
                                         'filer_thumbnails')),
                        base_url=urlparse.urljoin(settings.MEDIA_URL,
Ejemplo n.º 19
0
def update_server_settings(settings, defaults, s, t):
    if not settings[s][t]['ENGINE']:
        settings[s][t]['ENGINE'] = defaults[s][t]['ENGINE']
        settings[s][t]['OPTIONS'] = defaults[s][t]['OPTIONS']
    return settings


update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, 'private', 'main')
update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, 'private',
                       'thumbnails')

# Public media (media accessible without any permission checks)
FILER_PUBLICMEDIA_STORAGE = get_storage_class(
    FILER_STORAGES['public']['main']['ENGINE'])(
        **FILER_STORAGES['public']['main']['OPTIONS'])
FILER_PUBLICMEDIA_UPLOAD_TO = load_object(
    FILER_STORAGES['public']['main']['UPLOAD_TO'])
if 'UPLOAD_TO_PREFIX' in FILER_STORAGES['public']['main']:
    FILER_PUBLICMEDIA_UPLOAD_TO = load_object(
        'filer.utils.generate_filename.prefixed_factory')(
            FILER_PUBLICMEDIA_UPLOAD_TO,
            FILER_STORAGES['public']['main']['UPLOAD_TO_PREFIX'])
FILER_PUBLICMEDIA_THUMBNAIL_STORAGE = get_storage_class(
    FILER_STORAGES['public']['thumbnails']['ENGINE'])(
        **FILER_STORAGES['public']['thumbnails']['OPTIONS'])
FILER_PUBLICMEDIA_THUMBNAIL_OPTIONS = FILER_STORAGES['public']['thumbnails'][
    'THUMBNAIL_OPTIONS']

# Private media (media accessible through permissions checks)
FILER_PRIVATEMEDIA_STORAGE = get_storage_class(
    FILER_STORAGES['private']['main']['ENGINE'])(
        **FILER_STORAGES['private']['main']['OPTIONS'])
Ejemplo n.º 20
0
# classes that I should check for when adding files
FILER_FILE_MODELS = getattr(settings, 'FILER_FILE_MODELS', (
    'filer.models.imagemodels.Image',
    'filer.models.audiomodels.Audio',
    'filer.models.filemodels.File',
))

# Public media (media accessible without any permission checks)
FILER_PUBLICMEDIA_STORAGE = getattr(
    settings, 'FILER_PUBLICMEDIA_STORAGE',
    storage_factory(klass=PublicFileSystemStorage,
                    location=os.path.abspath(
                        os.path.join(settings.MEDIA_ROOT, 'filer')),
                    base_url=urlparse.urljoin(settings.MEDIA_URL, 'filer/')))
FILER_PUBLICMEDIA_UPLOAD_TO = load_object(
    getattr(settings, 'FILER_PUBLICMEDIA_UPLOAD_TO',
            'filer.utils.generate_filename.by_date'))
FILER_PUBLICMEDIA_THUMBNAIL_STORAGE = getattr(
    settings, 'FILER_PUBLICMEDIA_THUMBNAIL_STORAGE',
    storage_factory(klass=PublicFileSystemStorage,
                    location=os.path.abspath(
                        os.path.join(settings.MEDIA_ROOT, 'filer_thumbnails')),
                    base_url=urlparse.urljoin(settings.MEDIA_URL,
                                              'filer_thumbnails/')))

# Private media (media accessible through permissions checks)
FILER_PRIVATEMEDIA_STORAGE = getattr(
    settings, 'FILER_PRIVATEMEDIA_STORAGE',
    storage_factory(klass=PrivateFileSystemStorage,
                    location=os.path.abspath(
                        os.path.join(settings.MEDIA_ROOT, '../smedia/filer/')),
Ejemplo n.º 21
0
    def ajax_upload(self, request, folder_id=None):
        """
        Receives an upload from the uploader. Receives only one file at a time.
        """
        mimetype = "application/json" if request.is_ajax() else "text/html"
        content_type_key = "mimetype" if DJANGO_1_4 else "content_type"
        response_params = {content_type_key: mimetype}
        folder = None
        if folder_id:
            try:
                # Get folder
                folder = Folder.objects.get(pk=folder_id)
            except Folder.DoesNotExist:
                return HttpResponse(json.dumps({"error": NO_FOLDER_ERROR}), **response_params)

        # check permissions
        if folder and not folder.has_add_children_permission(request):
            return HttpResponse(json.dumps({"error": NO_PERMISSIONS_FOR_FOLDER}), **response_params)
        try:
            if len(request.FILES) == 1:
                # dont check if request is ajax or not, just grab the file
                upload, filename, is_raw = handle_request_files_upload(request)
            else:
                # else process the request as usual
                upload, filename, is_raw = handle_upload(request)
            # TODO: Deprecated/refactor
            # Get clipboad
            # clipboard = Clipboard.objects.get_or_create(user=request.user)[0]

            # find the file type
            for filer_class in filer_settings.FILER_FILE_MODELS:
                FileSubClass = load_object(filer_class)
                # TODO: What if there are more than one that qualify?
                if FileSubClass.matches_file_type(filename, upload, request):
                    FileForm = modelform_factory(model=FileSubClass, fields=("original_filename", "owner", "file"))
                    break
            uploadform = FileForm({"original_filename": filename, "owner": request.user.pk}, {"file": upload})
            if uploadform.is_valid():
                file_obj = uploadform.save(commit=False)
                # Enforce the FILER_IS_PUBLIC_DEFAULT
                file_obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT
                file_obj.folder = folder
                file_obj.save()
                # TODO: Deprecated/refactor
                # clipboard_item = ClipboardItem(
                #     clipboard=clipboard, file=file_obj)
                # clipboard_item.save()

                # Try to generate thumbnails.
                if not file_obj.icons:
                    # There is no point to continue, as we can't generate
                    # thumbnails for this file. Usual reasons: bad format or
                    # filename.
                    file_obj.delete()
                    # This would be logged in BaseImage._generate_thumbnails()
                    # if FILER_ENABLE_LOGGING is on.
                    return HttpResponse(
                        json.dumps({"error": "failed to generate icons for file"}), status=500, **response_params
                    )

                thumbnail = None
                # Backwards compatibility: try to get specific icon size (32px)
                # first. Then try medium icon size (they are already sorted),
                # fallback to the first (smallest) configured icon.
                for size in ["32"] + filer_settings.FILER_ADMIN_ICON_SIZES[1::-1]:
                    try:
                        thumbnail = file_obj.icons[size]
                        break
                    except KeyError:
                        continue

                json_response = {"thumbnail": thumbnail, "alt_text": "", "label": str(file_obj), "file_id": file_obj.pk}
                # prepare preview thumbnail
                if type(file_obj) == Image:
                    thumbnail_180_options = {"size": (180, 180), "crop": True, "upscale": True}
                    thumbnail_180 = file_obj.file.get_thumbnail(thumbnail_180_options)
                    json_response["thumbnail_180"] = thumbnail_180.url
                return HttpResponse(json.dumps(json_response), **response_params)
            else:
                form_errors = "; ".join(
                    ["%s: %s" % (field, ", ".join(errors)) for field, errors in list(uploadform.errors.items())]
                )
                raise UploadException("AJAX request not valid: form invalid '%s'" % (form_errors,))
        except UploadException as e:
            return HttpResponse(json.dumps({"error": str(e)}), **response_params)
Ejemplo n.º 22
0
def update_server_settings(settings, defaults, s, t):
    if not settings[s][t]['ENGINE']:
        settings[s][t]['ENGINE'] = defaults[s][t]['ENGINE']
        settings[s][t]['OPTIONS'] = defaults[s][t]['OPTIONS']
    return settings


update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, 'private', 'main')
update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, 'private',
                       'thumbnails')

# Public media (media accessible without any permission checks)
FILER_PUBLICMEDIA_STORAGE = get_storage_class(
    FILER_STORAGES['public']['main']['ENGINE'])(
        **FILER_STORAGES['public']['main']['OPTIONS'])
FILER_PUBLICMEDIA_UPLOAD_TO = load_object(
    FILER_STORAGES['public']['main']['UPLOAD_TO'])
FILER_PUBLICMEDIA_THUMBNAIL_STORAGE = get_storage_class(
    FILER_STORAGES['public']['thumbnails']['ENGINE'])(
        **FILER_STORAGES['public']['thumbnails']['OPTIONS'])

# Private media (media accessible through permissions checks)
FILER_PRIVATEMEDIA_STORAGE = get_storage_class(
    FILER_STORAGES['private']['main']['ENGINE'])(
        **FILER_STORAGES['private']['main']['OPTIONS'])
FILER_PRIVATEMEDIA_UPLOAD_TO = load_object(
    FILER_STORAGES['private']['main']['UPLOAD_TO'])
FILER_PRIVATEMEDIA_THUMBNAIL_STORAGE = get_storage_class(
    FILER_STORAGES['private']['thumbnails']['ENGINE'])(
        **FILER_STORAGES['private']['thumbnails']['OPTIONS'])
FILER_PRIVATEMEDIA_SERVER = load_object(
    FILER_SERVERS['private']['main']['ENGINE'])(
Ejemplo n.º 23
0
def get_filer_image_field():
    base_field = getattr(settings, 'FILER_IMAGE_FIELD', 'filer.fields.image.FilerImageField')
    return load_object(base_field)
Ejemplo n.º 24
0
update_storage_settings(FILER_STORAGES, DEFAULT_FILER_STORAGES, 'public', 'thumbnails')
update_storage_settings(FILER_STORAGES, DEFAULT_FILER_STORAGES, 'private', 'main')
update_storage_settings(FILER_STORAGES, DEFAULT_FILER_STORAGES, 'private', 'thumbnails')

FILER_SERVERS = RecursiveDictionaryWithExcludes(MINIMAL_FILER_SERVERS, rec_excluded_keys=('OPTIONS',))
FILER_SERVERS.rec_update(getattr(settings, 'FILER_SERVERS', {}))

def update_server_settings(settings, defaults, s, t):
    if not settings[s][t]['ENGINE']:
        settings[s][t]['ENGINE'] = defaults[s][t]['ENGINE']
        settings[s][t]['OPTIONS'] = defaults[s][t]['OPTIONS']
    return settings

update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, 'private', 'main')
update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, 'private', 'thumbnails')



# Public media (media accessible without any permission checks)
FILER_PUBLICMEDIA_STORAGE = get_storage_class(FILER_STORAGES['public']['main']['ENGINE'])(**FILER_STORAGES['public']['main']['OPTIONS'])
FILER_PUBLICMEDIA_UPLOAD_TO = load_object(FILER_STORAGES['public']['main']['UPLOAD_TO'])
FILER_PUBLICMEDIA_THUMBNAIL_STORAGE = get_storage_class(FILER_STORAGES['public']['thumbnails']['ENGINE'])(**FILER_STORAGES['public']['thumbnails']['OPTIONS'])


# Private media (media accessible through permissions checks)
FILER_PRIVATEMEDIA_STORAGE = get_storage_class(FILER_STORAGES['private']['main']['ENGINE'])(**FILER_STORAGES['private']['main']['OPTIONS'])
FILER_PRIVATEMEDIA_UPLOAD_TO = load_object(FILER_STORAGES['private']['main']['UPLOAD_TO'])
FILER_PRIVATEMEDIA_THUMBNAIL_STORAGE = get_storage_class(FILER_STORAGES['private']['thumbnails']['ENGINE'])(**FILER_STORAGES['private']['thumbnails']['OPTIONS'])
FILER_PRIVATEMEDIA_SERVER = load_object(FILER_SERVERS['private']['main']['ENGINE'])(**FILER_SERVERS['private']['main']['OPTIONS'])
FILER_PRIVATEMEDIA_THUMBNAIL_SERVER = load_object(FILER_SERVERS['private']['thumbnails']['ENGINE'])(**FILER_SERVERS['private']['thumbnails']['OPTIONS'])
Ejemplo n.º 25
0
 def get_featured_image(self):
     '''returns first image from folder'''
     image_model = load_object(settings.MEDIA_IMAGE_MODEL)
     return self.media_file_files.instance_of(image_model).first()
Ejemplo n.º 26
0
def update_server_settings(settings, defaults, s, t):
    if not settings[s][t]["ENGINE"]:
        settings[s][t]["ENGINE"] = defaults[s][t]["ENGINE"]
        settings[s][t]["OPTIONS"] = defaults[s][t]["OPTIONS"]
    return settings


update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, "private", "main")
update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, "private", "thumbnails")


# Public media (media accessible without any permission checks)
FILER_PUBLICMEDIA_STORAGE = get_storage_class(FILER_STORAGES["public"]["main"]["ENGINE"])(
    **FILER_STORAGES["public"]["main"]["OPTIONS"]
)
FILER_PUBLICMEDIA_UPLOAD_TO = load_object(FILER_STORAGES["public"]["main"]["UPLOAD_TO"])
if "UPLOAD_TO_PREFIX" in FILER_STORAGES["public"]["main"]:
    FILER_PUBLICMEDIA_UPLOAD_TO = load_object("filer.utils.generate_filename.prefixed_factory")(
        FILER_PUBLICMEDIA_UPLOAD_TO, FILER_STORAGES["public"]["main"]["UPLOAD_TO_PREFIX"]
    )
FILER_PUBLICMEDIA_THUMBNAIL_STORAGE = get_storage_class(FILER_STORAGES["public"]["thumbnails"]["ENGINE"])(
    **FILER_STORAGES["public"]["thumbnails"]["OPTIONS"]
)
FILER_PUBLICMEDIA_THUMBNAIL_OPTIONS = FILER_STORAGES["public"]["thumbnails"]["THUMBNAIL_OPTIONS"]


# Private media (media accessible through permissions checks)
FILER_PRIVATEMEDIA_STORAGE = get_storage_class(FILER_STORAGES["private"]["main"]["ENGINE"])(
    **FILER_STORAGES["private"]["main"]["OPTIONS"]
)
FILER_PRIVATEMEDIA_UPLOAD_TO = load_object(FILER_STORAGES["private"]["main"]["UPLOAD_TO"])
Ejemplo n.º 27
0
def ajax_upload(request, folder_id=None):
    """
    Receives an upload from the uploader. Receives only one file at a time.
    """
    mimetype = 'application/json' if request.is_ajax() else 'text/html'
    content_type_key = 'content_type'
    response_params = {content_type_key: mimetype}
    folder = None

    if folder_id:
        try:
            # Get folder
            folder = Folder.objects.get(pk=folder_id)
        except Folder.DoesNotExist:
            return HttpResponse(json.dumps({'error': NO_FOLDER_ERROR}), **response_params)

    # check permissions
    if folder and not folder.has_add_children_permission(request):
        return HttpResponse(
            json.dumps({'error': NO_PERMISSIONS_FOR_FOLDER}), **response_params)
    try:
        if len(request.FILES) == 1:
            # dont check if request is ajax or not, just grab the file
            upload, filename, is_raw = handle_request_files_upload(request)
        else:
            # else process the request as usual
            upload, filename, is_raw = handle_upload(request)

        FileForm = None
        # find the file type
        for filer_class in filer_settings.FILER_FILE_MODELS:
            FileSubClass = load_object(filer_class)
            if FileSubClass.matches_file_type(filename, upload, request):
                FileForm = modelform_factory(
                    model=FileSubClass,
                    fields=('original_filename', 'owner', 'file')
                )
                break
        uploadform = FileForm({'original_filename': filename, 'owner': request.user.pk},
                              {'file': upload})
        if uploadform.is_valid():
            file_obj = uploadform.save(commit=False)
            # Enforce the FILER_IS_PUBLIC_DEFAULT
            file_obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT
            file_obj.folder = folder
            file_obj.save()

            # Try to generate thumbnails.
            if not file_obj.icons:
                # There is no point to continue, as we can't generate
                # thumbnails for this file. Usual reasons: bad format or
                # filename.
                file_obj.delete()
                # This would be logged in BaseImage._generate_thumbnails()
                # if FILER_ENABLE_LOGGING is on.
                return HttpResponse(
                    json.dumps({'error': 'failed to generate icons for file'}),
                    status=500, **response_params
                )
            thumbnail = None
            # Backwards compatibility: try to get specific icon size (32px)
            # first. Then try medium icon size (they are already sorted),
            # fallback to the first (smallest) configured icon.
            for size in (['32'] + filer_settings.FILER_ADMIN_ICON_SIZES[1::-1]):
                try:
                    thumbnail = file_obj.icons[size]
                    break
                except KeyError:  # pragma: no cover
                    continue

            json_response = {
                'thumbnail': thumbnail,
                'alt_text': '',
                'label': str(file_obj),
                'file_id': file_obj.pk,
            }
            # prepare preview thumbnail
            if type(file_obj) == Image:
                thumbnail_180_options = {
                    'size': (180, 180),
                    'crop': True,
                    'upscale': True,
                }
                thumbnail_180 = get_thumbnail_lazy(file_obj, thumbnail_180_options)
                json_response['thumbnail_180'] = thumbnail_180.url
                json_response['original_image'] = file_obj.url
            return HttpResponse(json.dumps(json_response), **response_params)
        else:
            form_errors = '; '.join(
                ['%s: %s' % (field, ', '.join(errors)) for field, errors in list(
                    uploadform.errors.items())]
            )
            raise UploadException('AJAX request not valid: form invalid "%s"' % (form_errors,))
    except UploadException as e:  # pragma: no cover
        return HttpResponse(json.dumps({'error': str(e)}), status=500, **response_params)
    except Exception as e:  # pragma: no cover
        return HttpResponse(json.dumps({'error': str(e)}), status=500, **response_params)
Ejemplo n.º 28
0
 def get_featured_image(self):
     '''returns first image from folder'''
     image_model = load_object(settings.MEDIA_IMAGE_MODEL)
     return self.media_file_files.instance_of(image_model).first()
Ejemplo n.º 29
0
        must_always_publish_author_credit = models.BooleanField(_('must always publish author credit'), default=False)
        must_always_publish_copyright = models.BooleanField(_('must always publish copyright'), default=False)

        def save(self, *args, **kwargs):
            if self.date_taken is None:
                try:
                    exif_date = self.exif.get('DateTimeOriginal', None)
                    if exif_date is not None:
                        d, t = exif_date.split(" ")
                        year, month, day = d.split(':')
                        hour, minute, second = t.split(':')
                        if getattr(settings, "USE_TZ", False):
                            tz = get_current_timezone()
                            self.date_taken = make_aware(datetime(
                                int(year), int(month), int(day),
                                int(hour), int(minute), int(second)), tz)
                        else:
                            self.date_taken = datetime(
                                int(year), int(month), int(day),
                                int(hour), int(minute), int(second))
                except Exception:
                    pass
            if self.date_taken is None:
                self.date_taken = now()
            super(Image, self).save(*args, **kwargs)
else:
    # This is just an alias for the real model defined elsewhere
    # to let imports works transparently
    Image = load_object(filer_settings.FILER_IMAGE_MODEL)
Ejemplo n.º 30
0
    )
)

# Public media (media accessible without any permission checks)
FILER_PUBLICMEDIA_STORAGE = getattr(
                    settings,
                    'FILER_PUBLICMEDIA_STORAGE',
                    storage_factory(
                        klass=PublicFileSystemStorage,
                        location=os.path.abspath(
                            os.path.join(settings.MEDIA_ROOT,
                                         'filer')),
                        base_url=urlparse.urljoin(settings.MEDIA_URL,
                                                  'filer/')
                    ))
FILER_PUBLICMEDIA_UPLOAD_TO = load_object(getattr(settings, 'FILER_PUBLICMEDIA_UPLOAD_TO', 'filer.utils.generate_filename.by_date'))
FILER_PUBLICMEDIA_THUMBNAIL_STORAGE = getattr(
                    settings,
                    'FILER_PUBLICMEDIA_THUMBNAIL_STORAGE',
                    storage_factory(
                        klass=PublicFileSystemStorage,
                        location=os.path.abspath(
                            os.path.join(settings.MEDIA_ROOT,
                                         'filer_thumbnails')),
                        base_url=urlparse.urljoin(settings.MEDIA_URL,
                                                  'filer_thumbnails/')
                    ))


# Private media (media accessible through permissions checks)
FILER_PRIVATEMEDIA_STORAGE = getattr(