def replace_image(request, model_name, id, image_id):
    image = get_object_or_404(Image, id=image_id, deleted=False)
    if is_locked(image):
        return render_error(
          request,
          ('%s is reserved.') % (image.description()),
          redirect=False, is_safe=True)
    return upload_image(request, model_name, id, image.type.name, image=image)
Beispiel #2
0
def replace_image(request, model_name, id, image_id):
    image = get_object_or_404(Image, id=image_id, deleted=False)
    if is_locked(image):
        return render_error(request,
                            ('%s is reserved.') % (image.description()),
                            redirect=False,
                            is_safe=True)
    return upload_image(request, model_name, id, image.type.name, image=image)
def migrate_reserve(display, label, comment=''):
    if is_locked(display) == None:
        changeset=_do_reserve(ANON_USER, display, label)
        if changeset == None:
            raise ValueError, display
        changeset.state=states.OPEN
        changeset.save()
        comment = changeset.comments.create(commenter=ANON_USER,
          text='This is an automatically generated changeset %s.' % comment,
          old_state=states.UNRESERVED, new_state=states.OPEN)
        return changeset
    else:
        print "%s %s is reserved" % (label.capitalize(), display)
        return None
Beispiel #4
0
def migrate_reserve(display, label, comment=''):
    if is_locked(display) == None:
        ANON_USER = User.objects.get(username=settings.ANON_USER_NAME)
        changeset=_do_reserve(ANON_USER, display, label)
        if changeset == None:
            raise ValueError(display)
        changeset.state=states.OPEN
        changeset.save()
        comment = changeset.comments.create(commenter=ANON_USER,
          text='This is an automatically generated changeset %s.' % comment,
          old_state=states.UNRESERVED, new_state=states.OPEN)
        return changeset
    else:
        print("%s %s is reserved" % (label.capitalize(), display))
        return None
Beispiel #5
0
def index_status_css(issue):
    """
    Text form of issue indexing status.  If clauses arranged in order of most
    likely case to least.
    """
    from apps.oi.templatetags.editing import is_locked

    if is_locked(issue):
        active = issue.revisions.get(changeset__state__in=states.ACTIVE)
        return STATE_CSS_NAME[active.changeset.state]
    elif issue.is_indexed == INDEXED['full']:
        return 'approved'
    elif issue.is_indexed in [INDEXED['partial'], INDEXED['ten_percent']]:
        return 'partial'
    else:
        return 'available'
def index_status_css(issue):
    """
    Text form of issue indexing status.  If clauses arranged in order of most
    likely case to least.
    """
    from apps.oi.templatetags.editing import is_locked

    if is_locked(issue):
        active = issue.revisions.get(changeset__state__in=states.ACTIVE)
        return STATE_CSS_NAME[active.changeset.state]
    elif issue.is_indexed == INDEXED['full']:
        return 'approved'
    elif issue.is_indexed in [INDEXED['partial'], INDEXED['ten_percent']]:
        return 'partial'
    else:
        return 'available'
