Skip to content

Commit 0e75816

Browse files
author
atomzakk
committed
Send to Groups ability added to Notifications and Messenger
- added ability to send messages to Groups - Messenger refactoring and layout fixes
1 parent 166d40a commit 0e75816

6 files changed

Lines changed: 156 additions & 79 deletions

File tree

src/basic/contracts/NotificationsSend.sim

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ contract NotificationsSend {
22
data {
33
MemberId int "optional"
44
Rid int "optional"
5+
GroupId int "optional"
56
Closure int "optional"
67
Sender int
78
Icon string "optional"
@@ -50,7 +51,7 @@ contract NotificationsSend {
5051
sender["member_name"] = $senderMember["member_name"]
5152
sender["image_id"] = $senderMember["image_id"]
5253
} else {
53-
if $Sender == 2 && $senderRole{
54+
if $Sender == 2 && $senderRole {
5455
// send from role
5556
sender["type"] = $Sender
5657
sender["role_id"] = $senderRole["id"]
@@ -86,18 +87,26 @@ contract NotificationsSend {
8687
$Icon = "icon-envelope"
8788
}
8889
if $MemberId != 0 {
89-
if !DBFind("@1keys").Where({"ecosystem": $EcosystemId, "id": $MemberId}).Row(){
90+
if !DBFind("@1keys").Where({"ecosystem": $EcosystemId, "id": $MemberId}).Row() {
9091
warning LangRes("@1key_not_found", "en")
9192
}
92-
$notify_type = 1 // is "member"
93+
$notify_type = 1
9394
} elif $Rid > 0 {
94-
$notify_type = 2 // is "role"
95+
$notify_type = 2
9596
if !DBFind("@1roles").Where({"ecosystem": $EcosystemId, "id": $Rid}).One("id") {
9697
warning $this_contract + ": " + LangRes("@1recipient_role_not_found", "en")
9798
}
9899
if !DBFind("@1roles_participants").Where({"ecosystem": $EcosystemId, "role->id": $Rid, "deleted": 0}).One("id") {
99100
warning $this_contract + ": " + LangRes("@1recipient_role_no_members", "en")
100101
}
102+
} elif $GroupId > 0 {
103+
$notify_type = 1
104+
if !DBFind("@1groups").Where({"ecosystem": $EcosystemId, "id": $GroupId}).One("id") {
105+
warning $this_contract + ": " + LangRes("@1recipient_group_not_found", "en")
106+
}
107+
if !DBFind("@1groups_participants").Where({"ecosystem": $EcosystemId, "groups_info->id": $GroupId, "deleted": 0}).One("id") {
108+
warning $this_contract + ": " + LangRes("@1recipient_group_no_members", "en")
109+
}
101110
} else {
102111
warning $this_contract + ": " + LangRes("@1notification_type_not_defined", "en")
103112
}
@@ -141,6 +150,17 @@ contract NotificationsSend {
141150
i = i + 1
142151
}
143152
}
153+
} elif $GroupId > 0 {
154+
var participants array
155+
participants = DBFind("@1groups_participants").Where({"ecosystem": $EcosystemId, "groups_info->id": $GroupId, "deleted": 0}).Columns("member->member_id")
156+
var i int
157+
while i < Len(participants) {
158+
var p map
159+
p = participants[i]
160+
sendNotify(getMemberInfo(Int(p["member.member_id"]), $EcosystemId))
161+
UpdateNotifications($EcosystemId, Int(p["member.member_id"]))
162+
i = i + 1
163+
}
144164
}
145165
}
146166
}

src/basic/pages/message_create.ptl

Lines changed: 84 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,108 @@
1-
SetVar(this_page,@1message_create)
1+
SetVar(this_page, @1message_create)
22

33
If(#EcosystemId# == ""){
44
SetVar(EcosystemId, #ecosystem_id#)
55
}
6-
76
If(#MemberId# == ""){
87
SetVar(MemberId, 0)
98
}
109

11-
If(Or(#MemberId#>0,#MemberId#<0)){
10+
If(#RoleId#){
11+
SetVar(broadcast_type_value, "role")
12+
}.ElseIf(#GroupId#){
13+
SetVar(broadcast_type_value, "group")
14+
}.Else{
15+
SetVar(broadcast_type_value, "member")
16+
}
17+
18+
If(Or(#MemberId# > 0, #MemberId# < 0)){
1219
SetVar(AddressMemberId, Address(#MemberId#))
1320
}.Else{
1421
SetVar(AddressMemberId,)
1522
}
1623

1724
Form(){
1825
Div(row){
19-
Div(col-md-3 mt text-right){
26+
Div(col-md-3 mt-sm text-right){
2027
Label(){
21-
Span(Body: LangRes(@1broadcast))
28+
Span(Body: LangRes(@1recipient)).(Class: text-danger, Body: *)
2229
}
2330
}
2431
Div(col-md-9 text-left){
25-
Input(Name: "broadcast", Type: "checkbox", Value: "false")
32+
Data(src_broadcast_type, "type,translation"){
33+
member,$@1member$
34+
role,$@1role$
35+
group,$@1group$
36+
}
37+
Select(Name: broadcast_type, Source: src_broadcast_type, NameColumn: translation, ValueColumn: type, Value: #broadcast_type_value#)
2638
}
2739
}
28-
Div(row){
40+
Div(row mt){
2941
Div(col-md-3 mt-sm text-right){
3042
Label(){
31-
Span(Body: LangRes(@1recipient)).(Class: text-danger, Body:*)
43+
Span(Body: LangRes(@1member)).(Class: text-danger, Body: *)
3244
}
3345
}
3446
Div(col-md-9 text-left){
35-
Input(Name: MemberId, Type:hidden, Value: #MemberId#)
47+
Input(Name: MemberId, Type: hidden, Value: #MemberId#)
3648
Div(input-group){
3749
Input(Name: m_name, Disabled: 1, Placeholder: "xxxx-xxxx-xxxx-xxxx-xxxx", Value: #AddressMemberId#)
3850
Div(input-group-btn){
39-
Button(Class: btn bg-gray-lighter fa fa-caret-down buttons, Page: @1select_wallet, PageParams:"back_page=#this_page#,back_header=$@1message_create$,EcosystemId=#EcosystemId#").Popup(Header: $@1member$, Width: "50")
40-
}.Style(
41-
.buttons {
42-
border: 1px solid #dde6e9;
43-
padding: 6px 16px;
44-
}
45-
)
51+
Button(Class: btn bg-gray-lighter fa fa-caret-down buttons, Page: @1select_wallet, PageParams: "back_page=#this_page#,back_header=$@1message_create$,EcosystemId=#EcosystemId#").Popup(Header: $@1member$, Width: "50")
52+
}
4653
}
47-
}.Show("broadcast=false")
54+
}
55+
}.Show("broadcast_type=member")
56+
Div(row mt){
57+
Div(col-md-3 mt-sm text-right){
58+
Label(){
59+
Span(Body: LangRes(@1role)).(Class: text-danger, Body: *)
60+
}
61+
}
4862
Div(col-md-9 text-left){
49-
DBFind(@1roles,source_roles).Where({"ecosystem": #ecosystem_id#, "deleted": 0}).Columns("id,role_name").Count(roles_count)
50-
If(#roles_count#>0){
51-
Select(Name: Rid, Source: source_roles, NameColumn: role_name, ValueColumn: id)
63+
If(RoleId == ""){
64+
SetVar(RoleId, 0)
65+
SetVar(RoleName, "")
5266
}.Else{
53-
Div(mt-sm){
54-
$@1roles$ $@1not_founded$
67+
Input(Name: Rid, Type: hidden, Value: #RoleId#)
68+
}
69+
Div(input-group){
70+
If(#RoleId# > 0){
71+
SetVar(Id, #RoleId#)
72+
DBFind(@1roles).WhereId(#RoleId#).Columns("role_name").Vars(r)
73+
}
74+
Input(Name: m_name, Disabled: 1, Value: #r_role_name#)
75+
Div(input-group-btn){
76+
Button(Class: btn bg-gray-lighter fa fa-caret-down buttons, Page: @1select_role, PageParams: "back_page=@1message_create,back_header=$@1message_create$,EcosystemId=#ecosystem_id#,Id=#vID#").Popup(Header: $@1role$, Width: "50")
5577
}
5678
}
57-
}.Show("broadcast=true")
58-
}
79+
}
80+
}.Show("broadcast_type=role")
81+
Div(row mt){
82+
Div(col-md-3 mt-sm text-right){
83+
Label(){
84+
Span(Body: LangRes(@1group)).(Class: text-danger, Body: *)
85+
}
86+
}
87+
Div(col-md-9 text-left){
88+
If(GroupId == ""){
89+
SetVar(GroupId, 0)
90+
SetVar(GroupName, "")
91+
}.Else{
92+
Input(Name: GroupId, Type: hidden, Value: #GroupId#)
93+
}
94+
Div(input-group){
95+
If(#GroupId# > 0){
96+
SetVar(Id, #GroupId#)
97+
DBFind(@1groups).WhereId(#GroupId#).Columns("group_name").Vars(g)
98+
}
99+
Input(Name: m_name, Disabled: 1, Value: #g_group_name#)
100+
Div(input-group-btn){
101+
Button(Class: btn bg-gray-lighter fa fa-caret-down buttons, Page: @1select_group, PageParams: "back_page=@1message_create,back_header=$@1message_create$,EcosystemId=#ecosystem_id#,Id=#vID#").Popup(Header: $@1group$, Width: "50")
102+
}
103+
}
104+
}
105+
}.Show("broadcast_type=group")
59106
Div(row mt){
60107
Div(col-md-3 mt-sm text-right){
61108
Label(){
@@ -84,12 +131,20 @@ Form(){
84131
Div(row mt){
85132
Div(col-md-12){
86133
Div(){
87-
Button(Body: LangRes(@1send), Class: btn btn-primary pull-right, Page: @1messages_list, Contract: @1NotificationsSend, Params: "Rid=0,CurrentRid=#role_id#")
88-
}.Show("broadcast=false")
134+
Button(Body: LangRes(@1send), Class: btn btn-primary pull-right, Page: @1messages_list, Contract: @1NotificationsSend, Params: "Rid=0,GroupId=0,CurrentRid=#role_id#")
135+
}.Show("broadcast_type=member")
89136
Div(){
90-
Button(Body: LangRes(@1send), Class: btn btn-primary pull-right, Page: @1messages_list, Contract: @1NotificationsSend, Params: "MemberId=0,CurrentRid=#role_id#,Closure=2")
91-
}.Show("broadcast=true")
137+
Button(Body: LangRes(@1send), Class: btn btn-primary pull-right, Page: @1messages_list, Contract: @1NotificationsSend, Params: "MemberId=0,GroupId=0,CurrentRid=#role_id#,Closure=2")
138+
}.Show("broadcast_type=role")
139+
Div(){
140+
Button(Body: LangRes(@1send), Class: btn btn-primary pull-right, Page: @1messages_list, Contract: @1NotificationsSend, Params: "MemberId=0,Rid=0,CurrentRid=#role_id#")
141+
}.Show("broadcast_type=group")
92142
Button(Body: LangRes(@1back), Class: btn btn-default pull-right, Page: @1messages_list)
93143
}
94144
}
95-
}
145+
}.Style(
146+
.buttons {
147+
border: 1px solid #dde6e9;
148+
padding: 6px 16px;
149+
}
150+
)

src/basic/pages/message_view.ptl

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,35 @@
1-
If(#notific_id#>0){
1+
If(#notific_id# > 0){
22
DBFind(@1notifications).Where({"ecosystem": #ecosystem_id#, "id": #notific_id#}).Columns("id,sender->member_id,sender->member_name,sender->image_id,recipient->member_id,recipient->member_name,notification->body,notification->header,page_params->thread,date_created,closed").Vars(message)
33
DBFind(@1members).Where({"ecosystem": #ecosystem_id#, "id": #message_sender_member_id#}).Vars(highlighted)
44
If(#highlighted_id#){
5-
SetVar(message_sender_member_name,#highlighted_member_name#)
6-
SetVar(message_sender_image_id,#highlighted_image_id#)
5+
SetVar(message_sender_member_name, #highlighted_member_name#)
6+
SetVar(message_sender_image_id, #highlighted_image_id#)
77
}
88

9-
If(#message_page_params_thread#>0){
10-
SetVar(thread,#message_page_params_thread#)
9+
If(#message_page_params_thread# > 0){
10+
SetVar(thread, #message_page_params_thread#)
1111
DBFind(@1notifications,src_thread).Where({"ecosystem": #ecosystem_id#, "page_params->thread": #message_page_params_thread#}).Order("id").Count("thread_quantity").Columns("id,sender->member_id,sender->member_name,sender->image_id,notification->body,date_created")
1212
DBFind(@1notifications).Where({"ecosystem": #ecosystem_id#, "id": #message_page_params_thread#}).Columns("id,sender->member_id,sender->member_name,sender->image_id,recipient->member_id,notification->body,date_created").Vars(init_message)
1313
}.Else{
14-
SetVar(thread,#message_id#)
14+
SetVar(thread, #message_id#)
1515
DBFind(@1notifications,src_thread).Where({"ecosystem": #ecosystem_id#, "page_params->thread": #message_id#}).Order("id").Count("thread_quantity").Columns("id,sender->member_id,sender->member_name,sender->image_id,notification->body,date_created")
1616
DBFind(@1notifications).Where({"ecosystem": #ecosystem_id#, "id": #message_id#}).Columns("id,sender->member_id,sender->member_name,sender->image_id,recipient->member_id,notification->body,date_created").Vars(init_message)
1717
}
1818
DBFind(@1members).Where({"ecosystem": #ecosystem_id#, "id": #init_message_sender_member_id#}).Vars(starter)
1919
If(#starter_id#){
20-
SetVar(init_message_sender_member_name,#starter_member_name#)
21-
SetVar(init_message_sender_image_id,#starter_image_id#)
20+
SetVar(init_message_sender_member_name, #starter_member_name#)
21+
SetVar(init_message_sender_image_id, #starter_image_id#)
2222
}
2323

24-
If(#init_message_sender_member_id#!=#key_id#){
25-
SetVar(reply_recipient,#init_message_sender_member_id#)
24+
If(#init_message_sender_member_id# != #key_id#){
25+
SetVar(reply_recipient, #init_message_sender_member_id#)
2626
}.Else{
27-
SetVar(reply_recipient,#init_message_recipient_member_id#)
27+
SetVar(reply_recipient, #init_message_recipient_member_id#)
2828
}
29-
If(#message_notification_header#==""){
30-
SetVar(thread_name,$@1message_subject_empty$)
29+
If(#message_notification_header# == ""){
30+
SetVar(thread_name, $@1message_subject_empty$)
3131
}.Else{
32-
SetVar(thread_name,#message_notification_header#)
32+
SetVar(thread_name, #message_notification_header#)
3333
}
3434

3535
SetTitle($@1messenger$)
@@ -47,7 +47,7 @@ If(#notific_id#>0){
4747
Div(col-lg-6 col-lg-offset-3 col-md-8 col-md-offset-2 col-sm-10 col-sm-offset-1){
4848
Form(panel panel-primary){
4949
Div(text-center pt){
50-
If(#message_sender_member_id#==#key_id#){
50+
If(#message_sender_member_id# == #key_id#){
5151
Span(Class: h4 text-bold, Body: LangRes(@1message_from_you))
5252
}.Else{
5353
Span(Class: h4 text-bold, Body: LangRes(@1message_from) #message_sender_member_name#)
@@ -57,7 +57,7 @@ If(#notific_id#>0){
5757
Div(list-group-item wrapper-block){
5858
Div(avatar-block text-center){
5959
LinkPage(Page: @1profile_view, PageParams: "v_key_id=#message_sender_member_id#"){
60-
If(#message_sender_image_id#>0){
60+
If(#message_sender_image_id# > 0){
6161
Image(Src: Binary().ById(#message_sender_image_id#), Class: img-circle avatar)
6262
}.Else{
6363
Span(Class: fa icon-user fa-3x)
@@ -75,7 +75,7 @@ If(#notific_id#>0){
7575
Div(row mt-lg){
7676
Div(col-md-12 text-left){
7777
Label(){
78-
If(#message_sender_member_id#!=#key_id#){
78+
If(#message_sender_member_id# != #key_id#){
7979
Span(Body: LangRes(@1reply_text))
8080
}.Else{
8181
Span(Body: LangRes(@1message_text))
@@ -91,12 +91,12 @@ If(#notific_id#>0){
9191
Input(Type: textarea, Name: Body, Value: "", Placeholder: $@1message_type_here$).Style(resize: vertical; min-height: 6em;)
9292
}
9393
}
94-
If(#message_sender_member_id#==#key_id#){
94+
If(#message_sender_member_id# == #key_id#){
9595
SetVar(send_button, $@1send$)
9696
}.Else{
9797
SetVar(send_button, $@1reply$)
9898
}
99-
If(And(#message_closed#==0,Or(#message_sender_member_id#!=#key_id#,#message_recipient_member_id#==#key_id#))){
99+
If(And(#message_closed# == 0, Or(#message_sender_member_id# != #key_id#, #message_recipient_member_id# == #key_id#))){
100100
Div(mt text-right){
101101
Button(Body: LangRes(@1mark_read), Class: btn btn-default, Contract: @1NotificationsClose, Params: "NotificId=#notific_id#", Page: @1messages_list)
102102
Button(Body: #send_button#, Class: btn btn-primary, Contract: @1NotificationsSend, Params: "CurrentRid=#role_id#", Page: @1message_view, PageParams: "notific_id=#message_id#").CompositeContract(@1NotificationsClose, [{"NotificId": #notific_id#}])
@@ -110,7 +110,7 @@ If(#notific_id#>0){
110110
}
111111
}
112112
}
113-
If(#thread_quantity#>0){
113+
If(#thread_quantity# > 0){
114114
Div(row){
115115
Div(col-lg-6 col-lg-offset-3 col-md-8 col-md-offset-2 col-sm-10 col-sm-offset-1){
116116
Div(list-group-item text-center){
@@ -119,7 +119,7 @@ If(#notific_id#>0){
119119
Div(list-group-item wrapper-block){
120120
Div(avatar-block text-center){
121121
LinkPage(Page: @1profile_view, PageParams: "v_key_id=#init_message_sender_member_id#"){
122-
If(#init_message_sender_image_id#>0){
122+
If(#init_message_sender_image_id# > 0){
123123
Image(Src: Binary().ById(#init_message_sender_image_id#), Class: img-circle avatar)
124124
}.Else{
125125
Span(Class: fa icon-user fa-3x)
@@ -139,12 +139,12 @@ If(#notific_id#>0){
139139
Div(list-group-item wrapper-block){
140140
Div(avatar-block text-center){
141141
DBFind(@1members).Where({"ecosystem": #ecosystem_id#, "id": #sender.member_id#}).Vars(thread_message)
142-
If(#thread_message_id#==""){
143-
SetVar(thread_message_member_name,#sender.member_name#)
144-
SetVar(thread_message_image_id,#sender.image_id#)
142+
If(#thread_message_id# == ""){
143+
SetVar(thread_message_member_name, #sender.member_name#)
144+
SetVar(thread_message_image_id, #sender.image_id#)
145145
}
146146
LinkPage(Page: @1profile_view, PageParams: "v_key_id=#sender.member_id#"){
147-
If(#thread_message_image_id#>0){
147+
If(#thread_message_image_id# > 0){
148148
Image(Src: Binary().ById(#thread_message_image_id#), Class: img-circle avatar)
149149
}.Else{
150150
Span(Class: fa icon-user fa-3x)
@@ -156,8 +156,8 @@ If(#notific_id#>0){
156156
Span(Class: h5, Body: #notification.body#)
157157
}
158158
Div(datetime-block text-muted){
159-
Span(Class: badge mr, Body: Calculate(#src_thread_index#+1))
160-
Span(Class: mb-sm h6, Body: DateTime(#date_created#,HH:MI DD.MM.YYYY))
159+
Span(Class: badge mr, Body: Calculate(#src_thread_index# + 1))
160+
Span(Class: mb-sm h6, Body: DateTime(#date_created#, HH:MI DD.MM.YYYY))
161161
}
162162
}
163163
}

0 commit comments

Comments
 (0)