custom/plugins/IwvTwoFactorAuthentication/src/IwvTwoFactorAuthentication.php line 19

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Iwv\IwvTwoFactorAuthentication;
  4. use Doctrine\DBAL\Connection;
  5. use Shopware\Core\Framework\Plugin;
  6. use Shopware\Core\Framework\Context;
  7. use Shopware\Core\Framework\Plugin\Context\UninstallContext;
  8. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  9. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  10. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  11. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\NotFilter;
  12. if (file_exists(dirname(__DIR__) . '/vendor/autoload.php')) {
  13.     require_once dirname(__DIR__) . '/vendor/autoload.php';
  14. }
  15. class IwvTwoFactorAuthentication extends Plugin
  16. {
  17.     private function deleteUserData(Context $context){
  18.         /** @var EntityRepositoryInterface $userRepository */
  19.         $updateUsers = [];
  20.         $userRepository $this->container->get('user.repository');
  21.         foreach ($userRepository->search(
  22.             (new Criteria())->addFilter(new NotFilter(NotFilter::CONNECTION_OR,
  23.                     [
  24.                     new EqualsFilter('customFields.iwvTwoFactor'NULL)
  25.                 ])), $context) as $userDB) {
  26.             $customFields = (array) $userDB->getCustomFields();
  27.             unset($customFields['iwvTwoFactor']);
  28.             unset($customFields['iwvTwoFactorCookie']);
  29.             $updateUsers[] = [
  30.                 'id' => $userDB->getId(),
  31.                 'customFields' => $customFields
  32.             ];
  33.         }
  34.         if ($updateUsers) {
  35.             $userRepository->update($updateUsers$context);
  36.         }
  37.     }
  38.     private function deleteCustomerData(Context $context){
  39.         /** @var EntityRepositoryInterface $customerRepository */
  40.         $updateCustomers = [];
  41.         $customerRepository $this->container->get('customer.repository');
  42.         foreach ($customerRepository->search(
  43.             (new Criteria())->addFilter(new NotFilter(NotFilter::CONNECTION_OR,
  44.                     [
  45.                     new EqualsFilter('customFields.iwvTwoFactor'NULL)
  46.                 ])), $context) as $userDB) {
  47.             $customFields = (array) $userDB->getCustomFields();
  48.             unset($customFields['iwvTwoFactor']);
  49.             unset($customFields['iwvTwoFactorCookie']);
  50.             $updateCustomers[] = [
  51.                 'id' => $userDB->getId(),
  52.                 'customFields' => $customFields
  53.             ];
  54.         }
  55.         if ($updateCustomers) {
  56.             $customerRepository->update($updateCustomers$context);
  57.         }
  58.     }
  59.     private function deleteEmailTemplate(){
  60.         $connection $this->container->get(Connection::class);
  61.         $connection->exec('
  62.             SET FOREIGN_KEY_CHECKS = 0;
  63.             DELETE mail_template_type, mail_template_type_translation, mail_template, mail_template_translation
  64.             FROM mail_template_type
  65.             JOIN mail_template_type_translation ON mail_template_type.id = mail_template_type_translation.mail_template_type_id
  66.             JOIN mail_template ON mail_template_type.id = mail_template.mail_template_type_id
  67.             JOIN mail_template_translation ON mail_template.id = mail_template_translation.mail_template_id
  68.             WHERE mail_template_type.technical_name = "iwvtwofa_email_confirmation"; 
  69.             
  70.             SET FOREIGN_KEY_CHECKS = 1;
  71.         ');
  72.     }
  73.     
  74.     /**
  75.      * @param UninstallContext $uninstallContext
  76.      */
  77.     public function uninstall(UninstallContext $uninstallContext): void
  78.     {
  79.         parent::uninstall($uninstallContext);
  80.         if ($uninstallContext->keepUserData()) {
  81.             return;
  82.         }
  83.         $uninstallContext->getContext()->scope(Context::SYSTEM_SCOPE, function (Context $context): void {
  84.             $this->deleteUserData($context);
  85.             $this->deleteCustomerData($context);
  86.             $this->deleteEmailTemplate();
  87.         });
  88.     }
  89. }