Beispiel #7
0
def upload_cover(request, cover_id=None, issue_id=None):
    """
    Handles uploading of covers be it
    - first upload
    - replacement upload
    - variant upload
    """

    # this cannot actually happen
    if cover_id and issue_id:
        raise ValueError

    # if cover_id is present it is a replacement upload
    if cover_id:
        cover = get_object_or_404(Cover, id=cover_id)
        issue = cover.issue
    # no cover_id, therefore upload a cover to an issue (first or variant)
    else:
        issue = get_object_or_404(Issue, id=issue_id)
        if not issue.can_have_cover():
            return render_error(
                request,
                'No covers for non-comics publications if the issue has less'
                ' than 10% indexed comics content.',
                redirect=False)
        cover = None

    # check if there is a pending issue deletion
    if IssueRevision.objects.filter(issue=issue,
                                    deleted=True,
                                    changeset__state__in=states.ACTIVE):
        revision = IssueRevision.objects.get(
            issue=issue, changeset__state__in=states.ACTIVE)
        return render_error(
            request,
            ('%s is <a href="%s">pending deletion</a>. Covers '
             'cannot be added or modified.') %
            (esc(issue),
             urlresolvers.reverse('compare',
                                  kwargs={'id': revision.changeset.id})),
            redirect=False,
            is_safe=True)

    # check if there is a pending change for the cover
    # if POST, get a lock
    if cover_id and request.method == 'POST':
        revision_lock = _get_revision_lock(cover)
        if not revision_lock:
            return render_error(
                request,
                'Cannot replace %s as it is already reserved.' % cover.issue)
    # if GET, check for a lock
    elif cover_id and is_locked(cover):
        return render_error(
            request,
            ('There currently is a pending replacement for this cover of %s.')
            % (cover.issue),
            redirect=False,
            is_safe=True)
    else:
        revision_lock = None

    # current request is an upload
    if request.method == 'POST':
        return handle_uploaded_cover(request,
                                     cover,
                                     issue,
                                     revision_lock=revision_lock)
    # request is a GET for the form
    else:
        if 'oi_file_source' in request.session:
            vars = {
                'source': request.session['oi_file_source'],
                'remember_source': True
            }
        else:
            vars = None
        form = UploadScanForm(initial=vars)

        # display the form
        return _display_cover_upload_form(request, form, cover, issue)
def upload_cover(request, cover_id=None, issue_id=None):
    """
    Handles uploading of covers be it
    - first upload
    - replacement upload
    - variant upload
    """

    # this cannot actually happen
    if cover_id and issue_id:
        raise ValueError

    # if cover_id is present it is a replacement upload
    if cover_id:
        cover = get_object_or_404(Cover, id=cover_id)
        issue = cover.issue
    # no cover_id, therefore upload a cover to an issue (first or variant)
    else:
        issue = get_object_or_404(Issue, id=issue_id)
        if not issue.can_have_cover():
            return render_error(request,
              'No covers for non-comics publications if the issue has less'
              ' than 10% indexed comics content.', redirect=False)
        cover = None

    # check if there is a pending issue deletion
    if IssueRevision.objects.filter(issue=issue, deleted=True,
                                    changeset__state__in=states.ACTIVE):
        revision = IssueRevision.objects.get(issue=issue,
          changeset__state__in=states.ACTIVE)
        return render_error(request,
          ('%s is <a href="%s">pending deletion</a>. Covers '
          'cannot be added or modified.') % (esc(issue),
          urlresolvers.reverse('compare', kwargs={'id': revision.changeset.id})),
          redirect=False, is_safe=True)

    # check if there is a pending change for the cover
    # if POST, get a lock
    if cover_id and request.method == 'POST':
        revision_lock = _get_revision_lock(cover)
        if not revision_lock:
            return render_error(
              request,
              u'Cannot replace %s as it is already reserved.' %
              cover.issue)
    # if GET, check for a lock
    elif cover_id and is_locked(cover):
        return render_error(
          request,
          ('There currently is a pending replacement for this cover of %s.')
          % (cover.issue), redirect=False, is_safe=True)
    else:
        revision_lock = None

    # current request is an upload
    if request.method == 'POST':
        return handle_uploaded_cover(request, cover, issue,
                                     revision_lock=revision_lock)
    # request is a GET for the form
    else:
        if 'oi_file_source' in request.session:
            vars = {'source' : request.session['oi_file_source'],
                    'remember_source' : True}
        else:
            vars = None
        form = UploadScanForm(initial=vars)

        # display the form
        return _display_cover_upload_form(request, form, cover, issue)
