Поддержка серверов

Tree::createLink: метод Битрикс

Постоянная ссылка: http://bxapi.ru/src/?id=271431

<?php 
//    /bitrix/modules/tasks/lib/internals/database/tree.phpTree::createLink()
//    49:

    
public static function createLink($id$parentId$behaviour = array('LINK_DATA' => array()))
    {
        static::
applyCreateRestrictions($id$parentId);

        if(!
is_array($behaviour))
        {
            
$behaviour = array();
        }

        
// check here if there is a link already

        //_dump_r('Create: '.$parentId.' => '.$id.' ('.$behaviour['LINK_DATA']['TYPE'].')');

        
$parentColName = static::getPARENTIDColumnName();
        
$idColName = static::getIDColumnName();

        
// delete broken previous links, if any (but not the link to itself)
        
$dbConnection Main\HttpApplication::getConnection();
        
$dbConnection->query("delete from ".static::getTableName()." where ".$idColName." = '".intval($id)."' and ".$parentColName." != '".intval($id)."'");

        
$success true;
        
$lastAddResult null;

        if(
$parentId)
        {
            
// check if parent exists. if not - add it
            
$item = static::getList(array('filter' => array('='.$parentColName => $parentId'='.$idColName => $parentId), 'select' => array($idColName)))->fetch();
            if(!
is_array($item))
            {
                
//_dump_r('link: '.$parentId.' => '.$parentId);
                
$lastAddResult parent::add(array($parentColName => $parentId$idColName => $parentId));
                if(!
$lastAddResult->isSuccess())
                {
                    
$success false;
                }
            }
        }

        
// check if link to itself exists. if not - add it
        
$item = static::getList(array('filter' => array('='.$parentColName => $id'='.$idColName => $id), 'select' => array($idColName)))->fetch();
        if(!
is_array($item))
        {
            
//_dump_r('link: '.$id.' => '.$id);
            
$lastAddResult parent::add(array($parentColName => $id$idColName => $id));
            if(!
$lastAddResult->isSuccess())
            {
                
$success false;
            }
        }

        
$linkedWithParent false;

        
// TODO: the following part could be rewritten using just db-side insert-select

        
if($success && $parentId)
        {
            
$subtree = array();
            
$res = static::getSubTree($id);
            while(
$item $res->fetch())
            {
                
$subtree[] = $item[$idColName];
            }

            
// link each child (including self) to each parent in the path(es)
            
$res = static::getPathToNode($parentId, array('select' => array($parentColName)));
            while(
$item $res->fetch())
            {
                foreach(
$subtree as $itemId)
                {
                    if(
$item[$parentColName] == $parentId && $itemId == $id// special, direct linking to parent
                    
{
                        if(!
is_array($behaviour['LINK_DATA']))
                        {
                            
$behaviour['LINK_DATA'] = array();
                        }

                        
$lastAddResult parent::add(array_merge(array($idColName => $id$parentColName => $parentId, static::getDIRECTColumnName() => true), $behaviour['LINK_DATA']));
                        if(!
$lastAddResult->isSuccess())
                        {
                            
$success false;
                            break;
                        }
                    }
                    else
                    {
                        
$lastAddResult parent::add(array($idColName => $itemId$parentColName => $item[$parentColName]));
                        if(!
$lastAddResult->isSuccess())
                        {
                            
$success false;
                            break;
                        }
                    }
                }
            }
        }

        return array(
'RESULT' => $success'LAST_DB_RESULT' => $lastAddResult);
    }

Блог разработчика

9 Августа 2016 ResizeImageGet и простой водяной знак налету

Сегодня поговорим о том как проще всего воткнуть водяной знак на картинки в Битрикс. Например, на все изображения каталога.

21 Июля 2016 Добавление вкладки в CRM коробки Битрикс24

В этом посте я покажу, как легко и просто добавить вкладку в сущность CRM. И не просто добавить, а вывести там свой контент.

21 Июля 2016 Как просто обращаться из коробки Битрикс24 на сайт на базе Битрикс

К примеру вам хочется внутренним скриптом дернуть с сайта-магазина информацию, которая там, в свою очередь, закрыта некоторыми правами. Например, админскими. Можно конечно мутить свой REST, или иной формат общения, но проще всего воспользоваться штатным инструментом:

Текст сообщения*
Загрузить изображение