示例#1
0
def ajax_checkout(request):
    project = get_obj_from_request(request.POST, 'project', Project)

    if project is None:
        return json_failure(design.bad_project_id)

    # make sure user can work on this band
    if not project.band.permission_to_work(request.user):
        return json_failure(design.you_dont_have_permission_to_work_on_this_band)

    if project.band.is_read_only():
        return json_failure(design.band_in_readonly_mode)

    # make sure project is available
    if project.checked_out_to is not None:
        return json_failure(design.this_project_already_checked_out)

    project.checked_out_to = request.user
    project.date_checked_out = datetime.now()
    project.save()

    # create log entry
    entry = LogEntry()
    entry.entry_type = LogEntry.SONG_CHECKED_OUT
    entry.band = project.band
    entry.project = project
    entry.catalyst = request.user
    entry.save()

    return json_success()
示例#2
0
def ajax_checkout(request):
    project = get_obj_from_request(request.POST, 'project', Project)

    if project is None:
        return json_failure(design.bad_project_id)

    # make sure user can work on this band
    if not project.band.permission_to_work(request.user):
        return json_failure(
            design.you_dont_have_permission_to_work_on_this_band)

    if project.band.is_read_only():
        return json_failure(design.band_in_readonly_mode)

    # make sure project is available
    if project.checked_out_to is not None:
        return json_failure(design.this_project_already_checked_out)

    project.checked_out_to = request.user
    project.date_checked_out = datetime.now()
    project.save()

    # create log entry
    entry = LogEntry()
    entry.entry_type = LogEntry.SONG_CHECKED_OUT
    entry.band = project.band
    entry.project = project
    entry.catalyst = request.user
    entry.save()

    return json_success()
示例#3
0
def account_plan(request):
    """The page that shows the user what plan they're on and wants them to click to the upgrade plans page."""

    user = request.user
    profile = user.get_profile()
    err_msg = ""
    if request.method == 'POST':
        changes = []
        space_total = 0
        for key, val in request.POST.iteritems():
            # format: member-X-amt=Y
            # X = member id, Y = amount donated
            member_str, member_id, amt_str = key.split('-')
            if member_str == 'member' and amt_str == 'amt':
                try:
                    member_id = int(member_id)
                    member = BandMember.objects.get(pk=member_id)
                except ValueError, BandMember.DoesNotExist:
                    err_msg = design.bad_band_member_id
                    break

                # make sure the user is the band member
                if member.user != user:
                    err_msg = design.can_only_edit_your_own_amount_donated
                    break

                try:
                    val = int(val)
                except ValueError:
                    err_msg = design.invalid_amount
                    break

                changes.append((member, val,))
                space_total += val

        if err_msg == "":
            if space_total <= profile.purchased_bytes:
                # everything is good. apply the change.
                # also create log entries for affected bands
                for member, new_space in changes:
                    old_space = member.space_donated
                    if old_space != new_space:
                        # save new space into member
                        member.space_donated = new_space
                        member.save()

                        # add or take away space from the band
                        band = member.band
                        band.total_space += new_space - old_space
                        band.save()

                        # make log entry
                        entry = LogEntry()
                        entry.entry_type = LogEntry.SPACE_ALLOCATED_CHANGE
                        entry.band = member.band
                        entry.catalyst = user
                        entry.old_amount = old_space
                        entry.new_amount = new_space
                        entry.save()

                return HttpResponseRedirect(reverse('account.plan'))
            else:
                err_msg = design.you_dont_have_enough_space_to_do_that
示例#4
0
def ajax_checkin(request):
    project = get_obj_from_request(request.POST, 'project', Project)
    
    if project is None:
        return json_failure(design.bad_project_id)

    # make sure project is checked out to request user
    if project.checked_out_to is None or project.checked_out_to.id != request.user.id:
        return json_failure(design.not_checked_out_to_you)

    if project.band.is_read_only():
        return json_failure(design.band_in_readonly_mode)

    project_file = request.FILES.get('project_file')
    mp3_preview = request.FILES.get('mp3_preview')
    comments = request.POST.get('comments', '')

    if project_file is None and mp3_preview is None:
        # just check in
        project.checked_out_to = None
        project.save()

        # create log entry
        entry = LogEntry()
        entry.entry_type = LogEntry.SONG_JUST_CHECK_IN
        entry.band = project.band
        entry.catalyst = request.user
        entry.project = project
        entry.save()

        return json_success()
    
    # must supply a project file
    if project_file is None:
        return json_failure(design.must_submit_project_file)

    new_version_number = project.latest_version.version + 1
    filename_appendix = "_" + str(new_version_number)

    # upload the song and make a new project version
    result = upload_song(request.user,
        file_mp3_handle=mp3_preview,
        file_source_handle=project_file,
        band=project.band,
        song_title=project.title,
        song_comments=comments,
        filename_appendix=filename_appendix)

    if not result['success']:
        return json_failure(result['reason'])

    song = result['song']
    song.save()

    # make a new version
    version = ProjectVersion()
    version.project = project
    version.song = song
    version.version = new_version_number
    version.saveNewVersion()

    # update project info
    project.checked_out_to = None
    project.latest_version = version
    project.title = song.title
    project.save()

    return json_success()
