Exemple #1
0
     $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;
 }