*/ private array $settings; /** * SaveOptionPagesCommand constructor. * * @param array $settings */ public function __construct(array $settings = []) { $this->settings = $settings; } /** * @return void * @throws \Exception */ public function execute(): void { $deleteUnusedTables = false; foreach ($this->settings as $key => $value) { $id = (SettingsRepository::getSingle($key) !== null) ? SettingsRepository::getSingle($key)->getId() : Uuid::v4(); $value = (is_array($value)) ? json_encode($value) : $value; $model = SettingsModel::hydrateFromArray([ 'id' => $id, 'key' => $key, 'value' => $value ]); SettingsRepository::save($model); if ($key === SettingsModel::DELETE_UNUSED_TABLES && $value == 1) { $deleteUnusedTables = true; } } if ($deleteUnusedTables) { $this->removeOrCreateFeatureTables($this->settings); } else { ACPT_Lite_DB::removeOrCreateFeatureTables(SettingsModel::ENABLE_META); ACPT_Lite_DB::removeOrCreateFeatureTables(SettingsModel::ENABLE_CPT); ACPT_Lite_DB::removeOrCreateFeatureTables(SettingsModel::ENABLE_TAX); ACPT_Lite_DB::removeOrCreateFeatureTables("woocommerce"); } } /** * Delete unused tables * * @param array $settings * * @throws \Exception */ private function removeOrCreateFeatureTables(array $settings = []): void { foreach ($settings as $key => $value) { $action = $value == 1 ? "create" : "delete"; ACPT_Lite_DB::removeOrCreateFeatureTables($key, $action); } // WooCommerce $wooCommerceAction = !ACPT_Lite_WooCommerce::active() ? "delete" : "create"; ACPT_Lite_DB::removeOrCreateFeatureTables("woocommerce", $wooCommerceAction); } }