public function process(Tracker_IDisplayTrackerLayout $layout, Codendi_Request $request, PFUser $current_user)
 {
     //TODO : check permissions on this action?
     $comment_format = $this->artifact->validateCommentFormat($request, 'comment_formatnew');
     $this->artifact->setUseArtifactPermissions($request->get('use_artifact_permissions') ? 1 : 0);
     $fields_data = $request->get('artifact');
     $fields_data['request_method_called'] = 'artifact-update';
     $this->artifact->getTracker()->augmentDataFromRequest($fields_data);
     unset($fields_data['request_method_called']);
     try {
         if ($current_user->isAnonymous()) {
             $current_user->setEmail($request->get('email'));
         }
         $this->artifact->createNewChangeset($fields_data, $request->get('artifact_followup_comment'), $current_user, true, $comment_format);
         $art_link = $this->artifact->fetchDirectLinkToArtifact();
         $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('plugin_tracker_index', 'update_success', array($art_link)), CODENDI_PURIFIER_LIGHT);
         $redirect = $this->getRedirectUrlAfterArtifactUpdate($request);
         $this->artifact->summonArtifactRedirectors($request, $redirect);
         if ($request->isAjax()) {
             $this->sendAjaxCardsUpdateInfo($current_user, $this->artifact, $this->form_element_factory);
         } elseif ($request->existAndNonEmpty('from_overlay')) {
             echo '<script>window.parent.tuleap.cardwall.cardsEditInPlace.validateEdition(' . $this->artifact->getId() . ')</script>';
             return;
         } else {
             $GLOBALS['Response']->redirect($redirect->toUrl());
         }
     } catch (Tracker_NoChangeException $e) {
         if ($request->isAjax()) {
             $this->sendAjaxCardsUpdateInfo($current_user, $this->artifact, $this->form_element_factory);
         } else {
             $GLOBALS['Response']->addFeedback('info', $e->getMessage(), CODENDI_PURIFIER_LIGHT);
             $render = new Tracker_Artifact_ReadOnlyRenderer($this->event_manager, $this->artifact, $this->form_element_factory, $layout);
             $render->display($request, $current_user);
         }
     } catch (Tracker_Exception $e) {
         if ($request->isAjax()) {
             $this->sendAjaxCardsUpdateInfo($current_user, $this->artifact, $this->form_element_factory);
         } else {
             $GLOBALS['Response']->addFeedback('error', $e->getMessage());
             $render = new Tracker_Artifact_ReadOnlyRenderer($this->event_manager, $this->artifact, $this->form_element_factory, $layout);
             $render->display($request, $current_user);
         }
     }
 }
 /**
  * Save the value and return the id
  * 
  * @param Tracker_Artifact                $artifact                The artifact
  * @param int                             $changeset_value_id      The id of the changeset_value 
  * @param mixed                           $value                   The value submitted by the user
  * @param Tracker_Artifact_ChangesetValue $previous_changesetvalue The data previously stored in the db
  *
  * @return int or array of int
  */
 protected function saveValue($artifact, $changeset_value_id, $value, Tracker_Artifact_ChangesetValue $previous_changesetvalue = null)
 {
     if (empty($value)) {
         $value['use_artifact_permissions'] = 0;
         $value['u_groups'] = array();
     }
     $artifact->setUseArtifactPermissions($value['use_artifact_permissions']);
     permission_clear_all($this->getTracker()->getGroupId(), 'PLUGIN_TRACKER_ARTIFACT_ACCESS', $artifact->getId(), false);
     if (!empty($value['u_groups'])) {
         $ok = $this->addPermissions($value['u_groups'], $artifact->getId());
     }
     //save in changeset
     return $this->getValueDao()->create($changeset_value_id, $value['use_artifact_permissions'], $value['u_groups']);
 }
 /**
  * Save the value and return the id
  *
  * @param Tracker_Artifact                $artifact                The artifact
  * @param int                             $changeset_value_id      The id of the changeset_value
  * @param mixed                           $value                   The value submitted by the user
  * @param Tracker_Artifact_ChangesetValue $previous_changesetvalue The data previously stored in the db
  *
  * @return boolean
  */
 protected function saveValue($artifact, $changeset_value_id, $value, Tracker_Artifact_ChangesetValue $previous_changesetvalue = null)
 {
     if (empty($value) || !isset($value[self::USE_IT]) || $value[self::USE_IT] == 0) {
         $value[self::USE_IT] = 0;
         $value['u_groups'] = array();
     }
     $artifact->setUseArtifactPermissions($value[self::USE_IT]);
     permission_clear_all($this->getTracker()->getGroupId(), self::PERMISSION_TYPE, $artifact->getId(), false);
     if (!empty($value['u_groups'])) {
         $ok = $this->addPermissions($value['u_groups'], $artifact->getId());
     }
     //save in changeset
     return $this->getValueDao()->create($changeset_value_id, $value[self::USE_IT], $value['u_groups']);
 }