Пример #1
0
 public function activate()
 {
     global $Conf, $Opt, $Now;
     $this->activated_ = true;
     $trueuser = get($_SESSION, "trueuser");
     $truecontact = null;
     // Handle actas requests
     $actas = req("actas");
     if ($actas && $trueuser) {
         if (is_numeric($actas)) {
             $actasemail = self::email_by_id($actas);
         } else {
             if ($actas === "admin") {
                 $actasemail = $trueuser->email;
             } else {
                 $actasemail = $actas;
             }
         }
         unset($_GET["actas"], $_POST["actas"], $_REQUEST["actas"]);
         if ($actasemail && strcasecmp($actasemail, $this->email) != 0 && (strcasecmp($actasemail, $trueuser->email) == 0 || $this->privChair || ($truecontact = self::find_by_email($trueuser->email)) && $truecontact->privChair) && ($actascontact = self::find_by_email($actasemail))) {
             if ($actascontact->email !== $trueuser->email) {
                 hoturl_defaults(array("actas" => $actascontact->email));
                 $_SESSION["last_actas"] = $actascontact->email;
             }
             if ($this->privChair || $truecontact && $truecontact->privChair) {
                 self::$trueuser_privChair = $actascontact;
             }
             return $actascontact->activate();
         }
     }
     // Handle invalidate-caches requests
     if (req("invalidatecaches") && $this->privChair) {
         unset($_GET["invalidatecaches"], $_POST["invalidatecaches"], $_REQUEST["invalidatecaches"]);
         $Conf->invalidateCaches();
     }
     // If validatorContact is set, use it
     if ($this->contactId <= 0 && get($Opt, "validatorContact") && req("validator")) {
         unset($_GET["validator"], $_POST["validator"], $_REQUEST["validator"]);
         if ($newc = self::find_by_email($Opt["validatorContact"])) {
             $this->activated_ = false;
             return $newc->activate();
         }
     }
     // Add capabilities from session and request
     if (!get($Opt, "disableCapabilities")) {
         if ($caps = $Conf->session("capabilities")) {
             $this->capabilities = $caps;
             ++self::$rights_version;
         }
         if (isset($_REQUEST["cap"]) || isset($_REQUEST["testcap"])) {
             $this->activate_capabilities();
         }
     }
     // Add review tokens from session
     if ($rtokens = $Conf->session("rev_tokens")) {
         $this->review_tokens_ = $rtokens;
         ++self::$rights_version;
     }
     // Maybe auto-create a user
     if ($trueuser && $this->update_trueuser(false) && !$this->has_database_account() && $Conf->session("trueuser_author_check", 0) + 600 < $Now) {
         $Conf->save_session("trueuser_author_check", $Now);
         $aupapers = self::email_authored_papers($trueuser->email, $trueuser);
         if (count($aupapers)) {
             return $this->activate_database_account();
         }
     }
     // Maybe set up the shared contacts database
     if (get($Opt, "contactdb_dsn") && $this->has_database_account() && $Conf->session("contactdb_roles", 0) != $this->all_roles()) {
         if ($this->contactdb_update()) {
             $Conf->save_session("contactdb_roles", $this->all_roles());
         }
     }
     // Check forceShow
     self::$active_forceShow = $this->privChair && req("forceShow");
     return $this;
 }
