1:- module(bitrix24_regapp, [ 2 install/2, 3 install/3 4 ]). 5 6:- use_module(bitrix24_config). 7:- use_module(bitrix24_install). 8:- use_module(bitrix24_event, []). 9:- use_module(bitrix24_placement, []). 10 11install(Provider, Data) :- 12 install(Provider, Data, _). 13 14install(Provider, Data, ContextRef) :- 15 bitrix24_install:save_payload_contexts(Provider, Data, [ContextRef-_]), 16 'event.unbind'(Provider, ContextRef), 17 'event.bind'(Provider, ContextRef), 18 'placement.unbind'(Provider, ContextRef), 19 'placement.bind'(Provider, ContextRef), 20 !. 21 22'event.unbind'(Provider, ContextRef) :- 23 bitrix24_event:get(Provider, ContextRef, Reply), 24 forall(member(Xs, Reply), ( 25 memberchk(event=Event, Xs), 26 memberchk(handler=Handler, Xs), 27 ( Event == 'ONAPPINSTALL' 28 -> true 29 ; bitrix24_event:unbind(Provider, ContextRef, Event, Handler, UnbindReply), 30 successful_unbind(UnbindReply) 31 ) 32 )). 33 34'event.bind'(Provider, ContextRef) :- 35 forall(config(event, E, H), ( 36 bitrix24_event:bind(Provider, ContextRef, E, H, Reply), 37 successful_bind(Reply) 38 )). 39 40'placement.unbind'(Provider, ContextRef) :- 41 bitrix24_placement:get(Provider, ContextRef, Reply), 42 forall(member(Xs, Reply), ( 43 memberchk(placement=Placement, Xs), 44 memberchk(handler=Handler, Xs), 45 bitrix24_placement:unbind(Provider, ContextRef, Placement, Handler, UnbindReply), 46 successful_unbind(UnbindReply) 47 )). 48 49'placement.bind'(Provider, ContextRef) :- 50 forall(placement_config(E, H, T), ( 51 bitrix24_placement:bind(Provider, ContextRef, E, H, T, Reply), 52 successful_bind(Reply) 53 )). 54 55placement_config(Placement, Handler, Title) :- 56 config(placement, Placement, [Handler, Title]), 57 !. 58placement_config(Placement, Handler, Title) :- 59 config(placement, Placement, Handler), 60 Title = Handler. 61 62successful_bind(Reply) :- 63 memberchk(result = @(true), Reply), 64 !. 65successful_bind(Reply) :- 66 throw(error(bitrix24_registration_failed(Reply), _)). 67 68successful_unbind(Reply) :- 69 ( memberchk(result = @(true), Reply) 70 ; memberchk(count = _, Reply) 71 ), 72 !. 73successful_unbind(Reply) :- 74 throw(error(bitrix24_registration_failed(Reply), _))