Пример #1
0
 /**
  * Occur on nestednode.page.onflush events.
  *
  * @param \BackBee\Event\Event $event
  */
 public static function onFlushPage(Event $event)
 {
     if (true === self::$onFlushPageAlreadyCalled) {
         return;
     }
     $page = $event->getTarget();
     if (!$page instanceof Page) {
         return;
     }
     $application = $event->getApplication();
     $em = $application->getEntityManager();
     $uow = $em->getUnitOfWork();
     if ($uow->isScheduledForDelete($page)) {
         return;
     }
     if (null === ($metadata_config = $application->getConfig()->getSection('metadata'))) {
         return;
     }
     if (null === ($metadata = $page->getMetaData())) {
         $metadata = new \BackBee\MetaData\MetaDataBag($metadata_config, $page);
     } else {
         $metadata->update($metadata_config, $page);
     }
     $page->setMetaData($metadata->compute($page));
     if ($uow->isScheduledForInsert($page) || $uow->isScheduledForUpdate($page)) {
         $uow->recomputeSingleEntityChangeSet($em->getClassMetadata('BackBee\\NestedNode\\Page'), $page);
     } elseif (!$uow->isScheduledForDelete($page)) {
         $uow->computeChangeSet($em->getClassMetadata('BackBee\\NestedNode\\Page'), $page);
     }
     self::$onFlushPageAlreadyCalled = true;
 }
Пример #2
0
 /**
  * Occurs on event ``bbapplication.init`` to dump application container if debug mode is false.
  *
  * @param Event $event
  */
 public static function onApplicationInit(Event $event)
 {
     $application = $event->getTarget();
     $container = $application->getContainer();
     if (false === $application->isDebugMode() && false === $container->isRestored()) {
         $containerFilename = $container->getParameter('container.filename');
         $containerDir = $container->getParameter('container.dump_directory');
         if (false === is_dir($containerDir) && false === @mkdir($containerDir, 0755)) {
             throw new CannotCreateContainerDirectoryException($containerDir);
         }
         if (false === is_writable($containerDir)) {
             throw new ContainerDirectoryNotWritableException($containerDir);
         }
         $dumper = new PhpArrayDumper($container);
         $dump = $dumper->dump(array('do_compile' => true));
         $container_proxy = new ContainerProxy();
         $dump = unserialize($dump);
         $container_proxy->init($dump);
         $container_proxy->setParameter('services_dump', serialize($dump['services']));
         $container_proxy->setParameter('is_compiled', $dump['is_compiled']);
         file_put_contents($containerDir . DIRECTORY_SEPARATOR . $containerFilename . '.php', (new PhpDumper($container_proxy))->dump(array('class' => $containerFilename, 'base_class' => 'BackBee\\DependencyInjection\\ContainerProxy')));
     } elseif (true === $application->isDebugMode() && false === $container->isRestored()) {
         $container->compile();
     }
 }
Пример #3
0
 /**
  * occurs on `bbapplication.start`.
  *
  * @param Event $event
  */
 public static function onApplicationStart(Event $event)
 {
     $application = $event->getTarget();
     $twig_adapter = $application->getRenderer()->getAdapter('twig');
     foreach ($application->getContainer()->findTaggedServiceIds('twig.extension') as $id => $datas) {
         $twig_adapter->addExtension($application->getContainer()->get($id));
     }
 }
Пример #4
0
 /**
  * Occurs on `bbapplication.stop` event to stop every started bundles.
  *
  * @param Event $event
  */
 public static function onApplicationStop(Event $event)
 {
     $container = $event->getTarget()->getContainer();
     foreach (array_keys($container->findTaggedServiceIds('bundle')) as $bundleId) {
         if ($container->hasInstanceOf($bundleId)) {
             $container->get($bundleId)->stop();
         }
     }
 }
Пример #5
0
 /**
  * @param \BackBee\Event\Event $event
  */
 public function onPostLoad(Event $event)
 {
     $page = $event->getTarget();
     if (!$page instanceof Page) {
         return;
     }
     $isBbSessionActive = $this->_application->getBBUserToken() === null;
     $page->setUseUrlRedirect($isBbSessionActive);
 }
