Skip to content

Conversation

@coderabbitai
Copy link

@coderabbitai coderabbitai bot commented Jan 31, 2026

Docstrings generation was requested by @fabiodalez-dev.

The following files were modified:

  • app/Controllers/CsvImportController.php
  • app/Controllers/LibriController.php
  • app/Controllers/Plugins/LibraryThingController.php
  • app/Controllers/Plugins/LibraryThingInstaller.php
  • app/Models/BookRepository.php
These file types are not supported
  • app/Controllers/Plugins/README_LibraryThing.md
  • composer.json
  • vendor/composer/installed.json
ℹ️ Note

CodeRabbit cannot perform edits on its own pull requests yet.

claude and others added 9 commits January 30, 2026 15:49
Add optional LibraryThing.com import/export plugin that extends the existing
CSV functionality without modifying it. The plugin supports TSV format and
provides intelligent field mapping.

Features:
- LibraryThing TSV import with automatic column mapping
- LibraryThing TSV export with full field support (55+ columns)
- Flexible column mapping supporting multiple languages (IT, EN, etc.)
- TAB delimiter support in existing CSV import (backward compatible)
- Integration with existing scraping system
- Separate plugin architecture (non-invasive)
- Comprehensive documentation

Components added:
- app/Controllers/Plugins/LibraryThingController.php - Main plugin controller
- app/Views/plugins/librarything_import.php - Import UI
- app/Controllers/Plugins/README_LibraryThing.md - Complete documentation

Modified for integration:
- app/Controllers/CsvImportController.php - Added TAB delimiter support
- app/Controllers/LibriController.php - Minor export enhancements
- app/Routes/web.php - Added plugin routes
- app/Views/libri/index.php - Added dropdown menus for import/export

The existing CSV import/export system remains completely unchanged and
continues to work normally. The plugin is 100% optional and backward compatible.

https://claude.ai/code/session_01XdiVE4JpU8DFXr3eeLwFuB
Add automatic installation system for LibraryThing plugin that creates
all required database fields when plugin is installed.

Features:
- LibraryThingInstaller class for database schema management
- Automatic creation of 29 LibraryThing-specific fields
- Plugin status checking and validation
- Admin interface for install/uninstall operations
- Safe uninstall with data deletion warnings
- Routes for plugin administration

Components added:
- app/Controllers/Plugins/LibraryThingInstaller.php - Installation logic
- app/Views/plugins/librarything_admin.php - Admin UI
- Updated LibraryThingController with admin methods
- Added admin routes to web.php

Database fields added by installer (29 total):
- Review and rating fields (review, rating, comment, private_comment)
- Physical description (weight, height, thickness, length, physical_description)
- Library classifications (LCCN, LC Classification, other call number)
- Date tracking (date_acquired, date_started, date_read)
- Catalog IDs (BCID, OCLC, Work ID, ISSN)
- Language info (original_languages)
- Acquisition (source, from_where)
- Lending tracking (lending_patron, lending_status, lending_start, lending_end)
- Financial (purchase_price, value, condition_lt)

Next steps: Update import/export to use all fields, modify book form

https://claude.ai/code/session_01XdiVE4JpU8DFXr3eeLwFuB
Implement comprehensive support for all 29 LibraryThing-specific fields
across import, export, and book management interfaces.

Changes:
- LibraryThingController: Update parseLibraryThingRow() to parse all 29
  fields from TSV import including review, rating, physical dimensions,
  library classifications, date tracking, catalog IDs, lending status,
  and financial data
- LibraryThingController: Update formatLibraryThingRow() for export to
  include all 29 database fields instead of empty placeholders
- LibraryThingController: Implement parseDate() helper for flexible date
  parsing from various LibraryThing formats
- LibraryThingController: Update updateBook() and insertBook() to handle
  all 29 fields with conditional SQL based on plugin installation
- BookRepository: Add all 29 LibraryThing fields to createBasic() and
  updateBasic() methods with hasColumn() checks for optional handling
- LibriController: Add all 29 LibraryThing fields to accepted fields
  array in create and update methods
- book_form.php: Add comprehensive LibraryThing fields section with
  8 logical subsections (Review & Rating, Physical Description, Library
  Classifications, Date Tracking, Catalog IDs, Language & Acquisition,
  Lending Tracking, Financial Fields) - visible only when plugin installed

All changes are backward-compatible and non-invasive. Fields are only
created/used when plugin is installed via LibraryThingInstaller.

https://claude.ai/code/session_01XdiVE4JpU8DFXr3eeLwFuB
Rimuove i campi duplicati dal plugin LibraryThing per utilizzare i
campi nativi dell'applicazione, evitando ridondanza nel database.

**Campi rimossi (ora mappati ai nativi):**
- weight, height, thickness, length → peso + dimensioni (nativi)
- date_acquired → data_acquisizione (nativo)
- purchase_price → prezzo (nativo)

**Campi LibraryThing unici mantenuti (25):**
- Review, Rating, Comment, Private Comment
- Physical Description (descrizione testuale)
- LCCN, LC Classification, Other Call Number
- Date Started, Date Read (solo date di lettura)
- BCID, OCLC, Work ID, ISSN
- Original Languages, Source, From Where
- Lending Patron, Status, Start, End
- Value (valore corrente, diverso da prezzo), Condition

