Esempio n. 1
0
def do_replace(draft, request):
    'Perform document replace'
    
    save_document_in_history(draft)

    replaced = request.session['data']['replaced']          # a DocAlias
    replaced_by = request.session['data']['replaced_by']    # a Document

    # change state and update last modified
    draft.set_state(State.objects.get(type="draft", slug="repl"))
    draft.time = datetime.datetime.now()
    draft.save()

    # create relationship
    RelatedDocument.objects.create(source=replaced_by,
                                   target=replaced,
                                   relationship=DocRelationshipName.objects.get(slug='replaces'))

    # create DocEvent
    # no replace DocEvent at this time, Jan 2012
    
    # move replaced document to archive
    archive_draft_files(replaced.document.name + '-' + replaced.document.rev)

    # send announcement
    announcement_from_form(request.session['email'],by=request.user.person)

    return
Esempio n. 2
0
def do_resurrect(draft, request):
    '''
     Actions
    - restore last archived version
    - change state to Active
    - reset expires
    - create DocEvent
    '''
    # restore latest revision documents file from archive
    files = glob.glob(os.path.join(settings.INTERNET_DRAFT_ARCHIVE_DIR,draft.name) + '-??.*')
    sorted_files = sorted(files)
    latest,ext = os.path.splitext(sorted_files[-1])
    files = glob.glob(os.path.join(settings.INTERNET_DRAFT_ARCHIVE_DIR,latest) + '.*')
    for file in files:
        shutil.move(file,settings.INTERNET_DRAFT_PATH)
    
    # Update draft record
    draft.set_state(State.objects.get(type="draft", slug="active"))
    
    # set expires
    draft.expires = datetime.datetime.now() + datetime.timedelta(settings.INTERNET_DRAFT_DAYS_TO_EXPIRE)
    draft.time = datetime.datetime.now()
    draft.save()

    # create DocEvent
    NewRevisionDocEvent.objects.create(type='completed_resurrect',
                                       by=request.user.person,
                                       doc=draft,
                                       rev=draft.rev,
                                       time=draft.time)
    
    # send announcement
    announcement_from_form(request.session['email'],by=request.user.person)
    
    return
Esempio n. 3
0
def do_withdraw(draft, request):
    '''
    Actions
    - change state to withdrawn
    - TODO move file to archive
    '''
    withdraw_type = request.POST.get('withdraw_type')

    prev_state = draft.get_state("draft")
    new_state = None
    if withdraw_type == 'ietf':
        new_state = State.objects.get(type="draft", slug="ietf-rm")
    elif withdraw_type == 'author':
        new_state = State.objects.get(type="draft", slug="auth-rm")

    if not new_state:
        return

    draft.set_state(new_state)

    e = add_state_change_event(draft, request.user.person, prev_state,
                               new_state)
    if e:
        draft.save_with_history([e])

    # send announcement
    form = EmailForm(request.POST)
    announcement_from_form(form.data, by=request.user.person)

    return
Esempio n. 4
0
def do_replace(draft, request):
    'Perform document replace'

    replaced = DocAlias.objects.get(
        name=request.POST.get('replaced'))  # a DocAlias
    replaced_by = Document.objects.get(
        name=request.POST.get('replaced_by'))  # a Document

    # create relationship
    RelatedDocument.objects.create(
        source=replaced_by,
        target=replaced,
        relationship=DocRelationshipName.objects.get(slug='replaces'))

    draft.set_state(State.objects.get(type="draft", slug="repl"))

    e = DocEvent.objects.create(
        type='changed_document',
        by=request.user.person,
        doc=replaced_by,
        rev=replaced_by.rev,
        time=draft.time,
        desc='This document now replaces <b>%s</b>' % replaced,
    )

    draft.save_with_history([e])

    # move replaced document to archive
    archive_draft_files(replaced.document.name + '-' + replaced.document.rev)

    # send announcement
    form = EmailForm(request.POST)
    announcement_from_form(form.data, by=request.user.person)

    return
Esempio n. 5
0
def do_revision(draft, request):
    '''
    This function handles adding a new revision of an existing Internet-Draft.  
    Prerequisites: draft must be active
    Input: title, revision_date, pages, abstract, file input fields to upload new 
    draft document(s)
    Actions
    - move current doc(s) to archive directory
    - upload new docs to live dir
    - save doc in history
    - increment revision 
    - reset expires
    - create DocEvent
    - handle sub-state
    - schedule notification
    '''
    
    # TODO this behavior may change with archive strategy
    archive_draft_files(draft.name + '-' + draft.rev)
    
    save_document_in_history(draft)

    # save form data
    form = BaseRevisionModelForm(request.session['data'],instance=draft)
    if form.is_valid():
        new_draft = form.save()
    else:
        raise Exception(form.errors)
        raise Exception('Problem with input data %s' % form.data)

    # set revision and expires
    new_draft.rev = request.session['filename'][-2:]
    new_draft.expires = datetime.datetime.now() + datetime.timedelta(settings.INTERNET_DRAFT_DAYS_TO_EXPIRE)
    new_draft.time = datetime.datetime.now()
    new_draft.save()
    
    # create DocEvent
    NewRevisionDocEvent.objects.create(type='new_revision',
                                       by=request.user.person,
                                       doc=draft,
                                       rev=new_draft.rev,
                                       desc='New revision available',
                                       time=draft.time)

    handle_substate(new_draft)
    
    # move uploaded files to production directory
    promote_files(new_draft, request.session['file_type'])
    
    # save the submission record
    post_submission(request)

    # send announcement if we are in IESG process
    if new_draft.get_state('draft-iesg'):
        announcement_from_form(request.session['email'],by=request.user.person)

    return
