示例#1
0
 /**
  * @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;
 }
示例#2
0
 /**
  * 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);
 }
示例#4
0
 protected function init()
 {
     parent::init();
     $this->lastName = $this->getLastName();
     $this->login = $this->getLogin();
     $this->name = $this->getName();
     $this->secondName = $this->getSecondName();
 }
示例#5
0
 /**
  * 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;
 }
示例#6
0
 /**
  * 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);
 }
示例#7
0
 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;
 }
示例#8
0
 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());
     }
 }
示例#10
0
 /**
  * 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());
 }
示例#11
0
 /**
  * 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();
 }
示例#13
0
 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));
 }
示例#14
0
 /**
  * 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()));
 }
示例#15
0
 /**
  * @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;
 }
示例#16
0
 public static function getMapReferenceAttributes()
 {
     return array('OBJECT' => BaseObject::className(), 'VERSION' => Version::className(), 'TMP_FILE' => TmpFile::className(), 'USER' => array('class' => User::className(), 'select' => User::getFieldsForSelect()));
 }
示例#17
0
 private function getPathToUserLib(User $userModel, Storage $storageModel)
 {
     if ($userModel->isExtranetUser()) {
         $extranetProxyType = new ProxyType\ExtranetUser($userModel->getId(), $storageModel);
         return $extranetProxyType->getBaseUrlFolderList();
     }
     return $storageModel->getProxyType()->getBaseUrlFolderList();
 }
示例#18
0
 /**
  * @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));
 }
示例#19
0
 /**
  * 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);
 }
示例#20
0
 /**
  * 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());
 }
示例#21
0
 /**
  * @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;
 }
示例#22
0
 /**
  * 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();
 }
示例#24
0
 /**
  * @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()));
 }
示例#25
0
 /**
  * @param \CUser|User|int $user
  * @return $this
  */
 public function setUser($user)
 {
     $this->userId = User::resolveUserId($user);
     return $this;
 }