<?php

namespace Reservation;

use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
use Zend\Mvc\ModuleRouteListener;
use Zend\Mvc\MvcEvent;
use Zend\ModuleManager\Feature\ConfigProviderInterface;
use Zend\ModuleManager\Feature\ServiceProviderInterface;

use Reservation\Model\Residences;
use Reservation\Model\ResidencesTable;

use Reservation\Model\Etudiants;
use Reservation\Model\EtudiantsTable;

use Reservation\Model\User;
use Reservation\Model\UserTable;

use Reservation\Model\Canal;
use Reservation\Model\CanalTable;

use Reservation\Model\Code;
use Reservation\Model\CodeTable;

use Reservation\Model\Resa;
use Reservation\Model\ResaTable;

use Reservation\Model\Batiment;
use Reservation\Model\BatimentTable;

use Reservation\Model\Logement;
use Reservation\Model\LogementTable;

use Reservation\Model\StockCS;
use Reservation\Model\StockCSTable;

use Reservation\Model\Typelogement;
use Reservation\Model\TypelogementTable;

use Reservation\Model\Logs;
use Reservation\Model\LogsTable;

use Reservation\Model\Locataires;
use Reservation\Model\LocatairesTable;

use Reservation\Model\LocatairesADP;
use Reservation\Model\LocatairesADPTable;

use Reservation\Model\Programme;
use Reservation\Model\ProgrammeTable;

use Reservation\Model\Campagne;
use Reservation\Model\CampagneTable;

use Reservation\Model\Document;
use Reservation\Model\DocumentTable;

use Reservation\Model\Typedocument;
use Reservation\Model\TypedocumentTable;

use Reservation\Model\Typemail;
use Reservation\Model\TypemailTable;

use Reservation\Model\Configuration;
use Reservation\Model\ConfigurationTable;

use Reservation\Model\Tarif;
use Reservation\Model\TarifTable;

use Reservation\Model\Etudianthome;
use Reservation\Model\EtudianthomeTable;

use Reservation\Model\Listes;
use Reservation\Model\ListesTable;

use Reservation\Model\Modelesmail;
use Reservation\Model\ModelesmailTable;

use Reservation\Model\Modelescampagne;
use Reservation\Model\ModelescampagneTable;

use Reservation\Model\Gestionnaire;
use Reservation\Model\GestionnaireTable;

use Reservation\Model\Droit;
use Reservation\Model\DroitTable;

use Reservation\Model\Historiquemail;
use Reservation\Model\HistoriquemailTable;

use Reservation\Model\Champdynamique;
use Reservation\Model\ChampdynamiqueTable;

use Reservation\Model\Valeurschampdynamique;
use Reservation\Model\ValeurschampdynamiqueTable;

use Reservation\Model\Formulaire;
use Reservation\Model\FormulaireTable;

use Reservation\Model\Choix;
use Reservation\Model\ChoixTable;

use Reservation\Model\Groupe;
use Reservation\Model\GroupeTable;

use Reservation\Model\Grouperesa;
use Reservation\Model\GrouperesaTable;

use Reservation\Model\Groupecontact;
use Reservation\Model\GroupecontactTable;

use Reservation\Model\Traduction;
use Reservation\Model\TraductionTable;

use Reservation\Model\Langue;
use Reservation\Model\LangueTable;

use Reservation\Model\Apipaiement;
use Reservation\Model\ApipaiementTable;

use Reservation\Model\Apisetting;
use Reservation\Model\ApisettingTable;

use Reservation\Model\Champs;
use Reservation\Model\ChampsTable;

use Reservation\Model\Etatintercontrat;
use Reservation\Model\EtatintercontratTable;

use Reservation\Model\Etatintercontratconfig;
use Reservation\Model\EtatintercontratconfigTable;

use Reservation\Model\LocatairesAccesResa;
use Reservation\Model\LocatairesAccesResaTable;

use Reservation\Model\EdlBaseArticle;
use Reservation\Model\EdlBaseArticleTable;

use Reservation\Model\EdlBaseCat;
use Reservation\Model\EdlBaseCatTable;

use Reservation\Model\EdlBaseSousCat;
use Reservation\Model\EdlBaseSousCatTable;

use Reservation\Model\EdlModeleArticle;
use Reservation\Model\EdlModeleArticleTable;

use Reservation\Model\EdlModeleSousCat;
use Reservation\Model\EdlModeleSousCatTable;

use Reservation\Model\EdlModeleCat;
use Reservation\Model\EdlModeleCatTable;

use Reservation\Model\EdlModele;
use Reservation\Model\EdlModeleTable;

use Reservation\Model\Edl;
use Reservation\Model\EdlTable;

use Reservation\Model\EdlCat;
use Reservation\Model\EdlCatTable;

use Reservation\Model\EdlSousCat;
use Reservation\Model\EdlSousCatTable;

use Reservation\Model\EdlArticle;
use Reservation\Model\EdlArticleTable;

use Reservation\Model\EdlParametres;
use Reservation\Model\EdlParametresTable;

use Reservation\Model\EdlPrestations;
use Reservation\Model\EdlPrestationsTable;

use Zend\Db\ResultSet\ResultSet;
use Zend\Db\TableGateway\TableGateway;

use Reservation\Model\Demandes;
use Reservation\Model\DemandesTable;

use Reservation\Model\DemandesModeles;
use Reservation\Model\DemandesModelesTable;

use Reservation\Model\ChampsDemandes;
use Reservation\Model\ChampsDemandesTable;

use Reservation\Model\RdvParametresHoraires;
use Reservation\Model\RdvParametresHorairesTable;

use Reservation\Model\RdvParametresGestionRessources;
use Reservation\Model\RdvParametresGestionRessourcesTable;

use Reservation\Model\RdvRenonce;
use Reservation\Model\RdvRenonceTable;

use Reservation\Model\Rdv;
use Reservation\Model\RdvTable;

use Reservation\Model\Joursferies;
use Reservation\Model\JoursferiesTable;

use Reservation\Model\Helper;
use Reservation\Model\HelperTable;

use Reservation\Model\Colis;
use Reservation\Model\ColisTable;
use Reservation\Model\Apisignature;
use Reservation\Model\ApisignatureTable;

