Добрый день!
Сейчас у меня список работает так: создаю элемент, если указываю что статус "Модерация не пройдена" в поле "количество не пройденных модераций"
записывается число элементов у которых модерация не пройдена по каждому разработчику.
Каким образом мне можно через API сделать так, что бы месяц проведения модерации сравнивался с месяцами года и в поле кол-во модераций записывалось только число не пройденных модераций за месяц который я укажу в поле "Дата проведения модерации".
Сейчас это выглядит так: указываю разраба, статус "мод. не пройдена", и в поле кол-во непр. модер. записывается число этих модераций.
Другими словами нужно разграничить по месяцам добавление кол-ва модераций.
Во вложении скрин с общим видом списков.
Так же выкладываю код с init.php:
// регистрируем обработчики
AddEventHandler("iblock", "OnBeforeIBlockElementAdd", "OnBeforeIBlockElementAddHandler", 1000);
//создаем обработчик события для проверки повторного сохранения элемента инфоблока
function OnBeforeIBlockElementAddHandler(&$arFields){
if($arFields["IBLOCK_ID"]== 274){
//1 Проверяем статус "Модерация не пройдена"
if ($arFields["PROPERTY_VALUES"]["960"]== "2000" ) {
$BID = 274; //ID инфоблока
//Получаю ID разработчика
$razrab = $arFields["PROPERTY_VALUES"]["959"][n0][VALUE];
//2 Найдем все записи, у которых пользователь - мой, дата - за последний месяц, и статус "модерация не пройдена" (GetList)
$arSelect = Array("ID","PROPERTY_964" ) ; //Найти поле "Кол-во ошибок", вытянуть из инфоблока
$arFilter = Array("IBLOCK_ID"=>IntVal($BID),"PROPERTY_959" => $razrab, "PROPERTY_960_ENUM_ID" => 2000); //По пользователю и статуса
$result = CIBlockElement::GetList(
Array("ID"=>"DESC"),
$arFilter,
false,
Array(),
$arSelect
);
$moder_count = $result->nSelectedCount;
$moder_count++;
$i=0;
while($arRes = $result->Fetch())
{
$IBLOCK_ID = 274;
$IBLOCK_ELEMENT_ID = 964;
$ELEMENT_ID = $arRes[ID]; // код элемента
$PROPERTY_CODE = "KOLICHESTVO"; // код свойства
$PROPERTY_VALUE = $moder_count; // значение свойства
$fp = fopen($_SERVER['DOCUMENT_ROOT'].'/Znachenie_arFields.log', 'a');
fwrite($fp, "===============Смотрим на значения ____arite____===================================\r\n" ) ;
fwrite($fp, print_r($arRes, true));
fwrite($fp, "=========================================================== ===\r\n" ) ;
fclose($fp);
//Обновляем все остальные записи (увеличиваем их счетчик)
CIBlockElement::SetPropertyValuesEx($ELEMENT_ID, $IBLOCK_ID, array($PROPERTY_CODE => $PROPERTY_VALUE));
$i++;
}
//Добавляем счетчик для текущей записи
$arFields["PROPERTY_VALUES"]["964"][n0][VALUE] = $moder_count;
}
}
}
Сейчас у меня список работает так: создаю элемент, если указываю что статус "Модерация не пройдена" в поле "количество не пройденных модераций"
записывается число элементов у которых модерация не пройдена по каждому разработчику.
Каким образом мне можно через API сделать так, что бы месяц проведения модерации сравнивался с месяцами года и в поле кол-во модераций записывалось только число не пройденных модераций за месяц который я укажу в поле "Дата проведения модерации".
Сейчас это выглядит так: указываю разраба, статус "мод. не пройдена", и в поле кол-во непр. модер. записывается число этих модераций.
Другими словами нужно разграничить по месяцам добавление кол-ва модераций.
Во вложении скрин с общим видом списков.
Так же выкладываю код с init.php:
// регистрируем обработчики
AddEventHandler("iblock", "OnBeforeIBlockElementAdd", "OnBeforeIBlockElementAddHandler", 1000);
//создаем обработчик события для проверки повторного сохранения элемента инфоблока
function OnBeforeIBlockElementAddHandler(&$arFields){
if($arFields["IBLOCK_ID"]== 274){
//1 Проверяем статус "Модерация не пройдена"
if ($arFields["PROPERTY_VALUES"]["960"]== "2000" ) {
$BID = 274; //ID инфоблока
//Получаю ID разработчика
$razrab = $arFields["PROPERTY_VALUES"]["959"][n0][VALUE];
//2 Найдем все записи, у которых пользователь - мой, дата - за последний месяц, и статус "модерация не пройдена" (GetList)
$arSelect = Array("ID","PROPERTY_964" ) ; //Найти поле "Кол-во ошибок", вытянуть из инфоблока
$arFilter = Array("IBLOCK_ID"=>IntVal($BID),"PROPERTY_959" => $razrab, "PROPERTY_960_ENUM_ID" => 2000); //По пользователю и статуса
$result = CIBlockElement::GetList(
Array("ID"=>"DESC"),
$arFilter,
false,
Array(),
$arSelect
);
$moder_count = $result->nSelectedCount;
$moder_count++;
$i=0;
while($arRes = $result->Fetch())
{
$IBLOCK_ID = 274;
$IBLOCK_ELEMENT_ID = 964;
$ELEMENT_ID = $arRes[ID]; // код элемента
$PROPERTY_CODE = "KOLICHESTVO"; // код свойства
$PROPERTY_VALUE = $moder_count; // значение свойства
$fp = fopen($_SERVER['DOCUMENT_ROOT'].'/Znachenie_arFields.log', 'a');
fwrite($fp, "===============Смотрим на значения ____arite____===================================\r\n" ) ;
fwrite($fp, print_r($arRes, true));
fwrite($fp, "===========================================================
fclose($fp);
//Обновляем все остальные записи (увеличиваем их счетчик)
CIBlockElement::SetPropertyValuesEx($ELEMENT_ID, $IBLOCK_ID, array($PROPERTY_CODE => $PROPERTY_VALUE));
$i++;
}
//Добавляем счетчик для текущей записи
$arFields["PROPERTY_VALUES"]["964"][n0][VALUE] = $moder_count;
}
}
}