<?php

/**
 * Token para o sistema nao "confundir" as mensagens de sessao
 * atual com mensagens que ja existiam em outra pagina.
 * Utilizado dentro da classe Braghim\MvcAbstractController
 * 
 * ¯\_(-.-)_/¯
 */
define('MSG_NSP_TOKEN', mctime());
/**
 * Utilize este arquivo como entrada do framework.
 * Vide documentação online.
 */
class BraghimSistemas
{
    /**
     * Versão atual do sistema
     */
    const VERSION = '1.1.5';
    /** Singleton **/
    private static $instance;
    /**
     * Caminho, no projeto do usuario, onde se encontram as pastas dos módulos.
     * @var string 
     */
    private $modulesPath;
    /**
     * Todos os parametros necessarios para rodar a aplicacao.
     * @var stdClass
     */
 /**
  * 	Every method which needs to execute a SQL query uses this method.
  * 	
  * 	1. If not connected, connect to the database.
  * 	2. Prepare Query.
  * 	3. Parameterize Query.
  * 	4. Execute Query.	
  * 	5. On exception : Write Exception into the log + SQL query.
  * 	6. Reset the Parameters.
  */
 private function Init($query, $parameters = "")
 {
     # Connect to database
     if (!$this->bConnected) {
         $this->Connect();
     }
     try {
         # Prepare query
         $this->sQuery = $this->pdo->prepare($query);
         # Add parameters to the parameter array
         $this->bindMore($parameters);
         // Lista de parametros que podem ser recuperados no log
         $logParamsList = array();
         # Bind parameters
         if (!empty($this->parameters)) {
             foreach ($this->parameters as $param) {
                 $parameters = explode("", $param);
                 $this->sQuery->bindParam($parameters[0], $parameters[1]);
                 // Guarda parametros para exibir no log.
                 $logParamsList[$parameters[0]] = $parameters[1];
             }
         }
         // Adiciona aos logs
         $this->queryLogs[(string) ++$this->i . ' - ' . mctime()] = array('query' => is_object($query) ? $query->__toString() : $query, 'params' => $logParamsList);
         # Execute SQL
         $this->success = $this->sQuery->execute();
     } catch (\PDOException $e) {
         # Write into log and display Exception
         $this->ExceptionLog($e->getMessage(), $query);
         throw new \Exception($e->getMessage());
     }
     # Reset the parameters
     $this->parameters = array();
 }