use Reservation\Model\Apisettingsignature;
use Reservation\Model\ApisettingsignatureTable;

use Reservation\Model\Apipms;
use Reservation\Model\ApipmsTable;

use Reservation\Model\Apisettingpms;
use Reservation\Model\ApisettingpmsTable;

use Reservation\Model\Apisig;
use Reservation\Model\ApisigTable;

use Reservation\Model\Apisettingsig;
use Reservation\Model\ApisettingsigTable;

use Reservation\Model\Dashboard;
use Reservation\Model\DashboardTable;

use Reservation\Model\Multisuivis;
use Reservation\Model\MultisuivisTable;

use Reservation\Model\Liensconfig;
use Reservation\Model\LiensconfigTable;

use Reservation\Model\ModelesSMS;
use Reservation\Model\ModelesSMSTable;

use Reservation\Model\HistoriqueSMS;
use Reservation\Model\HistoriqueSMSTable;

use Reservation\Model\ModelescampagneSMS;
use Reservation\Model\ModelescampagneSMSTable;

use Reservation\Model\ModelesAlert;
use Reservation\Model\ModelesAlertTable;

use Reservation\Model\HistoriqueAlert;
use Reservation\Model\HistoriqueAlertTable;

use Reservation\Model\ModelescampagneAlert;
use Reservation\Model\ModelescampagneAlertTable;


use Reservation\Model\Aiguillage;
use Reservation\Model\AiguillageTable;

use Reservation\Helper\GlobalHelper;
use Reservation\Model\Tables;

use Reservation\Model\Caf;
use Reservation\Model\CafTable;

use Reservation\Model\CafDemandeIdeal;
use Reservation\Model\CafDemandeIdealTable;

use Reservation\Model\MembreResa;
use Reservation\Model\MembreResaTable;

use Reservation\Model\ConfigAccesTable;

use Reservation\Model\PrestationsBoutiqueCommandes;
use Reservation\Model\PrestationsBoutiqueCommandesTable;

use Reservation\Model\LocPush;
use Reservation\Model\LocPushTable;

use Reservation\Model\ModelesPush;
use Reservation\Model\ModelesPushTable;

use Reservation\Model\HistoriquePush;
use Reservation\Model\HistoriquePushTable;

class Module implements AutoloaderProviderInterface
{
	public function onBootstrap(MvcEvent $e)
	{
		$sm = $e->getApplication()->getServiceManager();
		$config = $sm->get('Reservation\Model\ConfigurationTable');
		$colisVal = $config->getConfig(1)->colisval;

		$userTable = $sm->get('Reservation\Model\UserTable');

		$liensConfig = $sm->get('Reservation\Model\LiensconfigTable');
		$auth = $sm->get('zfcuser_auth_service');
		$liens = array();
		$user = $auth->getIdentity();
		$utilisateur = null;
		$gestId = null;
		if ($user) {
			$gestId =  $user->getId();

			if ($gestId) {
				$liens =  $liensConfig->fetchByUser($gestId);
			}

			$utilisateur = $userTable->getUser($gestId);
		}

		$router = $sm->get('router');
		$request = $sm->get('request');
		$matchedRoute = $router->match($request);
		syslog(LOG_INFO, __FILE__.".".__FUNCTION__.".".__LINE__."_$_SERVER[REMOTE_ADDR] : gestId=$gestId");

		$params = $controller = $action = $route = null;

		## verification login PMS
		if ($_SESSION['erreurLoginPMS'] == true) {
			$redir = true;
			if ($matchedRoute) {
				$params = $matchedRoute->getParams();
				$controller = $params['controller'];
				$action = $params['action'];

				if (($controller == "Reservation\Controller\User" && $action == "monprofil") || ($controller == "Reservation\Controller\Configuration" && $action == "configglobal") || $controller == "zfcuser") {
					$redir = false;
				}
				if ($redir) {
					$e->getApplication()->getEventManager()->getSharedManager()->attach('Zend\Mvc\Controller\AbstractActionController', 'dispatch', function ($e) {
						$controller = $e->getTarget();
						$controller->plugin('redirect')->toRoute('zfcadmin/monprofil');
					}, 100);
				}
			}
		}

		## verification renouvellement mot de pass
		$adapter = $sm->get('Zend\Db\Adapter\Adapter');
		$configAccesTable = new ConfigAccesTable($adapter);
		$accesConf = $configAccesTable->getConfigAccesParType('Utilisateur');
		if ($utilisateur && (($accesConf && $accesConf->renouvellementActif == '1') || $utilisateur->isReset == 1)) {
			if ($utilisateur->isReset == 1 || (($utilisateur->date_renouvellement_mdp && strtotime($utilisateur->date_renouvellement_mdp) < strtotime(date('Y-m-d H:i:s'))) || !$utilisateur->date_renouvellement_mdp)) {
				$redirect = true;
				if ($_SESSION['mdpExpiredRedirect'] == true) {
					if ($matchedRoute) {
						$params = $matchedRoute->getParams();
						$controller = $params['controller'];
						$action = $params['action'];

						//on ne redirige pas dans ces deux cas
						if (($controller == "Reservation\Controller\User" && $action == "monprofil") || ($controller == "Reservation\Controller\Configuration" && $action == "configglobal")) {
							$redirect = false;
						}
					} else {
						$redirect = false; //pour eviter des redirection en boucle
					}
				}
				if ($redirect) {
					$e->getApplication()->getEventManager()->getSharedManager()->attach('Zend\Mvc\Controller\AbstractActionController', 'dispatch', function ($e) {
						$controller = $e->getTarget();
						$_SESSION['mdpExpiredRedirect'] = true;
						$controller->plugin('redirect')->toRoute('zfcadmin/monprofil');
					}, 100);
				}
			}
		}


		$globalHelper = new GlobalHelper($sm);

		$campTable = $sm->get('Reservation\Model\CampagneTable');
		$campagnes = $campTable->getCampagnesByUrlAcces();
		$allCampagne = array();
		foreach ($campagnes as $camp) {
			if ($camp->idMode == 2) {
				$allCampagne[$camp->id] = $camp;
			}
		}

		## Etat de l'accès aux PMS
		## ~~~~~~~~~~~~~~~~~~~~~~~
		$apiPmsTable	= null;
		try {
			$apiPmsTable	= $sm->get('Reservation\Model\ApipmsTable');
		} catch (\Exception $ex) {
			syslog(LOG_INFO, __FILE__.".".__FUNCTION__.".".__LINE__."_$_SERVER[REMOTE_ADDR] : get_ApipmsTable ERROR-exception=".$ex->getMessage());
		}
		if ($apiPmsTable) {
			try {
				$statusAccesPms	= $apiPmsTable->statusAccesPms();
			} catch (\Exception $ex) {
				syslog(LOG_INFO, __FILE__.".".__FUNCTION__.".".__LINE__."_$_SERVER[REMOTE_ADDR] : idCampagne=$idCampagne get_statusAccesPms ERROR-exception=".$ex->getMessage());
			}
		}

		## Gestion documents - Ajout option document par sites : on donne affecte tous les sites aux docs de campagnes si la table document_residence est vide pour garder le fonctionnement
		$tableDocResidenceObj = new Tables('document_residence', $sm->get('Zend\Db\Adapter\Adapter'));
		$tableDocResidence = $tableDocResidenceObj->getTable();
		$DRRows = $tableDocResidence->select();
		if ($DRRows->count() == 0) {
			$tableDocCampagneObj = new Tables('document_campagne', $sm->get('Zend\Db\Adapter\Adapter'));
			$tableDocCampagne = $tableDocCampagneObj->getTable();

			$residencesTable = $sm->get('Reservation\Model\ResidencesTable');
			$residences = $residencesTable->fetchAll();
			foreach ($residences as $resid) {
				$docsCamps = $tableDocCampagne->select();
				foreach ($docsCamps as $dc) {
					$data = array('idResidence' => $resid->id, 'idDocument' => $dc->idDocument);
					$docResid = $tableDocResidence->select($data)->current();
					if (!$docResid) {
						$tableDocResidence->insert($data);
					}
				}
			}
		}

		## load de model configuration
		$configTable	= $sm->get('Reservation\Model\ConfigurationTable');
		$config	= $configTable->getConfig(1);

		$e->getViewModel()->setVariables(
			array(
				'colisVal' => $colisVal,
				'liens' => $liens,
				'modesCleUrl' => $globalHelper->getModesCleUrl(),
				'allCampagnes' => $allCampagne,
				'statusAccesPms' => $statusAccesPms,
				'config' => $config,
			)
		);
	}