Пример #2
0
 public function activate()
 {
     global $Now;
     $this->activated_ = true;
     $trueuser = get($_SESSION, "trueuser");
     $truecontact = null;
     // Handle actas requests
     $actas = req("actas");
     if ($actas && $trueuser) {
         if (is_numeric($actas)) {
             $acct = $this->conf->user_by_query("contactId=? or huid=? order by contactId=? desc limit 1", [$actas, $actas, $actas]);
             $actasemail = $acct ? $acct->email : null;
         } else {
             if ($actas === "admin") {
                 $actasemail = $trueuser->email;
             } else {
                 $actasemail = $actas;
             }
         }
         unset($_GET["actas"], $_POST["actas"], $_REQUEST["actas"]);
         if ($actasemail && strcasecmp($actasemail, $this->email) != 0 && (strcasecmp($actasemail, $trueuser->email) == 0 || $this->privChair || ($truecontact = $this->conf->user_by_email($trueuser->email)) && $truecontact->privChair) && ($actascontact = $this->conf->user_by_whatever($actasemail))) {
             $this->conf->save_session("l", null);
             if ($actascontact->email !== $trueuser->email) {
                 hoturl_defaults(array("actas" => $actascontact->email));
                 $_SESSION["last_actas"] = $actascontact->email;
             }
             if ($this->privChair || $truecontact && $truecontact->privChair) {
                 self::$trueuser_privChair = $actascontact;
             }
             return $actascontact->activate();
         }
     }
     // Handle invalidate-caches requests
     if (req("invalidatecaches") && $this->privChair) {
         unset($_GET["invalidatecaches"], $_POST["invalidatecaches"], $_REQUEST["invalidatecaches"]);
         $this->conf->invalidate_caches();
     }
     // If validatorContact is set, use it
     if ($this->contactId <= 0 && req("validator") && ($vc = $this->conf->opt("validatorContact"))) {
         unset($_GET["validator"], $_POST["validator"], $_REQUEST["validator"]);
         if ($newc = $this->conf->user_by_email($vc)) {
             $this->activated_ = false;
             return $newc->activate();
         }
     }
     // Add capabilities from session and request
     if (!$this->conf->opt("disableCapabilities")) {
         if ($caps = $this->conf->session("capabilities")) {
             $this->capabilities = $caps;
             ++self::$rights_version;
         }
         if (isset($_REQUEST["cap"]) || isset($_REQUEST["testcap"])) {
             $this->activate_capabilities();
         }
     }
     // Maybe set up the shared contacts database
     if ($this->conf->opt("contactdb_dsn") && $this->has_database_account() && $this->conf->session("contactdb_roles", 0) != $this->all_roles()) {
         if ($this->contactdb_update()) {
             $this->conf->save_session("contactdb_roles", $this->all_roles());
         }
     }
     // Check forceShow
     self::$active_forceShow = $this->privChair && req("forceShow");
     return $this;
 }