示例#5
0
def createNewBandMemberLogEntry(member):
    entry = LogEntry()
    entry.entry_type = LogEntry.BAND_MEMBER_JOIN
    entry.band = member.band
    entry.catalyst = member.user
    entry.save()
示例#6
0
def account_plan(request):
    """The page that shows the user what plan they're on and wants them to click to the upgrade plans page."""

    user = request.user
    profile = user.get_profile()
    err_msg = ""
    if request.method == 'POST':
        changes = []
        space_total = 0
        for key, val in request.POST.iteritems():
            # format: member-X-amt=Y
            # X = member id, Y = amount donated
            member_str, member_id, amt_str = key.split('-')
            if member_str == 'member' and amt_str == 'amt':
                try:
                    member_id = int(member_id)
                    member = BandMember.objects.get(pk=member_id)
                except ValueError, BandMember.DoesNotExist:
                    err_msg = design.bad_band_member_id
                    break

                # make sure the user is the band member
                if member.user != user:
                    err_msg = design.can_only_edit_your_own_amount_donated
                    break

                try:
                    val = int(val)
                except ValueError:
                    err_msg = design.invalid_amount
                    break

                changes.append((
                    member,
                    val,
                ))
                space_total += val

        if err_msg == "":
            if space_total <= profile.purchased_bytes:
                # everything is good. apply the change.
                # also create log entries for affected bands
                for member, new_space in changes:
                    old_space = member.space_donated
                    if old_space != new_space:
                        # save new space into member
                        member.space_donated = new_space
                        member.save()

                        # add or take away space from the band
                        band = member.band
                        band.total_space += new_space - old_space
                        band.save()

                        # make log entry
                        entry = LogEntry()
                        entry.entry_type = LogEntry.SPACE_ALLOCATED_CHANGE
                        entry.band = member.band
                        entry.catalyst = user
                        entry.old_amount = old_space
                        entry.new_amount = new_space
                        entry.save()

                return HttpResponseRedirect(reverse('account.plan'))
            else:
                err_msg = design.you_dont_have_enough_space_to_do_that
示例#7
0
def ajax_checkin(request):
    project = get_obj_from_request(request.POST, 'project', Project)

    if project is None:
        return json_failure(design.bad_project_id)

    # make sure project is checked out to request user
    if project.checked_out_to is None or project.checked_out_to.id != request.user.id:
        return json_failure(design.not_checked_out_to_you)

    if project.band.is_read_only():
        return json_failure(design.band_in_readonly_mode)

    project_file = request.FILES.get('project_file')
    mp3_preview = request.FILES.get('mp3_preview')
    comments = request.POST.get('comments', '')

    if project_file is None and mp3_preview is None:
        # just check in
        project.checked_out_to = None
        project.save()

        # create log entry
        entry = LogEntry()
        entry.entry_type = LogEntry.SONG_JUST_CHECK_IN
        entry.band = project.band
        entry.catalyst = request.user
        entry.project = project
        entry.save()

        return json_success()

    # must supply a project file
    if project_file is None:
        return json_failure(design.must_submit_project_file)

    new_version_number = project.latest_version.version + 1
    filename_appendix = "_" + str(new_version_number)

    # upload the song and make a new project version
    result = upload_song(request.user,
                         file_mp3_handle=mp3_preview,
                         file_source_handle=project_file,
                         band=project.band,
                         song_title=project.title,
                         song_comments=comments,
                         filename_appendix=filename_appendix)

    if not result['success']:
        return json_failure(result['reason'])

    song = result['song']
    song.save()

    # make a new version
    version = ProjectVersion()
    version.project = project
    version.song = song
    version.version = new_version_number
    version.saveNewVersion()

    # update project info
    project.checked_out_to = None
    project.latest_version = version
    project.title = song.title
    project.save()

    return json_success()
示例#8
0
def createNewBandMemberLogEntry(member):
    entry = LogEntry()
    entry.entry_type = LogEntry.BAND_MEMBER_JOIN
    entry.band = member.band
    entry.catalyst = member.user
    entry.save()