<?php
namespace DAO;
if ( ! defined('BASEPATH')) exit('No direct script access allowed');

/**
 * CodeIgniter
 *
 * An open source application development framework for PHP 5.1.6 or newer
 *
 * @package		CodeIgniter
 * @author		jcheron
 * @copyright	Copyright (c) 2008 - 2014, EllisLab, Inc.
 * @license		lgpl
 * @version 1.0
 * @filesource
 */

// ------------------------------------------------------------------------

/**
 * Doctrine Helpers
 *
 * @package		CodeIgniter
 * @subpackage	Helpers
 * @category	Helpers
 * @author		jcheron
 * @link		http://slamwiki.kobject.net
 */

// ------------------------------------------------------------------------
	/**
	 * Retourne une instance de $className depuis la base de données, à  partir des valeurs $keyValues de la clé primaire
	 * @param String $className
	 * @param Array or condition $keyValues
	 */
	if(!function_exists("getOne")){
		function getOne($className,$keyValues){
			$CI =& get_instance();
			return $CI->doctrine->em->find($className,$keyValues);
		}
	}


	/**
	 * Retourne un tableau d'objets de $className depuis la base de données
	 * @param string $className
	 * @param string $condition
	 * @return multitype:$className
	 */
	if(!function_exists("getAll")){
		function getAll($className,$condition=''){
			$CI =& get_instance();
			if($condition!=''){
				if(strrpos(strtolower($condition), "where", -strlen($condition)) === FALSE)
					$condition="where ".$condition;
			}
			$query = $CI->doctrine->em->createQuery("SELECT o FROM ".$className." o ".$condition);
			return $query->getResult();
		}
	}
	/**
	 * Supprime $instance dans la base de données
	 * @param $instance instance à supprimer
	 */
	if(!function_exists("delete")){

		function delete($instance){
			$CI =& get_instance();
			$CI->doctrine->em->remove($instance);
			$CI->doctrine->em->flush();
		}
	}

	/**
	 * Supprime une instance de $className dont l'id est donné dans la base de données
	 * @param $className classe de l'objet à supprimer
	 * @param $id id de l'objet  supprimer
	 * @return true en cas de suppression effective
	 */
	if(!function_exists("remove")){

		function remove($className,$id){
			$o=getReference($className, $id);
			if($o!=null){
				delete($o);
				return true;
			}
			return false;
		}
	}

	/**
	 * Met à jour l'objet dans la BDD (mise à jour ou insertion)
	 * @param $instance objet à mettre à jour
	 */
	if(!function_exists("update")){

		function update($instance){
			$CI =& get_instance();
			$CI->doctrine->em->persist($instance);
			$CI->doctrine->em->flush();
		}
	}

	/**
	 * Retourne une référence d'objet pour la classe $className d'id $id
	 */
	if(!function_exists("getReference")){
		function getReference($className,$id){
			$CI =& get_instance();
			return $CI->doctrine->em->getReference($className,$id);
		}
	}