Пример #3
0
 private function header_head($title)
 {
     global $Me, $ConfSitePATH, $CurrentList;
     echo "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n<meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />\n<meta http-equiv=\"Content-Script-Type\" content=\"text/javascript\" />\n<meta http-equiv=\"Content-Language\" content=\"en\" />\n<meta name=\"google\" content=\"notranslate\" />\n";
     if (strstr($title, "<") !== false) {
         $title = preg_replace("/<([^>\"']|'[^']*'|\"[^\"]*\")*>/", "", $title);
     }
     echo $this->opt("fontScript", "");
     echo $this->make_css_link("stylesheets/style.css"), "\n";
     if ($this->opt("mobileStylesheet")) {
         echo '<meta name="viewport" content="width=device-width, initial-scale=1">', "\n";
         echo $this->make_css_link("stylesheets/mobile.css", "screen and (max-width: 768px)"), "\n";
     }
     foreach (mkarray($this->opt("stylesheets", [])) as $css) {
         echo $this->make_css_link($css), "\n";
     }
     // favicon
     $favicon = $this->opt("favicon");
     if ($favicon) {
         if (strpos($favicon, "://") === false && $favicon[0] != "/") {
             if ($this->opt["assetsUrl"] && substr($favicon, 0, 7) === "images/") {
                 $favicon = $this->opt["assetsUrl"] . $favicon;
             } else {
                 $favicon = Navigation::siteurl() . $favicon;
             }
         }
         if (substr($favicon, -4) == ".png") {
             echo "<link rel=\"icon\" type=\"image/png\" href=\"{$favicon}\" />\n";
         } else {
             if (substr($favicon, -4) == ".ico") {
                 echo "<link rel=\"shortcut icon\" href=\"{$favicon}\" />\n";
             } else {
                 if (substr($favicon, -4) == ".gif") {
                     echo "<link rel=\"icon\" type=\"image/gif\" href=\"{$favicon}\" />\n";
                 } else {
                     echo "<link rel=\"icon\" href=\"{$favicon}\" />\n";
                 }
             }
         }
     }
     // jQuery
     if (isset($this->opt["jqueryUrl"])) {
         $jquery = $this->opt["jqueryUrl"];
     } else {
         if ($this->opt("jqueryCdn")) {
             $jquery = "//code.jquery.com/jquery-1.12.3.min.js";
         } else {
             $jquery = "scripts/jquery-1.12.3.min.js";
         }
     }
     Ht::stash_html($this->make_script_file($jquery, true) . "\n");
     Ht::stash_html($this->make_script_file("scripts/jquery.color-2.1.2.min.js", true) . "\n");
     Ht::stash_html($this->make_script_file("scripts/jquery.flot.min.js", true) . "\n");
     //Ht::stash_html($this->make_script_file("scripts/ZeroClipboard.min.js", true) . "\n");
     // Javascript settings to set before script.js
     Ht::stash_script("siteurl=" . json_encode(Navigation::siteurl()) . ";siteurl_suffix=\"" . Navigation::php_suffix() . "\"");
     if (session_id() !== "") {
         Ht::stash_script("siteurl_postvalue=\"" . post_value() . "\"");
     }
     if (@$CurrentList && ($list = SessionList::lookup($CurrentList))) {
         Ht::stash_script("hotcrp_list={num:{$CurrentList},id:\"" . addcslashes($list->listid, "\n\r\\\"/") . "\"}");
     }
     if ($urldefaults = hoturl_defaults()) {
         Ht::stash_script("siteurl_defaults=" . json_encode($urldefaults) . ";");
     }
     Ht::stash_script("assetsurl=" . json_encode($this->opt["assetsUrl"]) . ";");
     $huser = (object) array();
     if ($Me && $Me->email) {
         $huser->email = $Me->email;
     }
     if ($Me && $Me->is_pclike()) {
         $huser->is_pclike = true;
     }
     Ht::stash_script("hotcrp_user="******"ZeroClipboard.setDefaults({moviePath:\"" . Navigation::siteurl() . "cacheable" . Navigation::php_suffix() . "?file=scripts/ZeroClipboard.swf&amp;mtime=" . filemtime("$ConfSitePATH/scripts/ZeroClipboard.swf") . "\"})");
     // script.js
     if (!$this->opt("noDefaultScript")) {
         Ht::stash_html($this->make_script_file("scripts/script.js") . "\n");
     }
     echo Ht::unstash();
     echo "<title>";
     if ($title) {
         echo $title, " - ";
     }
     echo htmlspecialchars($this->short_name), "</title>\n</head>\n";
 }
