Стоит задача менять группу пользователя в зависимости от давности последнего заказа, вот код:
$arFilter = Array
(
"ACTIVE" => "Y",
"GROUPS_ID" => Array(19,20,21,22)
);
$arSelect = array(
"FIELDS" => array("ID")
);
$rsUsers = CUser::GetList(($by="ID"), ($order="ASC"), $arFilter, $arSelect);
while($arUser = $rsUsers->Fetch())
{
echo "<pre>"; print_r($arUser); echo "</pre>";
$USER_ID = $arUser["ID"];
$arFilter = Array(
"USER_ID" => $USER_ID,
"ACTIVE" => "Y",
"CANCELED" => "N" // not canceled orders
);
$arSelect = array(
"DATE_INSERT"
);
$db_sales = CSaleOrder::GetList(array("DATE_INSERT" => "ASC"), $arFilter , $arSelect);
if ($ar_sales = $db_sales->Fetch())
{
global $USER;
$dateInsert = strtotime($ar_sales["DATE_INSERT"]);
$dateNow = date('d.m.Y H:i:s');
$dateNow = strtotime($dateNow);
$secondsAfterOrder = $dateNow - $dateInsert;
$daysAfterOrder = floor($secondsAfterOrder / (60 * 60 * 24)); // number of days elapsed
$arUserGroups = $USER->GetUserGroupArray(); // list of user groups
$arDiscountGroup = array(
0 => array ("GROUP_ID" => 19), // 5%
1 => array ("GROUP_ID" => 20), // 3%
2 => array ("GROUP_ID" => 21), // 2%
3 => array ("GROUP_ID" => 22), // 1%
);
if($daysAfterOrder <= 90)
{
$arDiscountGroup[0]["ACTIVE"] = "Y";
}
elseif($daysAfterOrder > 90 && $daysAfterOrder <= 120)
{
$arDiscountGroup[1]["ACTIVE"] = "Y";
}
elseif($daysAfterOrder > 120 && $daysAfterOrder <= 150)
{
$arDiscountGroup[2]["ACTIVE"] = "Y";
}
else
{
$arDiscountGroup[3]["ACTIVE"] = "Y";
}
foreach ($arDiscountGroup as $group=>$field)
{
if($field["ACTIVE"] == "Y")
{
if(!in_array($field["GROUP_ID"], $arUserGroups))
{
$arUserGroups[] = $field["GROUP_ID"];
}
}
else
{
$key = array_search($field["GROUP_ID"], $arUserGroups);
if($key !== false)
{
unset($arUserGroups[$key]);
}
}
}
$USER->SetUserGroup($USER_ID, $arUserGroups);
}
}
Группа пользователя меняется, но старая группа пользователя остается в сессии, как ее можно обновить, чтобы пользователю не надо было переавторизовываться ?
$arFilter = Array
(
"ACTIVE" => "Y",
"GROUPS_ID" => Array(19,20,21,22)
);
$arSelect = array(
"FIELDS" => array("ID")
);
$rsUsers = CUser::GetList(($by="ID"), ($order="ASC"), $arFilter, $arSelect);
while($arUser = $rsUsers->Fetch())
{
echo "<pre>"; print_r($arUser); echo "</pre>";
$USER_ID = $arUser["ID"];
$arFilter = Array(
"USER_ID" => $USER_ID,
"ACTIVE" => "Y",
"CANCELED" => "N" // not canceled orders
);
$arSelect = array(
"DATE_INSERT"
);
$db_sales = CSaleOrder::GetList(array("DATE_INSERT" => "ASC"), $arFilter , $arSelect);
if ($ar_sales = $db_sales->Fetch())
{
global $USER;
$dateInsert = strtotime($ar_sales["DATE_INSERT"]);
$dateNow = date('d.m.Y H:i:s');
$dateNow = strtotime($dateNow);
$secondsAfterOrder = $dateNow - $dateInsert;
$daysAfterOrder = floor($secondsAfterOrder / (60 * 60 * 24)); // number of days elapsed
$arUserGroups = $USER->GetUserGroupArray(); // list of user groups
$arDiscountGroup = array(
0 => array ("GROUP_ID" => 19), // 5%
1 => array ("GROUP_ID" => 20), // 3%
2 => array ("GROUP_ID" => 21), // 2%
3 => array ("GROUP_ID" => 22), // 1%
);
if($daysAfterOrder <= 90)
{
$arDiscountGroup[0]["ACTIVE"] = "Y";
}
elseif($daysAfterOrder > 90 && $daysAfterOrder <= 120)
{
$arDiscountGroup[1]["ACTIVE"] = "Y";
}
elseif($daysAfterOrder > 120 && $daysAfterOrder <= 150)
{
$arDiscountGroup[2]["ACTIVE"] = "Y";
}
else
{
$arDiscountGroup[3]["ACTIVE"] = "Y";
}
foreach ($arDiscountGroup as $group=>$field)
{
if($field["ACTIVE"] == "Y")
{
if(!in_array($field["GROUP_ID"], $arUserGroups))
{
$arUserGroups[] = $field["GROUP_ID"];
}
}
else
{
$key = array_search($field["GROUP_ID"], $arUserGroups);
if($key !== false)
{
unset($arUserGroups[$key]);
}
}
}
$USER->SetUserGroup($USER_ID, $arUserGroups);
}
}
Группа пользователя меняется, но старая группа пользователя остается в сессии, как ее можно обновить, чтобы пользователю не надо было переавторизовываться ?