engine.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /* global WIKI */
  2. module.exports = {
  3. activate() {
  4. // not used
  5. },
  6. deactivate() {
  7. // not used
  8. },
  9. /**
  10. * INIT
  11. */
  12. init() {
  13. // not used
  14. },
  15. /**
  16. * QUERY
  17. *
  18. * @param {String} q Query
  19. * @param {Object} opts Additional options
  20. */
  21. async query(q, opts) {
  22. const results = await WIKI.models.pages.query()
  23. .column('pages.id', 'title', 'description', 'path', 'localeCode as locale')
  24. .withGraphJoined('tags') // Adding page tags since they can be used to check resource access permissions
  25. .modifyGraph('tags', builder => {
  26. builder.select('tag')
  27. })
  28. .where(builder => {
  29. builder.where('isPublished', true)
  30. if (opts.locale) {
  31. builder.andWhere('localeCode', opts.locale)
  32. }
  33. if (opts.path) {
  34. builder.andWhere('path', 'like', `${opts.path}%`)
  35. }
  36. builder.andWhere(builderSub => {
  37. if (WIKI.config.db.type === 'postgres') {
  38. builderSub.where('title', 'ILIKE', `%${q}%`)
  39. builderSub.orWhere('description', 'ILIKE', `%${q}%`)
  40. builderSub.orWhere('path', 'ILIKE', `%${q.toLowerCase()}%`)
  41. } else {
  42. builderSub.where('title', 'LIKE', `%${q}%`)
  43. builderSub.orWhere('description', 'LIKE', `%${q}%`)
  44. builderSub.orWhere('path', 'LIKE', `%${q.toLowerCase()}%`)
  45. }
  46. })
  47. })
  48. .limit(WIKI.config.search.maxHits)
  49. return {
  50. results,
  51. suggestions: [],
  52. totalHits: results.length
  53. }
  54. },
  55. /**
  56. * CREATE
  57. *
  58. * @param {Object} page Page to create
  59. */
  60. async created(page) {
  61. // not used
  62. },
  63. /**
  64. * UPDATE
  65. *
  66. * @param {Object} page Page to update
  67. */
  68. async updated(page) {
  69. // not used
  70. },
  71. /**
  72. * DELETE
  73. *
  74. * @param {Object} page Page to delete
  75. */
  76. async deleted(page) {
  77. // not used
  78. },
  79. /**
  80. * RENAME
  81. *
  82. * @param {Object} page Page to rename
  83. */
  84. async renamed(page) {
  85. // not used
  86. },
  87. /**
  88. * REBUILD INDEX
  89. */
  90. async rebuild() {
  91. // not used
  92. }
  93. }