public function content($pl, $row, $rowidx)
 {
     // see also search.php > getaction == "reviewers"
     if (!isset($pl->review_list[$row->paperId])) {
         return "";
     }
     $prefs = $topics = false;
     if ($pl->contact->privChair) {
         $prefs = $row->reviewer_preferences();
         $topics = $this->topics && $row->has_topics();
     }
     $pcm = null;
     if ($pl->contact->isPC) {
         $pcm = pcMembers();
     }
     $x = array();
     foreach ($pl->review_list[$row->paperId] as $xrow) {
         $ranal = new PaperListReviewAnalysis($xrow);
         $n = $pl->contact->reviewer_html_for($xrow) . " " . $ranal->icon_html(false);
         if ($prefs || $topics) {
             $pref = get($prefs, $xrow->contactId);
             if ($topics) {
                 $pref[2] = $row->topic_interest_score((int) $xrow->contactId);
             }
             $n .= unparse_preference_span($pref);
         }
         $x[] = '<span class="nw">' . $n . '</span>';
     }
     return $pl->maybeConflict($row, join(", ", $x), $pl->contact->can_view_review_identity($row, null, false));
 }
         $revtype = -1;
     } else {
         if ($p->reviewType) {
             $revtype = $p->reviewType;
         } else {
             $revtype = $p->refused ? -3 : 0;
         }
     }
     $title = $p->refused ? "Review previously declined" : "Assignment";
     // NB manualassign.php also uses the "pcs$contactId" convention
     echo '<div class="pctbass">' . '<div id="foldass' . $p->contactId . '" class="foldc" style="position:relative">' . '<a id="folderass' . $p->contactId . '" href="#" onclick="return assigntable.open(' . $p->contactId . ')">' . review_type_icon($revtype, false, $title) . Ht::img("_.gif", ">", array("class" => "next")) . '</a>&nbsp;' . Ht::hidden("pcs{$p->contactId}", $p->conflictType == 0 ? $p->reviewType : -1, array("id" => "pcs{$p->contactId}")) . '</div></div>';
     echo '<div id="ass' . $p->contactId . '" class="pctbname pctbname' . $revtype . '">' . '<span class="taghl nw">' . $Me->name_html_for($pc) . '</span>';
     if ($p->conflictType == 0) {
         $p->topicInterestScore = $prow->topic_interest_score($pc);
         if ($p->reviewerPreference || $p->reviewerExpertise || $p->topicInterestScore) {
             echo unparse_preference_span($p);
         }
     }
     echo '</div>';
 }
 // then, number of reviews
 echo '<div class="pctbnrev">';
 $numReviews = strlen($p->allReviews);
 $numPrimary = preg_match_all("|" . REVIEW_PRIMARY . "|", $p->allReviews, $matches);
 if (!$numReviews) {
     echo "0 reviews";
 } else {
     echo "<a class='q' href=\"" . hoturl("search", "q=re:" . urlencode($pc->email)) . "\">" . plural($numReviews, "review") . "</a>";
     if ($numPrimary && $numPrimary < $numReviews) {
         echo "&nbsp; (<a class='q' href=\"" . hoturl("search", "q=pri:" . urlencode($pc->email)) . "\">{$numPrimary} primary</a>)";
     }
 function unparse_display(AssignmentSet $aset)
 {
     if (!$this->cid) {
         return "remove all preferences";
     }
     $aset->show_column("allpref");
     return $aset->contact()->reviewer_html_for($this->contact) . " " . unparse_preference_span(array($this->pref, $this->exp), true);
 }