yurievyuri
2/15/2019 - 9:49 PM

В данном случае секции разделов имеют пользовательское поле UF_HEADQUARTER. Ближайшее выибрается к использованию.

В данном случае секции разделов имеют пользовательское поле UF_HEADQUARTER. Ближайшее выибрается к использованию.

<?php
    /**
     * @param bool   $userID
     * @param string $key
     * @param int    $equalityValue
     *
     * @return array
     */
    function GetUserHeadQuarterId ( $userID = false, $key = 'UF_HEADQUARTER', $equalityValue = 1 )
    {
        global $USER, $USER_FIELD_MANAGER;
    
        $departIDArray = CIntranetUtils::GetUserDepartments( $userID ? (int)$userID : $USER->GetID() );
    
        foreach ( $departIDArray as $key => $departID ) {
        
            $rsPath = CIBlockSection::GetNavChain(
                IU_IBLOCK_DEPARTMENTS,
                $departID,
                [ "ID", "DEPTH_LEVEL", 'IBLOCK_SECTION_ID' ]
            );
        
            while ( $list = $rsPath->Fetch() ) {
            
                $cvb = $USER_FIELD_MANAGER->GetUserFields(
                    "IBLOCK_" . IU_IBLOCK_DEPARTMENTS . "_SECTION",
                    $list[ 'ID' ]
                );
            
                if ( $cvb[ $key ][ 'VALUE' ] == $equalityValue ) {
                    $headParents[] = $list[ 'ID' ];
                }
            }
        
            $firstParentArray[] = array_pop( $headParents );
            unset( $headParents );
        }
    
        $firstParentArray = array_values( array_unique( $firstParentArray ) );
    
        return (int)count( $firstParentArray ) == 1 ? $firstParentArray[ 0 ] : $firstParentArray;

    }