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'])) { $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); } $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; }