示例#1
0
 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;
 }