diff --git a/composer.json b/composer.json index 1b90eea..b0d3eba 100644 --- a/composer.json +++ b/composer.json @@ -24,6 +24,8 @@ }, "require-dev": { "nulib/tests": "^8.2", + "ext-mbstring": "*", + "ext-iconv": "*", "ext-posix": "*", "ext-pcntl": "*", "ext-curl": "*", diff --git a/php/src/app/TODO.md b/php/src/app/TODO.md new file mode 100644 index 0000000..142c37e --- /dev/null +++ b/php/src/app/TODO.md @@ -0,0 +1,7 @@ +# nulib\app + +* [ ] ajouter des méthodes normalisées `app::get_cachedir()` et + `app::get_cachefile($name)` avec la valeur par défaut + `cachedir = $vardir/cache` + +-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary \ No newline at end of file diff --git a/php/src/db/CapacitorChannel.php b/php/src/db/CapacitorChannel.php index 0c2b370..3489203 100644 --- a/php/src/db/CapacitorChannel.php +++ b/php/src/db/CapacitorChannel.php @@ -366,13 +366,14 @@ class CapacitorChannel implements ITransactor { } /** - * méthode appelée lors du parcours des éléments avec - * {@link Capacitor::each()} + * méthode appelée lors du parcours des éléments avec {@link Capacitor::each()} * * @param ?array $row la ligne courante. l'élément courant est accessible via * $row["item"] * @return ?array le cas échéant, un tableau non null utilisé pour mettre à * jour la ligne courante + * Retourner [false] pour arrêter le parcours des éléments (la ligne courante + * ainsi que les autres lignes ne sont plus mise à jour) * * - Il est possible de mettre à jour $item en le retourant avec la clé "item" * - La clé primaire (il s'agit généralement de "id_") ne peut pas être diff --git a/php/src/db/CapacitorStorage.php b/php/src/db/CapacitorStorage.php index 65aa09c..f529839 100644 --- a/php/src/db/CapacitorStorage.php +++ b/php/src/db/CapacitorStorage.php @@ -661,7 +661,9 @@ abstract class CapacitorStorage { foreach ($rows as $row) { $rowIds = $this->getRowIds($channel, $row); $updates = $onEach->invoke([$row, ...$args]); - if (is_array($updates) && $updates) { + if ($updates === [false]) { + break; + } elseif ($updates !== null) { if (!array_key_exists("modified_", $updates)) { $updates["modified_"] = date("Y-m-d H:i:s"); } diff --git a/php/src/db/mysql/Mysql.php b/php/src/db/mysql/Mysql.php index 3031583..f0a0e75 100644 --- a/php/src/db/mysql/Mysql.php +++ b/php/src/db/mysql/Mysql.php @@ -6,6 +6,11 @@ use nulib\db\pdo\Pdo; class Mysql extends Pdo { const PREFIX = "mysql"; + static function config_unbufferedQueries(self $mysql): void { + $mysql->db->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); + } + const CONFIG_unbufferedQueries = [self::class, "config_unbufferedQueries"]; + function getDbname(): ?string { $url = $this->dbconn["name"] ?? null; if ($url !== null && preg_match('/^mysql(?::|.*;)dbname=([^;]+)/i', $url, $ms)) { diff --git a/php/src/db/pdo/Pdo.php b/php/src/db/pdo/Pdo.php index 094b784..d06f5dd 100644 --- a/php/src/db/pdo/Pdo.php +++ b/php/src/db/pdo/Pdo.php @@ -40,11 +40,6 @@ class Pdo implements IDatabase { } const CONFIG_errmodeException_lowerCase = [self::class, "config_errmodeException_lowerCase"]; - static function config_unbufferedQueries(self $pdo): void { - $pdo->db->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); - } - const CONFIG_unbufferedQueries = [self::class, "config_unbufferedQueries"]; - protected const OPTIONS = [ \PDO::ATTR_PERSISTENT => true, ]; diff --git a/php/src/txt.php b/php/src/txt.php index 9857473..2c5ef53 100644 --- a/php/src/txt.php +++ b/php/src/txt.php @@ -276,7 +276,7 @@ class txt { * supprimer les diacritiques de la chaine $text * * la translitération se fait avec les règles de la locale spécifiée. - * NB: la translitération ne fonctionne pas si LC_CTYPE == C ou POISX + * NB: la translitération ne fonctionne pas si LC_CTYPE == C ou POSIX */ static final function remove_diacritics(?string $text, string $locale="fr_FR.UTF-8"): ?string { if ($text === null) return null;