Files
xamxam/docs/search.md
Pontoporeia 3cd96ed28a Deduplicate and standardise documentation
- Consolidate 36 markdown files → 14 (plus TODO.md)
- Merge overlapping docs into authoritative files:
  - database.md (from DATABASE_SPECIFICATION + QUICK_SCHEMA_REFERENCE + DATABASE_CONFIG + SETUP)
  - deployment.md (from SERVER_SETUP + COMPLETE_DEPLOYMENT_GUIDE + DEPLOYMENT_STEPS)
  - security.md (from SECURITY_ANALYSIS + TODO.SECURITY)
  - development.md (from DEVELOPMENT_GUIDE + LIVE_RELOAD_SETUP + TEST_CENTRALIZATION)
  - migration-history.md (from 11 past migration docs)
- Standardise all filenames to lowercase
- Remove non-doc files (Context.md research notes, chat export)
- Remove superseded docs (SECURITY.md pre-SQLite, SECURITY_IMPLEMENTATION, README_SECURE_SEARCH)
- Fix stale cross-references
2026-04-15 14:24:44 +02:00

5.4 KiB

Search Feature Documentation

Overview

The search feature allows users to search across theses using multiple criteria including full-text search and advanced filters.

Files Created/Modified

New Files

  1. search.php - Main search interface page
  2. create_test_db.php - Script to generate test database with sample data
  3. search.md - This documentation file

Modified Files

  1. Database.php - Added search methods:

    • searchTheses() - Search with multiple filters
    • countSearchResults() - Count matching results
    • getAvailableYears() - Get all years from published theses
    • getOrientations() - Get all orientations
    • getApPrograms() - Get all AP programs
    • getFinalityTypes() - Get all finality types
    • getUsedKeywords() - Get keywords used in published theses
    • getFormatTypes() - Get all format types
    • getLanguages() - Get all languages
  2. inc/header.php - Added "Rechercher" link to navigation

Searchable Fields

The search feature allows filtering by:

  1. Full-text query - Searches across:

    • Title
    • Subtitle
    • Synopsis
    • Author names
    • Supervisor names
    • Keywords
  2. Year - Filter by specific year

  3. Orientation - Filter by artistic orientation:

    • Arts Numériques, Dessin, Cinéma d'animation, Installation-Performance
    • Peinture, Photographie, Sculpture, Vidéographie
    • Graphisme, Typographie, Design Numérique, Illustration
    • Bande-Dessinée, Sérigraphie, Gravure
  4. AP Program - Filter by atelier pratique:

    • Narration Spéculative
    • Design et Politique du Multiple (DPM)
    • Atelier Pratiques Situées (APS)
    • Lieux, Interdisciplinarités, Écologie, Nécessité, Systèmes (LIENS)
  5. Finality - Filter by master finality:

    • Approfondi
    • Enseignement
    • Spécialisé
  6. Format - Filter by work format:

    • Site web, Audio, Vidéo, Performance
    • Objet éditorial, Installation, Autre
  7. Language - Filter by language (Français, Anglais)

  8. Keyword - Filter by specific keyword

  9. Type - Filter by thesis type:

    • TFE (final thesis projects)
    • Doctoral theses

Testing the Search Feature

1. Create Test Database

Run the script to generate sample data:

cd /home/padlock/dev/posterg-website/front-backend
php create_test_db.php

This will create test.db in the formulaire/ directory with:

  • 6 sample theses (various years, orientations, and programs)
  • 5 sample authors
  • 3 sample supervisors
  • 20 keywords
  • Complete relationships (authors, supervisors, keywords, formats, languages)

2. Access the Search Page

Navigate to: search.php

3. Test Search Scenarios

  • Enter "urbain" in the search field
  • Should find: "Espaces Urbains et Narration Collective"

Scenario 2: Filter by Year

  • Select year: 2024
  • Should find: 3 theses from 2024

Scenario 3: Filter by Orientation

  • Select orientation: "Installation-Performance"
  • Should find: 2 theses

Scenario 4: Filter by AP Program

  • Select AP: "Narration Spéculative"
  • Should find: 2 theses

Scenario 5: Combined Filters

  • Enter "performance" in search field
  • Select year: 2024
  • Should find: 1 thesis ("Corps et Technologies")
  • Select keyword: "écologie"
  • Should find: "Écologies Affectives"

Database Schema Reference

The search uses the v_theses_public view which combines:

  • Main thesis data from theses table
  • Related authors via thesis_authors junction table
  • Related supervisors via thesis_supervisors junction table
  • Related keywords via thesis_keywords junction table
  • Related formats via thesis_formats junction table
  • Related languages via thesis_languages junction table
  • Predefined values from lookup tables (orientations, ap_programs, finality_types, etc.)

Features

Pagination

  • Results are paginated (20 items per page)
  • Previous/Next navigation
  • Numbered page links

Result Display

  • Shows total number of results
  • Card-based layout matching the main index page
  • Displays: title, author, year, synopsis excerpt
  • Links to full thesis detail page

User Experience

  • All filters are optional
  • Filters can be combined
  • "Réinitialiser" button to clear all filters
  • Maintains filter state during pagination

Security Considerations

  • All user inputs are sanitized using htmlspecialchars()
  • SQL queries use prepared statements with parameter binding
  • No direct SQL injection risk
  • Only published theses are searchable (is_published = 1)

Future Enhancements

Potential improvements:

  1. Auto-complete - Suggest keywords/authors as user types
  2. Faceted search - Show filter counts (e.g., "Peinture (12)")
  3. Sort options - Sort by year, title, relevance
  4. Save searches - Allow users to bookmark search queries
  5. Export results - Export search results as CSV/JSON
  6. Advanced boolean search - Support AND/OR/NOT operators
  7. Search highlights - Highlight matching terms in results
  8. Related theses - Show similar works based on keywords
  9. Statistics - Show search analytics and popular queries
  10. AJAX search - Live search without page reload

Technical Notes

  • Uses SQLite LIKE operator for text matching (case-insensitive)
  • Searches across GROUP_CONCAT fields in the view for many-to-many relationships
  • Efficient use of indexes defined in schema.sql
  • Compatible with existing Database.php singleton pattern