server_name <?php echo $site['domain']; ?> ; root <?php echo __DIR__ . '/'; ?> ; error_log /var/log/nginx/<?php echo \BackBee\Utils\StringUtils::urlize($site['label']); ?> .error.log; access_log /var/log/nginx/<?php echo \BackBee\Utils\StringUtils::urlize($site['label']); ?> .access.log; location ~ /resources/(.*) { alias <?php echo dirname(__DIR__) . '/'; ?> ; try_files /repository/Resources/$1 /vendor/backbee/backbee/Resources/$1 @rewriteapp; } location @emptygif404 { empty_gif; } location / { try_files $uri @rewriteapp;
/** * Computes the URL of a page according to a scheme. * * @param array $scheme The scheme to apply * @param Page $page The page * @param AbstractClassContent $content The optionnal main content of the page * @return string The generated URL */ private function doGenerate($scheme, Page $page, AbstractClassContent $content = null) { $replacement = ['$parent' => $page->isRoot() ? '' : $page->getParent()->getUrl(false), '$title' => StringUtils::urlize($page->getTitle()), '$datetime' => $page->getCreated()->format('ymdHis'), '$date' => $page->getCreated()->format('ymd'), '$time' => $page->getCreated()->format('His')]; $matches = []; if (preg_match_all('/(\\$content->[a-z]+)/i', $scheme, $matches)) { foreach ($matches[1] as $pattern) { $property = explode('->', $pattern); $property = array_pop($property); try { $replacement[$pattern] = StringUtils::urlize($content->{$property}); } catch (\Exception $e) { $replacement[$pattern] = ''; } } } $matches = []; if (preg_match_all('/(\\$ancestor\\[([0-9]+)\\])/i', $scheme, $matches)) { foreach ($matches[2] as $level) { $ancestor = $this->application->getEntityManager()->getRepository('BackBee\\CoreDomain\\NestedNode\\Page')->getAncestor($page, $level); if (null !== $ancestor && $page->getLevel() > $level) { $replacement['$ancestor[' . $level . ']'] = $ancestor->getUrl(false); } else { $replacement['$ancestor[' . $level . ']'] = ''; } } } $url = preg_replace('/\\/+/', '/', str_replace(array_keys($replacement), array_values($replacement), $scheme)); return $this->getUniqueness($page, $url); }
/** * Create new site entry inside sites.yml file * * @return CreateWebsiteCommand */ protected function runSitesYmlProcess() { $sitesConf = $this->bbapp->getConfig()->getSitesConfig(); if ($this->siteDomain === null) { throw new \InvalidArgumentException('This site domain is not valid (empty value)'); } if (is_array($sitesConf) && array_key_exists($this->siteLabel, $sitesConf)) { throw new \InvalidArgumentException('This label `' . $this->siteLabel . '` already present in sites.yml'); } $newSite = [\BackBee\Utils\StringUtils::urlize($this->siteLabel) => ['label' => $this->siteLabel, 'domain' => $this->siteDomain]]; $newSitesConf = is_array($sitesConf) ? array_merge($sitesConf, $newSite) : $newSite; file_put_contents($this->bbapp->getBaseDir() . DIRECTORY_SEPARATOR . 'repository/Config/sites.yml', Yaml::dump($newSitesConf)); return $this; }
/** * Create a media folder * and if a parent is provided added has its last child * * @param MediaFolder $mediaFolder * * @Rest\RequestParam(name="title", description="media title", requirements={ * @Assert\NotBlank() * }) * @ParamConverter( * name="parent", id_name="parent_uid", id_source="request", class="BackBee\NestedNode\MediaFolder", required=false * ) * @Rest\Security("is_fully_authenticated() & has_role('ROLE_API_USER') & is_granted('CREATE', '\BackBee\NestedNode\MediaFolder')") */ public function postAction(Request $request, $parent = null) { try { $title = trim($request->request->get('title')); $uid = $request->request->get('uid', null); if (null !== $uid) { $mediaFolder = $this->getMediaFolderRepository()->find($uid); $mediaFolder->setTitle($title); } else { $mediaFolder = new MediaFolder(); $mediaFolder->setUrl($request->request->get('url', StringUtils::urlize($title))); $mediaFolder->setTitle($title); if (null === $parent) { $parent = $this->getMediaFolderRepository()->getRoot(); } if ($this->mediaFolderAlreadyExists($title, $parent)) { throw new BadRequestHttpException(sprintf('A MediaFolder named `%s` already exists in `%s`.', $title, $parent->getTitle())); } $mediaFolder->setParent($parent); $this->getMediaFolderRepository()->insertNodeAsLastChildOf($mediaFolder, $parent); } $this->getEntityManager()->persist($mediaFolder); $this->getEntityManager()->flush(); $response = $this->createJsonResponse(null, 201, ['BB-RESOURCE-UID' => $mediaFolder->getUid(), 'Location' => $this->getApplication()->getRouting()->getUrlByRouteName('bb.rest.media-folder.get', ['version' => $request->attributes->get('version'), 'uid' => $mediaFolder->getUid()], '', false)]); } catch (\Exception $e) { $response = $this->createResponse(sprintf('Internal server error: %s', $e->getMessage())); } return $response; }
public function testUrlize() { $this->assertEquals('test-s-url', StringUtils::urlize('test’s url')); $this->assertEquals('test-s-url', StringUtils::urlize('test\'s url')); $this->assertEquals('test-euro-url', StringUtils::urlize('test € url')); $this->assertEquals('percent-euro', StringUtils::urlize('® % € “ ” …')); $this->assertEquals('ou-skier-cet-hiver', StringUtils::urlize('Où skier cet hiver')); $this->assertEquals('', StringUtils::urlize('“ ” …')); $this->assertEquals('tests_url.com', StringUtils::urlize('test`s url', array('extension' => '.com', 'spacereplace' => '_'))); $this->assertEquals('tests_u.com', StringUtils::urlize('test`s url', array('extension' => '.com', 'spacereplace' => '_', 'lengthlimit' => 7))); $this->assertEquals('tests#the#url#this#one.com', StringUtils::urlize('test`s the.url:this\'one', array('extension' => '.com', 'separators' => '/[.\'’:]+/', 'spacereplace' => '#'))); }