Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Как обеспечить чёткую идентификацию пользователей Битрикса в стороннем

00 голосов
5
Здравствуйте!
У нас на сайте (Битрикс - редакция "Бизнес") есть множество самодельных PHP-модулей выполнящих те или иные
функции, которых нам не хватало в стандартной поставке Битрикса...
Среди них есть и т.н. "Журнал доставок" в который попадают Заказы для доставки клиентам.
Проблема в том, что не удается обеспечить чёткую идентификацию пользователя/оператора Битрикса, их может
несколько одновременно работать с этой программой (запускаемой в Bitrix Frame).
Наш (бывший) веб-программист должен был обеспечить такую идентификацию, НО реально такая корректная идентификация происходит не всегда (даже после моих неоднократных правок кода! smile:), т.к. часто в заказах происходит установка статусов "Подтвержден клиентом" (от имени НЕ ТЕХ операторов что произвели это действия)!..
Таким образом хотелось бы понять (быть может есть готовые примеры) - как идентифицировать конкретного пользователя
Битрикса (например, привязав обработчик к нажатию кнопки) при условии что пользователей несколько одновременно
работают с этой сторонней PHP-программой?
(пример - если оператор Иванова отменила заказ из журнала доставки то в Битриксе,
если просто зайти в "Заказы" и найти этот заказ должно быть видно что именно она отменила заказ а не кто-то другой; ещё пример: оператор Петрова поставила заказ в журнал доставок на конкретную дату и соответсвенно в заказе должно быть видно что статус "Подтвержден клиентом" установлен у заказа именно Петрова в такое-то время) ну и т.п.
Всем заранее большое спасибо за ответы!
спросил 08 Ноя, 13 от Hak (200 баллов)

5 Ответы

00 голосов
не совсем понял что нужно, но если вы хотите в скрипте понять какой пользователь его запустил, то:

Код
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); //подключение API без вывода шаблонов
print $USER->GetID();
print $USER->GetLogin();
ответил 18 Дек, 13 от Boin (100 баллов)
00 голосов
Цитата
rasdaniil пишет:
не совсем понял что нужно, но если вы хотите в скрипте понять какой пользователь его запустил, то:
Код
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); //подключение API без вывода шаблонов
print $USER->GetID();
print $USER->GetLogin();


Спасибо за ответ! Уточню - я хочу определить - какой конкретно пользователь допустим нажал какую-либо кнопку и в зависимости от этого обновить статусы. Сейчас это делается так:

Код
$empstat=$_REQUEST['user_id'];
$db->Query("UPDATE b_sale_order SET PAYED='Y',STATUS_ID='F',EMP_STATUS_ID='{$empstat}',LOCKED_BY='NULL',DATE_LOCK='NULL',DATE_STATUS=NOW() WHERE ID='{$sorder}'");


Но это работает не корректно :(
ответил 03 Апр, 14 от Hak (200 баллов)
00 голосов
Цитата
rasdaniil пишет:
не совсем понял что нужно, но если вы хотите в скрипте понять какой пользователь его запустил, то:
Код
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); //подключение API без вывода шаблонов
print $USER->GetID();
print $USER->GetLogin();


Странно. Я вставляю в скрипт конструкцию:
Код
   require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
   $empstat=$USER->GetID();

Но скрипт в таком случае получается неработающим smile:(
Далее он задействуется так:
Код
   $db->Query("UPDATE b_sale_order SET PAYED='Y',STATUS_ID='F',EMP_STATUS_ID='{$empstat}',LOCKED_BY='NULL',DATE_LOCK='NULL',DATE_STATUS=NOW() WHERE ID='{$sorder}'");
ответил 26 Июль, 14 от Hak (200 баллов)
00 голосов
Странно... Код:

Код
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules­/main/include/prolog_before.php"); 
$empstat=$USER->GetID();


Работоспособный (проверял его в виде отдельного простого php файла).

А вот "вклинить" его в навороченный php файл не получается (перестает работать нормально).

Вот например участок кода из большого файла куда я хочу это вставить:

Код
/**
 * Отмена заказа
 */
function CanceledOrder($sorder,$sreason)
{
global $db;

$iorder=intval($sorder);
if($sorder == (string)$iorder)
   {
   $f=$db->QueryFirst("SELECT id,ideliv FROM md_delivery_items WHERE sorder='{$iorder}' LIMIT 0,1");
   if($f)
      {
      $db->Query("UPDATE md_delivery_items SET ideliv='0',sorder='' WHERE id='".$f['id']."'");
      if($f['ideliv']) updateJournalCnt($f['ideliv']);
      }

   $sreason=str_escape($sreason,1);
   $ecansel=$_REQUEST['user_id'];
   $db->SelectDB('sitemanager4');

   $hostname  = "localhost";
   $database  = "sitemanager4";
   $username  = "dost";
   $password  = "111";
   mysql_connect($hostname, $username, $password);
   mysql_select_db($database);
   $sql = 'UPDATE `b_sale_order` SET `LOCKED_BY` = NULL, `DATE_LOCK` = NULL';
   if (!mysql_query($sql)){echo "Проихошла ошибка:".mysql_error();}
   else {echo "Успешно очищен - ДО!";}

   $db->Query("UPDATE b_sale_order SET CANCELED='Y',DATE_CANCELED=NOW(),EMP_CANCELED_ID='{$ecansel}',REASON_CANCELED='{$sreason}',LOCKED_BY='NULL',DATE_LOCK='NULL',STATUS_ID='D' WHERE ID='{$sorder}'");

   $hostname  = "localhost";
   $database  = "sitemanager4";
   $username  = "dost";
   $password  = "111";
   mysql_connect($hostname, $username, $password);
   mysql_select_db($database);
   $sql = 'UPDATE `b_sale_order` SET `LOCKED_BY` = NULL, `DATE_LOCK` = NULL';
   if (!mysql_query($sql)){echo "Проихошла ошибка:".mysql_error();}
   else {echo "Успешно очищен - ПОСЛЕ!";}

   $db->SelectDB();
   }
}


Где соответсвенно:
Код
$ecansel=$_REQUEST['user_id'];

Хочу заменить на:
Код
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules­/main/include/prolog_before.php"); 
$empstat=$USER->GetID();

НО не работает :(
ответил 27 Ноя, 14 от Hak (200 баллов)
00 голосов
Дальнейшие изыскания показали, что приведенный выше способ НЕ ОПРЕДЕЛЯЕТ текущего пользователя :(
Будут ли у кого ещё какие соображения?
ответил 22 Март, 15 от Hak (200 баллов)

Похожие вопросы

0 голосов
1 ответ
0 голосов
1 ответ
0 голосов
7 ответов
спросил 26 Авг, 13 от Kirora (180 баллов)