예제 #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 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()
예제 #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()