59 lines
1.4 KiB
PHP
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),
|
|
]);
|
|
}
|
|
}
|