예제 #1
0
 function can_change_tag(PaperInfo $prow, $tag, $previndex, $index, $forceShow = null)
 {
     global $Conf;
     if ($forceShow === ALWAYS_OVERRIDE) {
         return true;
     }
     $rights = $this->rights($prow, $forceShow);
     if (!($rights->allow_pc && ($rights->can_administer || $Conf->timePCViewPaper($prow, false)))) {
         if ($this->privChair && TagInfo::has_sitewide() && (!$tag || ($t = TagInfo::defined_tag($tag)) && $t->sitewide)) {
             return true;
         }
         return false;
     }
     if (!$tag) {
         return true;
     }
     $tag = TagInfo::base($tag);
     $twiddle = strpos($tag, "~");
     if ($twiddle === 0 && $tag[1] === "~") {
         return $rights->can_administer;
     }
     if ($twiddle > 0 && substr($tag, 0, $twiddle) != $this->contactId && !$rights->can_administer) {
         return false;
     }
     if ($twiddle !== false) {
         $t = TagInfo::defined_tag(substr($tag, $twiddle + 1));
         return !($t && $t->vote && $index < 0);
     } else {
         $t = TagInfo::defined_tag($tag);
         return !$t || ($rights->can_administer || $this->privChair && $t->sitewide || !$t->chair && !$t->rank) && !$t->vote && !$t->approval;
     }
 }