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

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

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

//    Tree::createLink()
//    /bitrix/modules/tasks/lib/internals/database/tree.php: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, или иной формат общения, но проще всего воспользоваться штатным инструментом:

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