document.class.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. <?php
  2. class document
  3. {
  4. static public function uploadFile(array $_temp){
  5. $tmp = file::record($_temp, DIR_DATAS_DOCS);
  6. if($tmp != FALSE){
  7. return $tmp;
  8. } else {
  9. return FALSE;
  10. }
  11. }
  12. static public function readFile(string $_id){
  13. return file::download($_id, DIR_DATAS_DOCS);
  14. }
  15. static public function deleteFile(float $_id){
  16. foreach (self::getFiles($_id) as $file) {
  17. db::query("DELETE FROM ". DB_T_DOCUMENT_FILES ." WHERE id_files = :id_files");
  18. db::bind(':id_files', $file["id"]);
  19. db::execute();
  20. file::delete($file["id"], DIR_DATAS_DOCS);
  21. }
  22. }
  23. static public function getTypes(){
  24. db::query("SELECT "
  25. . "* "
  26. . "FROM " . DB_T_TYPE_DOCUMENT);
  27. return db::resultset();
  28. }
  29. public static function delete(float $_id)
  30. {
  31. try {
  32. db::query("DELETE FROM ". DB_T_DOCUMENT_TAGS ." WHERE id_documents = :id_documents");
  33. db::bind(':id_documents', $_id);
  34. db::execute();
  35. self::deleteFile($_id);
  36. db::query("DELETE FROM " . DB_T_DOCUMENTS . " WHERE id = :id");
  37. db::bind(':id', $_id);
  38. db::execute();
  39. alert::recSuccess("Le document vient d'être supprimé");
  40. return TRUE;
  41. } catch (Exception $ex) {
  42. alert::recError("Erreur à la suppression du document");
  43. return FALSE;
  44. }
  45. }
  46. public static function lastAdd()
  47. {
  48. db::query("SELECT MAX(id) AS id FROM " . DB_T_DOCUMENTS);
  49. return db::single()["id"];
  50. }
  51. private static function addFile(float $_idDocument, string $_idFile)
  52. {
  53. db::query("INSERT INTO " . DB_T_DOCUMENT_FILES . " (id_documents, id_files) VALUES (:id_documents, :id_files)");
  54. db::bind(':id_documents', $_idDocument);
  55. db::bind(':id_files', $_idFile);
  56. try {
  57. db::execute();
  58. return TRUE;
  59. } catch (Exception $ex) {
  60. return FALSE;
  61. }
  62. }
  63. private static function addTags(float $_idDocument, string $_tags = NULL, float $_type)
  64. {
  65. db::query("DELETE FROM " . DB_T_DOCUMENT_TAGS . " WHERE id_documents = :id_documents AND id_type_tags = :id_type_tags");
  66. db::bind(':id_documents', $_idDocument);
  67. db::bind(':id_type_tags', $_type);
  68. db::execute();
  69. if($_tags != NULL){
  70. $tags = explode(",", $_tags);
  71. $sqlMaj = "";
  72. foreach ($tags as $tag) {
  73. $sqlMaj .= " (:id_documents, ".$tag.", :id_type_tags),";
  74. }
  75. $sqlMaj = substr($sqlMaj, 0, -1);
  76. db::query("INSERT INTO " . DB_T_DOCUMENT_TAGS . " (id_documents, id_tags, id_type_tags) VALUES" . $sqlMaj);
  77. db::bind(':id_documents', $_idDocument);
  78. db::bind(':id_type_tags', $_type);
  79. try {
  80. db::execute();
  81. return TRUE;
  82. } catch (Exception $ex) {
  83. return FALSE;
  84. }
  85. }
  86. }
  87. public static function add()
  88. {
  89. db::query("INSERT INTO " . DB_T_DOCUMENTS . " (id_type, titre, date, deadline, description, id_user) VALUES (:id_type, :titre, :date, :deadline, :description, :id_user)");
  90. db::bind(':id_type', core::getPost("id_type"));
  91. db::bind(':titre', core::getPost("titre"));
  92. db::bind(':date', core::getPost("date"));
  93. db::bind(':deadline', core::getPost("deadline"));
  94. db::bind(':description', core::getPost("description"));
  95. db::bind(':id_user', session::getId());
  96. try {
  97. db::execute();
  98. $lastId = db::lastInsertId();
  99. } catch (Exception $ex) {
  100. alert::recError("Erreur à l'enregistrement de la fiche : " . core::getPost("titre"));
  101. return FALSE;
  102. }
  103. try {
  104. $file = core::getFiles("document-import");
  105. $idFile = self::uploadFile($file);
  106. } catch (Exception $ex) {
  107. alert::recError("Erreur à l'enregistrement de la pièce jointe : " . $idFile);
  108. return FALSE;
  109. }
  110. try {
  111. self::addFile($lastId, $idFile);
  112. } catch (Exception $ex) {
  113. alert::recError("Erreur à l'enregistrement de la liaison : " . $idFile);
  114. return FALSE;
  115. }
  116. try {
  117. $tagsUser = tags::textToId(core::getPost("tagsUser"), 1);
  118. self::addTags($lastId, $tagsUser, 1);
  119. $tagsSupplier = tags::textToId(core::getPost("tagsSupplier"), 2);
  120. self::addTags($lastId, $tagsSupplier, 2);
  121. } catch (Exception $ex) {
  122. alert::recError("Erreur à l'enregistrement de la liaison : " . $idFile);
  123. return FALSE;
  124. }
  125. }
  126. public static function update()
  127. {
  128. try {
  129. $tagsUser = tags::textToId(core::getPost("tagsUser"), 1);
  130. self::addTags(core::getPost("id"), $tagsUser, 1);
  131. $tagsSupplier = tags::textToId(core::getPost("tagsSupplier"), 2); echo $tagsSupplier;
  132. self::addTags(core::getPost("id"), $tagsSupplier, 2);
  133. } catch (Exception $ex) {
  134. alert::recError("Erreur à l'enregistrement de la liaison : " . core::getPost("id"));
  135. return FALSE;
  136. }
  137. if(core::ifPost("done") AND core::getPost("done") == TRUE){
  138. $sql = ", id_user_done = :id_user_done, date_done = CURRENT_TIMESTAMP ";
  139. } else {
  140. $sql = "";
  141. }
  142. db::query("UPDATE " . DB_T_DOCUMENTS . " SET "
  143. . "id_type = :id_type, "
  144. . "titre = :titre, "
  145. . "date = :date, "
  146. . "deadline = :deadline, "
  147. . "description = :description "
  148. . $sql
  149. . "WHERE id = :id");
  150. db::bind(':id_type', core::getPost("id_type"));
  151. db::bind(':titre', core::getPost("titre"));
  152. db::bind(':date', core::getPost("date"));
  153. db::bind(':deadline', core::getPost("deadline"));
  154. db::bind(':description', core::getPost("description"));
  155. db::bind(':id', core::getPost("id"));
  156. if(core::ifPost("done") AND core::getPost("done") == TRUE){
  157. db::bind(':id_user_done', session::getId());
  158. }
  159. try {
  160. db::execute();
  161. alert::recSuccess("Document mis à jour avec succès");
  162. return TRUE;
  163. } catch (Exception $ex) {
  164. alert::recError("Erreur de mise à jour du document : " . $ex);
  165. return FALSE;
  166. }
  167. }
  168. static public function printFile(string $_id) {
  169. $filePatch = file::download($_id, DIR_DATAS_DOCS);
  170. if (file_exists($filePatch) && is_readable($filePatch)) {
  171. $file_info = new finfo(FILEINFO_MIME_TYPE);
  172. $mime_type = $file_info->file($filePatch);
  173. header('Content-Type: ' . $mime_type);
  174. header('Content-Length: ' . filesize($filePatch));
  175. readfile($filePatch);
  176. } else {
  177. echo "Le fichier n'a pas été trouvé ou n'est pas lisible.";
  178. }
  179. }
  180. static public function getList(){
  181. }
  182. static public function get(float $_id){
  183. db::query("SELECT "
  184. . "" . DB_T_DOCUMENTS . ".id, "
  185. . "" . DB_T_DOCUMENTS . ".id_type, "
  186. . "" . DB_T_DOCUMENTS . ".titre, "
  187. . "" . DB_T_DOCUMENTS . ".date, "
  188. . "" . DB_T_DOCUMENTS . ".deadline, "
  189. . "" . DB_T_DOCUMENTS . ".description, "
  190. . "" . DB_T_DOCUMENTS . ".id_user_done, "
  191. . "" . DB_T_DOCUMENTS . ".date_done, "
  192. . "CONCAT(" . DB_T_USER . ".prenom, ' ', " . DB_T_USER . ".nom) AS doneUser "
  193. . "FROM " . DB_T_DOCUMENTS . " "
  194. . "LEFT JOIN " . DB_T_USER . " ON " . DB_T_USER . ".id = " . DB_T_DOCUMENTS . ".id_user_done "
  195. . "WHERE " . DB_T_DOCUMENTS . ".id = :id");
  196. db::bind(':id', $_id);
  197. $document = db::single();
  198. $document["tagsSupplier"] = self::getTags($_id, 2);
  199. $document["tagsUser"] = self::getTags($_id, 1);
  200. $files = self::getFiles($_id);
  201. return array("document" => $document, "files" => $files);
  202. }
  203. static public function getTags(float $_idDocument, float $_idTypeTags){
  204. db::query("SELECT "
  205. . "" . DB_T_TAGS . ".label "
  206. . "FROM " . DB_T_DOCUMENT_TAGS . " "
  207. . "INNER JOIN " . DB_T_TAGS . " ON " . DB_T_TAGS . ".id = " . DB_T_DOCUMENT_TAGS . ".id_tags "
  208. . "WHERE " . DB_T_DOCUMENT_TAGS . ".id_documents = :idDocument AND " . DB_T_DOCUMENT_TAGS . ".id_type_tags = :idTypeTags "
  209. . "ORDER BY " . DB_T_DOCUMENT_TAGS . ".creer");
  210. db::bind(':idDocument', $_idDocument);
  211. db::bind(':idTypeTags', $_idTypeTags);
  212. $tmp = db::resultset();
  213. if(isset($tmp[0])){
  214. $return = NULL;
  215. foreach ($tmp as $value) {
  216. $return .= $value["label"].",";
  217. }
  218. $return = substr($return, 0, -1);
  219. return $return;
  220. } else {
  221. return NULL;
  222. }
  223. }
  224. static public function getFiles(float $_idDocument){
  225. db::query("SELECT "
  226. . "" . DB_T_FILES . ".id, "
  227. . "" . DB_T_FILES . ".name, "
  228. . "" . DB_T_FILES . ".size, "
  229. . "" . DB_T_FILES . ".creer, "
  230. . "" . DB_T_FILES . ".id_user, "
  231. . "CONCAT(" . DB_T_USER . ".prenom, ' ', " . DB_T_USER . ".nom) AS user "
  232. . "FROM " . DB_T_DOCUMENT_FILES . " "
  233. . "INNER JOIN " . DB_T_FILES . " ON " . DB_T_FILES . ".id = " . DB_T_DOCUMENT_FILES . ".id_files "
  234. . "INNER JOIN " . DB_T_USER . " ON " . DB_T_USER . ".id = " . DB_T_FILES . ".id_user "
  235. . "WHERE " . DB_T_DOCUMENT_FILES . ".id_documents = :id "
  236. . "ORDER BY " . DB_T_FILES . ".creer");
  237. db::bind(':id', $_idDocument);
  238. $tmp = db::resultset();
  239. if(isset($tmp[0])){
  240. return $tmp;
  241. } else {
  242. return NULL;
  243. }
  244. }
  245. }