ldc-supportweb/app/Traits/Controllers/HasGitlabIssue.php
2026-02-11 13:34:43 +01:00

59 lines
1.4 KiB
PHP

<?php
namespace App\Traits\Controllers;
use App\Models\GitlabIssues;
use GrahamCampbell\GitLab\Facades\GitLab;
trait HasGitlabIssue
{
/**
* Retrieves a GitLab issue id from its URL.
*
* @param int $projectId
* @param string $issueUrl
*
* @return array
*/
public function getGitlabIssue(int $projectId, string $issueUrl): array
{
if (!preg_match('/\/issues\/(\d+)/', $issueUrl, $matches)) { return []; }
$gitlabIssue = GitLab::issues()->show($projectId, (int) $matches[1]);
return $gitlabIssue;
}
/**
* Update labels for a GitLab issue.
*
* @param int|string $projectId
* @param int $issueId
* @param array $labels
*
* @return array
*/
public function updateGitlabIssueLabels($projectId, int $issueId, array $labels): array
{
return GitLab::issues()->update($projectId, $issueId, [
'labels' => implode(',', $labels),
]);
}
/**
* Close a GitLab issue.
*
* @param int|string $projectId
* @param int $issueId
* @param array $labels
*
* @return array
*/
public function closeGitlabIssue($projectId, int $issueId, array $labels): array
{
return GitLab::issues()->update($projectId, $issueId, [
'state_event' => 'close',
'labels' => implode(',', $labels),
]);
}
}