uawdijnntqw1x1x1
IP : 18.188.103.42
Hostname : axolotl
Kernel : Linux axolotl 4.9.0-13-amd64 #1 SMP Debian 4.9.228-1 (2020-07-05) x86_64
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
OS : Linux
PATH:
/
var
/
www
/
axolotl
/
data
/
www
/
rostov.axolotls.ru
/
bitrix
/
modules
/
webdav
/
lib
/
folderinvite.php
/
/
<?php namespace Bitrix\Webdav; use Bitrix\Main\Entity; use Bitrix\Main\Entity\DeleteResult; use Bitrix\Main\Entity\Event; use Bitrix\Main\Localization\Loc; use Bitrix\Main; Loc::loadMessages(__FILE__); /** * Class FolderInviteTable * * Fields: * <ul> * <li> ID int mandatory * <li> INVITE_USER_ID int mandatory * <li> USER_ID int mandatory * <li> IBLOCK_ID int mandatory * <li> SECTION_ID int mandatory * <li> DESCRIPTION string optional * <li> IS_APPROVED unknown optional * <li> IS_DELETED unknown optional * <li> CAN_FORWARD unknown optional * <li> CAN_EDIT unknown optional * <li> CREATED_TIMESTAMP datetime mandatory default 'CURRENT_TIMESTAMP' * </ul> * @package Bitrix\Webdav */ class FolderInviteTable extends Entity\DataManager { public static function getFilePath() { return __FILE__; } public static function getTableName() { return 'b_webdav_folder_invite'; } public static function getMap() { return array( 'ID' => array( 'data_type' => 'integer', 'primary' => true, 'autocomplete' => true, ), 'INVITE_USER_ID' => array( 'data_type' => 'integer', 'required' => true, ), 'INVITE_USER' => array( 'data_type' => 'Bitrix\Main\User', 'reference' => array('=this.INVITE_USER_ID' => 'ref.ID') ), 'USER_ID' => array( 'data_type' => 'integer', 'required' => true, ), 'USER' => array( 'data_type' => 'Bitrix\Main\User', 'reference' => array('=this.USER_ID' => 'ref.ID') ), 'IBLOCK_ID' => array( 'data_type' => 'integer', 'required' => true, ), 'SECTION_ID' => array( 'data_type' => 'integer', 'required' => true, ), 'LINK_SECTION_ID' => array( 'data_type' => 'integer', 'required' => false, ), 'DESCRIPTION' => array( 'data_type' => 'text', ), 'IS_APPROVED' => array( 'data_type' => 'boolean', ), 'IS_DELETED' => array( 'data_type' => 'boolean', ), 'CAN_FORWARD' => array( 'data_type' => 'boolean', ), 'CAN_EDIT' => array( 'data_type' => 'boolean', ), 'CREATED_TIMESTAMP' => array( 'data_type' => 'datetime', ), 'COUNT' => array( 'data_type' => 'integer', 'expression' => array('COUNT(*)'), ), ); } /** * @param $filter * @return bool */ public static function deleteByFilter($filter) { $result = static::getList(array( 'select' => array('ID'), 'filter' => $filter, )); if(!$result) { return false; } while($row = $result->fetch()) { if($row['ID']) { static::delete($row['ID']); } } return true; } /** * @param array $data * @return Entity\AddResult */ public static function addIfNonExists(array $data) { $filter = array_intersect_key($data, array( 'INVITE_USER_ID' => true, 'IBLOCK_ID' => true, 'SECTION_ID' => true, )); $row = static::getRow(array('filter' => $filter, 'select' => array('ID', 'IS_DELETED'))); //if we add new invite by old deleted invite, then we delete old and add new. if($row && empty($data['IS_DELETED']) && $row['IS_DELETED']) { static::delete($row['ID']); } elseif($row) { $result = new \Bitrix\Main\Entity\AddResult(); $result->setId($row['ID']); return $result; } return static::add($data); } public static function onAfterAdd(Event $event) { $fields = $event->getParameter('fields'); $fields['ID'] = $event->getParameter('id'); \CWebDavSymlinkHelper::sendNotify($fields); } public static function onDelete(Event $event) { $row = static::getRowById($event->getParameter('id')); if(!$row) { return; } global $USER; //todo unshare. Fork invite. Hack //not fork if owner by invite unshare user. if(!$row['IS_DELETED'] && $row['INVITE_USER_ID'] != $row['USER_ID'] && $row['USER_ID'] != $USER->getId()) { $scalarFields = array(); foreach (static::getEntity()->getFields() as $fieldName => $field) { if($field instanceof Entity\ScalarField) { $scalarFields[$fieldName] = true; } } unset($field); $forkRow = array_intersect_key($row, $scalarFields); unset($forkRow['ID']); $forkRow['CAN_FORWARD'] = (bool)$forkRow['CAN_FORWARD']; $forkRow['CAN_EDIT'] = (bool)$forkRow['CAN_EDIT']; $forkRow['IS_DELETED'] = true; $forkRow['IS_APPROVED'] = false; \Bitrix\Webdav\FolderInviteTable::add($forkRow); } \CWebDavSymlinkHelper::sendNotifyUnshare($row); self::deleteSymlinkSections($row); } private static function deleteSymlinkSections(array $folderInvite) { if(!\Bitrix\Main\Loader::includeModule('iblock')) { return; } self::removeNotifyToUser($folderInvite); \CWebDavDiskDispatcher::addElementForDeletingMark( array('ID' => $folderInvite['LINK_SECTION_ID'], 'IBLOCK_ID' => \CWebDavSymlinkHelper::getIblockIdForSectionId($folderInvite['LINK_SECTION_ID'])) ); \CWebDavDiskDispatcher::markDeleteBatch(false); \CIBlockSection::delete($folderInvite['LINK_SECTION_ID'], false); self::removeRightsOnSharedSections($folderInvite); return; } private static function removeNotifyToUser(array $folderInvite) { if (\Bitrix\Main\Loader::includeModule('im')) { \CIMNotify::deleteByTag(self::getNotifyTag($folderInvite)); } \CWebDavDiskDispatcher::sendChangeStatus($folderInvite['INVITE_USER_ID'], 'delete_symlink'); } private static function removeRightsOnSharedSections(array $folderInvite) { if($folderInvite['INVITE_USER_ID'] == $folderInvite['USER_ID']) { return; } $rightsLetter = $folderInvite['CAN_EDIT']? 'W' : 'R'; \CWebDavIblock::removeRightsOnSections(array( array( 'ID' => $folderInvite['SECTION_ID'], 'IBLOCK_ID' => $folderInvite['IBLOCK_ID'], ), ), array( $rightsLetter => array( 'U' . $folderInvite['INVITE_USER_ID'], ) )); } public static function getNotifyTag(array $folderInvite) { return "WEBDAV|INVITE|{$folderInvite['ID']}|{$folderInvite['INVITE_USER_ID']}"; } }
/var/www/axolotl/data/www/rostov.axolotls.ru/bitrix/modules/webdav/lib/folderinvite.php