Пример #4
0
 private function header_head($title)
 {
     global $Me, $ConfSitePATH, $Opt;
     // load session list and clear its cookie
     $list = SessionList::active();
     SessionList::set_requested(0);
     echo "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n<meta name=\"google\" content=\"notranslate\" />\n";
     if (isset($Opt["fontScript"])) {
         echo $Opt["fontScript"];
     }
     echo $this->make_css_link("stylesheets/style.css"), "\n";
     if (get($Opt, "mobileStylesheet")) {
         echo '<meta name="viewport" content="width=device-width, initial-scale=1">', "\n";
         echo $this->make_css_link("stylesheets/mobile.css", "screen and (max-width: 768px)"), "\n";
     }
     if (isset($Opt["stylesheets"])) {
         foreach (mkarray($Opt["stylesheets"]) as $css) {
             echo $this->make_css_link($css), "\n";
         }
     }
     // favicon
     if ($favicon = defval($Opt, "favicon", "images/review24.png")) {
         if (strpos($favicon, "://") === false && $favicon[0] != "/") {
             if (get($Opt, "assetsUrl") && substr($favicon, 0, 7) === "images/") {
                 $favicon = $Opt["assetsUrl"] . $favicon;
             } else {
                 $favicon = Navigation::siteurl() . $favicon;
             }
         }
         if (substr($favicon, -4) == ".png") {
             echo "<link rel=\"icon\" type=\"image/png\" href=\"{$favicon}\" />\n";
         } else {
             if (substr($favicon, -4) == ".ico") {
                 echo "<link rel=\"shortcut icon\" href=\"{$favicon}\" />\n";
             } else {
                 if (substr($favicon, -4) == ".gif") {
                     echo "<link rel=\"icon\" type=\"image/gif\" href=\"{$favicon}\" />\n";
                 } else {
                     echo "<link rel=\"icon\" href=\"{$favicon}\" />\n";
                 }
             }
         }
     }
     // title
     echo "<title>";
     if ($title) {
         $title = preg_replace("/<([^>\"']|'[^']*'|\"[^\"]*\")*>/", "", $title);
         $title = preg_replace(",(?: |&nbsp;| )+,", " ", $title);
         $title = str_replace("&#x2215;", "-", $title);
     }
     if ($title) {
         echo $title, " - ";
     }
     echo htmlspecialchars($Opt["shortName"]), "</title>\n</head>\n";
     // jQuery
     $stash = Ht::take_stash();
     if (isset($Opt["jqueryUrl"])) {
         $jquery = $Opt["jqueryUrl"];
     } else {
         if (get($Opt, "jqueryCdn")) {
             $jquery = "//code.jquery.com/jquery-1.12.3.min.js";
         } else {
             $jquery = "scripts/jquery-1.12.3.min.js";
         }
     }
     Ht::stash_html($this->make_script_file($jquery, true) . "\n");
     // Javascript settings to set before script.js
     Ht::stash_script("siteurl=" . json_encode(Navigation::siteurl()) . ";siteurl_suffix=\"" . Navigation::php_suffix() . "\"");
     if (session_id() !== "") {
         Ht::stash_script("siteurl_postvalue=\"" . post_value() . "\"");
     }
     if ($list) {
         Ht::stash_script("hotcrp_list=" . json_encode(["num" => $list->listno, "id" => $list->listid]) . ";");
     }
     if ($urldefaults = hoturl_defaults()) {
         Ht::stash_script("siteurl_defaults=" . json_encode($urldefaults) . ";");
     }
     Ht::stash_script("assetsurl=" . json_encode($Opt["assetsUrl"]) . ";");
     $huser = (object) array();
     if ($Me && $Me->email) {
         $huser->email = $Me->email;
     }
     if ($Me && $Me->is_pclike()) {
         $huser->is_pclike = true;
     }
     if ($Me && $Me->has_database_account()) {
         $huser->cid = $Me->contactId;
     }
     Ht::stash_script("hotcrp_user="******";");
     $pid = get($_REQUEST, "paperId");
     $pid = $pid && ctype_digit($pid) ? (int) $pid : 0;
     if (!$pid && $this->paper) {
         $pid = $this->paper->paperId;
     }
     if ($pid) {
         Ht::stash_script("hotcrp_paperid={$pid}");
     }
     if ($pid && $Me && $Me->is_admin_force()) {
         Ht::stash_script("hotcrp_want_override_conflict=true");
     }
     // script.js
     if (!get($Opt, "noDefaultScript")) {
         Ht::stash_html($this->make_script_file("scripts/script.js") . "\n");
     }
     // other scripts
     if (get($Opt, "scripts")) {
         foreach ($Opt["scripts"] as $file) {
             Ht::stash_html($this->make_script_file($file) . "\n");
         }
     }
     if ($stash) {
         Ht::stash_html($stash);
     }
 }
