Задать вопрос
  • Как сделать код ревью?

    JastaFly
    @JastaFly Автор вопроса
    Ярослав Александров, а какое отношение Ваш комментарий имеет к сути вопроса?!??
  • Как сделать код ревью?

    JastaFly
    @JastaFly Автор вопроса
    Северное Сияние, тут тоже конкретикой не пахнет. Но за книги спасибо) постараюсь запомнить
  • Как сделать код ревью?

    JastaFly
    @JastaFly Автор вопроса
    Северное Сияние, Ваше ЧСВ моему как минимум не уступает. Просто я любитель конкретики, а не "Оййй ну всё так плохо, я бы сжёг этот код вместе с программистом его написавшим". Мне интересно разобраться что именно плохо, а не читать в 10 раз одну и туже воду
  • Как сделать код ревью?

    JastaFly
    @JastaFly Автор вопроса
    Северное Сияние, про битрикс согласен, скорее его выбирают менеджеры, а не айтишники. Мол у нас же стоит одинеска, так путь и сайт на ней сделают. Ну и плюс кодеры, которые когда-то выучили битрикс и теперь из зоны комфорта не хотят вылазить
    Какую идейку. Да я же написал что-то КОНКРЕТНОЕ. Просто возьмите одну строчку, всего одну и подробненько опишите что там не так, мне это будет полезнее, чем десяток сообщений в заголи по заголям, если я бы захотел пообщаться с ламерами не о чём, то пошел бы на mail.ru ответы
  • Как сделать код ревью?

    JastaFly
    @JastaFly Автор вопроса
    zorca, так а что с этим кодом не так?!?? Это же стандартная проверка битрикса. Приставать к кодеру за неё, это всё равно что ругать владельца Жигулей за скрипучие двери. Вы вообще с битриксом дело имели?!??
  • Как сделать код ревью?

    JastaFly
    @JastaFly Автор вопроса
    Игорь, согласен. Ведь бизнесу пох что там на сервере под капотом, космический шатл-субмарина или велосипед собранный из говна и веток. Работает та и ладно. Вот кстати прикольный видос в тему
  • Как сделать код ревью?

    JastaFly
    @JastaFly Автор вопроса
    А можете подробнее расписать что не так?!?? Хотя бы одну строчку, которая произвела на Вас наибольшее впечатление. А то пока что Ваш совет тянет на уровень mail.ru ответы
  • Как сделать код ревью?

    JastaFly
    @JastaFly Автор вопроса
    Северное Сияние, а то я вот как будто не вкурсе про современные фреймврики и ООП. На досуге я развлекаю себя изучением ларавеля и реакта.... а работать чаще приходится с битриксом и вордпресом, так как офферов тупо больше. Но это совершенно не значит что я застыл на них и больше ничем не интересуюсь. Если бы это было так я бы не стал тут вопросы задавать. Ибо сам факт чтения Ваших пусть и бессмысленных с точки зрения сути вопроса ответов, тем не менение наводит меня на интересные, новые мысли, а это полезно для кругозора
    Да какая разница по каким причинам Битрикс стал популярным, по историческим или ещё каким-то, вакансий полно и почему бы не начать с него, параллельно изучая что-то более кайфовое?!??
    Нууу сорян zorca я пока пишу скорее ради прибыли, а не ради большой буквы, но это не значит что это мои планы на всю карьеру в IT. И мне не нужно делать ревью полностью, просто подбросьте идейку, всего одну, на что обратить внимание и почему, вместо того чтобы писать опусы о том: "Ах какой ужасный битрикс". Я это и так знаю. Надстройка над MVС, а не CMS. Программистам гемор под него разрабатывать, обычным людям невыносимо сложно с ним работать
  • Как сделать код ревью?

    JastaFly
    @JastaFly Автор вопроса
    Ну смотрите во первых я кое что знаю. Сюда я написал чтобы получить новых идей, пишу для размышлений, а не ради чтения псевдофилософии, мол Битрикс это кал и вообще лучше иметь дочь проститутку чем сына битрикс разработчика. Вам он может не нравится, но с точки зрения вакансий, это самая востребованная CMS в РФ (по крайней мере в регионах), поэтому умение работать с ним лишним точно не будет.
    Но всё равно читать код opensource, для поднятия скилла, это годная мысль. Спасибо! Как будет время займусь)
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    Нууу я перенес файл component.php в local и там всё поправил. А почему могут возникнуть проблемы с обновлением??!? Я всегда считал что файлы ядра нельзя править, потому что исправления могут потеряться при обновлении, а значит рухнет завязанный на них функционал
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    Дмитрий Игошев, вы все верно говорите. Смотрите как формируется массив $data. В начале был массив $arrTicket:
    $arTicket = Array(
                'TITLE' => $request["TITLE"],
                'CATEGORY_ID' => (int)$request["CATEGORY_ID"],
                'PRIORITY_ID' => (int)$request["PRIORITY_ID"],
                'MESSAGE' => $_POST['MESSAGE'],
                'FILES' => $request["FILES"],
            );

    Далее он попадает в статический метод класса TicketTable:
    $result = Support\TicketTable::add($arTicket);
    $TICKET_ID = $result->getId();
     if (!$result->isSuccess()) {
                    $arResult = $arTicket;
                    if ($arParams['ALLOW'] && (int)$request['PARRENT_MESSAGE_ID'] > 0) {
                        $arResult['PARRENT_MESSAGE_ID'] = $request['PARRENT_MESSAGE_ID'];
                    }
                    $arResult["ERRORS"] = $result->getErrorMessages();

    Класс TicketTable является наследником вот этого класса из ядра и используя его метод
    $result = parent::add($data)
    Отправляет массив $data дальше. Проверка полей осуществляется в данной методе класса DataManager:
    public static function checkFields(Result $result, $primary, array $data)
        {
            $entity = static::getEntity();
            //checks required fields
            foreach ($entity->getFields() as $field)
            {
                if ($field instanceof ScalarField && $field->isRequired())
                {
                    $fieldName = $field->getName();
                    if (
                        (empty($primary) && (!isset($data[$fieldName]) || $field->isValueEmpty($data[$fieldName])))
                        || (!empty($primary) && isset($data[$fieldName]) && $field->isValueEmpty($data[$fieldName]))
                    )
                    {
                        $result->addError(new FieldError(
                            $field,
                            Loc::getMessage("MAIN_ENTITY_FIELD_REQUIRED", array("#FIELD#"=>$field->getTitle())),
                            FieldError::EMPTY_REQUIRED
                        ));
                    }
                }
            }
    
            // checks data - fieldname & type & strlen etc.
            foreach ($data as $k => $v)
            {
                if ($entity->hasField($k))
                {
                    $field = $entity->getField($k);
    
                }
                else
                {
                    throw new Main\ArgumentException(sprintf(
                        'Field `%s` not found in entity when trying to query %s row.',
                        $k, $entity->getName()
                    ));
                }
    
                $field->validateValue($v, $primary, $data, $result);
            }
        }

    Когда я добавил проблемное поле в самый первый массив $arrTicket, то ошибка пропала:
    $arTicket = Array(
                'TITLE' => $request["TITLE"],
                'CATEGORY_ID' => (int)$request["CATEGORY_ID"],
                'PRIORITY_ID' => (int)$request["PRIORITY_ID"],
                'MESSAGE' => $_POST['MESSAGE'],
                'FILES' => $request["FILES"],
                'PLATFORM_TECHNOLOG' => $request["PLATFORM_TECHNOLOG"]
            );

    Но мне как-то подобное решение не нравится. Хотя файл компонента можно без проблем перенести в local и не трогая файлов ядра решить вопрос. Что думаете?!??
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    Вот принтовка $data:
    Array
    (
        [TITLE] => Сколько ты зарабатываешь?!??
        [CATEGORY_ID] => 4
        [PRIORITY_ID] => 0
        [MESSAGE] => цкцукцкцукцу
        [OWNER_USER_ID] => 684
        [DATE_CREATE] => Bitrix\Main\Type\DateTime Object
            (
                [value:protected] => DateTime Object
                    (
                        [date] => 2021-01-26 01:59:54.000000
                        [timezone_type] => 3
                        [timezone] => America/New_York
                    )
    
            )
    
        [CREATED_USER_ID] => 684
        [RESPONSIBLE_USER_ID] => 1
        [SITE_ID] => s1
        [IP] => 192.168.56.1
        [STATUS_ID] => 1
    )

    Нашел таблицу. Она называется: altasib_support_ticket. Столбец PLATFORM_TECHNOLOG в ней имеется:
    600fc0c79105d070769762.jpeg
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    Дмитрий Игошев, в $data всегда массив переданный в component.php:
    $result = Support\TicketTable::add($arTicket);
    Формируется он из значений части полей вот так:
    $arTicket = Array(
                'TITLE' => $request["TITLE"],
                'CATEGORY_ID' => (int)$request["CATEGORY_ID"],
                'PRIORITY_ID' => (int)$request["PRIORITY_ID"],
                'MESSAGE' => $_POST['MESSAGE'],
                'FILES' => $request["FILES"],
            );
  • Получить изменения из удалённого репозитория?

    JastaFly
    @JastaFly Автор вопроса
    и всё таки я попробовал.... ожидаемо не помогло
  • Получить изменения из удалённого репозитория?

    JastaFly
    @JastaFly Автор вопроса
    Так в git pull по моему и так заложен git fetch
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    Дмитрий Игошев, добавил столбец PLATFORM_TECHNOLOG, ошибка не пропала
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    getMap() выдаёт следующий массив:
    Array
    (
        [ID] => Array
            (
                [data_type] => integer
                [primary] => 1
                [autocomplete] => 1
                [title] => №
            )
    
        [SITE_ID] => Array
            (
                [data_type] => string
                [required] => 1
                [title] => Сайт
            )
    
        [KindAction] => Array
            (
                [data_type] => string
                [required] => 
            )
    
        [PLATFORM_TECHNOLOG] => Array
            (
                [data_type] => string
                [required] => 1
            )
    
        [DATE_CREATE] => Array
            (
                [data_type] => datetime
                [required] => 1
                [title] => Дата создания
            )
    
        [DATE_CREATE_X] => Array
            (
                [data_type] => datetime
                [expression] => Array
                    (
                        [0] => DATE(%s)
                        [1] => DATE_CREATE
                    )
    
            )
    
        [TIMESTAMP] => Array
            (
                [data_type] => datetime
                [title] => Дата изменения
            )
    
        [TIMESTAMP_X] => Array
            (
                [data_type] => datetime
                [expression] => Array
                    (
                        [0] => DATE(%s)
                        [1] => TIMESTAMP
                    )
    
            )
    
        [LAST_MESSAGE_DATE] => Array
            (
                [data_type] => datetime
                [title] => Дата последнего сообщения
            )
    
        [LAST_MESSAGE_USER_ID] => Array
            (
                [data_type] => integer
                [title] => Автор последнего сообщения
            )
    
        [LAST_MESSAGE_USER] => Array
            (
                [data_type] => ALTASIB\Support\User
                [reference] => Array
                    (
                        [=this.LAST_MESSAGE_USER_ID] => ref.ID
                    )
    
            )
    
        [LAST_MESSAGE_BY_SUPPORT] => Array
            (
                [data_type] => boolean
                [values] => Array
                    (
                        [0] => N
                        [1] => Y
                    )
    
            )
    
        [IS_CLOSE] => Array
            (
                [data_type] => boolean
                [title] => Закрыто
                [values] => Array
                    (
                        [0] => N
                        [1] => Y
                    )
    
            )
    
        [DATE_CLOSE] => Array
            (
                [data_type] => datetime
                [title] => Дата закрытия
            )
    
        [DATE_CLOSE_X] => Array
            (
                [data_type] => datetime
                [expression] => Array
                    (
                        [0] => DATE(%s)
                        [1] => DATE_CLOSE
                    )
    
            )
    
        [OWNER_USER_ID] => Array
            (
                [data_type] => integer
                [required] => 1
                [title] => Автор
            )
    
        [OWNER_USER] => Array
            (
                [data_type] => ALTASIB\Support\User
                [reference] => Array
                    (
                        [=this.OWNER_USER_ID] => ref.ID
                    )
    
            )
    
        [CREATED_USER_ID] => Array
            (
                [data_type] => integer
                [required] => 1
                [title] => Создано
            )
    
        [CREATED_USER] => Array
            (
                [data_type] => ALTASIB\Support\User
                [reference] => Array
                    (
                        [=this.CREATED_USER_ID] => ref.ID
                    )
    
            )
    
        [MODIFIED_USER_ID] => Array
            (
                [data_type] => integer
                [title] => Изменено
            )
    
        [MODIFIED_USER] => Array
            (
                [data_type] => ALTASIB\Support\User
                [reference] => Array
                    (
                        [=this.MODIFIED_USER_ID] => ref.ID
                    )
    
            )
    
        [RESPONSIBLE_USER_ID] => Array
            (
                [data_type] => integer
                [required] => 1
                [title] => Ответственный
            )
    
        [RESPONSIBLE_USER] => Array
            (
                [data_type] => ALTASIB\Support\User
                [reference] => Array
                    (
                        [=this.RESPONSIBLE_USER_ID] => ref.ID
                    )
    
            )
    
        [CATEGORY_ID] => Array
            (
                [data_type] => integer
                [required] => 1
                [title] => Категория
            )
    
        [CATEGORY] => Array
            (
                [data_type] => ALTASIB\Support\CategoryTable
                [reference] => Array
                    (
                        [=this.CATEGORY_ID] => ref.ID
                    )
    
            )
    
        [PRIORITY_ID] => Array
            (
                [data_type] => integer
                [title] => Приоритет
            )
    
        [STATUS_ID] => Array
            (
                [data_type] => integer
                [required] => 1
                [title] => Статус
            )
    
        [STATUS] => Array
            (
                [data_type] => ALTASIB\Support\StatusTable
                [reference] => Array
                    (
                        [=this.STATUS_ID] => ref.ID
                    )
    
            )
    
        [SLA_ID] => Array
            (
                [data_type] => integer
                [title] => Уровень поддержки
            )
    
        [SLA] => Array
            (
                [data_type] => ALTASIB\Support\SlaTable
                [reference] => Array
                    (
                        [=this.SLA_ID] => ref.ID
                    )
    
            )
    
        [TITLE] => Array
            (
                [data_type] => string
                [required] => 1
                [title] => Заголовок обращения
            )
    
        [IP] => Array
            (
                [data_type] => string
                [required] => 1
                [title] => IP
            )
    
        [MESSAGE] => Array
            (
                [data_type] => string
                [required] => 1
                [title] => Текст обращения
            )
    
        [MESSAGE_CNT] => Array
            (
                [data_type] => integer
                [expression] => Array
                    (
                        [0] => (SELECT COUNT(altasib_support_ticket_message.ID) from altasib_support_ticket_message WHERE altasib_support_ticket_message.TICKET_ID=%s)
                        [1] => ID
                    )
    
                [title] => Сообщений
            )
    
        [MESSAGES] => Array
            (
                [data_type] => ALTASIB\Support\TicketMessageTable
                [reference] => Array
                    (
                        [=this.ID] => ref.TICKET_ID
                    )
    
            )
    
        [GROUP_ID] => Array
            (
                [data_type] => integer
            )
    
        [GROUP] => Array
            (
                [data_type] => \Bitrix\Socialnetwork\WorkgroupTable
                [reference] => Array
                    (
                        [=this.GROUP_ID] => ref.ID
                    )
    
            )
    
        [TASK_ID] => Array
            (
                [data_type] => integer
            )
    
        [DEAL_ID] => Array
            (
                [data_type] => integer
            )
    
        [IS_OVERDUE] => Array
            (
                [data_type] => boolean
                [values] => Array
                    (
                        [0] => N
                        [1] => Y
                    )
    
            )
    
        [IS_NOTIFY_SEND] => Array
            (
                [data_type] => boolean
                [values] => Array
                    (
                        [0] => N
                        [1] => Y
                    )
    
            )
    
        [IS_DEFERRED] => Array
            (
                [data_type] => boolean
                [values] => Array
                    (
                        [0] => N
                        [1] => Y
                    )
    
            )
    
        [SUM_ELAPSED_TIME] => Array
            (
                [data_type] => integer
                [expression] => Array
                    (
                        [0] => (SELECT SUM(altasib_support_ticket_message.ELAPSED_TIME) from altasib_support_ticket_message WHERE altasib_support_ticket_message.TICKET_ID=%s)
                        [1] => ID
                    )
            )
        [COMMENT] => Array
            (
                [data_type] => string
            )
    )

    Таблица судя по всему называется altasib_support_ticket_message?!??
    Если да то столбца "PLATFORM_TECHNOLOG" тут нет:
    600acd1b492d6807090902.jpeg
  • Получить изменения из удалённого репозитория?

    JastaFly
    @JastaFly Автор вопроса
    Особо значит что какие-то изменения с удалённого репозитория приходят но не все..... а мне нужно чтобы локалка полностью такой же как и удалённый репозиторий. Ветка точно та что мне нужна, а именно dev. Чекаут обычно делаю через интрефейс шторма а не через консоль. Может быть попробовать:
    git reset --hard
    ?!??
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    За проверку полей отвечает вот эта функция:
    public static function checkFields(Result $result, $primary, array $data)
        {
            $entity = static::getEntity();
            //checks required fields
            foreach ($entity->getFields() as $field)
            {
                if ($field instanceof ScalarField && $field->isRequired())
                {
                    $fieldName = $field->getName();
                    if (
                        (empty($primary) && (!isset($data[$fieldName]) || $field->isValueEmpty($data[$fieldName])))
                        || (!empty($primary) && isset($data[$fieldName]) && $field->isValueEmpty($data[$fieldName]))
                    )
                    {
                        $result->addError(new FieldError(
                            $field,
                            Loc::getMessage("MAIN_ENTITY_FIELD_REQUIRED", array("#FIELD#"=>$field->getTitle())),
                            FieldError::EMPTY_REQUIRED
                        ));
                    }
                }
            }
    
            // checks data - fieldname & type & strlen etc.
            foreach ($data as $k => $v)
            {
                if ($entity->hasField($k))
                {
                    $field = $entity->getField($k);
    
                }
                else
                {
                    throw new Main\ArgumentException(sprintf(
                        'Field `%s` not found in entity when trying to query %s row.',
                        $k, $entity->getName()
                    ));
                }
    
                $field->validateValue($v, $primary, $data, $result);
            }
        }

    То есть если я верно понял, она получает сущность в которой есть имена всех полей, затем она проверяет есть ли в $data элемент с аналогичным именем, если нет то записывает ошибку. Получается я всё верно сделал добавив в массив недостающий элемент
  • Битрикс не заполнено обязательное поле?

    JastaFly
    @JastaFly Автор вопроса
    Про namespace знаю.... но не всё.... а с рефлексией затупил и указал неполное имя класса
    Короче в итоге я добрался до нужного класса он оказался наследником этого класса ядра Битрикса для добавления информации использует его метод add:
    $result = parent::add($data)
    В конце работы метода возвращается $result. В $data лежит $arTicket в который я и добавил новую строку.
    Лезть и править что-то в ядре битрикса я конечно же не буду, но посмотреть как работает метод add любопытно. Но насколько я понял внутри пространства имен можно использовать только классы которые в нём определены и таже рефлексия работать уже не будет?!?? Как мне тогда найти файл с классом Bitrix\Main\Entity\DataManager?!??