function CheckFields($arUserField, $value)
{
static $arRootID = array();
$fileExists = false;
$arError = array();
if (! static::_checkRequiredModules())
$arError[] = array('id' => 'WD_ERR_MODULES', 'text' => GetMessage('WD_ERR_MODULES'));
$arFile = static::_fileUnserialize($value);
if ($arFile === false)
$arError[] = array('id' => 'WD_ERR_PARSE_FILE', 'text' => GetMessage('WD_ERR_PARSE_FILE'));
$checkRights = static::CheckRights($arFile['id']);
if($checkRights === null)
{
//mark to delete non exists file
self::$UF_TO_DELETE[] = $value;
return array();
}
elseif($checkRights === false)
{
$arError[] = array('id' => 'WD_ERR_IBLOCK404', 'text' =>GetMessage('WD_ERR_IBLOCK404'));
}
if ((sizeof($arError) <= 0) && isset($arFile['dest_section'])) // move to section
{
$ibe = new CIBlockElement();
$dbWDFile = $ibe->GetList(array(), array('ID' => $arFile['id']), false, false, array('ID', 'NAME', 'IBLOCK_SECTION_ID', 'IBLOCK_ID'));
if ($dbWDFile && $arWDFile = $dbWDFile->Fetch())
{
$arFile['iblock'] = $arWDFile['IBLOCK_ID'];
if ($arFile['dest_iblock'] != $arWDFile['IBLOCK_ID'])
{
$dbIBlock = CIBlock::GetList(array(), array('ID' => $arFile['dest_iblock'], 'CHECK_PERMISSIONS' => 'N'));
if ($dbIBlock && $arIBlock=$dbIBlock->Fetch())
{
$arFile['iblock'] = $arIBlock['ID'];
}
else
{
$arError[] = array('id' => 'WD_ERR_IBLOCK404', 'text' =>GetMessage('WD_ERR_IBLOCK404'));
}
}
$arFile['section'] = $arWDFile['IBLOCK_SECTION_ID'];
if (($arFile['dest_section'] != $arWDFile['IBLOCK_SECTION_ID']) || ($arFile['iblock'] != $arWDFile['IBLOCK_ID']))
{
$arFile['section'] = false;
if ($arFile['dest_section'] === 0)
{
$arFile['section'] = 0;
}
else
{
$dbWDSection = CIBlockSection::GetList(
array(),
array(
'ID' => $arFile['dest_section'],
'IBLOCK_ID' => $arFile['iblock'],
'CHECK_PERMISSIONS' => 'Y'
)
);
if ($dbWDSection && $arWDSection = $dbWDSection->Fetch())
{
$arFile['section'] = $arWDSection['ID'];
}
else
{
$dbWDSection = CIBlockSection::GetList(
array(),
array(
'ID' => $arFile['dest_section'],
'IBLOCK_ID' => $arFile['iblock'],
'CHECK_PERMISSIONS' => 'N'
)
);
if ($dbWDSection && $arWDSection = $dbWDSection->Fetch())
{
$arError[] = array('id' => 'WD_ERR_SECTION403', 'text' => GetMessage('WD_ERR_SECTION403'));
}
else
{
$arError[] = array('id' => 'WD_ERR_SECTION404', 'text' => GetMessage('WD_ERR_SECTION404'));
}
}
}
if (sizeof($arError) <= 0)
{
$arFileExistSearch = array(
'NAME' => $arWDFile['NAME'],
'IBLOCK_ID' => $arFile['dest_iblock'],
'SECTION_ID' => $arFile['dest_section']
);
$dbFileExist = CIBlockElement::GetList( array(), $arFileExistSearch, false, false, array('ID', 'PROPERTY_FILE'));
if ($dbFileExist && $arFileExists = $dbFileExist->Fetch())
{
$fileExists = $arFileExists;
//$arError[] = array('id' => 'WD_ERR_FILE_EXISTS', 'text' =>GetMessage('WD_ERR_FILE_EXISTS'));
}
}
}
if (sizeof($arError) <= 0)
{
if ($fileExists === false)
{
if ($arFile['iblock'] != $arWDFile['IBLOCK_ID'])
{
global $DB;
$DB->startTransaction();
$newID = CWebDavIblock::_move_from_iblock_to_iblock($arWDFile['ID'], $arFile['iblock'], $arFile['section']);
if (!$newID)
{
$DB->rollback();
$arError[] = array('id' => 'WD_ERR_ELEMENT_MOVE', 'text' => GetMessage('WD_ERR_PARSE_FILE'));
}
else
{
$DB->commit();
static::$UF_MOVED[$arWDFile['ID']] = $newID;
}
}
elseif( $arFile['section'] != $arWDFile['IBLOCK_SECTION_ID'] )
{
global $DB;
$DB->startTransaction();
if (! $ibe->Update($arFile['id'], array('IBLOCK_SECTION' => $arFile['dest_section'])))
{
$DB->rollback();
$arError[] = array('id' => 'WD_ERR_IBLOCK_ELEMENT_UPDATE', 'text' => $ibe->LAST_MESSAGE);
}
else
{
$DB->commit();
}
}
}
else
{
if (!isset($arRootID[$arFile['iblock']]))
{
$userIBlockID = CWebDavIblock::LibOptions('user_files', false, SITE_ID);
$userIBlockID = $userIBlockID['id'];
$groupIBlockID = CWebDavIblock::LibOptions('group_files', false, SITE_ID);
$groupIBlockID = $groupIBlockID['id'];
if ($arFile['iblock'] == $userIBlockID || $arFile['iblock'] == $groupIBlockID)
{
$dbChain = CIBlockSection::GetNavChain($arFile['iblock'], $arFile['section']);
if ($dbChain && $arChain = $dbChain->Fetch())
$arRootID[$arFile['iblock']] = $arChain['ID'];
}
else
{
$arRootID[$arFile['iblock']] = false;
}
}
$ob = null;
$rootID = $arRootID[$arFile['iblock']];
if ($arFile['iblock'] == $userIBlockID)
{
$dbSocNetSection = CIBlockSection::GetList(array(), array('ID' => $rootID));
if ($dbSocNetSection && $arSocNetSection = $dbSocNetSection->Fetch())
{
$ob = new CWebDavIblock($arFile['iblock'], '',
array(
"ROOT_SECTION_ID" => $rootID,
'DOCUMENT_TYPE' => array("webdav", "CIBlockDocumentWebdavSocnet", "iblock_".$arFile['iblock']."_user_".$arSocNetSection['CREATED_BY'])
)
);
}
}
elseif ($arFile['iblock'] == $groupIBlockID)
{
$dbSocNetSection = CIBlockSection::GetList(array(), array('ID' => $rootID));
if ($dbSocNetSection && $arSocNetSection = $dbSocNetSection->Fetch())
{
$ob = new CWebDavIblock($arFile['iblock'], '',
array(
"ROOT_SECTION_ID" => $rootID,
'DOCUMENT_TYPE' => array("webdav", "CIBlockDocumentWebdavSocnet", "iblock_".$arFile['iblock']."_group_".$arSocNetSection['SOCNET_GROUP_ID'])
)
);
}
}
else
{
$ob = new CWebDavIblock($arFile['iblock'], '', array());
}
if(!isset($ob))
{
$arError[] = array(
"id" => "error_put",
"text" => "Empty webdav object.",
);
return $arError;
}
$dbFileNew = $ibe->GetList(
array(),
array(
'ID' => $arWDFile['ID'],
'IBLOCK_ID' => $arWDFile['IBLOCK_ID'],
), false, false, array('ID', 'PROPERTY_FILE'));
if ($dbFileNew && $arFileNew = $dbFileNew->Fetch())
{
$fileNew = $arFileNew;
//$arError[] = array('id' => 'WD_ERR_FILE_EXISTS', 'text' =>GetMessage('WD_ERR_FILE_EXISTS'));
}
$cFile = CFile::MakeFileArray($fileNew['PROPERTY_FILE_VALUE']);
$options = array(
"new" => false,
"FILE_NAME" => $arWDFile['NAME'],
"IBLOCK_ID" => $arFile['iblock'],
"IBLOCK_SECTION_ID" => $arFile['section'],
"ELEMENT_ID" => $fileExists['ID'],
"arFile" => $cFile
);
$GLOBALS["DB"]->StartTransaction();
if (!$ob->put_commit($options))
{
$arError[] = array(
"id" => "error_put",
"text" => $ob->LAST_ERROR);
$GLOBALS["DB"]->Rollback();
}
else
{
$GLOBALS["DB"]->Commit();
static::$UF_MOVED[$arWDFile['ID']] = $options['ELEMENT_ID'];
}
}
}
}
}
return $arError;
}