/**
  * Display the artifact
  *
  * @param Tracker_IDisplayTrackerLayout  $layout          Displays the page header and footer
  * @param Codendi_Request                $request         The data coming from the user
  * @param User                           $current_user    The current user
  *
  * @return void
  */
 public function display(Tracker_IDisplayTrackerLayout $layout, $request, $current_user)
 {
     $hp = Codendi_HTMLPurifier::instance();
     $tracker = $this->getTracker();
     $title = $hp->purify($tracker->item_name, CODENDI_PURIFIER_CONVERT_HTML) . ' #' . $this->id;
     $breadcrumbs = array(array('title' => $title, 'url' => TRACKER_BASE_URL . '/?aid=' . $this->id));
     $tracker->displayHeader($layout, $title, $breadcrumbs);
     $current_user->addRecentElement($this);
     $from_aid = $request->get('from_aid');
     $html = '';
     $redirect = new Tracker_Artifact_Redirect();
     $redirect->base_url = TRACKER_BASE_URL;
     $redirect->query_parameters = array('aid' => $this->id, 'func' => 'artifact-update');
     if ($from_aid != null) {
         $redirect->query_parameters['from_aid'] = $from_aid;
     }
     EventManager::instance()->processEvent(TRACKER_EVENT_BUILD_ARTIFACT_FORM_ACTION, array('request' => $request, 'redirect' => $redirect));
     $html .= '<form action="' . $redirect->toUrl() . '" method="POST" enctype="multipart/form-data">';
     $html .= '<input type="hidden" value="67108864" name="max_file_size" />';
     $html .= $this->fetchTitleInHierarchy($current_user);
     $html .= $this->fetchFields($request->get('artifact'));
     $html .= $this->fetchFollowUps($current_user, $request->get('artifact_followup_comment'));
     // We don't need History since we have changesets
     //$html .= $this->_fetchHistory();
     $html .= '</form>';
     $trm = new Tracker_RulesManager($tracker);
     $html .= $trm->displayRulesAsJavascript();
     echo $html;
     $tracker->displayFooter($layout);
     exit;
 }