PageRenderTime 46ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/core/model.php

https://github.com/myagoo/Hello-PHP
PHP | 203 lines | 172 code | 13 blank | 18 comment | 42 complexity | b763d8dd41e9790bd7a7a0179f11c149 MD5 | raw file
  1. <?php
  2. class model {
  3. static $db = 'default';
  4. //Serveur MySQL sur lequel se connecter
  5. public $table;
  6. //Table correspondant au modèle
  7. public $key = 'id';
  8. //Nom de la clé primaire
  9. public $id; //Variable utilisée
  10. /**
  11. *
  12. *
  13. * */
  14. public function __construct() {
  15. $this->connect(); // Connection à la base de données
  16. $query = 'DESCRIBE ' . $this->table;
  17. $results = mysql_query($query) or die(mysql_error());
  18. while ($row = mysql_fetch_assoc($results)) {
  19. $fieldName = $row['Field'];
  20. unset($row['Field']);
  21. $this->fields[$fieldName] = $row; //Récupération des infos des champs de la table dans $this->fields
  22. }
  23. }
  24. /**
  25. * Permet une lecture rapide d'un modèle grace à son identifiant
  26. * */
  27. public function read($fields=null) {
  28. if (empty($fields)) {
  29. $fields = '*';
  30. }
  31. $query = 'SELECT ' . $fields . ' FROM ' . $this->table . ' WHERE ' . $this->key . ' = "' . $this->id . '"';
  32. $result = mysql_query($query) or die(mysql_error());
  33. if (mysql_num_rows($results)) {
  34. $data = mysql_fetch_assoc($result);
  35. foreach ($data as $key => $value) {
  36. $this->$key = $value;
  37. }
  38. return true;
  39. } else {
  40. return false;
  41. }
  42. }
  43. public function save($data) {
  44. //Si l'id est rempli, il s'agit d'un UPDATE, sinon INSERT
  45. if ( (!empty($data[$this->key]) && count($data) > 1) || (empty($data[$this->key]) && count($data) > 0) ) {
  46. if ( !empty($data[$this->key]) ) {
  47. $type = 'UPDATE';
  48. }
  49. else {
  50. $type = 'INSERT';
  51. }
  52. $query = $type;
  53. //Construction de la requête
  54. $query .= ' ' . $this->db . '.' . $this->table . ' SET ';
  55. foreach ( $data as $key => $value ) {
  56. if ( $key != $this->key && isset($this->fields[$key]) ) {
  57. $query.= $key . ' = ?, ';
  58. $values[] = $value;
  59. }
  60. }
  61. $query = substr($query, 0, -2);
  62. //Mise à jour des champs updated et created
  63. if ( !empty($data[$this->key]) ) {
  64. if ( isset($this->fields['updated']) ) {
  65. $query .= ', updated = ?';
  66. $values[] = date('Y-m-d H:i:s');
  67. }
  68. $query.=' WHERE ' . $this->key . ' = ?';
  69. $values[] = $data[$this->key];
  70. }
  71. else {
  72. if ( isset($this->fields['created']) ) {
  73. $query .= ', created = ?';
  74. $values[] = date('Y-m-d H:i:s');
  75. }
  76. }
  77. //Execution de la requete
  78. if ( $this->connection->prepare($query)->execute($values) ) {
  79. if ( empty($data[$this->key]) ) {
  80. $this->id = $this->connection->lastInsertId();
  81. }
  82. else {
  83. $this->id = $data[$this->key];
  84. }
  85. return array(
  86. 'type' => $type,
  87. 'id' => $this->id
  88. );
  89. }
  90. else {
  91. return false;
  92. }
  93. }
  94. else {
  95. return false;
  96. }
  97. }
  98. public function find($options = array()) {
  99. $conditions = '1=1';
  100. $fields = '*';
  101. if (!empty($this->fields)) {
  102. $fields = '';
  103. foreach ($this->fields as $fieldName => $informations) {
  104. $fields .= $this->table . '.' . $fieldName . ' as ' . get_Class($this) . '_' . $fieldName . ', ';
  105. }
  106. $fields = substr($fields, 0, -2);
  107. }
  108. $limit = '';
  109. $order = $this->table . '.' . $this->key . ' ASC';
  110. $left_outer = '';
  111. //
  112. if (!empty($this->belongsTo)) {
  113. foreach ($this->belongsTo as $modelName) {
  114. $model = $this->load($modelName);
  115. //E.G. : , posts.id as post_id
  116. $fields .= ', ' . $model->table . '.' . $model->key . ' as ' . $modelName . '_' . $model->key;
  117. $fields .= ', ' . $model->table . '.' . $model->displayField . ' as ' . $modelName . '_' . $model->displayField;
  118. $left_outer .= ' LEFT OUTER JOIN ' . $model->table . ' ON ' . $this->table . '.' . $modelName . '_id = ' . $model->table . '.id';
  119. }
  120. }
  121. //
  122. if (!empty($options['conditions'])) {
  123. $conditions = $options['conditions'];
  124. }
  125. if (!empty($options['fields'])) {
  126. $fields = $options['fields'];
  127. }
  128. if (!empty($options['limit'])) {
  129. $limit = ' LIMIT ' . $options['limit'];
  130. }
  131. if (!empty($options['order'])) {
  132. $order = $this->table . '.' . $options['order'];
  133. }
  134. $query = 'SELECT ' . $fields . ' FROM ' . $this->table . $left_outer . ' WHERE ' . $conditions . ' ORDER BY ' . $order . $limit;
  135. $results = mysql_query($query) or die(mysql_error());
  136. if (mysql_num_rows($results)) {
  137. $i = 0;
  138. while ($row = mysql_fetch_assoc($results)) {
  139. foreach ($row as $fieldName => $value) {
  140. $pos = strpos($fieldName, '_');
  141. $prefix = substr($fieldName, 0, $pos);
  142. $sufix = substr($fieldName, $pos + 1, strlen($fieldName));
  143. if ($prefix == get_Class($this)) {
  144. $data[$i][$sufix] = $value;
  145. } else {
  146. $data[$i][$prefix][$sufix] = $value;
  147. }
  148. }
  149. $i++;
  150. }
  151. return $data;
  152. } else {
  153. return false;
  154. }
  155. }
  156. public function delete($id=null) {
  157. if ( empty($id) ) {
  158. //$id = $this->current;
  159. return false;
  160. }
  161. $query = 'DELETE FROM ' . $this->db . '.' . $this->table . ' WHERE ' . $this->key . ' = ?';
  162. $values[] = $id;
  163. if ( $this->connection->prepare($query)->execute($values) ) {
  164. return true;
  165. }
  166. else {
  167. return false;
  168. }
  169. }
  170. static function load($name) {
  171. return new $name();
  172. }
  173. static function connect() {
  174. if (isset($this)) {
  175. $db_data = config::$databases[$this->$db];
  176. } else {
  177. $db_data = config::$databases[self::$db];
  178. }
  179. $db_data = config::$databases[self::$db];
  180. $connection = mysql_connect($db_data['host'], $db_data['user'], $db_data['password']);
  181. if (!empty($connection)) {
  182. if (!mysql_select_db($db_data['database'], $connection)) {
  183. echo "Erreur dans la sélection de la base de données";
  184. }
  185. } else {
  186. echo "Impossible de se connecter à MySQL.";
  187. }
  188. }
  189. }
  190. ?>