public function call() { $app = $this->app; $env = $app->environment(); //login if ($app->request()->getPath() === $app->urlFor('webim_login')) { $this->next->call(); return; } //user, not visitor if (isset($_SESSION['uid'])) { $this->next->call(); return; } //check cookie $vid = $app->getCookie('webim.vid'); //webim.vid.$siteid $path = $app->request()->getPath(); if (!$vid && ($path === $app->urlFor('load') || $path === $app->urlFor('chatbox'))) { $visitor = ORM::forTable('visitors')->create(); $visitor->siteid = $app->request()->params('siteid'); $visitor->day = date('Y-m-d'); $visitor->month = date('m'); $visitor->created_at = date('Y-m-d H:i:s'); $visitor->save(); $vid = $visitor->id; $app->setCookie('webim.vid', $vid, '2 days'); } if (!$vid) { $app->halt('400', 'bad request'); exit; } $endpoint = array('id' => 'vid:' . $vid, 'nick' => 'v' . $vid, 'show' => 'available', 'status' => '', 'url' => '#', 'pic_url' => Gravatar::d($vid), 'role' => 'visitor'); $env['endpoint'] = $endpoint; $this->next->call(); }