ninegitea/src/ninegitea-1.0/src/Controller/ScrumissueController.php

148 lines
6.2 KiB
PHP
Executable File

<?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;
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');
$oldcolumn=$request->get('oldcolumn');
$newcolumn=$request->get('newcolumn');
$oldmilestone=$request->get('oldmilestone');
$newmilestone=$request->get('newmilestone');
if($oldcolumn!=$newcolumn||$oldmilestone!=$newmilestone) {
// 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);
}
// 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);
}
// 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);
$updatedate=new \DateTime($giteaissue->updated_at);
if($updatedate > $scrumissue->getScrum()->getUpdatedate()) {
$scrumissue->getScrum()->setUpdatedate(new \DateTime($giteaissue->updated_at));
$em->persist($scrumissue->getScrum());
$em->flush();
return new JsonResponse($updatedate->format("Ymd H:i:s"));
}
}
return new JsonResponse(false);
}
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();
}
public function ctrlchange(Request $request)
{
$em = $this->getDoctrine()->getManager();
$id=$request->get('id');
$lastupdate=new \DateTime($request->get('lastupdate'));
$scrum=$em->getRepository("App:Scrum")->find($id);
if(!$scrum) return new JsonResponse(['message' => 'No Scrum'], 403);
$giteaissues=$this->giteaservice->getIssues($scrum->getGiteajson()["owner"]["login"],$scrum->getGiteajson()["name"]);
if(!is_array($giteaissues)) die("Probleme de connexion avec gitea veuillez vous <a href='/ninegitea/logout'>reconnecter</a>");
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]);
if(!$scrumissue)
return new JsonResponse(true);
$fgissueupdated=false;
$updatedate=new \DateTime(json_decode(json_encode($giteaissue), true)["updated_at"]);
if($updatedate>$lastupdate) {
$fgissueupdated=true;
}
if($fgissueupdated)
return new JsonResponse(true);
}
return new JsonResponse(false);
}
}