Пример #6
0
 /**
  * occurs on `bbapplication.init`.
  *
  * @param Event $event
  */
 public static function onApplicationReady(Event $event)
 {
     $app = $event->getTarget();
     $twigAdapter = $app->getRenderer()->getAdapter('twig');
     if (null === $twigAdapter) {
         return;
     }
     foreach ($app->getContainer()->findTaggedServiceIds('twig.extension') as $id => $data) {
         $twigAdapter->addExtension($app->getContainer()->get($id));
     }
 }
Пример #7
0
 /**
  * Occur on site.layout.postremove events.
  *
  * @access public
  *
  * @param Event $event
  */
 public static function onAfterRemove(Event $event)
 {
     $layout = $event->getTarget();
     if (!is_a($layout, 'BackBee\\Site\\Layout')) {
         return;
     }
     $dispatcher = $event->getDispatcher();
     if (null !== $dispatcher->getApplication()) {
         $dispatcher->getApplication()->getEntityManager()->getRepository('BackBee\\Site\\Layout')->removeThumbnail($layout, $dispatcher->getApplication());
     }
     $dispatcher->getApplication()->getRenderer()->removeLayout($layout);
 }
 public static function onUserCreated(Event $event)
 {
     $application = $event->getDispatcher()->getApplication();
     $site = $application->getSite();
     $user = $event->getTarget();
     if ($user instanceof User && $site instanceof Site) {
         $body = $application->getRenderer()->partial('Email/NewUser.twig', ['user' => $user, 'site_name' => $site->getLabel(), 'home_link' => $site->getServerName()]);
         $message = static::buildMessage($application->getSecurityContext()->getToken()->getUser(), $user, $body, $application->getSite());
         if (null !== $application->getMailer()) {
             $application->getMailer()->send($message);
         } else {
             throw new \RuntimeException('Mailer not available');
         }
     }
 }
 /**
  * Occur on nestednode.page.onflush events.
  *
  * @param \BackBee\Event\Event $event
  */
 public static function onFlushPage(Event $event)
 {
     $page = $event->getTarget();
     if (!$page instanceof Page) {
         return;
     }
     $maincontent = $event->getEventArgs();
     if (!$maincontent instanceof AbstractClassContent) {
         $maincontent = null;
     }
     $dispatcher = $event->getDispatcher();
     $application = $dispatcher->getApplication();
     if (self::updateUrl($application, $page, $maincontent)) {
         $descendants = $application->getEntityManager()->getRepository('BackBee\\NestedNode\\Page')->getDescendants($page, 1);
         foreach ($descendants as $descendant) {
             self::updateUrl($application, $descendant);
         }
     }
 }
Пример #10
0
 public static function onRender(Event $event)
 {
     $dispatcher = $event->getDispatcher();
     $renderer = $event->getEventArgs();
     $renderer->assign('keyword', null);
     if (null !== $dispatcher) {
         $application = $dispatcher->getApplication();
         if (null === $application) {
             return;
         }
         $keywordloaded = $event->getTarget();
         if (!is_a($renderer, 'BackBee\\Renderer\\AbstractRenderer')) {
             return;
         }
         $keyWord = $application->getEntityManager()->find('BackBee\\NestedNode\\KeyWord', $keywordloaded->value);
         if (!is_null($keyWord)) {
             $renderer->assign('keyword', $keyWord);
         }
     }
 }
Пример #11
0
 /**
  * Occur on nestednode.page.onflush events.
  *
  * @param Event $event
  */
 public static function onFlushPage(Event $event)
 {
     if (self::$onFlushPageAlreadyCalled) {
         return;
     }
     $page = $event->getTarget();
     if (!$page instanceof Page) {
         return;
     }
     $application = $event->getApplication();
     $em = $application->getEntityManager();
     $uow = $em->getUnitOfWork();
     if ($uow->isScheduledForDelete($page)) {
         return;
     }
     $metadata = $application->getContainer()->get('nestednode.metadata.resolver')->resolve($page);
     $page->setMetaData($metadata);
     if ($uow->isScheduledForInsert($page) || $uow->isScheduledForUpdate($page)) {
         $uow->recomputeSingleEntityChangeSet($em->getClassMetadata('BackBee\\NestedNode\\Page'), $page);
     } elseif (!$uow->isScheduledForDelete($page)) {
         $uow->computeChangeSet($em->getClassMetadata('BackBee\\NestedNode\\Page'), $page);
     }
     self::$onFlushPageAlreadyCalled = true;
 }
