Skip to content

Commit 77f233a

Browse files
committed
Merge pull request #273 from frne/frontend-link-sonata-admin
[AdminExtension] Add link to page in frontend if possible
2 parents e557c05 + 915f516 commit 77f233a

File tree

8 files changed

+145
-0
lines changed

8 files changed

+145
-0
lines changed
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony CMF package.
5+
*
6+
* (c) 2011-2014 Symfony CMF
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Cmf\Bundle\RoutingBundle\Admin\Extension;
13+
14+
use Knp\Menu\ItemInterface as MenuItemInterface;
15+
use Sonata\AdminBundle\Admin\AdminExtension;
16+
use Sonata\AdminBundle\Admin\AdminInterface;
17+
use Symfony\Bundle\FrameworkBundle\Translation\Translator;
18+
use Symfony\Cmf\Component\Routing\RouteReferrersReadInterface;
19+
use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
20+
use Symfony\Component\Routing\Exception\ExceptionInterface as RoutingExceptionInterface;
21+
use Symfony\Component\Routing\Route;
22+
use Symfony\Component\Routing\RouterInterface;
23+
24+
/**
25+
* Admin extension to add a frontend link to the edit tab implementing the
26+
* RouteReferrersReadInterface.
27+
*
28+
* @author Frank Neff <[email protected]>
29+
*/
30+
class FrontendLinkExtension extends AdminExtension
31+
{
32+
/**
33+
* @var RouterInterface
34+
*/
35+
private $router;
36+
37+
/**
38+
* @var Translator
39+
*/
40+
private $translator;
41+
42+
/**
43+
* @param RouterInterface $router
44+
* @param Translator $translator
45+
*/
46+
public function __construct(RouterInterface $router, Translator $translator)
47+
{
48+
$this->router = $router;
49+
$this->translator = $translator;
50+
}
51+
52+
public function configureTabMenu(
53+
AdminInterface $admin,
54+
MenuItemInterface $menu,
55+
$action,
56+
AdminInterface $childAdmin = null
57+
) {
58+
if (!$subject = $admin->getSubject()) {
59+
return;
60+
}
61+
62+
if (!$subject instanceof RouteReferrersReadInterface && !$subject instanceof Route) {
63+
throw new InvalidConfigurationException(
64+
sprintf(
65+
'%s can only be used on subjects which implement Symfony\Cmf\Component\Routing\RouteReferrersReadInterface or Symfony\Component\Routing\Route!',
66+
__CLASS__
67+
)
68+
);
69+
}
70+
71+
try {
72+
$uri = $this->router->generate($subject);
73+
} catch (RoutingExceptionInterface $e) {
74+
// we have no valid route
75+
return;
76+
}
77+
78+
$menu->addChild(
79+
$this->translator->trans('admin.menu_frontend_link_caption', array(), 'CmfRoutingBundle'),
80+
array(
81+
'uri' => $uri,
82+
'linkAttributes' => array(
83+
'target' => '_blank',
84+
'title' => $this->translator->trans('admin.menu_frontend_link_title', array(), 'CmfRoutingBundle')
85+
)
86+
)
87+
);
88+
}
89+
90+
}

Resources/config/admin-phpcr.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<parameter key="cmf_routing.route_document.class">Symfony\Cmf\Bundle\RoutingBundle\Doctrine\Phpcr\Route</parameter>
1111
<parameter key="cmf_routing.redirect_route_document.class">Symfony\Cmf\Bundle\RoutingBundle\Doctrine\Phpcr\RedirectRoute</parameter>
1212
<parameter key="cmf_routing.admin_extension.route_referrers.class">Symfony\Cmf\Bundle\RoutingBundle\Admin\Extension\RouteReferrersExtension</parameter>
13+
<parameter key="cmf_routing.admin_extension.frontend_link.class">Symfony\Cmf\Bundle\RoutingBundle\Admin\Extension\FrontendLinkExtension</parameter>
1314
</parameters>
1415

1516
<services>
@@ -55,5 +56,11 @@
5556
<tag name="sonata.admin.extension"/>
5657
</service>
5758

