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