/** * 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; }
/** * 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(); } }
/** * 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)); } }
/** * 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(); } } }
/** * @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); }
/** * 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)); } }
/** * 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); } } }
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); } } }
/** * 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; }
/** * 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); } } } }
/** * @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'); } }
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(); }
/** * 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); }
/** * 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); } }
/** * 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); } }
/** * 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))); }