| <?php␊ |
| ␊ |
| class main extends \system\engine\HF_Controller␊ |
| class main extends base␊ |
| {␊ |
| public function index()␊ |
| {␊ |
| if ($this->user) {␊ |
| ␉ ␊ |
| echo $this->loadRender("main.html");␊ |
| }␊ |
| ␊ |
| public function info($page = null) {␊ |
| if (!$page) {␊ |
| echo $this->loadRender("info1.html");␊ |
| } else {␊ |
| if (is_numeric($page)) {␊ |
| echo $this->loadRender("info$page.html");␊ |
| } else {␊ |
| $notfound = new \system\engine\HF_Status($this->config, $this->core);␊ |
| echo $notfound->Status404();␊ |
| }␊ |
| }␊ |
| }␊ |
| ␊ |
| public function chat() {␊ |
| $this->session->setData("waiting", true);␊ |
| $toUser = $this->session->getData("toUser");␊ |
| if ($toUser) {␊ |
| /** @var \application\models\Sessions $otherUserSession */␊ |
| $otherUserSession = \application\models\Sessions::getByField("id", $toUser);␊ |
| if ($otherUserSession) {␊ |
| $otherUserSession = $otherUserSession[0];␊ |
| $otherUserSession->setData("waiting", "true");␊ |
| $otherUserSession->setData("toUser", null);␊ |
| $otherUserSession->save();␊ |
| }␊ |
| }␊ |
| $this->session->setData("toUser", null);␊ |
| $this->session->save();␊ |
| echo $this->loadRender("chat.html");␊ |
| }␊ |
| ␊ |
| public function match() {␊ |
| $result = false;␊ |
| ␊ |
| echo json_encode($result);␊ |
| }␊ |
| ␊ |
| public function sessionset($key) {␊ |
| if (in_array($key, ["interests", "gender", "looking"])) {␊ |
| $this->session->setData($key, $_POST[$key]);␊ |
| }␊ |
| }␊ |
| ␊ |
| public function send() {␊ |
| $message = new application\models\Messages();␊ |
| $message->user_from = $this->session->id;␊ |
| $message->user_to = $this->session->getData("toUser");␊ |
| $message->message = $_POST["message"];␊ |
| $message->save();␊ |
| }␊ |
| ␊ |
| public function read() {␊ |
| $result = false;␊ |
| $search = false;␊ |
| ␊ |
| // work around for SQLite␊ |
| $lock = \application\models\Settings::getSetting("readLock");␊ |
| ␊ |
| while($lock) {␊ |
| $lock = false;␊ |
| }␊ |
| \application\models\Settings::setSetting("readLock", (int)true);␊ |
| ␊ |
| // Check if the current user is talking to someone␊ |
| $toUser = $this->session->getData("toUser");␊ |
| /** @var \application\models\Sessions $session */␊ |
| $otherSession = \application\models\Sessions::getByField("id", $this->session->getData("toUser"));␊ |
| if ($otherSession) {␊ |
| $otherSession = $otherSession[0];␊ |
| // If they aren't waiting and the current toUser is this user..␊ |
| if ($otherSession->getData("waiting") && $otherSession->getData("toUser") != $this->session->id) {␊ |
| $search = true;␊ |
| }␊ |
| } else {␊ |
| $search = true;␊ |
| }␊ |
| ␊ |
| // search for someone else in waiting queue␊ |
| /** @var \application\models\Sessions $firstResult */␊ |
| $firstResult = null;␊ |
| if ($search) {␊ |
| $allSessions = \application\models\Sessions::all();␊ |
| shuffle($allSessions);␊ |
| shuffle($allSessions);␊ |
| /** @var \application\models\Sessions $session */␊ |
| foreach ($allSessions as $session) {␊ |
| if ($session->getData("toUser") == $this->session->id && $this->session->getData("toUser") == null) {␊ |
| // "kick the other user"␊ |
| $session->setData("toUser", null);␊ |
| $session->setData("waiting", false);␊ |
| continue;␊ |
| }␊ |
| if ($session->getData("waiting") && $session->id != $this->session->id) {␊ |
| $firstResult = $session;␊ |
| $interestWeight = [];␊ |
| $gender1Weight = true;␊ |
| $gender2Weight = true;␊ |
| try {␊ |
| $interestWeight = array_intersect($this->session->getData("interests"), $session->getData("interests"));␊ |
| $gender1Weight = in_array($session->getData("gender"), $this->session->getData("looking"));␊ |
| $gender2Weight = in_array($this->session->getData("gender"), $session->getData("looking"));␊ |
| } catch (\Exception $e) { }␊ |
| if ($gender1Weight && $gender2Weight && count($interestWeight) > 0) {␊ |
| $result = true;␊ |
| $session->setData("waiting", false);␊ |
| $session->setData("toUser", $this->session->id);␊ |
| $this->session->setData("toUser", $session->id);␊ |
| $this->session->setData("waiting", false);␊ |
| $session->save();␊ |
| $this->session->save();␊ |
| break;␊ |
| }␊ |
| }␊ |
| }␊ |
| ␊ |
| // If no match was made - match with first session␊ |
| if ($firstResult && !$result) {␊ |
| $firstResult->setData("waiting", false);␊ |
| $firstResult->setData("toUser", $this->session->id);␊ |
| $this->session->setData("toUser", $firstResult->id);␊ |
| $this->session->setData("waiting", false);␊ |
| $firstResult->save();␊ |
| $this->session->save();␊ |
| $result = true;␊ |
| }␊ |
| ␊ |
| if (!$result) {␊ |
| \application\models\Settings::setSetting("readLock", (int)false);␊ |
| echo json_encode(false);␊ |
| return;␊ |
| }␊ |
| }␊ |
| ␊ |
| ␊ |
| ␊ |
| // return any messages waiting to be delivered␊ |
| $messages = \application\models\Messages::getByField("user_to", $this->session->id);␊ |
| $return = [];␊ |
| foreach($messages as $message) {␊ |
| $return[] = $message->user_from . ": " . $message->message;␊ |
| $message->delete();␊ |
| }␊ |
| ␊ |
| echo json_encode($return);␊ |
| \application\models\Settings::setSetting("readLock", (int)false);␊ |
| }␊ |
| } |