Ошибка при удалении в модуле csocnetgroup onbeforelangdelete socialnetwork

ByBit

Для решения проблемы отправляемся в  раздел Настройки магазина – Типы плательщиков, путь имя_сайта/bitrix/admin/sale_person_type.php?lang=ru  и удалить там типы плательщиков привязанные к тому сайту который мы удаляем. Перед удалением, возможно, потребуется удаление заказов связанных с этим плательщиком, путь имя_сайта/bitrix/admin/sale_order.php?lang=ru

реклама на этом сайте

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


//    CSocNetGroup::OnBeforeLangDelete()
//    /bitrix/modules/socialnetwork/classes/general/group.php:1233

    public static function OnBeforeLangDelete($lang)
    {
        global $APPLICATION, $DB;
        $r = $DB->Query("
            SELECT GROUP_ID
            FROM b_sonet_group_site
            WHERE SITE_ID='".$DB->ForSQL($lang, 2)."'
            ORDER BY GROUP_ID
        ");
        $arSocNetGroups = array();
        while($a = $r->Fetch())
            $arSocNetGroups[] = $a["GROUP_ID"];
        if(count($arSocNetGroups) > 0)
        {
            $APPLICATION->ThrowException(GetMessage("SONET_GROUP_SITE_LINKS_EXISTS", array("#ID_LIST#" => implode(", ", $arSocNetGroups))));
            return false;
        }
        else
            return true;
    }

‘;

Ситуация

Битрикс, пытаюсь удалить тип инфоблока — получаю ошибку:

«Ошибка удаления. Возможно есть ссылающиеся объекты.»

Решение

Захожу в редактирование типа инфоблока.
Переключаюсь на вкладку «Торговый каталог»
Снимаю галочки «Является торговым каталогом» и «Инфоблок имеет торговые предложения».

После этого получилось удалить тип инфоблока.

Источник

Помогла тема форума
http://dev.1c-bitrix.ru/support/forum/forum26/topic35556/1

Ошибка Fatal error: Class «CSocNetGroup» not found является стандартной системной ошибкой CMS 1C-Bitrix. Она возникает на странице при вызове методов не подключенного класса.

Поскольку невозможно держать в памяти десятки модулей Битрикса, сотни их классов и связи между ними, часто при обнаружении ошибки Fatal error: Class «CSocNetGroup» not found возникает вопрос, какой модуль надо подключить?

Ошибка Fatal error: Class «CSocNetGroup» not found возникает из-за того, что не найден класс CSocNetGroup модуля socialnetwork.

Для исправления ошибки подключите в коде модуль socialnetwork до вызова методов класса CSocNetGroup.

Для подключения модуля socialnetwork используйте следующий код.

			if(CModule::IncludeModule("socialnetwork"))
			{ 
				//здесь можно использовать функции классов модуля socialnetwork
			}

-35 / 3 / 0

Регистрация: 20.06.2011

Сообщений: 876

1

23.07.2020, 10:32. Показов 2231. Ответов 44


Студворк — интернет-сервис помощи студентам

Вопрос вам основной ! Есть класс https://dev.1c-bitrix.ru/api_h… update.php вам с методом Update ! Этот метод где нибудь прописывается — и описывается? Где он описывается в самом модуле установленном на битрикс? Прям укажите путь — если он в классе в установленном по пути — /bitrix/modules/socialnetwork/classes/general — в каком файле?



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

23.07.2020, 10:32

44

439 / 406 / 113

Регистрация: 15.02.2012

Сообщений: 1,760

24.07.2020, 13:38

2

в плане найти метод очень полезно использовать IDE с возможностью заводить проекты, обычно по ним можно искать нужное. Кроме того есть полезный ресурс — вот ващ метод https://bxapi.ru/src/?module_i… up::Update



0



-35 / 3 / 0

Регистрация: 20.06.2011

Сообщений: 876

24.07.2020, 15:11

 [ТС]

3

А внутри можно ли эти методы переписывать?

Добавлено через 18 минут
Именно чтобы изменить условия осуществления! в самом модуле на сайте изменить?



0



2218 / 1146 / 230

Регистрация: 16.03.2008

Сообщений: 5,494

Записей в блоге: 2

24.07.2020, 16:31

4

Это будет грубейшая ошибка.
Одно обновление и ваша работа в помойку. Наследуйтесь — переопределяйте необходимое — делайте свои шаблоны/компоненты с использованием уже своих классов.



0



-35 / 3 / 0

Регистрация: 20.06.2011

Сообщений: 876

24.07.2020, 19:53

 [ТС]

5

Что никакую зашлушку на это изменение не поставишь на этот метод чтобы обновление не касалось его?

Добавлено через 7 минут
Мне вот нужно чтобы метод delete в csocnetgroup — чтобы срабатывал при определенных условиях (например отсутсвие активности в добавлении новых пользователей, новых сообщений , новых файлов?)

Добавлено через 2 часа 29 минут
Заглушку я поставил — временную против обнов.

Мне вот нужно чтобы метод delete в csocnetgroup — чтобы срабатывал при определенных условиях (например отсутсвие активности в добавлении новых пользователей, новых сообщений , новых файлов?) Как условия на мои изменения поставить?



0



2218 / 1146 / 230

Регистрация: 16.03.2008

Сообщений: 5,494

Записей в блоге: 2

25.07.2020, 00:55

6

Поищите в документации где то рядом с описанием этого класса события, которые он генерирует. Наверняка там есть событие типа BeforeDelete. Делаете обработчик в котором проверяете необходимые условия, и, если необходимо прекращаете выполнение удаления.



0



Dorofej

-35 / 3 / 0

Регистрация: 20.06.2011

Сообщений: 876

25.07.2020, 08:05

 [ТС]

7

Да там полно условий — а вот — $db_events = GetModuleEvents(«socialnetwork», «OnBeforeSocNetGroupDelete»);

НАПРИМЕР

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 if ($bSuccess)
        {
            BitrixSocialnetworkIntegrationImChatWorkgroup::unlinkChat(array(
                'group_id' => $ID
            ));
 
            $bSuccessTmp = true;
            $dbResult = CSocNetFeatures::GetList(
                array(),
                array("ENTITY_ID" => $ID, "ENTITY_TYPE" => SONET_ENTITY_GROUP)
            );
            while ($arResult = $dbResult->Fetch())
            {
                $bSuccessTmp = $DB->Query("DELETE FROM b_sonet_features2perms WHERE FEATURE_ID = ".$arResult["ID"]."", true);
                if (!$bSuccessTmp)
                {
                    break;
                }
            }
            if (!$bSuccessTmp)
            {
                $bSuccess = false;
            }
        }
        if ($bSuccess)
        {
            $bSuccess = $DB->Query("DELETE FROM b_sonet_features WHERE ENTITY_ID = ".$ID." AND ENTITY_TYPE = '".$DB->ForSql(SONET_ENTITY_GROUP, 1)."'", true);
        }

А как вот сделать именно обработчик на мои события например отсутсвие активности в добавлении новых пользователей, новых сообщений , новых файлов? покажите прям пример по моим условиям я не разу не делал?



0



2218 / 1146 / 230

Регистрация: 16.03.2008

Сообщений: 5,494

Записей в блоге: 2

25.07.2020, 19:45

8

Согласно документации обработчик должен вернуть false если надо остановить. Ну так вот выясняете была ли активность по тем критериям, которые считаете нужными и возвращаете либо false либо true.



0



Dorofej

-35 / 3 / 0

Регистрация: 20.06.2011

Сообщений: 876

25.07.2020, 20:05

 [ТС]

9

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
public static function Delete($ID)
    {
        global $DB, $APPLICATION, $CACHE_MANAGER, $USER_FIELD_MANAGER;
 
        if (!CSocNetGroup::__ValidateID($ID))
        {
            return false;
        }
 
        $ID = IntVal($ID);
        $bSuccess = True;
 
        $db_events = GetModuleEvents("socialnetwork", "OnBeforeSocNetGroupDelete");
        while ($arEvent = $db_events->Fetch())
        {
            if (ExecuteModuleEventEx($arEvent, array($ID))===false)
            {
                return false;
            }
        }
 
        $arGroup = CSocNetGroup::GetByID($ID);
        if (!$arGroup)
        {
            $APPLICATION->ThrowException(GetMessage("SONET_NO_GROUP"), "ERROR_NO_GROUP");
            return false;
        }
 
        $DB->StartTransaction();
 
        $events = GetModuleEvents("socialnetwork", "OnSocNetGroupDelete");
        while ($arEvent = $events->Fetch())
        {
            ExecuteModuleEventEx($arEvent, array($ID));
        }
 
        if ($bSuccess)
        {
            $res = UserToGroupTable::getList([
                'filter' => [
                    '=GROUP_ID' => $ID
                ],
                'select' => [ 'USER_ID' ]
            ]);
            while($relationFields = $res->fetch())
            {
                CSocNetSearch::onUserRelationsChange($relationFields['USER_ID']);
            }
            $bSuccess = $DB->Query("DELETE FROM b_sonet_user2group WHERE GROUP_ID = ".$ID, true);
        }
 
        if ($bSuccess)
        {
            BitrixSocialnetworkIntegrationImChatWorkgroup::unlinkChat(array(
                'group_id' => $ID
            ));
 
            $bSuccessTmp = true;
            $dbResult = CSocNetFeatures::GetList(
                array(),
                array("ENTITY_ID" => $ID, "ENTITY_TYPE" => SONET_ENTITY_GROUP)
            );
            while ($arResult = $dbResult->Fetch())
            {
                $bSuccessTmp = $DB->Query("DELETE FROM b_sonet_features2perms WHERE FEATURE_ID = ".$arResult["ID"]."", true);
                if (!$bSuccessTmp)
                {
                    break;
                }
            }
            if (!$bSuccessTmp)
            {
                $bSuccess = false;
            }
        }
        if ($bSuccess)
        {
            $bSuccess = $DB->Query("DELETE FROM b_sonet_features WHERE ENTITY_ID = ".$ID." AND ENTITY_TYPE = '".$DB->ForSql(SONET_ENTITY_GROUP, 1)."'", true);
        }

Как добавить в этот участок условие удаления — прям напишите кодом — в отсутствии активности в добавлении новых пользователей, новых сообщений, новых файлов? Или удаления просто хотя бы отсутствия активности?



0



2218 / 1146 / 230

Регистрация: 16.03.2008

Сообщений: 5,494

Записей в блоге: 2

25.07.2020, 20:13

10

Зачем вы этот код приводите? Этот код (код из ядра) править не надо совсем.

Еще раз повторюсь. Вам необходимо:
1 создать обработчик события OnBeforeSocNetGroupDelete
2 подключить его к системе событий

В обработчике проверяете свои условия. И возвращаете true или false. Вот ссылка на статью про обработчики событий (правда устаревший подход) в курсе.

Вот статья где расписано различие в подключении обработчиков между старым и новым ядрами. (Новое это D7)

Который я вам очень настоятельно рекомендую прочитать. Значительная часть ответов на ваши вопросы в этом курсе есть.



0



-35 / 3 / 0

Регистрация: 20.06.2011

Сообщений: 876

25.07.2020, 21:29

 [ТС]

11

Хорошо напишите условие удаления хотя бы отсутствия активности?



0



-35 / 3 / 0

Регистрация: 20.06.2011

Сообщений: 876

26.07.2020, 05:48

 [ТС]

12

Ваши статьи я прочитал. Напишите прям условие IF то удалить. Отсутствия активности. ЧТо в условии IF будет



0



2218 / 1146 / 230

Регистрация: 16.03.2008

Сообщений: 5,494

Записей в блоге: 2

26.07.2020, 13:07

13

Нет. Писать готовый код я точно не буду с этим во фриланс
У меня нет готового решения, решение найти не сложно есть и курсы по битриксу, и документация и открытый код. И, как вам выше говорили, IDE способные помочь в навигации по коду.

Помочь найти решение могу. И для этого четко сформулируйте критерии отсутствия активности.



0



-35 / 3 / 0

Регистрация: 20.06.2011

Сообщений: 876

26.07.2020, 13:11

 [ТС]

14

Вместо if ($GLOBALS[‘USER’]->GetID() == 2) что в условии поставить? Для группы условие удаления хотя бы отсутствия активности?Из статьи https://dev.1c-bitrix.ru/learn… ON_ID=3395 по методу delete . Что в If скобки поставить?

Добавлено через 1 минуту
Критерии отсутвия активности любые — я даже задачу упростил ( а так отсутсвие новых пользователей, новых сообщений и файлов и как агенту поставить условие не раз вдень а раз в день?)

Добавлено через 1 минуту
Скорее всего по классу https://dev.1c-bitrix.ru/api_h… ocnetgroup



0



2218 / 1146 / 230

Регистрация: 16.03.2008

Сообщений: 5,494

Записей в блоге: 2

26.07.2020, 13:17

15

Итак. Начнем с первого.
Отсутствие пользователей в группе. Вы можете отобрать группы в которых нет новых пользователей? Попробуйте сформулировать просто текстом что и с каким условием для этого надо отобрать…



0



-35 / 3 / 0

Регистрация: 20.06.2011

Сообщений: 876

26.07.2020, 13:29

 [ТС]

16

Там есть в методе update — вариант active условие Y and N . Просто в самой документации не написано в каких случаях прописывается active Y и active N. — вот это бы понять КАК??? ( просто соц сети как модулю нет и полугода) А так отсутствие новых пользователей получается— если текстом не выполнялись добавление пользвоателей то не выполянлись добавления в таблицы базы данных в течении месяца — каких также выяснить (поддержка вообще молчит). Для начала в каких случаях прописывается active Y и active N в методе update класса https://dev.1c-bitrix.ru/api_h… ocnetgroup (еще active есть в getbyid ) в delete его не видно?



0



2218 / 1146 / 230

Регистрация: 16.03.2008

Сообщений: 5,494

Записей в блоге: 2

26.07.2020, 13:37

17

Вам зачем вообще метод update. Для начала забудьте вообще про код. Вы сами себя загоняете в угол, т.к. не можете сформулировать четко задачу.

Что значит не добавлялись? Подержка на такую ерунду вообще не должна реагировать. Если вы уж взялись за работу разработчика то вы должны изучить и программирование вообще и продукт в целом.

Вам ведь надо понять не было ли в этой группе за определенный промежуток времени пользователей. Так?



0



-35 / 3 / 0

Регистрация: 20.06.2011

Сообщений: 876

26.07.2020, 16:29

 [ТС]

18

Не пользователей а не было добавлено новых пользователей например за год?

Добавлено через 1 минуту
Плюс Для начала в каких случаях прописывается active Y и active N в методе в getbyid тогда — очень нужна такая инфа?

Добавлено через 1 час 49 минут
Не пользователей а не было добавлено новых пользователей например за год? Чтобы вы посоветуйте — скажите плиз?



0



2218 / 1146 / 230

Регистрация: 16.03.2008

Сообщений: 5,494

Записей в блоге: 2

26.07.2020, 18:28

19

Ну вот видите. Все крутится вокруг пользователей. значит и надо заходить через них. Т.е. надо найти пользователей которые были довлены в группу в определенный период. Если список получится пустой — значит ни кого не доавляли.



0



-35 / 3 / 0

Регистрация: 20.06.2011

Сообщений: 876

26.07.2020, 20:12

 [ТС]

20

Тогда какие таблицы базы данных в битрикс будут участвовать в добавлении пользователей, какие в публикации сообщений и файлов? Хотя бы в одном случае знаете?



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

26.07.2020, 20:12

Помогаю со студенческими работами здесь

Где находится html-код в ASP.NET Visual Studio
Здравствуйте,
у меня такое задание оптимизировать сайт.
я хотела добавить мета тегов в html…

Вывести название музея и страну, где он находится, в коллекции которых находится наибольшее кол-во картин Гойи
Друзья. Помогите составить sql запрос. Даны три таблицы. 1.Авторы: Код_автора(PK), Имя, Фамилия,…

Поменять местами строку , в которой находится максимальный элемент со строкой, где находится минимальный элемент матрицы
Дана целочисленная матрица А размером N, где N вводится с клавиатуры. Поменять местами строку , в…

Где находится голова и где хвост у односвязного списка
Добрый день и прошу прощения за не совсем полное соответствие разделу.
Вопрос по терминологии:…

Update, где ошибка?
Добрый день!

Вот такой скрипт для обновления актуальных дат и статусов в таблице:

<?php
/**…

Где ошибка? (UPDATE)
Ниже привел код.
Результатом этого кода должно быть редактирование записи в таблице.
Но почему-то…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

20

Понравилась статья? Поделить с друзьями:
  • Ошибка при удалении в модуле csalepersontype onbeforelangdelete sale
  • Ошибка при удалении в модуле crubric onbeforelangdelete subscribe
  • Ошибка при удалении в модуле ciblock onbeforelangdelete iblock
  • Ошибка при удалении в модуле cforumnew onbeforelangdelete forum
  • Ошибка при удалении в корзину вордпресс