ElementFactory.php 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. namespace Muzich\CoreBundle\Factory;
  3. use Muzich\CoreBundle\Entity\Element;
  4. use Symfony\Component\DependencyInjection\Container;
  5. use Doctrine\ORM\EntityManager;
  6. use Muzich\CoreBundle\lib\Api\Connector as ApiConnector;
  7. use Muzich\CoreBundle\lib\Element\UrlAnalyzer;
  8. use Muzich\CoreBundle\Util\TagLike;
  9. /**
  10. *
  11. * @author bux
  12. */
  13. abstract class ElementFactory
  14. {
  15. protected $element;
  16. protected $container;
  17. protected $entity_manager;
  18. protected $api_connector;
  19. protected $url_analyzer;
  20. public $url_matchs = array();
  21. /**
  22. *
  23. * @param Element $element
  24. * @param Container $container
  25. */
  26. public function __construct(Element $element, Container $container, EntityManager $entity_manager)
  27. {
  28. $this->element = $element;
  29. $this->container = $container;
  30. $this->entity_manager = $entity_manager;
  31. $this->api_connector = new ApiConnector($element);
  32. $this->url_analyzer = new UrlAnalyzer($element, $this->url_matchs);
  33. }
  34. protected function setUrlAnalyzer($url_matchs)
  35. {
  36. $this->url_analyzer = new UrlAnalyzer($this->element, $url_matchs);
  37. }
  38. protected function getApiConnector()
  39. {
  40. return $this->api_connector;
  41. }
  42. public function setUrlDatas()
  43. {
  44. if ($this->url_analyzer->haveMatch())
  45. {
  46. $this->element->setData(Element::DATA_TYPE , $this->url_analyzer->getType());
  47. $this->element->setData(Element::DATA_REF_ID, $this->url_analyzer->getRefId());
  48. }
  49. }
  50. /**
  51. * Retourne l'url relative dans le site
  52. *
  53. * @return string
  54. */
  55. protected function getCleanedUrl($decode = false, $force_base_url = null)
  56. {
  57. // Procèdures de nettoyages après constat d'erreurs
  58. $url = $this->element->getUrl();
  59. if ($decode)
  60. {
  61. $url = urldecode($url);
  62. }
  63. $base_url = $this->element->getType();
  64. if ($force_base_url)
  65. {
  66. $base_url = $force_base_url;
  67. }
  68. $url = str_replace('www.', '', $url);
  69. $url = str_replace('http://'.$base_url, '', $url);
  70. $url = str_replace('https://'.$base_url, '', $url);
  71. return $url;
  72. }
  73. public function retrieveDatas()
  74. {
  75. $this->element->setDatas(array());
  76. }
  77. public function proceedEmbedCode()
  78. {
  79. $this->element->setEmbed(null);
  80. }
  81. public function proceedThumbnailUrl()
  82. {
  83. if (($thumb_url = $this->element->getData(Element::DATA_THUMB_URL)))
  84. {
  85. $this->element->setThumbnailUrl($thumb_url);
  86. }
  87. }
  88. protected function getJsonDataFromApiWithUrl($url)
  89. {
  90. $api_url = curl_init($url);
  91. $options = array(
  92. CURLOPT_RETURNTRANSFER => true,
  93. CURLOPT_HTTPHEADER => array('Content-type: application/json')
  94. );
  95. curl_setopt_array($api_url, $options);
  96. return json_decode(curl_exec($api_url), true);
  97. }
  98. public function getUrlAnalyzer()
  99. {
  100. return $this->url_analyzer;
  101. }
  102. protected function setDataTagsForElement($tags_string, $merge = array())
  103. {
  104. $tags_like = array();
  105. if (strlen(trim($tags_string)))
  106. {
  107. $tag_like = new TagLike($this->entity_manager);
  108. foreach (explode(' ', $tags_string) as $word)
  109. {
  110. $similar_tags = $tag_like->getSimilarTags($word, ($this->element->getOwner())?$this->element->getOwner()->getId():null);
  111. if (count($similar_tags))
  112. {
  113. if ($similar_tags['same_found'])
  114. {
  115. $tags_like[] = $similar_tags['tags'][0]['name'];
  116. }
  117. }
  118. }
  119. }
  120. $tags_like = array_merge($tags_like, $merge);
  121. if (count($tags_like))
  122. {
  123. $this->element->setData(Element::DATA_TAGS, array_unique($tags_like));
  124. }
  125. }
  126. }
  127. ?>