123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- <?php
-
- namespace Muzich\CoreBundle\lib;
-
- /**
- * Boite a outils pour les Tags.
- */
- class Tag
- {
-
- /**
- *
- * @param array $elements Tableau d'éléments
- * @return array Tableau de tags [0 => id_tag, 1 => id_tag] rangé du tag le
- * plus utilisé au tag le moins utilisé
- */
- public function getOrderedTagsWithElements($elements)
- {
- $tags_count = array();
- $tags_ordered = array();
-
- foreach ($elements as $element)
- {
- if (count($element->getTags()))
- {
- foreach ($element->getTags() as $tag)
- {
- // Si on a déjà un compteur pour ce tag
- if (array_key_exists($tag->getId(), $tags_count))
- {
- // On incrémente
- $tags_count[$tag->getId()] = $tags_count[$tag->getId()] + 1;
- }
- else
- {
- // On commence le compteur
- $tags_count[$tag->getId()] = 1;
- }
- }
- }
- }
-
- // On trie le tableau avec les valeurs décroissantes
- // Comme les valeurs sont les count, on aura les tags les plus
- // utilisés en haut du tableau
- arsort($tags_count);
-
- foreach ($tags_count as $tag_id => $count)
- {
- $tags_ordered[] = $tag_id;
- }
-
- return $tags_ordered;
- }
-
- public function getOrderedEntityTagsWithElements($elements)
- {
- $tag_ordered_reference = $this->getOrderedTagsWithElements($elements);
- return $this->populateOrderedReferenceWithElementTags($elements, $tag_ordered_reference);
- }
-
- public function populateOrderedReferenceWithElementTags($elements, $ordered_reference)
- {
- $tags = array();
- $tags_ordered = array();
- foreach ($elements as $element)
- {
- if (count($element->getTags()))
- {
- foreach ($element->getTags() as $tag)
- {
- $tags[$tag->getId()] = $tag;
- }
- }
- }
-
- foreach ($ordered_reference as $tag_id)
- {
- $tags_ordered[] = $tags[$tag_id];
- }
-
- return $tags_ordered;
- }
-
- /**
- * Range une liste de tags [0 => Tag] en fonction d'une
- * réfèrence sous la forme [0 => tag_id, 1 => tag_id]
- *
- * @param array $tags
- * @param array $reference
- * @return array
- */
- public function sortTagWithOrderedReference($tags, $reference)
- {
- // tableau des tags rangés
- $tag_ordered = array();
- // tableau des tags pas encore dans la référence
- $tag_not_fond = array();
-
- foreach ($tags as $tag)
- {
- $position = array_search($tag->getId(), $reference);
- // Si on l'a trouvé dans la réference
- if ($position !== false)
- {
- // On le met dans le tableau des tags rangé, avec la clé de la réference
- $tag_ordered[$position] = $tag;
- }
- else
- {
- // Si il n'étais pas dans la réference on le met en attente dans
- // ce tableau
- $tag_not_fond[] = $tag;
- }
- }
-
- // Une fois les tags réferencés dans le tableau ordonné, on ajoute ceux qui
- // ne l'était pas
- foreach ($tag_not_fond as $tag)
- {
- $tag_ordered[] = $tag;
- }
-
- // On trie le tableau en fonction des clés.
- ksort($tag_ordered);
-
- return $tag_ordered;
- }
-
- }
|