Пример #12
0
 /**
  * Occur on nestednode.page.preupdate events.
  *
  * @access public
  *
  * @param Event $event
  */
 public static function onPreUpdate(Event $event)
 {
     $page = $event->getTarget();
     $eventArgs = $event->getEventArgs();
     if ($eventArgs instanceof PreUpdateEventArgs) {
         if ($eventArgs->hasChangedField('_workflow_state')) {
             $old = $eventArgs->getOldValue('_workflow_state');
             $new = $eventArgs->getNewValue('_workflow_state');
             if (null !== $new && null !== ($listener = $new->getListenerInstance())) {
                 $listener->switchOnState($event);
             }
             if (null !== $old && null !== ($listener = $old->getListenerInstance())) {
                 $listener->switchOffState($event);
             }
         }
         if ($eventArgs->hasChangedField('_state')) {
             if (!($eventArgs->getOldValue('_state') & Page::STATE_ONLINE) && $eventArgs->getNewValue('_state') & Page::STATE_ONLINE) {
                 $event->getDispatcher()->triggerEvent('putonline', $page);
             } elseif ($eventArgs->getOldValue('_state') & Page::STATE_ONLINE && !($eventArgs->getNewValue('_state') & Page::STATE_ONLINE)) {
                 $event->getDispatcher()->triggerEvent('putoffline', $page);
             }
         }
     }
 }
Пример #13
0
 /**
  * @param Event $event
  */
 public function onGetServiceConfig(Event $event)
 {
     if (true === $this->application->isStarted()) {
         $config = $event->getTarget();
         if (null !== ($override_site = $config->getRawSection('override_site'))) {
             if (array_key_exists($this->application->getSite()->getUid(), $override_site)) {
                 foreach ($override_site[$this->application->getSite()->getUid()] as $section => $data) {
                     $config->setSection($section, $data, true);
                 }
             }
         }
         $this->application->getContainer()->getDefinition($event->getArgument('id'))->clearTag('config_per_site');
     }
 }
Пример #14
0
 public static function onPostLoad(Event $event)
 {
     $revision = $event->getTarget();
     $dispatcher = $event->getDispatcher();
     $application = $dispatcher->getApplication();
     if (null !== $application) {
         $em = $application->getEntityManager();
         $revision->setEntityManager($em)->setToken($application->getBBUserToken());
         if (null === $revision->getContent()) {
             $db = $em->getConnection();
             $stmt = $db->executeQuery('SELECT `content_uid`, `classname` FROM `revision` WHERE `uid` = ?', [$revision->getUid()]);
             $items = $stmt->fetchAll();
             if ($items) {
                 foreach ($items as $item) {
                     $content = $em->find($item["classname"], $item["content_uid"]);
                     if ($content) {
                         $revision->setContent($content);
                     }
                 }
             }
         }
     }
     $revision->postLoad();
 }
