Beispiel #1
0
def handle_uploaded_photo(request, photoset_id, file_path):
    import uuid
    from django.core.files import File
    from django.db.models import Max
    from tendenci.apps.perms.object_perms import ObjectPermission

    photo = Image()

    # use file name to create title; remove extension
    filename, extension = os.path.splitext(os.path.basename(file_path))
    photo.title = filename

    # clean filename; alphanumeric with dashes
    filename = re.sub(r'[^a-zA-Z0-9._]+', '-', filename)

    # truncate; make unique; append extension
    filename = filename[:70] + '-' + str(uuid.uuid4())[:5] + extension

    photo.image.save(filename, File(open(file_path, 'rb')))

    position_max = Image.objects.filter(photoset=photoset_id).aggregate(
        Max('position'))['position__max'] or 0
    photo.position = position_max + 1

    photo.status = True
    photo.status_detail = 'active'
    photo.member = request.user
    photo.safetylevel = 3
    photo.is_public = True
    photo.allow_anonymous_view = True

    # Can't use update_perms_and_save() here since we don't have a form
    #photo = update_perms_and_save(request, photo_form, photo)
    photo.creator = request.user
    photo.creator_username = request.user.username
    photo.owner = request.user
    photo.owner_username = request.user.username
    photo.allow_user_view = False
    photo.allow_user_edit = False
    photo.allow_member_view = False
    photo.allow_member_edit = False
    photo.save()
    assign_files_perms(photo)

    EventLog.objects.log(
        **{
            'event_id':
            990100,
            'event_data':
            '%s (%d) added by %s' %
            (photo._meta.object_name, photo.pk, request.user),
            'description':
            '%s added' % photo._meta.object_name,
            'user':
            request.user,
            'request':
            request,
            'instance':
            photo,
        })

    # add to photo set if photo set is specified
    if photoset_id:
        photo_set = get_object_or_404(PhotoSet, id=photoset_id)
        photo_set.image_set.add(photo)

    privacy = get_privacy_settings(photo_set)

    # photo privacy = album privacy
    for k, v in privacy.items():
        setattr(photo, k, v)

    photo.save()

    # photo group perms = album group perms
    group_perms = photo_set.perms.filter(group__isnull=False).values_list(
        'group', 'codename')
    group_perms = tuple([(str(g), c.split('_')[0]) for g, c in group_perms])
    ObjectPermission.objects.assign_group(group_perms, photo)

    # serialize queryset
    #data = serializers.serialize("json", Image.objects.filter(id=photo.id))

    Popen([python_executable(), "manage.py", "precache_photo", str(photo.pk)])
Beispiel #2
0
def handle_uploaded_photo(request, photoset_id, file_path):
    import uuid
    from django.core.files import File
    from django.db.models import Max
    from tendenci.apps.perms.object_perms import ObjectPermission

    photo = Image()

    # use file name to create title; remove extension
    filename, extension = os.path.splitext(os.path.basename(file_path))
    photo.title = filename

    # clean filename; alphanumeric with dashes
    filename = re.sub(r'[^a-zA-Z0-9._]+', '-', filename)

    # truncate; make unique; append extension
    filename = filename[:70] + '-' + unicode(uuid.uuid1())[:5] + extension

    photo.image.save(filename, File(open(file_path, 'rb')))

    position_max = Image.objects.filter(
        photoset=photoset_id).aggregate(Max('position'))['position__max'] or 0
    photo.position = position_max + 1

    photo.status = True
    photo.status_detail = 'active'
    photo.member = request.user
    photo.safetylevel = 3
    photo.is_public = True
    photo.allow_anonymous_view = True

    # Can't use update_perms_and_save() here since we don't have a form
    #photo = update_perms_and_save(request, photo_form, photo)
    photo.creator = request.user
    photo.creator_username = request.user.username
    photo.owner = request.user
    photo.owner_username = request.user.username
    photo.allow_user_view = False
    photo.allow_user_edit = False
    photo.allow_member_view = False
    photo.allow_member_edit = False
    photo.save()
    assign_files_perms(photo)

    EventLog.objects.log(**{
        'event_id': 990100,
        'event_data': '%s (%d) added by %s' % (photo._meta.object_name, photo.pk, request.user),
        'description': '%s added' % photo._meta.object_name,
        'user': request.user,
        'request': request,
        'instance': photo,
    })

    # add to photo set if photo set is specified
    if photoset_id:
        photo_set = get_object_or_404(PhotoSet, id=photoset_id)
        photo_set.image_set.add(photo)

    privacy = get_privacy_settings(photo_set)

    # photo privacy = album privacy
    for k, v in privacy.items():
        setattr(photo, k, v)

    photo.save()

    # photo group perms = album group perms
    group_perms = photo_set.perms.filter(group__isnull=False).values_list('group', 'codename')
    group_perms = tuple([(unicode(g), c.split('_')[0]) for g, c in group_perms])
    ObjectPermission.objects.assign_group(group_perms, photo)

    # serialize queryset
    data = serializers.serialize("json", Image.objects.filter(id=photo.id))

    cache_image = Popen([python_executable(), "manage.py", "precache_photo", str(photo.pk)])