/**
  * 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;
 }