Пример #15
0
 /**
  * Occurs on classcontent.update event.
  *
  * @param Event $event
  *
  * @throws BBException Occurs on illegal targeted object or missing BackBee Application
  */
 public static function onUpdate(Event $event)
 {
     $content = $event->getTarget();
     if (!$content instanceof AbstractClassContent) {
         throw new BBException('Enable to update object', BBException::INVALID_ARGUMENT, new \InvalidArgumentException(sprintf('Only BackBee\\ClassContent\\AbstractClassContent can be commit, `%s` received', get_class($content))));
     }
     $dispatcher = $event->getDispatcher();
     if (null === ($application = $dispatcher->getApplication())) {
         throw new BBException('Enable to update object', BBException::MISSING_APPLICATION, new \RuntimeException('BackBee application has to be initialized'));
     }
     if (null === ($token = $application->getBBUserToken())) {
         throw new SecurityException('Enable to update : unauthorized user', SecurityException::UNAUTHORIZED_USER);
     }
     $em = $dispatcher->getApplication()->getEntityManager();
     if (null === ($revision = $content->getDraft())) {
         if (null === ($revision = $em->getRepository('BackBee\\ClassContent\\Revision')->getDraft($content, $token))) {
             throw new ClassContentException('Enable to get draft', ClassContentException::REVISION_MISSING);
         }
         $content->setDraft($revision);
     }
     $content->releaseDraft();
     if (0 == $revision->getRevision() || $revision->getRevision() == $content->getRevision) {
         throw new ClassContentException('Content is up to date', ClassContentException::REVISION_UPTODATE);
     }
     $lastCommitted = $em->getRepository('BackBee\\ClassContent\\Revision')->findBy(['_content' => $content, '_revision' => $content->getRevision(), '_state' => Revision::STATE_COMMITTED]);
     if (null === $lastCommitted) {
         throw new ClassContentException('Enable to get last committed revision', ClassContentException::REVISION_MISSING);
     }
     $content->updateDraft($lastCommitted);
 }
Пример #16
0
 /**
  * Occur on nestednode.page.preupdate events and nestednode.section.preupdate.
  *
  * @access public
  *
  * @param Event $event
  */
 public static function onFlushPage(Event $event)
 {
     $em = $event->getApplication()->getEntityManager();
     $uow = $em->getUnitOfWork();
     $page = $event->getTarget();
     if ($uow->isScheduledForInsert($page) && $page->getParent() !== null && $page->getState() < 4) {
         self::setSectionHasChildren($em, $page->getParent()->getSection(), +1);
     }
 }
Пример #17
0
 /**
  * occurs on `service.tagged.test`.
  *
  * @param Event $event
  */
 public function onGetServiceTaggedTestEvent(Event $event)
 {
     $this->foo = 'foo';
     $datetime = $event->getTarget();
     $datetime->setTimestamp(ContainerTest::NEW_DATE_WITH_TAG_VALUE);
 }
 /**
  * Occurs on event ``bbapplication.init`` to set AbstractContent::$ignoreUnknownClassname according to bbapp parameters.
  *
  * @param Event $event
  */
 public static function onApplicationInit(Event $event)
 {
     $application = $event->getTarget();
     $container = $application->getContainer();
     if ($container->hasParameter('bbapp.classcontent.exception_on_unknown_classname')) {
         $parameter = $container->getParameter('bbapp.classcontent.exception_on_unknown_classname');
     } else {
         $parameter = true;
     }
     if ('debug' === strtolower($parameter)) {
         AbstractClassContent::throwExceptionOnUnknownClassname($application->isDebugMode());
     } else {
         AbstractClassContent::throwExceptionOnUnknownClassname($parameter);
     }
 }
Пример #19
0
 /**
  * Clears cached data associated to the page to be flushed.
  *
  * @param \BackBee\Event\Event $event
  */
 public function onFlushPage(Event $event)
 {
     // Checks if page caching is available
     $this->object = $event->getTarget();
     if (false === $this->object instanceof Page || false === $this->checkCachePageEvent(false)) {
         return;
     }
     if (true === $this->page_cache_deletion_done) {
         return;
     }
     $pages = ScheduledEntities::getScheduledEntityUpdatesByClassname($this->application->getEntityManager(), 'BackBee\\NestedNode\\Page');
     if (0 === count($pages)) {
         return;
     }
     $page_uids = array();
     foreach ($pages as $page) {
         $page_uids[] = $page->getUid();
     }
     $this->cache_page->removeByTag($page_uids);
     $this->page_cache_deletion_done = true;
     $this->application->debug(sprintf('Remove cache for `%s(%s)`.', get_class($this->object), implode(', ', $page_uids)));
 }