![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/framework/Setup/Patch/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Framework\Setup\Patch; use Magento\Framework\App\ResourceConnection; /** * This is registry of all patches, that are already applied on database */ class PatchHistory { /** * Table name where patche names will be persisted */ const TABLE_NAME = 'patch_list'; /** * Name of a patch */ const CLASS_NAME = "patch_name"; /** * Patch type for schema patches */ const SCHEMA_PATCH_TYPE = 'schema'; /** * Patch type for data patches */ const DATA_PATCH_TYPE = 'data'; /** * @var array */ private $patchesRegistry = null; /** * @var ResourceConnection */ private $resourceConnection; /** * PatchHistory constructor. * @param ResourceConnection $resourceConnection */ public function __construct(ResourceConnection $resourceConnection) { $this->resourceConnection = $resourceConnection; } /** * Read and cache data patches from db * * All patches are store in patch_list table * * @see self::TABLE_NAME * @return string[] */ private function getAppliedPatches() { if ($this->patchesRegistry === null) { $adapter = $this->resourceConnection->getConnection(); $filterSelect = $adapter ->select() ->from($this->resourceConnection->getTableName(self::TABLE_NAME), self::CLASS_NAME); $this->patchesRegistry = $adapter->fetchCol($filterSelect); } return $this->patchesRegistry; } /** * Fix patch in patch table in order to avoid reapplying of patch * * @param string $patchName * @return void */ public function fixPatch($patchName) { if ($this->isApplied($patchName)) { throw new \LogicException(sprintf("Patch %s cannot be applied twice", $patchName)); } $adapter = $this->resourceConnection->getConnection(); $adapter->insert($this->resourceConnection->getTableName(self::TABLE_NAME), [self::CLASS_NAME => $patchName]); $this->patchesRegistry[] = $patchName; } /** * Revert patch from history * * @param string $patchName * @return void */ public function revertPatchFromHistory($patchName) { if (!$this->isApplied($patchName)) { throw new \LogicException( sprintf("Patch %s should be applied, before you can revert it", $patchName) ); } $adapter = $this->resourceConnection->getConnection(); $adapter->delete( $this->resourceConnection->getTableName(self::TABLE_NAME), [self::CLASS_NAME . "= ?" => $patchName] ); } /** * Check whether patch was applied on the system or not * * @param string $patchName * @return bool */ public function isApplied($patchName) { return in_array($patchName, $this->getAppliedPatches()); } }