2021-07-20 13:04:47 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Controller;
|
|
|
|
|
|
|
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
|
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
|
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
|
|
|
use Symfony\Component\Form\FormError;
|
|
|
|
|
|
|
|
use App\Entity\Scrumissue as Entity;
|
|
|
|
use App\Form\ScrumissueType as Form;
|
|
|
|
|
|
|
|
use App\Service\giteaService;
|
2024-02-21 20:58:38 +01:00
|
|
|
use stdClass;
|
2021-07-20 13:04:47 +02:00
|
|
|
|
|
|
|
class ScrumissueController extends AbstractController
|
|
|
|
{
|
|
|
|
private $data = "Scrumissue";
|
|
|
|
private $route = "app_Scrumissue";
|
|
|
|
private $render = "Scrumissue/";
|
|
|
|
private $entity = "App:Scrumissue";
|
|
|
|
|
|
|
|
public function __construct(giteaService $giteaservice) { $this->giteaservice = $giteaservice; }
|
|
|
|
|
|
|
|
public function change(Request $request)
|
|
|
|
{
|
|
|
|
$em = $this->getDoctrine()->getManager();
|
|
|
|
|
|
|
|
$id=$request->get('id');
|
2022-01-11 13:39:51 +01:00
|
|
|
$oldcolumn=$request->get('oldcolumn');
|
|
|
|
$newcolumn=$request->get('newcolumn');
|
2021-07-20 13:04:47 +02:00
|
|
|
$oldmilestone=$request->get('oldmilestone');
|
|
|
|
$newmilestone=$request->get('newmilestone');
|
2024-02-15 18:59:09 +01:00
|
|
|
$oldsprint=$request->get('oldsprint');
|
|
|
|
$newsprint=$request->get('newsprint');
|
2021-07-20 13:04:47 +02:00
|
|
|
|
2024-02-15 18:59:09 +01:00
|
|
|
if($oldcolumn!=$newcolumn||$oldmilestone!=$newmilestone||$oldsprint!=$newsprint) {
|
2022-01-22 11:18:42 +01:00
|
|
|
// Rechercher l'issue en cours
|
|
|
|
$scrumissue=$em->getRepository("App:Scrumissue")->find($id);
|
|
|
|
if(!$scrumissue) return new JsonResponse(['message' => 'No Issue'], 403);
|
|
|
|
|
|
|
|
// Récupérer la liste des labels de l'issue
|
|
|
|
$gitealabels=$this->giteaservice->getIssuelabels($scrumissue->getScrum()->getGiteajson()["owner"]["login"],$scrumissue->getScrum()->getGiteajson()["name"],$scrumissue->getGiteanumber());
|
|
|
|
if(!is_array($gitealabels)) return new JsonResponse(['message' => 'No API getIssuelabels'], 403);
|
|
|
|
|
|
|
|
// Remplacer l'ancien column par la nouvelle
|
|
|
|
if($oldcolumn!=$newcolumn) {
|
|
|
|
$newgitelabels=[];
|
|
|
|
$haveold=false;
|
|
|
|
foreach($gitealabels as $gitealabel) {
|
|
|
|
if($gitealabel->id!=$oldcolumn) array_push($newgitelabels,$gitealabel->id);
|
|
|
|
else $haveold=true;
|
|
|
|
}
|
|
|
|
if(!in_array($newcolumn,$newgitelabels)) array_push($newgitelabels,intval($newcolumn));
|
|
|
|
|
|
|
|
// Supprimer l'ancien label
|
|
|
|
if($haveold) {
|
|
|
|
$return=$this->giteaservice->deleteIssuelabel($scrumissue->getScrum()->getGiteajson()["owner"]["login"],$scrumissue->getScrum()->getGiteajson()["name"],$scrumissue->getGiteanumber(),$oldcolumn);
|
|
|
|
if(!$return) return new JsonResponse(['message' => 'No API deleteIssuelabel'], 403);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Mettre à jour les labels
|
|
|
|
$return=$this->giteaservice->putIssuelabels($scrumissue->getScrum()->getGiteajson()["owner"]["login"],$scrumissue->getScrum()->getGiteajson()["name"],$scrumissue->getGiteanumber(),$newgitelabels);
|
|
|
|
if(!$return) return new JsonResponse(['message' => 'No API putIssuelabels'], 403);
|
|
|
|
}
|
2021-07-20 13:04:47 +02:00
|
|
|
|
2022-01-22 11:18:42 +01:00
|
|
|
// Mettre à jour le milestone
|
|
|
|
if($oldmilestone!=$newmilestone) {
|
|
|
|
$patchs=["milestone"=>intval($newmilestone)];
|
|
|
|
$return=$this->giteaservice->patchIssue($scrumissue->getScrum()->getGiteajson()["owner"]["login"],$scrumissue->getScrum()->getGiteajson()["name"],$scrumissue->getGiteanumber(),$patchs);
|
|
|
|
if(!$return) return new JsonResponse(['message' => 'No API patchIssue'], 403);
|
|
|
|
}
|
2024-02-15 18:59:09 +01:00
|
|
|
|
|
|
|
// Mettre à jour le sprint
|
|
|
|
if($oldsprint!=$newsprint) {
|
|
|
|
$scrumissue->setScrumsprint(null);
|
|
|
|
$sprint=$em->getRepository("App:Scrumsprint")->find($newsprint);
|
|
|
|
if($sprint) {
|
|
|
|
$scrumissue->setScrumsprint($sprint);
|
|
|
|
}
|
|
|
|
$em->flush();
|
|
|
|
}
|
2022-01-22 11:18:42 +01:00
|
|
|
|
|
|
|
// Récupérer l'issue modifiée pour mettre à jour la date de modification gitea
|
|
|
|
$giteaissue=$this->giteaservice->getIssue($scrumissue->getScrum()->getGiteajson()["owner"]["login"],$scrumissue->getScrum()->getGiteajson()["name"],$scrumissue->getGiteanumber());
|
|
|
|
if(!$giteaissue) return new JsonResponse(['message' => 'No API getIssue'], 403);
|
2024-02-15 18:59:09 +01:00
|
|
|
$updateissue=new \DateTime($giteaissue->updated_at);
|
|
|
|
$updateissue->setTimezone(new \DateTimeZone("UTC"));
|
|
|
|
|
|
|
|
$lastupdate=$scrumissue->getScrum()->getUpdatedate();
|
|
|
|
|
|
|
|
|
|
|
|
if($updateissue > $lastupdate) {
|
|
|
|
$scrumissue->getScrum()->setUpdatedate($updateissue);
|
2022-01-22 11:18:42 +01:00
|
|
|
$em->persist($scrumissue->getScrum());
|
|
|
|
$em->flush();
|
2024-02-20 13:28:20 +01:00
|
|
|
return new JsonResponse($updateissue->format("Ymd H:i:s"));
|
2022-01-22 11:18:42 +01:00
|
|
|
}
|
2021-07-20 13:04:47 +02:00
|
|
|
}
|
2022-01-22 11:18:42 +01:00
|
|
|
return new JsonResponse(false);
|
2021-07-20 13:04:47 +02:00
|
|
|
}
|
2022-01-11 13:39:51 +01:00
|
|
|
|
|
|
|
public function order(Request $request)
|
|
|
|
{
|
|
|
|
$em = $this->getDoctrine()->getManager();
|
|
|
|
|
|
|
|
$id=$request->get('id');
|
|
|
|
$lstordered=explode(",",$request->get('lstordered'));
|
|
|
|
|
|
|
|
$scrum=$em->getRepository("App:Scrum")->find($id);
|
|
|
|
if(!$scrum) return new JsonResponse(['message' => 'No Scrum'], 403);
|
|
|
|
|
|
|
|
$order=0;
|
|
|
|
foreach($lstordered as $item) {
|
|
|
|
$scrumissue=$em->getRepository("App:Scrumissue")->find($item);
|
|
|
|
if($scrumissue) {
|
|
|
|
$scrumissue->setRowid($order);
|
|
|
|
$order++;
|
|
|
|
$em->persist($scrumissue);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$em->flush();
|
|
|
|
|
|
|
|
return new JsonResponse();
|
|
|
|
}
|
2022-01-22 11:18:42 +01:00
|
|
|
|
2022-09-21 11:05:17 +02:00
|
|
|
public function info(Request $request)
|
|
|
|
{
|
|
|
|
$em = $this->getDoctrine()->getManager();
|
|
|
|
|
|
|
|
$id=$request->get('id');
|
|
|
|
|
|
|
|
// Rechercher l'issue en cours
|
|
|
|
$scrumissue=$em->getRepository("App:Scrumissue")->find($id);
|
|
|
|
if(!$scrumissue) return new JsonResponse(['message' => 'No Issue'], 403);
|
|
|
|
|
|
|
|
$output=[];
|
|
|
|
$output["weight"]=$scrumissue->getWeight();
|
|
|
|
|
|
|
|
return new JsonResponse($output);
|
|
|
|
}
|
|
|
|
|
2024-02-21 20:58:38 +01:00
|
|
|
public function view($id, Request $request) {
|
|
|
|
$em = $this->getDoctrine()->getManager();
|
|
|
|
$issue=$em->getRepository("App:Scrumissue")->find($id);
|
|
|
|
$scrum = $issue->getScrum();
|
|
|
|
|
|
|
|
$repoid = $scrum->getGiteaid();
|
|
|
|
$repoowner = $scrum->getGiteajson()["owner"]["login"];
|
|
|
|
$reponame = $scrum->getGiteajson()["name"];
|
|
|
|
|
|
|
|
$repo=$this->giteaservice->getRepo($repoid);
|
|
|
|
$giteaissue=$this->giteaservice->getIssue($repoowner,$reponame,$issue->getGiteanumber());
|
|
|
|
$giteaissue->body = $this->giteaservice->markdown("/".$scrum->getGiteajson()["full_name"],"comment",$giteaissue->body);
|
|
|
|
$giteaissue->comments=$this->giteaservice->getIssueComments($repoowner,$reponame,$giteaissue->number);
|
2024-02-23 13:28:45 +01:00
|
|
|
|
2024-02-21 20:58:38 +01:00
|
|
|
|
|
|
|
$giteaissue->statuslife=$issue->getScrumcolumn()->getName();
|
2024-02-23 12:35:29 +01:00
|
|
|
$giteaissue->weight=$issue->getWeight();
|
|
|
|
$giteaissue->nineid=$issue->getId();
|
|
|
|
|
2024-02-21 20:58:38 +01:00
|
|
|
$giteaissue->sprint=($issue->getScrumsprint()?$issue->getScrumsprint()->getName():null);
|
|
|
|
foreach($giteaissue->comments as $keycomment => $comment) {
|
|
|
|
$giteaissue->comments[$keycomment]->body=$this->giteaservice->markdown("/".$scrum->getGiteajson()["full_name"],"comment",$giteaissue->comments[$keycomment]->body);
|
|
|
|
}
|
|
|
|
|
|
|
|
$giteaissue->timelines=$this->giteaservice->getIssueTimelines($repoowner,$reponame,$giteaissue->number);
|
|
|
|
|
|
|
|
$giteaissue->labelhistos=[];
|
|
|
|
$giteaissue->refs=[];
|
|
|
|
foreach($giteaissue->timelines as $key => $timeline) {
|
|
|
|
if($timeline->type == "label"){
|
|
|
|
$tmp=new stdClass();
|
|
|
|
$tmp->label=($timeline->body==1?"Ajout Label":"Suppression Label")." <i>".$timeline->label->name."<i>";
|
|
|
|
$tmp->user=$timeline->user;
|
|
|
|
$tmp->created_at=$timeline->created_at;
|
|
|
|
array_push($giteaissue->labelhistos,$tmp);
|
|
|
|
unset($giteaissue->timelines[$key]);
|
|
|
|
}
|
|
|
|
elseif($timeline->type == "comment_ref" || $timeline->type == "pull_ref" || $timeline->type == "issue_ref"){
|
|
|
|
$tmp=new stdClass();
|
|
|
|
$tmp->label ="<a href='".$timeline->ref_issue->html_url."' target='_blank'>";
|
|
|
|
$tmp->label.=($timeline->type=="pull_ref"?"Request":"Issue")." = ";
|
|
|
|
$tmp->label.="#".$timeline->ref_issue->number." = ".$timeline->ref_issue->title."</a></i>";
|
|
|
|
$tmp->user=$timeline->user;
|
|
|
|
$tmp->created_at=$timeline->created_at;
|
|
|
|
array_push($giteaissue->refs,$tmp);
|
|
|
|
unset($giteaissue->timelines[$key]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Affichage du formulaire
|
|
|
|
return $this->render('Scrum/issue.html.twig', [
|
|
|
|
'useheader' => false,
|
|
|
|
'usesidebar' => false,
|
|
|
|
'maxwidth' => true,
|
|
|
|
'repo' => $repo,
|
|
|
|
'issue' => $giteaissue,
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2022-09-21 11:05:17 +02:00
|
|
|
public function update(Request $request)
|
|
|
|
{
|
|
|
|
$em = $this->getDoctrine()->getManager();
|
|
|
|
|
|
|
|
$id=$request->get('id');
|
|
|
|
$weight=$request->get('weight');
|
|
|
|
|
|
|
|
// Rechercher l'issue en cours
|
|
|
|
$scrumissue=$em->getRepository("App:Scrumissue")->find($id);
|
|
|
|
if(!$scrumissue) return new JsonResponse(['message' => 'No Issue'], 403);
|
|
|
|
|
|
|
|
$scrumissue->setWeight($weight);
|
|
|
|
$em->flush();
|
|
|
|
|
|
|
|
$giteaissues=$this->giteaservice->getIssues($scrumissue->getScrum()->getGiteajson()["owner"]["login"],$scrumissue->getScrum()->getGiteajson()["name"]);
|
|
|
|
|
|
|
|
$weights=[];
|
|
|
|
foreach($giteaissues as $giteaissue) {
|
|
|
|
$issue=$em->getRepository("App:Scrumissue")->findOneBy(["scrum"=>$scrumissue->getScrum(),"giteaid"=>$giteaissue->id]);
|
|
|
|
if($issue) {
|
|
|
|
if($giteaissue->milestone) $milestoneid=$giteaissue->milestone->id;
|
|
|
|
else $milestoneid=-100;
|
|
|
|
|
|
|
|
if(!array_key_exists($milestoneid,$weights)) $weights[$milestoneid]=0;
|
|
|
|
$weights[$milestoneid]=$weights[$milestoneid]+$issue->getWeight();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return new JsonResponse($weights);
|
|
|
|
}
|
|
|
|
|
2024-04-12 16:30:36 +02:00
|
|
|
public function block(Request $request)
|
|
|
|
{
|
|
|
|
$em = $this->getDoctrine()->getManager();
|
|
|
|
|
|
|
|
$id=$request->get('id');
|
|
|
|
$issueblocked=$request->get('issueblocked');
|
|
|
|
|
|
|
|
// Rechercher l'issue en cours
|
|
|
|
$scrumissue=$em->getRepository("App:Scrumissue")->find($id);
|
|
|
|
if(!$scrumissue) return new JsonResponse(['message' => 'No Issue'], 403);
|
|
|
|
|
|
|
|
// Bloquer l'issue
|
|
|
|
$response=$this->giteaservice->postIssueblocks($scrumissue->getScrum()->getGiteajson()["owner"]["login"],$scrumissue->getScrum()->getGiteajson()["name"],$scrumissue->getGiteanumber(),$issueblocked);
|
2024-04-12 21:56:11 +02:00
|
|
|
|
2024-04-12 16:30:36 +02:00
|
|
|
if(!$response) return new JsonResponse(['message' => 'Error api'], 403);
|
|
|
|
|
|
|
|
return new JsonResponse([]);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function unblock(Request $request)
|
|
|
|
{
|
|
|
|
$em = $this->getDoctrine()->getManager();
|
|
|
|
|
|
|
|
$id=$request->get('id');
|
|
|
|
|
|
|
|
// Rechercher l'issue en cours
|
|
|
|
$scrumissue=$em->getRepository("App:Scrumissue")->find($id);
|
|
|
|
if(!$scrumissue) return new JsonResponse(['message' => 'No Issue'], 403);
|
|
|
|
if(!$scrumissue->getScrumissueblock()) return new JsonResponse(['message' => 'No Issue'], 403);
|
|
|
|
$issueblocked=$scrumissue->getScrumissueblock()->getGiteanumber();
|
|
|
|
|
|
|
|
// Débloquer l'issue
|
|
|
|
$response=$this->giteaservice->deleteIssueblocks($scrumissue->getScrum()->getGiteajson()["owner"]["login"],$scrumissue->getScrum()->getGiteajson()["name"],$scrumissue->getGiteanumber(),$issueblocked);
|
|
|
|
if(!$response) return new JsonResponse(['message' => 'Error api'], 403);
|
|
|
|
|
|
|
|
return new JsonResponse([]);
|
|
|
|
}
|
|
|
|
|
2024-04-12 21:56:11 +02:00
|
|
|
public function color(Request $request)
|
|
|
|
{
|
|
|
|
$em = $this->getDoctrine()->getManager();
|
|
|
|
|
|
|
|
$id=$request->get('id');
|
|
|
|
$color=$request->get('color');
|
|
|
|
|
|
|
|
// Rechercher l'issue en cours
|
|
|
|
$scrumissue=$em->getRepository("App:Scrumissue")->find($id);
|
|
|
|
if(!$scrumissue) return new JsonResponse(['message' => 'No Issue'], 403);
|
|
|
|
$scrumissue->setColor($color);
|
|
|
|
$em->flush();
|
|
|
|
|
|
|
|
return new JsonResponse([]);
|
|
|
|
}
|
|
|
|
|
2022-01-22 11:18:42 +01:00
|
|
|
public function ctrlchange(Request $request)
|
|
|
|
{
|
|
|
|
$em = $this->getDoctrine()->getManager();
|
|
|
|
|
|
|
|
$id=$request->get('id');
|
2024-02-20 12:00:40 +01:00
|
|
|
$lastupdate=new \DateTime($request->get('lastupdate'));
|
2024-02-15 18:59:09 +01:00
|
|
|
|
2022-01-22 11:18:42 +01:00
|
|
|
$scrum=$em->getRepository("App:Scrum")->find($id);
|
|
|
|
if(!$scrum) return new JsonResponse(['message' => 'No Scrum'], 403);
|
2024-02-20 12:00:40 +01:00
|
|
|
|
|
|
|
/*
|
2024-02-15 18:59:09 +01:00
|
|
|
$lastupdate=$scrum->getUpdatedate();
|
2024-02-20 10:59:26 +01:00
|
|
|
$lastupdate->setTimezone(new \DateTimeZone("UTC"));
|
2024-02-20 12:00:40 +01:00
|
|
|
*/
|
2022-01-22 11:18:42 +01:00
|
|
|
|
|
|
|
$giteaissues=$this->giteaservice->getIssues($scrum->getGiteajson()["owner"]["login"],$scrum->getGiteajson()["name"]);
|
2024-02-16 16:40:41 +01:00
|
|
|
if(!is_array($giteaissues)) die("Probleme de connexion avec gitea veuillez vous <a href='/logout'>reconnecter</a>");
|
2022-01-22 11:18:42 +01:00
|
|
|
|
|
|
|
foreach($giteaissues as $giteaissue) {
|
|
|
|
// On ne prend pas les pull request
|
|
|
|
if(!is_null($giteaissue->pull_request))
|
|
|
|
continue;
|
|
|
|
|
|
|
|
$scrumissue=$em->getRepository("App:Scrumissue")->findOneBy(["scrum"=>$scrum,"giteaid"=>$giteaissue->id]);
|
|
|
|
|
2024-02-15 18:59:09 +01:00
|
|
|
if(!$scrumissue) {
|
2022-01-22 11:18:42 +01:00
|
|
|
return new JsonResponse(true);
|
2024-02-15 18:59:09 +01:00
|
|
|
}
|
2022-01-22 11:18:42 +01:00
|
|
|
|
|
|
|
$fgissueupdated=false;
|
2024-02-15 18:59:09 +01:00
|
|
|
$updateissue=new \DateTime(json_decode(json_encode($giteaissue), true)["updated_at"]);
|
|
|
|
$updateissue->setTimezone(new \DateTimeZone("UTC"));
|
|
|
|
|
2024-02-20 13:28:20 +01:00
|
|
|
if($updateissue>$lastupdate) {
|
2022-01-22 11:18:42 +01:00
|
|
|
$fgissueupdated=true;
|
|
|
|
}
|
|
|
|
|
|
|
|
if($fgissueupdated)
|
|
|
|
return new JsonResponse(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
return new JsonResponse(false);
|
|
|
|
}
|
2024-03-15 15:44:29 +01:00
|
|
|
|
|
|
|
public function getpoker($userid,$issueid,Request $request) {
|
|
|
|
return new Response(0);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setpoker($userid,$issueid,Request $request) {
|
|
|
|
|
|
|
|
}
|
2021-07-20 13:04:47 +02:00
|
|
|
}
|