コード例 #1
0
def photoset_edit(request,
                  id,
                  form_class=PhotoSetEditForm,
                  template_name="photos/photo-set/edit.html"):
    from tendenci.apps.perms.object_perms import ObjectPermission
    photo_set = get_object_or_404(PhotoSet, id=id)

    # if no permission; permission exception
    if not has_perm(request.user, 'photos.change_photoset', photo_set):
        raise Http403

    if request.method == "POST":
        if request.POST["action"] == "edit":
            form = form_class(request.POST,
                              instance=photo_set,
                              user=request.user)
            if form.is_valid():
                photo_set = form.save(commit=False)

                # update all permissions and save the model
                photo_set = update_perms_and_save(request, form, photo_set)

                # copy all privacy settings from photo set to photos
                Image.objects.filter(photoset=photo_set).update(
                    **get_privacy_settings(photo_set))

                # photo set group permissions
                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])

                photos = Image.objects.filter(photoset=photo_set)
                for photo in photos:
                    ObjectPermission.objects.remove_all(photo)
                    ObjectPermission.objects.assign_group(group_perms, photo)

                messages.add_message(request, messages.SUCCESS,
                                     _("Successfully updated photo set! "))

                return HttpResponseRedirect(
                    reverse('photoset_details', args=[photo_set.id]))
    else:
        form = form_class(instance=photo_set, user=request.user)

    return render_to_resp(request=request,
                          template_name=template_name,
                          context={
                              'photo_set': photo_set,
                              "photoset_form": form,
                          })
コード例 #2
0
ファイル: views.py プロジェクト: goetzk/tendenci
def photoset_edit(request, id, form_class=PhotoSetEditForm, template_name="photos/photo-set/edit.html"):
    from tendenci.apps.perms.object_perms import ObjectPermission
    photo_set = get_object_or_404(PhotoSet, id=id)

    # if no permission; permission exception
    if not has_perm(request.user,'photos.change_photoset',photo_set):
        raise Http403

    if request.method == "POST":
        if request.POST["action"] == "edit":
            form = form_class(request.POST, instance=photo_set, user=request.user)
            if form.is_valid():
                photo_set = form.save(commit=False)

                # update all permissions and save the model
                photo_set = update_perms_and_save(request, form, photo_set)

                # copy all privacy settings from photo set to photos
                Image.objects.filter(photoset=photo_set).update(**get_privacy_settings(photo_set))

                # photo set group permissions
                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 ])

                photos = Image.objects.filter(photoset=photo_set)
                for photo in photos:
                    ObjectPermission.objects.remove_all(photo)
                    ObjectPermission.objects.assign_group(group_perms, photo)

                messages.add_message(request, messages.SUCCESS, _("Successfully updated photo set! "))

                return HttpResponseRedirect(reverse('photoset_details', args=[photo_set.id]))
    else:
        form = form_class(instance=photo_set, user=request.user)

    return render_to_response(template_name, {
        'photo_set': photo_set,
        "photoset_form": form,
    }, context_instance=RequestContext(request))
コード例 #3
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)])
コード例 #4
0
ファイル: views.py プロジェクト: goetzk/tendenci
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)])
コード例 #5
0
ファイル: views.py プロジェクト: BIGGANI/tendenci
def photos_batch_add(request, photoset_id=0):
    """
    params: request, photoset_id
    returns: HttpResponse

    on flash request:
        photoset_id is passed via request.POST
        and received as type unicode; i convert to type integer
    on http request:
        photoset_id is passed via url
    """
    import uuid
    from django.db.models import Max
    from tendenci.apps.perms.object_perms import ObjectPermission

    # photoset permission required to add photos
    if not has_perm(request.user, 'photos.add_photoset'):
        raise Http403

    if request.method == 'POST':
        for field_name in request.FILES:
            uploaded_file = request.FILES[field_name]

            # use file to create title; remove extension
            filename, extension = os.path.splitext(uploaded_file.name)
            request.POST.update({'title': filename, })

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

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

            # photoset_id set in swfupload
            photoset_id = int(request.POST["photoset_id"])

            request.POST.update({
                'owner': request.user.id,
                'owner_username': unicode(request.user),
                'creator_username': unicode(request.user),
                'status': True,
                'status_detail': 'active',
            })

            photo_form = PhotoUploadForm(request.POST, request.FILES, user=request.user)

            if photo_form.is_valid():
                # save photo
                photo = photo_form.save(commit=False)
                photo.creator = request.user
                photo.member = request.user
                photo.safetylevel = 3
                photo.allow_anonymous_view = True

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

                photo.position = position_max + 1

                # update all permissions and save the model
                photo = update_perms_and_save(request, photo_form, 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", "manage.py", "precache_photo", str(photo.pk)])

                # returning a response of "ok" (flash likes this)
                # response is for flash, not humans
                return HttpResponse(data, content_type="text/plain")
            else:
                return HttpResponse("photo is not valid", content_type="text/plain")

    else:
        if not photoset_id:
            HttpResponseRedirect(reverse('photoset_latest'))
        photo_set = get_object_or_404(PhotoSet, id=photoset_id)

        photo_limit = get_setting('module', 'photos', 'photolimit')
        try:
            photo_limit = int(photo_limit)
        except ValueError:
            # default limit for photo set images 150
            photo_limit = 150
        image_slot_left = photo_limit - photo_set.image_set.count()

        # show the upload UI
        return render_to_response('photos/batch-add.html', {
            "photoset_id": photoset_id,
            "photo_set": photo_set,
            "csrf_token": csrf_get_token(request),
            "image_slot_left": image_slot_left,
             },
            context_instance=RequestContext(request))