Beispiel #9
0
def compare_current_reprints(object_type, changeset):
    """process reprint_links and parse into readable format for compare view"""
    if object_type.changeset_id != changeset.id:
        if not object_type.source:
            return ''
        active = ReprintRevision.objects.filter(
            next_revision__in=changeset.reprintrevisions.all())
        if type(object_type) == StoryRevision:
            active_origin = active.filter(origin=object_type.source)
            active_target = active.filter(target=object_type.source)
        else:
            active_origin = active.filter(origin_issue=object_type.source,
                                          origin=None)
            active_target = active.filter(target_issue=object_type.source,
                                          target=None)
    else:
        if not object_type.source:
            active_origin = object_type.origin_reprint_revisions\
                                       .filter(changeset=changeset)
            active_target = object_type.target_reprint_revisions\
                                       .filter(changeset=changeset)
        else:
            active_origin = object_type.source.origin_reprint_revisions\
                .filter(changeset=changeset)
            active_target = object_type.source.target_reprint_revisions\
                .filter(changeset=changeset)
    if type(object_type) == IssueRevision:
        active_origin = active_origin.filter(origin=None, origin_revision=None)
        active_target = active_target.filter(target=None, target_revision=None)

    if not object_type.source:
        kept_origin = ReprintRevision.objects.none()
        kept_target = ReprintRevision.objects.none()
    else:
        kept_origin = object_type.source.origin_reprint_revisions\
          .filter(changeset__modified__lte=changeset.modified)\
          .exclude(changeset=changeset)\
          .filter(changeset__state=states.APPROVED)\
          .exclude(deleted=True)

        kept_target = object_type.source.target_reprint_revisions\
          .filter(changeset__modified__lte=changeset.modified)\
          .exclude(changeset=changeset)\
          .filter(changeset__state=states.APPROVED)\
          .exclude(deleted=True)
        if type(object_type) == IssueRevision:
            kept_origin = kept_origin.filter(origin=None, origin_revision=None)
            kept_target = kept_target.filter(target=None, target_revision=None)

    if active_origin.exists() or active_target.exists():
        if object_type.changeset_id != changeset.id:
            reprint_string = '<ul>The following reprint links are edited in ' \
                             'the compared changeset.'
        else:
            reprint_string = '<ul>The following reprint links are edited ' \
                             'in this changeset.'

        active_target = active_target.select_related(
            'origin_issue__series__publisher',
            'origin_revision__issue__series__publisher', 'target_issue',
            'target_revision__issue')
        active_target = active_target.order_by('origin_issue__key_date')

        active_origin = active_origin.select_related(
            'target_issue__series__publisher',
            'target_revision__issue__series__publisher', 'origin_issue',
            'origin_revision__issue')
        active_origin = active_origin.order_by('target_issue__key_date')

        for reprint in (active_origin | active_target):
            if object_type.changeset_id != changeset.id:
                do_compare = False
                action = ''
            else:
                do_compare = True
                if reprint.previous_revision is None:
                    action = " <span class='added'>[ADDED]</span>"
                elif reprint.deleted:
                    action = " <span class='deleted'>[DELETED]</span>"
                else:
                    action = ""
            reprint_string = '%s<li>%s%s</li>' % (
                reprint_string,
                reprint.get_compare_string(object_type.issue,
                                           do_compare=do_compare), action)
        reprint_string += '</ul>'
    else:
        reprint_string = ''

    if kept_origin.exists() or kept_target.exists():
        kept_string = ''
        kept_target = kept_target.order_by('origin_issue__key_date')
        kept_origin = kept_origin.order_by('target_issue__key_date')

        for reprint in kept_origin.union(kept_target):
            # the checks for nex_revision.changeset seemingly cannot be done
            # in the filter/exclude process above. next_revision does not need
            # to exists and makes problems in that.
            if not hasattr(reprint, 'next_revision') or \
              (reprint.next_revision.changeset != changeset and not
                (reprint.next_revision.changeset.state == states.APPROVED and
                 reprint.next_revision.changeset.modified <= changeset.modified)):
                kept_string = '%s<li>%s' % (
                    kept_string, reprint.get_compare_string(object_type.issue))
                if reprint.source and is_locked(reprint.source):
                    kept_string += '<br>reserved in a different changeset'
                kept_string += '</li>'
        if kept_string != '':
            reprint_string += '</ul>The following reprint links are not ' \
                'part of this change.<ul>' + kept_string

    return mark_safe(reprint_string)