public function parse($sv, $si)
 {
     global $Conf, $ConfSitePATH;
     if (!isset($sv->req["sub_banal"])) {
         $sv->save("sub_banal", 0);
         return false;
     }
     // check banal subsettings
     $old_error_count = $sv->error_count();
     $bs = array_fill(0, 6, "");
     if (($s = trim(defval($sv->req, "sub_banal_papersize", ""))) != "" && strcasecmp($s, "any") != 0 && strcasecmp($s, "N/A") != 0) {
         $ses = preg_split('/\\s*,\\s*|\\s+OR\\s+/i', $s);
         $sout = array();
         foreach ($ses as $ss) {
             if ($ss != "" && CheckFormat::parse_dimen($ss, 2)) {
                 $sout[] = $ss;
             } else {
                 if ($ss != "") {
                     $sv->set_error("sub_banal_papersize", "Invalid paper size.");
                     $sout = null;
                     break;
                 }
             }
         }
         if ($sout && count($sout)) {
             $bs[0] = join(" OR ", $sout);
         }
     }
     if (($s = trim(defval($sv->req, "sub_banal_pagelimit", ""))) != "" && strcasecmp($s, "N/A") != 0) {
         if (($sx = cvtint($s, -1)) > 0) {
             $bs[1] = $sx;
         } else {
             if (preg_match('/\\A(\\d+)\\s*-\\s*(\\d+)\\z/', $s, $m) && $m[1] > 0 && $m[2] > 0 && $m[1] <= $m[2]) {
                 $bs[1] = +$m[1] . "-" . +$m[2];
             } else {
                 $sv->set_error("sub_banal_pagelimit", "Page limit must be a whole number bigger than 0, or a page range such as <code>2-4</code>.");
             }
         }
     }
     if (($s = trim(defval($sv->req, "sub_banal_columns", ""))) != "" && strcasecmp($s, "any") != 0 && strcasecmp($s, "N/A") != 0) {
         if (($sx = cvtint($s, -1)) >= 0) {
             $bs[2] = $sx > 0 ? $sx : $bs[2];
         } else {
             $sv->set_error("sub_banal_columns", "Columns must be a whole number.");
         }
     }
     if (($s = trim(defval($sv->req, "sub_banal_textblock", ""))) != "" && strcasecmp($s, "any") != 0 && strcasecmp($s, "N/A") != 0) {
         // change margin specifications into text block measurements
         if (preg_match('/^(.*\\S)\\s+mar(gins?)?/i', $s, $m)) {
             $s = $m[1];
             if (!($ps = CheckFormat::parse_dimen($bs[0]))) {
                 $sv->set_error("sub_banal_pagesize", "You must specify a page size as well as margins.");
                 $sv->set_error("sub_banal_textblock");
             } else {
                 if (strpos($s, "x") !== false) {
                     if (!($m = CheckFormat::parse_dimen($s)) || !is_array($m) || count($m) > 4) {
                         $sv->set_error("sub_banal_textblock", "Invalid margin definition.");
                         $s = "";
                     } else {
                         if (count($m) == 2) {
                             $s = array($ps[0] - 2 * $m[0], $ps[1] - 2 * $m[1]);
                         } else {
                             if (count($m) == 3) {
                                 $s = array($ps[0] - 2 * $m[0], $ps[1] - $m[1] - $m[2]);
                             } else {
                                 $s = array($ps[0] - $m[0] - $m[2], $ps[1] - $m[1] - $m[3]);
                             }
                         }
                     }
                 } else {
                     $s = preg_replace('/\\s+/', 'x', $s);
                     if (!($m = CheckFormat::parse_dimen($s)) || is_array($m) && count($m) > 4) {
                         $sv->set_error("sub_banal_textblock", "Invalid margin definition.");
                     } else {
                         if (!is_array($m)) {
                             $s = array($ps[0] - 2 * $m, $ps[1] - 2 * $m);
                         } else {
                             if (count($m) == 2) {
                                 $s = array($ps[0] - 2 * $m[1], $ps[1] - 2 * $m[0]);
                             } else {
                                 if (count($m) == 3) {
                                     $s = array($ps[0] - 2 * $m[1], $ps[1] - $m[0] - $m[2]);
                                 } else {
                                     $s = array($ps[0] - $m[1] - $m[3], $ps[1] - $m[0] - $m[2]);
                                 }
                             }
                         }
                     }
                 }
             }
             $s = is_array($s) ? CheckFormat::unparse_dimen($s) : "";
         }
         // check text block measurements
         if ($s && !CheckFormat::parse_dimen($s, 2)) {
             $sv->set_error("sub_banal_textblock", "Invalid text block definition.");
         } else {
             if ($s) {
                 $bs[3] = $s;
             }
         }
     }
     if (($s = trim(defval($sv->req, "sub_banal_bodyfontsize", ""))) != "" && strcasecmp($s, "any") != 0 && strcasecmp($s, "N/A") != 0) {
         if (!is_numeric($s) || $s <= 0) {
             $sv->error("sub_banal_bodyfontsize", "Minimum body font size must be a number bigger than 0.");
         } else {
             $bs[4] = $s;
         }
     }
     if (($s = trim(defval($sv->req, "sub_banal_bodyleading", ""))) != "" && strcasecmp($s, "any") != 0 && strcasecmp($s, "N/A") != 0) {
         if (!is_numeric($s) || $s <= 0) {
             $sv->error("sub_banal_bodyleading", "Minimum body leading must be a number bigger than 0.");
         } else {
             $bs[5] = $s;
         }
     }
     if ($sv->error_count() != $old_error_count) {
         return false;
     }
     // Perhaps we have an old pdftohtml with a bad -zoom.
     $zoomarg = "";
     for ($tries = 0; $tries < 2; ++$tries) {
         $cf = new CheckFormat();
         $s1 = $cf->check_file("{$ConfSitePATH}/src/sample.pdf", "letter;2;;6.5inx9in;12;14" . $zoomarg);
         $e1 = $cf->errors;
         if ($s1 == 1 && $e1 & CheckFormat::ERR_PAPERSIZE && $tries == 0) {
             $zoomarg = ">-zoom=1";
         } else {
             if ($s1 != 2 && $tries == 1) {
                 $zoomarg = "";
             }
         }
     }
     // actually create setting
     while (count($bs) > 0 && $bs[count($bs) - 1] == "") {
         array_pop($bs);
     }
     $sv->save("sub_banal_data", join(";", $bs) . $zoomarg);
     $e1 = $cf->errors;
     $s2 = $cf->check_file("{$ConfSitePATH}/src/sample.pdf", "a4;1;;3inx3in;14;15" . $zoomarg);
     $e2 = $cf->errors;
     $want_e2 = CheckFormat::ERR_PAPERSIZE | CheckFormat::ERR_PAGELIMIT | CheckFormat::ERR_TEXTBLOCK | CheckFormat::ERR_BODYFONTSIZE | CheckFormat::ERR_BODYLEADING;
     if ($s1 != 2 || $e1 != 0 || $s2 != 1 || ($e2 & $want_e2) != $want_e2) {
         $errors = "<div class=\"fx\"><table><tr><td>Analysis:&nbsp;</td><td>{$s1} {$e1} {$s2} {$e2} (expected 2 0 1 {$want_e2})</td></tr>" . "<tr><td class=\"nw\">Exit status:&nbsp;</td><td>" . htmlspecialchars($cf->banal_status) . "</td></tr>";
         if (trim($cf->banal_stdout)) {
             $errors .= "<tr><td>Stdout:&nbsp;</td><td><pre class=\"email\">" . htmlspecialchars($cf->banal_stdout) . "</pre></td></tr>";
         }
         if (trim($cf->banal_stdout)) {
             if (trim($cf->banal_stderr)) {
                 $errors .= "<tr><td>Stderr:&nbsp;</td><td><pre class=\"email\">" . htmlspecialchars($cf->banal_stderr) . "</pre></td></tr>";
             }
         }
         $errors .= "<tr><td>Check:&nbsp;</td><td>" . join("<br />\n", array_map(function ($x) {
             return $x[1];
         }, $cf->msgs)) . "</td></tr>";
         $sv->set_warning(null, "Running the automated paper checker on a sample PDF file produced unexpected results. You should disable it for now. <div id=\"foldbanal_warning\" class=\"foldc\">" . foldbutton("banal_warning", 0, "Checker output") . $errors . "</table></div></div>");
     }
     return false;
 }
 function run(Contact $user, $qreq, $ssel)
 {
     global $Conf;
     $result = Dbl::qe_raw($Conf->paperQuery($user, ["paperId" => $ssel->selection()]));
     $papers = [];
     while ($prow = PaperInfo::fetch($result, $user)) {
         if ($user->can_view_pdf($prow)) {
             $papers[$prow->paperId] = $prow;
         }
     }
     $csvg = downloadCSV(false, ["paper", "title", "pages", "format"], "formatcheck");
     echo $csvg->headerline;
     $format = $Conf->setting_data("sub_banal", "");
     foreach ($ssel->reorder($papers) as $prow) {
         $pages = "?";
         if ($prow->mimetype == "application/pdf") {
             $cf = new CheckFormat();
             $dtype = $prow->finalPaperStorageId ? DTYPE_FINAL : DTYPE_SUBMISSION;
             if ($cf->analyzePaper($prow->paperId, $dtype, $format)) {
                 $format = array();
                 foreach (CheckFormat::$error_types as $en => $etxt) {
                     if ($cf->errors & $en) {
                         $format[] = $etxt;
                     }
                 }
                 $format = empty($format) ? "ok" : join(",", $format);
                 $pages = $cf->pages;
             } else {
                 $format = "error";
             }
         } else {
             $format = "notpdf";
         }
         echo $prow->paperId, ",", CsvGenerator::quote($prow->title), ",", $pages, ",", CsvGenerator::quote($format), "\n";
         ob_flush();
         flush();
     }
     exit;
 }
