* @link http://www.oxidmodule.com */ namespace D3\Extsearch\setup; use D3\Extsearch\Application\Model\d3_extsearch_synset; use D3\ModCfg\Application\Model\d3database; use D3\ModCfg\Application\Model\Install\d3install_updatebase; use Doctrine\DBAL\Exception as DBALException; use Doctrine\DBAL\Exception; use Doctrine\DBAL\ParameterType; use OxidEsales\Eshop\Core\Exception\ConnectionException; use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException; use OxidEsales\Eshop\Core\Exception\DatabaseErrorException; use OxidEsales\Eshop\Core\Registry; use OxidEsales\Eshop\Application\Model\Shop; use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory; use OxidEsales\EshopCommunity\Internal\Framework\Database\QueryBuilderFactoryInterface; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; /** * Class d3_extsearch_update */ class d3_extsearch_update extends d3install_updatebase { public $sModKey = 'd3_extsearch'; public $sModName = 'erweiterte Suche'; public $sModVersion = '8.0.1.0'; public $sModRevision = '8010'; public $sBaseConf = '02zv2==azlGUGNtK2VaQm5ucWIzUkV4QjM0M1NjRExra1VNM1B3TCsrWlVVbkVpWDNTYWRZYkZpbERWM WlpYTFYcEhzdkt2UXJtazlhdFgwN2pRRFYzM000VFBpOTJLZlRFT1BIczlIREVydXIyVzk0eklCRGVFd 28vSXRnOTcwQzJQN2pxeHNQc0NIRzhLZjJ0OTExU0lOeDR2MzArdStLbERmcWI2a2VScTBTMVVlaHJEU kl1R1ZpbzhjMS9HQ0ZUbTY5bkRJd0xBRHhweUl4S2trTWI1K2xsTDFtZDRUSHNud0hnN1Jjck5Uelp5M 3REUm1vbWUvcE1XbUdDRVgyVEZEKzNUV3lCbzRKNGdqdlY5eW1BYU9iNFVVdXA4VSt5UUdOTzVFalJyV 3lST1pJS1lQK3UyRWFlMnhiTEEwZk1hNTVtTlJSb0JGWUZkU0pPbmlNTzQ2YVZ3PT0='; public $sRequirements = ''; public $sBaseValue = 'TyUzQTglM0ElMjJzdGRDbGFzcyUyMiUzQTY5JTNBJTdCcyUzQTI4JTNBJTIyZDNfY2ZnX21vZF9fYUxpY2Vuc2VJbmZvTWFpbCUyMiUzQmElM0EyJTNBJTdCcyUzQTQyJTNBJTIyTk9MSUNLRVlfXzQ3OTM2Mzg3MDJiNjc3MTVmMWRmYmZjODMyNDY2OTE0JTIyJTNCcyUzQTE5JTNBJTIyMjAxMy0wMS0xNiUyMDEyJTNBMTAlM0E0MCUyMiUzQnMlM0E0NCUzQSUyMk5PU0VSSUFMSURfXzQ3OTM2Mzg3MDJiNjc3MTVmMWRmYmZjODMyNDY2OTE0JTIyJTNCcyUzQTE5JTNBJTIyMjAxMy0wMS0xNiUyMDEyJTNBMTElM0E0MiUyMiUzQiU3RHMlM0E0MiUzQSUyMmQzX2NmZ19tb2RfX2FFeHRTZWFyY2hfc2ltaWxhclNlYXJjaEZpZWxkcyUyMiUzQmElM0E0JTNBJTdCaSUzQTAlM0JzJTNBMTQlM0ElMjI1MCUyMCUzRCUzRSUyMG94YXJ0bnVtJTIyJTNCaSUzQTElM0JzJTNBMTMlM0ElMjI1MCUyMCUzRCUzRSUyMG94dGl0bGUlMjIlM0JpJTNBMiUzQnMlM0ExOCUzQSUyMjQwJTIwJTNEJTNFJTIwb3hzZWFyY2hrZXlzJTIyJTNCaSUzQTMlM0JzJTNBMTclM0ElMjIyMCUyMCUzRCUzRSUyMG94c2hvcnRkZXNjJTIyJTNCJTdEcyUzQTQzJTNBJTIyZDNfY2ZnX21vZF9fc0V4dFNlYXJjaF9NdWx0aVNlYXJjaHdvcmRVc2FnZSUyMiUzQnMlM0ExMCUzQSUyMnNpbmdsZVdvcmQlMjIlM0JzJTNBMzklM0ElMjJkM19jZmdfbW9kX19ibEV4dFNlYXJjaF91c2VBcnROdW1TZWFyY2glMjIlM0JzJTNBMSUzQSUyMjElMjIlM0JzJTNBMzklM0ElMjJkM19jZmdfbW9kX19ibEV4dFNlYXJjaF9vcmRlckJ5UHJpb3JpdHklMjIlM0JzJTNBMSUzQSUyMjElMjIlM0JzJTNBMzUlM0ElMjJkM19jZmdfbW9kX19ibEV4dFNlYXJjaF9vcmRlckJ5UHVzaCUyMiUzQnMlM0ExJTNBJTIyMSUyMiUzQnMlM0E0NCUzQSUyMmQzX2NmZ19tb2RfX2JsRXh0U2VhcmNoX2ZpbmRQdXRJbkFuZExlYXZlT3V0JTIyJTNCcyUzQTElM0ElMjIxJTIyJTNCcyUzQTM3JTNBJTIyZDNfY2ZnX21vZF9fYmxFeHRTZWFyY2hfb3duRm9ybUZpZWxkcyUyMiUzQnMlM0ExJTNBJTIyMCUyMiUzQnMlM0EzNyUzQSUyMmQzX2NmZ19tb2RfX2JsRXh0U2VhcmNoX1ZhcmlhbnRTZWFyY2glMjIlM0JzJTNBMSUzQSUyMjAlMjIlM0JzJTNBMzUlM0ElMjJkM19jZmdfbW9kX19zRXh0U2VhcmNoX1ZhcmlhbnRVc2FnZSUyMiUzQnMlM0ExMCUzQSUyMnNob3dQYXJlbnQlMjIlM0JzJTNBMzclM0ElMjJkM19jZmdfbW9kX19ibEV4dFNlYXJjaF9zaW1pbGFyU2VhcmNoJTIyJTNCcyUzQTElM0ElMjIxJTIyJTNCcyUzQTMxJTNBJTIyZDNfY2ZnX21vZF9fc0V4dFNlYXJjaF9sYW5nRmlsZSUyMiUzQnMlM0EyMiUzQSUyMmQzX3Bob25ldGljX2RlX3ZvYy5waHAlMjIlM0JzJTNBMzglM0ElMjJkM19jZmdfbW9kX19ibEV4dFNlYXJjaF9zaW1pbGFyRXh0TGlzdCUyMiUzQnMlM0ExJTNBJTIyMCUyMiUzQnMlM0EzNyUzQSUyMmQzX2NmZ19tb2RfX2lFeHRTZWFyY2hfc2ltaWxhckV4dExpc3QlMjIlM0JzJTNBMiUzQSUyMjEwJTIyJTNCcyUzQTM2JTNBJTIyZDNfY2ZnX21vZF9faUV4dFNlYXJjaF9taW5QaG9uTGVuZ3RoJTIyJTNCcyUzQTElM0ElMjIzJTIyJTNCcyUzQTM4JTNBJTIyZDNfY2ZnX21vZF9fYmxFeHRTZWFyY2hfc2VtYW50aWNTZWFyY2glMjIlM0JzJTNBMSUzQSUyMjAlMjIlM0JzJTNBNDMlM0ElMjJkM19jZmdfbW9kX19ibEV4dFNlYXJjaF9zZW1hbnRpY1VzZVBob25ldGljJTIyJTNCcyUzQTElM0ElMjIwJTIyJTNCcyUzQTQzJTNBJTIyZDNfY2ZnX21vZF9fYmxFeHRTZWFyY2hfc2VtYW50aWNBbGxvd1Z1bGdhciUyMiUzQnMlM0ExJTNBJTIyMCUyMiUzQnMlM0EzMyUzQSUyMmQzX2NmZ19tb2RfX2JsRXh0U2VhcmNoX2NhdFNlYXJjaCUyMiUzQnMlM0ExJTNBJTIyMSUyMiUzQnMlM0EzOCUzQSUyMmQzX2NmZ19tb2RfX3NFeHRTZWFyY2hfc2hvd0NhdEFydGljbGVzJTIyJTNCcyUzQTglM0ElMjJhcnRpbmNhdCUyMiUzQnMlM0EzMCUzQSUyMmQzX2NmZ19tb2RfX2lFeHRTZWFyY2hfY2F0UHJpbyUyMiUzQnMlM0EyJTNBJTIyNTAlMjIlM0JzJTNBNDIlM0ElMjJkM19jZmdfbW9kX19ibEV4dFNlYXJjaF9tYW51ZmFjdHVyZXJTZWFyY2glMjIlM0JzJTNBMSUzQSUyMjElMjIlM0JzJTNBMzklM0ElMjJkM19jZmdfbW9kX19pRXh0U2VhcmNoX21hbnVmYWN0dXJlclByaW8lMjIlM0JzJTNBMiUzQSUyMjUwJTIyJTNCcyUzQTM5JTNBJTIyZDNfY2ZnX21vZF9fYmxFeHRTZWFyY2hfc2hvd0NvbnRlbnRMaXN0JTIyJTNCcyUzQTElM0ElMjIxJTIyJTNCcyUzQTQ1JTNBJTIyZDNfY2ZnX21vZF9fYmxFeHRTZWFyY2hfY29udGVudFNlYXJjaExvbmd0ZXh0JTIyJTNCcyUzQTElM0ElMjIwJTIyJTNCcyUzQTM0JTNBJTIyZDNfY2ZnX21vZF9fYmxFeHRTZWFyY2hfbG9nSGl0bGVzcyUyMiUzQnMlM0ExJTNBJTIyMSUyMiUzQnMlM0E0NSUzQSUyMmQzX2NmZ19tb2RfX2JsRXh0U2VhcmNoX2dlbmVyYWxseUxvZ0ZvclNlYXJjaCUyMiUzQnMlM0ExJTNBJTIyMCUyMiUzQnMlM0E0MSUzQSUyMmQzX2NmZ19tb2RfX2JsRXh0U2VhcmNoX2FkbWluU2hvd1ZhcmlhbnRzJTIyJTNCcyUzQTElM0ElMjIxJTIyJTNCcyUzQTM4JTNBJTIyZDNfY2ZnX21vZF9faUV4dFNlYXJjaF9hcnRpY2xlc1BlclRpY2slMjIlM0JzJTNBMiUzQSUyMjEwJTIyJTNCcyUzQTM1JTNBJTIyZDNfY2ZnX21vZF9fYmxFeHRTZWFyY2hfZW1wdHlTZWFyY2glMjIlM0JzJTNBMSUzQSUyMjAlMjIlM0JzJTNBNDMlM0ElMjJkM19jZmdfbW9kX19ibEV4dFNlYXJjaF9zaG93SGlnaGxpZ2h0ZWRUZXh0JTIyJTNCcyUzQTElM0ElMjIxJTIyJTNCcyUzQTM3JTNBJTIyZDNfY2ZnX21vZF9fYmxFeHRTZWFyY2hfZ29Ub1VuaXF1ZUhpdCUyMiUzQnMlM0ExJTNBJTIyMSUyMiUzQnMlM0EzNSUzQSUyMmQzX2NmZ19tb2RfX2JsRXh0U2VhcmNoX3Nob3dDYXRMaXN0JTIyJTNCcyUzQTElM0ElMjIxJTIyJTNCcyUzQTM1JTNBJTIyZDNfY2ZnX21vZF9fc0V4dFNlYXJjaF9vcmRlckNhdExpc3QlMjIlM0JzJTNBNyUzQSUyMmNvdW50ZXIlMjIlM0JzJTNBNDIlM0ElMjJkM19jZmdfbW9kX19ibEV4dFNlYXJjaF9zaG93T25lSXRlbUNhdExpc3QlMjIlM0JzJTNBMSUzQSUyMjAlMjIlM0JzJTNBMzglM0ElMjJkM19jZmdfbW9kX19ibEV4dFNlYXJjaF9zaG93VmVuZG9yTGlzdCUyMiUzQnMlM0ExJTNBJTIyMCUyMiUzQnMlM0EzOCUzQSUyMmQzX2NmZ19tb2RfX3NFeHRTZWFyY2hfb3JkZXJWZW5kb3JMaXN0JTIyJTNCcyUzQTclM0ElMjJjb3VudGVyJTIyJTNCcyUzQTQ1JTNBJTIyZDNfY2ZnX21vZF9fYmxFeHRTZWFyY2hfc2hvd09uZUl0ZW1WZW5kb3JMaXN0JTIyJTNCcyUzQTElM0ElMjIwJTIyJTNCcyUzQTQ0JTNBJTIyZDNfY2ZnX21vZF9fYmxFeHRTZWFyY2hfc2hvd01hbnVmYWN0dXJlckxpc3QlMjIlM0JzJTNBMSUzQSUyMjElMjIlM0JzJTNBNDQlM0ElMjJkM19jZmdfbW9kX19zRXh0U2VhcmNoX29yZGVyTWFudWZhY3R1cmVyTGlzdCUyMiUzQnMlM0E3JTNBJTIyY291bnRlciUyMiUzQnMlM0E1MSUzQSUyMmQzX2NmZ19tb2RfX2JsRXh0U2VhcmNoX3Nob3dPbmVJdGVtTWFudWZhY3R1cmVyTGlzdCUyMiUzQnMlM0ExJTNBJTIyMCUyMiUzQnMlM0E0MSUzQSUyMmQzX2NmZ19tb2RfX2JsRXh0U2VhcmNoX3Nob3dBdHRyaWJ1dGVMaXN0JTIyJTNCcyUzQTElM0ElMjIwJTIyJTNCcyUzQTQxJTNBJTIyZDNfY2ZnX21vZF9fc0V4dFNlYXJjaF9vcmRlckF0dHJpYnV0ZUxpc3QlMjIlM0JzJTNBNyUzQSUyMmNvdW50ZXIlMjIlM0JzJTNBNTUlM0ElMjJkM19jZmdfbW9kX19ibEV4dFNlYXJjaF9zaG93Tm9Bc3NpZ25lZEF0dHJpYnV0ZUFydGljbGVzJTIyJTNCcyUzQTElM0ElMjIwJTIyJTNCcyUzQTQxJTNBJTIyZDNfY2ZnX21vZF9fYmxFeHRTZWFyY2hfc2hvd1ByaWNlU2VsZWN0b3IlMjIlM0JzJTNBMSUzQSUyMjElMjIlM0JzJTNBNDElM0ElMjJkM19jZmdfbW9kX19pRXh0U2VhcmNoX3ByaWNlU2VsZWN0b3JJdGVtcyUyMiUzQnMlM0ExJTNBJTIyNSUyMiUzQnMlM0E0NSUzQSUyMmQzX2NmZ19tb2RfX2JsRXh0U2VhcmNoX1ByaWNlU2VsZWN0b3JzUm91bmRlZCUyMiUzQnMlM0ExJTNBJTIyMSUyMiUzQnMlM0E0NSUzQSUyMmQzX2NmZ19tb2RfX3NFeHRTZWFyY2hfUHJpY2VTZWxlY3RvcnNEaXNwVHlwZSUyMiUzQnMlM0E4JTNBJTIyanFzbGlkZXIlMjIlM0JzJTNBMzklM0ElMjJkM19jZmdfbW9kX19ibEV4dFNlYXJjaF9zaG93RmlsdGVyUGFyYW0lMjIlM0JzJTNBMSUzQSUyMjElMjIlM0JzJTNBMzklM0ElMjJkM19jZmdfbW9kX19zRXh0U2VhcmNoX2ZpbHRlclBhcmFtRmllbGQlMjIlM0JzJTNBNyUzQSUyMm94dGl0bGUlMjIlM0JzJTNBNDAlM0ElMjJkM19jZmdfbW9kX19ibEV4dFNlYXJjaF9lbmFibGVBamF4U2VhcmNoJTIyJTNCcyUzQTElM0ElMjIxJTIyJTNCcyUzQTQ1JTNBJTIyZDNfY2ZnX21vZF9fc0V4dFNlYXJjaF9RdWlja1NlYXJjaE1heEFydGljbGVzJTIyJTNCcyUzQTMlM0ElMjIyMDAlMjIlM0JzJTNBNDklM0ElMjJkM19jZmdfbW9kX19ibEV4dFNlYXJjaF9RdWlja1NlYXJjaExvYWRDYXRlZ29yaWVzJTIyJTNCcyUzQTElM0ElMjIxJTIyJTNCcyUzQTUyJTNBJTIyZDNfY2ZnX21vZF9fYmxFeHRTZWFyY2hfUXVpY2tTZWFyY2hMb2FkTWFudWZhY3R1cmVycyUyMiUzQnMlM0ExJTNBJTIyMSUyMiUzQnMlM0E0NiUzQSUyMmQzX2NmZ19tb2RfX2JsRXh0U2VhcmNoX1F1aWNrU2VhcmNoTG9hZFZlbmRvcnMlMjIlM0JzJTNBMSUzQSUyMjElMjIlM0JzJTNBNDYlM0ElMjJkM19jZmdfbW9kX19ibEV4dFNlYXJjaF9RdWlja1NlYXJjaExvYWRDb250ZW50JTIyJTNCcyUzQTElM0ElMjIwJTIyJTNCcyUzQTMxJTNBJTIyZDNfY2ZnX21vZF9fYmxFeHRTZWFyY2hfU2hvd0lBUyUyMiUzQnMlM0ExJTNBJTIyMCUyMiUzQnMlM0EzMyUzQSUyMmQzX2NmZ19tb2RfX2JsRXh0U2VhcmNoX1Nob3dQb3B1cCUyMiUzQnMlM0ExJTNBJTIyMCUyMiUzQnMlM0E0OCUzQSUyMmQzX2NmZ19tb2RfX2JsRXh0U2VhcmNoX1ZhcmlhbnRDaGVja1BhcmVudEFjdGl2ZSUyMiUzQnMlM0ExJTNBJTIyMCUyMiUzQnMlM0E0MSUzQSUyMmQzX2NmZ19tb2RfX3NFeHRTZWFyY2hfb3JkZXJCeUFsdGVybmF0aXZlJTIyJTNCcyUzQTclM0ElMjJveHRpdGxlJTIyJTNCcyUzQTQyJTNBJTIyZDNfY2ZnX21vZF9fc0V4dFNlYXJjaF9vcmRlckRpckFsdGVybmF0aXZlJTIyJTNCcyUzQTMlM0ElMjJhc2MlMjIlM0JzJTNBNTAlM0ElMjJkM19jZmdfbW9kX19ibEV4dFNlYXJjaF9lbmFibGVQbHVnaW5Ccm93c2VySW5zdGFsbCUyMiUzQnMlM0ExJTNBJTIyMCUyMiUzQnMlM0E0MCUzQSUyMmQzX2NmZ19tb2RfX2JsRXh0U2VhcmNoX2VuYWJsZVBsdWdpbkxpbmslMjIlM0JzJTNBMSUzQSUyMjAlMjIlM0JzJTNBMzglM0ElMjJkM19jZmdfbW9kX19ibEV4dFNlYXJjaF91c2VBTGlzdEZpbHRlciUyMiUzQnMlM0ExJTNBJTIyMSUyMiUzQnMlM0E0NSUzQSUyMmQzX2NmZ19tb2RfX2JsRXh0U2VhcmNoX3VzZUF0dHJpYnV0ZUNvbWJpbmVPciUyMiUzQnMlM0ExJTNBJTIyMCUyMiUzQnMlM0EzOCUzQSUyMmQzX2NmZ19tb2RfX3NFeHRTZWFyY2hfb3JkZXJBdHRyaWJ1dGVzJTIyJTNCcyUzQTUlM0ElMjJveHBvcyUyMiUzQnMlM0E1MSUzQSUyMmQzX2NmZ19tb2RfX2JsRXh0U2VhcmNoX3VzZUF0dHJpYnV0ZVZhbHVlQ29tYmluZUFuZCUyMiUzQnMlM0ExJTNBJTIyMCUyMiUzQnMlM0E1MSUzQSUyMmQzX2NmZ19tb2RfX2JsRXh0U2VhcmNoX3Nob3dOb3RTZWxlY3RhYmxlQXR0cmlidXRlcyUyMiUzQnMlM0ExJTNBJTIyMCUyMiUzQnMlM0E0OSUzQSUyMmQzX2NmZ19tb2RfX2JsRXh0U2VhcmNoX2FqYXhTZWFyY2hMb2FkRnVsbE9iamVjdHMlMjIlM0JzJTNBMSUzQSUyMjAlMjIlM0IlN0Q='; public $sMinModCfgVersion = '7.0.0.0'; protected $_aUpdateMethods = [ ['check' => 'checkModCfgItemExist', 'do' => 'updateModCfgItemExist'], ['check' => 'checkRenameFields', 'do' => 'fixRenameFields'], ['check' => 'checkIndexRefreshMsg', 'do' => 'fixIndexRefreshMsg'], ['check' => 'checkAttribute2ObjectTableExist', 'do' => 'addAttribute2ObjectTable'], ['check' => 'checkStatisticTablesExist', 'do' => 'addStatisticTables'], ['check' => 'checkSynsetTablesExist', 'do' => 'addSynsetTables'], ['check' => 'checkFields', 'do' => 'fixFields'], ['check' => 'checkIndizes', 'do' => 'fixIndizes'], ['check' => 'checkUnsetSynsetTypes', 'do' => 'setInitialSynsetTypes'], ['check' => 'checkContentNoArtItemExist', 'do' => 'updateContentNoArtItemExist'], ['check' => 'hasModcfgMultilangSetting', 'do' => 'addModcfgMultilangSetting'], ['check' => 'checkModCfgSameRevision', 'do' => 'updateModCfgSameRevision'], ]; public $aFields = [ 'D3_PHONETIC' => [ 'sTableName' => 'oxartextends', 'sFieldName' => 'D3_PHONETIC', 'sType' => 'LONGTEXT', 'blNull' => false, 'sDefault' => false, 'sComment' => 'modExtSearch', 'sExtra' => '', 'blMultilang' => true, ], 'D3_SEARCHINDEXDATE' => [ 'sTableName' => 'oxarticles', 'sFieldName' => 'D3_SEARCHINDEXDATE', 'sType' => 'DATETIME', 'blNull' => true, 'sDefault' => null, 'sComment' => 'modExtSearch', 'sExtra' => '', 'blMultilang' => true, ], 'D3PUSH' => [ 'sTableName' => 'oxarticles', 'sFieldName' => 'D3PUSH', 'sType' => 'TINYINT(1)', 'blNull' => false, 'sDefault' => '1', 'sComment' => 'search sort criteria', 'sExtra' => '', 'blMultilang' => false, ], 'D3CONTENTHASH' => [ 'sTableName' => 'oxarticles', 'sFieldName' => 'D3CONTENTHASH', 'sType' => 'CHAR(32)', 'blNull' => false, 'sDefault' => '', 'sComment' => 'extSearch: hashed search field content', 'sExtra' => '', 'blMultilang' => true, ], 'D3ISSEARCHABLE' => [ 'sTableName' => 'oxcontents', 'sFieldName' => 'D3ISSEARCHABLE', 'sType' => 'TINYINT(1)', 'blNull' => false, 'sDefault' => '0', 'sComment' => 'modExtSearch', 'sExtra' => '', 'blMultilang' => false, ], 'D3NOTUSE4FILTER' => [ 'sTableName' => 'oxattribute', 'sFieldName' => 'D3NOTUSE4FILTER', 'sType' => 'TINYINT(1)', 'blNull' => false, 'sDefault' => '0', 'sComment' => 'attrib use in extsearch', 'sExtra' => '', 'blMultilang' => false, ], 'D3USECORRESPONDINGVALUES' => [ 'sTableName' => 'oxattribute', 'sFieldName' => 'D3USECORRESPONDINGVALUES', 'sType' => 'TINYINT(1)', 'blNull' => false, 'sDefault' => '0', 'sComment' => 'use synonyms in extsearch', 'sExtra' => '', 'blMultilang' => false, ], 'D3HIDESMALLFILTER' => [ 'sTableName' => 'oxattribute', 'sFieldName' => 'D3HIDEONEITEMFILTER', 'sType' => 'TINYINT(1)', 'blNull' => false, 'sDefault' => '0', 'sComment' => 'hide filter with less than 2 items', 'sExtra' => '', 'blMultilang' => false, ], 'D3NOTUSE4FILTERCAT' => [ 'sTableName' => 'oxcategories', 'sFieldName' => 'D3NOTUSE4FILTER', 'sType' => 'TINYINT(1)', 'blNull' => false, 'sDefault' => '0', 'sComment' => 'category use in extsearch', 'sExtra' => '', 'blMultilang' => false, ], ]; public $aIndizes = []; public $aRenameFields = [ 'D3_PHONETIC' => [ 'sTableName' => 'oxarticles', 'mOldFieldNames' => ['d3_phonetic'], // is case sensitive 'sFieldName' => 'D3_PHONETIC', 'blMultilang' => true, ], 'D3_SEARCHINDEXDATE' => [ 'sTableName' => 'oxarticles', 'mOldFieldNames' => ['d3_searchIndexDate'], // is case sensitive 'sFieldName' => 'D3_SEARCHINDEXDATE', 'blMultilang' => true, ], 'D3PUSH' => [ 'sTableName' => 'oxarticles', 'mOldFieldNames' => ['d3push'], // is case sensitive 'sFieldName' => 'D3PUSH', 'blMultilang' => false, ], 'D3NOTUSE4FILTER' => [ 'sTableName' => 'oxattribute', 'mOldFieldNames' => ['d3notuse4filter'], // is case sensitive 'sFieldName' => 'D3NOTUSE4FILTER', 'blMultilang' => false, ], ]; public array $aA2OFields = []; public array $aA2OIndizes = []; public array $aESSemanticTables = []; public array $aESSemanticFields = []; public array $aESSemanticIndizes = []; public array $aESSemanticRenameFields = []; public array $aESStatisticTables = []; public array $aESStatisticFields = []; public array $aESStatisticIndizes = []; public array $aESStatisticRenameFields = []; public array $aSemanticTables = []; public array $aStatisticTables = []; public $aOldModuleFiles = [ 'd3/d3_extsearch/models/d3_extsearch_update.php', ]; protected $_aRefreshMetaModuleIds = ['d3_extsearch']; /** * constructor */ public function __construct() { require('d3_extsearch_semanticstructure.php'); require('d3_extsearch_statisticlog.php'); require('d3_extsearch_attribute2object.php'); parent::__construct(); } /** * @return bool */ public function checkIndexRefreshMsg(): bool { if (Registry::getSession()->getVariable('checkIndexRefreshMsg')) { return true; } return false; } /** * @return bool */ public function fixIndexRefreshMsg(): bool { $blRet = true; if (Registry::getSession()->getVariable('checkIndexRefreshMsg')) { Registry::getSession()->setVariable('checkIndexRefreshMsg', false); $this->_confirmMessage('D3_EXTSEARCH_UPDATE_GENPHONETIC'); } return $blRet; } /** * @return bool * @throws DBALException * @throws DatabaseConnectionException */ public function checkContentNoArtItemExist(): bool { $blRet = false; /** @var Shop $oShop */ foreach ($this->getShopList() as $oShop) { $aWhere = [ 'oxloadid' => 'd3extsearch_noarticlefound', 'oxshopid' => $oShop->getId(), ]; $blRet = $this->_checkTableItemNotExist('oxcontents', $aWhere); if ($blRet) { return $blRet; } } return $blRet; } /** * @return bool * @throws DBALException * @throws DatabaseConnectionException * @throws ConnectionException * @throws DatabaseErrorException */ public function updateContentNoArtItemExist(): bool { $blRet = false; /** @var Shop $oShop */ foreach ($this->getShopList() as $oShop) { $aWhere = [ 'oxloadid' => 'd3extsearch_noarticlefound', 'oxshopid' => $oShop->getId(), ]; if ($this->_checkTableItemNotExist('oxcontents', $aWhere)) { $aWhere = []; $aInsertFields = [ [ 'fieldname' => 'OXID', 'content' => "md5('d3extsearch_noarticlefound " . $oShop->getId() . "')", 'force_update' => true, 'use_quote' => false, ], [ 'fieldname' => 'OXLOADID', 'content' => "d3extsearch_noarticlefound", 'force_update' => true, 'use_quote' => true, ], [ 'fieldname' => 'OXSHOPID', 'content' => $oShop->getId(), 'force_update' => true, 'use_quote' => true, ], [ 'fieldname' => 'OXSNIPPET', 'content' => "1", 'force_update' => true, 'use_quote' => true, ], [ 'fieldname' => 'OXTYPE', 'content' => "0", 'force_update' => true, 'use_quote' => true, ], [ 'fieldname' => 'OXACTIVE', 'content' => "1", 'force_update' => false, 'use_quote' => true, 'use_multilang' => true, ], [ 'fieldname' => 'OXPOSITION', 'content' => "", 'force_update' => true, 'use_quote' => true, ], [ 'fieldname' => $this->_getLangAbbrFieldName('oxcontents', 'OXTITLE', 'de'), 'content' => "Leider wurden keine Artikel gefunden", 'force_update' => false, 'use_quote' => true, 'use_multilang' => true, ], [ 'fieldname' => 'OXCONTENT', 'content' => "

