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: </td><td>{$s1} {$e1} {$s2} {$e2} (expected 2 0 1 {$want_e2})</td></tr>" . "<tr><td class=\"nw\">Exit status: </td><td>" . htmlspecialchars($cf->banal_status) . "</td></tr>"; if (trim($cf->banal_stdout)) { $errors .= "<tr><td>Stdout: </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: </td><td><pre class=\"email\">" . htmlspecialchars($cf->banal_stderr) . "</pre></td></tr>"; } } $errors .= "<tr><td>Check: </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; }
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) {
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();