static function encode_email_header($header, $str) { if (preg_match('/[\\r\\n]/', $str)) { $str = simplify_whitespace($str); } $text = $header; $linelen = strlen($text); // separate $str into emails, quote each separately while (true) { // try three types of match in turn: // 1. name <email> [RFC 822] $match = preg_match("/\\A[,\\s]*((?:(?:\"(?:[^\"\\\\]|\\\\.)*\"|[^\\s\\000-\\037()[\\]<>@,;:\\\\\".]+)\\s*?)*)\\s*<\\s*(.*?)\\s*>\\s*(.*)\\z/s", $str, $m); // 2. name including periods but no quotes <email> (canonicalize) if (!$match) { $match = preg_match("/\\A[,\\s]*((?:[^\\s\\000-\\037()[\\]<>@,;:\\\\\"]+\\s*?)*)\\s*<\\s*(.*?)\\s*>\\s*(.*)\\z/s", $str, $m); if ($match) { $m[1] = "\"{$m['1']}\""; } } // 3. bare email if (!$match) { $match = preg_match("/\\A[,\\s]*()<?\\s*([^\\s\\000-\\037()[\\]<>,;:\\\\\"]+)\\s*>?\\s*(.*)\\z/s", $str, $m); } // otherwise, fail if (!$match) { break; } list($name, $email, $str) = array($m[1], $m[2], $m[3]); if (strpos($email, "@") !== false && !validate_email($email)) { return false; } if ($str != "" && $str[0] != ",") { return false; } if ($email == "none" || $email == "hidden") { continue; } if ($text !== $header) { $text .= ", "; $linelen += 2; } // unquote any existing UTF-8 encoding if ($name != "" && $name[0] == "=" && strcasecmp(substr($name, 0, 10), "=?utf-8?q?") == 0) { $name = self::decode_header($name); } $utf8 = preg_match('/[\\x80-\\xFF]/', $name) ? 2 : 0; if ($name != "" && $name[0] == "\"" && preg_match("/\\A\"([^\\\\\"]|\\\\.)*\"\\z/s", $name)) { if ($utf8) { self::append($text, $linelen, substr($name, 1, -1), $utf8); } else { self::append($text, $linelen, $name, false); } } else { if ($utf8) { self::append($text, $linelen, $name, $utf8); } else { self::append($text, $linelen, rfc2822_words_quote($name), false); } } if ($name == "") { self::append($text, $linelen, $email, false); } else { self::append($text, $linelen, " <{$email}>", false); } } if (!preg_match('/\\A[\\s,]*\\z/', $str)) { return false; } return $text; }
private function crosscheck_options() { global $Opt, $ConfSitePATH; // set longName, downloadPrefix, etc. $confid = $Opt["confid"]; if ((!isset($Opt["longName"]) || $Opt["longName"] == "") && (!isset($Opt["shortName"]) || $Opt["shortName"] == "")) { $Opt["shortNameDefaulted"] = true; $Opt["longName"] = $Opt["shortName"] = $confid; } else { if (!isset($Opt["longName"]) || $Opt["longName"] == "") { $Opt["longName"] = $Opt["shortName"]; } else { if (!isset($Opt["shortName"]) || $Opt["shortName"] == "") { $Opt["shortName"] = $Opt["longName"]; } } } if (!isset($Opt["downloadPrefix"]) || $Opt["downloadPrefix"] == "") { $Opt["downloadPrefix"] = $confid . "-"; } self::$gShortName = $Opt["shortName"]; self::$gLongName = $Opt["longName"]; // expand ${confid}, ${confshortname} foreach (array("sessionName", "downloadPrefix", "conferenceSite", "paperSite", "defaultPaperSite", "contactName", "contactEmail", "docstore") as $k) { if (isset($Opt[$k]) && is_string($Opt[$k]) && strpos($Opt[$k], "\$") !== false) { $Opt[$k] = preg_replace(',\\$\\{confid\\}|\\$confid\\b,', $confid, $Opt[$k]); $Opt[$k] = preg_replace(',\\$\\{confshortname\\}|\\$confshortname\\b,', $Opt["shortName"], $Opt[$k]); } } foreach (array("emailFrom", "emailSender", "emailCc", "emailReplyTo") as $k) { if (isset($Opt[$k]) && is_string($Opt[$k]) && strpos($Opt[$k], "\$") !== false) { $Opt[$k] = preg_replace(',\\$\\{confid\\}|\\$confid\\b,', $confid, $Opt[$k]); if (strpos($Opt[$k], "confshortname") !== false) { $v = rfc2822_words_quote($Opt["shortName"]); if ($v[0] === "\"" && strpos($Opt[$k], "\"") !== false) { $v = substr($v, 1, strlen($v) - 2); } $Opt[$k] = preg_replace(',\\$\\{confshortname\\}|\\$confshortname\\b,', $v, $Opt[$k]); } } } // remove final slash from $Opt["paperSite"] if (!isset($Opt["paperSite"]) || $Opt["paperSite"] == "") { $Opt["paperSite"] = Navigation::site_absolute(); } if ($Opt["paperSite"] == "" && isset($Opt["defaultPaperSite"])) { $Opt["paperSite"] = $Opt["defaultPaperSite"]; } $Opt["paperSite"] = preg_replace('|/+\\z|', "", $Opt["paperSite"]); // option name updates (backwards compatibility) foreach (array("assetsURL" => "assetsUrl", "jqueryURL" => "jqueryUrl", "jqueryCDN" => "jqueryCdn", "disableCSV" => "disableCsv") as $kold => $knew) { if (isset($Opt[$kold]) && !isset($Opt[$knew])) { $Opt[$knew] = $Opt[$kold]; } } // set assetsUrl and scriptAssetsUrl if (!isset($Opt["scriptAssetsUrl"]) && isset($_SERVER["HTTP_USER_AGENT"]) && strpos($_SERVER["HTTP_USER_AGENT"], "MSIE") !== false) { $Opt["scriptAssetsUrl"] = Navigation::siteurl(); } if (!isset($Opt["assetsUrl"])) { $Opt["assetsUrl"] = Navigation::siteurl(); } if ($Opt["assetsUrl"] !== "" && !str_ends_with($Opt["assetsUrl"], "/")) { $Opt["assetsUrl"] .= "/"; } if (!isset($Opt["scriptAssetsUrl"])) { $Opt["scriptAssetsUrl"] = $Opt["assetsUrl"]; } Ht::$img_base = $Opt["assetsUrl"] . "images/"; // set docstore if (get($Opt, "docstore") === true) { $Opt["docstore"] = "docs"; } else { if (!get($Opt, "docstore") && get($Opt, "filestore")) { // backwards compat if (($Opt["docstore"] = $Opt["filestore"]) === true) { $Opt["docstore"] = "filestore"; } $Opt["docstoreSubdir"] = get($Opt, "filestoreSubdir"); } } if (get($Opt, "docstore") && $Opt["docstore"][0] !== "/") { $Opt["docstore"] = $ConfSitePATH . "/" . $Opt["docstore"]; } // handle timezone if (function_exists("date_default_timezone_set")) { if (isset($Opt["timezone"])) { if (!date_default_timezone_set($Opt["timezone"])) { self::msg_error("Timezone option “" . htmlspecialchars($Opt["timezone"]) . "” is invalid; falling back to “America/New_York”."); date_default_timezone_set("America/New_York"); } } else { if (!ini_get("date.timezone") && !getenv("TZ")) { date_default_timezone_set("America/New_York"); } } } // set safePasswords if (!get($Opt, "safePasswords") || is_int($Opt["safePasswords"]) && $Opt["safePasswords"] < 1) { $Opt["safePasswords"] = 0; } else { if ($Opt["safePasswords"] === true) { $Opt["safePasswords"] = 1; } } if (!isset($Opt["contactdb_safePasswords"])) { $Opt["contactdb_safePasswords"] = $Opt["safePasswords"]; } // set defaultFormat self::$gDefaultFormat = (int) get($Opt, "defaultFormat"); self::$gFormatInfo = null; }