Advertisement
Guest User

Untitled

a guest
May 27th, 2015
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.79 KB | None | 0 0
  1. <?php
  2. /**
  3. * Classe de manipulação da tabela atendimento.
  4. *
  5. * @author SohMoleza, revisão $LastChangedRevision:$ <sohmoleza@redrat.com.br>
  6. * @package Classes
  7. * @link https://github.com/joubertredrat/sohmoleza
  8. */
  9.  
  10. class Atendimento
  11. {
  12. /**
  13. * Atributo interno da classe Atendimento.
  14. *
  15. * @var integer
  16. */
  17. private $cd_atendimento;
  18.  
  19. /**
  20. * Atributo interno da classe Atendimento.
  21. *
  22. * @var integer
  23. */
  24. private $cd_usuario;
  25.  
  26. /**
  27. * Atributo interno da classe Atendimento.
  28. *
  29. * @var integer
  30. */
  31. private $cd_uf;
  32.  
  33. /**
  34. * Atributo interno da classe Atendimento.
  35. *
  36. * @var integer
  37. */
  38. private $cd_cidade;
  39.  
  40. /**
  41. * Atributo interno da classe Atendimento.
  42. *
  43. * @var integer
  44. */
  45. private $cd_bairro;
  46.  
  47. /**
  48. * Delimita se durante a instância do objeto houve alguma alteração em seus
  49. * atributos, este recurso é utilizado para evitar execução de insert e update
  50. * desnecessários.
  51. *
  52. * @var boolean
  53. */
  54. private $objeto_alterado = false;
  55.  
  56. /**
  57. * Método constutor da classe responsável por popular o objeto de acordo com a
  58. * chave identificadora do registro informado no parametro ou a criação de um
  59. * objeto vazio.
  60. *
  61. * @param integer cd_atendimento Chave identificadora do registro no banco de dados.
  62. * @return void
  63. */
  64. public function __construct($cd_atendimento = null)
  65. {
  66. switch (true)
  67. {
  68. case filter_var($cd_atendimento, FILTER_VALIDATE_INT, ['options' => ['min_range' => 1]]):
  69. $query = 'SELECT * FROM atendimento WHERE cd_atendimento = '.$cd_atendimento;
  70. $consulta = mysql_query($query);
  71. if (mysql_error())
  72. throw new Exception('Ocorreu um erro durante a consulta na tabela "atendimento", query: "'.$query.'".');
  73. if (mysql_num_rows($consulta) != 1)
  74. throw new Exception('Ocorreu um erro durante a consulta na tabela "atendimento", a chave identificadora é inválida: "'.$cd_atendimento.'".');
  75. $this->cd_atendimento = $cd_atendimento;
  76. $this->cd_usuario = mysql_result($consulta, 0, 'cd_usuario');
  77. $this->cd_uf = mysql_result($consulta, 0, 'cd_uf');
  78. $this->cd_cidade = mysql_result($consulta, 0, 'cd_cidade');
  79. $this->cd_bairro = mysql_result($consulta, 0, 'cd_bairro');
  80. break;
  81. case is_null($cd_atendimento):
  82. // Nada a fazer, é um novo objeto vazio
  83. break;
  84. default:
  85. throw new Exception('Tentativa de injection na classe '.__CLASS__.', variável $cd_atendimento recebeu o valor '.$cd_atendimento.' do tipo '.gettype($cd_atendimento));
  86. break;
  87. }
  88. }
  89.  
  90. /**
  91. * Atribui o dado ao objeto de acordo com o atributo informado ou dispara exceção
  92. * caso atributo não exista.
  93. *
  94. * @param string $atributo Nome do atributo que irá receber o dado.
  95. * @param mixed $valor Dado a ser atribuido ao atributo.
  96. * @return void
  97. */
  98. public function __set($atributo, $valor)
  99. {
  100. switch ($atributo)
  101. {
  102. case 'cd_usuario':
  103. if (self::validarTipo($valor, 'integer'))
  104. $this->$atributo = $valor;
  105. else
  106. throw new Exception('O atributo '.$atributo.' deve receber um integer, mas foi informado um valor inválido '.$valor.' do tipo '.gettype($valor));
  107. break;
  108. case 'cd_uf':
  109. if (self::validarTipo($valor, 'integer'))
  110. $this->$atributo = $valor;
  111. else
  112. throw new Exception('O atributo '.$atributo.' deve receber um integer, mas foi informado um valor inválido '.$valor.' do tipo '.gettype($valor));
  113. break;
  114. case 'cd_cidade':
  115. if (self::validarTipo($valor, 'integer'))
  116. $this->$atributo = $valor;
  117. else
  118. throw new Exception('O atributo '.$atributo.' deve receber um integer, mas foi informado um valor inválido '.$valor.' do tipo '.gettype($valor));
  119. break;
  120. case 'cd_bairro':
  121. if (self::validarTipo($valor, 'integer'))
  122. $this->$atributo = $valor;
  123. else
  124. $this->$atributo = null;
  125. break;
  126. default:
  127. throw new Exception('Atributo '.$atributo.' desconhecido ou inválido da classe '.__CLASS__);
  128. break;
  129. }
  130. $this->objeto_alterado = true;
  131. }
  132.  
  133. /**
  134. * Informa o dado do atributo solicitado ou dispara exceção caso atributo não
  135. * exista.
  136. *
  137. * @param string $atributo Nome do atributo que deseja obter seu respectivo dado.
  138. * @return mixed Valor do atributo no seu tipo original.
  139. */
  140. public function __get($atributo)
  141. {
  142. switch ($atributo)
  143. {
  144. case 'cd_atendimento':
  145. case 'cd_usuario':
  146. case 'cd_uf':
  147. case 'cd_cidade':
  148. case 'cd_bairro':
  149. return $this->$atributo;
  150. break;
  151. default:
  152. throw new Exception('Atributo '.$atributo.' desconhecido ou inválido da classe '. __CLASS__);
  153. break;
  154. }
  155. }
  156.  
  157. /**
  158. * Valida os tipos de dados recebidos no método __set().
  159. *
  160. * @param mixed $valor Valor a ser validado.
  161. * @param string $tipo Tipo de dado a ser validado.
  162. * @return bool Retorna true caso seja um tipo válido ou false caso contra.
  163. */
  164. public static function validarTipo($valor, $tipo)
  165. {
  166. switch ($tipo)
  167. {
  168. case 'string':
  169. $retorno = is_string($valor);
  170. break;
  171. case 'integer':
  172. $retorno = filter_var($valor, FILTER_VALIDATE_INT) !== false;
  173. break;
  174. case 'float':
  175. $retorno = filter_var($valor, FILTER_VALIDATE_FLOAT) !== false;
  176. break;
  177. case 'boolean':
  178. $retorno = is_bool($valor);
  179. break;
  180. case 'datetime':
  181. if (self::validarTipo(substr($valor, 0, 4), 'datetime_year'))
  182. {
  183. DateTime::createFromFormat('Y-m-d H:i:s', $valor);
  184. $validar = DateTime::getLastErrors();
  185. $retorno = ($validar['warning_count'] == 0 && $validar['error_count'] == 0);
  186. }
  187. else
  188. $retorno = false;
  189. break;
  190. case 'datetime_year':
  191. if ($valor == '0000')
  192. $retorno = true;
  193. else
  194. $retorno = filter_var((int) $valor, FILTER_VALIDATE_INT, ['options' => ['min_range' => 1000, 'max_range' => 9999]]) !== false;
  195. break;
  196. case 'datetime_date':
  197. if ($valor === '0000-00-00')
  198. $retorno = true;
  199. else
  200. $retorno = self::validarTipo($valor.' '.date('H:i:s'), 'datetime');
  201. break;
  202. case 'datetime_time':
  203. if ($valor === '00:00:00')
  204. $retorno = true;
  205. else
  206. $retorno = self::validarTipo(date('Y-m-d').' '.$valor, 'datetime');
  207. break;
  208. case 'datetime_timestamp':
  209. $retorno = filter_var((int) $valor, FILTER_VALIDATE_INT, ['options' => ['min_range' => -2147483647, 'max_range' => 2147483647]]) !== false;
  210. break;
  211. default:
  212. $retorno = false;
  213. break;
  214. }
  215. return $retorno;
  216. }
  217.  
  218.  
  219. /**
  220. * Adiciona os dados do objeto no banco de dados e a geração de sua chave
  221. * identificadora.
  222. *
  223. * @return bool Retorna true ao final da operação com sucesso
  224. */
  225. public function adicionar()
  226. {
  227. if ($this->objeto_alterado)
  228. {
  229. if ($this->cd_atendimento)
  230. throw new Exception('Tentativa de adicionar ao banco de dados um registro ja existente.');
  231. $campos['cd_usuario'] = $this->cd_usuario;
  232. $campos['cd_uf'] = $this->cd_uf;
  233. $campos['cd_cidade'] = $this->cd_cidade;
  234. if (!is_null($this->cd_bairro))
  235. $campos['cd_bairro'] = $this->cd_bairro;
  236. $query = 'INSERT INTO atendimento (`'.implode('`, `', array_keys($campos)).'`) VALUES ('.implode(', ', $campos).')';
  237. mysql_query($query);
  238. if (mysql_error())
  239. throw new Exception('Ocorreu um erro durante a inclusão de atendimento no banco de dados: '.mysql_error());
  240. $this->cd_atendimento = mysql_insert_id();
  241. $this->objeto_alterado = false;
  242. return true;
  243. }
  244. }
  245.  
  246. /**
  247. * Atualiza os dados do objeto no banco de dados.
  248. *
  249. * @return bool Retorna true ao final da operação com sucesso
  250. */
  251. public function atualizar()
  252. {
  253. if ($this->objeto_alterado)
  254. {
  255. if (!$this->cd_atendimento)
  256. throw new Exception('Tentativa de atualizar no banco de dados um registro inexistente.');
  257. $campos['cd_usuario'] = "`cd_usuario` = ".$this->cd_usuario;
  258. $campos['cd_uf'] = "`cd_uf` = ".$this->cd_uf;
  259. $campos['cd_cidade'] = "`cd_cidade` = ".$this->cd_cidade;
  260. if (!is_null($this->cd_bairro))
  261. $campos['cd_bairro'] = "`cd_bairro` = ".$this->cd_bairro;
  262. $query = 'UPDATE atendimento SET '.implode(', ', $campos).' WHERE cd_atendimento = '.$this->cd_atendimento;
  263. mysql_query($query);
  264. if (mysql_error())
  265. throw new Exception('Ocorreu um erro durante a alteração de atendimento no banco de dados: '.mysql_error());
  266. $this->objeto_alterado = false;
  267. return true;
  268. }
  269. }
  270.  
  271. /**
  272. * Deleta o registro no banco de dados.
  273. *
  274. * @return bool Retorna true ao final da operação com sucesso
  275. */
  276. public function deletar()
  277. {
  278. if (!$this->cd_atendimento)
  279. throw new Exception('Tentativa de deletar do banco de dados um registro inexistente.');
  280. $query = 'DELETE FROM atendimento WHERE cd_atendimento = '.$this->cd_atendimento;
  281. mysql_query($query);
  282. if (mysql_error())
  283. throw new Exception('Ocorreu um erro durante a alteração de atendimento no banco de dados: '.mysql_error());
  284. return true;
  285. }
  286.  
  287. /**
  288. * Realiza a consulta dos registros presentes no banco de dados de acordo com os
  289. * termos informados para a pesquisa.
  290. *
  291. * @param array $colunas dados a ser obtidos na consulta.
  292. * Exemplo: $colunas = array('nome', 'sobrenome', 'idade');
  293. * @param array $where termos a ser considerados na consulta.
  294. * Exemplo: $where = array('nome LIKE "%JOSE%"', 'idade > 5', 'data IS NULL');
  295. * @param array $ordem tipo de ordenação a ser obtido na consulta.
  296. * Exemplo: $ordem = array('coluna' => array('nome', 'sobrenome'), 'ordem' => 'ASC');
  297. * @param array $limite registro inicial e quantidade de registros a ser retornados na consulta.
  298. * Exemplo: $limite = array(0, 30);
  299. * @return array Retorna o resultado da consulta tendo o índice a chave identificadora apontando para os dados do registro.
  300. */
  301. public static function buscar($colunas = array(), $where = array(), $ordem = array(), $limite = array())
  302. {
  303. $query = 'SELECT '.($colunas ? implode(', ', $colunas) : '*').' ';
  304. $query .= 'FROM atendimento '.($where ? 'WHERE '.implode(' AND ', $where) : '');
  305. $query .= ($ordem ? ' ORDER BY '.implode(', ', $ordem['coluna']).' '.$ordem['ordem'] : '');
  306. $query .= ($limite ? ' LIMIT '.implode(', ', $limite) : '');
  307. $consulta = mysql_query($query);
  308. if(mysql_error())
  309. throw new Exception('Ocorreu um erro durante a consulta de dados em atendimento no banco de dados: '.mysql_error());
  310. $retorno = array();
  311. while($dados = mysql_fetch_array($consulta))
  312. {
  313. $retorno[$dados['cd_atendimento']]['cd_atendimento'] = $dados['cd_atendimento'];
  314. $retorno[$dados['cd_atendimento']]['cd_usuario'] = $dados['cd_usuario'];
  315. $retorno[$dados['cd_atendimento']]['cd_uf'] = $dados['cd_uf'];
  316. $retorno[$dados['cd_atendimento']]['cd_cidade'] = $dados['cd_cidade'];
  317. $retorno[$dados['cd_atendimento']]['cd_bairro'] = $dados['cd_bairro'];
  318. }
  319. return $retorno;
  320. }
  321. }
  322. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement