Select Git revision
TracToGitlabPlugin.php
Jan-Hendrik Willms authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
TracToGitlabPlugin.php 3.56 KiB
<?php
require_once __DIR__ . '/bootstrap.php';
final class TracToGitlabPlugin extends TracToGitlab\Plugin implements SystemPlugin
{
public function __construct()
{
parent::__construct();
StudipFormat::addStudipMarkup(
'gitlab',
'\bgitlab:([$#!]\d+|[0-9a-f]+)\b',
NULL,
'TracToGitlabPlugin::markupGitlabLinks'
);
if (!User::findCurrent()) {
return;
}
$this->buildDashboardNavigation();
if (User::findCurrent()->perms === 'root') {
$this->buildAdminNavigation();
}
}
public function getPluginName()
{
return 'Tickets von trac zu GitLab migrieren';
}
public function perform($unconsumed)
{
$this->addStylesheet('assets/style.scss');
$this->addScript('assets/script.js');
parent::perform($unconsumed);
}
private function buildDashboardNavigation()
{
$navigation = new Navigation(_('Dashboard'), PluginEngine::getURL($this, [], 'dashboard'));
$navigation->setImage(Icon::create($this->getPluginURL() . '/assets/cardiogram.svg', Icon::ROLE_NAVIGATION));
$navigation->addSubnavigation(
'dashboard',
new Navigation(_('Dashboard'), PluginEngine::getURL($this, [], 'dashboard'))
);
$navigation->addSubnavigation(
'translations',
new Navigation(_('Übersetzungen'), PluginEngine::getURL($this, [], 'translations'))
);
$navigation->addSubNavigation(
'merge',
new Navigation(_('Zu portierende Bugfixes'), PluginEngine::getURL($this, [], 'merge'))
);
$navigation->addSubNavigation(
'merge-requests',
new Navigation(_('Merge Requests'), PluginEngine::getURL($this, [], 'mergerequests'))
);
$navigation->addSubNavigation(
'labels',
new Navigation(_('Verwendete Labels'), PluginEngine::getURL($this, [], 'labels'))
);
$navigation->addSubNavigation(
'cg-members',
new Navigation(_('Übersicht Zuständigkeiten'), PluginEngine::getURL($this, [], 'cgmembers'))
);
Navigation::addItem('/gitlab-dashboard', $navigation);
}
private function buildAdminNavigation(): void
{
Navigation::addItem('/admin/plugins/trac2gitlab', new Navigation(
_('GitLab-Verbindung konfigurieren'),
PluginEngine::getURL($this, [], 'admin/index')
));
}
public static function markupGitlabLinks($markup, $matches, $contents)
{
if ($matches[1][0] === '#') {
return sprintf(
'<a href="%s" target="_blank">%s</a>',
'https://gitlab.studip.de/studip/studip/issues/' . substr($matches[1], 1),
$matches[0]
);
}
if ($matches[1][0] === '!') {
return sprintf(
'<a href="%s" target="_blank">%s</a>',
'https://gitlab.studip.de/studip/studip/merge_requests/' . substr($matches[1], 1),
$matches[0]
);
}
if ($matches[1][0] === '$') {
return sprintf(
'<a href="%s" target="_blank">%s</a>',
'https://gitlab.studip.de/studip/studip/snippets/' . substr($matches[1], 1),
$matches[0]
);
}
return sprintf(
'<a href="%s" target="_blank">%s</a>',
'https://gitlab.studip.de/studip/studip/commit/' . $matches[1],
substr($matches[0], 0, 15)
);
}}