/**
  * Create a new progression for a User and a Step (by default, the first action is 'seen')
  * @param Step $step
  * @param User $user
  * @param string $status
  * @return \Innova\PathBundle\Entity\UserProgression
  */
 public function create(Step $step, User $user = null, $status = null)
 {
     if (empty($user)) {
         // Load current logged User
         $user = $this->securityToken->getToken()->getUser();
     }
     $progression = new UserProgression();
     $progression->setUser($user);
     $progression->setStep($step);
     if (empty($status)) {
         $status = UserProgression::getDefaultStatus();
     }
     $progression->setStatus($status);
     $this->om->persist($progression);
     $this->om->flush();
     return $progression;
 }
 /**
  * Create a new progression for a User and a Step (by default, the first action is 'seen').
  *
  * @param Step   $step
  * @param User   $user
  * @param string $status
  * @param bool   $authorized
  * @param bool   $checkDuplicate
  *
  * @return UserProgression
  */
 public function create(Step $step, User $user = null, $status = null, $authorized = false, $checkDuplicate = true)
 {
     // Check if progression already exists, if so return retrieved progression
     if ($checkDuplicate && $user instanceof User) {
         $progression = $this->om->getRepository('InnovaPathBundle:UserProgression')->findOneBy(['step' => $step, 'user' => $user]);
         if (!empty($progression)) {
             return $progression;
         }
     }
     $progression = new UserProgression();
     $progression->setStep($step);
     if (empty($status)) {
         $status = UserProgression::getDefaultStatus();
     }
     $progression->setStatus($status);
     $progression->setAuthorized($authorized);
     if ($user instanceof User) {
         $progression->setUser($user);
         $this->om->persist($progression);
         $this->om->flush();
     }
     return $progression;
 }