Example #1
0
 function _move_to_trash(&$options)
 {
     self::$trashCache = array();
     $this->IsDir($options);
     $bIsDir = $this->arParams["is_dir"];
     if ($bIsDir) {
         $arElement = $this->arParams['dir_array'];
     } else {
         $arElement = $this->arParams['element_array'];
     }
     if ($arElement['IBLOCK_SECTION_ID'] === null) {
         $arElement['IBLOCK_SECTION_ID'] = 0;
     }
     $sOriginalName = str_replace(array('///', '//'), '/', $this->_get_path($arElement['IBLOCK_SECTION_ID'], false) . '/' . $arElement['NAME']);
     // false in _get_path - for correct ru names in trash recovery param
     $arUndeleteOptions = $options;
     $arUndeleteOptions["props"][] = array("ns" => "BX:", "name" => "UNDELETE", "val" => $sOriginalName);
     $this->PROPPATCH($arUndeleteOptions);
     $this->CACHE['CWebDavIblock::GetObject'] = array();
     if ($bIsDir) {
         $arDeleteSections = array($options["section_id"]);
         $this->_onEvent('Trash', $arElement["ID"], 'FOLDER');
         $markDeleteSection = null;
         $markDeleteSection = CWebDavDiskDispatcher::addElementForDeletingMark($arElement, $arElement);
         reset($arDeleteSections);
         while ($sectionID = current($arDeleteSections)) {
             $dbDeleteItems = $this->_get_mixed_list($sectionID);
             while ($arDeleteItem = $dbDeleteItems->Fetch()) {
                 $sOriginalName = str_replace(array('///', '//'), '/', $this->_get_path($arDeleteItem["IBLOCK_SECTION_ID"], false) . '/' . $arDeleteItem['NAME']);
                 $arUndeleteOptions = array("props" => array(array("ns" => "BX:", "name" => "UNDELETE", "val" => $sOriginalName)));
                 if ($arDeleteItem["TYPE"] == "S") {
                     $arUndeleteOptions["section_id"] = $arDeleteItem["ID"];
                     $arDeleteSections[] = $arDeleteItem["ID"];
                     if ($markDeleteSection) {
                         CWebDavDiskDispatcher::addElementForDeletingMark($arDeleteItem, $arElement);
                     }
                     $this->_onEvent('Trash', $arDeleteItem['ID'], 'FOLDER');
                 } else {
                     $arUndeleteOptions["element_id"] = $arDeleteItem["ID"];
                     if ($markDeleteSection) {
                         CWebDavDiskDispatcher::addElementForDeletingMark($arDeleteItem, $arElement, false);
                     }
                     $this->_onEvent('Trash', $arDeleteItem['ID']);
                 }
                 $this->PROPPATCH($arUndeleteOptions);
             }
             next($arDeleteSections);
         }
     } else {
         CWebDavDiskDispatcher::addElementForDeletingMark($arElement, null, false);
         $this->_onEvent('Trash', $this->arParams['element_id']);
     }
     if ($bIsDir) {
         CWebDavSymlinkHelper::setSectionOriginalName($this->arParams['dir_array']['ID'], $this->arParams['dir_array']['NAME']);
         $destName = $this->arParams['dir_array']['NAME'] . " " . $this->CorrectName(ConvertTimeStamp(time(), "FULL"));
     } else {
         if (strlen($this->arParams['file_extention']) > 1) {
             $destName = substr($this->arParams['element_name'], 0, -strlen($this->arParams['file_extention'])) . " " . $this->CorrectName(ConvertTimeStamp(time(), "FULL")) . $this->arParams['file_extention'];
         } else {
             $destName = $this->arParams['element_name'] . " " . $this->CorrectName(ConvertTimeStamp(time(), "FULL")) . ".noext";
         }
     }
     $destName = str_replace("/", "_", $destName);
     $options['dest_url'] = "/" . $this->meta_names['TRASH']['name'] . "/" . $destName;
     $options['rename'] = true;
     $this->events_enabled = false;
     $status = $this->MOVE($options);
     $this->events_enabled = true;
     if (intval($status) > 200 && intval($status) < 300) {
         CWebDavDiskDispatcher::markDeleteBatch();
     } else {
         CWebDavDiskDispatcher::clearDeleteBatch();
     }
     if (intval($status) == 201) {
         return "204 No Content";
     } else {
         $GLOBALS["APPLICATION"]->ResetException();
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("WD_FILE_ERROR16"), "FILE_OR_FOLDER_TRASH_ERROR");
         return $status;
     }
 }