diff --git a/api/index.php b/api/index.php
index 6cadbf7..8024601 100644
--- a/api/index.php
+++ b/api/index.php
@@ -82,6 +82,11 @@ use Bitrix\Main\Context,
function checkRequestIsLocal()
{
+ if(!MODE_PRODUCTION)
+ {
+ return true;
+ }
+
if(strpos($_SERVER['HTTP_X_FORWARDED_FOR'], SELF_IP) > -1)
{
return true;
@@ -114,6 +119,102 @@ function checkRecaptchaRequest($token, $ipAddress)
return $response_decoded['success'];
}
+function getCompaniesForUser($user_id)
+{
+ if(CModule::IncludeModule('iblock'))
+ {
+ $existed_client_as_user_res = CIBlockElement::GetList([ 'id' => 'desc' ], [ 'IBLOCK_ID' => IBLOCK_ID_CLIENTS, 'PROPERTY_USERS' => $user_id ], false, []);
+
+ $companies = [];
+
+ while ($existed_client_as_user_element = $existed_client_as_user_res->GetNextElement())
+ {
+ $existed_client_as_user_record = $existed_client_as_user_element->GetFields();
+ $existed_client_as_user_record['PROPERTIES'] = $existed_client_as_user_element->GetProperties();
+
+ $company = [
+ "acc_number" => $existed_client_as_user_record['CODE'],
+ "title" => $existed_client_as_user_record['PROPERTIES']['COMPANY']['~VALUE'],
+ "inn" => $existed_client_as_user_record['PROPERTIES']['INN']['~VALUE'],
+ "kpp" => $existed_client_as_user_record['PROPERTIES']['KPP']['~VALUE'],
+ "ogrn" => $existed_client_as_user_record['PROPERTIES']['OGRN']['~VALUE'],
+ "is_admin" => false,
+ ];
+
+ foreach($existed_client_as_user_record['PROPERTIES']['ADMINS']['VALUE'] AS $k => $v)
+ {
+ if($v == $user_id)
+ {
+ $company['is_admin'] = true;
+ }
+ }
+
+ array_push($companies, $company);
+ }
+
+ return $companies;
+ }
+
+ return [];
+}
+
+function getUsersForCompany($code)
+{
+ if(CModule::IncludeModule('iblock'))
+ {
+ $company_res = CIBlockElement::GetList([ 'id' => 'desc' ], [ 'IBLOCK_ID' => IBLOCK_ID_CLIENTS, 'CODE' => $code ], false, []);
+
+ $users = [];
+
+ while ($company_element = $company_res->GetNextElement())
+ {
+ $company_record = $company_element->GetFields();
+ $company_record['PROPERTIES'] = $company_element->GetProperties();
+ $user = [];
+
+ //print_r($company_record);
+ //die();
+
+ foreach($company_record['PROPERTIES']['USERS']['VALUE'] AS $user_id)
+ {
+ $user_res = \CUser::GetList(["ID" => "ASC"], false, [ "ID" => $user_id ], []);
+ while($user_element = $user_res->Fetch())
+ {
+ $companies = getCompaniesForUser($user_element['ID']);
+ $user = [
+ "email" => $user_element['LOGIN'],
+ "name" => $user_element['LAST_NAME'],
+ "last" => $user_element['LAST_LOGIN'],
+ "companies" => $companies,
+ "is_admin" => in_array($user_element['ID'], $company_record['PROPERTIES']['ADMINS']['VALUE']),
+ ];
+ ///print_r($user_element);
+ //$rs_user = \CUser::GetByLogin($user_element['LOGIN']);
+ //$ar_user = $rs_user->Fetch();
+
+ //array_push($existed_accounts, $existed_user['XML_ID']);
+
+ /*
+ foreach($company_record['PROPERTIES']['ADMINS']['VALUE'] AS $k => $v)
+ {
+ if($v == $user_id)
+ {
+ $company['is_admin'] = true;
+ }
+ }
+ */
+
+ array_push($users, $user);
+ }
+ }
+ }
+
+ return $users;
+ }
+
+ return [];
+}
+
if($_SERVER['REMOTE_USER'] && strpos($_SERVER['REMOTE_USER'], "Bearer") > -1)
{
$token = str_replace("Bearer ", "", $_SERVER['REMOTE_USER']);
@@ -230,16 +331,65 @@ switch($PARAM_1)
if (intval($ID) > 0)
{
\Bitrix\Main\Mail\Event::send([
- "EVENT_NAME" => "USER_INFO",
- "LID" => "s1",
+ "EVENT_NAME" => "USER_INFO",
+ "LID" => "s1",
"C_FIELDS" => Array(
- "EMAIL" => $REQ['email'],
+ "EMAIL" => $REQ['email'],
"ORG_NAME" => $REQ['org_title'],
- "LOGIN" => $REQ['email'],
- "PASS" => $REQ['password'],
+ "LOGIN" => $REQ['email'],
+ "PASS" => $REQ['password'],
)
]);
+ $user_properties = [
+ 'COMPANY' => $REQ['org_title'],
+ 'INN' => (string)$REQ['inn'],
+ 'KPP' => (string)$REQ['kpp'],
+ 'OGRN' => (string)$REQ['ogrn'],
+ 'ADMINS' => [ $ID ],
+ 'USERS' => [ $ID ],
+ ];
+
+ $ar_new_client = [
+ 'IBLOCK_ID' => IBLOCK_ID_CLIENTS,
+ 'NAME' => $REQ['org_title'],
+ 'CODE' => $REQ['crm_id'],
+ 'PROPERTY_VALUES' => $user_properties,
+ 'ACTIVE' => 'Y', // активен
+ ];
+
+ $new_client = new CIBlockElement;
+ if($new_client_id = $new_client->Add($ar_new_client))
+ {
+ }
+ else
+ {
+ $existed_client_res = CIBlockElement::GetList([ 'id' => 'desc' ], [ 'IBLOCK_ID' => IBLOCK_ID_CLIENTS, 'CODE' => $REQ['crm_id'] ], false, []);
+ while ($existed_client_element = $existed_client_res->GetNextElement())
+ {
+ $existed_client_record = $existed_client_element->GetFields();
+ $existed_client_record['PROPERTIES'] = $existed_client_element->GetProperties();
+
+ $admins = $existed_client_record['PROPERTIES']['ADMINS']['VALUE'];
+ $users = $existed_client_record['PROPERTIES']['USERS']['VALUE'];
+
+ array_push($admins, $ID);
+ array_push($users, $ID);
+
+ $admins = array_unique($admins);
+ $users = array_unique($users);
+
+ $updated_fields = [
+ 'PROPERTY_VALUES' => [
+ 'ADMINS' => $admins,
+ 'USERS' => $users,
+ ]
+ ];
+
+ CIBlockElement::SetPropertyValuesEx($existed_client_record['ID'], IBLOCK_ID_CLIENTS, [ 'ADMINS' => $admins, 'USERS' => $users, ]);
+ }
+ }
+
print json_encode([
"status" => "success"
]);
@@ -332,6 +482,110 @@ switch($PARAM_1)
}
break;
+ case "check":
+ {
+ if(CModule::IncludeModule('iblock'))
+ {
+ if(checkRequestIsLocal())
+ {
+ try
+ {
+ $user_registered = false;
+ $ar_user;
+
+ $existed_accounts = [];
+ $auth = (array) \Bitrix\Main\Web\JWT::decode($REQ['token'], $secret_crm, ["HS256"]);
+
+ $default_admin_id;
+
+ $existed_client_as_admin_res = CIBlockElement::GetList([ 'ID' => 'ASC' ], [ 'IBLOCK_ID' => IBLOCK_ID_CLIENTS, 'CODE' => $auth['acc_number'] ], false, []);
+ while ($existed_client_as_admin_element = $existed_client_as_admin_res->GetNextElement())
+ {
+ $existed_client_as_admin_record = $existed_client_as_admin_element->GetFields();
+ $existed_client_as_admin_record['PROPERTIES'] = $existed_client_as_admin_element->GetProperties();
+ $default_admin_id = $existed_client_as_admin_record['PROPERTIES']['ADMINS']['VALUE'][0];
+ $user_registered = true;
+ }
+
+ $existed_users_res = \CUser::GetList(["ID" => "ASC"], false, [ "ID" => $default_admin_id ], []);
+ while($existed_user = $existed_users_res->Fetch())
+ {
+ $rs_user = \CUser::GetByLogin($existed_user['LOGIN']);
+ $ar_user = $rs_user->Fetch();
+
+ array_push($existed_accounts, $existed_user['XML_ID']);
+ }
+
+ if(isset($REQ['filter']))
+ {
+ if(!in_array($auth['acc_number'], $existed_accounts))
+ {
+ print json_encode([
+ "status" => "error",
+ "error" => "access_denied",
+ ]);
+ die();
+ }
+ }
+
+ if($user_registered)
+ {
+ $user_data = [
+ "email" => $ar_user['LOGIN'],
+ "name" => $ar_user['NAME'],
+ "secondname" => $ar_user['SECOND_NAME'],
+ "lastname" => $ar_user['LAST_NAME'],
+ "phone" => $ar_user['UF_PHONE_NUMBER'],
+ "phone_verified" => $ar_user['UF_PHONE_VERIFIED'],
+ ];
+
+ $companies = getCompaniesForUser($ar_user['ID']);
+ $company_data = [
+ "inn" => $companies[0]['inn'],
+ "kpp" => $companies[0]['kpp'],
+ "ogrn" => $companies[0]['ogrn'],
+ "title" => $companies[0]['title'],
+ ];
+
+ print json_encode([
+ "status" => "success",
+ "user" => $user_data,
+ "company" => $company_data,
+ "companies" => $companies,
+ "token" => \Bitrix\Main\Web\JWT::encode([ "acc_number" => $auth['acc_number'], "is_admin" => $companies[0]['is_admin'], "login" => $ar_user['LOGIN'], "companies" => $companies ], $secret, 'HS256', null, null),
+ ]);
+ }
+ else
+ {
+ print json_encode([
+ "status" => "error",
+ "error" => "unknown account",
+ ]);
+ }
+ die();
+ }
+ catch(\Exception $e)
+ {
+ print json_encode([
+ "status" => "error",
+ "error" => "wrong_jwt",
+ "message" => $e->getMessage(),
+ ]);
+ die();
+ }
+ }
+ else
+ {
+ print json_encode([
+ "status" => "error",
+ "error" => "wrong_source",
+ "error" => "Wrong source",
+ ]);
+ }
+ }
+ }
+ break;
+
default:
{
print json_encode([
@@ -347,6 +601,272 @@ switch($PARAM_1)
}
break;
+ case "admin":
+ {
+ switch($PARAM_2)
+ {
+ case "users":
+ {
+ if(CModule::IncludeModule('iblock'))
+ {
+ if(checkRequestIsLocal())
+ {
+ try
+ {
+ $user_registered = false;
+ $ar_user;
+
+ $existed_accounts = [];
+ $auth = (array) \Bitrix\Main\Web\JWT::decode($REQ['token'], $secret_crm, ["HS256"]);
+
+ $users = getUsersForCompany($auth['acc_number']);
+ print json_encode([
+ "status" => "success",
+ "users" => $users,
+ ]);
+ }
+ catch(\Exception $e)
+ {
+ print json_encode([
+ "status" => "error",
+ "error" => "wrong_jwt",
+ "message" => $e->getMessage(),
+ ]);
+ die();
+ }
+ }
+ else
+ {
+ print json_encode([
+ "status" => "error",
+ "error" => "wrong_source",
+ "error" => "Wrong source",
+ ]);
+ }
+ }
+ }
+ break;
+
+ case "invite":
+ {
+ if(CModule::IncludeModule('iblock'))
+ {
+ if(checkRequestIsLocal())
+ {
+ try
+ {
+ $auth = (array) \Bitrix\Main\Web\JWT::decode($REQ['token'], $secret_crm, ["HS256"]);
+
+ $rs_user = \CUser::GetByLogin($auth['email']);
+ $ar_user = $rs_user->Fetch();
+
+ $existed_user = false;
+ $user_id_to_add = null;
+
+ if(is_array($ar_user))
+ {
+ //existed user
+ $existed_user = true;
+ $user_id_to_add = intval($ar_user['ID']);
+
+ $user = new CUser;
+ $user->Update($user_id_to_add, [ "BLOCKED" => "N" ]);
+ }
+ else
+ {
+ //new user
+ $password = randString(8);
+
+ $user = new \CUser;
+ $profile = [
+ "LOGIN" => $auth['email'],
+ "LAST_NAME" => $auth['name'],
+ "PASSWORD" => $password,
+ "CONFIRM_PASSWORD" => $password,
+ "EMAIL" => $auth['email'],
+ ];
+
+ $ID = $user->Add($profile);
+ if (intval($ID) > 0)
+ {
+ $user_id_to_add = intval($ID);
+ }
+ }
+
+ //add user to company (companies)
+ $companies_list_message = "Список компаний к которым Вам предоставлен доступ:
\n\n";
+ foreach($auth['companies'] AS $company_acc_number)
+ {
+ $existed_client_res = CIBlockElement::GetList([ 'id' => 'desc' ], [ 'IBLOCK_ID' => IBLOCK_ID_CLIENTS, 'CODE' => $company_acc_number ], false, []);
+
+ while ($existed_client_element = $existed_client_res->GetNextElement())
+ {
+ $existed_client_record = $existed_client_element->GetFields();
+ $existed_client_record['PROPERTIES'] = $existed_client_element->GetProperties();
+
+ $companies_list_message .= $existed_client_record['NAME'].", ИНН: ".$existed_client_record['PROPERTIES']['INN']['VALUE']."
\n";
+
+ $users = $existed_client_record['PROPERTIES']['USERS']['VALUE'];
+ array_push($users, $user_id_to_add);
+
+ $users = array_unique($users);
+
+ CIBlockElement::SetPropertyValuesEx($existed_client_record['ID'], IBLOCK_ID_CLIENTS, [ 'USERS' => $users, ]);
+ }
+ }
+
+ if($existed_user)
+ {
+ \Bitrix\Main\Mail\Event::send([
+ "EVENT_NAME" => "CLIENT_USER_INVITE",
+ "LID" => "s1",
+ "C_FIELDS" => Array(
+ "EMAIL" => $auth['email'],
+ "COMPANIES" => $companies_list_message,
+ )
+ ]);
+ }
+ else
+ {
+ \Bitrix\Main\Mail\Event::send([
+ "EVENT_NAME" => "CLIENT_NEW_USER_INVITE",
+ "LID" => "s1",
+ "C_FIELDS" => Array(
+ "EMAIL" => $auth['email'],
+ "PASSWORD" => $password,
+ "COMPANIES" => $companies_list_message,
+ )
+ ]);
+ }
+
+ print json_encode([
+ "status" => "success",
+ ]);
+ }
+ catch(\Exception $e)
+ {
+ print json_encode([
+ "status" => "error",
+ "error" => "wrong_jwt",
+ "message" => $e->getMessage(),
+ ]);
+ die();
+ }
+ }
+ else
+ {
+ print json_encode([
+ "status" => "error",
+ "error" => "wrong_source",
+ "error" => "Wrong source",
+ ]);
+ }
+ }
+ }
+ break;
+
+ case "remove":
+ {
+ if(CModule::IncludeModule('iblock'))
+ {
+ if(checkRequestIsLocal())
+ {
+ try
+ {
+ $auth = (array) \Bitrix\Main\Web\JWT::decode($REQ['token'], $secret_crm, ["HS256"]);
+
+ $existed_users = [];
+ $removed_users = [];
+
+ foreach($auth['emails'] AS $email)
+ {
+ $rs_user = \CUser::GetByLogin($email);
+ $ar_user = $rs_user->Fetch();
+
+ $existed_users[$ar_user['ID']] = $email;
+ }
+
+ $existed_client_res = CIBlockElement::GetList([ 'id' => 'desc' ], [ 'IBLOCK_ID' => IBLOCK_ID_CLIENTS, 'CODE' => $auth['acc_number'] ], false, []);
+
+ $users = [];
+ while ($existed_client_element = $existed_client_res->GetNextElement())
+ {
+ $existed_client_record = $existed_client_element->GetFields();
+ $existed_client_record['PROPERTIES'] = $existed_client_element->GetProperties();
+
+ $company_users = $existed_client_record['PROPERTIES']['USERS']['VALUE'];
+
+ $company_new_users = [];
+ foreach($company_users AS $company_user_id)
+ {
+ if(!isset($existed_users[$company_user_id]))
+ {
+ array_push($company_new_users, $company_user_id);
+ }
+ else
+ {
+ array_push($removed_users, $company_user_id);
+ }
+ }
+
+ $company_new_users = array_unique($company_new_users);
+
+ CIBlockElement::SetPropertyValuesEx($existed_client_record['ID'], IBLOCK_ID_CLIENTS, [ 'USERS' => $company_new_users, ]);
+ }
+
+ foreach($removed_users AS $removed_user_id)
+ {
+ $user_companies = getCompaniesForUser($removed_user_id);
+
+ if(count($user_companies) === 0)
+ {
+ $user = new CUser;
+ $user->Update($removed_user_id, [ "BLOCKED" => "Y" ]);
+ }
+ }
+
+ print json_encode([
+ "status" => "success",
+ ]);
+
+ die();
+ }
+ catch(\Exception $e)
+ {
+ print json_encode([
+ "status" => "error",
+ "error" => "wrong_jwt",
+ "message" => $e->getMessage(),
+ ]);
+ die();
+ }
+ }
+ else
+ {
+ print json_encode([
+ "status" => "error",
+ "error" => "wrong_source",
+ "error" => "Wrong source",
+ ]);
+ }
+ }
+ }
+ break;
+
+ default:
+ {
+ print json_encode([
+ "status" => "error",
+ "error" => "wrong_admin_uri",
+ "message" => "Empty admin URI",
+ ]);
+
+ die();
+ }
+ break;
+ }
+ }
+
case "catalog":
{
switch($PARAM_2)
@@ -355,7 +875,7 @@ switch($PARAM_1)
{
if(CModule::IncludeModule('iblock'))
{
- $filter = [ "ACTIVE" => "Y", "IBLOCK_ID" => 1 ];
+ $filter = [ "ACTIVE" => "Y", ];
if(!empty($REQ['PROGRAM'])) { $filter['PROPERTY_LEASING_PROGRAMS'] = $REQ['PROGRAM']; }
@@ -373,10 +893,33 @@ switch($PARAM_1)
$filter['> "ASC", "NAME" => "ASC" ], $filter, [], []);
+ $total = CIBlockElement::GetList([ "SORT" => "ASC", "NAME" => "ASC" ], array_merge([ "IBLOCK_ID" => 1 ], $filter), [], []);
+
+ $gear = [];
+ $drive = [];
+ $body = [];
+ $fuel = [];
+
+ $iterator = CIBlockElement::GetPropertyValues( 1, $filter, true, [ 'ID' => [ 7, 8, 9, 12 ] ] );
+ while ($row = $iterator->Fetch())
+ {
+ //print_r($row);
+ array_push($gear, $row[7]);
+ array_push($drive, $row[8]);
+ array_push($body, $row[9]);
+ array_push($fuel, $row[12]);
+ }
+ $gear = array_unique($gear);
+ $drive = array_unique($drive);
+ $body = array_unique($body);
+ $fuel = array_unique($fuel);
print json_encode([
"total" => $total,
+ "gear" => $gear,
+ "drive" => $drive,
+ "body" => $body,
+ "fuel" => $fuel,
]);
}
}
@@ -872,6 +1415,14 @@ switch($PARAM_1)
]);
}
}
+ else
+ {
+ print json_encode([
+ "status" => "error",
+ "error" => "wrong_source",
+ "message" => "Wrong source",
+ ]);
+ }
}
break;
@@ -929,6 +1480,14 @@ switch($PARAM_1)
]);
}
}
+ else
+ {
+ print json_encode([
+ "status" => "error",
+ "error" => "wrong_source",
+ "message" => "Wrong source",
+ ]);
+ }
}
break;
}
@@ -993,6 +1552,14 @@ switch($PARAM_1)
]);
}
}
+ else
+ {
+ print json_encode([
+ "status" => "error",
+ "error" => "wrong_source",
+ "message" => "Wrong source",
+ ]);
+ }
}
break;
@@ -1059,6 +1626,14 @@ switch($PARAM_1)
]);
}
}
+ else
+ {
+ print json_encode([
+ "status" => "error",
+ "error" => "wrong_source",
+ "message" => "Wrong source",
+ ]);
+ }
}
break;
}
@@ -1088,18 +1663,20 @@ switch($PARAM_1)
"phone_verified" => $ar_user['UF_PHONE_VERIFIED'],
];
+ $companies = getCompaniesForUser($ar_user['ID']);
$company_data = [
- "inn" => $ar_user['UF_INN'],
- "kpp" => $ar_user['UF_KPP'],
- "ogrn" => $ar_user['UF_OGRN'],
- "title" => $ar_user['UF_ORG_TITLE'],
+ "inn" => $companies[0]['inn'],
+ "kpp" => $companies[0]['kpp'],
+ "ogrn" => $companies[0]['ogrn'],
+ "title" => $companies[0]['title'],
];
print json_encode([
"status" => "success",
"user" => $user_data,
"company" => $company_data,
- "token" => \Bitrix\Main\Web\JWT::encode(["acc_number" => $ar_user['XML_ID']], $secret, 'HS256', null, null),
+ "companies" => $companies,
+ "token" => \Bitrix\Main\Web\JWT::encode([ "acc_number" => $companies[0]['acc_number'], "is_admin" => $companies[0]['is_admin'], "login" => $ar_user['LOGIN'], "companies" => $companies ], $secret, 'HS256', null, null),
]);
}
else
@@ -1117,43 +1694,58 @@ switch($PARAM_1)
{
if(!empty($REQ['phone']))
{
- $user = new \CUser;
- $filter = ["UF_PHONE_NUMBER" => $REQ['phone']];
-
- $numbers = [];
- $rsUsers = CUser::GetList(["ID" => "ASC"], false, $filter, array("SELECT"=>array("UF_*")));
- while($arUser = $rsUsers->Fetch())
+ if(checkRequestIsLocal())
{
- array_push($numbers, $arUser);
- }
+ $user = new \CUser;
+ $filter = ["UF_PHONE_NUMBER" => $REQ['phone']];
- if(count($numbers) > 0)
- {
- $ar_user = $numbers[count( $numbers ) - 1];
+ $numbers = [];
+ $rsUsers = CUser::GetList(["ID" => "ASC"], false, $filter, array("SELECT"=>array("UF_*")));
+ while($arUser = $rsUsers->Fetch())
+ {
+ array_push($numbers, $arUser);
+ }
- print json_encode([
- "status" => "success",
- "acc_number" => $ar_user['XML_ID'],
- "user" => [
- "email" => $ar_user['LOGIN'],
- "name" => $ar_user['NAME'],
- "secondname" => $ar_user['SECOND_NAME'],
- "lastname" => $ar_user['LAST_NAME'],
- "phone_number" => $ar_user['UF_PHONE_NUMBER'],
- "phone_verified" => $ar_user['UF_PHONE_VERIFIED'],
- ],
- "company" => [
- "inn" => $ar_user['UF_INN'],
- "kpp" => $ar_user['UF_KPP'],
- "ogrn" => $ar_user['UF_OGRN'],
- "title" => $ar_user['UF_ORG_TITLE'],
- ],
- ]);
+ if(count($numbers) > 0)
+ {
+ $ar_user = $numbers[count( $numbers ) - 1];
+ $companies = getCompaniesForUser($ar_user['ID']);
+
+ print json_encode([
+ "status" => "success",
+ "acc_number" => $ar_user['XML_ID'],
+ "user" => [
+ "email" => $ar_user['LOGIN'],
+ "name" => $ar_user['NAME'],
+ "secondname" => $ar_user['SECOND_NAME'],
+ "lastname" => $ar_user['LAST_NAME'],
+ "phone_number" => $ar_user['UF_PHONE_NUMBER'],
+ "phone_verified" => $ar_user['UF_PHONE_VERIFIED'],
+ ],
+ "company" => [
+ "inn" => $companies[0]['inn'],
+ "kpp" => $companies[0]['kpp'],
+ "ogrn" => $companies[0]['ogrn'],
+ "title" => $companies[0]['title'],
+ ],
+ "companies" => $companies,
+ ]);
+ }
+ else
+ {
+ print json_encode([
+ "status" => "error",
+ "error" => "unknown_user",
+ "message" => "Unknown user",
+ ]);
+ }
}
else
{
print json_encode([
"status" => "error",
+ "error" => "wrong_source",
+ "message" => "Wrong source",
]);
}
}
@@ -1165,11 +1757,46 @@ switch($PARAM_1)
}
}
break;
+
+ default:
+ {
+ print json_encode([
+ "status" => "error",
+ "error" => "wrong_auth_uri",
+ "message" => "Empty auth URI",
+ ]);
+ }
+ break;
}
die();
}
break;
+ case "companies":
+ {
+ try
+ {
+ $auth = (array) \Bitrix\Main\Web\JWT::decode($token, $secret, ["HS256"]);
+ print_r($auth);
+
+ //print json_encode([
+ // "status" => "success",
+ // "token" => $auth['username'],
+ //]);
+ //die();
+ }
+ catch(\Exception $e)
+ {
+ print json_encode([
+ "status" => "error",
+ "error" => "wrong_jwt",
+ "message" => $e->getMessage(),
+ ]);
+ die();
+ }
+ }
+ break;
+
case "rules":
{
if(CModule::IncludeModule('iblock'))
@@ -1241,6 +1868,121 @@ switch($PARAM_1)
}
break;
+ case "support":
+ {
+ switch($PARAM_3)
+ {
+ case "themes":
+ {
+ if(CModule::IncludeModule('iblock'))
+ {
+ $sort = ["ACTIVE_FROM" => "DESC", "SORT" => "DESC"];
+ $filter = ["ACTIVE" => "Y", "IBLOCK_ID" => 25];
+ $options = [];
+
+ /*
+ if(!empty($REQ['query']))
+ {
+ $filter[' "ASC" ], [ 'IBLOCK_ID' => 25, 'GLOBAL_ACTIVE' => 'Y', ], false, );
+ while($theme_result = $themes_res->GetNext())
+ {
+ $theme = ["id" => md5($theme_result['NAME']), "name" => $theme_result['NAME']];
+
+ $question_filter = [ 'IBLOCK_ID' => 25, 'SECTION_ID' => $theme_result['ID'], 'ACTIVE' => 'Y', ];
+
+ if(isset($REQ['query']) && !empty($REQ['query']))
+ {
+ $question_filter[ 'SEARCHABLE_CONTENT' ] = '%'.$REQ['query'].'%';
+ }
+
+ $questions = [];
+ $questions_res = CIBlockElement::GetList([ "SORT" => "ASC" ], $question_filter, false, []);
+ while ($questions_ob_element = $questions_res->GetNextElement())
+ {
+ $questions_ar_res = $questions_ob_element->GetFields();
+ $questions_ar_res['PROPERTIES'] = $questions_ob_element->GetProperties();
+
+ $templates = [];
+ if(count($questions_ar_res['PROPERTIES']['TEMPLATE_FILE']['VALUE']) > 0)
+ {
+ foreach($questions_ar_res['PROPERTIES']['TEMPLATE_FILE']['VALUE'] AS $file_id)
+ {
+ $f = CFile::GetByID($file_id);
+
+ $file = [
+ "filename" => $f->Fetch()['ORIGINAL_NAME'],
+ "url" => CFile::GetPath($file_id),
+ ];
+ $file['extension'] = strtoupper(get_ext_from_mime($f->arResult[0]['CONTENT_TYPE']));
+
+ $templates[] = $file;
+ }
+ }
+
+ $documents = null;
+
+ $question = [
+ "theme_id" => md5($theme['name']),
+ "theme" => $theme['name'],
+ "id" => md5($questions_ar_res['NAME']),
+ "title" => $questions_ar_res['NAME'],
+ "answer" => $questions_ar_res['PREVIEW_TEXT'],
+ "request" => $questions_ar_res['PROPERTIES']['REQUEST']['VALUE_XML_ID'] == "YES" ? true : false,
+ "templates" => count($templates) > 0 ? $templates : null,
+ "documents" => $questions_ar_res['PROPERTIES']['DOCUMENTS']['~VALUE'] !== "" ? $questions_ar_res['PROPERTIES']['DOCUMENTS']['~VALUE']['TEXT'] : null,
+ ];
+
+ $questions[] = $question;
+ //$questions[] = $questions_ar_res;
+ /*[
+ "name" => $questions_ar_res['NAME'],
+ "filename" => $f->Fetch()['ORIGINAL_NAME'],
+ "url" => CFile::GetPath($rules_ar_res['PROPERTIES']['FILE']['VALUE']),
+ ];
+ */
+ }
+
+ $theme['questions'] = $questions;
+ array_push($themes, $theme);
+ //print_r($theme_result);
+ //print "\n\n";
+ }
+
+ /*
+ $rules_res = CIBlockElement::GetList($sort, $filter, false, $options);
+ while ($rules_ob_element = $rules_res->GetNextElement())
+ {
+ $rules_ar_res = $rules_ob_element->GetFields();
+ $rules_ar_res['PROPERTIES'] = $rules_ob_element->GetProperties();
+
+ $f = CFile::GetByID($rules_ar_res['PROPERTIES']['FILE']['VALUE']);
+
+ $rules[] = [
+ "name" => $rules_ar_res['NAME'],
+ "active_from" => $rules_ar_res['ACTIVE_FROM'],
+ "filename" => $f->Fetch()['ORIGINAL_NAME'],
+ "url" => CFile::GetPath($rules_ar_res['PROPERTIES']['FILE']['VALUE']),
+ ];
+ }
+ */
+
+ print json_encode([
+ "themes" => $themes,
+ ]);
+ }
+ }
+ break;
+ }
+ }
+ break;
+
default:
{
print json_encode([
diff --git a/bitrix/php_interface/init.php b/bitrix/php_interface/init.php
index 3d0d788..78e5d57 100644
--- a/bitrix/php_interface/init.php
+++ b/bitrix/php_interface/init.php
@@ -33,6 +33,73 @@ function get_related_array($iblock_id, $ids)
return $ar_res;
}
+function get_ext_from_mime($mime)
+ {
+ $mime_map = [
+ 'application/x-compressed' => '7zip',
+ 'image/bmp' => 'bmp',
+ 'image/x-bmp' => 'bmp',
+ 'image/x-bitmap' => 'bmp',
+ 'image/x-xbitmap' => 'bmp',
+ 'image/x-win-bitmap' => 'bmp',
+ 'image/x-windows-bmp' => 'bmp',
+ 'image/ms-bmp' => 'bmp',
+ 'image/x-ms-bmp' => 'bmp',
+ 'application/bmp' => 'bmp',
+ 'application/x-bmp' => 'bmp',
+ 'application/x-win-bitmap' => 'bmp',
+ 'text/x-comma-separated-values' => 'csv',
+ 'text/comma-separated-values' => 'csv',
+ 'application/vnd.msexcel' => 'csv',
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => 'docx',
+ 'application/x-msdownload' => 'exe',
+ 'image/gif' => 'gif',
+ 'application/x-gzip' => 'gzip',
+ 'text/html' => 'html',
+ 'image/jpeg' => 'jpeg',
+ 'image/pjpeg' => 'jpeg',
+ 'application/pdf' => 'pdf',
+ 'application/octet-stream' => 'pdf',
+ 'image/png' => 'png',
+ 'image/x-png' => 'png',
+ 'application/powerpoint' => 'ppt',
+ 'application/vnd.ms-powerpoint' => 'ppt',
+ 'application/vnd.ms-office' => 'ppt',
+ 'application/msword' => 'doc',
+ 'application/vnd.openxmlformats-officedocument.presentationml.presentation' => 'pptx',
+ 'application/x-rar' => 'rar',
+ 'application/rar' => 'rar',
+ 'application/x-rar-compressed' => 'rar',
+ 'text/rtf' => 'rtf',
+ 'text/richtext' => 'rtx',
+ 'application/x-tar' => 'tar',
+ 'application/x-gzip-compressed' => 'tgz',
+ 'image/tiff' => 'tiff',
+ 'text/plain' => 'txt',
+ 'application/excel' => 'xl',
+ 'application/msexcel' => 'xls',
+ 'application/x-msexcel' => 'xls',
+ 'application/x-ms-excel' => 'xls',
+ 'application/x-excel' => 'xls',
+ 'application/x-dos_ms_excel' => 'xls',
+ 'application/xls' => 'xls',
+ 'application/x-xls' => 'xls',
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => 'xlsx',
+ 'application/vnd.ms-excel' => 'xlsx',
+ 'application/xml' => 'xml',
+ 'text/xml' => 'xml',
+ 'text/xsl' => 'xsl',
+ 'application/xspf+xml' => 'xspf',
+ 'application/x-zip' => 'zip',
+ 'application/zip' => 'zip',
+ 'application/x-zip-compressed' => 'zip',
+ 'application/s-compressed' => 'zip',
+ 'multipart/x-zip' => 'zip',
+ ];
+
+ return isset($mime_map[ $mime ]) ? $mime_map[ $mime ] : false;
+}
+
AddEventHandler("main", "OnEpilog", "OnEpilogHandler", 1);
function OnEpilogHandler()
{