59+
<service id="cmf_routing.admin_extension.frontend_link" class="%cmf_routing.admin_extension.frontend_link.class%">
60+
<tag name="sonata.admin.extension"/>
61+
<argument type="service" id="cmf_routing.router"/>
62+
<argument type="service" id="translator"/>
63+
</service>
64+
5865
</services>
5966
</container>

Resources/translations/CmfRoutingBundle.de.xliff

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,14 @@
132132
]]>
133133
</target>
134134
</trans-unit>
135+
<trans-unit id="admin.menu_frontend_link_caption">
136+
<source>admin.menu_frontend_link_caption</source>
137+
<target>Frontend</target>
138+
</trans-unit>
139+
<trans-unit id="admin.menu_frontend_link_title">
140+
<source>admin.menu_frontend_link_title</source>
141+
<target>Frontend-Ansicht in neuem Tab öffnen</target>
142+
</trans-unit>
135143
</body>
136144
</file>
137145
</xliff>

Resources/translations/CmfRoutingBundle.en.xliff

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,14 @@
132132
]]>
133133
</target>
134134
</trans-unit>
135+
<trans-unit id="admin.menu_frontend_link_caption">
136+
<source>admin.menu_frontend_link_caption</source>
137+
<target>Frontend</target>
138+
</trans-unit>
139+
<trans-unit id="admin.menu_frontend_link_title">
140+
<source>admin.menu_frontend_link_title</source>
141+
<target>Open frontend view in new tab</target>
142+
</trans-unit>
135143
</body>
136144
</file>
137145
</xliff>

Resources/translations/CmfRoutingBundle.fr.xliff

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,14 @@
131131
]]>
132132
</target>
133133
</trans-unit>
134+
<trans-unit id="admin.menu_frontend_link_caption">
135+
<source>admin.menu_frontend_link_caption</source>
136+
<target>Frontend</target>
137+
</trans-unit>
138+
<trans-unit id="admin.menu_frontend_link_title">
139+
<source>admin.menu_frontend_link_title</source>
140+
<target>Ouvrir ce front-end lien dans un nouvel onglet</target>
141+
</trans-unit>
134142
</body>
135143
</file>
136144
</xliff>

Resources/translations/CmfRoutingBundle.it.xliff

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,14 @@
132132
]]>
133133
</target>
134134
</trans-unit>
135+
<trans-unit id="admin.menu_frontend_link_caption">
136+
<source>admin.menu_frontend_link_caption</source>
137+
<target>Frontend</target>
138+
</trans-unit>
139+
<trans-unit id="admin.menu_frontend_link_title">
140+
<source>admin.menu_frontend_link_title</source>
141+
<target>Aprire il link front-end in una nuova scheda</target>
142+
</trans-unit>
135143
</body>
136144
</file>
137145
</xliff>

Resources/translations/CmfRoutingBundle.nl.xliff

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,14 @@
106106
<source>form.label_add_trailing_slash</source>
107107
<target>Slash aan het eind toevoegen</target>
108108
</trans-unit>
109+
<trans-unit id="admin.menu_frontend_link_caption">
110+
<source>admin.menu_frontend_link_caption</source>
111+
<target>Frontend</target>
112+
</trans-unit>
113+
<trans-unit id="admin.menu_frontend_link_title">
114+
<source>admin.menu_frontend_link_title</source>
115+
<target>Open de voorkant link in nieuw tabblad</target>
116+
</trans-unit>
109117
</body>
110118
</file>
111119
</xliff>

Resources/translations/CmfRoutingBundle.pl.xliff

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,14 @@
106106
<source>form.label_add_trailing_slash</source>
107107
<target>Dodaj slash kończący adres</target>
108108
</trans-unit>
109+
<trans-unit id="admin.menu_frontend_link_caption">
110+
<source>admin.menu_frontend_link_caption</source>
111+
<target>Frontend</target>
112+
</trans-unit>
113+
<trans-unit id="admin.menu_frontend_link_title">
114+
<source>admin.menu_frontend_link_title</source>
115+
<target>Otwórz przednią związek końcowy w nowej karcie</target>
116+
</trans-unit>
109117
</body>
110118
</file>
111119
</xliff>

0 commit comments

Comments
 (0)