2
0

document.class.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  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. $file = core::getFiles("document-import");
  90. $md5 = md5_file($file["tmp_name"]);
  91. if(file::findM5($md5) == TRUE){
  92. alert::recError("Ce fichier a déjà été utilisé : " . $file["name"]);
  93. session::setTemp(core::getPost(), "document");
  94. } else {
  95. db::query("INSERT INTO " . DB_T_DOCUMENTS . " (id_type, titre, date, deadline, description, id_user) VALUES (:id_type, :titre, :date, :deadline, :description, :id_user)");
  96. db::bind(':id_type', core::getPost("id_type"));
  97. db::bind(':titre', core::getPost("titre"));
  98. db::bind(':date', core::getPost("date"));
  99. db::bind(':deadline', core::getPost("deadline"));
  100. db::bind(':description', core::getPost("description"));
  101. db::bind(':id_user', session::getId());
  102. try {
  103. db::execute();
  104. $lastId = db::lastInsertId();
  105. } catch (Exception $ex) {
  106. alert::recError("Erreur à l'enregistrement de la fiche : " . core::getPost("titre"));
  107. return FALSE;
  108. }
  109. try {
  110. $idFile = self::uploadFile($file);
  111. } catch (Exception $ex) {
  112. alert::recError("Erreur à l'enregistrement de la pièce jointe : " . $idFile);
  113. return FALSE;
  114. }
  115. try {
  116. self::addFile($lastId, $idFile);
  117. } catch (Exception $ex) {
  118. alert::recError("Erreur à l'enregistrement de la liaison : " . $idFile);
  119. return FALSE;
  120. }
  121. try {
  122. $tagsUser = tags::textToId(core::getPost("tagsUser"), 1);
  123. self::addTags($lastId, $tagsUser, 1);
  124. $tagsSupplier = tags::textToId(core::getPost("tagsSupplier"), 2);
  125. self::addTags($lastId, $tagsSupplier, 2);
  126. } catch (Exception $ex) {
  127. alert::recError("Erreur à l'enregistrement de la liaison : " . $idFile);
  128. return FALSE;
  129. }
  130. return $lastId;
  131. }
  132. }
  133. public static function update()
  134. {
  135. try {
  136. $tagsUser = tags::textToId(core::getPost("tagsUser"), 1);
  137. self::addTags(core::getPost("id"), $tagsUser, 1);
  138. $tagsSupplier = tags::textToId(core::getPost("tagsSupplier"), 2); echo $tagsSupplier;
  139. self::addTags(core::getPost("id"), $tagsSupplier, 2);
  140. } catch (Exception $ex) {
  141. alert::recError("Erreur à l'enregistrement de la liaison : " . core::getPost("id"));
  142. return FALSE;
  143. }
  144. if(core::ifPost("done") AND core::getPost("done") == TRUE){
  145. $sql = ", id_user_done = :id_user_done, date_done = CURRENT_TIMESTAMP ";
  146. } else {
  147. $sql = "";
  148. }
  149. db::query("UPDATE " . DB_T_DOCUMENTS . " SET "
  150. . "id_type = :id_type, "
  151. . "titre = :titre, "
  152. . "date = :date, "
  153. . "deadline = :deadline, "
  154. . "description = :description "
  155. . $sql
  156. . "WHERE id = :id");
  157. db::bind(':id_type', core::getPost("id_type"));
  158. db::bind(':titre', core::getPost("titre"));
  159. db::bind(':date', core::getPost("date"));
  160. db::bind(':deadline', core::getPost("deadline"));
  161. db::bind(':description', core::getPost("description"));
  162. db::bind(':id', core::getPost("id"));
  163. if(core::ifPost("done") AND core::getPost("done") == TRUE){
  164. db::bind(':id_user_done', session::getId());
  165. }
  166. try {
  167. db::execute();
  168. alert::recSuccess("Document mis à jour avec succès");
  169. return TRUE;
  170. } catch (Exception $ex) {
  171. alert::recError("Erreur de mise à jour du document : " . $ex);
  172. return FALSE;
  173. }
  174. }
  175. static public function printFile(string $_id) {
  176. $filePatch = file::download($_id, DIR_DATAS_DOCS);
  177. if (file_exists($filePatch) && is_readable($filePatch)) {
  178. $file_info = new finfo(FILEINFO_MIME_TYPE);
  179. $mime_type = $file_info->file($filePatch);
  180. header('Content-Type: ' . $mime_type);
  181. header('Content-Length: ' . filesize($filePatch));
  182. readfile($filePatch);
  183. } else {
  184. echo "Le fichier n'a pas été trouvé ou n'est pas lisible.";
  185. }
  186. }
  187. static public function getList(){
  188. }
  189. static public function get(float $_id){
  190. db::query("SELECT "
  191. . "" . DB_T_DOCUMENTS . ".id, "
  192. . "" . DB_T_DOCUMENTS . ".id_type, "
  193. . "" . DB_T_DOCUMENTS . ".titre, "
  194. . "" . DB_T_DOCUMENTS . ".date, "
  195. . "" . DB_T_DOCUMENTS . ".deadline, "
  196. . "" . DB_T_DOCUMENTS . ".description, "
  197. . "" . DB_T_DOCUMENTS . ".id_user_done, "
  198. . "" . DB_T_DOCUMENTS . ".date_done, "
  199. . "CONCAT(" . DB_T_USER . ".prenom, ' ', " . DB_T_USER . ".nom) AS doneUser "
  200. . "FROM " . DB_T_DOCUMENTS . " "
  201. . "LEFT JOIN " . DB_T_USER . " ON " . DB_T_USER . ".id = " . DB_T_DOCUMENTS . ".id_user_done "
  202. . "WHERE " . DB_T_DOCUMENTS . ".id = :id");
  203. db::bind(':id', $_id);
  204. $document = db::single();
  205. $document["tagsSupplier"] = self::getTags($_id, 2);
  206. $document["tagsUser"] = self::getTags($_id, 1);
  207. $files = self::getFiles($_id);
  208. return array("document" => $document, "files" => $files);
  209. }
  210. static public function getTags(float $_idDocument, float $_idTypeTags){
  211. db::query("SELECT "
  212. . "" . DB_T_TAGS . ".label "
  213. . "FROM " . DB_T_DOCUMENT_TAGS . " "
  214. . "INNER JOIN " . DB_T_TAGS . " ON " . DB_T_TAGS . ".id = " . DB_T_DOCUMENT_TAGS . ".id_tags "
  215. . "WHERE " . DB_T_DOCUMENT_TAGS . ".id_documents = :idDocument AND " . DB_T_DOCUMENT_TAGS . ".id_type_tags = :idTypeTags "
  216. . "ORDER BY " . DB_T_DOCUMENT_TAGS . ".creer");
  217. db::bind(':idDocument', $_idDocument);
  218. db::bind(':idTypeTags', $_idTypeTags);
  219. $tmp = db::resultset();
  220. if(isset($tmp[0])){
  221. $return = NULL;
  222. foreach ($tmp as $value) {
  223. $return .= $value["label"].",";
  224. }
  225. $return = substr($return, 0, -1);
  226. return $return;
  227. } else {
  228. return NULL;
  229. }
  230. }
  231. static public function getFiles(float $_idDocument){
  232. db::query("SELECT "
  233. . "" . DB_T_FILES . ".id, "
  234. . "" . DB_T_FILES . ".name, "
  235. . "" . DB_T_FILES . ".size, "
  236. . "" . DB_T_FILES . ".creer, "
  237. . "" . DB_T_FILES . ".id_user, "
  238. . "CONCAT(" . DB_T_USER . ".prenom, ' ', " . DB_T_USER . ".nom) AS user "
  239. . "FROM " . DB_T_DOCUMENT_FILES . " "
  240. . "INNER JOIN " . DB_T_FILES . " ON " . DB_T_FILES . ".id = " . DB_T_DOCUMENT_FILES . ".id_files "
  241. . "INNER JOIN " . DB_T_USER . " ON " . DB_T_USER . ".id = " . DB_T_FILES . ".id_user "
  242. . "WHERE " . DB_T_DOCUMENT_FILES . ".id_documents = :id "
  243. . "ORDER BY " . DB_T_FILES . ".creer");
  244. db::bind(':id', $_idDocument);
  245. $tmp = db::resultset();
  246. if(isset($tmp[0])){
  247. return $tmp;
  248. } else {
  249. return NULL;
  250. }
  251. }
  252. }