engine.js 2.06 KB
Newer Older
1
/* global WIKI */
2

3 4
module.exports = {
  activate() {
5
    // not used
6 7
  },
  deactivate() {
8
    // not used
9
  },
10 11 12 13 14
  /**
   * INIT
   */
  init() {
    // not used
15
  },
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
  /**
   * QUERY
   *
   * @param {String} q Query
   * @param {Object} opts Additional options
   */
  async query(q, opts) {
    const results = await WIKI.models.pages.query()
      .column('id', 'title', 'description', 'path', 'localeCode as locale')
      .where(builder => {
        builder.where('isPublished', true)
        if (opts.locale) {
          builder.andWhere('localeCode', opts.locale)
        }
        if (opts.path) {
          builder.andWhere('path', 'like', `${opts.path}%`)
        }
        // TODO: Add user permissions filtering
        builder.andWhere(builder => {
35
          switch (WIKI.config.db.type) {
36 37 38 39 40 41 42 43 44
            case 'postgres':
              builder.where('title', 'ILIKE', `%${q}%`)
              builder.orWhere('description', 'ILIKE', `%${q}%`)
              break
            case 'mysql':
            case 'mariadb':
              builder.whereRaw(`title LIKE '%?%' COLLATE utf8_general_ci`, [q])
              builder.orWhereRaw(`description LIKE '%?%' COLLATE utf8_general_ci`, [q])
              break
45

46 47 48 49 50 51 52 53 54 55 56 57 58 59
            // TODO: MSSQL handling
            default:
              builder.where('title', 'LIKE', `%${q}%`)
              builder.orWhere('description', 'LIKE', `%${q}%`)
              break
          }
        })
      })
      .limit(WIKI.config.search.maxHits)
    return {
      results,
      suggestions: [],
      totalHits: results.length
    }
60
  },
61 62 63 64 65 66 67
  /**
   * CREATE
   *
   * @param {Object} page Page to create
   */
  async created(page) {
    // not used
68
  },
69 70 71 72 73 74 75
  /**
   * UPDATE
   *
   * @param {Object} page Page to update
   */
  async updated(page) {
    // not used
76
  },
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
  /**
   * DELETE
   *
   * @param {Object} page Page to delete
   */
  async deleted(page) {
    // not used
  },
  /**
   * RENAME
   *
   * @param {Object} page Page to rename
   */
  async renamed(page) {
    // not used
  },
  /**
   * REBUILD INDEX
   */
  async rebuild() {
    // not used
98 99
  }
}