Skip to content
Snippets Groups Projects
Select Git revision
  • a3da1483a9e689846179159355badfec8073dbec
  • main default protected
  • step-3263
  • feature/plugins-cli
  • feature/vite
  • step-2484-peerreview
  • biest/issue-5051
  • tests/simplify-jsonapi-tests
  • fix/typo-in-1a70031
  • feature/broadcasting
  • database-seeders-and-factories
  • feature/peer-review-2
  • feature-feedback-jsonapi
  • feature/peerreview
  • feature/balloon-plus
  • feature/stock-images-unsplash
  • tic-2588
  • 5.0
  • 5.2
  • biest/unlock-blocks
  • biest-1514
21 results

CoursewareInstancesUpdate.php

Blame
  • Forked from Stud.IP / Stud.IP
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    mergerequests.php 2.35 KiB
    <?php
    final class MergerequestsController extends TracToGitlab\GitlabController
    {
        public function before_filter(&$action, &$args)
        {
            parent::before_filter($action, $args);
    
            PageLayout::setTitle(_('Merge Requests'));
            $this->activateNavigation('merge-requests');
        }
    
        public function index_action()
        {
            $this->mrs = $this->cached('mergerequests', fn() => $this->fetchMergeRequests());
    
            Sidebar::get()->addWidget(new TemplateWidget(
                _('Aus dem Cache'),
                $this->get_template_factory()->open('sidebar'),
                ['time' => $this->getCachedDate('mergerequests')]
            ));
        }
    
        private function fetchMergeRequests(): array
        {
            $mrs = $this->fetchAll(
                $this->gitlab->mergeRequests(),
                'all',
                [
                    $this->gitlab_project_id,
                    [
                        'sort'  => 'asc',
                        'scope' => 'all',
                        'state' => 'opened',
                    ]
                ]
            );
    
            $mrs = array_filter($mrs, function ($mr) {
                if ($mr['draft'] || $mr['work_in_progress'] || $mr['merge_when_pipeline_succeeds']) {
                    return false;
                }
    
                return true;
            });
    
            $mrs = array_map(function ($mr) {
                $mr['approvals'] = $this->gitlab->mergeRequests()->approvals(
                    $this->gitlab_project_id,
                    $mr['iid']
                );
                return $mr;
            }, $mrs);
    
            usort($mrs, function ($a, $b) {
                return strcmp($b['updated_at'], $a['updated_at']);
            });
    
            return $mrs;
        }
    
        private function fetchRelatedMergeRequest(int $issue_id)
        {
            $mrs = $this->gitlab->issues()->closedByMergeRequests(
                $this->gitlab_project_id,
                $issue_id
            );
            foreach ($mrs as $mr) {
                if ($mr['state'] === 'merged') {
                    return $mr['iid'];
                }
            }
            return null;
        }
    
        private function extractVersion(array $labels): string
        {
            $version = '';
            foreach ($labels as $label) {
                if (strpos($label, 'Version::') === 0) {
                    $v = substr($label, 9);
                    if (!$version || $v < $version) {
                        $version = $v;
                    }
                }
            }
            return $version;
        }
    }