Esempio n. 1
0
 public function updateSession()
 {
     static $updated = false;
     if (!$updated) {
         $global = Ibos::app()->setting->toArray();
         if (!Ibos::app()->user->isGuest) {
             if (isset($global["cookie"]["ulastactivity"])) {
                 $userLastActivity = StringUtil::authCode($global["cookie"]["ulastactivity"], "DECODE");
             } else {
                 $userLastActivity = UserUtil::getUserProfile("lastactivity");
                 MainUtil::setCookie("ulastactivity", StringUtil::authCode($userLastActivity, "ENCODE"), 31536000);
             }
         }
         $onlineTimeSpan = 10;
         $lastOnlineUpdate = $this->var["lastolupdate"];
         $onlineTimeOffset = $lastOnlineUpdate ? $lastOnlineUpdate : $userLastActivity;
         $allowUpdateOnlineTime = $onlineTimeSpan * 60 < TIMESTAMP - $onlineTimeOffset;
         if (!Ibos::app()->user->isGuest && $allowUpdateOnlineTime) {
             $updateStatus = OnlineTime::model()->updateOnlineTime(Ibos::app()->user->uid, $onlineTimeSpan, $onlineTimeSpan, TIMESTAMP);
             if ($updateStatus === false) {
                 $onlineTime = new OnlineTime();
                 $onlineTime->uid = Ibos::app()->user->uid;
                 $onlineTime->thismonth = $onlineTimeSpan;
                 $onlineTime->total = $onlineTimeSpan;
                 $onlineTime->lastupdate = $global["timestamp"];
                 $onlineTime->save();
             }
             $this->setKey("lastolupdate", TIMESTAMP);
         }
         $this->var["invisible"] = UserUtil::getUserProfile("invisible");
         foreach ($this->var as $key => $value) {
             if (Ibos::app()->user->hasState($key) && $key != "lastactivity") {
                 $this->setKey($key, Ibos::app()->user->{$key});
             }
         }
         Ibos::app()->session->update();
         if (!Ibos::app()->user->isGuest) {
             $updateStatusField = array("lastip" => $global["clientip"], "lastactivity" => TIMESTAMP, "lastvisit" => TIMESTAMP, "invisible" => 1);
             if (21600 < TIMESTAMP - $userLastActivity) {
                 if ($onlineTimeSpan && 43200 < TIMESTAMP - $userLastActivity) {
                     $onlineTime = OnlineTime::model()->fetchByPk(Ibos::app()->user->uid);
                     UserCount::model()->updateByPk(Ibos::app()->user->uid, array("oltime" => round(intval($onlineTime["total"]) / 60)));
                 }
                 MainUtil::setCookie("ulastactivity", StringUtil::authCode(TIMESTAMP, "ENCODE"), 31536000);
                 UserStatus::model()->updateByPk(Ibos::app()->user->uid, $updateStatusField);
             }
         }
         $updated = true;
     }
     return $updated;
 }
Esempio n. 2
0
 public function updateUserCount($creditArr, $uids = 0, $checkGroup = true, $ruletxt = "")
 {
     if (Ibos::app()->user->isGuest) {
         return null;
     }
     $setting = Ibos::app()->setting->toArray();
     if (!$uids) {
         $uids = intval(Ibos::app()->user->uid);
     }
     $uids = is_array($uids) ? $uids : array($uids);
     if ($uids && ($creditArr || $this->_extraSql)) {
         if ($this->_extraSql) {
             $creditArr = array_merge($creditArr, $this->_extraSql);
         }
         $sql = array();
         $allowkey = array("extcredits1", "extcredits2", "extcredits3", "extcredits4", "extcredits5", "oltime", "attachsize");
         $creditRemind = $setting["setting"]["creditremind"] && Ibos::app()->user->uid && $uids == array(Ibos::app()->user->uid);
         if ($creditRemind) {
             if (!isset($setting["cookiecredits"])) {
                 $setting["cookiecredits"] = !empty($_COOKIE["creditnotice"]) ? explode("D", $_COOKIE["creditremind"]) : array_fill(0, 6, 0);
                 for ($i = 1; $i <= 5; $i++) {
                     $setting["cookiecreditsbase"][$i] = UserUtil::getUserProfile("extcredits" . $i);
                 }
             }
             if ($ruletxt) {
                 $setting["cookiecreditsrule"][$ruletxt] = $ruletxt;
             }
         }
         foreach ($creditArr as $key => $value) {
             if (!empty($key) && $value && in_array($key, $allowkey)) {
                 $sql[$key] = $value;
                 if ($creditRemind && substr($key, 0, 10) == "extcredits") {
                     $i = substr($key, 10);
                     $setting["cookiecredits"][$i] += $value;
                 }
             }
         }
         if ($creditRemind) {
             MainUtil::setCookie("creditremind", implode("D", $setting["cookiecredits"]) . "D" . Ibos::app()->user->uid);
             MainUtil::setCookie("creditbase", "0D" . implode("D", $setting["cookiecreditsbase"]));
             if (!empty($setting["cookiecreditsrule"])) {
                 MainUtil::setCookie("creditrule", strip_tags(implode("\t", $setting["cookiecreditsrule"])));
             }
         }
         Ibos::app()->setting->copyFrom($setting);
         if ($sql) {
             UserCount::model()->increase($uids, $sql);
         }
         if ($checkGroup && count($uids) == 1) {
             $this->checkUserGroup($uids[0]);
         }
         $this->setExtraSql(array());
     }
 }