<?php

namespace OfficeBrain\Bundle\CmsBundle\Entity;

use Doctrine\ORM\EntityRepository;

/**
 * CmsMenuItemRepository.
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class CmsMenuItemRepository extends EntityRepository
{
    protected $projectSetting;
    protected $instanceId;
    protected $instanceType;
    protected $cultureId;
    protected $cultureCode;

    /**
     * @author Employee Id: 4494
     * Description : Set project settings
     */
    public function setProjectSetting($projetSetting)
    {
        $this->projectSetting = $projetSetting;
        $this->prepareProjectSettingData();
    }

    /**
     * @author Employee Id: 4494
     * Description : Get project settings
     */
    public function getProjectSetting()
    {
        return $this->projetSetting;
    }

    /**
     * @author Employee Id: 4494
     * Description : Prepare data from project setting
     */
    public function prepareProjectSettingData()
    {
        $this->instanceId = $this->projectSetting['instance_id'];
        $this->instanceType = $this->projectSetting['instance_type'];
        $this->userId = $this->projectSetting['user_id'];
        $this->cultureId = $this->projectSetting['culture_id'];
        $this->cultureCode = $this->projectSetting['culture_code'];
    }

    public function find($id, $lockMode = NULL, $lockVersion = NULL)
    {
        return $this->createQueryBuilder('cmi')
                    ->select('cmi')
                    ->where('cmi.id =:id')
                    ->setParameter(':id', $id)
                    ->getQuery()
                    ->getOneOrNullResult();
    }

    public function findByParentId($parentId)
    {
        return $this->createQueryBuilder('cmi')
                    ->select('cmi')
                    ->where('cmi.parentId =:parentId')
                    ->setParameter(':parentId', $parentId)
                    ->getQuery()
                    ->getResult();
    }
    
    public function findByMenuIdAndItemId($menuId, $itemId)
    {
        return $this->createQueryBuilder('mi')
        ->select('mi')
        ->where('mi.id = :itemId')
        ->andWhere('mi.menuId = :menuId')
        ->andWhere('mi.deletedAt IS NULL')
        ->setParameter('itemId', $itemId)
        ->setParameter('menuId', $menuId)
        ->getQuery()
        ->getOneOrNullResult();
    }

    public function set($cmsMenuItem)
    {
        $this->persist($cmsMenuItem);
        $this->flush();

        return $cmsMenuItem;
    }
    
    public function persist($cmsMenuItem) {
    	$this->_em->persist($cmsMenuItem);
    }
    
    public function flush($entity = NULL) {
    	$this->_em->flush();
    }

    public function remove($cmsMenuItem)
    {
        $this->_em->remove($cmsMenuItem);
        $this->_em->flush();
    }
    public function getTagListFromCmsMenu($id='')
    {
    	$query=$this->createQueryBuilder('cmsmenuitem');
    	$query->select('cmsmenuitem.id');
    	$query->where("cmsmenuitem.referenceId = :categoryId");
    	$query->setParameter("categoryId", $id);
    	$catArray = $query->getQuery()->getArrayResult();
    	
    	/*get all item match with id*/
    	if(count($catArray)>0)
    	{
	    	array_walk($catArray, function (&$a, $b) {
	    		return $a = $a['id'];
	    	});
	    	$query=$this->createQueryBuilder('cmsmenuitem');
	    	$query->select('cmsmenuitem.referenceId as id','cmsmenuitem.itemType as menutype');
	    	$query->where($query->expr()->in('cmsmenuitem.parentId', $catArray));
	    	return $query->getQuery()->getArrayResult();
	    }
    	return $catArray;	 
    	
    }

    public function UpdateCmsMenu($CmsMenuItemObj,$referenceId,$jsonData)
    {   $em = $this->getEntityManager();
    $CmsMenuItemObj->setJsonString($jsonData);
    $CmsMenuItemObj->setReferenceId($referenceId);
    $em->persist($CmsMenuItemObj);
    $em->flush();
    
    }
}
