document.class.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  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(string $_id){
  16. db::query("DELETE FROM ". DB_T_DOCUMENT_FILES ." WHERE id_files = :id_files");
  17. db::bind(':id_files', $_id);
  18. db::execute();
  19. file::delete($_id, DIR_DATAS_DOCS);
  20. }
  21. static public function deleteFiles(float $_id){
  22. foreach (self::getFiles($_id) as $file) {
  23. db::query("DELETE FROM ". DB_T_DOCUMENT_FILES ." WHERE id_files = :id_files");
  24. db::bind(':id_files', $file["id"]);
  25. db::execute();
  26. file::delete($file["id"], DIR_DATAS_DOCS);
  27. }
  28. }
  29. static public function getTypes(){
  30. db::query("SELECT "
  31. . "* "
  32. . "FROM " . DB_T_TYPE_DOCUMENT);
  33. return db::resultset();
  34. }
  35. public static function delete(float $_id)
  36. {
  37. try {
  38. db::query("DELETE FROM ". DB_T_DOCUMENT_TAGS ." WHERE id_documents = :id_documents");
  39. db::bind(':id_documents', $_id);
  40. db::execute();
  41. self::deleteFiles($_id);
  42. db::query("DELETE FROM " . DB_T_DOCUMENTS . " WHERE id = :id");
  43. db::bind(':id', $_id);
  44. db::execute();
  45. alert::recSuccess("Le document vient d'être supprimé");
  46. return TRUE;
  47. } catch (Exception $ex) {
  48. alert::recError("Erreur à la suppression du document");
  49. return FALSE;
  50. }
  51. }
  52. public static function lastAdd()
  53. {
  54. db::query("SELECT MAX(id) AS id FROM " . DB_T_DOCUMENTS);
  55. return db::single()["id"];
  56. }
  57. private static function addFile(float $_idDocument, string $_idFile)
  58. {
  59. db::query("INSERT INTO " . DB_T_DOCUMENT_FILES . " (id_documents, id_files) VALUES (:id_documents, :id_files)");
  60. db::bind(':id_documents', $_idDocument);
  61. db::bind(':id_files', $_idFile);
  62. try {
  63. db::execute();
  64. return TRUE;
  65. } catch (Exception $ex) {
  66. return FALSE;
  67. }
  68. }
  69. private static function addTags(float $_idDocument, string $_tags = NULL, float $_type)
  70. {
  71. db::query("DELETE FROM " . DB_T_DOCUMENT_TAGS . " WHERE id_documents = :id_documents AND id_type_tags = :id_type_tags");
  72. db::bind(':id_documents', $_idDocument);
  73. db::bind(':id_type_tags', $_type);
  74. db::execute();
  75. if($_tags != NULL){
  76. $tags = explode(",", $_tags);
  77. $sqlMaj = "";
  78. foreach ($tags as $tag) {
  79. $sqlMaj .= " (:id_documents, ".$tag.", :id_type_tags),";
  80. }
  81. $sqlMaj = substr($sqlMaj, 0, -1);
  82. db::query("INSERT INTO " . DB_T_DOCUMENT_TAGS . " (id_documents, id_tags, id_type_tags) VALUES" . $sqlMaj);
  83. db::bind(':id_documents', $_idDocument);
  84. db::bind(':id_type_tags', $_type);
  85. try {
  86. db::execute();
  87. return TRUE;
  88. } catch (Exception $ex) {
  89. return FALSE;
  90. }
  91. }
  92. }
  93. public static function add()
  94. {
  95. $file = core::getFiles("document-import");
  96. $md5 = md5_file($file["tmp_name"]);
  97. if(file::findM5($md5) == TRUE){
  98. alert::recError("Ce fichier a déjà été utilisé : " . $file["name"]);
  99. session::setTemp(core::getPost(), "document");
  100. } else {
  101. db::query("INSERT INTO " . DB_T_DOCUMENTS . " (id_type, titre, date, deadline, description, id_user) VALUES (:id_type, :titre, :date, :deadline, :description, :id_user)");
  102. db::bind(':id_type', core::getPost("id_type"));
  103. db::bind(':titre', core::getPost("titre"));
  104. db::bind(':date', core::getPost("date"));
  105. db::bind(':deadline', core::getPost("deadline"));
  106. db::bind(':description', core::getPost("description"));
  107. db::bind(':id_user', session::getId());
  108. try {
  109. db::execute();
  110. $lastId = db::lastInsertId();
  111. } catch (Exception $ex) {
  112. alert::recError("Erreur à l'enregistrement de la fiche : " . core::getPost("titre"));
  113. return FALSE;
  114. }
  115. try {
  116. $idFile = self::uploadFile($file);
  117. } catch (Exception $ex) {
  118. alert::recError("Erreur à l'enregistrement de la pièce jointe : " . $idFile);
  119. return FALSE;
  120. }
  121. try {
  122. self::addFile($lastId, $idFile);
  123. } catch (Exception $ex) {
  124. alert::recError("Erreur à l'enregistrement de la liaison : " . $idFile);
  125. return FALSE;
  126. }
  127. try {
  128. $tagsUser = tags::textToId(core::getPost("tagsUser"), 1);
  129. self::addTags($lastId, $tagsUser, 1);
  130. $tagsSupplier = tags::textToId(core::getPost("tagsSupplier"), 2);
  131. self::addTags($lastId, $tagsSupplier, 2);
  132. } catch (Exception $ex) {
  133. alert::recError("Erreur à l'enregistrement de la liaison : " . $idFile);
  134. return FALSE;
  135. }
  136. return $lastId;
  137. }
  138. }
  139. public static function update()
  140. {
  141. if(core::ifFiles("attachement-document") == TRUE){
  142. $file = core::getFiles("attachement-document");
  143. $md5 = md5_file($file["tmp_name"]);
  144. }
  145. if(isset($md5) AND file::findM5($md5) == TRUE){
  146. alert::recError("Le fichier \"" . $file["name"] . "\" a déjà été utilisé");
  147. session::setTemp(core::getPost(), "document");
  148. } else {
  149. if(isset($md5)){
  150. try {
  151. $idFile = self::uploadFile($file);
  152. } catch (Exception $ex) {
  153. alert::recError("Erreur à l'enregistrement de la pièce jointe : " . $idFile);
  154. return FALSE;
  155. }
  156. try {
  157. self::addFile(core::getPost("id"), $idFile);
  158. } catch (Exception $ex) {
  159. alert::recError("Erreur à l'enregistrement de la liaison : " . $idFile);
  160. return FALSE;
  161. }
  162. }
  163. if(core::getPost("delete-attachement")){
  164. foreach (core::getPost("delete-attachement") as $deleteAttach) {
  165. self::deleteFile($deleteAttach);
  166. }
  167. }
  168. try {
  169. $tagsUser = tags::textToId(core::getPost("tagsUser"), 1);
  170. self::addTags(core::getPost("id"), $tagsUser, 1);
  171. $tagsSupplier = tags::textToId(core::getPost("tagsSupplier"), 2); echo $tagsSupplier;
  172. self::addTags(core::getPost("id"), $tagsSupplier, 2);
  173. } catch (Exception $ex) {
  174. alert::recError("Erreur à l'enregistrement de la liaison : " . core::getPost("id"));
  175. return FALSE;
  176. }
  177. if(core::ifPost("done") AND core::getPost("done") == TRUE){
  178. $sql = ", id_user_done = :id_user_done, date_done = CURRENT_TIMESTAMP ";
  179. } else {
  180. $sql = "";
  181. }
  182. db::query("UPDATE " . DB_T_DOCUMENTS . " SET "
  183. . "id_type = :id_type, "
  184. . "titre = :titre, "
  185. . "date = :date, "
  186. . "deadline = :deadline, "
  187. . "description = :description "
  188. . $sql
  189. . "WHERE id = :id");
  190. db::bind(':id_type', core::getPost("id_type"));
  191. db::bind(':titre', core::getPost("titre"));
  192. db::bind(':date', core::getPost("date"));
  193. db::bind(':deadline', core::getPost("deadline"));
  194. db::bind(':description', core::getPost("description"));
  195. db::bind(':id', core::getPost("id"));
  196. if(core::ifPost("done") AND core::getPost("done") == TRUE){
  197. db::bind(':id_user_done', session::getId());
  198. }
  199. try {
  200. db::execute();
  201. alert::recSuccess("Document mis à jour avec succès");
  202. return TRUE;
  203. } catch (Exception $ex) {
  204. alert::recError("Erreur de mise à jour du document : " . $ex);
  205. return FALSE;
  206. }
  207. }
  208. }
  209. static public function printFile(string $_id) {
  210. $filePatch = file::download($_id, DIR_DATAS_DOCS);
  211. if (file_exists($filePatch) && is_readable($filePatch)) {
  212. $file_info = new finfo(FILEINFO_MIME_TYPE);
  213. $mime_type = $file_info->file($filePatch);
  214. header('Content-Type: ' . $mime_type);
  215. header('Content-Length: ' . filesize($filePatch));
  216. readfile($filePatch);
  217. } else {
  218. echo "Le fichier n'a pas été trouvé ou n'est pas lisible.";
  219. }
  220. }
  221. static public function getList(){
  222. }
  223. static public function get(float $_id){
  224. db::query("SELECT "
  225. . "" . DB_T_DOCUMENTS . ".id, "
  226. . "" . DB_T_DOCUMENTS . ".id_type, "
  227. . "" . DB_T_DOCUMENTS . ".titre, "
  228. . "" . DB_T_DOCUMENTS . ".date, "
  229. . "" . DB_T_DOCUMENTS . ".deadline, "
  230. . "" . DB_T_DOCUMENTS . ".description, "
  231. . "" . DB_T_DOCUMENTS . ".id_user_done, "
  232. . "" . DB_T_DOCUMENTS . ".date_done, "
  233. . "CONCAT(" . DB_T_USER . ".prenom, ' ', " . DB_T_USER . ".nom) AS doneUser "
  234. . "FROM " . DB_T_DOCUMENTS . " "
  235. . "LEFT JOIN " . DB_T_USER . " ON " . DB_T_USER . ".id = " . DB_T_DOCUMENTS . ".id_user_done "
  236. . "WHERE " . DB_T_DOCUMENTS . ".id = :id");
  237. db::bind(':id', $_id);
  238. $document = db::single();
  239. $document["tagsSupplier"] = self::getTags($_id, 2);
  240. $document["tagsUser"] = self::getTags($_id, 1);
  241. $files = self::getFiles($_id);
  242. return array("document" => $document, "files" => $files);
  243. }
  244. static public function getTags(float $_idDocument, float $_idTypeTags){
  245. db::query("SELECT "
  246. . "" . DB_T_TAGS . ".label "
  247. . "FROM " . DB_T_DOCUMENT_TAGS . " "
  248. . "INNER JOIN " . DB_T_TAGS . " ON " . DB_T_TAGS . ".id = " . DB_T_DOCUMENT_TAGS . ".id_tags "
  249. . "WHERE " . DB_T_DOCUMENT_TAGS . ".id_documents = :idDocument AND " . DB_T_DOCUMENT_TAGS . ".id_type_tags = :idTypeTags "
  250. . "ORDER BY " . DB_T_DOCUMENT_TAGS . ".creer");
  251. db::bind(':idDocument', $_idDocument);
  252. db::bind(':idTypeTags', $_idTypeTags);
  253. $tmp = db::resultset();
  254. if(isset($tmp[0])){
  255. $return = NULL;
  256. foreach ($tmp as $value) {
  257. $return .= $value["label"].",";
  258. }
  259. $return = substr($return, 0, -1);
  260. return $return;
  261. } else {
  262. return NULL;
  263. }
  264. }
  265. static public function getFiles(float $_idDocument){
  266. db::query("SELECT "
  267. . "" . DB_T_FILES . ".id, "
  268. . "" . DB_T_FILES . ".name, "
  269. . "" . DB_T_FILES . ".size, "
  270. . "" . DB_T_FILES . ".creer, "
  271. . "" . DB_T_FILES . ".id_user, "
  272. . "CONCAT(" . DB_T_USER . ".prenom, ' ', " . DB_T_USER . ".nom) AS user "
  273. . "FROM " . DB_T_DOCUMENT_FILES . " "
  274. . "INNER JOIN " . DB_T_FILES . " ON " . DB_T_FILES . ".id = " . DB_T_DOCUMENT_FILES . ".id_files "
  275. . "INNER JOIN " . DB_T_USER . " ON " . DB_T_USER . ".id = " . DB_T_FILES . ".id_user "
  276. . "WHERE " . DB_T_DOCUMENT_FILES . ".id_documents = :id "
  277. . "ORDER BY " . DB_T_FILES . ".creer");
  278. db::bind(':id', $_idDocument);
  279. $tmp = db::resultset();
  280. if(isset($tmp[0])){
  281. return $tmp;
  282. } else {
  283. return NULL;
  284. }
  285. }
  286. static public function printAttachement(array $_attachs){
  287. echo '<ol class="list-group list-group-numbered">';
  288. foreach ($_attachs as $key => $attach) {
  289. echo '<li class="list-group-item d-flex justify-content-between align-items-start" id="attach-'.$attach["id"].'">
  290. <div class="ms-2 me-auto">
  291. <div><span class="fw-bold">'.$attach["name"].'</span> ('.core::convertBytes($attach["size"]).')</div>
  292. Chargé le '.core::convertDate($attach["creer"]).' par '.$attach["user"].'
  293. <div id="select-attach-'.$attach["id"].'" style="color:red;"></div>
  294. </div>';
  295. if($key == 0){
  296. echo '
  297. <button type="button" class="btn btn btn-outline-primary" onclick="window.open(\'/document.php?id=' . $attach["id"] . '\', \'_blank\')"><i class="bi bi-eye-fill"></i></button>
  298. ';
  299. } else {
  300. echo '<div class="btn-group">
  301. <button type="button" class="btn btn btn-outline-primary" onclick="window.open(\'/document.php?id=' . $attach["id"] . '\', \'_blank\')"><i class="bi bi-eye-fill"></i></button>
  302. <button type="button" class="btn btn-outline-danger" onclick="deleteAttachment(\''.$attach["id"].'\')" id="button-attach-'.$attach["id"].'"><i class="bi bi-trash"></i></button>
  303. </div>';
  304. }
  305. echo '</li>';
  306. }
  307. echo '</ol><br />';
  308. }
  309. }