/** * Creates a widget instance. * * @param \Claroline\CoreBundle\Entity\Widget\Widget $widget * @param bool $isAdmin * @param bool $isDesktop * @param \Claroline\CoreBundle\Entity\User $user * @param \Claroline\CoreBundle\Entity\Workspace\Workspace $ws * * @return \Claroline\CoreBundle\Entity\Widget\WidgetInstance * * @throws \Exception */ public function createInstance(Widget $widget, $isAdmin, $isDesktop, User $user = null, Workspace $ws = null) { if (!$widget->isDisplayableInDesktop()) { if ($isDesktop || $user) { throw new \Exception("This widget doesn't support the desktop"); } } if (!$widget->isDisplayableInWorkspace()) { if (!$isDesktop || $ws) { throw new \Exception("This widget doesn't support the workspace"); } } $instance = new WidgetInstance($widget); $instance->setName($this->translator->trans($widget->getName(), [], 'widget')); $instance->setIsAdmin($isAdmin); $instance->setIsDesktop($isDesktop); $instance->setWidget($widget); $instance->setUser($user); $instance->setWorkspace($ws); $this->om->persist($instance); $this->om->flush(); return $instance; }