$IBLOCK_SECTION_ID = intVal($_REQUEST["IBLOCK_SECTION_ID"]); if (!empty($arResult["ROOT_SECTION"])) { $IBLOCK_SECTION_ID = $IBLOCK_SECTION_ID <= 0 ? $arResult["ROOT_SECTION"]["ID"] : $IBLOCK_SECTION_ID; if ($arResult["ROOT_SECTION"]["ID"] != $IBLOCK_SECTION_ID) { $arFilter = array("IBLOCK_ID" => $arParams["IBLOCK_ID"], "ID" => $IBLOCK_SECTION_ID, "RIGHT_MARGIN" => $arResult["ROOT_SECTION"]["RIGHT_MARGIN"], "LEFT_MARGIN" => $arResult["ROOT_SECTION"]["LEFT_MARGIN"]); $db_res = CIBlockSection::GetList(array(), $arFilter); if (!($db_res && ($res = $db_res->Fetch()))) { $IBLOCK_SECTION_ID = false; } } } if ($IBLOCK_SECTION_ID == $arResult["ELEMENT"]["IBLOCK_SECTION_ID"]) { $IBLOCK_SECTION_ID = false; } } $_REQUEST["NAME"] = CWebDavIblock::CorrectName($_REQUEST["NAME"]); if ($arResult["ELEMENT"]["FULL_NAME"] != $_REQUEST["NAME"] || $IBLOCK_SECTION_ID !== false) { $db_res = CIBlockElement::GetList(array(), array("SECTION_ID" => $IBLOCK_SECTION_ID === false ? $arParams["SECTION_ID"] : $IBLOCK_SECTION_ID, "NAME" => $_REQUEST["NAME"], "!=ID" => $arResult["ELEMENT"]["ID"])); if ($db_res && ($res = $db_res->Fetch())) { $arError[] = array("id" => "element_already_exists", "text" => GetMessage("WD_ERROR_ELEMENT_ALREADY_EXISTS")); } else { $rootPath = implode('/', array_slice(explode('/', $arResult['ELEMENT']['PATH']), 0, -1)); $options = array("path" => $rootPath, "depth" => 1); $result = $ob->PROPFIND($options, $files, array("COLUMNS" => array("ID", "NAME"), "return" => "array")); if (!empty($result["RESULT"])) { foreach ($result["RESULT"] as $key => $res) { $options = false; if ($res["ID"] == $arParams["ELEMENT_ID"]) { $options = array("element_id" => $res["ID"], "dest_url" => str_replace("//", "/", $ob->_get_path($_REQUEST["IBLOCK_SECTION_ID"], false) . "/" . $_REQUEST["NAME"]), "overwrite" => true); $res = $ob->MOVE($options); }
function saveFile(&$name, $arFile, &$arElement) { $ob = $this->ob; $arResult = $this->arResult; $arParams = $this->arParams; $res = array(); $name = CWebDavIblock::CorrectName($name); $arDocumentStates = !isset($arParams['arDocumentStates']) ? array() : $arParams['arDocumentStates']; $bRandom = isset($_REQUEST['random_folder']) && $_REQUEST['random_folder'] == 'Y'; $bDropped = $bRandom || isset($_REQUEST['dropped']) && $_REQUEST['dropped'] == 'Y'; if ($bDropped) { $arParams['SECTION_ID'] = $ob->GetMetaID("DROPPED"); //Add (1), (2), etc. if name non unique in traget dir $mainPartName = $name; $newName = $mainPartName; $countNonUnique = 0; while (!$ob->CheckUniqueName($newName, $arParams["SECTION_ID"], $res)) { $countNonUnique++; $newName = strstr($mainPartName, '.', true) . " ({$countNonUnique})" . strstr($mainPartName, '.'); } $name = $newName; } elseif (!$ob->CheckUniqueName($name, $arParams["SECTION_ID"], $res)) { if ($res["object"] == "section") { $arFileError[] = array("id" => "double_name_section", "text" => str_replace("#NAME#", $arFile["name"], GetMessage("WD_ERROR_DOUBLE_NAME_SECTION"))); } else { if ($res["data"]["ID"] == $arResult["ELEMENT"]["WF_PARENT_ELEMENT_ID"]) { $arElement = $arResult["ELEMENT"]; } else { $arElement = $res["data"]; } if ($ob->workflow == "bizproc") { $docID = $arParams['DOCUMENT_TYPE']; $docID[2] = $res["data"]["ID"]; $arDocumentStates = CBPDocument::GetDocumentStates($arParams["DOCUMENT_TYPE"], $docID); } if ($arParams["USE_WORKFLOW"] == "Y" && intVal($res["data"]["WF_PARENT_ELEMENT_ID"]) > 0) { $arElement["ID"] = $res["data"]["WF_PARENT_ELEMENT_ID"]; } if ($_REQUEST["overview"] != "Y") { if ($name != $arFile["name"]) { $arFileError[] = array("id" => "double_name_element", "text" => str_replace(array("#NAME#", "#TITLE#"), array($arFile["name"], $name), GetMessage("WD_ERROR_DOUBLE_NAME_TITLE"))); } else { $arFileError[] = array("id" => "double_name_element", "text" => str_replace("#NAME#", $arFile["name"], GetMessage("WD_ERROR_DOUBLE_NAME_ELEMENT"))); } } elseif ($arParams["CHECK_CREATOR"] == "Y" && $arElement["CREATED_BY"] != $GLOBALS['USER']->GetId()) { $arFileError[] = array("id" => "double_name_element", "text" => str_replace("#NAME#", $arFile["name"], GetMessage("WD_ERROR_DOUBLE_NAME_ELEMENT_NOT_REWRITE"))); } elseif ($arParams["USE_WORKFLOW"] == "Y" && ($res["data"]["WF_STATUS_ID"] > 1 && $arResult["WF_STATUSES_PERMISSION"][$res["data"]["WF_STATUS_ID"]] < 2)) { if ($name != $arFile["name"]) { $arFileError[] = array("id" => "double_name_element", "text" => str_replace(array("#NAME#", "#TITLE#"), array($arFile["name"], $name), GetMessage("WD_ERROR_DOUBLE_NAME_TITLE"))); } else { $arFileError[] = array("id" => "double_name_element_and_bad_permission", "text" => str_replace("#NAME#", $arFile["name"], GetMessage("WD_ERROR_DOUBLE_NAME_ELEMENT"))); } } } } if ($arParams['ELEMENT_ID'] > 0 && $arResult['ELEMENT']['FILE_EXTENTION'] != strtolower(strrchr($arFile["name"], '.'))) { $arFileError[] = array("id" => "extensions_dont_match", "text" => GetMessage("WD_ERROR_EXTENSIONS_DONT_MATCH")); } //this is new element if (empty($arElement)) { if (!$ob->CheckWebRights("PUT", array('arElement' => array('is_dir' => false, 'parent_id' => $arParams["SECTION_ID"]), 'action' => 'create', 'create_element_in_section' => true), false)) { $arFileError[] = array("id" => "bad_file", "text" => $ob->LAST_ERROR ? $ob->LAST_ERROR : GetMessage("WD_ERROR_UPLOAD_BAD_FILE")); } } if (empty($arFileError)) { $options = array("new" => empty($arElement), 'dropped' => $bDropped, "arFile" => $arFile, "arDocumentStates" => $arDocumentStates, "arUserGroups" => $ob->USER["GROUPS"], "FILE_NAME" => $name, "IBLOCK_ID" => $arParams["IBLOCK_ID"], "IBLOCK_SECTION_ID" => $arParams["SECTION_ID"], "TAGS" => $arFile["TAGS"], "PREVIEW_TEXT" => $arFile["DESCRIPTION"]); if (intVal($_POST["WF_STATUS_ID"]) > 0) { $options["WF_STATUS_ID"] = $_POST["WF_STATUS_ID"]; } if (!empty($arElement)) { $options["ELEMENT_ID"] = $arElement["ID"]; } else { $options["arUserGroups"][] = "Author"; } $options['USER_FIELDS'] = array(); $GLOBALS['USER_FIELD_MANAGER']->EditFormAddFields($ob->GetUfEntity(), $options['USER_FIELDS']); if (!$ob->put_commit($options)) { $arFileError[] = array("id" => "error_put", "text" => $ob->LAST_ERROR); } else { $arElement['ID'] = $options['ELEMENT_ID']; } $arElement["dropped"] = $bDropped ? "Y" : "N"; } if (empty($arFileError)) { $io = CBXVirtualIo::GetInstance(); $file = $io->GetFile($arFile["tmp_name"]); $file->unlink(); return true; } return $arFileError; }