src/Repository/PostRepository.php line 759

Open in your IDE?
  1. <?php
  2. namespace App\Repository;
  3. use App\Entity\Post;
  4. use App\Pagination\Paginator;
  5. use App\Entity\PostTranslation;
  6. use Symfony\Component\Intl\Locale;
  7. use Doctrine\Persistence\ManagerRegistry;
  8. use App\Repository\PostRefRepositoryMethodsTrait;
  9. use App\Repository\PostActualitesRepositoryMethodsTrait;
  10. use App\Repository\MethodsTrait\NbPostRepositoryMethodsTrait;
  11. use App\Repository\MethodsTrait\PostArchiveRepositoryMethodsTrait;
  12. use App\Repository\MethodsTrait\SearchResultatRepositoryMethodsTrait;
  13. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  14. /**
  15. * @method Post|null find($id, $lockMode = null, $lockVersion = null)
  16. * @method Post|null findOneBy(array $criteria, array $orderBy = null)
  17. * @method Post[] findAll()
  18. * @method Post[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  19. */
  20. class PostRepository extends ServiceEntityRepository
  21. {
  22. use PostRefRepositoryMethodsTrait;
  23. use PostArchiveRepositoryMethodsTrait;
  24. use PostActualitesRepositoryMethodsTrait;
  25. use SearchResultatRepositoryMethodsTrait;
  26. use NbPostRepositoryMethodsTrait;
  27. private $languageRepository;
  28. public function __construct(ManagerRegistry $registry,LanguageRepository $languageRepository)
  29. {
  30. parent::__construct($registry, Post::class);
  31. $this->languageRepository = $languageRepository;
  32. }
  33. /** find conut nb resultat post **/
  34. public function findCountPost($type = null)
  35. {
  36. $locale = Locale::getDefault();
  37. $sql = $this->createQueryBuilder('p')
  38. ->select('count(p.id)');
  39. if($type != null){
  40. $sql->join('p.type_post','typePost')
  41. ->andWhere('typePost.id = :type')
  42. ->setParameter('type', $type);
  43. }
  44. return $sql->getQuery()->getSingleScalarResult();
  45. }
  46. /** end off method **/
  47. //Method used only in front
  48. public function findPostBySlug($slug)
  49. {
  50. $languages = $this->languageRepository->findActifLang();
  51. $locale = Locale::getDefault();
  52. // $sql = $this->createQueryBuilder('p')
  53. // ->join('p.translations','t')
  54. // ->andWhere('t.locale = :locale')
  55. // ->setParameter('locale', $locale)
  56. // ->andWhere('p.date_publication IS NULL OR p.date_publication <= :currentDate')
  57. // ->setParameter('currentDate', new \DateTime());
  58. // if($slug){
  59. // $sql->andWhere('t.slug = :slug')
  60. // ->setParameter('slug', $slug);
  61. // }
  62. // return $sql->getQuery()->getOneOrNullResult();
  63. $resultat = null;
  64. if ($languages) {
  65. foreach ($languages as $language) {
  66. $qb = $this->createQueryBuilder('u')
  67. ->join('u.translations','t')
  68. ->andWhere('t.slug =:slug')
  69. ->andWhere('t.locale = :locale')
  70. ->setParameter('slug', $slug)
  71. ->setParameter('locale', $language->getLanguageCode());
  72. if ($qb->setMaxResults(1)->getQuery()->getOneOrNullResult()) {
  73. $resultat = $qb->setMaxResults(1)->getQuery()->getOneOrNullResult();
  74. return $resultat;
  75. }
  76. }
  77. }
  78. return $resultat;
  79. }
  80. public function findPostById($id)
  81. {
  82. $locale = Locale::getDefault();
  83. $sql = $this->createQueryBuilder('p')
  84. ->join('p.translations','t')
  85. ->andWhere('p.id = :id')
  86. ->andWhere('t.actif = true')
  87. ->andWhere('t.locale = :locale')
  88. ->setParameter('locale', $locale)
  89. ->setParameter('id', $id)
  90. ->andWhere('p.date_publication IS NULL OR p.date_publication <= :currentDate')
  91. ->setParameter('currentDate', new \DateTime());
  92. return $sql->getQuery()->getResult();
  93. }
  94. public function findAllPostByType($locale,$type,$categorie = null)
  95. {
  96. $sql = $this->createQueryBuilder('p')
  97. ->join('p.translations','t')
  98. ->andWhere('p.post_archive is null')
  99. ->andWhere('p.post_archive = 0 OR p.post_archive is null')
  100. ->andWhere('t.locale = :locale')
  101. ->setParameter('locale', $locale);
  102. if($type){
  103. $sql->join('p.type_post','tp')
  104. ->andWhere('tp.id = :type')
  105. ->setParameter('type', $type);
  106. // if($type == '6'){
  107. // $sql->orderBy('p.date_publication','DESC');
  108. // }
  109. }
  110. if ($categorie != null) {
  111. $sql->join('p.PostCategory','post_categorie')
  112. ->andWhere('post_categorie.Category IN (:categorie_ids)')
  113. ->setParameter('categorie_ids', [$categorie]);
  114. }
  115. $sql->orderBy('p.position','asc');
  116. return $sql->getQuery()->getResult();
  117. }
  118. public function findAllOtherPosts($id)
  119. {
  120. $locale = Locale::getDefault();
  121. $sql = $this->createQueryBuilder('p')
  122. ->join('p.translations','t')
  123. ->andWhere('p.post_archive = 0 OR p.post_archive is null')
  124. ->andWhere('t.locale = :locale')
  125. ->andWhere('t.actif = true')
  126. ->setParameter('locale', $locale);
  127. if($id){
  128. $sql->andWhere('p.id != :id')
  129. ->setParameter('id', $id);
  130. }
  131. $sql->orderBy('p.position','ASC');
  132. return $sql->getQuery()->getResult();
  133. }
  134. public function findAllActivesPostsByType($locale,$type)
  135. {
  136. $sql = $this->createQueryBuilder('p')
  137. ->join('p.translations','t')
  138. ->andWhere('p.post_archive = 0 OR p.post_archive is null')
  139. ->andWhere('t.locale = :locale')
  140. ->setParameter('locale', $locale);
  141. if($type){
  142. $sql->join('p.type_post','tp')
  143. ->andWhere('tp.id = :type')
  144. ->andWhere('t.actif = true')
  145. ->setParameter('type', $type);
  146. }
  147. $sql->orderBy('p.position','asc');
  148. return $sql->getQuery()->getResult();
  149. }
  150. public function findPostByType($type,$option,$nb)
  151. {
  152. $locale = Locale::getDefault();
  153. $sql = $this->createQueryBuilder('p')
  154. ->join('p.translations','t')
  155. ->join('p.type_post','typePost')
  156. ->andWhere('typePost.id = :type')
  157. ->andWhere('t.actif = true')
  158. ->andWhere('t.locale = :locale')
  159. ->setParameter('locale', $locale)
  160. ->setParameter('type', $type)
  161. ->setMaxResults($nb);
  162. if($option == '1'){
  163. $sql->orderBy('p.id', 'ASC');
  164. }elseif($option == '2'){
  165. $sql->orderBy('p.id', 'DESC');
  166. }
  167. return $sql->getQuery()->getResult();
  168. }
  169. public function findPostActifsHomeByType($type,$option,$nb = 1,$all_post = false)
  170. {
  171. $locale = Locale::getDefault();
  172. $sql = $this->createQueryBuilder('p')
  173. ->join('p.translations','t')
  174. ->join('p.type_post','typePost')
  175. ->andWhere('typePost.id = :type')
  176. ->andWhere('t.actif = true')
  177. ->andWhere('p.actif_home = 1')
  178. ->andWhere('t.locale = :locale')
  179. ->setParameter('locale', $locale)
  180. ->setParameter('type', $type)
  181. ->andWhere('p.date_publication IS NULL OR p.date_publication <= :currentDate')
  182. ->setParameter('currentDate', new \DateTime());
  183. if($all_post == false){
  184. $sql->setMaxResults($nb);
  185. }
  186. if($option == '1'){
  187. $sql->orderBy('p.id', 'ASC');
  188. }elseif($option == '2'){
  189. $sql->orderBy('p.id', 'DESC');
  190. }elseif($option == '3'){
  191. $sql->orderBy('p.date_publication','DESC');
  192. }elseif($option == '4'){
  193. $sql->orderBy('p.position', 'ASC');
  194. }elseif($option == '5'){
  195. $sql->orderBy('RAND()');
  196. }
  197. return $sql->getQuery()->getResult();
  198. }
  199. public function findPostByTypeInterne($type,$option,$nb)
  200. {
  201. $locale = Locale::getDefault();
  202. $sql = $this->createQueryBuilder('p')
  203. ->join('p.translations','t')
  204. ->join('p.type_post','typePost')
  205. ->andWhere('typePost.id = :type')
  206. ->andWhere('t.actif = true')
  207. ->andWhere('t.locale = :locale')
  208. ->setParameter('locale', $locale)
  209. ->setParameter('type', $type)
  210. ->setMaxResults($nb);
  211. if($option == '1'){
  212. $sql->orderBy('p.id', 'ASC');
  213. }elseif($option == '2'){
  214. $sql->orderBy('p.id', 'DESC');
  215. }elseif($option == '3'){
  216. $sql->orderBy('p.date_publication','DESC');
  217. }elseif($option == '4'){
  218. $sql->orderBy('p.position', 'ASC');
  219. }elseif($option == '5'){
  220. $sql->orderBy('RAND()');
  221. }
  222. return $sql->getQuery()->getResult();
  223. }
  224. public function findPostBySystemName($name)
  225. {
  226. $locale = Locale::getDefault();
  227. $sql = $this->createQueryBuilder('p')
  228. ->join('p.type_post','typePost')
  229. ->join('typePost.translations','translation')
  230. ->join('p.translations','t')
  231. ->andWhere('t.actif = true')
  232. ->andWhere('translation.system_name = :name')
  233. ->andWhere('translation.locale = :locale')
  234. ->setParameter('locale', $locale)
  235. ->setParameter('name', $name)
  236. ->getQuery()
  237. ->getResult();
  238. return $sql;
  239. }
  240. public function findPostBySystemNames($system_name)
  241. {
  242. $locale = Locale::getDefault();
  243. $sql = $this->createQueryBuilder('p')
  244. ->join('p.type_post','typePost')
  245. ->join('typePost.translations','translation')
  246. ->join('p.translations','t')
  247. ->andWhere('t.actif = true')
  248. ->andWhere("translation.system_name IN(:system_name)")
  249. ->andWhere('translation.locale = :locale')
  250. ->andWhere('p.date_publication IS NULL OR p.date_publication <= :currentDate')
  251. ->setParameter('currentDate', new \DateTime())
  252. ->setParameter('locale', $locale)
  253. ->setParameter('system_name', $system_name)
  254. ->getQuery()
  255. ->getResult();
  256. return $sql;
  257. }
  258. public function findPostMaxPosition()
  259. {
  260. $sql = $this->createQueryBuilder('p')
  261. ->select('MAX(p.position) as max_position');
  262. return $sql->getQuery()->getOneOrNullResult();
  263. }
  264. public function findPostByCategory($categorie,$page = 1)
  265. {
  266. $id_categorie = $categorie->getId();
  267. $pagination = $categorie->getPagination() != null ? $categorie->getPagination() : false;
  268. $page_size = $categorie->getPageSize() != null ? $categorie->getPageSize() : 10;
  269. $order_by = 1;
  270. $order_by = $categorie->getOrderBy();
  271. $req_order = "p.position";
  272. $asc_desc = "ASC";
  273. if($order_by == 0){
  274. $req_order = "p.date_publication";
  275. $asc_desc = "DESC";
  276. }
  277. $locale = Locale::getDefault();
  278. $sql = $this->createQueryBuilder('p')
  279. ->join('p.translations','t')
  280. ->join('p.PostCategory','post_categorie')
  281. ->andWhere('t.actif = true')
  282. ->andWhere('post_categorie.Category =:categorie_id')
  283. ->andWhere('t.locale = :locale')
  284. ->setParameter('locale', $locale)
  285. ->setParameter('categorie_id', $id_categorie)
  286. ->orderBy($req_order, $asc_desc);
  287. if ($pagination == true) {
  288. return (new Paginator($sql))->paginate($page,$page_size);
  289. }else{
  290. return $sql->getQuery()->getResult();
  291. }
  292. }
  293. /**
  294. * Retourne les posts par type et par id avec limit
  295. */
  296. public function getPostsWithLimit($locale,$type,$limit,$order,$IdSite)
  297. {
  298. $sql = $this->createQueryBuilder('p')
  299. ->join('p.translations','t')
  300. ->andWhere('t.locale = :locale')
  301. ->setParameter('locale', $locale);
  302. if($type){
  303. $sql->join('p.type_post','tp')
  304. ->andWhere('tp.id = :type')
  305. ->setParameter('type', $type);
  306. /* if($type == '6'){
  307. $sql->orderBy('p.date_publication','DESC');
  308. } */
  309. }
  310. switch ($order) {
  311. case 0:
  312. $sql->orderBy('RAND()');
  313. break;
  314. case 1:
  315. $sql->orderBy('p.id','ASC');
  316. break;
  317. case 2:
  318. $sql->orderBy('p.id','DESC');
  319. break;
  320. case 3:
  321. $sql->orderBy('p.date_publication','DESC');
  322. break;
  323. default:
  324. $sql->orderBy('p.id','ASC');
  325. break;
  326. }
  327. if($limit){
  328. $sql->setMaxResults($limit);
  329. }
  330. return $sql->getQuery()->getResult();
  331. }
  332. /**
  333. * Retourne la liste des catégories du post
  334. */
  335. public function getCategoryPost($post_category, $_locale){
  336. $categories = [];
  337. if($post_category){
  338. foreach ($post_category as $key => $post_cat) {
  339. if($post_cat->getCategory()){
  340. $cat = $post_cat->getCategory();
  341. $categories[] = ['id'=> $cat->getId(),'title'=> $cat->translate($_locale)->getTitreCategorie()];
  342. }
  343. }
  344. }
  345. return $categories;
  346. }
  347. // get article prev or next
  348. public function findPostPrevOrNext($categoiePost,$post,$action = 'next')
  349. {
  350. $id_categorie = $categoiePost->getId();
  351. $order_categorie = $categoiePost->getOrderBy();
  352. $id_post = $post->getId();
  353. $position_post = $post->getPosition();
  354. $date_publication = $post->getDatePublication();
  355. $locale = Locale::getDefault();
  356. $sql = $this->createQueryBuilder('p')
  357. ->join('p.translations','t')
  358. ->join('p.PostCategory','post_categorie')
  359. ->andWhere('t.actif = true')
  360. ->andWhere('p.id != :id_post')
  361. ->andWhere('post_categorie.Category = :id_categorie')
  362. ->andWhere('t.locale = :locale')
  363. ->setParameter('locale', $locale)
  364. ->setParameter('id_categorie', $id_categorie)
  365. ->setMaxResults(1);
  366. if(($order_categorie == 0 || $order_categorie == 2) and $date_publication){
  367. $sql->setParameter('date_publication', $date_publication);
  368. if($action == 'next') {
  369. $sql->andWhere('p.date_publication > :date_publication')
  370. ->orderBy('p.date_publication', 'asc');
  371. }else{
  372. $sql->andWhere('p.date_publication < :date_publication')
  373. ->orderBy('p.date_publication', 'DESC');
  374. }
  375. }else{
  376. $sql->setParameter('position_post', $position_post);
  377. if($action == 'next') {
  378. $sql->andWhere('p.position > :position_post')
  379. ->orderBy('p.position', 'asc');
  380. }else{
  381. $sql->andWhere('p.position < :position_post')
  382. ->orderBy('p.position', 'DESC');
  383. }
  384. }
  385. $sql->setParameter('id_post', $id_post);
  386. return $sql->getQuery()->getOneOrNullResult();
  387. }
  388. /*****************************************************************
  389. ** get liste actualite related with secteur activte ***
  390. *****************************************************************/
  391. public function findActualiteByActivite()
  392. {
  393. $locale = Locale::getDefault();
  394. $sql = $this->createQueryBuilder('p')
  395. ->andWhere('p.id_activite IS NOT NULL or p.id_sous_activite IS NOT NULL or p.id_secteur IS NOT NULL')
  396. ->join('p.translations','t')
  397. ->andWhere('t.actif = true')
  398. ->andWhere('t.locale = :locale')
  399. ->setParameter('locale', $locale)
  400. ->andWhere('p.date_publication IS NULL OR p.date_publication <= :currentDate')
  401. ->setParameter('currentDate', new \DateTime())
  402. ->join('p.type_post','typepost')
  403. ->andWhere('typepost.id != 11')
  404. ->getQuery()
  405. ->getResult();
  406. return $sql;
  407. }
  408. /*****************************************************************
  409. ** requete sql ref ***
  410. *****************************************************************/
  411. public function findPostByIdSecteur($id,$id_activite,$id_secteur)
  412. {
  413. $locale = Locale::getDefault();
  414. $sql = $this->createQueryBuilder('p')
  415. ->andWhere('p.id != :id')
  416. ->join('p.translations','t')
  417. ->andWhere('t.actif = true')
  418. ->andWhere('p.id_secteur = :id_secteur')
  419. ->andWhere('p.id_activite = :id_activite')
  420. ->andWhere('t.locale = :locale')
  421. ->setParameter('locale', $locale)
  422. ->setParameter('id_secteur', $id_secteur)
  423. ->setParameter('id_activite', $id_activite)
  424. ->setParameter('id', $id)
  425. ->getQuery()
  426. ->getResult();
  427. return $sql;
  428. }
  429. public function findPageRefByIdActivite($id_activite,$id_diff = null)
  430. {
  431. $locale = Locale::getDefault();
  432. $sql = $this->createQueryBuilder('p')
  433. ->join('p.translations','t')
  434. ->join('p.type_post','typepost')
  435. ->andWhere('typepost.id = 11')
  436. ->andWhere('t.actif = true')
  437. ->andWhere('p.id_activite = :id_activite')
  438. ->andWhere('t.locale = :locale')
  439. ->andWhere('p.date_publication IS NULL OR p.date_publication <= :currentDate')
  440. ->setParameter('currentDate', new \DateTime())
  441. ->setParameter('locale', $locale)
  442. ->setParameter('id_activite', $id_activite)
  443. ->andWhere('p.id_sous_activite is NULL')
  444. ->setMaxResults(3)
  445. ->orderBy('p.id','desc');
  446. if ($id_diff != null) {
  447. $sql->andWhere('p.id != :id_diff')
  448. ->setParameter('id_diff', $id_diff);
  449. }
  450. return $sql->getQuery()->getResult();
  451. }
  452. public function findPageRefByIdSousActivite($id_sous_activite,$id_diff = null)
  453. {
  454. $locale = Locale::getDefault();
  455. $sql = $this->createQueryBuilder('p')
  456. ->join('p.translations','t')
  457. ->join('p.type_post','typepost')
  458. ->andWhere('typepost.id = 11')
  459. ->andWhere('t.actif = true')
  460. ->andWhere('p.id_sous_activite = :id_sous_activite')
  461. ->andWhere('t.locale = :locale')
  462. ->setParameter('locale', $locale)
  463. ->andWhere('p.date_publication IS NULL OR p.date_publication <= :currentDate')
  464. ->setParameter('currentDate', new \DateTime())
  465. ->setParameter('id_sous_activite', $id_sous_activite)
  466. ->setMaxResults(3)
  467. ->orderBy('p.id','desc');
  468. if ($id_diff != null) {
  469. $sql->andWhere('p.id != :id_diff')
  470. ->setParameter('id_diff', $id_diff);
  471. }
  472. return $sql->getQuery()->getResult();
  473. }
  474. public function findPageRefByIdActiviteAndIdSousActivite($id_activite,$id_sous_activite,$id_diff = null)
  475. {
  476. $locale = Locale::getDefault();
  477. $sql = $this->createQueryBuilder('p')
  478. ->join('p.translations','t')
  479. ->join('p.type_post','typepost')
  480. ->andWhere('typepost.id = 11')
  481. ->andWhere('t.actif = true')
  482. ->andWhere('p.id_activite = :id_activite')
  483. ->andWhere('t.locale = :locale')
  484. ->setParameter('locale', $locale)
  485. ->setParameter('id_activite', $id_activite)
  486. ->andWhere('p.id_sous_activite = :id_sous_activite')
  487. ->setParameter('id_sous_activite', $id_sous_activite)
  488. ->setMaxResults(3)
  489. ->orderBy('p.id','desc');
  490. if ($id_diff != null) {
  491. $sql->andWhere('p.id != :id_diff')
  492. ->setParameter('id_diff', $id_diff);
  493. }
  494. return $sql->getQuery()->getResult();
  495. }
  496. public function findPageClientByIdActiviteOrSousActivite($id_activite,$type = 'activite')
  497. {
  498. $locale = Locale::getDefault();
  499. $sql = $this->createQueryBuilder('p')
  500. ->join('p.translations','t')
  501. ->join('p.type_post','typepost')
  502. ->andWhere('typepost.id != 11')
  503. ->andWhere('t.actif = true')
  504. ->andWhere('p.date_publication IS NULL OR p.date_publication <= :currentDate')
  505. ->setParameter('currentDate', new \DateTime())
  506. ->andWhere('t.locale = :locale')
  507. ->setParameter('locale', $locale);
  508. if ($type == 'activite') {
  509. $sql->andWhere('p.id_activite = :id_activite')
  510. ->setParameter('id_activite', $id_activite);
  511. }else{
  512. $sql->andWhere('p.id_sous_activite = :id_sous_activite')
  513. ->setParameter('id_sous_activite', $id_activite);
  514. }
  515. $sql->setMaxResults(3)->orderBy('p.id','desc');
  516. return $sql->getQuery()->getResult();
  517. }
  518. public function findPageClientByIdActiviteAndSousActivite($id_activite,$sous_activite)
  519. {
  520. $locale = Locale::getDefault();
  521. $sql = $this->createQueryBuilder('p')
  522. ->join('p.translations','t')
  523. ->join('p.type_post','typepost')
  524. ->andWhere('typepost.id != 11')
  525. ->andWhere('t.actif = true')
  526. ->andWhere('t.locale = :locale')
  527. ->setParameter('locale', $locale)
  528. ->andWhere('p.id_activite = :id_activite')
  529. ->setParameter('id_activite', $id_activite)
  530. ->andWhere('p.id_sous_activite = :id_sous_activite')
  531. ->setParameter('id_sous_activite', $sous_activite);
  532. $sql->setMaxResults(3)->orderBy('p.id','desc');
  533. return $sql->getQuery()->getResult();
  534. }
  535. public function findPageRefByIdsSousActivite($ids_sous_activite = [])
  536. {
  537. $locale = Locale::getDefault();
  538. $req1 = $this->createQueryBuilder('p')
  539. ->join('p.translations','t')
  540. ->join('p.type_post','typepost')
  541. ->andWhere('typepost.id = 11')
  542. ->andWhere('t.actif = true')
  543. ->andWhere('p.actif_home = true')
  544. ->andWhere('p.id_sous_activite IN (:ids_sous_activite)')
  545. ->andWhere('p.type_page_ref = :type_page_ref')
  546. ->andWhere('t.locale = :locale')
  547. ->andWhere('p.date_publication IS NULL OR p.date_publication <= :currentDate')
  548. ->setParameter('currentDate', new \DateTime())
  549. ->setParameter('locale', $locale)
  550. ->setParameter('ids_sous_activite', $ids_sous_activite)
  551. ->setParameter('type_page_ref', 'activite_secondaire')
  552. ->setMaxResults(3)
  553. ->orderBy('p.id','desc')->getQuery()->getResult();
  554. if (empty($req1)) {
  555. $req1 = $this->createQueryBuilder('p')
  556. ->join('p.translations','t')
  557. ->join('p.type_post','typepost')
  558. ->andWhere('typepost.id = 11')
  559. ->andWhere('t.actif = true')
  560. // ->andWhere('p.actif_home = true')
  561. ->andWhere('p.id_sous_activite IN (:ids_sous_activite)')
  562. ->andWhere('p.type_page_ref = :type_page_ref')
  563. ->andWhere('t.locale = :locale')
  564. ->setParameter('locale', $locale)
  565. ->setParameter('ids_sous_activite', $ids_sous_activite)
  566. ->andWhere('p.date_publication IS NULL OR p.date_publication <= :currentDate')
  567. ->setParameter('currentDate', new \DateTime())
  568. ->setParameter('type_page_ref', 'activite_secondaire')
  569. ->setMaxResults(3)
  570. ->orderBy('RAND()')
  571. ->orderBy('p.id','desc')->getQuery()->getResult();
  572. }
  573. return $req1;
  574. }
  575. public function findPageRefByIdsSousActiviteAndActivitePrincipal($id_activite,$id_secteur = null)
  576. {
  577. $locale = Locale::getDefault();
  578. $sql = $this->createQueryBuilder('p')
  579. ->join('p.translations','t')
  580. ->join('p.type_post','typepost')
  581. ->andWhere('typepost.id = 11')
  582. ->andWhere('t.actif = true')
  583. ->andWhere('p.id_sous_activite IS NOT NULL')
  584. ->andWhere('p.date_publication IS NULL OR p.date_publication <= :currentDate')
  585. ->setParameter('currentDate', new \DateTime())
  586. //->andWhere('p.id_sous_activite IN (:ids_sous_activite)')
  587. // ->setParameter('ids_sous_activite', $ids_sous_activite)
  588. ->andWhere('p.type_page_ref = :type_page_ref')
  589. ->andWhere('p.id_activite = :id_activite')
  590. ->andWhere('t.locale = :locale')
  591. ->setParameter('locale', $locale)
  592. ->setParameter('id_activite', $id_activite)
  593. ->setParameter('type_page_ref', 'activite_secondaire');
  594. if ($id_secteur != null) {
  595. $sql->andWhere('p.id_secteur = :id_secteur')
  596. ->setParameter('id_secteur', $id_secteur);
  597. }
  598. $sql->groupBy('p.id_sous_activite')
  599. //->distinct('p.id_secteur');
  600. ->orderBy('RAND()')
  601. ->setMaxResults(3);
  602. //->orderBy('p.id','desc');
  603. return $sql->getQuery()->getResult();
  604. }
  605. public function findAllPostNotArchived($locale)
  606. {
  607. $sql = $this->createQueryBuilder('p')
  608. ->join('p.translations','t')
  609. ->andWhere('p.post_archive = 0 OR p.post_archive is null')
  610. ->andWhere('t.locale = :locale')
  611. ->setParameter('locale', $locale);
  612. $sql->orderBy('p.position','ASC');
  613. return $sql->getQuery()->getResult();
  614. }
  615. /********************* Sql gestion des produits suivant categories ***********************/
  616. public function findPostBySpecifiqueCategory($categorie,$page = 1,$categorie_ids = [])
  617. {
  618. // $id_categorie = $categorie->getId();
  619. $pagination = $categorie->getPagination() != null ? $categorie->getPagination() : false;
  620. $page_size = $categorie->getPageSize() != null ? $categorie->getPageSize() : 10;
  621. $order_by = $categorie->getOrderBy();
  622. switch ($order_by) {
  623. case 0:
  624. $req_order = "p.date_publication";
  625. $asc_desc = "ASC";
  626. break;
  627. case 1:
  628. $req_order = "p.id";
  629. $asc_desc = "ASC";
  630. break;
  631. case 2:
  632. $req_order = "p.date_publication";
  633. $asc_desc = "DESC";
  634. break;
  635. case 3:
  636. $req_order = "p.id";
  637. $asc_desc = "DESC";
  638. break;
  639. case 4:
  640. $req_order = "p.position";
  641. $asc_desc = "ASC";
  642. break;
  643. default:
  644. $req_order = "p.position";
  645. $asc_desc = "ASC";
  646. }
  647. $locale = Locale::getDefault();
  648. $sql = $this->createQueryBuilder('p')
  649. ->join('p.translations','t')
  650. ->join('p.PostCategory','post_categorie')
  651. ->andWhere('t.actif = true')
  652. ->andWhere('p.archive IS NULL OR p.archive = false')
  653. ->andWhere('post_categorie.Category = :categorie or post_categorie.Category IN (:categorie_ids)')
  654. ->andWhere('p.date_publication IS NULL OR p.date_publication <= :currentDate')
  655. ->setParameter('currentDate', new \DateTime())
  656. ->andWhere('t.locale = :locale')
  657. ->setParameter('locale', $locale)
  658. ->setParameter('categorie_ids', $categorie_ids)
  659. ->setParameter('categorie', $categorie)
  660. ->addOrderBy('CASE WHEN p.generate_with_ai = 1 THEN 1 ELSE 0 END,'. $req_order, $asc_desc)
  661. ->orderBy($req_order, $asc_desc);
  662. if ($pagination == true) {
  663. return (new Paginator($sql))->paginate($page,$page_size);
  664. }else{
  665. return $sql->getQuery()->getResult();
  666. }
  667. }
  668. /**************** get produit related *************/
  669. public function findProductRelated($type,$diff_id,$id_default_categorie)
  670. {
  671. $locale = Locale::getDefault();
  672. $sql = $this->createQueryBuilder('p')
  673. ->join('p.translations','t')
  674. ->andWhere('t.actif = true')
  675. ->andWhere('p.id != :diff_id')
  676. ->andWhere('p.default_categorie = :id_default_categorie')
  677. ->andWhere('p.post_archive = 0 OR p.post_archive is null')
  678. ->join('p.type_post','typePost')
  679. ->andWhere('typePost.id = :type')
  680. ->andWhere('t.locale = :locale')
  681. ->setParameter('id_default_categorie', $id_default_categorie)
  682. ->setParameter('locale', $locale)
  683. ->setParameter('diff_id', $diff_id)
  684. ->setParameter('type', $type);
  685. return $sql->getQuery()->getResult();
  686. }
  687. /**************** get related Annonces *************/
  688. public function findRelatedAnnonces($type,$diff_id)
  689. {
  690. $locale = Locale::getDefault();
  691. $sql = $this->createQueryBuilder('p')
  692. ->join('p.translations','t')
  693. ->andWhere('t.actif = true')
  694. ->andWhere('p.id != :diff_id')
  695. ->andWhere('p.post_archive = 0 OR p.post_archive is null')
  696. ->join('p.type_post','typePost')
  697. ->andWhere('typePost.id = :type')
  698. ->andWhere('t.locale = :locale')
  699. ->setParameter('locale', $locale)
  700. ->setParameter('diff_id', $diff_id)
  701. ->setParameter('type', $type);
  702. return $sql->getQuery()->getResult();
  703. }
  704. /*****************************************************************************************/
  705. /********************** Affichage Détails produit pour le panier *************************/
  706. public function getCartProductInfos($id)
  707. {
  708. $locale = Locale::getDefault();
  709. $sql = $this->createQueryBuilder('p')
  710. ->select('p.id', 't.title', 'p.prix_produit', 'p.image')
  711. ->join('p.translations','t')
  712. ->andWhere('t.actif = true')
  713. ->andWhere('p.id = :id')
  714. ->andWhere('p.post_archive = 0 OR p.post_archive is null')
  715. ->join('p.type_post','typePost')
  716. ->andWhere('t.locale = :locale')
  717. ->setParameter('locale', $locale)
  718. ->setParameter('id', $id)
  719. ->getQuery()
  720. ->getOneOrNullResult();
  721. return $sql;
  722. }
  723. /*****************************************************************************************/
  724. /* find slug page by alias */
  725. public function findSlugPageByAlias($alias)
  726. {
  727. $locale = Locale::getDefault();
  728. $sql = $this->createQueryBuilder('p')
  729. ->join('p.translations','t')
  730. ->andWhere('t.locale = :locale')
  731. ->setParameter('locale', $locale)
  732. ->andWhere('p.alias = :alias')
  733. ->setParameter('alias', $alias);
  734. return $sql->getQuery()->getOneOrNullResult();
  735. }
  736. public function findSlugPageById($id_post)
  737. {
  738. $locale = Locale::getDefault();
  739. $sql = $this->createQueryBuilder('p')
  740. ->select('t.slug')
  741. ->join('p.translations','t')
  742. ->andWhere('t.locale = :locale')
  743. ->setParameter('locale', $locale)
  744. ->andWhere('p.id = :id_post')
  745. ->setParameter('id_post', $id_post);
  746. return $sql->getQuery()->getOneOrNullResult();
  747. }
  748. public function findSystemNameByIdPost($id_post)
  749. {
  750. $locale = Locale::getDefault();
  751. $sql = $this->createQueryBuilder('p')
  752. ->select('typePost.id')
  753. ->join('p.type_post','typePost')
  754. // ->join('typePost.translations','translation')
  755. ->andWhere('p.id = :id_post')
  756. ->setParameter('id_post', $id_post)
  757. ->getQuery()
  758. ->getOneOrNullResult();
  759. return $sql;
  760. }
  761. public function findPageParentByCategoryId($categoryId)
  762. {
  763. $locale = Locale::getDefault();
  764. $sql = $this->createQueryBuilder('p')
  765. ->where('p.ids_categoies_related LIKE :categoryId')
  766. ->setParameter('categoryId', '%'.$categoryId.'%')
  767. ->getQuery()
  768. ->getOneOrNullResult();
  769. return $sql;
  770. }
  771. public function findPostNotValidImage()
  772. {
  773. $locale = Locale::getDefault();
  774. $sql = $this->createQueryBuilder('p')
  775. ->andWhere('t.actif = true')
  776. ->join('p.translations','t')
  777. ->andWhere('p.image IS NOT NULL')
  778. ->andWhere('p.image_import_valide is null');
  779. //->setMaxResults('10');
  780. return $sql->getQuery()->getResult();
  781. }
  782. public function findPostArchive()
  783. {
  784. $locale = Locale::getDefault();
  785. $sql = $this->createQueryBuilder('p')
  786. ->andWhere('t.actif = true')
  787. ->andWhere('p.archive = true')
  788. ->join('p.translations','t')
  789. ->orderBy('p.id','ASC');
  790. return $sql->getQuery()->getResult();
  791. }
  792. /******************* post aleatoire ***************************/
  793. public function findPostAleatoire($type,$nb = 1,$id)
  794. {
  795. $locale = Locale::getDefault();
  796. $sql = $this->createQueryBuilder('p')
  797. ->join('p.translations','t')
  798. ->join('p.type_post','typePost')
  799. ->andWhere('typePost.id = :type')
  800. ->andWhere('t.actif = true')
  801. ->andWhere('t.locale = :locale')
  802. ->setParameter('locale', $locale)
  803. ->setParameter('type', $type)
  804. ->andWhere('p.id != :id')
  805. ->setParameter('id', $id)
  806. // ->andWhere('p.date_publication IS NULL OR p.date_publication <= :currentDate')
  807. // ->setParameter('currentDate', new \DateTime('now'))
  808. ->orderBy('RAND()')
  809. ->setMaxResults($nb);
  810. return $sql->getQuery()->getResult();
  811. }
  812. public function findPostAssocier($type,$id = null)
  813. {
  814. $locale = Locale::getDefault();
  815. $sql = $this->createQueryBuilder('p')
  816. ->join('p.translations','t')
  817. ->join('p.type_post','typePost')
  818. ->andWhere('typePost.id = :type')
  819. ->andWhere('t.actif = true')
  820. ->andWhere('t.locale = :locale')
  821. ->setParameter('locale', $locale)
  822. ->setParameter('type', $type);
  823. if($id != null){
  824. $sql->andWhere('p.id != :id_post')
  825. ->setParameter('id_post', $id);
  826. }
  827. return $sql->getQuery()->getResult();
  828. }
  829. public function findPostExpressionBySpecifiqueCategory($id_categorie)
  830. {
  831. $req_order = "p.position";
  832. $asc_desc = "ASC";
  833. $locale = Locale::getDefault();
  834. $sql = $this->createQueryBuilder('p')
  835. ->join('p.translations','t')
  836. ->join('p.PostCategory','post_categorie')
  837. ->andWhere('t.actif = true')
  838. ->andWhere('post_categorie.Category =:categorie_id')
  839. ->andWhere('t.locale = :locale')
  840. ->setParameter('locale', $locale)
  841. ->setParameter('categorie_id', $id_categorie)
  842. ->orderBy($req_order, $asc_desc);
  843. return $sql->getQuery()->getResult();
  844. }
  845. }