	public function getAutoloaderConfig()
	{
		return array(
			'Zend\Loader\ClassMapAutoloader' => array(
				__DIR__ . '/autoload_classmap.php',
			),
			'Zend\Loader\StandardAutoloader' => array(
				'namespaces' => array(
					__NAMESPACE__ => __DIR__ . '/src/' . str_replace('\\', '/', __NAMESPACE__),
				),
			),
		);
	}

	public function getConfig()
	{
		return include __DIR__ . '/config/module.config.php';
	}

	public function getServiceConfig()
	{
		return array(
			'factories' => array(
				 'Reservation\Model\ResidencesTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('ResidencesTableGateway');
				 	$table = new ResidencesTable($tableGateway);
				 	return $table;
				 },
				 'ResidencesTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Residences());
				 	return new TableGateway('residences', $dbAdapter, null, $resultSetPrototype);
				 },

				  'Reservation\Model\EtudianthomeTable' =>  function ($sm) {
				  	$tableGateway = $sm->get('EtudianthomeTableGateway');
				  	$table = new EtudianthomeTable($tableGateway);
				  	return $table;
				  },
				 'EtudianthomeTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Etudianthome());
				 	return new TableGateway('content', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\TypemailTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('TypemailTableGateway');
				 	$table = new TypemailTable($tableGateway);
				 	return $table;
				 },
				 'TypemailTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Typemail());
				 	return new TableGateway('type_email', $dbAdapter, null, $resultSetPrototype);
				 },

				  'Reservation\Model\ConfigurationTable' =>  function ($sm) {
				  	$tableGateway = $sm->get('ConfigurationTableGateway');
				  	$table = new ConfigurationTable($tableGateway);
				  	return $table;
				  },