Versuchen Sie es mit einem anderen Suchbegriff, einer anderen ". "Schreibweise oder anderen Filtern bitte noch einmal.

Erhalten Sie dennoch keine ". "Ergebnisse, kontaktieren Sie uns bitte ". "getSelfLink()|cat:\"cl=contact\"}]\">hier.". "


", 'force_update' => false, 'use_quote' => true, 'use_multilang' => true, ], [ 'fieldname' => $this->_getLangAbbrFieldName('oxcontents', 'OXTITLE', 'en'), 'content' => "Sorry, no items were found.", 'force_update' => false, 'use_quote' => true, ], [ 'fieldname' => 'OXCATID', 'content' => "kgo83a794223bfd23cbb091d0a34019d", 'force_update' => true, 'use_quote' => true, ], [ 'fieldname' => 'OXFOLDER', 'content' => "CMSFOLDER_USERINFO", 'force_update' => true, 'use_quote' => true, ], ]; $this->setInitialExecMethod(__METHOD__); $blRet = $this->_updateTableItem2('oxcontents', $aInsertFields, $aWhere); if ($this->getStepByStepMode()) { break; } } } return $blRet; } /** * @return bool true, if table is missing * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException */ public function checkStatisticTablesExist(): bool { foreach ($this->aStatisticTables as $aStatisticTable) { if (($blRet = $this->_checkTableNotExist($aStatisticTable['sName']))) { return $blRet; } } return false; } /** * @return bool * @throws ConnectionException * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException */ public function addStatisticTables(): bool { $this->setInitialExecMethod(__METHOD__); $blDoRet = false; foreach ($this->aStatisticTables as $aStatisticTable) { if ($this->_checkTableNotExist($aStatisticTable['sName'])) { if ($this->hasExecute()) { $iCount = $this->getUpdateStepCount(); Registry::getSession()->setVariable('iD3UpdatebaseCount', $iCount + 1); } $blDoRet = $this->_addTable2( $aStatisticTable['sName'], $this->aFields, $this->aIndizes, $aStatisticTable['sComment'], $aStatisticTable['sType'] ); if ($this->getUpdateBreak() || false == $blDoRet) { return $blDoRet; } } } return $blDoRet; } /** * @return bool true, if table is missing * @return bool * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException */ public function checkAttribute2ObjectTableExist(): bool { return $this->_checkTableNotExist('d3extsearch_attribute2object'); } /** * @return bool * @return bool * @throws ConnectionException * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException */ public function addAttribute2ObjectTable(): bool { $this->setInitialExecMethod(__METHOD__); $blDoRet = false; if ($this->checkAttribute2ObjectTableExist()) { if ($this->hasExecute()) { $iCount = $this->getUpdateStepCount(); Registry::getSession()->setVariable('iD3UpdatebaseCount', $iCount + 1); } $blDoRet = $this->_addTable2( 'd3extsearch_attribute2object', $this->aFields, $this->aIndizes, 'Shows many-to-many relationship between attributes and objects (table determined by oxtype)', 'InnoDb' ); } return $blDoRet; } /** * @return bool true, if table is missing * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException */ public function checkSynsetTablesExist(): bool { foreach ($this->aSemanticTables as $aSemanticTable) { if (($blRet = $this->_checkTableNotExist($aSemanticTable['sName']))) { return $blRet; } } return false; } /** * @return bool * @throws ConnectionException * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException */ public function addSynsetTables(): bool { $this->setInitialExecMethod(__METHOD__); $blDoRet = false; foreach ($this->aSemanticTables as $aSemanticTable) { if ($this->_checkTableNotExist($aSemanticTable['sName'])) { if ($this->hasExecute()) { $iCount = $this->getUpdateStepCount(); Registry::getSession()->setVariable('iD3UpdatebaseCount', $iCount + 1); } $blDoRet = $this->_addTable2( $aSemanticTable['sName'], $this->aFields, $this->aIndizes, $aSemanticTable['sComment'], $aSemanticTable['sType'] ); if ( $this->getUpdateBreak() || ! $blDoRet ) { return $blDoRet; } } } return $blDoRet; } /** * @return bool // true, if there are unassigned synsets * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ public function checkUnsetSynsetTypes(): bool { $qb = ContainerFactory::getInstance()->getContainer()->get(QueryBuilderFactoryInterface::class)->create(); $qb->select('count(*)') ->from(oxNew(d3_extsearch_synset::class)->getCoreTableName()) ->where( $qb->expr()->in(1, ['USEFORTERMS', 'USEFORATTRIBUTES']) ); $iUnassigned = (int) $qb->execute()->fetchOne(); $qb = ContainerFactory::getInstance()->getContainer()->get(QueryBuilderFactoryInterface::class)->create(); $qb->select('count(*)') ->from(oxNew(d3_extsearch_synset::class)->getCoreTableName()); $iTotal = (int) $qb->execute()->fetchOne(); return !$iUnassigned && $iTotal; } /** * @return bool * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ public function setInitialSynsetTypes(): bool { if ($this->checkUnsetSynsetTypes()) { $qb = ContainerFactory::getInstance()->getContainer()->get(QueryBuilderFactoryInterface::class)->create(); $qb->update(oxNew(d3_extsearch_synset::class)->getCoreTableName(), 't') ->set('t.USEFORTERMS', $qb->createNamedParameter(1, ParameterType::INTEGER)); if ($this->hasExecute()) { try { $qb->execute(); } catch (Exception $exception) { $this->setErrorMessage($exception->getMessage()); } } $this->setUpdateBreak(false); $this->setActionLog('SQL', d3database::getInstance()->getPreparedStatementQuery($qb->getSQL(), $qb->getParameters()), __METHOD__); } return true; } }