Esempio n. 6
0
def do_update(draft,request):
    '''
     Actions
    - increment revision #
    - reset expires
    - create DocEvent
    - do substate check
    - change state to Active
    '''
    save_document_in_history(draft)
    
    # save form data
    form = BaseRevisionModelForm(request.session['data'],instance=draft)
    if form.is_valid():
        new_draft = form.save()
    else:
        raise Exception('Problem with input data %s' % form.data)

    handle_substate(new_draft)
    
    # update draft record
    new_draft.rev = os.path.splitext(request.session['data']['filename'])[0][-2:]
    new_draft.expires = datetime.datetime.now() + datetime.timedelta(settings.INTERNET_DRAFT_DAYS_TO_EXPIRE)
    new_draft.time = datetime.datetime.now()
    new_draft.save()
    
    new_draft.set_state(State.objects.get(type="draft", slug="active"))
    
    # create DocEvent
    NewRevisionDocEvent.objects.create(type='new_revision',
                                       by=request.user.person,
                                       doc=new_draft,
                                       rev=new_draft.rev,
                                       desc='New revision available',
                                       time=new_draft.time)
    
    # move uploaded files to production directory
    promote_files(new_draft, request.session['file_type'])
    
    # save the submission record
    post_submission(request)

    # send announcement
    announcement_from_form(request.session['email'],by=request.user.person)
    
    return
Esempio n. 7
0
def do_withdraw(draft,request):
    '''
    Actions
    - change state to withdrawn
    - TODO move file to archive
    '''
    withdraw_type = request.session['data']['type']
    if withdraw_type == 'ietf':
        draft.set_state(State.objects.get(type="draft", slug="ietf-rm"))
    elif withdraw_type == 'author':
        draft.set_state(State.objects.get(type="draft", slug="auth-rm"))
    
    draft.time = datetime.datetime.now()
    draft.save()
    
    # no DocEvent ?

    # send announcement
    announcement_from_form(request.session['email'],by=request.user.person)
    
    return
Esempio n. 8
0
def do_resurrect(draft, request):
    '''
     Actions
    - restore last archived version
    - change state to Active
    - reset expires
    - create DocEvent
    '''
    # restore latest revision documents file from archive
    files = glob.glob(
        os.path.join(settings.INTERNET_DRAFT_ARCHIVE_DIR, draft.name) +
        '-??.*')
    sorted_files = sorted(files)
    latest, ext = os.path.splitext(sorted_files[-1])
    files = glob.glob(
        os.path.join(settings.INTERNET_DRAFT_ARCHIVE_DIR, latest) + '.*')
    for file in files:
        shutil.move(file, settings.INTERNET_DRAFT_PATH)

    # Update draft record
    draft.set_state(State.objects.get(type="draft", slug="active"))

    # set expires
    draft.expires = datetime.datetime.now() + datetime.timedelta(
        settings.INTERNET_DRAFT_DAYS_TO_EXPIRE)

    # create DocEvent
    e = NewRevisionDocEvent.objects.create(type='completed_resurrect',
                                           by=request.user.person,
                                           doc=draft,
                                           rev=draft.rev,
                                           time=draft.time)

    draft.save_with_history([e])

    # send announcement
    form = EmailForm(request.POST)
    announcement_from_form(form.data, by=request.user.person)

    return
Esempio n. 9
0
def do_extend(draft, request):
    '''
    Actions:
    - update revision_date
    - set extension_date
    '''
    save_document_in_history(draft)

    draft.expires = request.session['data']['expiration_date']
    draft.time = datetime.datetime.now()
    draft.save()
    
    DocEvent.objects.create(type='changed_document',
                            by=request.user.person,
                            doc=draft,
                            time=draft.time,
                            desc='extend_expiry')
                            
    # save scheduled announcement
    announcement_from_form(request.session['email'],by=request.user.person)
    
    return
Esempio n. 10
0
def announce(request, id):
    '''
    Schedule announcement of new Internet-Draft to I-D Announce list

    **Templates:**

    * none

    **Template Variables:**

    * none
    '''
    draft = get_object_or_404(Document, name=id)

    email_form = EmailForm(get_email_initial(draft,type='new'))
                            
    announcement_from_form(email_form.data,
                           by=request.user.person,
                           from_val='*****@*****.**',
                           content_type='Multipart/Mixed; Boundary="NextPart"')
            
    messages.success(request, 'Announcement scheduled successfully!')
    return redirect('drafts_view', id=id)
Esempio n. 11
0
def announce(request, id):
    '''
    Schedule announcement of new Internet-Draft to I-D Announce list

    **Templates:**

    * none

    **Template Variables:**

    * none
    '''
    draft = get_object_or_404(Document, name=id)

    email_form = EmailForm(get_email_initial(draft, action='new'))

    announcement_from_form(email_form.data,
                           by=request.user.person,
                           from_val='*****@*****.**',
                           content_type='Multipart/Mixed; Boundary="NextPart"')

    messages.success(request, 'Announcement scheduled successfully!')
    return redirect('ietf.secr.drafts.views.view', id=id)
Esempio n. 12
0
def do_extend(draft, request):
    '''
    Actions:
    - update revision_date
    - set extension_date
    '''

    e = DocEvent.objects.create(
        type='changed_document',
        by=request.user.person,
        doc=draft,
        rev=draft.rev,
        time=draft.time,
        desc='Extended expiry',
    )
    draft.expires = parse(request.POST.get('expiration_date'))
    draft.save_with_history([e])

    # save scheduled announcement
    form = EmailForm(request.POST)
    announcement_from_form(form.data, by=request.user.person)

    return
Esempio n. 13
0
def do_update_announce(draft, request):
    # send announcement
    form = EmailForm(request.POST)
    announcement_from_form(form.data, by=request.user.person)

    return