				 'ConfigurationTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Configuration());
				 	return new TableGateway('configuration', $dbAdapter, null, $resultSetPrototype);
				 },


				 'Reservation\Model\EtudiantsTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('EtudiantsTableGateway');
				 	$table = new EtudiantsTable($tableGateway);
				 	return $table;
				 },
				 'EtudiantsTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Etudiants());
				 	return new TableGateway('etudiants', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\CanalTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('CanalTableGateway');
				 	$table = new CanalTable($tableGateway);
				 	return $table;
				 },
				 'CanalTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Canal());
				 	return new TableGateway('programmes', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\CodeTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('CodeTableGateway');
				 	$table = new CodeTable($tableGateway);
				 	return $table;
				 },
				 'CodeTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Code());
				 	return new TableGateway('codes', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\UserTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('UserTableGateway');
				 	$table = new UserTable($tableGateway);
				 	return $table;
				 },
				 'UserTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new User());
				 	return new TableGateway('user', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\ResaTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('ResaTableGateway');
				 	$table = new ResaTable($tableGateway);
				 	return $table;
				 },
				 'ResaTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Resa());
				 	return new TableGateway('reservations', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\ResaTableBackup' =>  function ($sm) {
				 	$tableGateway = $sm->get('ResaTableGateway2');
				 	$table = new ResaTable($tableGateway);
				 	return $table;
				 },
				 'ResaTableGateway2' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Resa());
				 	return new TableGateway('reservations', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\BatimentTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('BatimentTableGateway');
				 	$table = new BatimentTable($tableGateway);
				 	return $table;
				 },
				 'BatimentTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Batiment());
				 	return new TableGateway('batiments', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\LogementTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('LogementTableGateway');
				 	$table = new LogementTable($tableGateway);
				 	return $table;
				 },
				 'LogementTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Logement());
				 	return new TableGateway('logements', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\StockCSTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('StockCSTableGateway');
				 	$table = new StockCSTable($tableGateway);
				 	return $table;
				 },
				 'StockCSTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new StockCS());
				 	return new TableGateway('stocksCS', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\TypelogementTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('TypelogementTableGateway');
				 	$table = new TypelogementTable($tableGateway);
				 	return $table;
				 },
				 'TypelogementTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Typelogement());
				 	return new TableGateway('type_logement', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\LogsTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('LogsTableGateway');
				 	$table = new LogsTable($tableGateway);
				 	return $table;
				 },
				 'LogsTableGateway' => function ($sm) {
				 	try {
				 		$dbAdapter = $sm->get('logsAdapter');
				 		$tableLogs = new Tables('logs', $dbAdapter);
				 		$result = $tableLogs->getTable()->select()->current();
				 	} catch (\Exception $ex) {
				 		$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	}

				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Logs());
				 	return new TableGateway('logs', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\LocatairesTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('LocatairesTableGateway');
				 	$table = new LocatairesTable($tableGateway);
				 	return $table;
				 },
				 'LocatairesTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Locataires());
				 	return new TableGateway('locataires', $dbAdapter, null, $resultSetPrototype);
				 },

				'Reservation\Model\JoursferiesTable' =>  function ($sm) {
					$tableGateway = $sm->get('JoursferiesTableGateway');
					$table = new JoursferiesTable($tableGateway);
					return $table;
				},
				'JoursferiesTableGateway' => function ($sm) {
					$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
					$resultSetPrototype = new ResultSet();
					$resultSetPrototype->setArrayObjectPrototype(new Joursferies());
					return new TableGateway('config_joursferies', $dbAdapter, null, $resultSetPrototype);
				},

				 'Reservation\Model\LocatairesADPTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('LocatairesADPTableGateway');
				 	$table = new LocatairesADPTable($tableGateway);
				 	return $table;
				 },
				 'LocatairesADPTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new LocatairesADP());
				 	return new TableGateway('locataireAccesResa', $dbAdapter, null, $resultSetPrototype);
				 },

				  'Reservation\Model\LocatairesAccesResaTable' =>  function ($sm) {
				  	$tableGateway = $sm->get('LocatairesAccesResaTableGateway');
				  	$table = new LocatairesAccesResaTable($tableGateway);
				  	return $table;
				  },
				 'LocatairesAccesResaTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new LocatairesAccesResa());
				 	return new TableGateway('locataireAccesResa', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\ProgrammeTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('ProgrammeTableGateway');
				 	$table = new ProgrammeTable($tableGateway);
				 	return $table;
				 },
				 'ProgrammeTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Programme());
				 	return new TableGateway('programmes', $dbAdapter, null, $resultSetPrototype);
				 },

				  'Reservation\Model\CampagneTable' =>  function ($sm) {
				  	$tableGateway = $sm->get('CampagneTableGateway');
				  	$table = new CampagneTable($tableGateway);
				  	return $table;
				  },
				 'CampagneTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Campagne());
				 	return new TableGateway('campagnes', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\TypedocumentTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('TypedocumentTableGateway');
				 	$table = new TypedocumentTable($tableGateway);
				 	return $table;
				 },
				 'TypedocumentTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Typedocument());
				 	return new TableGateway('type_document', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\DocumentTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('DocumentTableGateway');
				 	$table = new DocumentTable($tableGateway);
				 	return $table;
				 },
				 'DocumentTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Document());
				 	return new TableGateway('documents', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\TarifTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('TarifTableGateway');
				 	$table = new TarifTable($tableGateway);
				 	return $table;
				 },
				 'TarifTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Tarif());
				 	return new TableGateway('tarifs', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\ListesTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('ListesTableGateway');
				 	$table = new ListesTable($tableGateway);
				 	return $table;
				 },
				 'ListesTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Listes());
				 	return new TableGateway('listes', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\ModelesmailTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('ModelesmailTableGateway');
				 	$table = new ModelesmailTable($tableGateway);
				 	return $table;
				 },
				 'ModelesmailTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Modelesmail());
				 	return new TableGateway('modeles_email', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\ModelescampagneTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('ModelescampagneTableGateway');
				 	$table = new ModelescampagneTable($tableGateway);
				 	return $table;
				 },
				 'ModelescampagneTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Modelescampagne());
				 	return new TableGateway('modeles_email_campagne', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\GestionnaireTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('GestionnaireTableGateway');
				 	$table = new GestionnaireTable($tableGateway);
				 	return $table;
				 },
				 'GestionnaireTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Gestionnaire());
				 	return new TableGateway('user', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\DroitTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('DroitTableGateway');
				 	$table = new DroitTable($tableGateway);
				 	return $table;
				 },
				 'DroitTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Droit());
				 	return new TableGateway('user_role', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\HistoriquemailTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('HistoriquemailTableGateway');
				 	$table = new HistoriquemailTable($tableGateway);
				 	return $table;
				 },
				 'HistoriquemailTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Historiquemail());
				 	return new TableGateway('historique_mail', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\ChampdynamiqueTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('ChampdynamiqueTableGateway');
				 	$table = new ChampdynamiqueTable($tableGateway);
				 	return $table;
				 },
				 'ChampdynamiqueTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Champdynamique());
				 	return new TableGateway('champs_dynamiques', $dbAdapter, null, $resultSetPrototype);
				 },

				'Reservation\Model\ValeurschampdynamiqueTable' =>  function ($sm) {
					$tableGateway = $sm->get('ValeurschampdynamiqueTableGateway');
					$table = new ValeurschampdynamiqueTable($tableGateway);
					return $table;
				},
				 'ValeurschampdynamiqueTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Valeurschampdynamique());
				 	return new TableGateway('valeurs_dynamiques', $dbAdapter, null, $resultSetPrototype);
				 },

				'Reservation\Model\FormulaireTable' =>  function ($sm) {
					$tableGateway = $sm->get('FormulaireTableGateway');
					$table = new FormulaireTable($tableGateway);
					return $table;
				},
				 'FormulaireTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Formulaire());
				 	return new TableGateway('formulaires', $dbAdapter, null, $resultSetPrototype);
				 },

				'Reservation\Model\ChoixTable' =>  function ($sm) {
					$tableGateway = $sm->get('ChoixTableGateway');
					$table = new ChoixTable($tableGateway);
					return $table;
				},
				 'ChoixTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Choix());
				 	return new TableGateway('choix_typelogement', $dbAdapter, null, $resultSetPrototype);
				 },

				'Reservation\Model\GroupeTable' =>  function ($sm) {
					$tableGateway = $sm->get('GroupeTableGateway');
					$table = new GroupeTable($tableGateway);
					return $table;
				},
				 'GroupeTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Groupe());
				 	return new TableGateway('groupes', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\GrouperesaTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('GrouperesaTableGateway');
				 	$table = new GrouperesaTable($tableGateway);
				 	return $table;
				 },
				 'GrouperesaTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Grouperesa());
				 	return new TableGateway('reservations_groupe', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\GroupecontactTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('GroupecontactTableGateway');
				 	$table = new GroupecontactTable($tableGateway);
				 	return $table;
				 },
				 'GroupecontactTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Groupecontact());
				 	return new TableGateway('groupe_contact', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\TraductionTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('TraductionTableGateway');
				 	$table = new TraductionTable($tableGateway);
				 	return $table;
				 },
				 'TraductionTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Traduction());
				 	return new TableGateway('traductions', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\LangueTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('LangueTableGateway');
				 	$table = new LangueTable($tableGateway);
				 	return $table;
				 },
				 'LangueTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Langue());
				 	return new TableGateway('lang', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\ApipaiementTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('ApipaiementTableGateway');
				 	$table = new ApipaiementTable($tableGateway);
				 	return $table;
				 },
				 'ApipaiementTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Apipaiement());
				 	return new TableGateway('api_paiement', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\ApisettingTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('ApisettingTableGateway');
				 	$table = new ApisettingTable($tableGateway);
				 	return $table;
				 },
				 'ApisettingTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Apisetting());
				 	return new TableGateway('api_setting', $dbAdapter, null, $resultSetPrototype);
				 },

				'Reservation\Model\ApisignatureTable' =>  function ($sm) {
					$tableGateway = $sm->get('ApisignatureTableGateway');
					$table = new ApisignatureTable($tableGateway);
					return $table;
				},
				 'ApisignatureTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Apisignature());
				 	return new TableGateway('api_signature', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\ApisettingsignatureTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('ApisettingsignatureTableGateway');
				 	$table = new ApisettingsignatureTable($tableGateway);
				 	return $table;
				 },
				 'ApisettingsignatureTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Apisettingsignature());
				 	return new TableGateway('api_setting_signature', $dbAdapter, null, $resultSetPrototype);
				 },

				'Reservation\Model\ApipmsTable' =>  function ($sm) {
					$tableGateway = $sm->get('ApipmsTableGateway');
					$table = new ApipmsTable($tableGateway);
					return $table;
				},
				 'ApipmsTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Apipms());
				 	return new TableGateway('api_pms', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\ApisettingpmsTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('ApisettingpmsTableGateway');
				 	$table = new ApisettingpmsTable($tableGateway);
				 	return $table;
				 },
				 'ApisettingpmsTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Apisettingpms());
				 	return new TableGateway('api_setting_pms', $dbAdapter, null, $resultSetPrototype);
				 },

				'Reservation\Model\ApisigTable' =>  function ($sm) {
					$tableGateway = $sm->get('ApisigTableGateway');
					$table = new ApisigTable($tableGateway);
					return $table;
				},
				 'ApisigTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Apisig());
				 	return new TableGateway('api_sig', $dbAdapter, null, $resultSetPrototype);
				 },

				 'Reservation\Model\ApisettingsigTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('ApisettingsigTableGateway');
				 	$table = new ApisettingsigTable($tableGateway);
				 	return $table;
				 },
				 'ApisettingsigTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Apisettingsig());
				 	return new TableGateway('api_setting_sig', $dbAdapter, null, $resultSetPrototype);
				 },

				'Reservation\Model\ChampsTable' =>  function ($sm) {
					$tableGateway = $sm->get('ChampsTableGateway');
					$table = new ChampsTable($tableGateway);
					return $table;
				},
				 'ChampsTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Champs());
				 	return new TableGateway('champs_formulaires', $dbAdapter, null, $resultSetPrototype);
				 },

				'Reservation\Model\EtatintercontratTable' =>  function ($sm) {
					$tableGateway = $sm->get('EtatintercontratTableGateway');
					$table = new EtatintercontratTable($tableGateway);
					return $table;
				},
				 'EtatintercontratTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Etatintercontrat());
				 	return new TableGateway('etat_intercontrat', $dbAdapter, null, $resultSetPrototype);
				 },


				'Reservation\Model\EtatintercontratconfigTable' =>  function ($sm) {
					$tableGateway = $sm->get('EtatintercontratconfigTableGateway');
					$table = new EtatintercontratconfigTable($tableGateway);
					return $table;
				},
				 'EtatintercontratconfigTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Etatintercontratconfig());
				 	return new TableGateway('etat_intercontrat_config', $dbAdapter, null, $resultSetPrototype);
				 },

				// DEMANDES
				'Reservation\Model\DemandesTable' =>  function ($sm) {
					$tableGateway = $sm->get('DemandesTableGateway');
					$table = new DemandesTable($tableGateway);
					return $table;
				},
				 'DemandesTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Demandes());
				 	return new TableGateway('demandes', $dbAdapter, null, $resultSetPrototype);
				 },

				// DEMANDES MODELES
				'Reservation\Model\DemandesModelesTable' =>  function ($sm) {
					$tableGateway = $sm->get('DemandesModelesTableGateway');
					$table = new DemandesModelesTable($tableGateway);
					return $table;
				},
				 'DemandesModelesTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new DemandesModeles());
				 	return new TableGateway('demandes_modeles', $dbAdapter, null, $resultSetPrototype);
				 },

				// CHAMPS DEMANDES
				'Reservation\Model\ChampsDemandesTable' =>  function ($sm) {
					$tableGateway = $sm->get('ChampsDemandesTableGateway');
					$table = new ChampsDemandesTable($tableGateway);
					return $table;
				},
				 'ChampsDemandesTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new ChampsDemandes());
				 	return new TableGateway('champs_demandes', $dbAdapter, null, $resultSetPrototype);
				 },

				// EDL MODULE
				'Reservation\Model\EdlModeleTable' =>  function ($sm) {
					$tableGateway = $sm->get('EdlModeleTableGateway');
					$table = new EdlModeleTable($tableGateway);
					return $table;
				},
				 'EdlModeleTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new EdlModele());
				 	return new TableGateway('edl_modele', $dbAdapter, null, $resultSetPrototype);
				 },

					// EDL BASE ARTICLE
				 'Reservation\Model\EdlBaseArticleTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('EdlBaseArticleTableGateway');
				 	$table = new EdlBaseArticleTable($tableGateway);
				 	return $table;
				 },
				 'EdlBaseArticleTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new EdlBaseArticle());
				 	return new TableGateway('edl_base_article', $dbAdapter, null, $resultSetPrototype);
				 },

					// EDL BASE CATEGORIES
				 'Reservation\Model\EdlBaseCatTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('EdlBaseCatTableGateway');
				 	$table = new EdlBaseCatTable($tableGateway);
				 	return $table;
				 },
				 'EdlBaseCatTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new EdlBaseCat());
				 	return new TableGateway('edl_base_cat', $dbAdapter, null, $resultSetPrototype);
				 },

				// EDL BASE SOUS CATEGORIES
				 'Reservation\Model\EdlBaseSousCatTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('EdlBaseSousCatTableGateway');
				 	$table = new EdlBaseSousCatTable($tableGateway);
				 	return $table;
				 },
				 'EdlBaseSousCatTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new EdlBaseSousCat());
				 	return new TableGateway('edl_base_sous_cat', $dbAdapter, null, $resultSetPrototype);
				 },

				 // EDL MODELE
				'Reservation\Model\EdlModeleTable' =>  function ($sm) {
					$tableGateway = $sm->get('EdlModeleTableGateway');
					$table = new EdlModeleTable($tableGateway);
					return $table;
				},
				 'EdlModeleTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new EdlModele());
				 	return new TableGateway('edl_modele', $dbAdapter, null, $resultSetPrototype);
				 },

					// EDL MODELE ARTICLE
				 'Reservation\Model\EdlModeleArticleTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('EdlModeleArticleTableGateway');
				 	$table = new EdlModeleArticleTable($tableGateway);
				 	return $table;
				 },
				 'EdlModeleArticleTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new EdlModeleArticle());
				 	return new TableGateway('edl_modele_article', $dbAdapter, null, $resultSetPrototype);
				 },

					// EDL MODELE CATEGORIES
				 'Reservation\Model\EdlModeleCatTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('EdlModeleCatTableGateway');
				 	$table = new EdlModeleCatTable($tableGateway);
				 	return $table;
				 },
				 'EdlModeleCatTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new EdlModeleCat());
				 	return new TableGateway('edl_modele_cat', $dbAdapter, null, $resultSetPrototype);
				 },

					// EDL MODELE SOUS CATEGORIES
				 'Reservation\Model\EdlModeleSousCatTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('EdlModeleSousCatTableGateway');
				 	$table = new EdlModeleSousCatTable($tableGateway);
				 	return $table;
				 },
				 'EdlModeleSousCatTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new EdlModeleSousCat());
				 	return new TableGateway('edl_modele_sous_cat', $dbAdapter, null, $resultSetPrototype);
				 },

					// EDL
				 'Reservation\Model\EdlTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('EdlTableGateway');
				 	$table = new EdlTable($tableGateway);
				 	return $table;
				 },
				 'EdlTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new Edl());
				 	return new TableGateway('edl', $dbAdapter, null, $resultSetPrototype);
				 },

				 // EDL CAT
				 'Reservation\Model\EdlCatTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('EdlCatTableGateway');
				 	$table = new EdlCatTable($tableGateway);
				 	return $table;
				 },
				 'EdlCatTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new EdlCat());
				 	return new TableGateway('edl_cat', $dbAdapter, null, $resultSetPrototype);
				 },

				 // EDL SOUS CAT
				 'Reservation\Model\EdlSousCatTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('EdlSousCatTableGateway');
				 	$table = new EdlSousCatTable($tableGateway);
				 	return $table;
				 },
				 'EdlSousCatTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new EdlSousCat());
				 	return new TableGateway('edl_sous_cat', $dbAdapter, null, $resultSetPrototype);
				 },

				 // EDL SOUS CAT
				 'Reservation\Model\EdlArticleTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('EdlArticleTableGateway');
				 	$table = new EdlArticleTable($tableGateway);
				 	return $table;
				 },
				 'EdlArticleTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new EdlArticle());
				 	return new TableGateway('edl_article', $dbAdapter, null, $resultSetPrototype);
				 },

				// BOUTIQUE
				 'Reservation\Model\PrestationsBoutiqueCommandesTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('PrestationsBoutiqueCommandesTableGateway');
				 	$table = new PrestationsBoutiqueCommandesTable($tableGateway);
				 	return $table;
				 },
				 'PrestationsBoutiqueCommandesTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new PrestationsBoutiqueCommandes());
				 	return new TableGateway('prestations_boutique_commandes', $dbAdapter, null, $resultSetPrototype);
				 },


				 // EDL PARAMETRES
				'Reservation\Model\EdlParametresTable' =>  function ($sm) {
					$tableGateway = $sm->get('EdlParametresTableGateway');
					$table = new EdlParametresTable($tableGateway);
					return $table;
				},
				'EdlParametresTableGateway' => function ($sm) {
					$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
					$resultSetPrototype = new ResultSet();
					$resultSetPrototype->setArrayObjectPrototype(new EdlParametres());
					return new TableGateway('edl_parametres', $dbAdapter, null, $resultSetPrototype);
				},

								// EDL PRESTATIONS
								'Reservation\Model\EdlPrestationsTable' =>  function ($sm) {
									$tableGateway = $sm->get('EdlPrestationsTableGateway');
									$table = new EdlPrestationsTable($tableGateway);
									return $table;
								},
				'EdlPrestationsTableGateway' => function ($sm) {
					$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
					$resultSetPrototype = new ResultSet();
					$resultSetPrototype->setArrayObjectPrototype(new EdlPrestations());
					return new TableGateway('edl_prestations', $dbAdapter, null, $resultSetPrototype);
				},

								// RDV PARAMETRES HORAIRES
								'Reservation\Model\RdvParametresHorairesTable' =>  function ($sm) {
									$tableGateway = $sm->get('RdvParametresHorairesTableGateway');
									$table = new RdvParametresHorairesTable($tableGateway);
									return $table;
								},
				'RdvParametresHorairesTableGateway' => function ($sm) {
					$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
					$resultSetPrototype = new ResultSet();
					$resultSetPrototype->setArrayObjectPrototype(new RdvParametresHoraires());
					return new TableGateway('rdv_parametres_horaires', $dbAdapter, null, $resultSetPrototype);
				},

								// RDV PARAMETRES HORAIRES
								'Reservation\Model\RdvParametresGestionRessourcesTable' =>  function ($sm) {
									$tableGateway = $sm->get('RdvParametresGestionRessourcesTableGateway');
									$table = new RdvParametresGestionRessourcesTable($tableGateway);
									return $table;
								},
				'RdvParametresGestionRessourcesTableGateway' => function ($sm) {
					$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
					$resultSetPrototype = new ResultSet();
					$resultSetPrototype->setArrayObjectPrototype(new RdvParametresGestionRessources());
					return new TableGateway('rdv_parametres_gestion_ressources', $dbAdapter, null, $resultSetPrototype);
				},

								// RDV RENONCES
								'Reservation\Model\RdvRenonceTable' =>  function ($sm) {
									$tableGateway = $sm->get('RdvRenonceTableGateway');
									$table = new RdvRenonceTable($tableGateway);
									return $table;
								},
				'RdvRenonceTableGateway' => function ($sm) {
					$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
					$resultSetPrototype = new ResultSet();
					$resultSetPrototype->setArrayObjectPrototype(new RdvRenonce());
					return new TableGateway('rdv_renonce', $dbAdapter, null, $resultSetPrototype);
				},

				// RDV LOCATAIRE
				'Reservation\Model\RdvTable' =>  function ($sm) {
					$tableGateway = $sm->get('RdvTableGateway');
					$table = new RdvTable($tableGateway);
					return $table;
				},
				'RdvTableGateway' => function ($sm) {
					$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
					$resultSetPrototype = new ResultSet();
					$resultSetPrototype->setArrayObjectPrototype(new Rdv());
					return new TableGateway('rdv', $dbAdapter, null, $resultSetPrototype);
				},

				// HelperTable
				'Reservation\Model\HelperTable' =>  function ($sm) {
					$tableGateway = $sm->get('HelperTableGateway');
					$table = new HelperTable($tableGateway);
					return $table;
				},
				'HelperTableGateway' => function ($sm) {
					$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
					$resultSetPrototype = new ResultSet();
					$resultSetPrototype->setArrayObjectPrototype(new Helper());
					return new TableGateway('helper', $dbAdapter, null, $resultSetPrototype);
				},

				// COLISTABLE
				'Reservation\Model\ColisTable' =>  function ($sm) {
					$tableGateway = $sm->get('ColisTableGateway');
					$table = new ColisTable($tableGateway);
					return $table;
				},
				'ColisTableGateway' => function ($sm) {
					$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
					$resultSetPrototype = new ResultSet();
					$resultSetPrototype->setArrayObjectPrototype(new Colis());
					return new TableGateway('colis', $dbAdapter, null, $resultSetPrototype);
				},

				// DASHBOARDTABLE
				'Reservation\Model\DashboardTable' =>  function ($sm) {
					$tableGateway = $sm->get('DashboardTableGateway');
					$table = new DashboardTable($tableGateway);
					return $table;
				},
				'DashboardTableGateway' => function ($sm) {
					$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
					$resultSetPrototype = new ResultSet();
					$resultSetPrototype->setArrayObjectPrototype(new Dashboard());
					return new TableGateway('dashboard', $dbAdapter, null, $resultSetPrototype);
				},

								// MULTISUIVIS
								'Reservation\Model\MultisuivisTable' =>  function ($sm) {
									$tableGateway = $sm->get('MultisuivisTableGateway');
									$table = new MultisuivisTable($tableGateway);
									return $table;
								},
								'MultisuivisTableGateway' => function ($sm) {
									$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
									$resultSetPrototype = new ResultSet();
									$resultSetPrototype->setArrayObjectPrototype(new Multisuivis());
									return new TableGateway('suivis', $dbAdapter, null, $resultSetPrototype);
								},

								 // LIENS CONFIG
								'Reservation\Model\LiensconfigTable' =>  function ($sm) {
									$tableGateway = $sm->get('LiensconfigTableGateway');
									$table = new LiensconfigTable($tableGateway);
									return $table;
								},
								'LiensconfigTableGateway' => function ($sm) {
									$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
									$resultSetPrototype = new ResultSet();
									$resultSetPrototype->setArrayObjectPrototype(new Liensconfig());
									return new TableGateway('liens_config', $dbAdapter, null, $resultSetPrototype);
								},

								 'Reservation\Model\ModelesSMSTable' =>  function ($sm) {
								 	$tableGateway = $sm->get('ModelesSMSTableGateway');
								 	$table = new ModelesSMSTable($tableGateway);
								 	return $table;
								 },
								 'ModelesSMSTableGateway' => function ($sm) {
								 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
								 	$resultSetPrototype = new ResultSet();
								 	$resultSetPrototype->setArrayObjectPrototype(new ModelesSMS());
								 	return new TableGateway('modeles_sms', $dbAdapter, null, $resultSetPrototype);
								 },

								'Reservation\Model\HistoriqueSMSTable' =>  function ($sm) {
									$tableGateway = $sm->get('HistoriqueSMSTableGateway');
									$table = new HistoriqueSMSTable($tableGateway);
									return $table;
								},
								 'HistoriqueSMSTableGateway' => function ($sm) {
								 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
								 	$resultSetPrototype = new ResultSet();
								 	$resultSetPrototype->setArrayObjectPrototype(new HistoriqueSMS());
								 	return new TableGateway('historique_sms', $dbAdapter, null, $resultSetPrototype);
								 },

								 'Reservation\Model\ModelescampagneSMSTable' =>  function ($sm) {
								 	$tableGateway = $sm->get('ModelescampagneSMSTableGateway');
								 	$table = new ModelescampagneSMSTable($tableGateway);
								 	return $table;
								 },
								 'ModelescampagneSMSTableGateway' => function ($sm) {
								 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
								 	$resultSetPrototype = new ResultSet();
								 	$resultSetPrototype->setArrayObjectPrototype(new ModelescampagneSMS());
								 	return new TableGateway('modeles_sms_campagne', $dbAdapter, null, $resultSetPrototype);
								 },

								 // ALERT
								 'Reservation\Model\ModelesAlertTable' =>  function ($sm) {
								 	$tableGateway = $sm->get('ModelesAlertTableGateway');
								 	$table = new ModelesAlertTable($tableGateway);
								 	return $table;
								 },
								 'ModelesAlertTableGateway' => function ($sm) {
								 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
								 	$resultSetPrototype = new ResultSet();
								 	$resultSetPrototype->setArrayObjectPrototype(new ModelesAlert());
								 	return new TableGateway('modeles_alert', $dbAdapter, null, $resultSetPrototype);
								 },

								'Reservation\Model\HistoriqueAlertTable' =>  function ($sm) {
									$tableGateway = $sm->get('HistoriqueAlertTableGateway');
									$table = new HistoriqueAlertTable($tableGateway);
									return $table;
								},
								 'HistoriqueAlertTableGateway' => function ($sm) {
								 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
								 	$resultSetPrototype = new ResultSet();
								 	$resultSetPrototype->setArrayObjectPrototype(new HistoriqueAlert());
								 	return new TableGateway('historique_alert', $dbAdapter, null, $resultSetPrototype);
								 },

								 'Reservation\Model\ModelescampagneAlertTable' =>  function ($sm) {
								 	$tableGateway = $sm->get('ModelescampagneAlertTableGateway');
								 	$table = new ModelescampagneAlertTable($tableGateway);
								 	return $table;
								 },
								 'ModelescampagneAlertTableGateway' => function ($sm) {
								 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
								 	$resultSetPrototype = new ResultSet();
								 	$resultSetPrototype->setArrayObjectPrototype(new ModelescampagneAlert());
								 	return new TableGateway('modeles_alert_campagne', $dbAdapter, null, $resultSetPrototype);
								 },


								 // AIGUILLAGE
								'Reservation\Model\AiguillageTable' =>  function ($sm) {
									$tableGateway = $sm->get('AiguillageTableGateway');
									$table = new AiguillageTable($tableGateway);
									return $table;
								},
								'AiguillageTableGateway' => function ($sm) {
									$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
									$resultSetPrototype = new ResultSet();
									$resultSetPrototype->setArrayObjectPrototype(new Aiguillage());
									return new TableGateway('aiguillages', $dbAdapter, null, $resultSetPrototype);
								},

								// CAF MODULE
								// CAF
								 'Reservation\Model\CafTable' =>  function ($sm) {
								 	$tableGateway = $sm->get('CafTableGateway');
								 	$table = new CafTable($tableGateway);
								 	return $table;
								 },
								 'CafTableGateway' => function ($sm) {
								 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
								 	$resultSetPrototype = new ResultSet();
								 	$resultSetPrototype->setArrayObjectPrototype(new Caf());
								 	return new TableGateway('caf', $dbAdapter, null, $resultSetPrototype);
								 },

								// CAF DEMANDE IDEAL
								'Reservation\Model\CafDemandeIdealTable' =>  function ($sm) {
									$tableGateway = $sm->get('CafDemandeIdealTableGateway');
									$table = new CafDemandeIdealTable($tableGateway);
									return $table;
								},
								 'CafDemandeIdealTableGateway' => function ($sm) {
								 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
								 	$resultSetPrototype = new ResultSet();
								 	$resultSetPrototype->setArrayObjectPrototype(new CafDemandeIdeal());
								 	return new TableGateway('caf_demande_ideal', $dbAdapter, null, $resultSetPrototype);
								 },

				 'Reservation\Model\MembreResaTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('MembreResaTableGateway');
				 	$table = new MembreResaTable($tableGateway);
				 	return $table;
				 },
				 'MembreResaTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new MembreResa());
				 	return new TableGateway('membres2reservation', $dbAdapter, null, $resultSetPrototype);
				 },
				 'Reservation\Model\LocPushTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('LocPushTableGateway');
				 	$table = new LocPushTable($tableGateway);
				 	return $table;
				 },
				 'LocPushTableGateway' => function ($sm) {
				 	$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
				 	$resultSetPrototype = new ResultSet();
				 	$resultSetPrototype->setArrayObjectPrototype(new LocPush());
				 	return new TableGateway('locPush', $dbAdapter, null, $resultSetPrototype);
				 },
				 'Reservation\Model\ModelesPushTable' =>  function ($sm) {
				 	$tableGateway = $sm->get('ModelesPushTableGateway');
				 	$table = new ModelesPushTable($tableGateway);
				 	return $table;
				 },
				'ModelesPushTableGateway' => function ($sm) {
					$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
					$resultSetPrototype = new ResultSet();
					$resultSetPrototype->setArrayObjectPrototype(new ModelesPush());
					return new TableGateway('modelesPush', $dbAdapter, null, $resultSetPrototype);
				},
				'Reservation\Model\HistoriquePushTable' =>  function ($sm) {
					$tableGateway = $sm->get('HistoriquePushTableGateway');
					$table = new HistoriquePushTable($tableGateway);
					return $table;
				},
				'HistoriquePushTableGateway' => function ($sm) {
					$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
					$resultSetPrototype = new ResultSet();
					$resultSetPrototype->setArrayObjectPrototype(new HistoriquePush());
					return new TableGateway('historiquePush', $dbAdapter, null, $resultSetPrototype);
				},
			),
		);
	}
}
