errorCode = 1; $obj->errorMessage = $msg; $obj->data = array(); header('Content-Type: application/json'); header("Cache-Control: no-cache, must-revalidate"); echo json_encode($obj); exit(); } //Отвечаю только на POST запросы if ($_SERVER['REQUEST_METHOD'] === 'GET') { sendError("Request is GET method!"); } $fn = filter_input(INPUT_GET, 'fn', FILTER_VALIDATE_INT, array('options' => array('default' => -1))); if (isset($_GET['lng'])) $_SESSION["LNG"] = $_GET['lng']; else $_SESSION["LNG"] = 2;//'en'; if ($fn == 0) { //Создание или обновление нового объекта и терминала //В одном телефоне может авторизоваться раздный пользователь, терминал у них будет одинаковый а вот объекты раздные //Вот терминал будет перескакивать с компинии на компанию а вот объект оставаться преждним //Вместо IMEI терминал отправляет Android ID чтобы не создавать кучу терминалов в базе так как есть шанс что он не измениться //Принимаю логин пароль, имя, android id и согдаю объект и терминал если его нет. //login, password, android_id $object = json_decode(file_get_contents("php://input")); if ($object == null) { sendError("Request is empty!"); } $db = connectToDB(); $sql = " select id, company_id, COALESCE(name,'') || ' ' || COALESCE(surname,'') || ' ' || COALESCE(patronymic,'') as name from main._users where del=false and (email='" . $object->login . "' or phone='" . $object->login . "' or login='" . $object->login . "') and (password='" . $object->password . "' or hash = '" . $object->password . "') order by seq"; try { $res = $db->query($sql); } catch (Exception $ex) { sendError($ex->getMessage()); } $id=''; $company_id=''; $name=''; if($res!=NULL && $res->rowCount()>0) { while ($row = $res->fetch(PDO::FETCH_ASSOC)) { $id=$row['id']; $company_id=$row['company_id']; $name=$row['name']; } } //Проверяю есть ли терминал с android_id $sql = " select id, del, company_id from main.terminals where imie='".$object->android_id."' order by seq"; try { $res = $db->query($sql); } catch (Exception $ex) { sendError($ex->getMessage()); } if($res!=NULL && $res->rowCount()>0) { while ($row = $res->fetch(PDO::FETCH_ASSOC)) { if($row['del']=false || $row['company_id']!=$company_id) { $sql="update main.terminals set del=false,company_id=".$company_id." where id=".$row['id']; $db->query($sql); } } }else{ //Создаю новый терминал и объект (это нужно делать если включена функция слежения а она включена по умолчанию в приложении) $sql="select * from main.p_terminals_i(1,$company_id,null,null,$object->android_id,18,null);"; try { $res = $db->query($sql); } catch (Exception $ex) { sendError($ex->getMessage()); } $terminal_id=null; if($res!=NULL && $res->rowCount()>0) { while ($row = $res->fetch(PDO::FETCH_NUM)) { $terminal_id=$row[0]; } } //Создаю новый объект $sql="select * from main.p_objects_i(1,$company_id,$name,null,null,$terminal_id,null,null,2);"; try { $res = $db->query($sql); } catch (Exception $ex) { sendError($ex->getMessage()); } } //Отправляю результат работы активации функции терминала $obj = new StdClass(); $obj->errorCode = 0; $obj->errorMessage = ""; $obj->data = array(); echo json_encode($obj); } else if ($fn == 1) //Принять и перенести терминал и объект в другую компанию { /*$object = json_decode(file_get_contents("php://input")); if ($object == null) { sendError("Request is empty!"); } $db = connectToDB(); $password = getPassword(5); $sql = "select * from main.p__users_1(1,null,:company_name,:surname,:name,:position,:phone,:email,:password);"; $stmt = $db->prepare($sql); $stmt->bindParam(':company_name', $object->firstname, PDO::PARAM_STR); $stmt->bindParam(':surname', $object->lastname, PDO::PARAM_STR); $stmt->bindParam(':name', $object->firstname, PDO::PARAM_STR); $stmt->bindParam(':position', $object->position, PDO::PARAM_STR); $stmt->bindParam(':phone', $object->phone, PDO::PARAM_STR); $stmt->bindParam(':email', $object->email, PDO::PARAM_STR); $stmt->bindParam(':password', $password, PDO::PARAM_STR); $response = new stdClass(); $response->errorCode = '0'; $response->errorMessage = ''; try { $res = $stmt->execute(); } catch (Exception $ex) { if ($ex->getCode() == 'U1000') { sendError(trt('User_with_this_email_already_exists')); } else { sendError($ex->getMessage()); } } $response->data = array(); $usr = new stdClass(); $usr->id = '-1'; if ($row = $stmt->fetch(PDO::FETCH_NUM)) { $usr->id = $row[0]; $usr->del = 0; //SQLIte нет false $usr->seq = 1; $usr->company_id = ''; //Заполню ниже $usr->name = $object->firstname; $usr->surname = $object->lastname; $usr->patronymic = ''; $usr->email = $object->email; $usr->phone = $object->phone; $usr->login = ''; $usr->password = ''; //Пароль не отправляю а использую временный идентификатор $usr->hash = md5(uniqid(rand(), true)); //Обновляю идентификатор временного пароля для авторизации без ввода пароля try { $db->query("update main._users set hash='" . $usr->hash . "' where id=" . $usr->id); //TODO сделать в одной функции p__users_1 что выше } catch (Exception $e) { sendError($e->getMessage()); } } $stmt = null; //Получаю id компании try { $res = $db->query("select company_id from main._users where id =" . $usr->id); } catch (Exception $e) { sendError($e->getMessage()); } if ($res->rowCount() > 0) { $row = $res->fetch(PDO::FETCH_ASSOC); $usr->company_id = $row['company_id']; } array_push($response->data, $usr); if ($_SESSION["LNG"] == 'ru') { $html = 'Сообщение

Поздравляю, вы зарегистрированы!

Ваш пароль: ' . $password . '
'; } else { $html = 'Message

Congratulations, you are registered!

Your password: ' . $password . '
'; } //Отсылаю пароль на почту if (mail($usr->email, 'Motion-Engine.com', $html, "Content-type: text/html; charset=utf-8\r\nFrom: GEOVizor Site ")) { } else { sendError('Failed to send password email to!'); } echo json_encode($response); exit();*/ }