/**
  * Install external adapters
  * @return void
  * @throws Exception
  */
 private function installAdapters(AdaptersEvent $event)
 {
     $fs = new Filesystem();
     $finder = new Finder();
     try {
         $pluginsDir = __DIR__ . '/../../../';
         $iterator = $finder->ignoreUnreadableDirs()->files()->name('*Adapter.php')->in($pluginsDir . '*/*/Adapter/PaywallAdapters/')->in(__DIR__ . '/../Adapter/');
         foreach ($iterator as $file) {
             $classNamespace = str_replace(realpath($pluginsDir), '', substr($file->getRealPath(), 0, -4));
             $namespace = str_replace('/', '\\', $classNamespace);
             $adapterName = substr($file->getFilename(), 0, -4);
             $oneAdapter = $this->em->getRepository('Newscoop\\PaywallBundle\\Entity\\Settings')->findOneBy(array('value' => $adapterName));
             $event->registerAdapter($adapterName, array('class' => $namespace));
             if (!$oneAdapter) {
                 $adapter = new Settings();
                 $adapter->setName(str_replace("Adapter.php", "", $file->getFilename()));
                 $adapter->setValue($adapterName);
                 if ($adapterName !== 'PaypalAdapter') {
                     $adapter->setIsActive(false);
                 }
                 $this->em->persist($adapter);
             }
         }
         $this->em->flush();
     } catch (\Exception $e) {
     }
 }
 public function install(GenericEvent $event)
 {
     $tool = new \Doctrine\ORM\Tools\SchemaTool($this->em);
     $tool->updateSchema($this->getClasses(), true);
     $adapter = new Settings();
     $adapter->setName('Paypal');
     $adapter->setValue('PaypalAdapter');
     $this->em->persist($adapter);
     $this->em->flush();
     $this->dispatcher->dispatch('newscoop_paywall.adapters.register', new AdaptersEvent($this, array()));
     // Generate proxies for entities
     $this->em->getProxyFactory()->generateProxyClasses($this->getClasses(), __DIR__ . '/../../../../library/Proxy');
     $this->addJobs();
     $this->systemPreferences->PaywallMembershipNotifyEmail = $this->systemPreferences->EmailFromAddress;
     $this->systemPreferences->PaywallMembershipNotifyFromEmail = $this->systemPreferences->EmailFromAddress;
     $this->systemPreferences->PaywallEmailNotifyEnabled = 0;
 }