public function getDataToShow() { $event = \CCalendarEvent::getById($this->entityId); if (empty($event)) { return array(); } $members = array(); if ($event['IS_MEETING']) { if (is_array($event['~ATTENDEES'])) { foreach ($event['~ATTENDEES'] as $user) { $members[] = array("NAME" => $user['DISPLAY_NAME'], "LINK" => \CComponentEngine::makePathFromTemplate($this->getPathToUser(), array("user_id" => $user['USER_ID'])), 'AVATAR_SRC' => $user['AVATAR'], "IS_EXTRANET" => "N"); } } } else { $by = "id"; $order = "asc"; $userRow = \CUser::getList($by, $order, array("ID_EQUAL_EXACT" => $event['CREATED_BY'], "ACTIVE" => "Y"), array("SELECT" => array('ID', 'NAME', 'LAST_NAME', 'LOGIN', 'PERSONAL_PHOTO')))->fetch(); if ($userRow) { $name = trim($userRow['NAME'] . ' ' . $userRow['LAST_NAME']); if ($name == '') { $name = trim($userRow['LOGIN']); } $members[] = array("NAME" => $name, "LINK" => \CComponentEngine::makePathFromTemplate($this->getPathToUser(), array("user_id" => $event['CREATED_BY'])), 'AVATAR_SRC' => Ui\Avatar::getPerson($userRow['PERSONAL_PHOTO']), "IS_EXTRANET" => "N"); } } return array('TITLE' => Loc::getMessage('DISK_UF_CAL_EVENT_CONNECTOR_TITLE') . ": " . $event['NAME'], 'DETAIL_URL' => null, 'DESCRIPTION' => Ui\Text::killTags($event['DESCRIPTION']), 'MEMBERS' => $members); }
public function getDataToShow() { if (!$this->loadBlogPostData()) { return null; } return array('TITLE' => Loc::getMessage('DISK_UF_BLOG_POST_CONNECTOR_TITLE'), 'DETAIL_URL' => \CComponentEngine::makePathFromTemplate($this->blogPostData['PATH'], array('post_id' => $this->entityId)), 'DESCRIPTION' => Ui\Text::killTags($this->blogPostData['TITLE']), 'MEMBERS' => $this->getDestinations()); }
public function getDataToShow() { $data = $this->loadTaskData($this->getUser()->getId()); if (!$data) { return null; } return array('TITLE' => Loc::getMessage('DISK_UF_TASK_CONNECTOR_TITLE', array('#ID#' => $this->entityId)), 'DETAIL_URL' => null, 'DESCRIPTION' => Ui\Text::killTags($data['TITLE']), 'MEMBERS' => $this->getDestinations()); }
protected function processActionAddFolder() { if (!$this->checkRequiredPostParams(array('name', 'targetFolderId'))) { $this->sendJsonErrorResponse(); } /** @var Folder $folder */ $folder = Folder::loadById((int) $this->request->getPost('targetFolderId'), array('STORAGE')); if (!$folder) { $this->errorCollection->addOne(new Error(Loc::getMessage('DISK_FOLDER_TOOLBAR_ERROR_COULD_NOT_FIND_OBJECT'), self::ERROR_COULD_NOT_FIND_OBJECT)); $this->sendJsonErrorResponse(); } $securityContext = $folder->getStorage()->getCurrentUserSecurityContext(); if (!$folder->canAdd($securityContext)) { $this->sendJsonAccessDeniedResponse(); } $name = $this->request->getPost('name'); $subFolderModel = $folder->addSubFolder(array('NAME' => Ui\Text::correctFolderName($name), 'CREATED_BY' => $this->getUser()->getId())); if ($subFolderModel === null) { $this->errorCollection->add($folder->getErrors()); $this->sendJsonErrorResponse(); } $this->sendJsonSuccessResponse(array('folder' => array('id' => $subFolderModel->getId()))); }
} if ($arResult['PAGE'] != $arResult['TOTAL_PAGE']) { $portion = $arResult['TOTAL_COUNT'] - $arResult['PAGE'] * $arResult['ON_PAGE']; ?> <div class="bx-webdav-invite-us-place-for-users"></div> <div class="bx-webdav-invite-us-more"> <?php if ($portion > 0) { ?> <span class="bx-webdav-invite-us-more-link" onclick="diskLoadPortionUsersList(this, <?php echo $arResult['OBJECT']['ID']; ?> , '<?php echo $arResult['USER_LIST_TYPE']; ?> ', <?php echo ++$arResult['PAGE']; ?> , '<?php echo $arResult['URL_TO_SHOW_USER_LIST']; ?> ');"><?php echo \Bitrix\Disk\Ui\Text::getNumericCase($portion, GetMessage('DISK_FOLDER_LIST_INVITE_MODAL_TAB_USERS_LOAD_MORE_COUNT_1', array('#COUNT#' => $portion)), GetMessage('DISK_FOLDER_LIST_INVITE_MODAL_TAB_USERS_LOAD_MORE_COUNT_1_21', array('#COUNT#' => $portion)), GetMessage('DISK_FOLDER_LIST_INVITE_MODAL_TAB_USERS_LOAD_MORE_COUNT_2_4', array('#COUNT#' => $portion)), GetMessage('DISK_FOLDER_LIST_INVITE_MODAL_TAB_USERS_LOAD_MORE_COUNT_5_20', array('#COUNT#' => $portion))); ?> </span> <?php } ?> </div> <?php }
public function Execute() { if (!CModule::IncludeModule("disk")) return CBPActivityExecutionStatus::Closed; $groupId = (int)$this->GroupId; $files = $this->Files; $folderName = \Bitrix\Disk\Ui\Text::correctFolderName($this->FolderName); $storage = \Bitrix\Disk\Driver::getInstance()->getStorageByGroupId($groupId); if (!$storage) { $storage = \Bitrix\Disk\Driver::getInstance()->addGroupStorage($groupId); } if (!$storage) { return CBPActivityExecutionStatus::Closed; } $folder = null; if (strlen($folderName) > 0) { $targetFolder = \Bitrix\Disk\Folder::load(array('=NAME' => $folderName, 'STORAGE_ID' => $storage->getId(), 'PARENT_ID' => $storage->getRootObjectId() )); if ($targetFolder) { $folder = $targetFolder; } else { $folder = $storage->addFolder(array( 'NAME' => $folderName, 'CREATED_BY' => \Bitrix\Disk\SystemUser::SYSTEM_USER_ID ), array(), true); } } if (!$folder) { $folder = $storage->getRootObject(); } foreach ($files as $file) { if (!(int)$file) continue; $fileArray = CFile::MakeFileArray($file); if (!is_array($fileArray)) continue; $folder->uploadFile($fileArray, array( 'NAME' => $fileArray['name'], 'CREATED_BY' => \Bitrix\Disk\SystemUser::SYSTEM_USER_ID, ), array(), true ); } return CBPActivityExecutionStatus::Closed; }
public static function onSearchIndex($userField) { $values = $userField['VALUE']; if (!is_array($values)) { $values = array($userField['VALUE']); } $searchData = array(); $fileIdsForLoad = array(); $attachedIdsForLoad = array(); foreach ($values as $value) { list($type, $realValue) = self::detectType($value); if ($type == self::TYPE_NEW_OBJECT) { if (self::isLoadedFile($realValue)) { $searchData[] = self::getFileById($realValue)->getName(); } else { $fileIdsForLoad[] = $realValue; } } else { $attachedIdsForLoad[] = $realValue; } } unset($value); if ($attachedIdsForLoad) { $query = AttachedObject::getList(array('select' => array('NAME' => 'OBJECT.NAME'), 'filter' => array('ID' => $attachedIdsForLoad))); while ($attachedItem = $query->fetch()) { $searchData[] = Ui\Text::cleanTrashCanSuffix($attachedItem['NAME']); } unset($attachedItem, $attachedIdsForLoad); } if ($fileIdsForLoad) { $query = File::getList(array('select' => array('NAME'), 'filter' => array('ID' => $fileIdsForLoad))); while ($fileItem = $query->fetch()) { $searchData[] = Ui\Text::cleanTrashCanSuffix($fileItem['NAME']); } unset($fileItem, $fileIdsForLoad); } return implode("\r\n", $searchData); }
/** * Uploads new file to folder. * @param array $fileArray Structure like $_FILES. * @param array $data Contains additional fields (CREATED_BY, NAME, etc). * @param array $rights Rights (@see \Bitrix\Disk\RightsManager). * @param bool $generateUniqueName Generates unique name for object in directory. * @throws \Bitrix\Main\ArgumentException * @return File|null */ public function uploadFile(array $fileArray, array $data, array $rights = array(), $generateUniqueName = false) { $this->errorCollection->clear(); $this->checkRequiredInputParams($data, array('NAME', 'CREATED_BY')); if (!isset($fileArray['MODULE_ID'])) { $fileArray['MODULE_ID'] = Driver::INTERNAL_MODULE_ID; } if (empty($fileArray['type'])) { $fileArray['type'] = ''; } $fileArray['type'] = TypeFile::normalizeMimeType($fileArray['type'], $data['NAME']); /** @noinspection PhpDynamicAsStaticMethodCallInspection */ $fileId = CFile::saveFile($fileArray, Driver::INTERNAL_MODULE_ID, true, true); if (!$fileId) { $this->errorCollection->add(array(new Error(Loc::getMessage('DISK_FOLDER_MODEL_ERROR_COULD_NOT_SAVE_FILE'), self::ERROR_COULD_NOT_SAVE_FILE))); return null; } /** @noinspection PhpDynamicAsStaticMethodCallInspection */ $fileArray = CFile::getFileArray($fileId); $data['NAME'] = Ui\Text::correctFilename($data['NAME']); $fileModel = $this->addFile(array('NAME' => $data['NAME'], 'FILE_ID' => $fileId, 'CONTENT_PROVIDER' => isset($data['CONTENT_PROVIDER']) ? $data['CONTENT_PROVIDER'] : null, 'SIZE' => !isset($data['SIZE']) ? $fileArray['FILE_SIZE'] : $data['SIZE'], 'CREATED_BY' => $data['CREATED_BY']), $rights, $generateUniqueName); if (!$fileModel) { CFile::delete($fileId); return null; } return $fileModel; }
protected function getNameWithoutTrashCanSuffix() { return Ui\Text::cleanTrashCanSuffix($this->name); }
protected function processActionRenameFile() { $this->checkRequiredPostParams(array('newName', 'attachedId')); if ($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } list($type, $realValue) = FileUserType::detectType($this->request->getPost('attachedId')); if ($type == FileUserType::TYPE_NEW_OBJECT) { /** @var File $model */ $model = File::loadById((int) $realValue, array('STORAGE')); if (!$model) { $this->errorCollection->add(array(new Error("Could not find file"))); $this->sendJsonErrorResponse(); } if (!$model->canRename($model->getStorage()->getCurrentUserSecurityContext())) { $this->errorCollection->add(array(new Error("Bad permission. Could not read this file"))); $this->sendJsonErrorResponse(); } $newName = Text::correctFilename($this->request->getPost('newName')); if (!$model->renameInternal($newName, true)) { $this->errorCollection->add($model->getErrors()); $this->sendJsonErrorResponse(); } Driver::getInstance()->getIndexManager()->indexFile($model); $this->sendJsonSuccessResponse(array('id' => $this->request->getPost('attachedId'), 'name' => $model->getName())); } else { $this->sendJsonErrorResponse(); } }
/** * Changes name of storage. * @param string $name New name for storage. * @return bool */ public function rename($name) { $this->errorCollection->clear(); $rootFolder = $this->getRootObject(); if (!$rootFolder) { $this->errorCollection->add(array(new Error("Storage doesn't have root folder.", self::ERROR_NOT_EXISTS_ROOT_OBJECT))); return false; } if (!$rootFolder->rename(Ui\Text::correctFilename($name))) { $this->errorCollection->add(array(new Error("Could not rename name of root folder.", self::ERROR_RENAME_ROOT_OBJECT))); return false; } return $this->update(array('NAME' => $name)); }
<?php } ?> <?php if ($arResult['DISCONNECTED_USERS_COUNT'] > 0) { ?> <div class="bx-webdav-invite-users-list" style="height: auto;"> <div onclick="diskOpenUsersList(<?php echo $arResult['OBJECT']['ID']; ?> , this, 'disconnect', '<?php echo $arResult['URL_TO_SHOW_USER_LIST']; ?> ');" class="bx-webdav-invite-users-title"> <span class="bx-webdav-invite-users-title-text"><?php echo \Bitrix\Disk\Ui\Text::getNumericCase($arResult['DISCONNECTED_USERS_COUNT'], GetMessage('DISK_FOLDER_LIST_INVITE_MODAL_TAB_USERS_NOT_USAGE_COUNT_1', array('#COUNT#' => $arResult['DISCONNECTED_USERS_COUNT'])), GetMessage('DISK_FOLDER_LIST_INVITE_MODAL_TAB_USERS_NOT_USAGE_COUNT_21', array('#COUNT#' => $arResult['DISCONNECTED_USERS_COUNT'])), GetMessage('DISK_FOLDER_LIST_INVITE_MODAL_TAB_USERS_NOT_USAGE_COUNT_2_4', array('#COUNT#' => $arResult['DISCONNECTED_USERS_COUNT'])), GetMessage('DISK_FOLDER_LIST_INVITE_MODAL_TAB_USERS_NOT_USAGE_COUNT_5_20', array('#COUNT#' => $arResult['DISCONNECTED_USERS_COUNT']))); ?> </span> <span class="bx-webdav-invite-users-arrow"></span> </div> <div class="bx-webdav-invite-users-block"></div> </div> <?php } ?> <div class="bx-webdav-invite-footer-link-block"> <a onclick="diskUnshareAllUsers(<?php echo $arResult['OBJECT']['ID']; ?> , '<?php echo $arResult['URL_TO_UNSHARE_ALL_USERS'];
/** * Action only for Common docs. * We don't check rights on rootObject for changeRights if user has "update" operation. */ protected function processActionCreateFolderWithSharing() { //todo refactor actions. And move logic in rights manager if needed $this->checkRequiredPostParams(array('storageId', 'name')); if ($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $storage = Storage::loadById((int) $this->request->getPost('storageId'), array('ROOT_OBJECT')); if (!$storage) { $this->errorCollection->add(array(new Error(Loc::getMessage('DISK_FOLDER_LIST_ERROR_COULD_NOT_FIND_OBJECT'), self::ERROR_COULD_NOT_FIND_OBJECT))); $this->sendJsonErrorResponse(); } //todo refactor this code. with action ShowCreateFolderWithSharingInCommon $rightsManager = Driver::getInstance()->getRightsManager(); $securityContext = $storage->getCurrentUserSecurityContext(); if (!$storage->getProxyType() instanceof Bitrix\Disk\ProxyType\Common || !$storage->getRootObject()->canAdd($securityContext)) { $this->sendJsonAccessDeniedResponse(); } $entityToNewShared = $this->request->getPost('entityToNewShared'); $storageNewRights = $this->request->getPost('storageNewRights'); if (!$storageNewRights || !is_array($storageNewRights)) { $storageNewRights = array(); } $newRights = array(); foreach ($rightsManager->getAllListNormalizeRights($storage->getRootObject()) as $rightOnObject) { if (empty($rightOnObject['NEGATIVE']) && !isset($storageNewRights[$rightOnObject['ACCESS_CODE']])) { unset($rightOnObject['ID']); $rightOnObject['NEGATIVE'] = 1; $newRights[] = $rightOnObject; } } unset($rightOnObject); if ($newRights) { $newRights[] = array('ACCESS_CODE' => 'IU' . $this->getUser()->getId(), 'TASK_ID' => $rightsManager->getTaskIdByName($rightsManager::TASK_FULL)); } $name = $this->request->getPost('name'); $newFolder = $storage->addFolder(array('NAME' => Ui\Text::correctFolderName($name), 'CREATED_BY' => $this->getUser()->getId()), $newRights); if ($newFolder === null) { $this->errorCollection->add($storage->getErrors()); $this->sendJsonErrorResponse(); } if (!empty($entityToNewShared) && is_array($entityToNewShared)) { $newExtendedRightsReformat = array(); foreach ($entityToNewShared as $entityId => $right) { switch ($right['right']) { case 'disk_access_read': $newExtendedRightsReformat[$entityId] = \Bitrix\Disk\RightsManager::TASK_READ; break; case 'disk_access_edit': $newExtendedRightsReformat[$entityId] = \Bitrix\Disk\RightsManager::TASK_EDIT; break; case 'disk_access_full': $newExtendedRightsReformat[$entityId] = \Bitrix\Disk\RightsManager::TASK_FULL; break; } } if ($newExtendedRightsReformat) { Sharing::addToManyEntities(array('FROM_ENTITY' => Sharing::CODE_USER . $this->getUser()->getId(), 'REAL_OBJECT' => $newFolder, 'CREATED_BY' => $this->getUser()->getId(), 'CAN_FORWARD' => false), $newExtendedRightsReformat, $this->errorCollection); } unset($right); } $this->sendJsonSuccessResponse(array('folder' => array('id' => $newFolder->getId()))); }
protected function migrateTrashFolders() { if ($this->isStepFinished(__METHOD__)) { return; } $lastId = $this->getStorageId(); //first migrate folder from trash $trashQuery = $this->connection->query("\n\t\t\tSELECT\n\t\t\t\tobj.*,\n\t\t\t\ts.ROOT_OBJECT_ID ROOT_OBJECT_ID,\n\t\t\t\tsecta.DESCRIPTION DESCRIPTION\n\t\t\tFROM b_disk_object obj\n\t\t\t\tINNER JOIN b_disk_storage s ON s.ID = obj.STORAGE_ID\n\t\t\t\tINNER JOIN b_disk_object trash ON trash.ID = obj.PARENT_ID AND trash.PARENT_ID = s.ROOT_OBJECT_ID\n\t\t\t\tINNER JOIN b_iblock_section secta ON secta.ID = obj.ID\n\n\t\t\tWHERE obj.TYPE=2 AND trash.NAME = '.Trash' AND obj.ID > {$lastId} ORDER BY s.ID\n\t\t"); while ($trashChild = $trashQuery->fetch()) { $this->abortIfNeeded(); $undeletePath = $this->getSectionInTrash($trashChild); if (empty($undeletePath)) { $this->log(array("Skip item {$trashChild['ID']} from .Trash", "Empty WEBDAV_INFO (DESCRIPTION)")); $this->storeStorageId($trashChild['ID']); continue; } $undeletePath = trim($undeletePath, '/'); $filter = array('TYPE' => \Bitrix\Disk\Internals\ObjectTable::TYPE_FOLDER, 'STORAGE_ID' => $trashChild['STORAGE_ID'], 'PARENT_ID' => $trashChild['ROOT_OBJECT_ID']); $mustCreatePathPieces = array(); $undeletePathPieces = explode('/', $undeletePath); $parentId = $filter['PARENT_ID']; $parentDeletedType = null; $filename = array_pop($undeletePathPieces); foreach ($undeletePathPieces as $i => $pieceOfPath) { $filter['NAME'] = $this->sqlHelper->forSql($pieceOfPath); $folder = $this->connection->query("\n\t\t\t\t\tSELECT ID, NAME, REAL_OBJECT_ID, STORAGE_ID, PARENT_ID, DELETED_TYPE FROM b_disk_object obj\n\t\t\t\t\tWHERE obj.PARENT_ID = {$filter['PARENT_ID']} AND obj.STORAGE_ID = {$filter['STORAGE_ID']} AND obj.TYPE = {$filter['TYPE']} AND obj.NAME = '{$filter['NAME']}'\n\t\t\t\t")->fetch(); if ($folder) { $filter['PARENT_ID'] = $parentId = $folder['ID']; if (!empty($folder['DELETED_TYPE'])) { $parentDeletedType = $folder['DELETED_TYPE']; } continue; } if (!$folder) { $this->log(array("Folder with name {$pieceOfPath} does not exist")); $mustCreatePathPieces = array_slice($undeletePathPieces, $i); break; } } unset($pieceOfPath); if ($parentId) { $success = true; /** @var Folder $parentFolder */ $parentFolder = Folder::loadById($parentId); $folderData = array('CREATE_TIME' => $trashChild['CREATE_TIME'], 'UPDATE_TIME' => $trashChild['UPDATE_TIME'], 'CREATED_BY' => $trashChild['CREATED_BY'], 'UPDATED_BY' => $trashChild['UPDATED_BY']); foreach ($mustCreatePathPieces as $i => $pieceOfPath) { $deletedType = FolderTable::DELETED_TYPE_CHILD; if ($i == 0 && !$parentDeletedType) { $deletedType = FolderTable::DELETED_TYPE_ROOT; } $folderData['NAME'] = Text::correctFilename($pieceOfPath); if ($deletedType == FolderTable::DELETED_TYPE_ROOT) { $folderData['NAME'] = self::appendTrashCanSuffix($folderData['NAME']); } $folder = $parentFolder->addSubFolder($folderData, array(), true); if (!$folder) { $this->log(array("Skip item {$trashChild['ID']} from .Trash", "Could not create subfolder {$folderData['NAME']}")); $this->storeStorageId($trashChild['ID']); $success = false; break; } $updateResult = FolderTable::update($folder->getId(), array('DELETED_TYPE' => $deletedType, 'DELETE_TIME' => $folder->getUpdateTime(), 'DELETED_BY' => $folder->getUpdatedBy())); if (!$updateResult->isSuccess()) { $this->log(array("Skip item {$trashChild['ID']} from .Trash", "Could not markDeleted subfolder {$folder->getId()}")); $this->storeStorageId($trashChild['ID']); $success = false; break; } $parentFolder = $folder; } unset($pieceOfPath, $folder, $undeletePath); if ($success) { //move trashChild into new folder if ($this->isMysql || $this->isMssql) { $this->connection->queryExecute("\n\t\t\t\t\t\t\tDELETE a FROM b_disk_object_path a\n\t\t\t\t\t\t\t\tJOIN b_disk_object_path d\n\t\t\t\t\t\t\t\t\tON a.OBJECT_ID = d.OBJECT_ID\n\t\t\t\t\t\t\t\tLEFT JOIN b_disk_object_path x\n\t\t\t\t\t\t\t\t\tON x.PARENT_ID = d.PARENT_ID AND x.OBJECT_ID = a.PARENT_ID\n\t\t\t\t\t\t\t\tWHERE d.PARENT_ID = {$trashChild['ID']} AND x.PARENT_ID IS NULL;\n\t\t\t\t\t\t"); } elseif ($this->isOracle) { $this->connection->queryExecute("\n\t\t\t\t\t\t\tDELETE FROM b_disk_object_path WHERE ID IN (SELECT a.ID FROM b_disk_object_path a\n\t\t\t\t\t\t\t\tJOIN b_disk_object_path d\n\t\t\t\t\t\t\t\t\tON a.OBJECT_ID = d.OBJECT_ID\n\t\t\t\t\t\t\t\tLEFT JOIN b_disk_object_path x\n\t\t\t\t\t\t\t\t\tON x.PARENT_ID = d.PARENT_ID AND x.OBJECT_ID = a.PARENT_ID\n\t\t\t\t\t\t\t\tWHERE d.PARENT_ID = {$trashChild['ID']} AND x.PARENT_ID IS NULL)\n\t\t\t\t\t\t"); } $this->connection->queryExecute("\n\t\t\t\t\t\tINSERT INTO b_disk_object_path (PARENT_ID, OBJECT_ID, DEPTH_LEVEL)\n\t\t\t\t\t\t\tSELECT stree.PARENT_ID, subtree.OBJECT_ID, stree.DEPTH_LEVEL+subtree.DEPTH_LEVEL+1\n\t\t\t\t\t\t\tFROM b_disk_object_path stree INNER JOIN b_disk_object_path subtree\n\t\t\t\t\t\t\t\tON subtree.PARENT_ID = {$trashChild['ID']} AND stree.OBJECT_ID = {$parentFolder->getId()};\n\t\t\t\t\t"); //update all objects under trashChild (DELETED_TYPE) $deletedType = FolderTable::DELETED_TYPE_CHILD; if ($this->isMysql) { $sql = "\n\t\t\t\t\t\t\tUPDATE b_disk_object obj\n\t\t\t\t\t\t\t\tINNER JOIN b_disk_object_path p ON obj.ID = p.OBJECT_ID\n\t\t\t\t\t\t\t\tSET obj.DELETED_TYPE = {$deletedType}, obj.DELETED_BY=obj.UPDATED_BY, obj.DELETE_TIME=obj.UPDATE_TIME\n\t\t\t\t\t\t\tWHERE p.PARENT_ID = {$trashChild['ID']}\n\t\t\t\t\t\t"; } elseif ($this->isOracle || $this->isMssql) { $sql = "\n\t\t\t\t\t\t\tUPDATE b_disk_object\n\t\t\t\t\t\t\t\tSET\n\t\t\t\t\t\t\t\t\tDELETED_TYPE = {$deletedType},\n\t\t\t\t\t\t\t\t\tDELETED_BY=(SELECT obj.UPDATED_BY FROM b_disk_object obj INNER JOIN b_disk_object_path p ON obj.ID = p.OBJECT_ID\n\t\t\t\t\t\t\tWHERE p.PARENT_ID = {$trashChild['ID']} and obj.ID = b_disk_object.ID),\n\n\t\t\t\t\t\t\t\t\tDELETE_TIME=(SELECT obj.UPDATE_TIME FROM b_disk_object obj INNER JOIN b_disk_object_path p ON obj.ID = p.OBJECT_ID\n\t\t\t\t\t\t\tWHERE p.PARENT_ID = {$trashChild['ID']} and obj.ID = b_disk_object.ID)\n\n\t\t\t\t\t\t\tWHERE EXISTS((SELECT 'x' FROM b_disk_object obj INNER JOIN b_disk_object_path p ON obj.ID = p.OBJECT_ID\n\t\t\t\t\t\t\tWHERE p.PARENT_ID = {$trashChild['ID']} and obj.ID = b_disk_object.ID))\n\t\t\t\t\t\t"; } $this->connection->queryExecute($sql); $deletedType = FolderTable::DELETED_TYPE_ROOT; $newName = $this->sqlHelper->forSql(self::appendTrashCanSuffix(Text::correctFilename($filename))); $this->connection->queryExecute("\n\t\t\t\t\t\tUPDATE b_disk_object SET NAME='{$newName}', PARENT_ID = {$parentFolder->getId()}, DELETED_TYPE = {$deletedType}, DELETED_BY=UPDATED_BY, DELETE_TIME=UPDATE_TIME\n\t\t\t\t\t\tWHERE ID={$trashChild['ID']} AND STORAGE_ID={$trashChild['STORAGE_ID']}\n\t\t\t\t\t"); $this->connection->queryExecute("\n\t\t\t\t\t\tINSERT INTO b_disk_deleted_log (STORAGE_ID, OBJECT_ID, TYPE, USER_ID, CREATE_TIME)\n\t\t\t\t\t\tSELECT {$trashChild['STORAGE_ID']}, p.OBJECT_ID, obj.TYPE, obj.UPDATED_BY, " . $this->sqlHelper->getCurrentDateTimeFunction() . " FROM b_disk_object obj\n\t\t\t\t\t\t\tINNER JOIN b_disk_object_path p ON obj.ID = p.OBJECT_ID\n\t\t\t\t\t\tWHERE p.PARENT_ID = {$trashChild['ID']}\n\t\t\t\t\t"); $this->storeStorageId($trashChild['ID']); } } $this->storeStorageId($trashChild['ID']); } $this->abortIfNeeded(); $this->storeStorageId(0); $this->setStepFinished(__METHOD__); }
/** * @param $name * @param $targetDirectoryId * @param TmpFile $tmpFile * @param array $data * @return array * @throws AccessDeniedException */ public function addFile($name, $targetDirectoryId, TmpFile $tmpFile, array $data = array()) { if (!$targetDirectoryId) { $folder = $this->storage->getRootObject(); } else { $folder = Folder::loadById($targetDirectoryId); } /** @var Folder $folder */ if (!$folder) { $this->errorCollection->add(array(new Error("Could not " . __METHOD__ . " by id {$targetDirectoryId}", 11152))); $tmpFile->delete(); return array(); } if (!$folder->canAdd($this->storage->getCurrentUserSecurityContext())) { $tmpFile->delete(); throw new AccessDeniedException(); } /** @var array $fileArray */ if ($tmpFile->isCloud() && $tmpFile->getContentType()) { /** @noinspection PhpDynamicAsStaticMethodCallInspection */ $fileId = \CFile::saveFile(array('name' => $tmpFile->getFilename(), 'tmp_name' => $tmpFile->getAbsolutePath(), 'type' => $tmpFile->getContentType()), Driver::INTERNAL_MODULE_ID, true, true); if (!$fileId) { $this->errorCollection->add(array(new Error("Could not " . __METHOD__ . ", save cloud file", 111588))); return array(); } /** @noinspection PhpDynamicAsStaticMethodCallInspection */ $fileArray = \CFile::getFileArray($fileId); if (!$fileArray) { $this->errorCollection->add(array(new Error("Could not " . __METHOD__ . ", getFileArray", 191588))); return array(); } $fileData = array('NAME' => Ui\Text::correctFilename($name), 'FILE_ID' => $fileId, 'SIZE' => !isset($data['SIZE']) ? $fileArray['FILE_SIZE'] : $data['SIZE'], 'CREATED_BY' => $this->getUser()->getId()); if (!empty($data['originalTimestamp'])) { $fileData['UPDATE_TIME'] = DateTime::createFromTimestamp($this->convertFromExternalVersion($data['originalTimestamp'])); } $fileModel = $folder->addFile($fileData); if (!$fileModel) { \CFile::delete($fileId); } } else { $fileArray = \CFile::makeFileArray($tmpFile->getAbsolutePath()); $fileArray['name'] = $name; $fileData = array('NAME' => $name, 'CREATED_BY' => $this->getUser()->getId()); if (!empty($data['originalTimestamp'])) { $fileData['UPDATE_TIME'] = DateTime::createFromTimestamp($this->convertFromExternalVersion($data['originalTimestamp'])); } $fileModel = $folder->uploadFile($fileArray, $fileData); } if ($fileModel) { $tmpFile->delete(); $this->loadFormattedFolderTreeAndBreadcrumbs(); return $this->formatFileToResponse($fileModel); } $this->errorCollection->add(array(new Error("Could not " . __METHOD__ . ", uploadFile to {$targetDirectoryId}", 11153))); $this->errorCollection->add($folder->getErrors()); $tmpFile->delete(); return array(); }
/** * @param array $fileData * @param string $siteID * @param array $params * @return int|false */ public static function saveFile(array $fileData, $siteID = '', $params = array()) { if (!(IsModuleInstalled('disk') && Loader::includeModule('disk'))) { return false; } if ($siteID === '') { $siteID = self::getDefaultSiteID(); } if (!is_array($params)) { $params = array(); } $typeID = isset($params['TYPE_ID']) ? (int) $params['TYPE_ID'] : StorageFileType::Undefined; if (!StorageFileType::IsDefined($typeID)) { $typeID = StorageFileType::EmailAttachment; } $folder = self::ensureFolderCreated($typeID, $siteID); if (!$folder) { return false; } $userID = isset($params['USER_ID']) ? (int) $params['USER_ID'] : 0; if ($userID <= 0) { $userID = \CCrmSecurityHelper::GetCurrentUserID(); } else { if ($userID <= 0) { $userID = SystemUser::SYSTEM_USER_ID; } } $file = $folder->addFile(array('NAME' => Text::correctFilename($fileData['ORIGINAL_NAME']), 'FILE_ID' => (int) $fileData['ID'], 'SIZE' => (int) $fileData['FILE_SIZE'], 'CREATED_BY' => $userID), array(), true); return $file ? $file->getId() : false; }
public static function connectGroupToSelfUserStorage($userId, Storage $storage, ErrorCollection $errorCollection) { return self::connectToUserStorage($userId, array('SELF_CONNECT' => true, 'CREATED_BY' => $userId, 'LINK_NAME' => Ui\Text::correctFolderName($storage->getProxyType()->getEntityTitle()), 'REAL_OBJECT' => $storage->getRootObject()), $errorCollection); }
protected function getBreadcrumbs() { $crumbs = array(); $parts = explode('/', trim($this->arParams['RELATIVE_PATH'], '/')); foreach ($this->arParams['RELATIVE_ITEMS'] as $i => $item) { if (empty($item)) { continue; } $crumbs[] = array('ID' => $item['ID'], 'NAME' => Ui\Text::cleanTrashCanSuffix($item['NAME']), 'LINK' => rtrim(CComponentEngine::MakePathFromTemplate($this->arParams['PATH_TO_TRASHCAN_LIST'], array('TRASH_PATH' => implode('/', array_slice($parts, 0, $i + 1)) ?: '')), '/') . '/'); } unset($i, $part); return $crumbs; }