1919use Pimcore \Bundle \StudioBackendBundle \Exception \Api \ParseException ;
2020use Pimcore \Bundle \StudioBackendBundle \Role \Repository \RoleRepositoryInterface ;
2121use Pimcore \Bundle \StudioBackendBundle \User \Repository \PermissionRepositoryInterface ;
22+ use Pimcore \Bundle \StudioBackendBundle \User \Schema \UserDataObjectWorkspace ;
23+ use Pimcore \Bundle \StudioBackendBundle \User \Schema \UserDocumentWorkspace ;
2224use Pimcore \Bundle \StudioBackendBundle \User \Schema \UserWorkspace ;
2325use Pimcore \Model \Element \ElementInterface ;
2426use Pimcore \Model \User \UserRoleInterface ;
25- use Pimcore \Model \User \Workspace \AbstractWorkspace ;
2627use Pimcore \Model \User \Workspace \Asset as AssetWorkspace ;
2728use Pimcore \Model \User \Workspace \DataObject as DataObjectWorkspace ;
2829use Pimcore \Model \User \Workspace \Document as DocumentWorkspace ;
@@ -152,7 +153,7 @@ public function updateAssetWorkspaces(
152153 /**
153154 * @template T of UserInterface|UserRoleInterface
154155 *
155- * @param UserWorkspace [] $objectWorkspacesToSet
156+ * @param UserDataObjectWorkspace [] $objectWorkspacesToSet
156157 * @param T $user
157158 *
158159 * @throws ParseException
@@ -169,12 +170,14 @@ public function updateDataObjectWorkspaces(
169170 foreach ($ objectWorkspacesToSet as $ workspace ) {
170171 $ element = $ this ->elementServiceResolver ->getElementByPath ('object ' , $ workspace ->getCpath ());
171172 if ($ element ) {
172- $ workspaces [] = $ this ->setWorkspaceValues (
173+ $ hydrated = $ this ->setWorkspaceValues (
173174 $ workspace ,
174175 $ element ,
175176 new DataObjectWorkspace (),
176177 $ user ->getId ()
177178 );
179+
180+ $ workspaces [] = $ this ->setDataObjectWorkspaceValues ($ workspace , $ hydrated );
178181 }
179182 }
180183
@@ -187,7 +190,7 @@ public function updateDataObjectWorkspaces(
187190 /**
188191 * @template T of UserInterface|UserRoleInterface
189192 *
190- * @param UserWorkspace [] $documentWorkspacesToSet
193+ * @param UserDocumentWorkspace [] $documentWorkspacesToSet
191194 * @param T $user
192195 *
193196 * @throws ParseException
@@ -204,12 +207,14 @@ public function updateDocumentWorkspaces(
204207 foreach ($ documentWorkspacesToSet as $ workspace ) {
205208 $ element = $ this ->elementServiceResolver ->getElementByPath ('document ' , $ workspace ->getCpath ());
206209 if ($ element ) {
207- $ workspaces [] = $ this ->setWorkspaceValues (
210+ $ hydrated = $ this ->setWorkspaceValues (
208211 $ workspace ,
209212 $ element ,
210213 new DocumentWorkspace (),
211214 $ user ->getId ()
212215 );
216+
217+ $ workspaces [] = $ this ->setDocumentWorkspaceValues ($ workspace , $ hydrated );
213218 }
214219 }
215220
@@ -256,9 +261,9 @@ private function checkForDuplicateWorkspaces(array $assetWorkspacesToSet): void
256261 private function setWorkspaceValues (
257262 UserWorkspace $ params ,
258263 ElementInterface $ element ,
259- AbstractWorkspace $ workspace ,
264+ AssetWorkspace | DataObjectWorkspace | DocumentWorkspace $ workspace ,
260265 int $ userId
261- ): AbstractWorkspace {
266+ ): AssetWorkspace | DataObjectWorkspace | DocumentWorkspace {
262267 $ workspace ->setUserId ($ userId );
263268 $ workspace ->setCpath ($ element ->getRealFullPath ());
264269 $ workspace ->setCid ($ element ->getId ());
@@ -274,4 +279,39 @@ private function setWorkspaceValues(
274279
275280 return $ workspace ;
276281 }
282+
283+ private function setDataObjectWorkspaceValues (
284+ UserDataObjectWorkspace $ params ,
285+ DataObjectWorkspace $ workspace
286+ ): DataObjectWorkspace {
287+ $ hydrated = $ this ->setSpecialWorkspaceValues ($ params , $ workspace );
288+ $ hydrated ->setLEdit ($ this ->transformLocalizedValues ($ params ->getLocalizedEdit ()));
289+ $ hydrated ->setLView ($ this ->transformLocalizedValues ($ params ->getLocalizedView ()));
290+ $ hydrated ->setLayouts ($ this ->transformLocalizedValues ($ params ->getLayouts ()));
291+
292+ return $ hydrated ;
293+ }
294+
295+ private function setDocumentWorkspaceValues (
296+ UserDocumentWorkspace $ params ,
297+ DocumentWorkspace $ workspace
298+ ): DocumentWorkspace {
299+
300+ return $ this ->setSpecialWorkspaceValues ($ params , $ workspace );
301+ }
302+
303+ private function setSpecialWorkspaceValues (
304+ UserDocumentWorkspace |UserDataObjectWorkspace $ params ,
305+ DataObjectWorkspace |DocumentWorkspace $ workspace
306+ ): DataObjectWorkspace |DocumentWorkspace {
307+ $ workspace ->setUnpublish ($ params ->isUnpublish ());
308+ $ workspace ->setSave ($ params ->isSave ());
309+
310+ return $ workspace ;
311+ }
312+
313+ private function transformLocalizedValues (?array $ workspaceValue ): ?string
314+ {
315+ return empty ($ workspaceValue ) ? null : implode (', ' , $ workspaceValue );
316+ }
277317}
0 commit comments