2014-07-24 04:50:14 +02:00
|
|
|
<?php
|
|
|
|
|
2017-11-22 02:26:15 +01:00
|
|
|
namespace SilverStripe\ExternalLinks\Model;
|
|
|
|
|
2019-07-26 11:16:31 +02:00
|
|
|
use InvalidArgumentException;
|
|
|
|
use SilverStripe\CMS\Model\SiteTree;
|
2017-11-27 21:45:40 +01:00
|
|
|
use SilverStripe\Control\HTTPResponse;
|
2017-11-23 00:56:44 +01:00
|
|
|
use SilverStripe\ORM\DataObject;
|
2017-11-27 21:45:40 +01:00
|
|
|
use SilverStripe\Security\Permission;
|
|
|
|
use SilverStripe\Security\Security;
|
2017-11-22 02:26:15 +01:00
|
|
|
|
2014-08-07 03:56:15 +02:00
|
|
|
/**
|
|
|
|
* Represents a single link checked for a single run that is broken
|
|
|
|
*
|
2019-07-26 11:16:31 +02:00
|
|
|
* @property string Link
|
|
|
|
* @property int HTTPCode
|
2014-08-07 03:56:15 +02:00
|
|
|
* @method BrokenExternalPageTrack Track()
|
|
|
|
* @method BrokenExternalPageTrackStatus Status()
|
|
|
|
*/
|
2017-11-23 00:56:44 +01:00
|
|
|
class BrokenExternalLink extends DataObject
|
|
|
|
{
|
2017-11-23 02:54:27 +01:00
|
|
|
private static $table_name = 'BrokenExternalLink';
|
2014-07-24 04:50:14 +02:00
|
|
|
|
2017-11-23 00:56:44 +01:00
|
|
|
private static $db = array(
|
|
|
|
'Link' => 'Varchar(2083)', // 2083 is the maximum length of a URL in Internet Explorer.
|
|
|
|
'HTTPCode' =>'Int'
|
|
|
|
);
|
2014-07-24 04:50:14 +02:00
|
|
|
|
2017-11-23 00:56:44 +01:00
|
|
|
private static $has_one = array(
|
|
|
|
'Track' => BrokenExternalPageTrack::class,
|
|
|
|
'Status' => BrokenExternalPageTrackStatus::class
|
|
|
|
);
|
2014-07-24 04:50:14 +02:00
|
|
|
|
2017-11-23 00:56:44 +01:00
|
|
|
private static $summary_fields = array(
|
|
|
|
'Created' => 'Checked',
|
|
|
|
'Link' => 'External Link',
|
|
|
|
'HTTPCodeDescription' => 'HTTP Error Code',
|
|
|
|
'Page.Title' => 'Page link is on'
|
|
|
|
);
|
2014-07-24 04:50:14 +02:00
|
|
|
|
2017-11-23 00:56:44 +01:00
|
|
|
private static $searchable_fields = array(
|
|
|
|
'HTTPCode' => array('title' => 'HTTP Code')
|
|
|
|
);
|
2014-07-24 04:50:14 +02:00
|
|
|
|
2017-11-23 00:56:44 +01:00
|
|
|
/**
|
|
|
|
* @return SiteTree
|
|
|
|
*/
|
|
|
|
public function Page()
|
|
|
|
{
|
|
|
|
return $this->Track()->Page();
|
|
|
|
}
|
2014-08-13 04:27:40 +02:00
|
|
|
|
2017-11-23 00:56:44 +01:00
|
|
|
public function canEdit($member = false)
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
2014-07-24 04:50:14 +02:00
|
|
|
|
2017-11-23 00:56:44 +01:00
|
|
|
public function canView($member = false)
|
|
|
|
{
|
2017-11-27 21:45:40 +01:00
|
|
|
$member = $member ? $member : Security::getCurrentUser();
|
2022-04-27 23:50:48 +02:00
|
|
|
$codes = ['CMS_ACCESS_CMSMain'];
|
2017-11-23 00:56:44 +01:00
|
|
|
return Permission::checkMember($member, $codes);
|
|
|
|
}
|
2014-08-13 00:20:39 +02:00
|
|
|
|
2017-11-23 00:56:44 +01:00
|
|
|
/**
|
|
|
|
* Retrieve a human readable description of a response code
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public function getHTTPCodeDescription()
|
|
|
|
{
|
|
|
|
$code = $this->HTTPCode;
|
2017-11-27 03:14:16 +01:00
|
|
|
|
|
|
|
try {
|
|
|
|
$response = HTTPResponse::create('', $code);
|
2017-11-23 00:56:44 +01:00
|
|
|
// Assume that $code = 0 means there was no response
|
2017-11-27 03:14:16 +01:00
|
|
|
$description = $code ?
|
|
|
|
$response->getStatusDescription() :
|
|
|
|
_t(__CLASS__ . '.NOTAVAILABLE', 'Server Not Available');
|
|
|
|
} catch (InvalidArgumentException $e) {
|
2017-11-26 23:19:58 +01:00
|
|
|
$description = _t(__CLASS__ . '.UNKNOWNRESPONSE', 'Unknown Response Code');
|
2017-11-23 00:56:44 +01:00
|
|
|
}
|
2017-11-27 03:14:16 +01:00
|
|
|
|
2017-11-23 00:56:44 +01:00
|
|
|
return sprintf("%d (%s)", $code, $description);
|
|
|
|
}
|
2014-07-24 04:50:14 +02:00
|
|
|
}
|