Commit fb89983d authored by Mat's avatar Mat

une fonction ajax qui compte le total des rangées

parent 17e254c0
......@@ -52,8 +52,19 @@ class LegumeAPIController extends MasterAPIController
return $this->api($legumes);
}
/**
* @return \Symfony\Component\HttpFoundation\JsonResponse
* @throws \Doctrine\ORM\NoResultException
* @throws \Doctrine\ORM\NonUniqueResultException
*/
public function countAction()
{
$nbLegumes = $this->getDoctrine()->getManager()
->getRepository('PotageBundle:Legume')->countRows();
return $this->api($nbLegumes);
}
/**
* @param $id
......
......@@ -5,6 +5,12 @@ api_legume_read:
defaults:
_controller: APIBundle:LegumeAPI:read
methods: [ GET ]
api_legume_count:
path: /legumes/count
defaults:
_controller: APIBundle:LegumeAPI:count
methods: [ GET ]
api_legume_read_one:
path: /legume/{id}
......
......@@ -156,15 +156,10 @@ class LegumeController extends MasterController
*/
public function ajaxDisplayAction()
{
$nbRows = $this->getDoctrine()->getManager()
->getRepository('PotageBundle:Legume')->countRowsForAjaxDisplay();
// TODO trouver une meilleure façon d'insérer le nbre total de rangées
$form = $this->createForm(LegumeAPIType::class);
$formInsert = $this->createForm(OffreLegumesInsertAPIType::class);
return $this->render('@Potage/Legume/ajaxDisplay.html.twig', array(
'nbRows' => $nbRows,
'formLegume' => $form->createView(),
'formOffreLegumesInsert' => $formInsert->createView()
));
......
......@@ -102,13 +102,13 @@ class Legume
private $createdAt;
/**
* @ORM\Column(name="updated_at", type="datetime")
* @ORM\Column(name="updated_at", type="datetime", nullable=true)
* @var \DateTime
*/
private $updatedAt;
/**
* @ORM\Column(type="string", length=255)
* @ORM\Column(type="string", length=255, nullable=true)
* @var string
*/
private $image;
......@@ -144,7 +144,6 @@ class Legume
public function prePersist()
{
$this->createdAt = new \DateTime();
//$this->updatedAt = new \DateTime();
}
/**
*
......
......@@ -124,7 +124,7 @@ class OffreLegumes
private $quantiteStep;
/**
* @ORM\Column(type="string", length=255)
* @ORM\Column(type="string", length=255, nullable=true)
* @var string
*/
private $image;
......
......@@ -31,7 +31,19 @@ class LegumeRepository extends \Doctrine\ORM\EntityRepository
return new Paginator($qb, true);
}
/**
* @return mixed
* @throws \Doctrine\ORM\NoResultException
* @throws \Doctrine\ORM\NonUniqueResultException
*/
public function countRows()
{
$qb = $this->createQueryBuilder('l')
->select('count(l.id)');
return $qb->getQuery()->getSingleScalarResult();
}
/**
* @param $id
* @return mixed
......
......@@ -28,8 +28,8 @@
<h1>{{ block('title') }}</h1>
<div>
<span id="t_rows">{{ nbRows }}</span> légumes
<span id="t_pages"></span>
<span id="totalRows"></span>
<span id="totalPages"></span>
{# TODO nbRows doit être rafraichit si on crée ou si on efface #}
</div>
<form id="pagination">
......@@ -114,6 +114,21 @@
<script type="text/javascript">
/*
* Compte les rangées de la table légume
*/
function getTotalRows()
{
AJAX('GET', Routing.generate('api_legume_count'), function(request)
{
let json = JSON.parse(request.responseText);
totalRows.dataset.total = json;
totalRows.textContent = json + (json > 1 ? ' légumes' : ' légume');
});
}
/*
* Recharge la table
*/
......@@ -124,6 +139,7 @@
//console.log(paginate);
let legumeURL = Routing.generate('api_legume_read', paginate);
getTotalRows();
displayPagination(paginate);
getTableBodyLegume(legumeURL);
}
......@@ -137,12 +153,13 @@
let pageNav = document.querySelector('nav#pagenav ul.pagination');
AJAX('GET', Routing.generate('api_legume_read', paginate), function()
{
tpage.innerHTML = null;
totalPage.innerHTML = null;
pageNav.innerHTML = null;
let perPage = paginate.step;
if (total > perPage)
if (totalRows.dataset.total > perPage)
{
let nbPages = Math.ceil(total / perPage);
let nbPages = Math.ceil(totalRows.dataset.total / perPage);
let currentPage = paginate.page;
for (let i = 1; i <= nbPages; i++)
{
......@@ -162,7 +179,7 @@
pageItem.appendChild(pageItemChild);
pageNav.appendChild(pageItem);
}
tpage.innerHTML = '— page '+ currentPage + ' sur '+ nbPages;
totalPage.innerHTML = '— page '+ currentPage + ' sur '+ nbPages;
}
});
}
......@@ -192,7 +209,7 @@
function removePagination()
{
let pageNav = document.querySelector('nav#pagenav ul.pagination');
tpage.innerHTML = null;
totalPage.innerHTML = null;
pageNav.innerHTML = null;
}
......@@ -204,7 +221,7 @@
{
AJAX('GET', searchURL, function(request) {
let json = JSON.parse(request.responseText);
tpage.innerHTML = ''+ json.length +' résultats';
totalPage.innerHTML = ''+ json.length +' résultats';
});
}
......@@ -437,6 +454,7 @@
}
/*
*
* Initialise l'affichage de la page
......@@ -447,14 +465,15 @@
let table = document.querySelector('table#maintab.legumes');
let tbody = table.querySelector('tbody');
let total = parseInt(document.querySelector('#t_rows').textContent);
let tpage = document.querySelector('#t_pages');
let totalRows = document.querySelector('#totalRows');
let totalPage = document.querySelector('#totalPages');
let form = document.querySelector('form[name=legume]');
let formInsert = document.querySelector('form[name=offre_legumes_insert]');
let paginate = { 'step': 10, 'page': 1, 'column': 'id', 'order': 'ASC' };
getTotalRows();
reloadTableLegume(paginate);
......@@ -465,6 +484,7 @@
reloadBtns.forEach(function(reloadBtn) {
reloadBtn.addEventListener('click', function()
{
getTotalRows();
reloadTableLegume(paginate);
searchField.value = null;
});
......@@ -506,6 +526,7 @@
e.preventDefault();
AJAX('POST', submitURL, function()
{
getTotalRows();
reloadTableLegume(paginate);
$('.form-legume-modal').modal('hide'); // en jquery
},
......@@ -589,10 +610,9 @@
</script>
{% endblock %}
{#
TODO méthode pour actualiser en ajax le nombre total de rangées
TODO formulaire ajax spécial pour ajouter/éditer/effacer l'image, la renommer de manière unique
TODO !! BUG champs de recherche ajax, temporiser si on entre plusieurs lettres trop rapidement
TODO pagination, calcul la largeur et raccourcit avec des next/previous
TODO contraintes assert et vérif html
TODO copie de la rangée dans le menu en cours
TODO ne pas voir insert si pas d'offres en prépa
#}
......@@ -449,5 +449,5 @@
{#
TODO la sidebar est encore toute statique
TODO pagination sur la partie archives
#}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment