-
Notifications
You must be signed in to change notification settings - Fork 0
/
RepositorioController.php
115 lines (100 loc) · 3.96 KB
/
RepositorioController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<?php
include_once 'Classes/GithubApi.php';
include_once 'Classes/Crud.php';
class RepositorioController {
private $usuario;
private $gitApi;
private $crud;
private $rootFolder;
function __construct(){
$this->gitApi = new GithubApi();
$this->crud = new Crud();
$this->rootFolder = explode('/', dirname($_SERVER['PHP_SELF']))[1];
}
function redirecionaErro(){
header("Location: /{$this->rootFolder}/Home/index.php?erroRepo");
}
function redirecionaListagem(){
header("Location: /{$this->rootFolder}/Home/listar.php?usuario=".$this->usuario);
}
function submitProcess($postArray) {
if(isset($postArray['usuario']) && !empty($postArray['usuario'])){
$this->usuario = $postArray['usuario'];
$this->processaRepos();
}else{
$this->redirecionaErro();
}
}
function processaRepos(){
try{
$repositorios = $this->getRepos();
$this->limpaReposUsuario();
foreach ($repositorios as $key => $repo) {
$repositorios[$key]['data_ultimo_commit'] = $this->getLastCommitDate($repo['full_name']);
$this->insereReposUsuario($repositorios[$key]);
}
$this->redirecionaListagem();
}catch(Exception $e){
$this->redirecionaErro();
}
}
function buscaReposUsuario($dados){
$where = '';
if(isset($dados['nome_repo']) && !empty($dados['nome_repo'])){
$where .= " AND nome_repo LIKE '%{$dados['nome_repo']}%'";
}
if(isset($dados['archivado']) && $dados['archivado']!==''){
$where .= " AND archivado = {$dados['archivado']}";
}
$order = " ORDER BY ";
if(isset($dados['ordemCampo']) && !empty($dados['ordemCampo'])){
$order .= " {$dados['ordemCampo']} ";
}else{
$order .= " nome_repo ";
}
if(isset($dados['ordemTipo']) && !empty($dados['ordemTipo'])){
$order .= " {$dados['ordemTipo']} ";
}else{
$order .= " DESC ";
}
return $this->crud->execute("select
nome_repo,
archivado,
DATE_FORMAT(data_ultimo_commit, '%d/%m/%Y') as data_ultimo_commit
from repositorio
where usuario = '{$dados['usuario']}'
$where
$order");
}
function insereReposUsuario($dados){
$this->crud->insert('repositorio',[
'usuario' => $this->usuario,
'nome_repo' => $dados['name'],
'archivado' => empty($dados['archived']) ? 0 : $dados['archived'],
'data_ultimo_commit' => empty($dados['data_ultimo_commit']) ? 'NULL' : rtrim($dados['data_ultimo_commit'], 'Z')
]);
}
function limpaReposUsuario(){
$this->crud->delete('repositorio', "usuario='{$this->usuario}'");
}
function getRepos(){
$respostaReq = $this->gitApi->executaRequisicao("users/{$this->usuario}/repos");
$usuarioReposData = json_decode($respostaReq, true);
$keys = array("name" => 'name', "full_name" => 'full_name', "archived" => 'archived');
$usuarioRepos = array_map(function($a) use($keys){
return array_intersect_key($a,$keys);
}, $usuarioReposData);
return $usuarioRepos;
}
function getLastCommitDate($userRepo){
$respostaReq = $this->gitApi->executaRequisicao("repos/{$userRepo}/commits");
$usuarioCommitsData = json_decode($respostaReq, true);
if(!isset($usuarioCommitsData[0]) || empty($usuarioCommitsData[0])){
$dataUltimoCommit = 'null';
}else{
$dataUltimoCommit = $usuarioCommitsData[0]['commit']['committer']['date'];
}
return $dataUltimoCommit;
}
}
?>