#!/bin/bash # ********************************************************************************************** # * PWG-DESC Ben Makkink 10-01-2017 # * Script om foto's in Piwigo te voorzien van een 'description'. Deze beschrijvingen worden # * aangemaakt in het Excel bestand 'fotoindex.xls. Van dit bestand wordt vervolgens een # * tabdelimited tekstbestand gemaakt met daarin de twee kolommen 'fototitel' en 'beschrijving' # *********************************************************************************************** # # * Verifieer dat de voor script 'pwg-desc' benodigde bestanden in /usr/local/bin # * aanwezig zijn. # # * 1: '.mysql_access' met Mysql inloggegevens clear; ok="y"; if [ ! -f /usr/local/bin/.mysql_access ] then echo; echo " Bestand 1 : '.mysql_access' mist in /usr/local/bin!"; ok="n"; fi # * 2: 'pwg-desc_readme' met 'pwg-desc' gebruikersinstructies if [ ! -f /usr/local/bin/pwg-desc_readme ] then echo; echo " Bestand 2 : 'pwg-desc_readme' mist in /usr/local/bin!"; ok="n"; fi # * Bericht als bestand(en) missen if [ $ok == "n" ] then eacho; echo " ====================================================================="; echo " Installeer eerst missende bestand(en), PWG-DESC heeft deze nodig!!"; echo " ====================================================================="; echo -n " Druk om verder te gaan: "; read foo; echo; exit; #exit script omdat bestanden missen in /usr/local/bin/ fi # ***************************************************************************************** # * Als alle benodigde bestanden in /usr/local/bin/ bestaan; start het script # ***************************************************************************************** # Include verborgen bestand met wachtwoorden. # Het bestand mysql_access moet wel in dezelfde directory staan als dit script . .mysql_access # Zet MYSQL variabelen MYSQL="mysql -upiwigo -p$MYSQL_PASSWORD -Dpiwigo" MYSQLROOT="mysql -uroot -p$MYSQL_PWD_R -Dpiwigo" echo; echo " +++ PWG-DESC Version 1.0 +++"; echo " ================================================================================="; echo " PIWIGO-FOTODESCRIPTION OPTIES:"; echo; echo " -1 Exporteer van alle foto's in PIWIGO zonder 'description' de lijst naar:"; echo " /var/www/html/nwe_pwg_fotos.txt"; echo; echo " -2 Exporteer van foto's alleen in map 'ERICA' zonder 'description' de lijst naar:"; echo " /var/www/html/nwe_pwg_fotos.txt"; echo; echo " -3 Importeer de in 'fotoindex.xls' gemaakte lijst '/var/www/html/descriptions.txt"; echo " in de PIWIGO table 'xls_descriptions'"; echo; echo " -4 Update PIWIGO foto's zonder 'description' met de import in 'xls_descriptions'"; echo; echo " -5 Exporteer bestaande 'descriptions' van foto's van een zelf te specificeren map"; echo " Met optie deze 'descriptions' uit PIWIGO te deleten tbv re-import met optie 3"; echo; echo " -6 Gebruikers instructies PIWIGO-FOTODESCRIPTION"; echo; echo " ================================================================================="; optie=; while [ -z $optie ] ;do echo -n " Kies optienummer of Q om te stoppen: "; read optie; case $optie in [123456qQ]) optie=$optie ;; *) optie=; pwg-desc;; esac done case $optie in 1) # ***************************************************************************************** # Uitvoering OPTIE 1 # Check of er foto's in PIWIGO zijn die (nog) geen beschrijving hebben en exporteer # hiervan een lijst in een tekstbestand /var/www/html/nwe_pwg_fotos.txt. De inhoud van # deze lijst kan gekopieerd worden en geplakt in fotoindex.xls # ***************************************************************************************** C=`$MYSQL -s -e"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%'"` if [ $C -eq 0 ] then yn="y"; echo; echo " Er zijn geen foto's zonder beschrijving gevonden."; else echo; echo " Gallery bevat" $C "foto's zonder beschrijving:"; echo " --------------------------------------------"; n=1; $MYSQL -s -e"SELECT pi_images.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%'" |\ while read R; do echo " "$n"-" $R; let n=$n+1; done yn="n"; echo; echo " Deze lijst compleet met bestandsgrootte voor kopieren naar"; echo -n " 'fotoindex.xls' downloaden naar /var/www/html/nwe_pwg_fotos.txt? Y/N: "; read yn; case $yn in [Yy]) if [ -f /var/lib/mysql/nwe_pwg_fotos.txt ] #check of bestand bestaat then rm -rf /var/lib/mysql/nwe_pwg_fotos.txt; #verwijder deze zodat mysql een nieuwe kan maken fi $MYSQLROOT -e"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" # mysql heeft geen toegang tot /var/www/html, dus outfile wordt geschreven naar # /var/lib/mysql/. Het shellcommando hieronder verplaatst het bestand naar de website. mv /var/lib/mysql/nwe_pwg_fotos.txt /var/www/html/nwe_pwg_fotos.txt echo; esac fi;; # Einde optie 1 #*********************************************************************************** 2) #case $optie in 2 # ***************************************************************************************** # Uitvoering OPTIE 2 # Als optie 1 maar nu alleen voor map 'ERICA' # Check in deze map of er foto's zijn die (nog) geen beschrijving hebben en exporteer # hiervan een lijst in een tekstbestand /var/www/html/nwe_pwg_fotos.txt. De inhoud van # deze lijst kan gekopieerd worden en geplakt in fotoindex.xls # ***************************************************************************************** C=`$MYSQL -s -e"SELECT COUNT(pi_images.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/%'"` if [ $C -eq 0 ] then yn="y"; echo; echo " Er zijn in de Map 'Erica' geen foto's zonder beschrijving gevonden."; else echo; echo " De Map 'Erica' bevat" $C "foto's zonder beschrijving:"; echo " -----------------------------------------------------"; # read -n1 -r # Pauze - Hit any key to continue n=1; $MYSQL -s -e"SELECT pi_images.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/%'" |\ while read R; do echo " "$n"-" $R; let n=$n+1; done yn="n"; echo; echo " Deze lijst compleet met bestandsgrootte voor kopieren naar"; echo -n " 'fotoindex.xls' downloaden naar /var/www/html/nwe_pwg_fotos.txt? Y/N: "; read yn; case $yn in [Yy]) if [ -f /var/lib/mysql/nwe_pwg_fotos.txt ] #check of bestand bestaat then rm -rf /var/lib/mysql/nwe_pwg_fotos.txt; #verwijder deze zodat mysql een nieuwe kan maken fi $MYSQLROOT -e"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" # mysql heeft geen toegang tot /var/www/html, dus outfile wordt geschreven naar # /var/lib/mysql/. Het shellcommando hieronder verplaatst het bestand naar de website. mv /var/lib/mysql/nwe_pwg_fotos.txt /var/www/html/nwe_pwg_fotos.txt echo; esac fi;; # Einde optie 2 #*********************************************************************************** 3) #case $optie in 3 # ****************************************************************************************** # Uitvoering van OPTIE 3 Importeer uit bestand /var/www/html/descriptions.txt # Check als eerste of /var/www/html/description.txt bestaat, stop optie als bestand # niet gevonden wordt. # Als bestand bestaat dan gaat optie verder met het verzorgen van een lege tabel 'xls_descriptions' # Als laatste worden de tabdelimited records geimporteerd. # ****************************************************************************************** if [ ! -f /var/www/html/descriptions.txt ] then echo; echo " Bestand 'descriptions.txt' niet gevonden!"; echo " Plaats eerst tabdelimeted bestand 'descriptions.txt' in /var/www/html/"; echo " en probeer dan opnieuw"; yn="n" else yn="n" echo; echo -n " Nieuwe data uit bestand 'descriptions.txt' importeren? Y/N: "; read yn; echo; case $yn in [Yy]) $MYSQL -vv < /tmp/pwg-desc; done; # Als bovenstaande query geen bestanden oplevert wordt geen bestand # /tmp/pwg-desc aangemaakt. # In dat geval kan de import plaatsvinden. if [ ! -f /tmp/pwg-desc ]; then # Volgende query geeft het aantal foto's in Piwigo die een update met 'description' gaan krijgen N=`$MYSQL -ss -e"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='')"`; yn="n"; echo; echo -n " De 'description' van" $N "foto's in Piwigo Updaten met import in 'xls_descriptions'? Y/N: "; read yn; echo; case $yn in [Yy]) echo " Dit kan enkele minuten duren ..."; $MYSQL -vv -e"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='')"; esac else # Als records gevonden worden, mag de Update van Piwigo niet uitgevoerd worden # if [ -f /tmp/pwg-desc ]; # then echo; echo " De import bevat bovenstaande foto's die (nog) niet bestaan in Piwigo"; echo " Laad eerst de missende foto's in Piwigo om verder te kunnen gaan."; echo " En herstart de import opnieuw vanaf het begin."; echo; yn="n" rm -rf /tmp/pwg-desc; fi;; # Einde optie 4 #*********************************************************************************** 5) #case $optie in 5 # ************************************************************************************************** # Uitvoering OPTIE 5 # Met deze optie kunnen bestaande descriptions geexporteerd worden van een zelf te specificeren map # Na succesvolle export wordt de mogelijkheid geboden de descriptions van deze map in Piwigo te # verwijderen. Na het corrigeren/updaten van de export kunnen dan de optie 3 en 4 gebruikt worden # om de 'nieuwe'description weer te importeren in Piwigo # ************************************************************************************************** path=; map=; invoer=; while [[ -z $invoer ]] ;do echo; echo " Exporteer 'descriptions' uit Piwigo. Voer de gewenste mapnaam in zoals deze in"; echo " Piwigo linksboven in de Breadcrumb staat bijvoorbeeld:"; echo -n " 2015/wandelen (of selecteer Q om te stoppen): "; read invoer; case $invoer in [qQ]) yn="n";; *) if [[ -n $invoer ]] && [[ $invoer!="q" ]] && [[ $invoer!="Q" ]] then map=${invoer//[\/]/-}; path="'%"$invoer"/%'"; C=`$MYSQL -s -e"SELECT COUNT(file) FROM pi_images WHERE (pi_images.file LIKE '%.jpg' OR pi_images.file LIKE '%.JPG') AND pi_images.path LIKE $path"` if [ $C -eq 0 ] then echo; echo " De geselecteerde map ./"$map" is leeg of bestaat niet. Probeer het opnieuw"; invoer=; else echo; echo -n " Descriptions van de "$C" foto's in map ./"$map" exporteren? Y/N: "; read yn; case $yn in [yY]) if [ -f /var/lib/mysql/exp_pwg_desc.txt ] #check of bestand bestaat then rm -rf /var/lib/mysql/exp_pwg_desc.txt; #verwijder deze zodat mysql een nieuwe kan maken fi $MYSQLROOT -e"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"; # mysql heeft geen toegang tot /var/www/html, dus outfile wordt geschreven naar # /var/lib/mysql/exp_pwg_desc.txt. Het commando hieronder verplaatst het bestand naar de website. mv /var/lib/mysql/exp_pwg_desc.txt "/var/www/html/descriptions_"$map".txt"; echo; echo; echo " "$C" descriptions geƫxporteerd naar /var/www/html/descriptions_"$map".txt"; echo " ***********************************************************************"; echo " * Open dit tekstbestand met KLADBLOK en kopieer inhoud naar Excel *"; echo " ***********************************************************************"; echo; echo " De descriptions in Piwigo "$map" nu verwijderen zodat re-import van"; echo -n " de gewijzigde export middels optie 3 uitgevoerd kan worden? Y/N: "; read del; case $del in [Yy]) $MYSQL -vv -e"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"; echo; echo " "$C" descriptions van "$map" verwijderd uit Piwigo"; echo " Gebruik opties 3 en 4 om de descriptions opnieuw te importeren";; *) echo; echo " De 'descriptions' in Piwigo "$map" zijn wel geexporteerd, maar NIET"; echo " verwijderd. Dit kan alsnog door de export geheel opnieuw uit te voeren,"; echo " waardoor opnieuw de te deleten 'descriptions' eerst opgeslagen worden.";; esac yn="y";; *) invoer=;; esac fi fi;; esac done;; # einde optie 5 #*********************************************************************************** 6) #case $optie in 6 # ******************************************************************************************** # Uitvoering OPTIE 6 # Gebruikersinstructies voor script importdescriptions # ********************************************************************************************* less /usr/local/bin/pwg-desc_readme; optie=; pwg-desc;; # einde optie 6 #*********************************************************************************** # einde van alle opties esac # ********************************************************************************** # eindberichten en opnieuw openen met hoofmenu # ********************************************************************************** case $optie in [123456789]) case $yn in [yY]) echo; echo -n " Optie uitgevoerd, druk om terug te keren naar menu."; read foo; pwg-desc;; *) echo; echo -n " Optie gecanceld, druk om terug te gaan naar menu."; read foo; pwg-desc;; esac;; esac