Home

PIWIGO Navigatie

 

Piwigo::Foto's Omschrijven

Algemeen
Op de Fotopagina’s wordt naast de foto, onder andere, de bij de foto gemaakte omschrijving weergegeven.
Voor het bewerken van de omschrijvingen bij de foto’s biedt Piwigo op de Fotopagina de optie ‘Foto aanpassen’. In het daaropvolgende dialoog kan onder andere de omschrijving ingevoerd worden. Voor het plaatsen/wijzigingen van omschrijvingen van meerdere foto's kan ook de bulkbeheerder gebruikt worden met de optie 'Uitgebreid overzicht'
Het is een nogal omslachtige procedure vooral als er veel items van een omschrijving voorzien moeten worden. Daarbij kwam dat ik gedurende het digitaliseren van mijn foto- en diacollectie al omschrijvingen gemaakt had in Excel. Dit werkt vooral makkelijk met het kopiëren, sorteren, manipuleren van overzichten, etc.

Overzicht
De procedure bestaat uit drie stappen:

  1. Linux Server:
    Log in op de server en run aan de prompt het script: ‘pwg-desc’, zie voor het script de hierna volgende secties.
    Gebruik optie 1 met het exportscript waarmee een lijst gemaakt wordt van alle foto’s in Piwigo die nog geen omschrijving hebben. Deze lijst wordt als tab-delimited tekstbestand 'nwe_pwg_fotos.txt' geplaatst in de webroot /var/www/html/.
    Gebruik optie 2 als alleen gezocht moet worden in de map 'Erica'
    Een PC met toegang tot de website via browser, ftp of samba kan dit bestand 'nwe_pwg_fotos.txt' nu openen.
  2. PC:
    Plak de inhoud van ‘nwe-pwg_fotos.txt’ in het Excelbestand ‘fotoindex.xls’ en maak omschrijvingen per foto in het spreadsheet resulterend in een export bestand met de kolommen fototitel en omschrijving (zonder de titelregel) en sla dit op als tab-delimited tekstbestand met de naam ‘descriptions.txt’. Plaats dit bestand ‘descriptions.txt’ in de webroot /var/www/html/
  3. Linux Server:
    Log in op de server en run aan de prompt het script: ‘pwg-desc’. Gebruik optie 3 van het importscript om de lijst in ‘descriptions.txt’ te importeren in de Piwigo MariaDb tabel: ‘xls_desciptions’.
    Sluit de import af met de scriptoptie 4 met het updaten van de Piwigo database met de geïmporteerde omschrijvingen.

Naar Index

Procedurestappen

1. Maak lijst van foto’s zonder omschrijving
Start op de Linuxserver aan de prompt het script ‘pwg-desc’ en selecteer optie 1
Nu wordt in de MySQL ‘piwigo’ database gekeken of er foto’s voorkomen die nog geen omschrijving hebben. Zo ja dan wordt het aantal en de titels op het scherm getoond met de vraag of hiervan een lijst in een tab-delimited tekstbestand gemaakt moet worden. Als hiervoor gekozen wordt dan wordt dit bestand ‘nwe_pwg_fotos.txt’ in de webroot /var/www/html/ geplaatst.

Op 3 april 2015 is hier een optie 2 toegevoegd welke exact hetzelfde doet als optie 1, maar dan ALLEEN voor de specifiek gespecificeerde map 'Erica'. Ook deze optie resulteert in een bestand ‘nwe_pwg_fotos.txt’ in de webroot /var/www/html/
Deze optie is gemaakt omdat voor de map Erica een afzonderlijk spreadsheet 'fotoindex-erica.xls' wordt gebruikt voor de meer dan normaal gedetailleerde beschrijvingen.

2. Kopieer lijst naar PC
Open op de PC in de browser http://mydomain/nwe_pwg_fotos.txt, of gebruik FTP of Samba om het bestand binnen te halen op de PC, open het bestand in Kladblok of Notepad++ en kopieer de inhoud naar het klembord.
Pas op: Kopiëren vanuit Wordpad resulteert in onverwachte resultaten bij speciale karakters zoals é, ï of €, gebruik Wordpad dus niet.

3. Bewerk de lijst in Excel-bestand
Open op de PC het Excel-bestand ‘fotoindex.xls’. Download hier een voorbeeld ‘fotoindex.xls’. Gebruik 'fotoindex-erica.xls' voor de records gevonden in de map 'Erica' met menuoptie 2!
Open sheet ‘upload’ en plak>>speciaal>>tekst de inhoud van het klembord in de kolommen A en B.
Maak nu in kolom E de omschrijvingen en geef in kolom G de map op waarin de foto ingedeeld is.
Sla het werkboek met gemaakte omschrijvingen nu eerst op!

4. Maak export bestand
Kopieer van sheet ‘upload’ de kolommen D en H zonder de header (rij 1).
Ga naar sheet ‘descriptions’ en plak>>speciaal>>waarden in de kolommen A en B.
Sla met behulp van de macro-knop de sheet ‘descriptions’ op als Tekst (tab is scheidingsteken) met de naam ‘descriptions.txt. Plaats dit bestand in de webroot /var/www/html/ van de Linuxserver.

5. Fotoindex.xls bijwerken
Sluit Excelbestand ‘fotoindex.txt’ en heropen ‘fotoindex.xls’.
Kopieer van sheet ‘upload’ kolommen D t/m H zonder de header en plak>>speciaal>>waarden op de eerste vrije rij van sheet ‘fotoindex’.
Open sheet ‘upload’ en klik macroknop ‘Wis Upload’
Sla het werkboek op. De fotoindex is nu bijgewerkt met de laatste gegevens en staat klaar voor een volgende sessie.

6. Importeer Omschrijvingen in MySQL ‘piwigo’ database op Linuxserver
Start op de Linuxserver aan de prompt het script ‘pwg-desc’ en selecteer optie 3.
Met een MySQL query in dit script worden nu de data uit het tekstbestand ‘descriptions.txt’ van item 4 geïmporteerd in de ‘piwigo’ tabel ‘xls-descriptions’.
Als er hierbij geen foutmeldingen optreden kan het script vervolgd worden met optie 4.
Met een MySQL Updatequery worden nu de foto’s in de ‘piwigo’ tabel ‘pi_images’ zonder omschrijvngen bijgewerkt met de geïmporteerde omschrijvingen.

7. Het Digitaal Fotoalbum Familie Makkink bijwerken
Open in een browser op http://mydomain/piwigo/ het Digitaal Fotoalbum Familie Makkink, log in als Beheerder en ga naar Beheer > Hulpmiddelen > Onderhoud en run ‘Fotoinformatie bijwerken’.
Als nu de betreffende foto’s op de fotopagina bekeken worden, zullen de eigen omschrijvingen getoond worden.

Naar Index

Het script ‘pwg-desc’

Bekijk hier het volledige script ‘pwg-desc’. Zie tevens het bestand ‘pwg-desc_readme’.
Verder is belangrijk te weten dat het script ‘importdescription’ gebruik maakt van een ‘include’ .mysql-access met wachtwoorden benodigd voor MySQL
Het script wordt gebruikt voor de hieronder nader beschreven import en export van data uit de MySQL database 'piwigo' en is opgenomen in de scriptbundel ‘utils’.

De menuopties van script ‘pwg-desc’ zijn:

  1. Exporteer lijst van foto's in Piwigo Fotogalerij die geen 'description' hebben naar de Server Webroot: /var/www/html/nwe_pwg_fotos.txt
  2. Exporteer lijst van foto's alleen in map 'ERICA' die geen 'description' hebben naar de Server Webroot: /var/www/html/nwe_pwg_fotos.txt
  3. Importeer in Piwigo MySQL table 'xls_descriptions' het in 'fotoindex.xls' gemaakte bestand '/var/www/html/descriptions.txt'
  4. Update Piwigo foto's zonder 'description' met import in 'xls_descriptions'
  5. Exporteer bestaande 'descriptions' van foto's van een zelf te specificeren map, met de optie deze 'descriptions' uit gallery te deleten tbv re-import met optie 3
  6. Gebruikers instructies PIWIGO-FOTODESCRIPTION
In het script 'PWG-DESC' de MySQL nader bekeken

Naar Index

Optie 1
Exporteer lijst van foto's die geen 'description' hebben naar /var/www/html/nwe_pwg_fotos.txt
Eerst wordt er gekeken of er foto's zijn zonder beschrijving:
SELECT COUNT(file)FROM pi_images WHERE (pi_images.comment IS NULL OR pi_images.comment='')
AND (pi_images.file LIKE '%.jpg' OR pi_images.file LIKE '%.JPG')
AND pi_images.path NOT LIKE '%thumbs%
;
In pi_images.file kan een leeg veld zowel NULL als gewoon leeg zijn. Beide moeten zoals hierboven getest worden.
Onze Piwigo Fotogalerij bevat ook een album 'thumbs' met miniaturen voor de jaaralbumlinks. Zie Piwigo::Inrichten > Zet Minaturen Jaaralbums. Voor deze miniaturen willen we geen 'description'.

