ajout control title
This commit is contained in:
		
							parent
							
								
									49e312b397
								
							
						
					
					
						commit
						111a87bc3b
					
				@ -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;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										26
									
								
								nur_src/v/bs3/fo/ControlTitle.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								nur_src/v/bs3/fo/ControlTitle.php
									
									
									
									
									
										Normal 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);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
 | 
			
		||||
@ -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();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user