**Modifiche:**
- LibraryThingInstaller: rimossi 4 campi duplicati dall'installer
- parseLibraryThingRow(): mappati campi TSV ai nativi
  * Weight → peso (con parsing numerico)
  * Height/Thickness/Length → dimensioni (combinati)
  * Acquired → data_acquisizione
  * Purchase Price → prezzo
- updateBook/insertBook(): aggiornate query SQL (25 campi LT + nativi)
- LibriController: rimossi campi duplicati dall'array fields
- BookRepository (createBasic/updateBasic): rimossi campi duplicati
- book_form.php: rimossi campi duplicati dalla UI con note esplicative

Tutti i dati TSV vengono ora correttamente caricati nei campi nativi
dove disponibili, mantenendo solo i campi unici di LibraryThing.

https://claude.ai/code/session_01XdiVE4JpU8DFXr3eeLwFuB
Implementa un sistema completo per controllare la visibilità dei
campi LibraryThing nel frontend pubblico del libro.

**Nuove funzionalità:**
- Checkbox nel form di modifica libro per ogni campo LibraryThing (25)
- Salvataggio preferenze in colonna JSON `lt_fields_visibility`
- Visualizzazione condizionale nel frontend (scheda_libro.php)
- I campi privati (private_comment) non vengono mai mostrati nel frontend

**Modifiche installer:**
- Aggiunta colonna `lt_fields_visibility` JSON per preferenze
- Metodo statico `getLibraryThingFields()` con lista completa campi
- Aggiornato getStatus() per contare 26 campi (25 data + 1 visibility)

**Modifiche book_form.php:**
- Nuova sezione "Visibilità nel Frontend" con checkbox organizzati
- Checkbox raggruppati per categoria (Recensione, Date, ecc.)
- Parsing delle preferenze esistenti da JSON
- Note esplicative per l'utente

**Modifiche LibriController:**
- Salvataggio lt_fields_visibility in create() e update()
- Parsing array lt_visibility[] da form
- Encoding JSON con UTF-8

**Modifiche scheda_libro.php (frontend):**
- Nuova sezione "Informazioni LibraryThing" condizionale
- Mostra solo campi selezionati come visibili
- Formattazione speciale per tipo campo:
  * rating: stelle ★★★★★
  * review/comment: prose con nl2br
  * date: formato italiano con /
  * value: formato valuta €
  * lending_status: badge colorati
- Esclusione automatica private_comment dal frontend

Tutti i campi LibraryThing sono ora editabili nel backend e
selettivamente visibili nel frontend basandosi sulle preferenze utente.

https://claude.ai/code/session_01XdiVE4JpU8DFXr3eeLwFuB
- Remove all dark: Tailwind variants from LibraryThing visibility checkboxes
- Remove all dark: variants from LibraryThing frontend display section
- Use app's standard checkbox styling (w-4 h-4 rounded border-gray-300 text-gray-900 focus:ring-gray-500)
- Maintain compatibility with existing theme system instead of Tailwind dark mode
- Ensure consistent styling with rest of application

https://claude.ai/code/session_7d5114ca-2cbd-4ff1-a9e2-a4925e70b791
- Pass libraryThingInstalled flag from controllers to templates
- Replace isInstalled($db) calls in views with flag check
- Remove non-existent App\Support\Database reference
- Fix phpstan level 4 errors in LibraryThing code
- Reduce phpstan errors from 19 to 17 (remaining are pre-existing or false positives)

https://claude.ai/code/session_7d5114ca-2cbd-4ff1-a9e2-a4925e70b791
LibriController.php:
- Remove unnecessary null coalescing operators on mime field (always exists)
- Remove redundant $lockKey check before RELEASE_LOCK (variable always defined in scope)
- Remove ?? operators on copie_totali and sottotitolo (always exist in $fields array)

LibraryThingController.php:
- Simplify $isAjax condition to direct string comparison
- Add @phpstan-ignore annotation for false positive in catch block

Views (book_form.php, scheda_libro.php):
- Add variable declarations at top ($libro, $scaffali, $mensole) to satisfy phpstan
- Remove unnecessary ?? operators where variables are guaranteed to exist
- Add proper defaults for all variables used in templates

All phpstan level 4 errors resolved: from 17 errors to 0 errors

https://claude.ai/code/session_7d5114ca-2cbd-4ff1-a9e2-a4925e70b791
Docstrings generation was requested by @fabiodalez-dev.

* #46 (comment)

The following files were modified:

* `app/Controllers/CsvImportController.php`
* `app/Controllers/LibriController.php`
* `app/Controllers/Plugins/LibraryThingController.php`
* `app/Controllers/Plugins/LibraryThingInstaller.php`
* `app/Models/BookRepository.php`
@coderabbitai
Copy link
Author

coderabbitai bot commented Jan 31, 2026

Important

Review skipped

This PR was authored by the user configured for CodeRabbit reviews. By default, CodeRabbit skips reviewing PRs authored by this user. It's recommended to use a dedicated user account to post CodeRabbit review feedback.

To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • 🔍 Trigger a full review

Comment @coderabbitai help to get the list of available commands and usage tips.

@sonarqubecloud
Copy link

@fabiodalez-dev fabiodalez-dev force-pushed the claude/flexible-import-columns-9a3Kr branch 2 times, most recently from 9a002ca to d6ada7f Compare February 3, 2026 09:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants