<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Repository\ConferenceRepository;
use Twig\Environment;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Cookie;
class FlexController extends AbstractController
{
var $session;
var $error;
var $twig_values;
var $respond;
var $db;
var $soap;
function __construct(Environment $twig)
{
$this->session = new Session();
//$this->session->start();
$this->twig_values = new TwigValuesController();
$this->db = new DBController();
$this->error = $this->session->get("error") ?? "";
$this->soap = new SoapApiController();
}
/**
* @Route("/", name="homepage")
*/
public function homepage(Request $request, Environment $twig): Response
{
$method = $request->request->get('method');
$soap = new SoapApiController();
switch ($method){
case "auth":
$soap->auth($request, $twig);
break;
default:
break;
}
$new_cont = new NewsController();
$news = $new_cont->getNews();
$banners = $new_cont->getBanners();
if($this->soap->reLogin($request)) {
return new Response($twig->render('flex/index.html', $this->twig_values->getTwigTemplate($request) +
["News" => $news, "Banners" => $banners]));
} else {
return new Response($twig->render('flex/login.html', $this->twig_values->getTwigTemplate($request)));
}
}
/**
* @Route("/index", name="index")
*/
public function index(Request $request, Environment $twig): Response
{
$new_cont = new NewsController();
$news = $new_cont->getNews();
$banners = $new_cont->getBanners();
// $Token = $this->session->get('Token');
// $CustomerGUID = $this->session->get("CustomerGUID");
// $soap = new SoapApiController();
// $response = $soap->getCustomerAttributes($Token, $CustomerGUID);
// dump($response);
if($this->soap->reLogin($request)) {
return new Response($twig->render('flex/index.html', $this->twig_values->getTwigTemplate($request) +
["News" => $news, "Banners" => $banners]));
} else {
return new Response($twig->render('flex/login.html', $this->twig_values->getTwigTemplate($request)));
}
}
/**
* @Route("/carrot_assign_admin", name="carrot_assign_admin")
*/
function carrot_assign_admin(Request $request, Environment $twig){
$AccessLevel = $this->session->get("AccessLevel");
if($AccessLevel === "demo"){
$this->respond["status"] = "false";
$this->respond["error"] = "У демо-доступа ограничены права";
return new Response($twig->render('flex/respond.html', ["Respond" => $this->getRespond()]));
}
$auth_token = "app.44452.edff457a6ea7e692b1f1bdd3418c2b1b279aecd1cc91eeed";
$token = $request->request->get("carrot_token") ?? "";
$conversation_id = $request->request->get("conversation_id") ?? "";
if($token = "" || $conversation_id == ""){
$this->respond["status"] = "false";
$this->respond["error"] = "Не указаны параметры";
return new Response($twig->render('flex/respond.html', ["Respond" => $this->getRespond()]));
}
// id оператора которому мы хотим назначить диалог. Узнать id оператора можно при редактировании администраторов в разделе: Администраторы
$manager_info = $this->session->get('manager_info');
$this->respond["status"] = "true";
//return new Response($twig->render('flex/respond.html', ["Respond" => $this->getRespond()]));
$operator = $manager_info[0]["ChatID"];
$url = 'https://api.carrotquest.io/v1/conversations/'.$conversation_id.'/assign';
// Делаем post запрос на назначение оператора на диалог в Carrot https://carrotquest.io/developers/endpoints/conversations/assign/
// $result = file_get_contents($url, false, stream_context_create(array(
// 'http' => array(
// 'method' => 'POST',
// 'header' => 'Content-type: application/json',
// 'content' => '{"admin": "'.$operator.'",
// "auth_token": "'.$token.'"}'
// )
// )));
$result = $this->post_api($url, ["admin" => $operator, "auth_token" => $auth_token, "from_admin" => $operator]);
$this->respond["result"] = $result;
return new Response($twig->render('flex/respond.html', ["Respond" => $this->getRespond()]));
}
/**
* @Route("/login", name="login")
*/
public function login(Environment $twig, Request $request): Response
{
if($this->soap->reLogin($request)) {
return new Response($twig->render('flex/index.html', $this->twig_values->getTwigTemplate($request)));
} else {
return new Response($twig->render('flex/login.html', $this->twig_values->getTwigTemplate($request)));
}
}
/**
* @Route("/change_theme", name="change_theme")
*/
public function change_theme(Environment $twig, Request $request): Response
{
$theme = $request->request->get('theme');
$this->session->set('theme', $theme);
$this->respond["status"] = true;
$this->respond["theme"] = $theme;
$res = new Response($twig->render('flex/respond.html', ["Respond" => $this->getRespond()]));
$cookie = new Cookie("theme", $theme);
$res->headers->setCookie($cookie);
return $res->send();
}
/**
* @Route("/contacts", name="contacts")
*/
public function contacts(Environment $twig, Request $request): Response
{
if($this->soap->reLogin($request)) {
return new Response($twig->render('flex/contacts.html', $this->twig_values->getTwigTemplate($request)));
} else {
return new Response($twig->render('flex/login.html', $this->twig_values->getTwigTemplate($request)));
}
}
/**
* @Route("/reg", name="reg")
*/
public function reg(Environment $twig, Request $request): Response
{
$reg = [];
$reg["error"] = "";
$reg["status"] = "true";
$reg["reg"] = $request->request->get("reg") ?? "";
if($reg["reg"] != ""){
$postfields = [];
$postfields["user_info"] = [];
$postfields["user_info"]["name"]["key"] = "Наименование";
$postfields["user_info"]["name"]["value"] = $request->request->get("name") ?? "";
$postfields["user_info"]["inn"]["key"] = "ИНН";
$postfields["user_info"]["inn"]["value"] = $request->request->get("inn") ?? "";
$postfields["user_info"]["email"]["key"] = "Электронная почта";
$postfields["user_info"]["email"]["value"] = $request->request->get("email") ?? "";
$postfields["user_info"]["tel"]["key"] = "Номер телефона";
$postfields["user_info"]["tel"]["value"] = $request->request->get("tel") ?? "";
$postfields["user_info"]["contact"]["key"] = "Контактное лицо";
$postfields["user_info"]["contact"]["value"] = $request->request->get("contact") ?? "";
$postfields["user_info"]["address"]["key"] = "Фактический адрес";
$postfields["user_info"]["address"]["value"] = $request->request->get("address") ?? "";
$postfields["html"] = "";
foreach ($postfields["user_info"] as $value){
$postfields["html"] .= $value["key"].": ".$value["value"]."<br>";
//$result = $this->post_api("localhost/email", $postfields);
}
$this->db->insert("reg", ["text" => $postfields["html"]]);
$result = $this->post_api("https://".$_SERVER["HTTP_HOST"]."/email", $postfields);
$postfields["to"] = $postfields["user_info"]["email"]["value"];
$postfields["html"] = "Спасибо, ваша заявка принята. С вами свяжется менеджер отдела продаж в ближайшее рабочее время.<br><br><strong>Ваши данные:</strong><br>".$postfields["html"];
$result = $this->post_api("https://".$_SERVER["HTTP_HOST"]."/email", $postfields);
//$result = $this->post_api("localhost/email", $postfields);
$reg["error"] = "Спасибо, ваша заявка принята. С вами свяжется менеджер отдела продаж в ближайшее рабочее время.";
}
if($this->soap->reLogin($request)) {
return new Response($twig->render('flex/index.html',
$this->twig_values->getTwigTemplate($request)
));
} else {
return new Response($twig->render('flex/reg.html',
$this->twig_values->getTwigTemplate($request) + ["Reg" => $reg]
));
}
}
/**
* @Route("/forgot_password", name="forgot_password")
*/
public function forgot_password(Environment $twig, Request $request): Response
{
$reg = [];
$reg["error"] = "";
$reg["status"] = "true";
$reg["reg"] = $request->request->get("reg") ?? "";
if($reg["reg"] != ""){
$Login = $request->request->get("Login");
$Mail = $request->request->get("Mail");
$soap = new SoapApiController();
$result = $soap->resetPassword($Login, $Mail);
if(isset($result["return"]["ErrorCode"]) && $result["return"]["ErrorCode"] == 0){
$reg["status"] = 'true';
$reg["error"] = "Временный пароль отправлен на ваш Email";
}else{
$reg["status"] = 'false';
$reg["error"] = $result["return"]["ErrorDescription"] ?? $result["Error"];
}
}
return new Response($twig->render('flex/forgot_password.html',
$this->twig_values->getTwigTemplate($request) + ["Reg" => $reg]
));
}
/**
* @Route("/change_pass_first", name="change_pass_first")
*/
public function change_pass_first(Environment $twig, Request $request): Response
{
$reg = [];
$reg["error"] = "";
$reg["status"] = "true";
$reg["reg"] = $request->request->get("reg") ?? "";
$password = "";
if($reg["reg"] != ""){
$Login = $this->session->get('Login');
$Token = $this->session->get('Token');
$OldPassword = $request->request->get("oldpass");
$password = $OldPassword;
$NewPassword = $request->request->get("newpass");
$PassRepeat = $request->request->get("passrepeat");
if($NewPassword != $PassRepeat){
$reg["status"] = 'false';
$reg["error"] = "Пароли не совпадают";
}else{
$soap = new SoapApiController();
$result = $soap->changePassword($Token, $Login, $OldPassword, $NewPassword);
if(isset($result["return"]["ErrorCode"]) && $result["return"]["ErrorCode"] == 0){
$reg["status"] = 'true';
$reg["error"] = "Пароль изменен";
}else{
$reg["status"] = 'false';
$reg["error"] = $result["return"]["ErrorDescription"];
}
}
}
return new Response($twig->render('flex/change_pass_first.html',
$this->twig_values->getTwigTemplate($request) + ["Reg" => $reg, "password" => $password]
));
}
/**
* @Route("/logout", name="logout")
*/
public function logout(Environment $twig, Request $request): Response
{
$this->session->clear();
$response = new Response($twig->render('flex/login.html', $this->twig_values->getTwigTemplate($request)));
$response->headers->setCookie(Cookie::create('login', ""));
$response->headers->setCookie(Cookie::create('password', ""));
return $response;
}
function getRespond()
{
$respond = json_encode($this->respond, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT);
echo $respond;
}
function post_api($url, $postfields) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postfields));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
// curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
$result = curl_exec($ch);
if (curl_errno($ch)) {
dump(curl_error($ch));
}
curl_close($ch);
return $result;
}
}