1818use Ibexa \AdminUi \Form \Factory \FormFactory ;
1919use Ibexa \AdminUi \Form \SubmitHandler ;
2020use Ibexa \AdminUi \Form \Type \Content \Translation \MainTranslationUpdateType ;
21- use Ibexa \AdminUi \Form \Type \Preview \SiteAccessChoiceType ;
21+ use Ibexa \AdminUi \Form \Type \Preview \VersionPreviewUrlChoiceType ;
2222use Ibexa \AdminUi \Permission \LookupLimitationsTransformer ;
2323use Ibexa \AdminUi \Siteaccess \SiteAccessNameGeneratorInterface ;
2424use Ibexa \AdminUi \Siteaccess \SiteaccessResolverInterface ;
2828use Ibexa \Contracts \AdminUi \Event \ContentEditEvent ;
2929use Ibexa \Contracts \AdminUi \Event \ContentProxyCreateEvent ;
3030use Ibexa \Contracts \AdminUi \Notification \TranslatableNotificationHandlerInterface ;
31+ use Ibexa \Contracts \AdminUi \PreviewUrlResolver \VersionPreviewUrlResolverInterface ;
3132use Ibexa \Contracts \Core \Limitation \Target ;
3233use Ibexa \Contracts \Core \Repository \ContentService ;
3334use Ibexa \Contracts \Core \Repository \Exceptions as ApiException ;
3435use Ibexa \Contracts \Core \Repository \Exceptions \UnauthorizedException ;
36+ use Ibexa \Contracts \Core \Repository \LanguageService ;
3537use Ibexa \Contracts \Core \Repository \LocationService ;
3638use Ibexa \Contracts \Core \Repository \PermissionResolver ;
3739use Ibexa \Contracts \Core \Repository \UserService ;
4244use Ibexa \Contracts \Core \SiteAccess \ConfigResolverInterface ;
4345use Ibexa \Core \Base \Exceptions \BadStateException ;
4446use Ibexa \Core \Helper \TranslationHelper ;
47+ use Ibexa \Core \MVC \Symfony \SiteAccess \SiteAccessServiceInterface ;
4548use JMS \TranslationBundle \Annotation \Desc ;
4649use Symfony \Component \Form \FormFactoryInterface ;
4750use Symfony \Component \HttpFoundation \JsonResponse ;
@@ -96,6 +99,12 @@ class ContentController extends Controller
9699
97100 private FormFactoryInterface $ baseFormFactory ;
98101
102+ private VersionPreviewUrlResolverInterface $ previewUrlResolver ;
103+
104+ private LanguageService $ languageService ;
105+
106+ private SiteAccessServiceInterface $ siteAccessService ;
107+
99108 public function __construct (
100109 TranslatableNotificationHandlerInterface $ notificationHandler ,
101110 ContentService $ contentService ,
@@ -111,7 +120,10 @@ public function __construct(
111120 ConfigResolverInterface $ configResolver ,
112121 SiteAccessNameGeneratorInterface $ siteAccessNameGenerator ,
113122 EventDispatcherInterface $ eventDispatcher ,
114- FormFactoryInterface $ baseFormFactory
123+ FormFactoryInterface $ baseFormFactory ,
124+ VersionPreviewUrlResolverInterface $ previewUrlResolver ,
125+ LanguageService $ languageService ,
126+ SiteAccessServiceInterface $ siteAccessService
115127 ) {
116128 $ this ->notificationHandler = $ notificationHandler ;
117129 $ this ->contentService = $ contentService ;
@@ -128,6 +140,9 @@ public function __construct(
128140 $ this ->siteAccessNameGenerator = $ siteAccessNameGenerator ;
129141 $ this ->eventDispatcher = $ eventDispatcher ;
130142 $ this ->baseFormFactory = $ baseFormFactory ;
143+ $ this ->previewUrlResolver = $ previewUrlResolver ;
144+ $ this ->languageService = $ languageService ;
145+ $ this ->siteAccessService = $ siteAccessService ;
131146 }
132147
133148 /**
@@ -386,12 +401,11 @@ public function previewAction(
386401 $ versionNo = null ;
387402 }
388403
389- if (null === $ location ) {
404+ if (! $ location instanceof Location ) {
390405 $ location = $ this ->locationService ->loadLocation ($ content ->contentInfo ->mainLocationId );
391406 }
392407
393408 $ siteAccesses = $ this ->siteaccessResolver ->getSiteAccessesListForLocation ($ location , $ versionNo , $ languageCode );
394-
395409 if (empty ($ siteAccesses )) {
396410 throw new BadStateException (
397411 'siteaccess ' ,
@@ -404,30 +418,28 @@ public function previewAction(
404418 $ siteAccessesList [$ siteAccess ->name ] = $ this ->siteAccessNameGenerator ->generate ($ siteAccess );
405419 }
406420
407- $ preselectedSiteAccess = $ request ->query ->get ('preselectedSiteAccess ' , reset ($ siteAccessesList ));
408-
409- if (!array_key_exists ($ preselectedSiteAccess , $ siteAccessesList )) {
410- $ preselectedSiteAccess = reset ($ siteAccessesList );
421+ $ preselectedSiteAccessName = $ request ->query ->get ('preselectedSiteAccessName ' , reset ($ siteAccessesList ));
422+ if (!array_key_exists ($ preselectedSiteAccessName , $ siteAccessesList )) {
423+ $ preselectedSiteAccessName = reset ($ siteAccessesList );
411424 }
412425
413- $ urlValue = $ this ->generateUrl (
414- ' ibexa.version.preview ' ,
415- [
416- ' contentId ' => $ content -> id ,
417- ' versionNo ' => $ versionNo ?? $ content -> getVersionInfo ()-> versionNo ,
418- ' language ' => $ languageCode ,
419- ' siteAccessName ' => $ preselectedSiteAccess ,
420- ]
426+ $ versionInfo = $ this ->contentService -> loadVersionInfo ( $ content -> getContentInfo (), $ versionNo );
427+ $ language = $ this -> languageService -> loadLanguage ( $ languageCode );
428+
429+ $ previewUrl = $ this -> previewUrlResolver -> resolveUrl (
430+ $ versionInfo ,
431+ $ location ,
432+ $ language ,
433+ $ this -> siteAccessService -> get ( $ preselectedSiteAccessName )
421434 );
422435
423436 $ siteAccessSelector = $ this ->baseFormFactory ->create (
424- SiteAccessChoiceType ::class,
425- $ urlValue ,
437+ VersionPreviewUrlChoiceType ::class,
438+ $ previewUrl ,
426439 [
427440 'location ' => $ location ,
428- 'content ' => $ content ,
429- 'versionNo ' => $ versionNo ?? $ content ->getVersionInfo ()->versionNo ,
430- 'languageCode ' => $ languageCode ,
441+ 'version_info ' => $ versionInfo ,
442+ 'language ' => $ language ,
431443 ]
432444 );
433445
@@ -438,8 +450,9 @@ public function previewAction(
438450 'siteaccesses ' => $ siteAccessesList ,
439451 'site_access_form ' => $ siteAccessSelector ->createView (),
440452 'version_no ' => $ versionNo ?? $ content ->getVersionInfo ()->versionNo ,
441- 'preselected_site_access ' => $ preselectedSiteAccess ,
453+ 'preselected_site_access ' => $ preselectedSiteAccessName ,
442454 'referrer ' => $ referrer ?? 'content_draft_edit ' ,
455+ 'preview_url ' => $ previewUrl ,
443456 ]);
444457 }
445458
0 commit comments