/** * Get used domain if configured * * @param \Serfhos\MyRedirects\Domain\Model\Redirect $redirect * @return string */ public function getDomainUrlFromRedirect(Redirect $redirect) { $return = '/'; $domain = $redirect->getDomain(); if ($domain > 0) { $domainRecord = $this->getDomain($domain); if (!empty($domainRecord)) { $return = rtrim($domainRecord['domainName'], '/') . '/'; } } return $return; }
/** * Do an active lookup for redirect * * @param \Serfhos\MyRedirects\Domain\Model\Redirect $redirect * @param string $defaultDomain * @return void */ public function activeLookup(Redirect $redirect, $defaultDomain = null) { $active = true; $url = $redirect->getUrl(); if ($defaultDomain === null) { $defaultDomain = GeneralUtility::getHostname(); } if (!empty($url)) { $urlDomain = $this->getDomainService()->getDomainUrlFromRedirect($redirect); // this should be done in the domain service.. if ($urlDomain == '/') { $url = rtrim($defaultDomain, '/') . '/' . $url; } else { $url = $urlDomain . $url; } $urlDetails = parse_url($url); if (!isset($urlDetails['scheme'])) { $url = (GeneralUtility::getIndpEnv('TYPO3_SSL') ? 'https://' : 'http://') . $url; } $details = array(); $this->curlUrl($url, $details); if ((int) $details['response']['http_code'] !== 200) { $active = false; if ((int) $details['response']['http_code'] === 0) { $redirect->setInactiveReason('Response timeout'); } elseif (isset($details['error']['id'])) { $redirect->setInactiveReason($details['error']['id'] . ': ' . $details['error']['message']); } else { $redirect->setInactiveReason('Unknown: ' . var_export($details, true)); } } elseif ($details['response']['url'] == $url) { $active = false; $redirect->setInactiveReason('Redirect got stuck, could be timeout'); } $redirect->setActive($active); $redirect->setLastChecked(new \DateTime()); if ($active === true) { $redirect->setInactiveReason(''); } } else { $redirect->setActive(false); } }