Skip to content
Snippets Groups Projects
Select Git revision
  • 3adc27967cfb1d2f55a6bc9efff2bb4169f97ea5
  • main default protected
  • issue-56
  • testing-systems
4 results

TracToGitlabPlugin.php

Blame
  • user avatar
    Jan-Hendrik Willms authored
    3adc2796
    History
    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)
            );
        }}