123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- const _ = require('lodash')
- module.exports = {
- activate() {
- // not used
- },
- deactivate() {
- // not used
- },
- /**
- * INIT
- */
- init() {
- // not used
- },
- /**
- * 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 => {
- switch(WIKI.config.db.type) {
- 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
- // 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
- }
- },
- /**
- * CREATE
- *
- * @param {Object} page Page to create
- */
- async created(page) {
- // not used
- },
- /**
- * UPDATE
- *
- * @param {Object} page Page to update
- */
- async updated(page) {
- // not used
- },
- /**
- * 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
- }
- }
|