Example #3
0
    PaperActions::setReviewPreference($prow);
    loadRows();
}
if (isset($_REQUEST["setfollow"]) && $prow && check_post()) {
    PaperActions::set_follow($prow);
    loadRows();
}
if ($prow && isset($_GET["m"]) && $_GET["m"] === "api" && isset($_GET["fn"]) && isset(SiteLoader::$api_map[$_GET["fn"]])) {
    $Qreq = make_qreq();
    SiteLoader::call_api($Qreq->fn, $Me, $Qreq, $prow);
    json_exit(["ok" => false, "error" => "Internal error."]);
}
// check paper action
if (isset($_REQUEST["checkformat"]) && $prow && $Conf->setting("sub_banal")) {
    $ajax = defval($_REQUEST, "ajax", 0);
    $cf = new CheckFormat();
    $dt = HotCRPDocument::parse_dtype(@$_REQUEST["dt"]);
    if ($dt === null) {
        $dt = @$_REQUEST["final"] ? DTYPE_FINAL : DTYPE_SUBMISSION;
    }
    if ($Conf->setting("sub_banal{$dt}")) {
        $format = $Conf->setting_data("sub_banal{$dt}", "");
    } else {
        $format = $Conf->setting_data("sub_banal", "");
    }
    $status = $cf->analyzePaper($prow->paperId, $dt, $format);
    // chairs get a hint message about multiple checking
    if ($Me->privChair) {
        $nbanal = $Conf->session("nbanal", 0) + 1;
        $Conf->save_session("nbanal", $nbanal);
        if ($nbanal >= 3 && $nbanal <= 6) {
Example #4
0
                    echo "Microsoft Word 2003 WordprocessingML format.";
                    break;
                case java_values($loadFormat->HTML):
                    echo "HTML format.";
                    break;
                case java_values($loadFormat->MHTML):
                    echo "MHTML (Web archive) format.";
                    break;
                case java_values($loadFormat->ODT):
                    echo "OpenDocument Text.";
                    break;
                case java_values($loadFormat->OTT):
                    echo "OpenDocument Text Template.";
                    break;
                case java_values($loadFormat->DOC_PRE_WORD_97):
                    echo "MS Word 6 or Word 95 format.";
                    break;
                case java_values($loadFormat->UNKNOWN):
                default:
                    echo "Unknown format.";
                    break;
            }
            echo '<br/>';
            $destFileObj = new Java("java.io.File", $supportedDir . $nameOnly);
            $destFile = $destFileObj->getPath();
            copy(java_values($fileName), java_values($destFile));
        }
    }
}
CheckFormat::check();