public function testAllowsProtocolRelative() { $noProtocol = new RedirectorPage(array('ExternalURL' => 'mydomain.com')); $noProtocol->write(); $this->assertEquals('http://mydomain.com', $noProtocol->ExternalURL); $protocolAbsolute = new RedirectorPage(array('ExternalURL' => 'http://mydomain.com')); $protocolAbsolute->write(); $this->assertEquals('http://mydomain.com', $protocolAbsolute->ExternalURL); $protocolRelative = new RedirectorPage(array('ExternalURL' => '//mydomain.com')); $protocolRelative->write(); $this->assertEquals('//mydomain.com', $protocolRelative->ExternalURL); }
public function testRevertToLiveFixesBrokenLinks() { // Create page and virutal page $p = new Page(); $p->Title = "source"; $p->write(); $pageID = $p->ID; $this->assertTrue($p->doPublish()); // Content links are one kind of link to pages $p2 = new Page(); $p2->Title = "regular link"; $p2->Content = "<a href=\"[sitetree_link,id={$p->ID}]\">test</a>"; $p2->write(); $this->assertTrue($p2->doPublish()); // Virtual pages are another $vp = new VirtualPage(); $vp->CopyContentFromID = $p->ID; $vp->write(); // Redirector links are a third $rp = new RedirectorPage(); $rp->Title = "redirector"; $rp->LinkType = 'Internal'; $rp->LinkToID = $p->ID; $rp->write(); $this->assertTrue($rp->doPublish()); // Confirm that there are no broken links to begin with $this->assertFalse($p2->HasBrokenLink); $this->assertFalse($vp->HasBrokenLink); $this->assertFalse($rp->HasBrokenLink); // Delete from draft and confirm that broken links are marked $pID = $p->ID; $p->delete(); $vp->flushCache(); $vp = DataObject::get_by_id('SiteTree', $vp->ID); $p2->flushCache(); $p2 = DataObject::get_by_id('SiteTree', $p2->ID); $rp->flushCache(); $rp = DataObject::get_by_id('SiteTree', $rp->ID); $this->assertEquals(1, $p2->HasBrokenLink); $this->assertEquals(1, $vp->HasBrokenLink); $this->assertEquals(1, $rp->HasBrokenLink); // Call doRevertToLive and confirm that broken links are restored $pLive = Versioned::get_one_by_stage('SiteTree', 'Live', '"SiteTree"."ID" = ' . $pID); $pLive->doRevertToLive(); $p2->flushCache(); $p2 = DataObject::get_by_id('SiteTree', $p2->ID); $vp->flushCache(); $vp = DataObject::get_by_id('SiteTree', $vp->ID); $rp->flushCache(); $rp = DataObject::get_by_id('SiteTree', $rp->ID); $this->assertFalse((bool) $p2->HasBrokenLink); $this->assertFalse((bool) $vp->HasBrokenLink); $this->assertFalse((bool) $rp->HasBrokenLink); }
/** * Creates the default SiteTree CMS section if not exists * * @param SilvercartFrontPage $rootPage SiteTree root page * * @return SilvercartFrontPage * * @author Sebastian Diel <*****@*****.**> * @since 21.03.2016 */ public function createDefaultSiteTreeCMSSection($rootPage) { $legalNavigationHolder = new SilvercartMetaNavigationHolder(); $legalNavigationHolder->Title = _t('SilvercartMetaNavigationHolder.DEFAULT_TITLE_LEGAL'); $legalNavigationHolder->URLSegment = _t('SilvercartMetaNavigationHolder.DEFAULT_URLSEGMENT_LEGAL', 'legal'); $legalNavigationHolder->Status = "Published"; $legalNavigationHolder->ShowInMenus = 0; $legalNavigationHolder->IdentifierCode = "SilvercartMetaNavigationHolderLegal"; $legalNavigationHolder->ParentID = $rootPage->ID; $legalNavigationHolder->InheritFromParent = false; $legalNavigationHolder->write(); $legalNavigationHolder->publish("Stage", "Live"); $serviceNavigationHolder = new SilvercartMetaNavigationHolder(); $serviceNavigationHolder->Title = _t('SilvercartMetaNavigationHolder.DEFAULT_TITLE_SERVICE'); $serviceNavigationHolder->URLSegment = _t('SilvercartMetaNavigationHolder.DEFAULT_URLSEGMENT_SERVICE', 'service'); $serviceNavigationHolder->Status = "Published"; $serviceNavigationHolder->ShowInMenus = 0; $serviceNavigationHolder->IdentifierCode = "SilvercartMetaNavigationHolderService"; $serviceNavigationHolder->ParentID = $rootPage->ID; $serviceNavigationHolder->InheritFromParent = false; $serviceNavigationHolder->write(); $serviceNavigationHolder->publish("Stage", "Live"); $aboutNavigationHolder = new SilvercartMetaNavigationHolder(); $aboutNavigationHolder->Title = _t('SilvercartMetaNavigationHolder.DEFAULT_TITLE_ABOUT'); $aboutNavigationHolder->URLSegment = _t('SilvercartMetaNavigationHolder.DEFAULT_URLSEGMENT_ABOUT', 'about-us'); $aboutNavigationHolder->Status = "Published"; $aboutNavigationHolder->ShowInMenus = 0; $aboutNavigationHolder->IdentifierCode = "SilvercartMetaNavigationHolderAbout"; $aboutNavigationHolder->ParentID = $rootPage->ID; $aboutNavigationHolder->InheritFromParent = false; $aboutNavigationHolder->write(); $aboutNavigationHolder->publish("Stage", "Live"); $shopNavigationHolder = new SilvercartMetaNavigationHolder(); $shopNavigationHolder->Title = _t('SilvercartMetaNavigationHolder.DEFAULT_TITLE_SHOP'); $shopNavigationHolder->URLSegment = _t('SilvercartMetaNavigationHolder.DEFAULT_URLSEGMENT_SHOP', 'shop-system'); $shopNavigationHolder->Status = "Published"; $shopNavigationHolder->ShowInMenus = 0; $shopNavigationHolder->IdentifierCode = "SilvercartMetaNavigationHolderShop"; $shopNavigationHolder->ParentID = $rootPage->ID; $shopNavigationHolder->InheritFromParent = false; $shopNavigationHolder->write(); $shopNavigationHolder->publish("Stage", "Live"); // Sub pages of legal node $termsOfServicePage = new SilvercartMetaNavigationPage(); $termsOfServicePage->Title = _t('TermsOfServicePage.DEFAULT_TITLE', 'terms of service'); $termsOfServicePage->URLSegment = _t('TermsOfServicePage.DEFAULT_URLSEGMENT', 'terms-of-service'); $termsOfServicePage->Status = "Published"; $termsOfServicePage->ShowInMenus = 1; $termsOfServicePage->ParentID = $legalNavigationHolder->ID; $termsOfServicePage->IdentifierCode = "TermsOfServicePage"; $termsOfServicePage->write(); $termsOfServicePage->publish("Stage", "Live"); $revocationInstructionPage = new RedirectorPage(); $revocationInstructionPage->RedirectionType = 'Internal'; $revocationInstructionPage->LinkToID = $termsOfServicePage->ID; $revocationInstructionPage->Title = _t('RevocationInstructionPage.DEFAULT_TITLE', 'revocation instruction'); $revocationInstructionPage->URLSegment = _t('RevocationInstructionPage.DEFAULT_URLSEGMENT', 'revocation-instruction'); $revocationInstructionPage->Status = "Published"; $revocationInstructionPage->ShowInMenus = 1; $revocationInstructionPage->ParentID = $legalNavigationHolder->ID; $revocationInstructionPage->IdentifierCode = "SilvercartRevocationInstructionPage"; $revocationInstructionPage->write(); $revocationInstructionPage->publish("Stage", "Live"); $revocationPage = new SilvercartRevocationFormPage(); $revocationPage->Title = _t('SilvercartRevocationFormPage.DEFAULT_TITLE', 'Revocation'); $revocationPage->URLSegment = _t('SilvercartRevocationFormPage.DEFAULT_URLSEGMENT', 'Revocation'); $revocationPage->Status = "Published"; $revocationPage->ShowInMenus = 1; $revocationPage->IdentifierCode = "SilvercartRevocationFormPage"; $revocationPage->ParentID = $legalNavigationHolder->ID; $revocationPage->write(); $revocationPage->publish("Stage", "Live"); $dataPrivacyStatementPage = new SilvercartMetaNavigationPage(); $dataPrivacyStatementPage->Title = _t('SilvercartDataPrivacyStatementPage.DEFAULT_TITLE', 'data privacy statement'); $dataPrivacyStatementPage->URLSegment = _t('SilvercartDataPrivacyStatementPage.DEFAULT_URLSEGMENT', 'data-privacy-statement'); $dataPrivacyStatementPage->Status = "Published"; $dataPrivacyStatementPage->ShowInMenus = 1; $dataPrivacyStatementPage->IdentifierCode = "DataPrivacyStatementPage"; $dataPrivacyStatementPage->ParentID = $legalNavigationHolder->ID; $dataPrivacyStatementPage->write(); $dataPrivacyStatementPage->publish("Stage", "Live"); // Sub pages of service node $this->createDefaultSiteTreeMyAccountSection($serviceNavigationHolder); $paymentMethodsPage = new SilvercartPaymentMethodsPage(); $paymentMethodsPage->Title = _t('SilvercartPaymentMethodsPage.DEFAULT_TITLE', 'Payment methods'); $paymentMethodsPage->URLSegment = _t('SilvercartPaymentMethodsPage.DEFAULT_URLSEGMENT', 'payment-methods'); $paymentMethodsPage->Status = "Published"; $paymentMethodsPage->ShowInMenus = 1; $paymentMethodsPage->ParentID = $serviceNavigationHolder->ID; $paymentMethodsPage->IdentifierCode = "SilvercartPaymentMethodsPage"; $paymentMethodsPage->write(); $paymentMethodsPage->publish("Stage", "Live"); $shippingFeesPage = new SilvercartShippingFeesPage(); $shippingFeesPage->Title = _t('SilvercartShippingFeesPage.DEFAULT_TITLE', 'shipping fees'); $shippingFeesPage->URLSegment = _t('SilvercartShippingFeesPage.DEFAULT_URLSEGMENT', 'shipping-fees'); $shippingFeesPage->Status = "Published"; $shippingFeesPage->ShowInMenus = 1; $shippingFeesPage->ParentID = $serviceNavigationHolder->ID; $shippingFeesPage->IdentifierCode = "SilvercartShippingFeesPage"; $shippingFeesPage->write(); $shippingFeesPage->publish("Stage", "Live"); $newsletterPage = new SilvercartNewsletterPage(); $newsletterPage->Title = _t('SilvercartNewsletterPage.DEFAULT_TITLE', 'Newsletter'); $newsletterPage->URLSegment = _t('SilvercartNewsletterPage.DEFAULT_URLSEGMENT', 'newsletter'); $newsletterPage->Status = "Published"; $newsletterPage->ShowInMenus = true; $newsletterPage->ShowInSearch = true; $newsletterPage->ParentID = $serviceNavigationHolder->ID; $newsletterPage->IdentifierCode = "SilvercartNewsletterPage"; $newsletterPage->write(); $newsletterPage->publish("Stage", "Live"); $newsletterResponsePage = new SilvercartNewsletterResponsePage(); $newsletterResponsePage->Title = _t('SilvercartNewsletterResponsePage.DEFAULT_TITLE', 'Newsletter Status'); $newsletterResponsePage->URLSegment = _t('SilvercartNewsletterResponsePage.DEFAULT_URLSEGMENT', 'newsletter_status'); $newsletterResponsePage->Status = "Published"; $newsletterResponsePage->ShowInMenus = false; $newsletterResponsePage->ShowInSearch = false; $newsletterResponsePage->ParentID = $newsletterPage->ID; $newsletterResponsePage->IdentifierCode = "SilvercartNewsletterResponsePage"; $newsletterResponsePage->write(); $newsletterResponsePage->publish("Stage", "Live"); $newsletterOptInConfirmationPage = new SilvercartNewsletterOptInConfirmationPage(); $newsletterOptInConfirmationPage->Title = _t('SilvercartNewsletterOptInConfirmationPage.DEFAULT_TITLE', 'register confirmation page'); $newsletterOptInConfirmationPage->URLSegment = _t('SilvercartNewsletterOptInConfirmationPage.DEFAULT_URLSEGMENT', 'register-confirmation'); $newsletterOptInConfirmationPage->Content = _t('SilvercartNewsletterOptInConfirmationPage.DEFAULT_CONTENT'); $newsletterOptInConfirmationPage->ConfirmationFailureMessage = _t('SilvercartNewsletterOptInConfirmationPage.DEFAULT_CONFIRMATIONFAILUREMESSAGE'); $newsletterOptInConfirmationPage->ConfirmationSuccessMessage = _t('SilvercartNewsletterOptInConfirmationPage.DEFAULT_CONFIRMATIONSUCCESSMESSAGE'); $newsletterOptInConfirmationPage->AlreadyConfirmedMessage = _t('SilvercartNewsletterOptInConfirmationPage.DEFAULT_ALREADYCONFIRMEDMESSAGE'); $newsletterOptInConfirmationPage->Status = "Published"; $newsletterOptInConfirmationPage->ParentID = $newsletterPage->ID; $newsletterOptInConfirmationPage->ShowInMenus = false; $newsletterOptInConfirmationPage->ShowInSearch = false; $newsletterOptInConfirmationPage->IdentifierCode = "SilvercartNewsletterOptInConfirmationPage"; $newsletterOptInConfirmationPage->write(); $newsletterOptInConfirmationPage->publish("Stage", "Live"); // Sub pages of about node $imprintPage = new SilvercartMetaNavigationPage(); $imprintPage->Title = _t('ImprintPage.DEFAULT_TITLE', 'imprint'); $imprintPage->URLSegment = _t('ImprintPage.DEFAULT_URLSEGMENT', 'imprint'); $imprintPage->Status = "Published"; $imprintPage->ShowInMenus = 1; $imprintPage->ParentID = $aboutNavigationHolder->ID; $imprintPage->IdentifierCode = "ImprintPage"; $imprintPage->write(); $imprintPage->publish("Stage", "Live"); $contactPage = new SilvercartContactFormPage(); $contactPage->Title = _t('SilvercartContactFormPage.DEFAULT_TITLE', 'contact'); $contactPage->URLSegment = _t('SilvercartContactFormPage.DEFAULT_URLSEGMENT', 'contact'); $contactPage->Status = "Published"; $contactPage->ShowInMenus = 1; $contactPage->IdentifierCode = "SilvercartContactFormPage"; $contactPage->ParentID = $aboutNavigationHolder->ID; $contactPage->write(); $contactPage->publish("Stage", "Live"); $contactFormResponsePage = new SilvercartContactFormResponsePage(); $contactFormResponsePage->Title = _t('SilvercartContactFormResponsePage.DEFAULT_TITLE', 'contact confirmation'); $contactFormResponsePage->URLSegment = _t('SilvercartContactFormResponsePage.DEFAULT_URLSEGMENT', 'contactconfirmation'); $contactFormResponsePage->Status = "Published"; $contactFormResponsePage->ShowInMenus = false; $contactFormResponsePage->ShowInSearch = false; $contactFormResponsePage->IdentifierCode = "SilvercartContactFormResponsePage"; $contactFormResponsePage->ParentID = $contactPage->ID; $contactFormResponsePage->Content = _t('SilvercartContactFormResponsePage.DEFAULT_CONTENT', 'Many thanks for Your message. Your request will be answered as soon as possible.'); $contactFormResponsePage->write(); $contactFormResponsePage->publish("Stage", "Live"); // Sub pages of shop node $silvercartDePage = new RedirectorPage(); $silvercartDePage->RedirectionType = 'External'; $silvercartDePage->ExternalURL = 'http://www.silvercart.de'; $silvercartDePage->Title = 'silvercart.de'; $silvercartDePage->URLSegment = 'silvercart-de'; $silvercartDePage->Status = "Published"; $silvercartDePage->ShowInMenus = 1; $silvercartDePage->ParentID = $shopNavigationHolder->ID; $silvercartDePage->write(); $silvercartDePage->publish("Stage", "Live"); $silvercartOrgPage = new RedirectorPage(); $silvercartOrgPage->RedirectionType = 'External'; $silvercartOrgPage->ExternalURL = 'http://www.silvercart.org'; $silvercartOrgPage->Title = 'silvercart.org'; $silvercartOrgPage->URLSegment = 'silvercart-org'; $silvercartOrgPage->Status = "Published"; $silvercartOrgPage->ShowInMenus = 1; $silvercartOrgPage->ParentID = $shopNavigationHolder->ID; $silvercartOrgPage->write(); $silvercartOrgPage->publish("Stage", "Live"); }
public function testVirtualPagePointingToRedirectorPage() { if (!class_exists('RedirectorPage')) { $this->markTestSkipped('RedirectorPage required'); } $rp = new RedirectorPage(array('ExternalURL' => 'http://google.com', 'RedirectionType' => 'External')); $rp->write(); $rp->doPublish(); $vp = new VirtualPage(array('URLSegment' => 'vptest', 'CopyContentFromID' => $rp->ID)); $vp->write(); $vp->doPublish(); $response = $this->get($vp->Link()); $this->assertEquals(301, $response->getStatusCode()); $this->assertEquals('http://google.com', $response->getHeader('Location')); }