Example #1
0
def overview(request, page_id=None):
    """
    Starting page for student profile editing
    If there already is a student profile page, we simply redirect to editing that one.
    If none exists, we'll create a new one and redirect to that if possible.
    """
    if page_id is None and NewStudentPage.objects.filter(owner=request.user).exists():
        if NewStudentPage.objects.filter(owner=request.user).count() >= 2:
            return redirect('student-profiles:disambiguate')
        return redirect('student-profiles:overview-specific', NewStudentPage.objects.get(owner=request.user).id)
    elif page_id is not None:
        page = get_object_or_404(NewStudentPage, id=page_id)
        data, page = initial_context(request, page.id)
        return render(request, 'student_profiles/overview.html', data)

    data = {}
    data['form'] = StartingForm(initial={
        'first_name': request.user.first_name,
        'last_name': request.user.last_name,
    })

    if request.method == 'POST':
        data['form'] = form = StartingForm(request.POST)

        if form.is_valid():
            page = NewStudentPage(owner=request.user)
            page.live = False

            page.title = u'{} {}'.format(form.cleaned_data['first_name'], form.cleaned_data['last_name'])
            page.first_name = form.cleaned_data['first_name']
            page.last_name = form.cleaned_data['last_name']

            request.user.first_name = page.first_name = form.cleaned_data['first_name']
            request.user.last_name = page.last_name = form.cleaned_data['last_name']

            # the following is the page where the new student pages are added as children
            # MAKE SURE THIS IS THE CORRECT ID!
            Page.objects.get(id=NEW_STUDENT_PAGE_INDEX_ID).add_child(instance=page)
            # the page slug should not be changed, lest all links go wrong!
            page.slug = slugify(page.title)
            if Page.objects.exclude(id=page.id).filter(slug=page.slug).exists():
                page.slug = '{}-{}'.format(
                    slugify(page.title),
                    page.id,
                )

            page.has_unpublished_changes = True
            page.save()

            request.user.save()

            return redirect('student-profiles:overview')

    return render(request, 'student_profiles/start.html', data)
