projectData.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. const db = require("./data.js");
  2. let projectData = [];
  3. projectData.retrieveProjectImages = async function(id, lang, max){
  4. return new Promise((resolve, reject) => {
  5. db.all(
  6. "SELECT id, project, home, path, video, "
  7. + db.langQuery("title", lang) + ", " + db.langQuery("description", lang)
  8. + ", priority FROM project_image WHERE visible=1 AND project=? ORDER BY priority "
  9. + (parseInt(max) > 0 ? " LIMIT " + parseInt(max) : ""),
  10. parseInt(id),
  11. (err, imgs) => {
  12. if (err) reject(err);
  13. else resolve(imgs);
  14. }
  15. );
  16. });
  17. }
  18. projectData.getProjects = function(lang = null, images = null) {
  19. return new Promise((resolve, reject) => {
  20. projects = new Array();
  21. db.all(
  22. "SELECT id, permalink, "
  23. + db.langQuery("title", lang) + ", " + db.langQuery("description", lang)
  24. + ", priority FROM project WHERE visible=1 ORDER BY priority",
  25. async (err, rows) => {
  26. if(err) reject(err);
  27. else{
  28. if (images == false || parseInt(images) <= 0) resolve(rows);
  29. else{
  30. for (var i = 0; i < rows.length; i ++){
  31. if (images == true || parseInt(images) > 0){
  32. rows[i].images = new Array();
  33. var max = null;
  34. if (parseInt(images) > 0) max = parseInt(images);
  35. rows[i].images
  36. = await this.retrieveProjectImages(rows[i].id, lang, max);
  37. }
  38. projects.push(rows[i]);
  39. }
  40. resolve(projects);
  41. }
  42. }
  43. }
  44. );
  45. });
  46. }
  47. projectData.getProject = function(id, lang = null, images = null) {
  48. return new Promise((resolve, reject) => {
  49. db.get(
  50. "SELECT id, permalink, " + db.langQuery("title", lang)
  51. + ", " + db.langQuery("description", lang)
  52. + ", priority, null AS images FROM project WHERE visible=1 AND (id=? OR permalink=?)",
  53. parseInt(id), String(id),
  54. async (err, row) => {
  55. if(err) reject(err);
  56. else if (!row) resolve("[]");
  57. else{
  58. if (images == false || parseInt(images) <= 0) resolve(row);
  59. else{
  60. row.images = await this.retrieveProjectImages(row.id, lang, images);
  61. resolve(row);
  62. }
  63. }
  64. }
  65. );
  66. });
  67. }
  68. projectData.getProjectImages = function(id, lang = null, max = null) {
  69. return new Promise((resolve, reject) => {
  70. db.all(
  71. "SELECT id, project, home, path, video, "
  72. + db.langQuery("title", lang) + ", " + db.langQuery("description", lang)
  73. + ", priority FROM project_image WHERE visible = 1 AND project IN "
  74. + "(SELECT id FROM project WHERE visible = 1 AND (id = ? OR permalink = ?)) "
  75. + "ORDER BY priority " + (parseInt(max) > 0 ? " LIMIT " + parseInt(max) : ""),
  76. parseInt(id), String(id),
  77. (err, imgs) => {
  78. if (err) reject(err);
  79. else resolve(imgs);
  80. }
  81. );
  82. });
  83. }
  84. projectData.getProjectImage = function(projectId, imageId, lang = null) {
  85. return new Promise((resolve, reject) => {
  86. if (imageId.toLowerCase() == "random"){
  87. db.get(
  88. "SELECT id, project, home, path, video, "
  89. + db.langQuery("title", lang) + ", " + db.langQuery("description", lang)
  90. + ", priority FROM project_image WHERE visible=1 AND home=1 AND project IN "
  91. + "(SELECT id FROM project WHERE visible=1 AND home=1 AND video=0 "
  92. + "AND (id=? OR permalink=?)) ORDER BY RANDOM() LIMIT 1",
  93. parseInt(projectId), String(projectId),
  94. async (err, row) => {
  95. if(err) reject(err);
  96. else resolve(row);
  97. }
  98. );
  99. }
  100. else{
  101. db.get(
  102. "SELECT id, project, home, path, video, "
  103. + db.langQuery("title", lang) + ", " + db.langQuery("description", lang)
  104. + ", priority FROM project_image WHERE id=? AND home=1 AND visible=1 AND project IN "
  105. + "(SELECT id FROM project WHERE visible=1 AND (id=? OR permalink=?))",
  106. parseInt(projectId), String(projectId),
  107. async (err, row) => {
  108. if(err) reject(err);
  109. else resolve(row);
  110. }
  111. );
  112. }
  113. });
  114. }
  115. module.exports = projectData;