ajout control title

This commit is contained in:
Jephté Clain 2024-06-18 12:41:10 +04:00
parent 49e312b397
commit 111a87bc3b
6 changed files with 109 additions and 24 deletions

View File

@ -67,7 +67,7 @@ Application::run(new class extends Application {
$channel = new $channelClass;
} elseif ($this->tableName !== null) {
$channel = new class($this->tableName) extends CapacitorChannel {
public function __construct(?string $name=null) {
function __construct(?string $name=null) {
parent::__construct($name);
$this->tableName = $name;
}

View File

@ -63,7 +63,7 @@ Application::run(new class extends Application {
$channel = new $channelClass;
} elseif ($this->tableName !== null) {
$channel = new class($this->tableName) extends CapacitorChannel {
public function __construct(?string $name=null) {
function __construct(?string $name=null) {
parent::__construct($name);
$this->tableName = $name;
}

View File

@ -0,0 +1,26 @@
<?php
namespace nur\v\bs3\fo;
use nur\A;
use nur\b\params\Tparametrable;
class ControlTitle extends ControlVisual {
use Tparametrable;
const PARAMETRABLE_PARAMS_SCHEMA = [
"title" => ["?content", null, "texte du titre"],
];
/** @var array|string */
protected $ppTitle;
function getLayout(array $control): array {
return $this->getFgsLayout($control, true);
}
function getControl(): array {
$control = A::with(q($this->ppTitle));
if ($this->ppNaked) return $control;
else return $this->getLayout($control);
}
}

View File

@ -743,6 +743,24 @@ class Form extends ComponentPrintable implements IParametrable, ArrayAccess, Cou
function endGroup(): void {
}
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# title
function title($title, ?array $params=null): ControlTitle {
A::set_nz($params, "title", $title);
$this->fixControlParams($params);
return new ControlTitle($this, $params);
}
function addTitle($title, ?array $params=null): self {
$this->addControl($this->title($title, $params));
return $this;
}
function printTitle($title, ?array $params=null): void {
vo::write($this->title($title, $params));
}
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# hidden

View File

@ -16,6 +16,8 @@ class CapacitorChannel {
const PRIMARY_KEYS = null;
const MANAGE_TRANSACTIONS = true;
const EACH_COMMIT_THRESHOLD = 100;
static function verifix_name(?string $name): string {
@ -23,10 +25,17 @@ class CapacitorChannel {
return strtolower($name);
}
function __construct(?string $name=null, ?int $eachCommitThreshold=null) {
protected static function verifix_eachCommitThreshold(?int $eachCommitThreshold): ?int {
$eachCommitThreshold ??= static::EACH_COMMIT_THRESHOLD;
if ($eachCommitThreshold < 0) $eachCommitThreshold = null;
return $eachCommitThreshold;
}
function __construct(?string $name=null, ?int $eachCommitThreshold=null, ?bool $manageTransactions=null) {
$this->name = self::verifix_name($name ?? static::NAME);
$this->tableName = static::TABLE_NAME ?? ($this->name."_channel");
$this->eachCommitThreshold = $eachCommitThreshold ?? static::EACH_COMMIT_THRESHOLD;
$this->manageTransactions = $manageTransactions ?? static::MANAGE_TRANSACTIONS;
$this->eachCommitThreshold = self::verifix_eachCommitThreshold($eachCommitThreshold);
$this->setup = false;
$this->created = false;
$columnDefinitions = cl::withn(static::COLUMN_DEFINITIONS);
@ -50,37 +59,59 @@ class CapacitorChannel {
$this->primaryKeys = $primaryKeys;
}
/** @var string */
protected $name;
protected string $name;
function getName(): string {
return $this->name;
}
protected $tableName;
protected string $tableName;
function getTableName(): string {
return $this->tableName;
}
/**
* @var bool indiquer si les modifications de each doivent être gérées dans
* une transaction. si false, l'utilisateur doit lui même gérer la
* transaction.
*/
protected bool $manageTransactions;
function isManageTransactions(): bool {
return $this->manageTransactions;
}
function setManageTransactions(bool $manageTransactions=true): self {
$this->manageTransactions = $manageTransactions;
return $this;
}
/**
* @var ?int nombre maximum de modifications dans une transaction avant un
* commit automatique dans {@link Capacitor::each()}. Utiliser null pour
* désactiver la fonctionnalité.
*
* ce paramètre n'a d'effet que si $manageTransactions==true
*/
protected $eachCommitThreshold;
protected ?int $eachCommitThreshold;
function getEachCommitThreshold(): ?int {
return $this->eachCommitThreshold;
}
function setEachCommitThreshold(?int $eachCommitThreshold=null): self {
$this->eachCommitThreshold = self::verifix_eachCommitThreshold($eachCommitThreshold);
return $this;
}
/**
* initialiser ce channel avant sa première utilisation.
*/
protected function setup(): void {
}
protected $setup;
protected bool $setup;
function ensureSetup() {
if (!$this->setup) {
@ -89,7 +120,7 @@ class CapacitorChannel {
}
}
protected $created;
protected bool $created;
function isCreated(): bool {
return $this->created;

View File

@ -362,10 +362,13 @@ EOT;
$onEach = func::_prepare($func);
$db = $this->db();
$tableName = $channel->getTableName();
$commited = false;
$manageTransactions = $channel->isManageTransactions();
$count = 0;
$db->beginTransaction();
$commitThreshold = $channel->getEachCommitThreshold();
if ($manageTransactions) {
$commited = false;
$db->beginTransaction();
$commitThreshold = $channel->getEachCommitThreshold();
}
try {
$args ??= [];
foreach ($this->_all($channel, $filter) as $rowValues) {
@ -381,7 +384,7 @@ EOT;
"values" => $this->serialize($channel, $updates),
"where" => $rowIds,
]);
if ($commitThreshold !== null) {
if ($manageTransactions && $commitThreshold !== null) {
$commitThreshold--;
if ($commitThreshold == 0) {
$db->commit();
@ -392,11 +395,13 @@ EOT;
}
$count++;
}
$db->commit();
$commited = true;
if ($manageTransactions) {
$db->commit();
$commited = true;
}
return $count;
} finally {
if (!$commited) $db->rollback();
if ($manageTransactions && !$commited) $db->rollback();
}
}
@ -422,10 +427,13 @@ EOT;
$onEach = func::_prepare($func);
$db = $this->db();
$tableName = $channel->getTableName();
$commited = false;
$manageTransactions = $channel->isManageTransactions();
$count = 0;
$db->beginTransaction();
$commitThreshold = $channel->getEachCommitThreshold();
if ($manageTransactions) {
$commited = false;
$db->beginTransaction();
$commitThreshold = $channel->getEachCommitThreshold();
}
try {
$args ??= [];
foreach ($this->_all($channel, $filter) as $rowValues) {
@ -437,7 +445,7 @@ EOT;
"from" => $tableName,
"where" => $rowIds,
]);
if ($commitThreshold !== null) {
if ($manageTransactions && $commitThreshold !== null) {
$commitThreshold--;
if ($commitThreshold == 0) {
$db->commit();
@ -448,11 +456,13 @@ EOT;
}
$count++;
}
$db->commit();
$commited = true;
if ($manageTransactions) {
$db->commit();
$commited = true;
}
return $count;
} finally {
if (!$commited) $db->rollback();
if ($manageTransactions && !$commited) $db->rollback();
}
}