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);
 }
Esempio n. 2
0
 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());
 }
Esempio n. 3
0
 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());
 }
Esempio n. 4
0
 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())));
 }
Esempio n. 5
0
}
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 
}
Esempio n. 6
0
	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;
	}
Esempio n. 7
0
 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);
 }
Esempio n. 8
0
 /**
  * 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;
 }
Esempio n. 9
0
 protected function getNameWithoutTrashCanSuffix()
 {
     return Ui\Text::cleanTrashCanSuffix($this->name);
 }
Esempio n. 10
0
 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();
     }
 }
Esempio n. 11
0
 /**
  * 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));
 }
Esempio n. 12
0
		<?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'];
Esempio n. 13
0
 /**
  * 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__);
 }
Esempio n. 15
0
 /**
  * @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();
 }
Esempio n. 16
0
 /**
  * @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;
 }
Esempio n. 17
0
 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);
 }
Esempio n. 18
0
 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;
 }