PageRenderTime 69ms CodeModel.GetById 30ms RepoModel.GetById 1ms app.codeStats 0ms

/src/Sonata/Bundle/DemoBundle/DataFixtures/ORM/LoadPageData.php

https://github.com/Bartelbabay/sonata-sandbox
PHP | 1191 lines | 1122 code | 43 blank | 26 comment | 3 complexity | 848dbc3e0eb11c222164e7ea1b370d79 MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1. <?php
  2. /*
  3. * This file is part of the Sonata package.
  4. *
  5. * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Sonata\Bundle\DemoBundle\DataFixtures\ORM;
  11. use Doctrine\Common\DataFixtures\FixtureInterface;
  12. use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
  13. use Doctrine\Common\DataFixtures\AbstractFixture;
  14. use Doctrine\Common\Persistence\ObjectManager;
  15. use Sonata\PageBundle\Model\SiteInterface;
  16. use Sonata\PageBundle\Model\PageInterface;
  17. use Symfony\Cmf\Bundle\RoutingBundle\Tests\Unit\Doctrine\Orm\ContentRepositoryTest;
  18. use Symfony\Component\DependencyInjection\ContainerAwareInterface;
  19. use Symfony\Component\DependencyInjection\ContainerInterface;
  20. class LoadPageData extends AbstractFixture implements ContainerAwareInterface, OrderedFixtureInterface
  21. {
  22. private $container;
  23. public function getOrder()
  24. {
  25. return 4;
  26. }
  27. public function setContainer(ContainerInterface $container = null)
  28. {
  29. $this->container = $container;
  30. }
  31. public function load(ObjectManager $manager)
  32. {
  33. $site = $this->createSite();
  34. $this->createGlobalPage($site);
  35. $this->createHomePage($site);
  36. $this->create404ErrorPage($site);
  37. $this->create500ErrorPage($site);
  38. $this->createBlogIndex($site);
  39. $this->createGalleryIndex($site);
  40. $this->createMediaPage($site);
  41. $this->createProductPage($site);
  42. $this->createBasketPage($site);
  43. $this->createUserPage($site);
  44. $this->createApiPage($site);
  45. $this->createLegalNotesPage($site);
  46. // Create footer pages
  47. $this->createWhoWeArePage($site);
  48. $this->createClientTestimonialsPage($site);
  49. $this->createPressPage($site);
  50. $this->createFAQPage($site);
  51. $this->createContactUsPage($site);
  52. $this->createBundlesPage($site);
  53. $this->createSubSite();
  54. }
  55. /**
  56. * @return SiteInterface $site
  57. */
  58. public function createSite()
  59. {
  60. $site = $this->getSiteManager()->create();
  61. $site->setHost('localhost');
  62. $site->setEnabled(true);
  63. $site->setName('localhost');
  64. $site->setEnabledFrom(new \DateTime('now'));
  65. $site->setEnabledTo(new \DateTime('+10 years'));
  66. $site->setRelativePath("");
  67. $site->setIsDefault(true);
  68. $this->getSiteManager()->save($site);
  69. return $site;
  70. }
  71. public function createSubSite()
  72. {
  73. $site = $this->getSiteManager()->create();
  74. $site->setHost('localhost');
  75. $site->setEnabled(true);
  76. $site->setName('sub site');
  77. $site->setEnabledFrom(new \DateTime('now'));
  78. $site->setEnabledTo(new \DateTime('+10 years'));
  79. $site->setRelativePath("/sub-site");
  80. $site->setIsDefault(false);
  81. $this->getSiteManager()->save($site);
  82. return $site;
  83. }
  84. /**
  85. * @param SiteInterface $site
  86. */
  87. public function createBlogIndex(SiteInterface $site)
  88. {
  89. $pageManager = $this->getPageManager();
  90. $blogIndex = $pageManager->create();
  91. $blogIndex->setSlug('blog');
  92. $blogIndex->setUrl('/blog');
  93. $blogIndex->setName('News');
  94. $blogIndex->setTitle('News');
  95. $blogIndex->setEnabled(true);
  96. $blogIndex->setDecorate(1);
  97. $blogIndex->setRequestMethod('GET|POST|HEAD|DELETE|PUT');
  98. $blogIndex->setTemplateCode('default');
  99. $blogIndex->setRouteName('sonata_news_home');
  100. $blogIndex->setParent($this->getReference('page-homepage'));
  101. $blogIndex->setSite($site);
  102. $pageManager->save($blogIndex);
  103. }
  104. /**
  105. * @param SiteInterface $site
  106. */
  107. public function createGalleryIndex(SiteInterface $site)
  108. {
  109. $pageManager = $this->getPageManager();
  110. $blockManager = $this->getBlockManager();
  111. $blockInteractor = $this->getBlockInteractor();
  112. $galleryIndex = $pageManager->create();
  113. $galleryIndex->setSlug('gallery');
  114. $galleryIndex->setUrl('/media/gallery');
  115. $galleryIndex->setName('Gallery');
  116. $galleryIndex->setTitle('Gallery');
  117. $galleryIndex->setEnabled(true);
  118. $galleryIndex->setDecorate(1);
  119. $galleryIndex->setRequestMethod('GET|POST|HEAD|DELETE|PUT');
  120. $galleryIndex->setTemplateCode('default');
  121. $galleryIndex->setRouteName('sonata_media_gallery_index');
  122. $galleryIndex->setParent($this->getReference('page-homepage'));
  123. $galleryIndex->setSite($site);
  124. // CREATE A HEADER BLOCK
  125. $galleryIndex->addBlocks($content = $blockInteractor->createNewContainer(array(
  126. 'enabled' => true,
  127. 'page' => $galleryIndex,
  128. 'code' => 'content_top',
  129. )));
  130. $content->setName('The content_top container');
  131. // add the breadcrumb
  132. $content->addChildren($breadcrumb = $blockManager->create());
  133. $breadcrumb->setType('sonata.page.block.breadcrumb');
  134. $breadcrumb->setPosition(0);
  135. $breadcrumb->setEnabled(true);
  136. $breadcrumb->setPage($galleryIndex);
  137. // add a block text
  138. $content->addChildren($text = $blockManager->create());
  139. $text->setType('sonata.block.service.text');
  140. $text->setSetting('content', <<<CONTENT
  141. <h1>Gallery List</h1>
  142. <p>
  143. This current text is defined in a <code>text block</code> linked to a custom symfony action <code>GalleryController::indexAction</code>
  144. the SonataPageBundle can encapsulate an action into a dedicated template. <br /><br />
  145. If you are connected as an admin you can click on <code>Show Zone</code> to see the different editable areas. Once
  146. areas are displayed, just double click on one to edit it.
  147. </p>
  148. CONTENT
  149. );
  150. $text->setPosition(1);
  151. $text->setEnabled(true);
  152. $text->setPage($galleryIndex);
  153. $pageManager->save($galleryIndex);
  154. }
  155. /**
  156. * @param SiteInterface $site
  157. */
  158. public function createHomePage(SiteInterface $site)
  159. {
  160. $pageManager = $this->getPageManager();
  161. $blockManager = $this->getBlockManager();
  162. $blockInteractor = $this->getBlockInteractor();
  163. $this->addReference('page-homepage', $homepage = $pageManager->create());
  164. $homepage->setSlug('/');
  165. $homepage->setUrl('/');
  166. $homepage->setName('Home');
  167. $homepage->setTitle('Homepage');
  168. $homepage->setEnabled(true);
  169. $homepage->setDecorate(0);
  170. $homepage->setRequestMethod('GET|POST|HEAD|DELETE|PUT');
  171. $homepage->setTemplateCode('2columns');
  172. $homepage->setRouteName(PageInterface::PAGE_ROUTE_CMS_NAME);
  173. $homepage->setSite($site);
  174. $pageManager->save($homepage);
  175. // CREATE A HEADER BLOCK
  176. $homepage->addBlocks($contentTop = $blockInteractor->createNewContainer(array(
  177. 'enabled' => true,
  178. 'page' => $homepage,
  179. 'code' => 'content_top',
  180. )));
  181. $contentTop->setName('The container top container');
  182. $blockManager->save($contentTop);
  183. // add a block text
  184. $contentTop->addChildren($text = $blockManager->create());
  185. $text->setType('sonata.block.service.text');
  186. $text->setSetting('content', <<<CONTENT
  187. <div class="col-md-3 welcome"><h2>Welcome</h2></div>
  188. <div class="col-md-9">
  189. <p>
  190. This page is a demo of the Sonata Sandbox available on <a href="https://github.com/sonata-project/sandbox">github</a>.
  191. This demo try to be interactive so you will be able to found out the different features provided by the Sonata's Bundle.
  192. </p>
  193. <p>
  194. First this page and all the other pages are served by the <code>SonataPageBundle</code>, a page is composed by different
  195. blocks.
  196. </p>
  197. </div>
  198. CONTENT
  199. );
  200. $text->setPosition(1);
  201. $text->setEnabled(true);
  202. $text->setPage($homepage);
  203. $homepage->addBlocks($content = $blockInteractor->createNewContainer(array(
  204. 'enabled' => true,
  205. 'page' => $homepage,
  206. 'code' => 'content',
  207. )));
  208. $content->setName('The content container');
  209. $blockManager->save($content);
  210. // Add media gallery block
  211. $content->addChildren($gallery = $blockManager->create());
  212. $gallery->setType('sonata.media.block.gallery');
  213. $gallery->setSetting('galleryId', $this->getReference('media-gallery')->getId());
  214. $gallery->setSetting('context', 'default');
  215. $gallery->setSetting('format', 'big');
  216. $gallery->setPosition(1);
  217. $gallery->setEnabled(true);
  218. $gallery->setPage($homepage);
  219. // Add recent products block
  220. $content->addChildren($newProductsBlock = $blockManager->create());
  221. $newProductsBlock->setType('sonata.product.block.recent_products');
  222. $newProductsBlock->setSetting('number', 4);
  223. $newProductsBlock->setSetting('title', 'New products');
  224. $newProductsBlock->setPosition(2);
  225. $newProductsBlock->setEnabled(true);
  226. $newProductsBlock->setPage($homepage);
  227. // Add homepage bottom container
  228. $homepage->addBlocks($bottom = $blockInteractor->createNewContainer(array(
  229. 'enabled' => true,
  230. 'page' => $homepage,
  231. 'code' => 'content_bottom',
  232. ), function ($container) {
  233. $container->setSetting('layout', '<div class="block-newsletter">{{ CONTENT }}</div>');
  234. }));
  235. $bottom->setName('The bottom content container');
  236. // Add homepage newsletter container
  237. $bottom->addChildren($bottomNewsletter = $blockInteractor->createNewContainer(array(
  238. 'enabled' => true,
  239. 'page' => $homepage,
  240. 'code' => 'bottom_newsletter',
  241. ), function ($container) {
  242. $container->setSetting('layout', '<div class="col-sm-8 col-sm-offset-2 well">{{ CONTENT }}</div>');
  243. }));
  244. $bottomNewsletter->setName('The bottom newsetter container');
  245. $bottomNewsletter->addChildren($newsletter = $blockManager->create());
  246. $newsletter->setType('sonata.demo.block.newsletter');
  247. $newsletter->setPosition(1);
  248. $newsletter->setEnabled(true);
  249. $newsletter->setPage($homepage);
  250. $pageManager->save($homepage);
  251. }
  252. /**
  253. * @param SiteInterface $site
  254. */
  255. public function createProductPage(SiteInterface $site)
  256. {
  257. $pageManager = $this->getPageManager();
  258. $category = $pageManager->create();
  259. $category->setSlug('shop-category');
  260. $category->setUrl('/shop/category');
  261. $category->setName('Shop');
  262. $category->setTitle('Shop');
  263. $category->setEnabled(true);
  264. $category->setDecorate(1);
  265. $category->setRequestMethod('GET|POST|HEAD|DELETE|PUT');
  266. $category->setTemplateCode('default');
  267. $category->setRouteName('sonata_catalog_index');
  268. $category->setSite($site);
  269. $category->setParent($this->getReference('page-homepage'));
  270. $pageManager->save($category);
  271. }
  272. /**
  273. * @param SiteInterface $site
  274. */
  275. public function createBasketPage(SiteInterface $site)
  276. {
  277. $pageManager = $this->getPageManager();
  278. $basket = $pageManager->create();
  279. $basket->setSlug('shop-basket');
  280. $basket->setUrl('/shop/basket');
  281. $basket->setName('Basket');
  282. $basket->setEnabled(true);
  283. $basket->setDecorate(1);
  284. $basket->setRequestMethod('GET|POST|HEAD|DELETE|PUT');
  285. $basket->setTemplateCode('default');
  286. $basket->setRouteName('sonata_basket_index');
  287. $basket->setSite($site);
  288. $basket->setParent($this->getReference('page-homepage'));
  289. $pageManager->save($basket);
  290. }
  291. /**
  292. * @param SiteInterface $site
  293. */
  294. public function createMediaPage(SiteInterface $site)
  295. {
  296. $pageManager = $this->getPageManager();
  297. $blockManager = $this->getBlockManager();
  298. $blockInteractor = $this->getBlockInteractor();
  299. $this->addReference('page-media', $media = $pageManager->create());
  300. $media->setSlug('/media');
  301. $media->setUrl('/media');
  302. $media->setName('Media & Seo');
  303. $media->setTitle('Media & Seo');
  304. $media->setEnabled(true);
  305. $media->setDecorate(1);
  306. $media->setRequestMethod('GET|POST|HEAD|DELETE|PUT');
  307. $media->setTemplateCode('default');
  308. $media->setRouteName('sonata_demo_media');
  309. $media->setSite($site);
  310. $media->setParent($this->getReference('page-homepage'));
  311. // CREATE A HEADER BLOCK
  312. $media->addBlocks($content = $blockInteractor->createNewContainer(array(
  313. 'enabled' => true,
  314. 'page' => $media,
  315. 'code' => 'content_top',
  316. )));
  317. $content->setName('The content_top container');
  318. // add the breadcrumb
  319. $content->addChildren($breadcrumb = $blockManager->create());
  320. $breadcrumb->setType('sonata.page.block.breadcrumb');
  321. $breadcrumb->setPosition(0);
  322. $breadcrumb->setEnabled(true);
  323. $breadcrumb->setPage($media);
  324. $pageManager->save($media);
  325. }
  326. /**
  327. * @param SiteInterface $site
  328. */
  329. public function createUserPage(SiteInterface $site)
  330. {
  331. $this->createTextContentPage($site, 'user', 'Admin', <<<CONTENT
  332. <div>
  333. <h3>Available accounts</h3>
  334. You can connect to the <a href="/admin/dashboard">admin section</a> by using two different accounts:<br>
  335. <ul>
  336. <li><em>Standard</em> user:
  337. <ul>
  338. <li> Login - <strong>johndoe</strong></li>
  339. <li> Password - <strong>johndoe</strong></li>
  340. </ul>
  341. </li>
  342. <li><em>Admin</em> user:
  343. <ul>
  344. <li> Login - <strong>admin</strong></li>
  345. <li> Password - <strong>admin</strong></li>
  346. </ul>
  347. </li>
  348. <li><em>Two-step Verification admin</em> user:
  349. <ul>
  350. <li> Login - <strong>secure</strong></li>
  351. <li> Password - <strong>secure</strong></li>
  352. <li> Key - <strong>4YU4QGYPB63HDN2C</strong></li>
  353. </ul>
  354. </li>
  355. </ul>
  356. <h3>Two-Step Verification</h3>
  357. The <strong>secure</strong> account is a demo of the Two-Step Verification provided by
  358. the <a href="http://sonata-project.org/bundles/user/2-0/doc/reference/two_step_validation.html">Sonata User Bundle</a>
  359. <br />
  360. <br />
  361. <center>
  362. <img src="/bundles/sonatademo/images/secure_qr_code.png" class="img-polaroid" />
  363. <br />
  364. <em>Take a shot of this QR Code with <a href="https://support.google.com/accounts/bin/answer.py?hl=en&answer=1066447">Google Authenticator</a></em>
  365. </center>
  366. </div>
  367. CONTENT
  368. );
  369. }
  370. /**
  371. * @param SiteInterface $site
  372. */
  373. public function createApiPage(SiteInterface $site)
  374. {
  375. $this->createTextContentPage($site, 'api-landing', 'API', <<<CONTENT
  376. <div>
  377. <h3>Available account</h3>
  378. You can connect to the <a href="/api/doc">api documentation</a> by using the following account:<br>
  379. <ul>
  380. <li> Login - <strong>admin</strong></li>
  381. <li> Password - <strong>admin</strong></li>
  382. </ul>
  383. <br />
  384. <br />
  385. <center>
  386. <img src="/bundles/sonatademo/images/api.png" class="img-rounded" />
  387. </center>
  388. </div>
  389. CONTENT
  390. );
  391. }
  392. /**
  393. * @param SiteInterface $site
  394. */
  395. public function createLegalNotesPage(SiteInterface $site)
  396. {
  397. $this->createTextContentPage($site, 'legal-notes', 'Legal notes', <<<CONTENT
  398. <p>The Sonata framework is built with many great open source libraries / tools.</p>
  399. <section>
  400. <h3>Backend</h3>
  401. <ul>
  402. <li><a href="http://symfony.com" title="Symfony, PHP framework official website">Symfony 2</a>, the PHP framework for web projects (Code licensed under MIT),</li>
  403. <li><a href="http://twig.sensiolabs.org" title="Twig, PHP template engine">Twig</a>, the PHP template engine (Code licensed under the new BSD license),</li>
  404. <li><a href="http://www.doctrine-project.org" title="Doctrine, PHP ORM">Doctrine</a>, the PHP ORM.</li>
  405. </ul>
  406. </section>
  407. <section>
  408. <h3>Frontend</h3>
  409. <ul>
  410. <li><a href="http://jquery.com" title="jQuery javascript library">jQuery</a>, a cross-platform JavaScript library (Code licensed under MIT),</li>
  411. <li><a href="http://getbootstrap.com" title="Bootstrap front-end framework">Bootstrap</a>, the front-end framework (Code licensed under MIT),</li>
  412. <li><a href="http://glyphicons.com" title="GLYPHICONS icons">GLYPHICONS</a>, library included in the Bootstrap framework (same license as Bootstrap).</li>
  413. </ul>
  414. </section>
  415. <section>
  416. <h3>Other miscellaneous tools</h3>
  417. <ul>
  418. <li><a href="https://www.github.com" title="Github, code distribution tool">Github</a></li>
  419. <li><a href="http://getcomposer.org" title="Composer, dependency management tool">Composer</a></li>
  420. <li><a href="https://packagist.org" title="Packagist, PHP packages repository">Packagist</a></li>
  421. <li><a href="https://travis-ci.org" title="Travis CI, continuous integration tool">Travis CI</a></li>
  422. <li><a href="http://phpunit.de" title="PHPUnit, PHP unit testing library">PHPUnit</a></li>
  423. <li><a href="http://behat.org" title="Behat, test driven development tool">Behat</a></li>
  424. </ul>
  425. </section>
  426. CONTENT
  427. );
  428. }
  429. /**
  430. * Creates the "Who we are" content page (link available in footer)
  431. *
  432. * @param SiteInterface $site
  433. *
  434. * @return void
  435. */
  436. public function createWhoWeArePage(SiteInterface $site)
  437. {
  438. $this->createTextContentPage($site, 'who-we-are', 'Who we are', <<<CONTENT
  439. <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut quis sapien gravida, eleifend diam id, vehicula erat. Aenean ultrices facilisis tellus. Vivamus vitae molestie diam. Donec quis mi porttitor, lobortis ipsum quis, fermentum dui. Donec nec nibh nec risus porttitor pretium et et lorem. Nullam mauris sapien, rutrum sed neque et, convallis ullamcorper lacus. Nullam vehicula a lectus vel suscipit. Nam gravida faucibus fermentum.</p>
  440. <p>Pellentesque dapibus eu nisi quis adipiscing. Phasellus adipiscing turpis nunc, sed interdum ante porta eu. Ut tempus, purus posuere molestie cursus, quam nisi fermentum est, dictum gravida nulla turpis vel nunc. Maecenas eget sem quam. Nam condimentum mi id lectus venenatis, sit amet semper purus convallis. Nunc ullamcorper magna mi, non adipiscing velit semper quis. Duis vel justo libero. Suspendisse laoreet hendrerit augue cursus congue. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;</p>
  441. <p>Nullam dignissim sapien vestibulum erat lobortis, sed imperdiet elit varius. Fusce nisi eros, feugiat commodo scelerisque a, lacinia et quam. In neque risus, dignissim non magna non, ultricies faucibus elit. Vivamus in facilisis enim, porttitor volutpat justo. Praesent placerat feugiat nibh et fermentum. Vivamus eu fermentum metus. Sed mattis volutpat quam a suscipit. Donec blandit sagittis est, ac tristique arcu venenatis sed. Fusce vel libero id lectus aliquet sollicitudin. Fusce ultrices porta est, non pellentesque lorem accumsan eget. Fusce id libero sit amet nulla venenatis dapibus. Maecenas fermentum tellus eu magna mollis gravida. Nam non nibh magna.</p>
  442. CONTENT
  443. );
  444. }
  445. /**
  446. * Creates the "Client testimonials" content page (link available in footer)
  447. *
  448. * @param SiteInterface $site
  449. *
  450. * @return void
  451. */
  452. public function createClientTestimonialsPage(SiteInterface $site)
  453. {
  454. $this->createTextContentPage($site, 'client-testimonials', 'Client testimonials', <<<CONTENT
  455. <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut quis sapien gravida, eleifend diam id, vehicula erat. Aenean ultrices facilisis tellus. Vivamus vitae molestie diam. Donec quis mi porttitor, lobortis ipsum quis, fermentum dui. Donec nec nibh nec risus porttitor pretium et et lorem. Nullam mauris sapien, rutrum sed neque et, convallis ullamcorper lacus. Nullam vehicula a lectus vel suscipit. Nam gravida faucibus fermentum.</p>
  456. <p>Pellentesque dapibus eu nisi quis adipiscing. Phasellus adipiscing turpis nunc, sed interdum ante porta eu. Ut tempus, purus posuere molestie cursus, quam nisi fermentum est, dictum gravida nulla turpis vel nunc. Maecenas eget sem quam. Nam condimentum mi id lectus venenatis, sit amet semper purus convallis. Nunc ullamcorper magna mi, non adipiscing velit semper quis. Duis vel justo libero. Suspendisse laoreet hendrerit augue cursus congue. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;</p>
  457. <p>Nullam dignissim sapien vestibulum erat lobortis, sed imperdiet elit varius. Fusce nisi eros, feugiat commodo scelerisque a, lacinia et quam. In neque risus, dignissim non magna non, ultricies faucibus elit. Vivamus in facilisis enim, porttitor volutpat justo. Praesent placerat feugiat nibh et fermentum. Vivamus eu fermentum metus. Sed mattis volutpat quam a suscipit. Donec blandit sagittis est, ac tristique arcu venenatis sed. Fusce vel libero id lectus aliquet sollicitudin. Fusce ultrices porta est, non pellentesque lorem accumsan eget. Fusce id libero sit amet nulla venenatis dapibus. Maecenas fermentum tellus eu magna mollis gravida. Nam non nibh magna.</p>
  458. CONTENT
  459. );
  460. }
  461. /**
  462. * Creates the "Press" content page (link available in footer)
  463. *
  464. * @param SiteInterface $site
  465. *
  466. * @return void
  467. */
  468. public function createPressPage(SiteInterface $site)
  469. {
  470. $this->createTextContentPage($site, 'press', 'Press', <<<CONTENT
  471. <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut quis sapien gravida, eleifend diam id, vehicula erat. Aenean ultrices facilisis tellus. Vivamus vitae molestie diam. Donec quis mi porttitor, lobortis ipsum quis, fermentum dui. Donec nec nibh nec risus porttitor pretium et et lorem. Nullam mauris sapien, rutrum sed neque et, convallis ullamcorper lacus. Nullam vehicula a lectus vel suscipit. Nam gravida faucibus fermentum.</p>
  472. <p>Pellentesque dapibus eu nisi quis adipiscing. Phasellus adipiscing turpis nunc, sed interdum ante porta eu. Ut tempus, purus posuere molestie cursus, quam nisi fermentum est, dictum gravida nulla turpis vel nunc. Maecenas eget sem quam. Nam condimentum mi id lectus venenatis, sit amet semper purus convallis. Nunc ullamcorper magna mi, non adipiscing velit semper quis. Duis vel justo libero. Suspendisse laoreet hendrerit augue cursus congue. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;</p>
  473. <p>Nullam dignissim sapien vestibulum erat lobortis, sed imperdiet elit varius. Fusce nisi eros, feugiat commodo scelerisque a, lacinia et quam. In neque risus, dignissim non magna non, ultricies faucibus elit. Vivamus in facilisis enim, porttitor volutpat justo. Praesent placerat feugiat nibh et fermentum. Vivamus eu fermentum metus. Sed mattis volutpat quam a suscipit. Donec blandit sagittis est, ac tristique arcu venenatis sed. Fusce vel libero id lectus aliquet sollicitudin. Fusce ultrices porta est, non pellentesque lorem accumsan eget. Fusce id libero sit amet nulla venenatis dapibus. Maecenas fermentum tellus eu magna mollis gravida. Nam non nibh magna.</p>
  474. CONTENT
  475. );
  476. }
  477. /**
  478. * Creates the "FAQ" content page (link available in footer)
  479. *
  480. * @param SiteInterface $site
  481. *
  482. * @return void
  483. */
  484. public function createFAQPage(SiteInterface $site)
  485. {
  486. $this->createTextContentPage($site, 'faq', 'FAQ', <<<CONTENT
  487. <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut quis sapien gravida, eleifend diam id, vehicula erat. Aenean ultrices facilisis tellus. Vivamus vitae molestie diam. Donec quis mi porttitor, lobortis ipsum quis, fermentum dui. Donec nec nibh nec risus porttitor pretium et et lorem. Nullam mauris sapien, rutrum sed neque et, convallis ullamcorper lacus. Nullam vehicula a lectus vel suscipit. Nam gravida faucibus fermentum.</p>
  488. <p>Pellentesque dapibus eu nisi quis adipiscing. Phasellus adipiscing turpis nunc, sed interdum ante porta eu. Ut tempus, purus posuere molestie cursus, quam nisi fermentum est, dictum gravida nulla turpis vel nunc. Maecenas eget sem quam. Nam condimentum mi id lectus venenatis, sit amet semper purus convallis. Nunc ullamcorper magna mi, non adipiscing velit semper quis. Duis vel justo libero. Suspendisse laoreet hendrerit augue cursus congue. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;</p>
  489. <p>Nullam dignissim sapien vestibulum erat lobortis, sed imperdiet elit varius. Fusce nisi eros, feugiat commodo scelerisque a, lacinia et quam. In neque risus, dignissim non magna non, ultricies faucibus elit. Vivamus in facilisis enim, porttitor volutpat justo. Praesent placerat feugiat nibh et fermentum. Vivamus eu fermentum metus. Sed mattis volutpat quam a suscipit. Donec blandit sagittis est, ac tristique arcu venenatis sed. Fusce vel libero id lectus aliquet sollicitudin. Fusce ultrices porta est, non pellentesque lorem accumsan eget. Fusce id libero sit amet nulla venenatis dapibus. Maecenas fermentum tellus eu magna mollis gravida. Nam non nibh magna.</p>
  490. CONTENT
  491. );
  492. }
  493. /**
  494. * Creates the "Contact us" content page (link available in footer)
  495. *
  496. * @param SiteInterface $site
  497. *
  498. * @return void
  499. */
  500. public function createContactUsPage(SiteInterface $site)
  501. {
  502. $this->createTextContentPage($site, 'contact-us', 'Contact us', <<<CONTENT
  503. <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut quis sapien gravida, eleifend diam id, vehicula erat. Aenean ultrices facilisis tellus. Vivamus vitae molestie diam. Donec quis mi porttitor, lobortis ipsum quis, fermentum dui. Donec nec nibh nec risus porttitor pretium et et lorem. Nullam mauris sapien, rutrum sed neque et, convallis ullamcorper lacus. Nullam vehicula a lectus vel suscipit. Nam gravida faucibus fermentum.</p>
  504. <p>Pellentesque dapibus eu nisi quis adipiscing. Phasellus adipiscing turpis nunc, sed interdum ante porta eu. Ut tempus, purus posuere molestie cursus, quam nisi fermentum est, dictum gravida nulla turpis vel nunc. Maecenas eget sem quam. Nam condimentum mi id lectus venenatis, sit amet semper purus convallis. Nunc ullamcorper magna mi, non adipiscing velit semper quis. Duis vel justo libero. Suspendisse laoreet hendrerit augue cursus congue. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;</p>
  505. <p>Nullam dignissim sapien vestibulum erat lobortis, sed imperdiet elit varius. Fusce nisi eros, feugiat commodo scelerisque a, lacinia et quam. In neque risus, dignissim non magna non, ultricies faucibus elit. Vivamus in facilisis enim, porttitor volutpat justo. Praesent placerat feugiat nibh et fermentum. Vivamus eu fermentum metus. Sed mattis volutpat quam a suscipit. Donec blandit sagittis est, ac tristique arcu venenatis sed. Fusce vel libero id lectus aliquet sollicitudin. Fusce ultrices porta est, non pellentesque lorem accumsan eget. Fusce id libero sit amet nulla venenatis dapibus. Maecenas fermentum tellus eu magna mollis gravida. Nam non nibh magna.</p>
  506. CONTENT
  507. );
  508. }
  509. public function createBundlesPage(SiteInterface $site)
  510. {
  511. $this->createTextContentPage($site, 'bundles', 'Sonata Bundles', <<<CONTENT
  512. <div class="row">
  513. <div class="col-md-6">
  514. <div class="panel panel-success">
  515. <div class="panel-heading">
  516. <h3 class="panel-title">Admin bundles</h3>
  517. </div>
  518. <div class="panel-body">
  519. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut quis sapien gravida, eleifend diam id, vehicula erat.
  520. </div>
  521. <ul class="list-group">
  522. <li class="list-group-item">
  523. <div class="media">
  524. <a class="pull-left" href="#">
  525. <img class="media-object" src="/bundles/sonatademo/images/sonata-logo.png">
  526. </a>
  527. <div class="media-body">
  528. <h4 class="media-heading"><a href="http://sonata-project.org/bundles/admin">Admin</a></h4>
  529. The missing Symfony2 Admin Generator.
  530. </div>
  531. </div>
  532. </li>
  533. <li class="list-group-item">
  534. <div class="media">
  535. <a class="pull-left" href="#">
  536. <img class="media-object" src="/bundles/sonatademo/images/sonata-logo.png">
  537. </a>
  538. <div class="media-body">
  539. <h4 class="media-heading"><a href="http://sonata-project.org/bundles/doctrine-orm-admin">Doctrine2 ORM Admin</a></h4>
  540. Integrates the Doctrine2 ORM into the Admin Bundle.
  541. </div>
  542. </div>
  543. </li>
  544. <li class="list-group-item">
  545. <div class="media">
  546. <a class="pull-left" href="#">
  547. <img class="media-object" src="/bundles/sonatademo/images/sonata-logo.png">
  548. </a>
  549. <div class="media-body">
  550. <h4 class="media-heading"><a href="http://sonata-project.org/bundles/propel-admin">Propel Admin</a></h4>
  551. Integrates the Propel into the Admin Bundle.
  552. </div>
  553. </div>
  554. </li>
  555. </ul>
  556. </div>
  557. <div class="panel panel-info">
  558. <div class="panel-heading">
  559. <h3 class="panel-title">Foundation bundles</h3>
  560. </div>
  561. <div class="panel-body">
  562. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut quis sapien gravida, eleifend diam id, vehicula erat.
  563. </div>
  564. <ul class="list-group">
  565. <li class="list-group-item">
  566. <div class="media">
  567. <a class="pull-left" href="#">
  568. <img class="media-object" src="/bundles/sonatademo/images/sonata-logo.png">
  569. </a>
  570. <div class="media-body">
  571. <h4 class="media-heading"><a href="http://sonata-project.org/bundles/core">Core</a></h4>
  572. Provides base classes used by Sonata's Bundles.
  573. </div>
  574. </div>
  575. </li>
  576. <li class="list-group-item">
  577. <div class="media">
  578. <a class="pull-left" href="#">
  579. <img class="media-object" src="/bundles/sonatademo/images/sonata-logo.png">
  580. </a>
  581. <div class="media-body">
  582. <h4 class="media-heading"><a href="http://sonata-project.org/bundles/notification">Notification</a></h4>
  583. Message Queue Solution with Abstracted Backends.
  584. </div>
  585. </div>
  586. </li>
  587. <li class="list-group-item">
  588. <div class="media">
  589. <a class="pull-left" href="#">
  590. <img class="media-object" src="/bundles/sonatademo/images/sonata-logo.png">
  591. </a>
  592. <div class="media-body">
  593. <h4 class="media-heading"><a href="http://sonata-project.org/bundles/formatter">Formatter</a></h4>
  594. Add text helpers.
  595. </div>
  596. </div>
  597. </li>
  598. <li class="list-group-item">
  599. <div class="media">
  600. <a class="pull-left" href="#">
  601. <img class="media-object" src="/bundles/sonatademo/images/sonata-logo.png">
  602. </a>
  603. <div class="media-body">
  604. <h4 class="media-heading"><a href="http://sonata-project.org/bundles/intl">Internationalization (i18n)</a></h4>
  605. Integrate the PHP Intl extension into a Symfony2 Project.
  606. </div>
  607. </div>
  608. </li>
  609. <li class="list-group-item">
  610. <div class="media">
  611. <a class="pull-left" href="#">
  612. <img class="media-object" src="/bundles/sonatademo/images/sonata-logo.png">
  613. </a>
  614. <div class="media-body">
  615. <h4 class="media-heading"><a href="http://sonata-project.org/bundles/cache">Cache</a></h4>
  616. Cache handlers&nbsp;: ESI, Memcached, APC and more
  617. </div>
  618. </div>
  619. </li>
  620. <li class="list-group-item">
  621. <div class="media">
  622. <a class="pull-left" href="#">
  623. <img class="media-object" src="/bundles/sonatademo/images/sonata-logo.png">
  624. </a>
  625. <div class="media-body">
  626. <h4 class="media-heading"><a href="http://sonata-project.org/bundles/seo">SEO</a></h4>
  627. Integrates a shareable object to handle all SEO requirements&nbsp;: title, meta, Open Graph and more
  628. </div>
  629. </div>
  630. </li>
  631. <li class="list-group-item">
  632. <div class="media">
  633. <a class="pull-left" href="#">
  634. <img class="media-object" src="/bundles/sonatademo/images/sonata-logo.png">
  635. </a>
  636. <div class="media-body">
  637. <h4 class="media-heading"><a href="http://sonata-project.org/bundles/easy-extends">EasyExtends</a></h4>
  638. EasyExtends is a tool for generating a valid bundle structure from a Vendor Bundle.
  639. </div>
  640. </div>
  641. </li>
  642. </ul>
  643. </div>
  644. </div>
  645. <div class="col-md-6">
  646. <div class="panel panel-warning">
  647. <div class="panel-heading">
  648. <h3 class="panel-title">E-commerce bundles</h3>
  649. </div>
  650. <div class="panel-body">
  651. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut quis sapien gravida, eleifend diam id, vehicula erat.
  652. </div>
  653. <ul class="list-group">
  654. <li class="list-group-item">
  655. <div class="media">
  656. <a class="pull-left" href="#">
  657. <img class="media-object" src="/bundles/sonatademo/images/sonata-logo.png">
  658. </a>
  659. <div class="media-body">
  660. <h4 class="media-heading"><a href="http://sonata-project.org/bundles/ecommerce">Ecommerce</a></h4>
  661. Implements base tools for integrated e-commerce features
  662. </div>
  663. </div>
  664. </li>
  665. </ul>
  666. </div>
  667. <div class="panel panel-danger">
  668. <div class="panel-heading">
  669. <h3 class="panel-title">Features bundles</h3>
  670. </div>
  671. <div class="panel-body">
  672. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut quis sapien gravida, eleifend diam id, vehicula erat.
  673. </div>
  674. <ul class="list-group">
  675. <li class="list-group-item">
  676. <div class="media">
  677. <a class="pull-left" href="#">
  678. <img class="media-object" src="/bundles/sonatademo/images/sonata-logo.png">
  679. </a>
  680. <div class="media-body">
  681. <h4 class="media-heading"><a href="http://sonata-project.org/bundles/page">Page</a></h4>
  682. A Symfony2 friendly CMS.
  683. </div>
  684. </div>
  685. </li>
  686. <li class="list-group-item">
  687. <div class="media">
  688. <a class="pull-left" href="#">
  689. <img class="media-object" src="/bundles/sonatademo/images/sonata-logo.png">
  690. </a>
  691. <div class="media-body">
  692. <h4 class="media-heading"><a href="http://sonata-project.org/bundles/media">Media</a></h4>
  693. Media management bundle on steroid for Symfony2.
  694. </div>
  695. </div>
  696. </li>
  697. <li class="list-group-item">
  698. <div class="media">
  699. <a class="pull-left" href="#">
  700. <img class="media-object" src="/bundles/sonatademo/images/sonata-logo.png">
  701. </a>
  702. <div class="media-body">
  703. <h4 class="media-heading"><a href="http://sonata-project.org/bundles/news">News</a></h4>
  704. A simple blog/news platform.
  705. </div>
  706. </div>
  707. </li>
  708. <li class="list-group-item">
  709. <div class="media">
  710. <a class="pull-left" href="#">
  711. <img class="media-object" src="/bundles/sonatademo/images/sonata-logo.png">
  712. </a>
  713. <div class="media-body">
  714. <h4 class="media-heading"><a href="http://sonata-project.org/bundles/user">User</a></h4>
  715. FOS/User integration.
  716. </div>
  717. </div>
  718. </li>
  719. <li class="list-group-item">
  720. <div class="media">
  721. <a class="pull-left" href="#">
  722. <img class="media-object" src="/bundles/sonatademo/images/sonata-logo.png">
  723. </a>
  724. <div class="media-body">
  725. <h4 class="media-heading"><a href="http://sonata-project.org/bundles/block">Block</a></h4>
  726. Handle rendering of block element. A block is a small unit with its own logic and templates. A block can be inserted anywhere in a current template.
  727. </div>
  728. </div>
  729. </li>
  730. <li class="list-group-item">
  731. <div class="media">
  732. <a class="pull-left" href="#">
  733. <img class="media-object" src="/bundles/sonatademo/images/sonata-logo.png">
  734. </a>
  735. <div class="media-body">
  736. <h4 class="media-heading"><a href="http://sonata-project.org/bundles/timeline">Timeline</a></h4>
  737. Integrates SpyTimelineBundle into Sonata's bundles.
  738. </div>
  739. </div>
  740. </li>
  741. </ul>
  742. </div>
  743. </div>
  744. </div>
  745. CONTENT
  746. );
  747. }
  748. /**
  749. * Creates simple content pages
  750. *
  751. * @param SiteInterface $site A Site entity instance
  752. * @param string $url A page URL
  753. * @param string $title A page title
  754. * @param string $content A text content
  755. *
  756. * @return void
  757. */
  758. public function createTextContentPage(SiteInterface $site, $url, $title, $content)
  759. {
  760. $pageManager = $this->getPageManager();
  761. $blockManager = $this->getBlockManager();
  762. $blockInteractor = $this->getBlockInteractor();
  763. $page = $pageManager->create();
  764. $page->setSlug(sprintf('/%s', $url));
  765. $page->setUrl(sprintf('/%s', $url));
  766. $page->setName($title);
  767. $page->setTitle($title);
  768. $page->setEnabled(true);
  769. $page->setDecorate(1);
  770. $page->setRequestMethod('GET|POST|HEAD|DELETE|PUT');
  771. $page->setTemplateCode('default');
  772. $page->setRouteName('page_slug');
  773. $page->setSite($site);
  774. $page->setParent($this->getReference('page-homepage'));
  775. $page->addBlocks($block = $blockInteractor->createNewContainer(array(
  776. 'enabled' => true,
  777. 'page' => $page,
  778. 'code' => 'content_top',
  779. )));
  780. // add the breadcrumb
  781. $block->addChildren($breadcrumb = $blockManager->create());
  782. $breadcrumb->setType('sonata.page.block.breadcrumb');
  783. $breadcrumb->setPosition(0);
  784. $breadcrumb->setEnabled(true);
  785. $breadcrumb->setPage($page);
  786. // Add text content block
  787. $block->addChildren($text = $blockManager->create());
  788. $text->setType('sonata.block.service.text');
  789. $text->setSetting('content', sprintf('<h2>%s</h2><div>%s</div>', $title, $content));
  790. $text->setPosition(1);
  791. $text->setEnabled(true);
  792. $text->setPage($page);
  793. $pageManager->save($page);
  794. }
  795. public function create404ErrorPage(SiteInterface $site)
  796. {
  797. $pageManager = $this->getPageManager();
  798. $blockManager = $this->getBlockManager();
  799. $blockInteractor = $this->getBlockInteractor();
  800. $page = $pageManager->create();
  801. $page->setName('_page_internal_error_not_found');
  802. $page->setTitle('Error 404');
  803. $page->setEnabled(true);
  804. $page->setDecorate(1);
  805. $page->setRequestMethod('GET|POST|HEAD|DELETE|PUT');
  806. $page->setTemplateCode('default');
  807. $page->setRouteName('_page_internal_error_not_found');
  808. $page->setSite($site);
  809. $page->setParent($this->getReference('page-homepage'));
  810. $page->addBlocks($block = $blockInteractor->createNewContainer(array(
  811. 'enabled' => true,
  812. 'page' => $page,
  813. 'code' => 'content_top',
  814. )));
  815. // add the breadcrumb
  816. $block->addChildren($breadcrumb = $blockManager->create());
  817. $breadcrumb->setType('sonata.page.block.breadcrumb');
  818. $breadcrumb->setPosition(0);
  819. $breadcrumb->setEnabled(true);
  820. $breadcrumb->setPage($page);
  821. // Add text content block
  822. $block->addChildren($text = $blockManager->create());
  823. $text->setType('sonata.block.service.text');
  824. $text->setSetting('content', '<h2>Error 404</h2><div>Page not found.</div>');
  825. $text->setPosition(1);
  826. $text->setEnabled(true);
  827. $text->setPage($page);
  828. $pageManager->save($page);
  829. }
  830. public function create500ErrorPage(SiteInterface $site)
  831. {
  832. $pageManager = $this->getPageManager();
  833. $blockManager = $this->getBlockManager();
  834. $blockInteractor = $this->getBlockInteractor();
  835. $page = $pageManager->create();
  836. $page->setName('_page_internal_error_not_found');
  837. $page->setTitle('Error 500');
  838. $page->setEnabled(true);
  839. $page->setDecorate(1);
  840. $page->setRequestMethod('GET|POST|HEAD|DELETE|PUT');
  841. $page->setTemplateCode('default');
  842. $page->setRouteName('_page_internal_error_fatal');
  843. $page->setSite($site);
  844. $page->setParent($this->getReference('page-homepage'));
  845. $page->addBlocks($block = $blockInteractor->createNewContainer(array(
  846. 'enabled' => true,
  847. 'page' => $page,
  848. 'code' => 'content_top',
  849. )));
  850. // add the breadcrumb
  851. $block->addChildren($breadcrumb = $blockManager->create());
  852. $breadcrumb->setType('sonata.page.block.breadcrumb');
  853. $breadcrumb->setPosition(0);
  854. $breadcrumb->setEnabled(true);
  855. $breadcrumb->setPage($page);
  856. // Add text content block
  857. $block->addChildren($text = $blockManager->create());
  858. $text->setType('sonata.block.service.text');
  859. $text->setSetting('content', '<h2>Error 500</h2><div>Internal error.</div>');
  860. $text->setPosition(1);
  861. $text->setEnabled(true);
  862. $text->setPage($page);
  863. $pageManager->save($page);
  864. }
  865. /**
  866. * @param SiteInterface $site
  867. */
  868. public function createGlobalPage(SiteInterface $site)
  869. {
  870. $pageManager = $this->getPageManager();
  871. $blockManager = $this->getBlockManager();
  872. $blockInteractor = $this->getBlockInteractor();
  873. $global = $pageManager->create();
  874. $global->setName('global');
  875. $global->setRouteName('_page_internal_global');
  876. $global->setSite($site);
  877. $pageManager->save($global);
  878. // CREATE A HEADER BLOCK
  879. $global->addBlocks($title = $blockInteractor->createNewContainer(array(
  880. 'enabled' => true,
  881. 'page' => $global,
  882. 'code' => 'title',
  883. )));
  884. $title->setName('The title container');
  885. $title->addChildren($text = $blockManager->create());
  886. $text->setType('sonata.block.service.text');
  887. $text->setSetting('content', '<h2><a href="/">Sonata Demo</a></h2>');
  888. $text->setPosition(1);
  889. $text->setEnabled(true);
  890. $text->setPage($global);
  891. $global->addBlocks($header = $blockInteractor->createNewContainer(array(
  892. 'enabled' => true,
  893. 'page' => $global,
  894. 'code' => 'header',
  895. )));
  896. $header->setName('The header container');
  897. $global->addBlocks($headerTop = $blockInteractor->createNewContainer(array(
  898. 'enabled' => true,
  899. 'page' => $global,
  900. 'code' => 'header-top',
  901. ), function ($container) {
  902. $container->setSetting('layout', '<div class="pull-right">{{ CONTENT }}</div>');
  903. }));
  904. $headerTop->setPosition(1);
  905. $header->addChildren($headerTop);
  906. $headerTop->addChildren($account = $blockManager->create());
  907. $account->setType('sonata.user.block.account');
  908. $account->setPosition(1);
  909. $account->setEnabled(true);
  910. $account->setPage($global);
  911. $headerTop->addChildren($basket = $blockManager->create());
  912. $basket->setType('sonata.basket.block.nb_items');
  913. $basket->setPosition(2);
  914. $basket->setEnabled(true);
  915. $basket->setPage($global);
  916. $global->addBlocks($headerMenu = $blockInteractor->createNewContainer(array(
  917. 'enabled' => true,
  918. 'page' => $global,
  919. 'code' => 'header-menu',
  920. )));
  921. $headerMenu->setPosition(2);
  922. $header->addChildren($headerMenu);
  923. $headerMenu->setName('The header menu container');
  924. $headerMenu->setPosition(3);
  925. $headerMenu->addChildren($menu = $blockManager->create());
  926. $menu->setType('sonata.block.service.menu');
  927. $menu->setSetting('menu_name', "SonataDemoBundle:Builder:mainMenu");
  928. $menu->setSetting('safe_labels', true);
  929. $menu->setPosition(3);
  930. $menu->setEnabled(true);
  931. $menu->setPage($global);
  932. $global->addBlocks($footer = $blockInteractor->createNewContainer(array(
  933. 'enabled' => true,
  934. 'page' => $global,
  935. 'code' => 'footer'
  936. ), function ($container) {
  937. $container->setSetting('layout', '<div class="row page-footer well">{{ CONTENT }}</div>');
  938. }));
  939. $footer->setName('The footer container');
  940. // Footer : add 3 children block containers (left, center, right)
  941. $footer->addChildren($footerLeft = $blockInteractor->createNewContainer(array(
  942. 'enabled' => true,
  943. 'page' => $global,
  944. 'code' => 'content'
  945. ), function ($container) {
  946. $container->setSetting('layout', '<div class="col-md-4">{{ CONTENT }}</div>');
  947. }));
  948. $footer->addChildren($footerCenter = $blockInteractor->createNewContainer(array(
  949. 'enabled' => true,
  950. 'page' => $global,
  951. 'code' => 'content',
  952. ), function ($container) {
  953. $container->setSetting('layout', '<div class="col-md-4">{{ CONTENT }}</div>');
  954. }));
  955. $footer->addChildren($footerRight = $blockInteractor->createNewContainer(array(
  956. 'enabled' => true,
  957. 'page' => $global,
  958. 'code' => 'content'
  959. ), function ($container) {
  960. $container->setSetting('layout', '<div class="col-md-4">{{ CONTENT }}</div>');
  961. }));
  962. // Footer left: add a simple text block
  963. $footerLeft->addChildren($text = $blockManager->create());
  964. $text->setType('sonata.block.service.text');
  965. $text->setSetting('content', '<h3>Sonata Demo</h3><p class="handcraft">Handcrafted in France with love ♥</p>');
  966. $text->setPosition(1);
  967. $text->setEnabled(true);
  968. $text->setPage($global);
  969. // Footer center: add menu links
  970. $footerCenter->addChildren($text = $blockManager->create());
  971. $text->setType('sonata.block.service.text');
  972. $text->setSetting('content', <<<CONTENT
  973. <ul class="links">
  974. <li><a href="/who-we-are">Who we are</a></li>
  975. <li><a href="/client-testimonials">Client testimonials</a></li>
  976. <li><a href="/press">Press</a></li>
  977. <li><a href="/faq">FAQ</a></li>
  978. <li><a href="/contact-us">Contact us</a></li>
  979. <li><a href="/shop/payment/terms-and-conditions">Terms & conditions</a></li>
  980. <li><a target="_blank" href="http://www.twitter.com/sonataproject">Twitter</a></li>
  981. <li><a target="_blank" href="https://groups.google.com/forum/#!forum/sonata-devs">Google Group</a></li>
  982. </ul>
  983. CONTENT
  984. );
  985. $text->setPosition(1);
  986. $text->setEnabled(true);
  987. $text->setPage($global);
  988. // Footer right: add social links
  989. $footerRight->addChildren($text = $blockManager->create());
  990. $text->setType('sonata.block.service.text');
  991. $text->setSetting('content', <<<CONTENT
  992. <a class="twitter-timeline"
  993. href="https://twitter.com/sonataproject"
  994. data-widget-id="423108745925636096"
  995. data-chrome="nofooter noborders noscrollbar transparent"
  996. data-tweet-limit=2"
  997. >Tweets by @sonataproject</a>
  998. <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
  999. CONTENT
  1000. );
  1001. $text->setPosition(1);
  1002. $text->setEnabled(true);
  1003. $text->setName('The Twitter Block');
  1004. $text->setPage($global);
  1005. $pageManager->save($global);
  1006. }
  1007. /**
  1008. * @return \Sonata\PageBundle\Model\SiteManagerInterface
  1009. */
  1010. public function getSiteManager()
  1011. {
  1012. return $this->container->get('sonata.page.manager.site');
  1013. }
  1014. /**
  1015. * @return \Sonata\PageBundle\Model\PageManagerInterface
  1016. */
  1017. public function getPageManager()
  1018. {
  1019. return $this->container->get('sonata.page.manager.page');
  1020. }
  1021. /**
  1022. * @return \Sonata\BlockBundle\Model\BlockManagerInterface
  1023. */
  1024. public function getBlockManager()
  1025. {
  1026. return $this->container->get('sonata.page.manager.block');
  1027. }
  1028. /**

Large files files are truncated, but you can click here to view the full file