2014-07-28 01:23:33 +02:00
|
|
|
<?php
|
|
|
|
|
2017-11-22 02:26:15 +01:00
|
|
|
namespace SilverStripe\ExternalLinks\Controllers;
|
|
|
|
|
2017-11-23 00:56:44 +01:00
|
|
|
use SilverStripe\Control\HTTP;
|
2017-11-29 00:14:39 +01:00
|
|
|
use SilverStripe\Core\Convert;
|
2017-11-23 00:56:44 +01:00
|
|
|
use SilverStripe\ExternalLinks\Model\BrokenExternalPageTrackStatus;
|
|
|
|
use SilverStripe\ExternalLinks\Jobs\CheckExternalLinksJob;
|
|
|
|
use SilverStripe\ExternalLinks\Tasks\CheckExternalLinksTask;
|
|
|
|
use SilverStripe\Control\Controller;
|
2017-11-26 23:19:58 +01:00
|
|
|
use Symbiote\QueuedJobs\Services\QueuedJobService;
|
2017-11-22 02:26:15 +01:00
|
|
|
|
2017-11-23 01:19:00 +01:00
|
|
|
class CMSExternalLinksController extends Controller
|
2017-11-23 00:56:44 +01:00
|
|
|
{
|
2017-11-22 02:26:15 +01:00
|
|
|
|
2017-11-27 03:14:16 +01:00
|
|
|
private static $allowed_actions = [
|
|
|
|
'getJobStatus',
|
|
|
|
'start'
|
|
|
|
];
|
2014-07-28 01:23:33 +02:00
|
|
|
|
2017-11-26 23:19:58 +01:00
|
|
|
/**
|
2017-11-27 03:14:16 +01:00
|
|
|
* Respond to Ajax requests for info on a running job
|
|
|
|
*
|
|
|
|
* @return string JSON string detailing status of the job
|
|
|
|
*/
|
2017-11-23 00:56:44 +01:00
|
|
|
public function getJobStatus()
|
|
|
|
{
|
|
|
|
// Set headers
|
|
|
|
HTTP::set_cache_age(0);
|
|
|
|
HTTP::add_cache_headers($this->response);
|
|
|
|
$this->response
|
|
|
|
->addHeader('Content-Type', 'application/json')
|
|
|
|
->addHeader('Content-Encoding', 'UTF-8')
|
|
|
|
->addHeader('X-Content-Type-Options', 'nosniff');
|
|
|
|
|
|
|
|
// Format status
|
|
|
|
$track = BrokenExternalPageTrackStatus::get_latest();
|
|
|
|
if ($track) {
|
2017-11-29 00:14:39 +01:00
|
|
|
return Convert::array2json([
|
2017-11-27 03:14:16 +01:00
|
|
|
'TrackID' => $track->ID,
|
|
|
|
'Status' => $track->Status,
|
|
|
|
'Completed' => $track->getCompletedPages(),
|
|
|
|
'Total' => $track->getTotalPages()
|
|
|
|
]);
|
2017-11-23 00:56:44 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-11-26 23:19:58 +01:00
|
|
|
/**
|
2017-11-27 03:14:16 +01:00
|
|
|
* Starts a broken external link check
|
|
|
|
*/
|
2017-11-23 00:56:44 +01:00
|
|
|
public function start()
|
|
|
|
{
|
|
|
|
// return if the a job is already running
|
|
|
|
$status = BrokenExternalPageTrackStatus::get_latest();
|
|
|
|
if ($status && $status->Status == 'Running') {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Create a new job
|
2017-11-26 23:19:58 +01:00
|
|
|
if (class_exists(QueuedJobService::class)) {
|
2017-11-23 00:56:44 +01:00
|
|
|
// Force the creation of a new run
|
|
|
|
BrokenExternalPageTrackStatus::create_status();
|
|
|
|
$checkLinks = new CheckExternalLinksJob();
|
2017-11-26 23:19:58 +01:00
|
|
|
singleton(QueuedJobService::class)->queueJob($checkLinks);
|
2017-11-23 00:56:44 +01:00
|
|
|
} else {
|
|
|
|
//TODO this hangs as it waits for the connection to be released
|
|
|
|
// should return back and continue processing
|
|
|
|
// http://us3.php.net/manual/en/features.connection-handling.php
|
|
|
|
$task = CheckExternalLinksTask::create();
|
|
|
|
$task->runLinksCheck();
|
|
|
|
}
|
|
|
|
}
|
2014-07-28 01:23:33 +02:00
|
|
|
}
|