<?php
namespace Notaris\AdminBundle\Entity;
use Doctrine\ORM\EntityRepository;
use Symfony\Component\Debug\Exception\UndefinedMethodException;
/**
* SectionRepository
*
* This class was generated by the Doctrine ORM. Add your own custom
* repository methods below.
*/
class SectionRepository extends EntityRepository
{
/**
* @param $subsite
* @return array
* @throws \Doctrine\DBAL\DBALException
*/
public function getSections($subsite)
{
$em = $this->getEntityManager();
$sql = "SELECT s
FROM NotarisAdminBundle:Section s LEFT JOIN NotarisAdminBundle:Meta m WITH s.meta = m.id
WHERE s.parent is null AND s.subsite = :subsite
ORDER BY s.position ASC";
$query = $em->createQuery($sql);
$query = $query->setParameter('subsite', $subsite);
$result = $query->getResult();
return $result;
}
/**
* @param $parent_id
* @return array
* @throws \Doctrine\DBAL\DBALException
*/
public function getChildren($parent_id)
{
$em = $this->getEntityManager();
$sql = "SELECT s
FROM NotarisAdminBundle:Section s LEFT JOIN NotarisAdminBundle:Meta m WITH s.meta = m.id
WHERE s.parent = :parent
ORDER BY s.position ASC";
$query = $em->createQuery($sql);
$query = $query->setParameter('parent', $parent_id);
$result = $query->getResult();
return $result;
}
/**
* @param $id
* @return array
* @throws \Doctrine\DBAL\DBALException
*/
public function getSection($id)
{
$em = $this->getEntityManager();
$con = $em->getConnection();
$sql = "SELECT s
FROM NotarisAdminBundle:Section s LEFT JOIN NotarisAdminBundle:Meta m WITH s.meta = m.id
WHERE s.id = :parent
ORDER BY s.position ASC";
$query = $em->createQuery($sql);
$query = $query->setParameter('parent', $id);
$result = $query->getResult();
return $result;
}
/**
* @param $parent_id
* @return mixed
*/
public function getNextParent($parent_id)
{
$em = $this->getEntityManager();
$con = $em->getConnection();
$sql = "SELECT s.parent_id FROM section s WHERE s.id = :parent LIMIT 1";
$stmt = $con->prepare($sql);
$stmt->bindValue('parent', $parent_id);
$stmt = $stmt->execute();
return $stmt->fetchOne();
}
/**
* @param $subsite
* @return mixed
*/
public function getMaxPosition($subsite, $parent_id)
{
$em = $this->getEntityManager();
$con = $em->getConnection();
$where_parent = $parent_id ? 'AND parent_id =:parent_id' : '';
$sql = "SELECT MAX(section.position) as max
FROM section
INNER JOIN subsite s ON s.id = section.subsite_id
WHERE s.slug = :slug " . $where_parent;
$stmt = $con->prepare($sql);
$stmt->bindValue('slug', $subsite);
if ($parent_id) {
$stmt->bindValue('parent_id', $parent_id);
}
$stmt = $stmt->execute();
return $stmt->fetchOne();
}
public function getSectionBySlug($slug)
{
$query = $this->getEntityManager()
->createQuery(
'SELECT s FROM
NotarisAdminBundle:Section s
WHERE s.slug = :slug
AND s.isActive = true
AND s.publicationDate <= :now'
)
->setParameter('now', new \DateTime('now'))
->setParameter('slug', $slug);
$sectie = $query->getResult();
if($sectie){
return array_shift($sectie);
}
return false;
}
public function getFirstSectionFromSubsite(Subsite $subsite)
{
$query = $this->getEntityManager()
->createQuery(
'SELECT s FROM
NotarisAdminBundle:Section s
WHERE s.subsite = :subsite
AND s.isActive = true
AND s.publicationDate <= :now
ORDER BY s.id'
)
->setParameter('now', new \DateTime('now'))
->setParameter('subsite', $subsite);
$sectie = $query->getResult();
if($sectie){
return array_shift($sectie);
}
return false;
}
public function getAllSectionsFromSubsite(Subsite $subsite)
{
$query = $this->getEntityManager()
->createQuery(
'SELECT s FROM
NotarisAdminBundle:Section s
WHERE s.subsite = :subsite
AND s.isActive = true
AND s.publicationDate <= :now
AND s.show_navigation = true
AND s.parent IS NULL
ORDER BY s.updated DESC'
)
->setParameter('now', new \DateTime('now'))
->setParameter('subsite', $subsite);
$sectie = $query->getResult();
if($sectie){
return $sectie;
}
return false;
}
public function getAllSectionsFromParent(Section $section)
{
$query = $this->getEntityManager()
->createQuery(
'SELECT s FROM
NotarisAdminBundle:Section s
WHERE s.isActive = true
AND s.publicationDate <= :now
AND s.show_navigation = true
AND s.parent = :parent
ORDER BY s.updated DESC'
)
->setParameter('now', new \DateTime('now'))
->setParameter('parent', $section);
$sectie = $query->getResult();
if($sectie){
return $sectie;
}
return false;
}
public function getSectionBySlugPreview($slug)
{
$query = $this->getEntityManager()
->createQuery(
'SELECT s FROM
NotarisAdminBundle:Section s
WHERE s.slug = :slug'
)
->setParameter('slug', $slug);
$sectie = $query->getResult();
if($sectie){
return array_shift($sectie);
}
return false;
}
public function getPreviewSectionBySlug($slug)
{
$query = $this->getEntityManager()
->createQuery(
'SELECT s FROM
NotarisAdminBundle:Section s
WHERE s.slug = :slug'
)
->setParameter('slug', $slug);
$sectie = $query->getResult();
if($sectie){
return array_shift($sectie);
}
return false;
}
public function search($keyword, $locale='nl') {
$searchResults = $this->createQueryBuilder('s')
->select('s')
->addSelect("MATCH_AGAINST (s.title, s.description, s.navigation, :address 'IN BOOLEAN MODE') as score")
->innerJoin('s.subsite','sub')
->where('sub.locale = :locale AND s.publicationDate <= :now AND s.isActive = 1 AND sub.isActive = 1')
->andWhere("MATCH_AGAINST(s.title, s.description, s.navigation, :address 'IN BOOLEAN MODE') > 0.2")
->setParameter('address', $keyword)
->setParameter('locale', $locale)
->setParameter('now', new \DateTime('now'))
->orderBy('score', 'desc')
->getQuery()
->getResult();
if($searchResults){
return $searchResults;
}
return false;
}
public function getFirstSections(Subsite $subsite) {
$searchResults = $this->createQueryBuilder('s')
->select('s')
->where('s.subsite = :subsite')
->andWhere("s.parent IS NULL")
->setParameter('subsite', $subsite)
->orderBy('s.position', 'asc')
->getQuery()
->getResult();
if($searchResults){
return $searchResults;
}
return false;
}
}