Als er records gevonden worden dan worden deze op het scherm getoond. Tevens kunnen deze naar een tekstbestand geschreven worden:
SELECT pi_images.file,pi_images.filesize INTO OUTFILE '/var/lib/mysql/nwe_pwg_fotos.txt'
FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n' \
FROM pi_images WHERE (pi_images.comment is NULL OR pi_images.comment='')
AND (pi_images.file LIKE '%.jpg' OR pi_images.file LIKE '%.JPG')
AND pi_images.path NOT LIKE '%thumbs%'
ORDER BY pi_images.file;
Hierbij moet opgemerkt worden dat MySQL geen toegang heeft tot de webroot en de outfile dus eerst in /var/lib/mysql/ geplaatst wordt. Dit wordt dan later met het shellscript verplaatst naar de webroot.

Naar Index

Optie 2
Exporteer lijst van foto's die geen 'description' hebben naar /var/www/html/nwe_fotos.txt, maar nu alleen van MAP 'ERICA'
Eerst wordt er gekeken of er in de specifieke map 'Erica' foto's zijn zonder beschrijving:
SELECT COUNT(file) FROM pi_images
WHERE (pi_images.comment is NULL OR pi_images.comment='')
AND (pi_images.file LIKE '%.jpg' OR pi_images.file LIKE '%.JPG')
AND pi_images.path LIKE '%/erica/%';
In pi_images.file kan een leeg veld zowel NULL als gewoon leeg zijn. Beide moeten zoals hierboven getest worden.

Als er records gevonden worden dan worden deze op het scherm getoond. Tevens kunnen deze naar een tekstbestand geschreven worden:
SELECT pi_images.file,pi_images.filesize INTO OUTFILE '/var/lib/mysql/nwe_pwg_fotos.txt'
FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n' \
FROM pi_images WHERE (pi_images.comment is NULL OR pi_images.comment='')
AND (pi_images.file LIKE '%.jpg' OR pi_images.file LIKE '%.JPG')
AND pi_images.path LIKE '%/erica/%'
ORDER BY pi_images.file;
Hierbij moet opgemerkt worden dat MySQL geen toegang heeft tot de webroot en de outfile dus eerst in /var/lib/mysql/ geplaatst wordt. Dit wordt dan later met het shellscript verplaatst naar de webroot.

Naar Index

Optie 3
Importeer in table 'xls_descriptions' de records uit het bestand 'descriptions.txt'
Maak de tafel 'xls_descriptions' als deze nog niet bestaat:
CREATE TABLE IF NOT EXISTS xls_descriptions (title varchar(128), description text);

Als de tafel wel bestaat maak deze dan leeg:
DELETE FROM xls_descriptions;

Laad de data uit het tab-delimited tekstbestand:
LOAD DATA LOCAL INFILE '/var/www/html/descriptions.txt'
INTO TABLE xls_descriptions
FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n';

Hierbij is een veld in het tekstbestand \t tabdelimited en elke record eindigt met \r return en \n new line

Naar Index

Optie 4
Update Gallery foto's zonder 'description' met import in 'xls_descriptions'

Controleer of er beschrijvingen zijn voor foto's die (nog) niet in Piwigo bestaan.
De hierna volgende query geeft een lijst van images met beschrijvingen die (nog) niet in de Piwigo galerij voorkomen (orphins). En als ze voorkomen wordt een tijdelijk bestandje 'pwg-desc' aangemaakt in /tmp/, omdat de in een while-do-done loop gezette variabelen buiten de loop vergeten worden.
Het tijdelijke bestand doet dienst als 'vlag' voor de daarna volgende 'if-then-else'

Als eerste wordt een eventueel nog aanwezige 'vlag' verwijderd:
if [ -f /tmp/pwg-desc ];
then rm -rf /tmp/pwg-desc;
fi;