Пример #5
0
 private function header_head($title)
 {
     global $Me, $ConfSiteBase, $ConfSiteSuffix, $ConfSitePATH, $Opt, $CurrentList;
     echo "<!DOCTYPE html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n<meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />\n<meta http-equiv=\"Content-Script-Type\" content=\"text/javascript\" />\n<meta http-equiv=\"Content-Language\" content=\"en\" />\n<meta name=\"google\" content=\"notranslate\" />\n";
     if (strstr($title, "<") !== false) {
         $title = preg_replace("/<([^>\"']|'[^']*'|\"[^\"]*\")*>/", "", $title);
     }
     if (isset($Opt["fontScript"])) {
         echo $Opt["fontScript"];
     }
     echo $this->make_css_link("stylesheets/style.css"), "\n";
     if (isset($Opt["stylesheets"])) {
         foreach ($Opt["stylesheets"] as $css) {
             echo $this->make_css_link($css), "\n";
         }
     }
     // favicon
     if ($favicon = defval($Opt, "favicon")) {
         if (strpos($favicon, "://") === false && $favicon[0] != "/") {
             if (@$Opt["assetsUrl"] && substr($favicon, 0, 7) === "images/") {
                 $favicon = $Opt["assetsUrl"] . $favicon;
             } else {
                 $favicon = $ConfSiteBase . $favicon;
             }
         }
         if (substr($favicon, -4) == ".png") {
             echo "<link rel=\"icon\" type=\"image/png\" href=\"{$favicon}\" />\n";
         } else {
             if (substr($favicon, -4) == ".ico") {
                 echo "<link rel=\"shortcut icon\" href=\"{$favicon}\" />\n";
             } else {
                 if (substr($favicon, -4) == ".gif") {
                     echo "<link rel=\"icon\" type=\"image/gif\" href=\"{$favicon}\" />\n";
                 } else {
                     echo "<link rel=\"icon\" href=\"{$favicon}\" />\n";
                 }
             }
         }
     }
     // jQuery
     if (isset($Opt["jqueryUrl"])) {
         $jquery = $Opt["jqueryUrl"];
     } else {
         if (@$Opt["jqueryCdn"]) {
             $jquery = "//code.jquery.com/jquery-1.11.3.min.js";
         } else {
             $jquery = "scripts/jquery-1.11.3.min.js";
         }
     }
     $this->scriptStuff = $this->make_script_file($jquery, true) . "\n";
     $this->scriptStuff .= $this->make_script_file("scripts/jquery.color-2.1.2.min.js", true) . "\n";
     $this->scriptStuff .= $this->make_script_file("scripts/jquery.flot.min.js", true) . "\n";
     //$this->scriptStuff .= $this->make_script_file("scripts/ZeroClipboard.min.js", true) . "\n";
     // Javascript settings to set before script.js
     $this->scriptStuff .= "<script>siteurl=\"{$ConfSiteBase}\";siteurl_suffix=\"{$ConfSiteSuffix}\"";
     if (session_id() !== "") {
         $this->scriptStuff .= ";siteurl_postvalue=\"" . post_value() . "\"";
     }
     if (@$CurrentList && ($list = SessionList::lookup($CurrentList))) {
         $this->scriptStuff .= ";hotcrp_list={num:{$CurrentList},id:\"" . addcslashes($list->listid, "\n\r\\\"/") . "\"}";
     }
     if ($urldefaults = hoturl_defaults()) {
         $this->scriptStuff .= ";siteurl_defaults=" . json_encode($urldefaults);
     }
     $huser = (object) array();
     if ($Me && $Me->email) {
         $huser->email = $Me->email;
     }
     if ($Me && $Me->is_pclike()) {
         $huser->is_pclike = true;
     }
     $this->scriptStuff .= ";hotcrp_user="******"paperId"];
     $pid = $pid && ctype_digit($pid) ? (int) $pid : 0;
     if ($pid) {
         $this->scriptStuff .= ";hotcrp_paperid={$pid}";
     }
     if ($pid && $Me && $Me->privChair && ($forceShow = @$_REQUEST["forceShow"]) && $forceShow != "0") {
         $this->scriptStuff .= ";hotcrp_want_override_conflict=true";
     }
     //$this->scriptStuff .= ";ZeroClipboard.setDefaults({moviePath:\"${ConfSiteBase}cacheable$ConfSiteSuffix?file=scripts/ZeroClipboard.swf&amp;mtime=" . filemtime("$ConfSitePATH/scripts/ZeroClipboard.swf") . "\"})";
     $this->scriptStuff .= "</script>\n";
     // script.js
     $this->scriptStuff .= $this->make_script_file("scripts/script.js") . "\n";
     echo $this->scriptStuff;
     $this->scriptStuff = "";
     echo "<title>", $title, " - ", htmlspecialchars($Opt["shortName"]), "</title>\n</head>\n";
 }