Example #2
0
def overview(request, page_id=None):
    """
    Starting page for student profile editing
    If there already is a student profile page, we simply redirect to editing that one.
    If none exists, we'll create a new one and redirect to that if possible.
    """
    if page_id is None and NewStudentPage.objects.filter(owner=request.user).exists():
        if NewStudentPage.objects.filter(owner=request.user).count() >= 2:
            return redirect('student-profiles:disambiguate')
        return redirect('student-profiles:overview-specific', NewStudentPage.objects.get(owner=request.user).id)
    elif page_id is not None:
        page = get_object_or_404(NewStudentPage, id=page_id)
        data, page = initial_context(request, page.id)
        return render(request, 'student_profiles/overview.html', data)

    data = {}
    data['form'] = StartingForm(initial={
        'first_name': request.user.first_name,
        'last_name': request.user.last_name,
    })

    if request.method == 'POST':
        data['form'] = form = StartingForm(request.POST)

        if form.is_valid():
            page = NewStudentPage(owner=request.user)
            page.live = False

            page.title = u'{} {}'.format(form.cleaned_data['first_name'], form.cleaned_data['last_name'])
            page.first_name = form.cleaned_data['first_name']
            page.last_name = form.cleaned_data['last_name']

            request.user.first_name = page.first_name = form.cleaned_data['first_name']
            request.user.last_name = page.last_name = form.cleaned_data['last_name']

            student_settings = StudentProfilesSettings.for_site(request.site)
            Page.objects.get(id=student_settings.new_student_page_index.id).add_child(instance=page)
            # the page slug should not be changed, lest all links go wrong!
            page.slug = slugify(page.title)
            if Page.objects.exclude(id=page.id).filter(slug=page.slug).exists():
                page.slug = '{}-{}'.format(
                    slugify(page.title),
                    page.id,
                )

            page.has_unpublished_changes = True
            page.save()

            request.user.save()

            return redirect('student-profiles:overview')

    return render(request, 'student_profiles/start.html', data)
    def migrate_student_pages(self, name, ma_page, mphil_research_page, phd_research_page, mphil_show_page, phd_show_page):
        pages = [page for page in [ma_page, mphil_research_page, phd_research_page, mphil_show_page, phd_show_page] if page]
        most_recent = sorted(pages, key=lambda page: page.degree_year)[-1]

        mphil_pages = [page for page in [mphil_research_page, mphil_show_page] if page]
        phd_pages = [page for page in [phd_research_page, phd_show_page] if page]
        mphil_page_research = mphil_research_page or mphil_show_page
        phd_page_research = phd_research_page or phd_show_page
        mphil_page_show = mphil_show_page or mphil_research_page
        phd_page_show = phd_show_page or phd_research_page

        # Create new page
        new_page = NewStudentPage()
        new_page.title = name
        new_page.slug = slugify(name)
        new_page.live = most_recent.live
        new_page.has_unpublished_changes = not most_recent.live
        new_page.owner = None
        for page in pages:
            new_page.owner = new_page.owner or page.owner

        # General info
        new_page.first_name = most_recent.first_name
        new_page.last_name = most_recent.last_name
        new_page.profile_image = most_recent.profile_image
        new_page.statement = most_recent.statement
        new_page.twitter_handle = most_recent.student_twitter_feed
        new_page.funding = '; '.join([page.funding for page in pages if page.funding])
        new_page.feed_image = most_recent.feed_image
        new_page.show_on_homepage = most_recent.show_on_homepage

        # MA info
        if ma_page:
            new_page.ma_school = ma_page.school
            new_page.ma_programme = ma_page.programme
            new_page.ma_graduation_year = ma_page.graduation_year or ma_page.degree_year
            new_page.ma_specialism = ma_page.specialism
            new_page.show_work_type = ma_page.work_type
            new_page.show_work_location = ma_page.work_location
            new_page.show_work_description = ma_page.work_description
            new_page.ma_in_show = ma_page.is_in_show

        # MPhil info
        if mphil_pages:
            new_page.mphil_school = mphil_page_research.school
            new_page.mphil_programme = mphil_page_research.programme
            new_page.mphil_start_year = mphil_page_research.degree_year
            new_page.mphil_graduation_year = mphil_page_research.graduation_year
            #research_dissertation_title
            new_page.mphil_statement = mphil_page_show.work_description
            new_page.mphil_work_location = mphil_page_research.work_location
            new_page.mphil_in_show = mphil_page_show.is_in_show

        # PhD info
        if phd_pages:
            new_page.phd_school = phd_page_research.school
            new_page.phd_programme = phd_page_research.programme
            new_page.phd_start_year = phd_page_research.degree_year
            new_page.phd_graduation_year = phd_page_research.graduation_year
            #research_dissertation_title
            new_page.phd_statement = phd_page_show.work_description
            new_page.phd_work_location = phd_page_research.work_location
            new_page.phd_in_show = phd_page_show.is_in_show

        # General child objects
        for page in pages:
            for degree in page.degrees.all():
                new_page.previous_degrees.add(NewStudentPagePreviousDegree(degree=degree.degree))

            for exhibition in page.exhibitions.all():
                new_page.exhibitions.add(NewStudentPageExhibition(exhibition=exhibition.exhibition))

            for experience in page.experiences.all():
                new_page.experiences.add(NewStudentPageExperience(experience=experience.experience))

            for email in page.email.all():
                new_page.emails.add(NewStudentPageContactsEmail(email=email.email))

            for phone in page.phone.all():
                new_page.phones.add(NewStudentPageContactsPhone(phone=phone.phone))

            for website in page.website.all():
                new_page.websites.add(NewStudentPageContactsWebsite(website=website.website))

            for publication in page.publications.all():
                new_page.publications.add(NewStudentPagePublication(name=publication.name))

            for conference in page.conferences.all():
                new_page.conferences.add(NewStudentPageConference(name=conference.name))

            for award in page.awards.all():
                new_page.awards.add(NewStudentPageAward(award=award.award))

        # MA child objects
        if ma_page:
            for carousel_item in ma_page.carousel_items.all():
                new_page.show_carousel_items.add(NewStudentPageShowCarouselItem(
                    image=carousel_item.image,
                    overlay_text=carousel_item.overlay_text,
                    link=carousel_item.link,
                    link_page=carousel_item.link_page,
                    embedly_url=carousel_item.embedly_url,
                    poster_image=carousel_item.poster_image,
                ))

            for collaborator in ma_page.collaborators.all():
                new_page.show_collaborators.add(NewStudentPageShowCollaborator(name=collaborator.name))

            for sponsor in ma_page.sponsor.all():
                new_page.show_sponsors.add(NewStudentPageShowSponsor(name=sponsor.name))

        # MPhil child objects
        for page in mphil_pages:
            for carousel_item in page.carousel_items.all():
                new_page.mphil_carousel_items.add(NewStudentPageMPhilCarouselItem(
                    image=carousel_item.image,
                    overlay_text=carousel_item.overlay_text,
                    link=carousel_item.link,
                    link_page=carousel_item.link_page,
                    embedly_url=carousel_item.embedly_url,
                    poster_image=carousel_item.poster_image,
                ))

            for collaborator in page.collaborators.all():
                new_page.mphil_collaborators.add(NewStudentPageMPhilCollaborator(name=collaborator.name))

            for sponsor in page.sponsor.all():
                new_page.mphil_sponsors.add(NewStudentPageMPhilSponsor(name=sponsor.name))

            for supervisor in page.supervisors.all():
                new_page.mphil_supervisors.add(NewStudentPageMPhilSupervisor(supervisor=supervisor.supervisor, supervisor_other=supervisor.supervisor_other))

        # PhD child objects
        if page in phd_pages:
            for carousel_item in page.carousel_items.all():
                new_page.phd_carousel_items.add(NewStudentPagePhDCarouselItem(
                    image=carousel_item.image,
                    overlay_text=carousel_item.overlay_text,
                    link=carousel_item.link,
                    link_page=carousel_item.link_page,
                    embedly_url=carousel_item.embedly_url,
                    poster_image=carousel_item.poster_image,
                ))

            for collaborator in page.collaborators.all():
                new_page.phd_collaborators.add(NewStudentPagePhDCollaborator(name=collaborator.name))

            for sponsor in page.sponsor.all():
                new_page.phd_sponsors.add(NewStudentPagePhDSponsor(name=sponsor.name))

            for supervisor in page.supervisors.all():
                new_page.phd_supervisors.add(NewStudentPagePhDSupervisor(supervisor=supervisor.supervisor, supervisor_other=supervisor.supervisor_other))

        # Save new page
        if self.save:
            # Add new page into tree
            self.index_page.add_child(new_page)

            # Save revision
            new_page.save_revision()

        return new_page