Vervolgens wordt er op orphin beschrijvingen gecontroleerd en zo ja dan wordt 'vlag' gezet:
SELECT xls_descriptions.file FROM xls_descriptions
LEFT JOIN pi_images ON xls_descriptions.file = pi_images.file
WHERE pi_images.file is null |\
while read V ;
 do echo " " $V;
 echo 1 > /tmp/pwg-desc;
done;

Als bovenstaande query geen orphin bestanden oplevert wordt er geen bestand '/tmp/pwg-desc' aangemaakt.
In dat geval kan de import plaatsvinden:
if [ ! -f /tmp/pwg-desc ]; then
De nu volgende query geeft het aantal foto's in Piwigo die een update met 'description' gaan krijgen:
SELECT COUNT(pi_images.file) FROM pi_images,xls_descriptions
WHERE (pi_images.file=xls_descriptions.file)
AND (pi_images.comment IS NULL OR pi_images.comment='');

Als besloten wordt de update uit te voeren:
UPDATE pi_images, xls_descriptions
SET pi_images.comment=xls_descriptions.comment
WHERE (pi_images.file=xls_descriptions.file)
AND (pi_images.comment IS NULL or pi_images.comment='');

Naar Index

Optie 5
Exporteer bestaande 'descriptions' van foto's van een zelf te specificeren map
Exporteer bestaande 'descriptions' van foto's in zelf te specificeren gallery-map, met optie de gallery-descriptions te verwijderen als voorbereiding voor re-import met opties 3 en 4

Vraag gebruiker de naam van de map (bijv. 2014 Trips) in te voeren. dit wordt opgeslagen in de variabele $invoer.
Eerst wordt er gekeken of er foto's in gegeven map zijn zonder beschrijving:
path="'%"$invoer"%'";
SELECT COUNT(file) FROM pi_images
WHERE (pi_images.file LIKE '%.jpg' OR pi_images.file LIKE '%.JPG')
AND pi_images.path LIKE $path;

Als er records gevonden worden dan worden deze op het scherm getoond. Tevens kunnen deze naar een tekstbestand geschreven worden:
SELECT pi_images.file,pi_images.comment
INTO OUTFILE '/var/lib/mysql/exp_pwg_desc.txt'
FIELDS TERMINATED BY '\t' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' \
FROM pi_images
WHERE (pi_images.file LIKE '%.jpg' OR pi_images.file LIKE '%.JPG')
AND pi_images.path LIKE $path
ORDER BY pi_images.file;

Om gallery voor te bereiden voor re-import moeten de bestaande beschrijvingen verwijderd worden:
UPDATE pi_images
SET pi_images.comment=NULL
WHERE (pi_images.file LIKE '%.jpg' OR pi_images.file LIKE '%.JPG')
AND pi_images.path LIKE $path;

Naar Index

MySQL Gebruikers en Wachtwoorden
De MySQL commando’s worden in het bash-script uitgevoerd en hiervoor moeten elke keer de MySQL gebruiker en het wachtwoord verstrekt worden.

Om te voorkomen dat in het script telkens opnieuw de wachtwoorden hardcoded vermeld moeten worden, worden deze in een variabele opgeslagen.
Het zetten van deze variabelen wordt om veiligheidsredenen niet in het script gedaan maar in een separaat bestand ‘.mysql-access’ dat door een ‘include’ aan het begin van het script ‘importdescription’ ingelezen wordt met commando:
include .mysql_access of ook wel . .mysql_access
In bovenstaand geval moet het .mysql_access bestand in dezelfde directorie staan als het calling script. Maar .mysql-access kan op elke gewenste plek gezet worden, alleen de include moet dan het juiste pad bevatten.

Voorbeeld van ‘.mysql_access’ bestand:
MYSQL_PWD_R="<MySQL-rootwachtwoord>"
MYSQL_PASSWORD="<MySQL-gebruikerwachtwoord>"

Tevens kunnen we, om het herhaaldelijk in het MySQL commando invoeren van dezelfde gegevens te voorkomen, aan het begin van het script na de include van .mysql_access nog de volgende variabelen zetten:
MYSQL="mysql -upiwigo -p$MYSQL_PASSWORD -Dpiwigo"
MYSQLROOT="mysql -uroot -p$MYSQL_PWD_R -Dpiwigo"

Het lange commando:
# mysql -u$piwigo -p<piwigo-wachtwoord> -Dpiwigo SELECT * from pi-images;
wordt nu in het script vereenvoudigd naar:
# $MYSQL SELECT * from pi_images;

Naar Index