Subversion Repositories eFlore/Applications.cel

Rev

Rev 1726 | Go to most recent revision | Blame | Last modification | View Log | RSS feed

#!/bin/bash
# @author Raphaël Droz <raphael@tela-botanica.org>
# @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
# @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
# @copyright © 2013, Tela Botanica

# Met à jour les appels à la database via l'instance $this de Cel
# pour y substituer le singleton Cel::db()
# À lancer dans le répertoire racine.

# fichiers à traiter (dans jrest/)
fichiers=$(grep -rl 'extends Cel' jrest)

# liste des fonctions à substituer, obtenue à partir de:
# grep -A1 'delete wrappers' jrest/lib/Cel.php |grep 'function.*()'|awk -F '[ (]' '{print $3}'
wrappers=( requeter executer protegerRequete proteger executerRequeteSimple executerRequete getTxt )
chaine=$(export IFS='|'; echo "${wrappers[*]}");


# Les fichiers qui définissent ou redéfinissent l'une de ces fonctions doivent être modifiés à la main
# car il est légitime pour eux d'utiliser $this
a_exclure=$(grep -rEl "function ($chaine)\(" jrest)
# (ils représentent 10 occurences du pattern)
# en réalité les fichiers dans scripts/ n'ont pas besoin d'être modifiés

# la liste refiltrée des fichiers
fichiers=$(echo "$fichiers"|fgrep -v -f <(echo "$a_exclure"))
echo -e "a modifier manuellement:\n$a_exclure" >&2


# 3 backslashes:
# 1 pour ne pas interpréter $this par bash entre les ""
# 1 autre en tant que simple bashslash (donc doublé) pour éviter que sed ne considère '$' comme fin de ligne

# Première regexp:
# 0 substitutions, car seuls les fichiers dans scripts/ l'utilisent
# or ils n'étendent pas la classe Cel
# sed -E "s;\\\$this->bdd->($chaine)\(;Cel::db()->\1(;g" $fichiers

# Seconde regexp
# 489 substitutions:
# sed -nE "s;\\\$this->($chaine)\(;Cel::db()->\1(;gp" $fichiers
sed -i -E "s;\\\$this->($chaine)\(;Cel::db()->\1(;g" $fichiers


# Troisième passe: substitution de $this->bdd->quote()
# 25 substitutions
fichiers_quote=$(grep -rl '$this->bdd->quote(' jrest/services)
sed -i -E 's;\$this->bdd->quote\(;Cel::db()->quote(;g' $fichiers_quote