100 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* global WIKI */
 | 
						|
 | 
						|
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
 | 
						|
  }
 | 
						|
}
 |