diff --git a/public/assets/js/app.js b/public/assets/js/app.js index 03fe6799..04293ff3 100644 --- a/public/assets/js/app.js +++ b/public/assets/js/app.js @@ -482,91 +482,6 @@ var PHPCensorConfirmDialog = Class.extend({ } }); -/** - * Used to initialise the project form: - */ -function setupProjectForm() { - $('.github-container').hide(); - - $('#element-reference').change(function () { - var el = $(this); - var val = el.val(); - var type = $('#element-type').val(); - var acceptable = { - 'github': { - 'ssh': /git\@github\.com\:([a-zA-Z0-9_\-]+\/[a-zA-Z0-9_\-]+)\.git/, - 'git': /git\:\/\/github.com\/([a-zA-Z0-9_\-]+\/[a-zA-Z0-9_\-]+)\.git/, - 'http': /https\:\/\/github\.com\/([a-zA-Z0-9_\-]+\/[a-zA-Z0-9_\-]+)(\.git)?/ - }, - 'bitbucket': { - 'ssh': /git\@bitbucket\.org\:([a-zA-Z0-9_\-]+\/[a-zA-Z0-9_\-]+)\.git/, - 'http': /https\:\/\/[a-zA-Z0-9_\-]+\@bitbucket.org\/([a-zA-Z0-9_\-]+\/[a-zA-Z0-9_\-]+)\.git/, - 'anon': /https\:\/\/bitbucket.org\/([a-zA-Z0-9_\-]+\/[a-zA-Z0-9_\-]+)(\.git)?/ - } - - }; - - if (acceptable[type] !== undefined) { - for (var i in acceptable[type]) { - if (val.match(acceptable[type][i])) { - el.val(val.replace(acceptable[type][i], '$1')); - } - } - } - }); - - $('#element-type').change(function () { - if ($(this).val() == 'github') { - $('#loading').show(); - - $.ajax({ - dataType: "json", - url: window.APP_URL + 'project/ajax-github-repositories', - success: function (data) { - $('#loading').hide(); - - if (data && data.repos) { - $('#element-github').empty(); - - for (var i in data.repos) { - var name = data.repos[i]; - $('#element-github').append($('').text(name).val(name)); - } - - $('.github-container').slideDown(); - } - }, - error: handleFailedAjax - }); - } else { - $('.github-container').slideUp(); - } - $('#element-reference').trigger('change'); - }); - - $('#element-github').change(function () { - var val = $('#element-github').val(); - - if (val != 'choose') { - $('#element-type').val('github'); - $('#element-reference').val(val); - - $('label[for=element-reference]').hide(); - $('label[for=element-type]').hide(); - $('#element-reference').hide(); - $('#element-token').val(window.github_token); - $('#element-title').val(val); - } else { - $('label[for=element-reference]').show(); - $('label[for=element-type]').show(); - $('#element-reference').show(); - $('#element-type').show(); - $('#element-reference').val(''); - $('#element-token').val(''); - } - }); -} - var Lang = { get: function () { var args = Array.prototype.slice.call(arguments); diff --git a/src/Controller/ProjectController.php b/src/Controller/ProjectController.php index 3d9a7d9b..3077658f 100644 --- a/src/Controller/ProjectController.php +++ b/src/Controller/ProjectController.php @@ -7,7 +7,6 @@ use PHPCensor\Form; use JasonGrimes\Paginator; use PHPCensor; use PHPCensor\BuildFactory; -use PHPCensor\Helper\Github; use PHPCensor\Helper\Lang; use PHPCensor\Helper\SshKey; use PHPCensor\Service\BuildService; @@ -375,7 +374,7 @@ class ProjectController extends WebController $values['pubkey'] = $values['ssh_public_key']; $values['environments'] = $project->getEnvironments(); - if ($values['type'] == 'gitlab') { + if (Project::TYPE_GITLAB === $values['type']) { $accessInfo = $project->getAccessInformation(); $reference = $accessInfo["user"] . '@' . $accessInfo["domain"] . ':' . $accessInfo["port"] . '/' . ltrim($project->getReference(), '/') . ".git"; $values['reference'] = $reference; @@ -453,14 +452,6 @@ class ProjectController extends WebController $field->setClass('form-control')->setContainerClass('form-group'); $form->addField($field); - $container = new Form\ControlGroup('github-container'); - $container->setClass('github-container'); - - $field = Form\Element\Select::create('github', Lang::get('choose_github'), false); - $field->setClass('form-control')->setContainerClass('form-group'); - $container->addField($field); - $form->addField($container); - $field = Form\Element\Text::create('reference', Lang::get('repo_name'), true); $field->setValidator($this->getReferenceValidator($values)); $field->setClass('form-control')->setContainerClass('form-group'); @@ -547,27 +538,27 @@ class ProjectController extends WebController $type = $values['type']; $validators = [ - 'hg' => [ + Project::TYPE_HG => [ 'regex' => '/^(ssh|https?):\/\//', 'message' => Lang::get('error_hg') ], - 'git' => [ + Project::TYPE_GIT => [ 'regex' => '/^(git|https?):\/\//', 'message' => Lang::get('error_git') ], - 'gitlab' => [ - 'regex' => '`^(.*)@(.*):(.*)/(.*)\.git`', + Project::TYPE_GITLAB => [ + 'regex' => '/^(git|https?):\/\//', 'message' => Lang::get('error_gitlab') ], - 'github' => [ - 'regex' => '/^[a-zA-Z0-9_\-]+\/[a-zA-Z0-9_\-\.]+$/', + Project::TYPE_GITHUB => [ + 'regex' => '/^(git|https?):\/\//', 'message' => Lang::get('error_github') ], - 'bitbucket' => [ + Project::TYPE_BITBUCKET => [ 'regex' => '/^[a-zA-Z0-9_\-]+\/[a-zA-Z0-9_\-\.]+$/', 'message' => Lang::get('error_bitbucket') ], - 'bitbucket-hg' => [ + Project::TYPE_BITBUCKET_HG => [ 'regex' => '/^[a-zA-Z0-9_\-]+\/[a-zA-Z0-9_\-\.]+$/', 'message' => Lang::get('error_bitbucket') ], @@ -582,17 +573,4 @@ class ProjectController extends WebController return true; }; } - - /** - * Get an array of repositories from Github's API. - */ - public function ajaxGithubRepositories() - { - $github = new Github(); - - $response = new PHPCensor\Http\Response\JsonResponse(); - $response->setContent($github->getRepositories()); - - return $response; - } } diff --git a/src/Model/Build/GithubBuild.php b/src/Model/Build/GithubBuild.php index 778d11d9..0041845b 100644 --- a/src/Model/Build/GithubBuild.php +++ b/src/Model/Build/GithubBuild.php @@ -17,6 +17,19 @@ use PHPCensor\Model\BuildError; */ class GithubBuild extends GitBuild { + /** + * @return string + */ + protected function getDomain() + { + $domain = $this->getProject()->getAccessInformation('domain'); + if (!$domain) { + $domain = 'github.com'; + } + + return $domain; + } + /** * Get link to commit from another source (i.e. Github) * @@ -24,7 +37,7 @@ class GithubBuild extends GitBuild */ public function getCommitLink() { - return 'https://github.com/' . $this->getProject()->getReference() . '/commit/' . $this->getCommitId(); + return '//' . $this->getDomain() . '/' . $this->getProject()->getReference() . '/commit/' . $this->getCommitId(); } /** @@ -34,7 +47,7 @@ class GithubBuild extends GitBuild */ public function getBranchLink() { - return 'https://github.com/' . $this->getProject()->getReference() . '/tree/' . $this->getBranch(); + return '//' . $this->getDomain() . '/' . $this->getProject()->getReference() . '/tree/' . $this->getBranch(); } /** @@ -45,7 +58,7 @@ class GithubBuild extends GitBuild $remoteBranch = $this->getExtra('remote_branch'); $remoteReference = $this->getExtra('remote_reference'); - return 'https://github.com/' . $remoteReference . '/tree/' . $remoteBranch; + return '//' . $this->getDomain() . '/' . $remoteReference . '/tree/' . $remoteBranch; } /** @@ -55,7 +68,7 @@ class GithubBuild extends GitBuild */ public function getTagLink() { - return 'https://github.com/' . $this->getProject()->getReference() . '/tree/' . $this->getTag(); + return '//' . $this->getDomain() . '/' . $this->getProject()->getReference() . '/tree/' . $this->getTag(); } /** @@ -112,7 +125,7 @@ class GithubBuild extends GitBuild $url = '/repos/' . $project->getReference() . '/statuses/' . $this->getCommitId(); $client = new Client([ - 'base_uri' => 'https://api.github.com', + 'base_uri' => 'https://api.' . $this->getDomain(), 'http_errors' => false, ]); $response = $client->post($url, [ @@ -143,9 +156,15 @@ class GithubBuild extends GitBuild $key = trim($this->getProject()->getSshPrivateKey()); if (!empty($key)) { - return 'git@github.com:' . $this->getProject()->getReference() . '.git'; + $port = $this->getProject()->getAccessInformation('port'); + $url = 'git@' . $this->getDomain() . ':'; + if (!empty($port)) { + $url .= $port . '/'; + } + + return $url . $this->getProject()->getReference() . '.git'; } else { - return 'https://github.com/' . $this->getProject()->getReference() . '.git'; + return 'https://' . $this->getDomain() . '/' . $this->getProject()->getReference() . '.git'; } } @@ -156,18 +175,21 @@ class GithubBuild extends GitBuild */ public function getCommitMessage() { - $rtn = parent::getCommitMessage(); - + $message = parent::getCommitMessage(); $project = $this->getProject(); if (!is_null($project)) { $reference = $project->getReference(); - $commitLink = '#$1'; - $rtn = preg_replace('/\#([0-9]+)/', $commitLink, $rtn); - $rtn = preg_replace('/\@([a-zA-Z0-9_]+)/', '@$1', $rtn); + $commitLink = '#$1'; + $message = preg_replace('/\#([0-9]+)/', $commitLink, $message); + $message = preg_replace( + '/\@([a-zA-Z0-9_]+)/', + '@$1', + $message + ); } - return $rtn; + return $message; } /** @@ -178,12 +200,11 @@ class GithubBuild extends GitBuild public function getFileLinkTemplate() { $reference = $this->getProject()->getReference(); - if (Build::SOURCE_WEBHOOK_PULL_REQUEST === $this->getSource()) { $reference = $this->getExtra('remote_reference'); } - $link = 'https://github.com/' . $reference . '/'; + $link = '//' . $this->getDomain() . '/' . $reference . '/'; $link .= 'blob/' . $this->getCommitId() . '/'; $link .= '{FILE}'; $link .= '#L{LINE}-L{LINE_END}'; diff --git a/src/Model/Build/GitlabBuild.php b/src/Model/Build/GitlabBuild.php index 56252e75..f147102e 100644 --- a/src/Model/Build/GitlabBuild.php +++ b/src/Model/Build/GitlabBuild.php @@ -16,7 +16,7 @@ class GitlabBuild extends GitBuild public function getCommitLink() { $domain = $this->getProject()->getAccessInformation("domain"); - return 'http://' . $domain . '/' . $this->getProject()->getReference() . '/commit/' . $this->getCommitId(); + return '//' . $domain . '/' . $this->getProject()->getReference() . '/commit/' . $this->getCommitId(); } /** @@ -25,7 +25,7 @@ class GitlabBuild extends GitBuild public function getBranchLink() { $domain = $this->getProject()->getAccessInformation("domain"); - return 'http://' . $domain . '/' . $this->getProject()->getReference() . '/tree/' . $this->getBranch(); + return '//' . $domain . '/' . $this->getProject()->getReference() . '/tree/' . $this->getBranch(); } /** @@ -34,7 +34,7 @@ class GitlabBuild extends GitBuild public function getFileLinkTemplate() { return sprintf( - 'http://%s/%s/blob/%s/{FILE}#L{LINE}', + '//%s/%s/blob/%s/{FILE}#L{LINE}', $this->getProject()->getAccessInformation("domain"), $this->getProject()->getReference(), $this->getCommitId() diff --git a/src/Model/Project.php b/src/Model/Project.php index e81d29fa..f2cf2477 100644 --- a/src/Model/Project.php +++ b/src/Model/Project.php @@ -102,18 +102,20 @@ class Project extends BaseProject public function getIcon() { switch ($this->getType()) { - case 'github': + case Project::TYPE_GITHUB: $icon = 'github'; break; - case 'bitbucket': - case 'bitbucket-hg': + case Project::TYPE_BITBUCKET: + case Project::TYPE_BITBUCKET_HG: $icon = 'bitbucket'; break; - case 'git': - case 'gitlab': - case 'gogs': + case Project::TYPE_GIT: + case Project::TYPE_GITLAB: + case Project::TYPE_GOGS: + case Project::TYPE_HG: + case Project::TYPE_SVN: default: $icon = 'code-fork'; break; diff --git a/src/Service/ProjectService.php b/src/Service/ProjectService.php index 29cee64a..37274d11 100644 --- a/src/Service/ProjectService.php +++ b/src/Service/ProjectService.php @@ -99,8 +99,7 @@ class ProjectService $project->setGroupId($options['group']); } - // Allow certain project types to set access information: - $this->processAccessInformation($project); + $project = $this->processAccessInformation($project); // Save and return the project: /** @var Project $project */ @@ -138,27 +137,32 @@ class ProjectService /** * In circumstances where it is necessary, populate access information based on other project properties. * - * @see ProjectService::createProject() - * * @param Project $project + * + * @return Project */ - protected function processAccessInformation(Project &$project) + protected function processAccessInformation(Project $project) { $matches = []; $reference = $project->getReference(); - if ($project->getType() == 'gitlab') { + if (in_array($project->getType(), [ + Project::TYPE_GITHUB, + Project::TYPE_GITLAB + ], true)) { $info = []; if (preg_match('`^(.+)@(.+):([0-9]*)\/?(.+)\.git`', $reference, $matches)) { - $info['user'] = $matches[1]; + $info['user'] = $matches[1]; $info['domain'] = $matches[2]; - $info['port'] = $matches[3]; + $info['port'] = $matches[3]; $project->setReference($matches[4]); } $project->setAccessInformation($info); } + + return $project; } } diff --git a/src/View/Project/view.phtml b/src/View/Project/view.phtml index dd7b4f34..e82d3bb1 100644 --- a/src/View/Project/view.phtml +++ b/src/View/Project/view.phtml @@ -5,6 +5,7 @@ */ use PHPCensor\Helper\Lang; +use PHPCensor\Model\Project; ?>