213 lines
9.8 KiB
PHP
Executable File
213 lines
9.8 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App\Controller;
|
|
|
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\HttpKernel\KernelInterface;
|
|
use Symfony\Component\HttpFoundation\BinaryFileResponse;
|
|
use Symfony\Component\Filesystem\Filesystem;
|
|
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
|
|
|
|
use App\Service\giteaService;
|
|
|
|
class IssueController extends AbstractController
|
|
{
|
|
private $appKernel;
|
|
private $data = "issue";
|
|
private $route = "app_issue";
|
|
private $render = "Issue/";
|
|
private $entity = "App:Issue";
|
|
|
|
public function __construct(KernelInterface $appKernel,giteaService $giteaservice) {
|
|
$this->appKernel = $appKernel;
|
|
$this->giteaservice = $giteaservice;
|
|
}
|
|
|
|
public function list($id, Request $request)
|
|
{
|
|
$em = $this->getDoctrine()->getManager();
|
|
$fgcsv = $request->get("fgcsv");
|
|
|
|
// Récupérer les repos de gitea
|
|
if($id==0) $scrums=$em->getRepository("App:Scrum")->findBy([],["name"=>"ASC"]);
|
|
else $scrums=$em->getRepository("App:Scrum")->findBy(["id"=>$id],["name"=>"ASC"]);
|
|
|
|
$giteacategorys=[];
|
|
$gitearepos=[];
|
|
$giteamilestones=[];
|
|
$giteacolumns=[];
|
|
$giteateams=[];
|
|
$giteaprioritys=[];
|
|
$giteatypes=[];
|
|
$gitealabels=[];
|
|
$giteaassignees=$em->getRepository("App:User")->findBy([],["username"=>"ASC"]);
|
|
$viewclosed = $request->getSession()->get("viewclosed");
|
|
|
|
foreach($scrums as $key => $scrum) {
|
|
if(!in_array($scrum->getCategory(),$giteacategorys))
|
|
array_push($giteacategorys,$scrum->getCategory());
|
|
|
|
$gitearepo=$this->giteaservice->getRepo($scrum->getGiteajson()["id"]);
|
|
if(!$gitearepo) die("Probleme de connexion avec gitea veuillez vous <a href='/ninegitea/logout'>reconnecter</a>");
|
|
|
|
if($gitearepo->updated_at!=$scrum->getGiteajson()["updated_at"]||$gitearepo->open_issues_count!=$scrum->getGiteajson()["open_issues_count"]) {
|
|
$scrum->setGiteajson(json_decode(json_encode($gitearepo), true));
|
|
$em->persist($scrum);
|
|
$em->flush();
|
|
}
|
|
|
|
if($gitearepo->open_issues_count>0) {
|
|
$giteatmp=$this->giteaservice->getMilestones($scrum->getGiteajson()["owner"]["login"],$scrum->getGiteajson()["name"],"?state=".($viewclosed=="true"?"all":"open"));
|
|
foreach($giteatmp as $key => $value) {
|
|
$giteatmp[$key]->title = $scrum->getGiteajson()["full_name"]. " = ".$giteatmp[$key]->title;
|
|
}
|
|
array_push($giteatmp,["id"=>$scrum->getGiteajson()["full_name"],"title"=> $scrum->getGiteajson()["full_name"]. " = Aucun Jalon"]);
|
|
$giteamilestones=array_merge($giteamilestones,$giteatmp);
|
|
|
|
$giteaissues=$this->giteaservice->getIssues($scrum->getGiteajson()["owner"]["login"],$scrum->getGiteajson()["name"],"?state=".($viewclosed=="true"?"all":"open"));
|
|
$json=$scrum->getGiteajson();
|
|
$json["issues"]=$giteaissues;
|
|
$json["category"]=$scrum->getCategory();
|
|
foreach($json["issues"] as $key => $giteaissue) {
|
|
$issue=$em->getRepository("App:Scrumissue")->findOneBy(["giteaid"=>$giteaissue->id]);
|
|
if($issue) {
|
|
$json["issues"][$key]->weight=$issue->getWeight();
|
|
$json["issues"][$key]->issueid=$issue->getId();
|
|
$json["issues"][$key]->scrumid=$issue->getScrum()->getId();
|
|
}
|
|
else {
|
|
$json["issues"][$key]->weight=0;
|
|
$json["issues"][$key]->issueid=0;
|
|
$json["issues"][$key]->scrumid=0;
|
|
}
|
|
}
|
|
|
|
$tmp=[];
|
|
foreach($scrum->getScrumcolumns() as $column) {
|
|
array_push($tmp,$column->getGiteaid());
|
|
if(!in_array($column->getGiteajson()["name"],$giteacolumns))
|
|
array_push($giteacolumns,$column->getGiteajson()["name"]);
|
|
}
|
|
$json["columns"]=$tmp;
|
|
array_push($gitearepos,$json);
|
|
|
|
foreach($scrum->getScrumteams() as $team) {
|
|
if(!in_array($team->getGiteajson()["name"],$giteateams))
|
|
array_push($giteateams,$team->getGiteajson()["name"]);
|
|
}
|
|
|
|
foreach($scrum->getScrumprioritys() as $priority) {
|
|
if(!in_array($priority->getGiteajson()["name"],$giteaprioritys))
|
|
array_push($giteaprioritys,$priority->getGiteajson()["name"]);
|
|
}
|
|
|
|
foreach($scrum->getScrumtypes() as $type) {
|
|
if(!in_array($type->getGiteajson()["name"],$giteatypes))
|
|
array_push($giteatypes,$type->getGiteajson()["name"]);
|
|
}
|
|
|
|
foreach($giteaissues as $giteaissue) {
|
|
foreach($giteaissue->labels as $label) {
|
|
if(!in_array($label->name,$gitealabels))
|
|
array_push($gitealabels,$label->name);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$keysort = array_column($giteamilestones, 'title');
|
|
array_multisort($keysort, SORT_DESC, $giteamilestones);
|
|
sort($giteacolumns);
|
|
sort($giteateams);
|
|
sort($giteaprioritys);
|
|
sort($giteatypes);
|
|
sort($gitealabels);
|
|
sort($giteacategorys);
|
|
|
|
// Préférences utilisateur
|
|
$filtercategorys = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filtercategorys",$id);
|
|
$filterrepos = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filterrepos",$id);
|
|
$filtermilestones = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filtermilestones",$id);
|
|
$filtercolumns = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filtercolumns",$id);
|
|
$filterteams = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filterteams",$id);
|
|
$filterprioritys = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filterprioritys",$id);
|
|
$filtertypes = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filtertypes",$id);
|
|
$filterlabels = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filterlabels",$id);
|
|
$filterassignees = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filterassignees",$id);
|
|
$filterexcludes = $em->getRepository("App:User")->getUserpreference($this->getUser(),"filterexcludes",$id);
|
|
$showfilters = $em->getRepository("App:User")->getUserpreference($this->getUser(),"showfilters",$id);
|
|
|
|
if($fgcsv) {
|
|
$dir = $this->appKernel->getProjectDir() . '/uploads/issues/';
|
|
$file = "issues-".$id.".csv";
|
|
$fs = new Filesystem();
|
|
$fs->mkdir($dir);
|
|
$csvh = fopen($dir.$file, 'w');
|
|
$d = ';'; // this is the default but i like to be explicit
|
|
$e = '"'; // this is the default but i like to be explicit
|
|
|
|
$tmp=["Projet","Jalon","Type","Id","Titre","Statut","Label"];
|
|
fputcsv($csvh, $tmp, $d, $e);
|
|
|
|
foreach($gitearepos as $gitearepo) {
|
|
foreach($gitearepo["issues"] as $giteaissue) {
|
|
$statut="";
|
|
$type="";
|
|
$labels="";
|
|
foreach($giteaissue->labels as $label) {
|
|
if(in_array($label->id,$gitearepo["columns"]))
|
|
$statut=$label->name;
|
|
elseif(in_array($label->name,$giteatypes))
|
|
$type=$label->name;
|
|
else
|
|
$labels=$labels.($labels!=""?"\n":"").$label->name;
|
|
}
|
|
$tmp=[
|
|
$gitearepo["name"],
|
|
(isset($giteaissue->milestone->title)?$giteaissue->milestone->title:""),
|
|
$type,
|
|
$giteaissue->number,
|
|
$giteaissue->title,
|
|
$statut,
|
|
$labels
|
|
];
|
|
fputcsv($csvh, $tmp, $d, $e);
|
|
}
|
|
}
|
|
fclose($csvh);
|
|
|
|
$response = new BinaryFileResponse($dir.$file);
|
|
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT);
|
|
return $response;
|
|
}
|
|
|
|
return $this->render($this->render.'list.html.twig',[
|
|
"useheader" => true,
|
|
"usesidebar" => false,
|
|
"id" => $id,
|
|
"giteacategorys" => $giteacategorys,
|
|
"gitearepos" => $gitearepos,
|
|
"giteamilestones" => $giteamilestones,
|
|
"giteacolumns" => $giteacolumns,
|
|
"giteateams" => $giteateams,
|
|
"giteaprioritys" => $giteaprioritys,
|
|
"giteatypes" => $giteatypes,
|
|
"gitealabels" => $gitealabels,
|
|
"giteaassignees" => $giteaassignees,
|
|
"filtercategorys" => $filtercategorys,
|
|
"filterrepos" => $filterrepos,
|
|
"filtermilestones" => $filtermilestones,
|
|
"filtercolumns" => $filtercolumns,
|
|
"filterteams" => $filterteams,
|
|
"filterprioritys" => $filterprioritys,
|
|
"filtertypes" => $filtertypes,
|
|
"filterlabels" => $filterlabels,
|
|
"filterexcludes" => $filterexcludes,
|
|
"filterassignees" => $filterassignees,
|
|
"showfilters" => $showfilters,
|
|
]);
|
|
}
|
|
|
|
}
|