protected static function buildResponseElement($feedbackItem, $response)
    {
        global $wgLang, $wgUser;
        $responseElements = '';
        $id = $feedbackItem->getProperty('id');
        $showResponseBox = true;
        //Do not show response box if there is a response already
        if (isset($response[$id])) {
            $response_detail = $response[$id];
            $responder = User::newFromRow($response_detail);
            if ($responder && !$responder->isAnon()) {
                $responsetime = MoodBarUtil::formatTimeSince(wfTimestamp(TS_UNIX, $response_detail->mbfr_timestamp));
                $permalinkTitle = $feedbackItem->getProperty('user')->getTalkPage()->getFullText();
                $individual_response = wfMsgExt('moodbar-feedback-response-summary', array('parse'), $responder->getUserPage()->getFullText(), $responder->getName(), $permalinkTitle . '#feedback-dashboard-response-' . $response_detail->mbfr_id, $responsetime);
                $showResponseBox = false;
                $responseElements = <<<HTML
\t\t\t\t\t\t\t\t<div class="fbd-item-response">
\t\t\t\t\t\t\t\t\t{$individual_response}
\t\t\t\t\t\t\t\t</div>
HTML;
            }
        } elseif ($showResponseBox && $feedbackItem->getProperty('hidden-state') == false && !$wgUser->isAnon()) {
            //$respondToThis = "<span>".wfMessage('moodbar-respond-collapsed')->escaped().'</span> '.wfMessage("moodbar-respond-text")->escaped();
            $respondToThis = '<span class="fbd-item-response-collapsed"></span> ' . wfMessage("moodbar-respond-text")->escaped();
            $responseElements = <<<HTML
\t\t\t\t<div class="fbd-item-response">
\t\t\t\t\t<a class="fbd-respond-link">{$respondToThis}</a>
\t\t\t\t</div>
HTML;
        }
        return $responseElements;
    }
 /**
  * Get the latest response summary for a set of feedback
  * @param $res Iterator of Db row with index mbf_latest_response for feedback
  * @return array
  */
 public static function getResponseSummary($res)
 {
     $dbr = wfGetDB(DB_SLAVE);
     $mbfrIds = array();
     foreach ($res as $row) {
         if ($row->mbf_latest_response != 0) {
             $mbfrIds[] = $row->mbf_latest_response;
         }
     }
     $response = array();
     if (count($mbfrIds) > 0) {
         $table = array('user', 'moodbar_feedback_response');
         $select = array('mbfr_id', 'mbfr_mbf_id', 'mbfr_timestamp', 'user_id', 'user_name', 'user_real_name');
         $conds = array('mbfr_id' => $mbfrIds, 'mbfr_user_id = user_id');
         $tableJoin = array();
         // Adding markashelpful data if the extension is enabled
         if (MoodBarUtil::isMarkAsHelpfulEnabled()) {
             $table[] = 'moodbar_feedback';
             $table[] = 'mark_as_helpful';
             // Is there a workaround that does not specify INNER JOIN explicitly?
             $tableJoin['moodbar_feedback'] = array('INNER JOIN', 'mbfr_mbf_id = mbf_id');
             $tableJoin['mark_as_helpful'] = array('LEFT JOIN', "mah_type = 'mbresponse' AND mah_item = mbfr_id AND mah_user_id = mbf_user_id");
             $select[] = 'mah_id';
         }
         $res = $dbr->select($table, $select, $conds, __METHOD__, array(), $tableJoin);
         foreach ($res as $row) {
             $response[$row->mbfr_mbf_id] = $row;
         }
     }
     return $response;
 }