Compare commits

...

12 Commits
2.4.0-rc1 ... 2

Author SHA1 Message Date
github-actions 2ee2bfbc8a Merge branch '2.4' into 2 2024-02-11 14:04:18 +00:00
Guy Sartorelli b12e6868bc
TLN Update translations (#120) 2024-02-07 16:05:28 +13:00
Steve Boyd e12e2aaece Merge branch '2.4' into 2 2023-11-13 17:24:09 +13:00
Sabina Talipova 8797f1f41e
ENH Restrict access to getJobStatus execution (#113) 2023-11-09 10:06:58 +13:00
github-actions a01c16b829 Merge branch '2.4' into 2 2023-08-27 14:03:52 +00:00
Guy Sartorelli 20c2231bff
ENH Update translations (#106) 2023-08-21 12:24:21 +12:00
Steve Boyd bea1716d94 Merge branch '2.4' into 2 2023-06-16 12:01:45 +12:00
Guy Sartorelli 062319682e
Merge pull request #102 from creative-commoners/pulls/2.4/tx-1686724684
ENH Update translations
2023-06-15 10:06:36 +12:00
Steve Boyd 2560888df0 ENH Update translations 2023-06-14 18:38:04 +12:00
Steve Boyd ae9dbddfb0 Merge branch '2.4' into 2 2023-03-29 09:58:29 +13:00
Maxime Rainville 418d69813f
Merge pull request #95 from creative-commoners/pulls/2/dispatch-ci
MNT Use gha-dispatch-ci
2023-03-23 14:10:53 +13:00
Steve Boyd 8b27314490 MNT Use gha-dispatch-ci 2023-03-21 12:25:06 +13:00
11 changed files with 138 additions and 25 deletions

View File

@ -4,13 +4,8 @@ on:
push:
pull_request:
workflow_dispatch:
# Every Wednesday at 2:00pm UTC
schedule:
- cron: '0 14 * * 3'
jobs:
ci:
name: CI
# Only run cron on the silverstripe account
if: (github.event_name == 'schedule' && github.repository_owner == 'silverstripe') || (github.event_name != 'schedule')
uses: silverstripe/gha-ci/.github/workflows/ci.yml@v1

16
.github/workflows/dispatch-ci.yml vendored Normal file
View File

@ -0,0 +1,16 @@
name: Dispatch CI
on:
# At 2:00 PM UTC, only on Wednesday and Thursday
schedule:
- cron: '0 14 * * 3,4'
jobs:
dispatch-ci:
name: Dispatch CI
# Only run cron on the silverstripe account
if: (github.event_name == 'schedule' && github.repository_owner == 'silverstripe') || (github.event_name != 'schedule')
runs-on: ubuntu-latest
steps:
- name: Dispatch CI
uses: silverstripe/gha-dispatch-ci@v1

View File

@ -17,6 +17,7 @@
},
start: function() {
var self = this;
// initiate a new job
$('.external-links-report__report-progress')
.empty()
@ -25,10 +26,14 @@
$.ajax({
url: "admin/externallinks/start",
async: true,
timeout: 3000
timeout: 3000,
success: function() {
self.poll();
},
error: function() {
self.buttonReset();
}
});
this.poll();
},
/**
@ -125,10 +130,7 @@
$('.external-links-report__create-report').poll();
}, 1000));
},
error: function(e) {
if (typeof console !== 'undefined') {
console.log(e);
}
error: function() {
self.buttonReset();
}
});

View File

@ -9,18 +9,30 @@ en:
other: '{count} Broken External Links'
SINGULARNAME: 'Broken External Link'
UNKNOWNRESPONSE: 'Unknown Response Code'
db_HTTPCode: 'HTTP code'
db_Link: Link
has_one_Status: Status
has_one_Track: Track
SilverStripe\ExternalLinks\Model\BrokenExternalPageTrack:
PLURALNAME: 'Broken External Page Tracks'
PLURALS:
one: 'A Broken External Page Track'
other: '{count} Broken External Page Tracks'
SINGULARNAME: 'Broken External Page Track'
db_Processed: Processed
has_many_BrokenLinks: 'Broken links'
has_one_Page: Page
has_one_Status: Status
SilverStripe\ExternalLinks\Model\BrokenExternalPageTrackStatus:
PLURALNAME: 'Broken External Page Track Statuses'
PLURALS:
one: 'A Broken External Page Track Status'
other: '{count} Broken External Page Track Statuses'
SINGULARNAME: 'Broken External Page Track Status'
db_JobInfo: 'Job info'
db_Status: Status
has_many_BrokenLinks: 'Broken links'
has_many_TrackedPages: 'Tracked pages'
SilverStripe\ExternalLinks\Reports\BrokenExternalLinksReport:
EXTERNALBROKENLINKS: 'External broken links report'
RUNREPORT: 'Create new report'

View File

@ -9,18 +9,30 @@ eo:
other: '{count} rompitaj eksteraj ligiloj'
SINGULARNAME: 'Rompita ekstera ligilo'
UNKNOWNRESPONSE: 'Nekonata respondokodo'
db_HTTPCode: HTTP-kodo
db_Link: Ligilo
has_one_Status: Stato
has_one_Track: Spuri
SilverStripe\ExternalLinks\Model\BrokenExternalPageTrack:
PLURALNAME: 'Rompitaj eksteraj paĝaj trakoj'
PLURALS:
one: 'Unu rompita ekstera paĝa trako'
other: '{count} rompitaj eksteraj paĝaj trakoj'
SINGULARNAME: 'Rompita ekstera paĝa trako'
db_Processed: Traktita
has_many_BrokenLinks: 'Rompitaj ligiloj'
has_one_Page: Paĝo
has_one_Status: Stato
SilverStripe\ExternalLinks\Model\BrokenExternalPageTrackStatus:
PLURALNAME: 'Stato de rompitaj eksteraj paĝaj trakoj'
PLURALS:
one: 'Unu stato de rompita ekstera paĝa trako'
other: '{count} statoj de rompitaj eksteraj paĝaj trakoj'
SINGULARNAME: 'Stato de rompita ekstera paĝa trako'
db_JobInfo: 'Taska informo'
db_Status: Stato
has_many_BrokenLinks: 'Rompitaj ligiloj'
has_many_TrackedPages: 'Spuritaj paĝoj'
SilverStripe\ExternalLinks\Reports\BrokenExternalLinksReport:
EXTERNALBROKENLINKS: 'Raporto pri eksteraj rompitaj ligiloj'
RUNREPORT: 'Krei novan raporton'

View File

@ -5,24 +5,24 @@ it:
NOTAVAILABLE: 'Server Non Disponibile'
PLURALNAME: 'Link Esterni Orfani'
PLURALS:
many: '{count} Link Esterni Orfani'
one: 'Un Link Esterno Orfano'
other: '{count} Link Esterni Orfani'
many: '{count} Link Esterni Orfani'
SINGULARNAME: 'Link Esterno Orfano'
UNKNOWNRESPONSE: 'Codice di Risposta Sconosciuto'
SilverStripe\ExternalLinks\Model\BrokenExternalPageTrack:
PLURALNAME: 'Tracce Pagine Esterne Orfane'
PLURALS:
many: '{count} Tracce Pagine Esterne Orfane'
one: 'Una Traccia Pagina Esterna Orfana'
other: '{count} Tracce Pagine Esterne Orfane'
many: '{count} Tracce Pagine Esterne Orfane'
SINGULARNAME: 'Traccia Pagina Esterna Orfana'
SilverStripe\ExternalLinks\Model\BrokenExternalPageTrackStatus:
PLURALNAME: 'Stati Tracce Pagine Esterne Orfane'
PLURALS:
many: '{count} Stati Tracce Pagine Esterne Orfane'
one: 'Uno Stato Traccia Pagina Esterna Orfana'
other: '{count} Stati Tracce Pagine Esterne Orfane'
many: '{count} Stati Tracce Pagine Esterne Orfane'
SINGULARNAME: 'Stato Traccia Pagina Esterna Orfana'
SilverStripe\ExternalLinks\Reports\BrokenExternalLinksReport:
EXTERNALBROKENLINKS: 'Report link esterni orfani'

View File

@ -1,4 +1,6 @@
pl:
SilverStripe\ExternalLinks\Jobs\CheckExternalLinksJob:
TITLE: 'Wyszukiwanie uszkodzonych linków zewnętrznych'
SilverStripe\ExternalLinks\Model\BrokenExternalLink:
NOTAVAILABLE: 'Serwer niedostępny'
PLURALNAME: 'Uszkodzone linki zewnętrzne'
@ -10,8 +12,6 @@ pl:
SilverStripe\ExternalLinks\Model\BrokenExternalPageTrackStatus:
PLURALNAME: 'Statusy wykrywania wadliwych stron zewnętrznych'
SINGULARNAME: 'Status wykrywania wadliwych stron zewnętrznych'
SilverStripe\ExternalLinks\Jobs\CheckExternalLinksJob:
TITLE: 'Wyszukiwanie uszkodzonych linków zewnętrznych'
SilverStripe\ExternalLinks\Reports\BrokenExternalLinksReport:
EXTERNALBROKENLINKS: 'Raport uszkodzonych linków zewnętrznych'
RUNREPORT: 'Stwórz nowy raport'

44
lang/sk.yml Normal file
View File

@ -0,0 +1,44 @@
sk:
SilverStripe\ExternalLinks\Jobs\CheckExternalLinksJob:
TITLE: 'Kontrola externých nefunkčných odkazov'
SilverStripe\ExternalLinks\Model\BrokenExternalLink:
NOTAVAILABLE: 'Server nedostupný'
PLURALNAME: 'Nefunkčné externé odkazy'
PLURALS:
few: '{count} nefunkčné externé odkazy'
many: '{count} nefunkčných externých odkazov'
one: 'Nefunkčný externý odkaz'
other: '{count} nefunkčných externých odkazov'
SINGULARNAME: 'Nefunkčný externý odkaz'
UNKNOWNRESPONSE: 'Neznámy kód odpovede'
db_HTTPCode: 'HTTP kód'
db_Link: Odkaz
has_one_Status: Stav
has_one_Track: Stopa
SilverStripe\ExternalLinks\Model\BrokenExternalPageTrack:
PLURALNAME: 'Nefunkčné externé stopy stránok'
PLURALS:
few: '{count} nefunkčné externé stopy stránky'
many: '{count} nefunkčných externých stôp stránky'
one: 'Nefunkčná externá stopa stránky'
other: '{count} nefunkčných externých stôp stránky'
SINGULARNAME: 'Nefunkčná externá stopa stránky'
db_Processed: Spracované
has_many_BrokenLinks: 'Nefunkčné odkazy'
has_one_Page: Stránka
has_one_Status: Stav
SilverStripe\ExternalLinks\Model\BrokenExternalPageTrackStatus:
PLURALNAME: 'Stavy nefunkčných externých stôp stránky'
PLURALS:
few: '{count} stavy nefunkčných externých stôp stránky'
many: '{count} stavov nefunkčných externých stôp stránky'
one: 'Stav nefunkčnej externej stopy stránky'
other: '{count} stavov nefunkčných externých stôp stránky'
SINGULARNAME: 'Stav nefunkčnej externej stopy stránky'
db_JobInfo: 'Informácie o úlohe'
db_Status: Stav
has_many_BrokenLinks: 'Nefunkčné odkazy'
has_many_TrackedPages: 'Sledované stránky'
SilverStripe\ExternalLinks\Reports\BrokenExternalLinksReport:
EXTERNALBROKENLINKS: 'Správa o externých nefunkčných odkazoch'
RUNREPORT: 'Vytvoriť novú správu'

View File

@ -5,27 +5,27 @@ sl:
NOTAVAILABLE: 'Strežnik ni na voljo'
PLURALNAME: 'Nedostopne zunanje povezave'
PLURALS:
one: 'Nedostopna zunanja povezava'
two: '{count} nedostopni zunanji povezavi'
few: '{count} nedostopnih zunanjih povezav'
one: 'Nedostopna zunanja povezava'
other: '{count} nedostopnih zunanjih povezav'
two: '{count} nedostopni zunanji povezavi'
SINGULARNAME: 'Nedostopna zunanja povezava'
UNKNOWNRESPONSE: 'Neznana šifra odziva'
SilverStripe\ExternalLinks\Model\BrokenExternalPageTrack:
PLURALNAME: 'Preverjanja nedostopnih zunanjih povezav'
PLURALS:
one: 'Preverjanje nedostopnih zunanjih povezav'
two: '{count} preverjanji nedostopnih zunanjih povezav'
few: '{count} preverjanj nedostopnih zunanjih povezav'
one: 'Preverjanje nedostopnih zunanjih povezav'
other: '{count} preverjanj nedostopnih zunanjih povezav'
two: '{count} preverjanji nedostopnih zunanjih povezav'
SINGULARNAME: 'Preverjanje nedostopnih zunanjih povezav'
SilverStripe\ExternalLinks\Model\BrokenExternalPageTrackStatus:
PLURALNAME: 'Status preverjanj'
PLURALS:
one: 'Status preverjanja'
two: '{count} statusa preverjanj'
few: '{count} statusov preverjanj'
one: 'Status preverjanja'
other: '{count} statusov preverjanj'
two: '{count} statusa preverjanj'
SINGULARNAME: 'Status preverjanja'
SilverStripe\ExternalLinks\Reports\BrokenExternalLinksReport:
EXTERNALBROKENLINKS: 'Poročilo o nedostopnih zunanjih povezavah'

View File

@ -8,6 +8,7 @@ use SilverStripe\ExternalLinks\Tasks\CheckExternalLinksTask;
use SilverStripe\Control\Controller;
use Symbiote\QueuedJobs\Services\QueuedJobService;
use SilverStripe\Control\Middleware\HTTPCacheControlMiddleware;
use SilverStripe\Security\Permission;
class CMSExternalLinksController extends Controller
{
@ -24,6 +25,9 @@ class CMSExternalLinksController extends Controller
*/
public function getJobStatus()
{
if (!Permission::check('CMS_ACCESS_CMSMain')) {
return $this->httpError(403, 'You do not have permission to access this resource');
}
// Set headers
HTTPCacheControlMiddleware::singleton()->setMaxAge(0);
$this->response
@ -49,6 +53,9 @@ class CMSExternalLinksController extends Controller
*/
public function start()
{
if (!Permission::check('CMS_ACCESS_CMSMain')) {
return $this->httpError(403, 'You do not have permission to access this resource');
}
// return if the a job is already running
$status = BrokenExternalPageTrackStatus::get_latest();
if ($status && $status->Status == 'Running') {

View File

@ -3,7 +3,7 @@
namespace SilverStripe\ExternalLinks\Tests;
use SilverStripe\Core\Injector\Injector;
use SilverStripe\Dev\SapphireTest;
use SilverStripe\Dev\FunctionalTest;
use SilverStripe\ExternalLinks\Model\BrokenExternalPageTrackStatus;
use SilverStripe\ExternalLinks\Reports\BrokenExternalLinksReport;
use SilverStripe\ExternalLinks\Tasks\CheckExternalLinksTask;
@ -13,7 +13,7 @@ use SilverStripe\ExternalLinks\Tests\Stubs\PretendLinkChecker;
use SilverStripe\i18n\i18n;
use SilverStripe\Reports\Report;
class ExternalLinksTest extends SapphireTest
class ExternalLinksTest extends FunctionalTest
{
protected static $fixture_file = 'ExternalLinksTest.yml';
@ -125,4 +125,29 @@ class ExternalLinksTest extends SapphireTest
// Ensure report does not list the link associated with an archived page
$this->assertEquals(3, BrokenExternalLinksReport::create()->sourceRecords()->count());
}
public function provideGetJobStatus(): array
{
return [
'ADMIN - valid permission' => ['ADMIN', 200],
'CMS_ACCESS_CMSMain - valid permission' => ['CMS_ACCESS_CMSMain', 200],
'VIEW_SITE - not enough permission' => ['VIEW_SITE', 403],
];
}
/**
* @dataProvider provideGetJobStatus
*/
public function testGetJobStatus(
string $permission,
int $expectedResponseCode
): void {
$this->logInWithPermission($permission);
$response = $this->get('admin/externallinks/start', null, ['Accept' => 'application/json']);
$this->assertEquals($expectedResponseCode, $response->getStatusCode());
$response = $this->get('admin/externallinks/getJobStatus', null, ['Accept' => 'application/json']);
$this->assertEquals($expectedResponseCode, $response->getStatusCode());
}
}