/** * @return User */ public function getUser() { if ($this->userId === null) { return null; } if (SystemUser::isSystemUserId($this->userId)) { return SystemUser::create(); } if (isset($this->user) && $this->userId == $this->user->getId()) { return $this->user; } $this->user = User::loadById($this->userId); return $this->user; }
/** * Prepares component parameters. * @return $this * @throws ArgumentException */ protected function prepareParams() { parent::prepareParams(); if (!empty($this->arParams['STORAGE'])) { if (!$this->arParams['STORAGE'] instanceof Storage) { throw new ArgumentException('STORAGE must be instance of \\Bitrix\\Disk\\Storage'); } } elseif (!empty($this->arParams['STORAGE_ID'])) { $this->arParams['STORAGE_ID'] = (int) $this->arParams['STORAGE_ID']; } else { if (empty($this->arParams['STORAGE_MODULE_ID'])) { throw new ArgumentException('STORAGE_MODULE_ID required'); } if (empty($this->arParams['STORAGE_ENTITY_TYPE'])) { throw new ArgumentException('STORAGE_ENTITY_TYPE required'); } if (!isset($this->arParams['STORAGE_ENTITY_ID'])) { throw new ArgumentException('STORAGE_ENTITY_ID required'); } } if (empty($this->arParams['PATH_TO_USER'])) { $siteId = SITE_ID; $currentUser = User::buildFromArray($this->getUser()->getById($this->getUser()->getId())->fetch()); $default = '/company/personal/user/#user_id#/'; if ($currentUser->isExtranetUser()) { /** @noinspection PhpDynamicAsStaticMethodCallInspection */ $siteId = \CExtranet::getExtranetSiteID(); $default = '/extranet/contacts/personal/user/#user_id#/'; } $this->arParams['PATH_TO_USER'] = strtolower(COption::getOptionString('intranet', 'path_user', $default, $siteId)); } return $this; }
/** * Returns list of recently files by user. * @param mixed|int|User|\CAllUser $user User. * @param array $filter Filter. * @return File[] * @internal */ public function getFileModelListByUser($user, array $filter = array()) { $userId = User::resolveUserId($user); if (!$userId) { $this->errorCollection->addOne(new Error('Could not get user id.')); return array(); } $driver = Driver::getInstance(); $storage = $driver->getStorageByUserId($userId); if (!$storage) { $this->errorCollection->addOne(new Error('Could not get storage by user id.')); return array(); } if ($this->isFirstRun($userId)) { if (!$this->hasData($userId)) { $this->fixColdStart($userId); } $this->saveFirstRun($userId); } $securityContext = $storage->getCurrentUserSecurityContext(); $parameters = array('filter' => array('RECENTLY_USED.USER_ID' => $userId, 'DELETED_TYPE' => ObjectTable::DELETED_TYPE_NONE, 'TYPE' => ObjectTable::TYPE_FILE), 'order' => array('RECENTLY_USED.CREATE_TIME' => 'DESC'), 'limit' => RecentlyUsedTable::MAX_COUNT_FOR_USER); if ($filter) { $parameters['filter'] = array_merge($parameters['filter'], $filter); } $parameters = $driver->getRightsManager()->addRightsCheck($securityContext, $parameters, array('ID', 'CREATED_BY')); return File::getModelList($parameters); }
protected function init() { parent::init(); $this->lastName = $this->getLastName(); $this->login = $this->getLogin(); $this->name = $this->getName(); $this->secondName = $this->getSecondName(); }
/** * Returns user model, who created object. * @return User */ public function getCreateUser() { if (isset($this->createUser) && $this->createdBy == $this->createUser->getId()) { return $this->createUser; } $this->createUser = User::getModelForReferenceField($this->createdBy, $this->createUser); return $this->createUser; }
/** * Gets security context (access provider) for user. * Attention! File/Folder can use anywhere and SecurityContext have to check rights anywhere (any module). * @param mixed $user User which use for check rights. * @return SecurityContext */ public function getSecurityContextByUser($user) { if ($this->isCurrentUser($user)) { /** @noinspection PhpDynamicAsStaticMethodCallInspection */ if (Loader::includeModule('socialnetwork') && \CSocnetUser::isCurrentUserModuleAdmin()) { return new FakeSecurityContext($user); } if (UserModel::isCurrentUserAdmin()) { return new FakeSecurityContext($user); } } return new DiskSecurityContext($user); }
protected function getSecurityContextByUser($user) { $diskSecurityContext = new DiskSecurityContext($user); if (Loader::includeModule('socialnetwork')) { if (\CSocnetUser::isCurrentUserModuleAdmin()) { $diskSecurityContext = new FakeSecurityContext($user); } } if (User::isCurrentUserAdmin()) { $diskSecurityContext = new FakeSecurityContext($user); } return $diskSecurityContext; }
private function getSecurityContextByUser($user) { $diskSecurityContext = new DiskSecurityContext($user); if (Loader::includeModule('socialnetwork')) { /** @noinspection PhpDynamicAsStaticMethodCallInspection */ if (\CSocnetUser::isCurrentUserModuleAdmin()) { $diskSecurityContext = new FakeSecurityContext($user); } } if (User::isCurrentUserAdmin()) { $diskSecurityContext = new FakeSecurityContext($user); } return $diskSecurityContext; }
public static function onAfterUserUpdate($fields) { if (!Loader::includeModule('socialnetwork') || empty($fields['ID'])) { return; } if (!empty($fields['NAME']) || !empty($fields['LAST_NAME']) || !empty($fields['SECOND_NAME'])) { $user = User::loadById($fields['ID']); if (!$user || $user->isEmptyName()) { return; } $userStorage = Driver::getInstance()->getStorageByUserId($user->getId()); if (!$userStorage) { return; } $userStorage->rename($user->getFormattedName()); } }
/** * Returns the list attributes which is connected with another models. * @return array */ public static function getMapReferenceAttributes() { $userClassName = User::className(); $fields = User::getFieldsForSelect(); return array('CREATE_USER' => array('class' => $userClassName, 'select' => $fields), 'UPDATE_USER' => array('class' => $userClassName, 'select' => $fields), 'DELETE_USER' => array('class' => $userClassName, 'select' => $fields), 'REAL_OBJECT' => BaseObject::className(), 'STORAGE' => Storage::className()); }
/** * Adds new version to file. * * The method may joins version with last version. * * @param array $file Structure like $_FILES. * @param int $createdBy Id of user. * @param bool $disableJoin If set false the method attempts to join version with last version (@see \Bitrix\Disk\File::SECONDS_TO_JOIN_VERSION). * @return Version|null * @throws \Bitrix\Main\SystemException */ public function addVersion(array $file, $createdBy, $disableJoin = false) { $this->errorCollection->clear(); $now = new DateTime(); $needToJoin = false; if (!$disableJoin && $this->updateTime && $this->updatedBy == $createdBy) { $updateTimestamp = $this->updateTime->getTimestamp(); if ($now->getTimestamp() - $updateTimestamp < self::SECONDS_TO_JOIN_VERSION) { $needToJoin = true; } } if (!$this->updateContent($file, $createdBy)) { return null; } if ($needToJoin) { $lastVersion = $this->getLastVersion(); if ($lastVersion) { if (!$lastVersion->joinData(array_merge(array('CREATE_TIME' => $now), $this->getHistoricalData()))) { $this->errorCollection->add($lastVersion->getErrors()); return null; } if ($this->prevFileId && $this->prevFileId != $this->fileId) { CFile::delete($this->prevFileId); } return $lastVersion; } } $versionModel = Version::add(array_merge(array('OBJECT_ID' => $this->id, 'FILE_ID' => $this->fileId, 'NAME' => $this->name, 'CREATED_BY' => $createdBy), $this->getHistoricalData()), $this->errorCollection); if (!$versionModel) { return null; } $valueVersionUf = FileUserType::NEW_FILE_PREFIX . $versionModel->getId(); /** @var User $createUser */ $createUser = User::loadById($createdBy); if (!$createUser) { //skip return $versionModel; } $text = Loc::getMessage('DISK_FILE_MODEL_UPLOAD_NEW_VERSION_IN_COMMENT_M'); if ($createUser->getPersonalGender() == 'F') { $text = Loc::getMessage('DISK_FILE_MODEL_UPLOAD_NEW_VERSION_IN_COMMENT_F'); } foreach ($this->getAttachedObjects() as $attache) { AttachedObject::storeDataByObjectId($this->getId(), array('IS_EDITABLE' => $attache->isEditable(), 'ALLOW_EDIT' => $attache->getAllowEdit())); $attache->getConnector()->addComment($createdBy, array('text' => $text, 'versionId' => $valueVersionUf)); AttachedObject::storeDataByObjectId($this->getId(), null); } unset($attache); return $versionModel; }
/** * For UF and work with local editors we have special scenario: * If user don't have permission for update file, * we have to attach new file to entity by posting comment with * alternative version. */ protected function processActionCommit() { $userId = $this->getUser()->getId(); if ($this->attachedModel->canUpdate($userId)) { parent::processActionCommit(); return; } $this->checkRequiredFilesParams(array('file')); if ($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } $userStorage = Driver::getInstance()->getStorageByUserId($userId); if (!$userStorage) { $this->errorCollection->add(array(new Error(Loc::getMessage('DISK_LOCAL_DOC_CONTROLLER_ERROR_COULD_NOT_FIND_STORAGE'), self::ERROR_COULD_NOT_FIND_STORAGE))); $this->sendJsonErrorResponse(); } $folder = $userStorage->getFolderForCreatedFiles($userId); if (!$folder) { $this->errorCollection->add(array(new Error(Loc::getMessage('DISK_LOCAL_DOC_CONTROLLER_ERROR_COULD_NOT_FIND_FOLDER_FOR_CREATED_FILES'), self::ERROR_COULD_NOT_FIND_FOLDER_FOR_CREATED_FILES))); $this->sendJsonErrorResponse(); } if (!$folder->canAdd($folder->getStorage()->getCurrentUserSecurityContext())) { $this->errorCollection->add(array(new Error(Loc::getMessage('DISK_LOCAL_DOC_CONTROLLER_ERROR_BAD_RIGHTS'), self::ERROR_BAD_RIGHTS))); $this->sendJsonErrorResponse(); } //todo fix Cherezov. Ban encoding 1251 $fileArray = $this->request->getFile('file'); $fileArray['name'] = $this->file->getName(); $newFile = $folder->uploadFile($fileArray, array('NAME' => $this->file->getName(), 'CREATED_BY' => $userId), array(), true); if (!$newFile) { $this->errorCollection->add(array(new Error(Loc::getMessage('DISK_LOCAL_DOC_CONTROLLER_ERROR_COULD_NOT_CREATE_FILE'), self::ERROR_COULD_NOT_CREATE_FILE))); $this->errorCollection->add($folder->getErrors()); $this->sendJsonErrorResponse(); } $valueFileUf = FileUserType::NEW_FILE_PREFIX . $newFile->getId(); /** @var User $createUser */ $createUser = User::loadById($userId); if (!$createUser) { $this->sendJsonErrorResponse(); } $text = Loc::getMessage('DISK_UF_LOCAL_DOC_CONTROLLER_UPLOAD_NEW_VERSION_IN_COMMENT_M'); if ($createUser->getPersonalGender() == 'F') { $text = Loc::getMessage('DISK_UF_LOCAL_DOC_CONTROLLER_UPLOAD_NEW_VERSION_IN_COMMENT_F'); } $this->attachedModel->getConnector()->addComment($userId, array('text' => $text, 'fileId' => $valueFileUf)); $this->sendJsonSuccessResponse(); }
protected function processActionShowShareInfoSmallView() { $this->checkRequiredPostParams(array('objectId')); if ($this->errorCollection->hasErrors()) { $this->sendJsonErrorResponse(); } /** @var File|Folder $object */ $object = \Bitrix\Disk\BaseObject::loadById((int) $this->request->getPost('objectId'), array('REAL_OBJECT.STORAGE')); if (!$object || !$object->getRealObject() || !$object->getRealObject()->getStorage()) { $this->errorCollection->add(array(new Error(Loc::getMessage('DISK_FOLDER_LIST_ERROR_COULD_NOT_FIND_OBJECT'), self::ERROR_COULD_NOT_FIND_OBJECT))); $this->sendJsonErrorResponse(); } $storage = $object->getRealObject()->getStorage(); $proxyType = $storage->getProxyType(); $securityContext = $storage->getCurrentUserSecurityContext(); if (!$object->canRead($securityContext)) { $this->sendJsonAccessDeniedResponse(); } //user has only read right. And he can't see on another sharing if (!$object->canShare($securityContext) && !$object->canChangeRights($securityContext)) { /** @var User $user */ $user = User::getById($this->getUser()->getId()); $entityList = array(array('entityId' => Sharing::CODE_USER . $this->getUser()->getId(), 'name' => $user->getFormattedName(), 'right' => \Bitrix\Disk\RightsManager::TASK_READ, 'avatar' => $user->getAvatarSrc(), 'type' => 'users')); } else { $entityList = $object->getMembersOfSharing(); } $this->sendJsonSuccessResponse(array('owner' => array('name' => $proxyType->getEntityTitle(), 'url' => $proxyType->getEntityUrl(), 'avatar' => $proxyType->getEntityImageSrc(21, 21)), 'members' => $entityList)); }
/** * Returns the list attributes which is connected with another models. * @return array */ public static function getMapReferenceAttributes() { return array('CREATE_USER' => array('class' => User::className(), 'select' => User::getFieldsForSelect())); }
/** * @return \Bitrix\Disk\User|null */ private function getUser() { if ($this->user !== null) { return $this->user; } $this->user = UserModel::loadById($this->entityId); if (!$this->user) { $this->user = SystemUser::create(); } return $this->user; }
public static function getMapReferenceAttributes() { return array('OBJECT' => BaseObject::className(), 'VERSION' => Version::className(), 'TMP_FILE' => TmpFile::className(), 'USER' => array('class' => User::className(), 'select' => User::getFieldsForSelect())); }
private function getPathToUserLib(User $userModel, Storage $storageModel) { if ($userModel->isExtranetUser()) { $extranetProxyType = new ProxyType\ExtranetUser($userModel->getId(), $storageModel); return $extranetProxyType->getBaseUrlFolderList(); } return $storageModel->getProxyType()->getBaseUrlFolderList(); }
/** * @return array */ public static function getMapReferenceAttributes() { $userClassName = User::className(); $fields = User::getFieldsForSelect(); return array('OBJECT' => File::className(), 'VERSION' => Version::className(), 'USER' => array('class' => $userClassName, 'select' => $fields), 'OWNER' => array('class' => $userClassName, 'select' => $fields)); }
/** * Checks $user is current user or not. * @param mixed $user User for check (may be userId, \CAllUser). * @return bool */ private function isCurrentUser($user) { global $USER; return $USER instanceof \CAllUser && $USER->getId() && $USER->getId() == UserModel::resolveUserId($user); }
/** * Returns the list attributes which is connected with another models. * @return array */ public static function getMapReferenceAttributes() { return array('CREATE_USER' => array('class' => User::className(), 'select' => User::getFieldsForSelect()), 'FILE' => array('orm_alias' => 'OBJECT', 'class' => File::className()), 'VERSION' => Version::className()); }
/** * @internal * @param $userId * @param User $currentFieldValue * @return User|EmptyUser|SystemUser */ public static function getModelForReferenceField($userId, User $currentFieldValue = null) { if ($userId === null) { return EmptyUser::create(); } if (SystemUser::isSystemUserId($userId)) { return SystemUser::create(); } if (isset($currentFieldValue) && $userId == $currentFieldValue->getId()) { return $currentFieldValue; } $user = User::loadById($userId); if (!$user) { return EmptyUser::create(); } return $user; }
/** * Creates storage for user and sets default rights. * If storage already exists returns its. * * @param integer $userId Id of user. * @return Storage|null * @throws ArgumentException * @throws SystemException * @throws \Bitrix\Main\LoaderException */ public function addUserStorage($userId) { if (!Loader::includeModule('socialnetwork')) { throw new SystemException('Could not create user storage without module "socialnetwork"'); } $userId = (int) $userId; $data = array('NAME' => "user {$userId}"); /** @var User $userModel */ $userModel = User::loadById($userId); if ($userModel && !$userModel->isEmptyName()) { $data['NAME'] = $userModel->getFormattedName(); } $data['USE_INTERNAL_RIGHTS'] = 1; $data['MODULE_ID'] = self::INTERNAL_MODULE_ID; $data['ENTITY_TYPE'] = ProxyType\User::className(); $data['ENTITY_ID'] = $userId; $rightsManager = $this->getRightsManager(); $fullAccessTaskId = $rightsManager->getTaskIdByName($rightsManager::TASK_FULL); if ($userModel && $userModel->isIntranetUser()) { $rights = array(array('ACCESS_CODE' => 'IU' . $userId, 'TASK_ID' => $fullAccessTaskId)); } else { //for extranet user we don't have IU. $rights = array(array('ACCESS_CODE' => 'U' . $userId, 'TASK_ID' => $fullAccessTaskId)); } return self::addStorageIfNotExist($data, $rights); }
public function __construct($user) { $this->errorCollection = new ErrorCollection(); $this->userId = User::resolveUserId($user); $this->buildDocumentHandlerList(); }
/** * @return array */ public static function getMapReferenceAttributes() { $storageClassName = Storage::className(); $objectClassName = BaseObject::className(); return array('PARENT' => static::className(), 'LINK_OBJECT' => $objectClassName, 'REAL_OBJECT' => $objectClassName, 'LINK_STORAGE' => $storageClassName, 'REAL_STORAGE' => $storageClassName, 'CREATE_USER' => array('class' => User::className(), 'select' => User::getFieldsForSelect())); }
/** * @param \CUser|User|int $user * @return $this */ public function setUser($user) { $this->userId = User::resolveUserId($user); return $this; }