WhatsApp Chat WP - Version 4.4.9

Version Description

Hello! We've recently acquired this plugin and included tons of new features.

Download this release

Release Info

Developer quadlayers
Plugin Icon 128x128 WhatsApp Chat WP
Version 4.4.9
Comparing to
See all releases

Code changes from version 4.4.8 to 4.4.9

assets/less/animations.less DELETED
@@ -1,369 +0,0 @@
1
- #qlwapp {
2
- display: none;
3
-
4
-
5
- &.qlwapp-show {
6
- .qlwapp-box {
7
- visibility: visible;
8
- opacity: 1;
9
- transform: translateY(0) scale(1);
10
- display: block;
11
- }
12
- }
13
-
14
- &.qlwapp-transition {
15
- .qlwapp-box {
16
- visibility: visible;
17
- display: block;
18
- }
19
- }
20
-
21
- &.qlwapp-bubble {
22
-
23
- &.qlwapp-show {
24
- .qlwapp-toggle {
25
-
26
- .qlwapp-icon {
27
- transform: scale(0,0);
28
- opacity: 0;
29
- }
30
-
31
- .qlwapp-close {
32
- transform: scale(1,1);
33
- opacity: 1;
34
- }
35
- }
36
- }
37
-
38
- .qlwapp-toggle {
39
-
40
- .qlwapp-close {
41
- transform: scale(0,0);
42
- opacity: 0;
43
- }
44
-
45
- .qlwapp-icon {
46
- transform: scale(1,1);
47
- opacity: 1;
48
- }
49
-
50
- .qlwapp-icon,
51
- .qlwapp-close {
52
- transition: transform 300ms cubic-bezier(0.215, 0.61, 0.355, 1), opacity 300ms ease-in;
53
- }
54
-
55
- }
56
- }
57
-
58
- .qlwapp-box {
59
- display: none;
60
- opacity: 0;
61
- visibility: hidden;
62
- transform: translateY(50px);
63
- transition: transform 300ms cubic-bezier(0.215, 0.61, 0.355, 1), opacity 300ms ease-in;
64
-
65
- @media (min-width: 430px) {
66
- transform: translateY(50px) scale(0.9);
67
- }
68
-
69
- // Carousel
70
- // ---------------------------------------------------------------------------
71
-
72
- .qlwapp-carousel {
73
- display: flex;
74
- width: 200%;
75
- height: 100%;
76
- //overflow: hidden;
77
-
78
- .qlwapp-slide {
79
- width: 50%;
80
- transition: max-height 500ms cubic-bezier(0.215, 0.61, 0.355, 1) 1000ms, transform 300ms cubic-bezier(0.215, 0.61, 0.355, 1) 500ms, opacity 500ms ease-in 500ms;
81
- height: 100%;
82
- overflow: hidden;
83
- //&:last-child {
84
- //max-height: 94px;
85
- //}
86
- }
87
- }
88
-
89
- .qlwapp-header {
90
-
91
- .qlwapp-slide {
92
- max-height: 300px;
93
- }
94
-
95
- .qlwapp-name,
96
- .qlwapp-label,
97
- .qlwapp-avatar {
98
- opacity: 0;
99
- transition: transform cubic-bezier(0.215, 0.61, 0.355, 1) 0.3s, opacity ease-in 0.3s;
100
- }
101
-
102
- .qlwapp-name,
103
- .qlwapp-label {
104
- transform: translateX(56px);
105
- }
106
-
107
- .qlwapp-avatar {
108
- transform: scale(0.5);
109
- }
110
-
111
- .qlwapp-name {
112
- transition-delay: 800ms
113
- }
114
-
115
- .qlwapp-label {
116
- transition-delay: 850ms
117
- }
118
-
119
- .qlwapp-avatar {
120
- transition-delay: 900ms
121
- }
122
-
123
- }
124
-
125
- .qlwapp-footer,
126
- .qlwapp-response,
127
- .qlwapp-previous,
128
- .qlwapp-message,
129
- .qlwapp-user {
130
- transition: transform cubic-bezier(0.215, 0.61, 0.355, 1) 600ms, opacity ease-in 200ms;
131
- }
132
-
133
- .qlwapp-response,
134
- .qlwapp-previous,
135
- .qlwapp-user {
136
- opacity: 0;
137
- }
138
-
139
- .qlwapp-response {
140
- pointer-events: none;
141
- }
142
-
143
- .qlwapp-previous {
144
- transform: translateX(56px);
145
- }
146
-
147
- .qlwapp-user {
148
- transform: translateY(56px);
149
- }
150
-
151
- .qlwapp-close {
152
- transition: opacity 300ms cubic-bezier(0.215, 0.61, 0.355, 1);
153
- }
154
-
155
- .qlwapp-description {
156
- transition: transform 600ms cubic-bezier(0.215, 0.61, 0.355, 1), opacity 900ms cubic-bezier(0.215, 0.61, 0.355, 1);
157
- }
158
-
159
- .qlwapp-account {
160
- transition: transform 600ms cubic-bezier(0.215, 0.61, 0.355, 1), opacity 150ms ease-in;
161
- }
162
- .qlwapp-previous {
163
- transition-delay: 800ms
164
- }
165
-
166
- .qlwapp-message {
167
- transition-delay: 900ms
168
- }
169
-
170
- .qlwapp-close,
171
- .qlwapp-description {
172
- transition-delay: 900ms
173
- }
174
-
175
- .qlwapp-user {
176
- transition-delay: 200ms
177
- }
178
-
179
- .qlwapp-account {
180
-
181
- &:nth-of-type(6) {
182
- transition-delay: 600ms
183
- }
184
-
185
- &:nth-of-type(5) {
186
- transition-delay: 500ms
187
- }
188
-
189
- &:nth-of-type(4) {
190
- transition-delay: 400ms
191
- }
192
-
193
- &:nth-of-type(3) {
194
- transition-delay: 300ms
195
- }
196
-
197
- &:nth-of-type(2) {
198
- transition-delay: 200ms
199
- }
200
-
201
- &:nth-of-type(1) {
202
- transition-delay: 100ms
203
- }
204
-
205
- }
206
-
207
- // Premium
208
- // -------------------------------------------------------------------------
209
- .qlwapp-slide {
210
- .qlwapp-message {
211
- opacity: 0;
212
- transform: translateY(-56px);
213
- }
214
-
215
- .qlwapp-box {
216
- .qlwapp-account {
217
- &:hover {
218
- background-color: #fafafa;
219
- }
220
- }
221
-
222
- }
223
- }
224
-
225
- // Response
226
- // -------------------------------------------------------------------------
227
-
228
- &.response {
229
-
230
- .qlwapp-carousel {
231
- .qlwapp-slide {
232
- transform: translateX(-100%);
233
- }
234
- }
235
-
236
- .qlwapp-body {
237
- .qlwapp-carousel {
238
- overflow: hidden;
239
- max-height: 134px!important;
240
- min-height: 122px;
241
- }
242
- }
243
-
244
- // Out
245
- // -----------------------------------------------------------------------
246
-
247
- .qlwapp-close {
248
- transition-delay: 0ms;
249
- }
250
-
251
- .qlwapp-close,
252
- .qlwapp-footer,
253
- .qlwapp-description,
254
- .qlwapp-account {
255
- opacity: 0;
256
- }
257
-
258
- .qlwapp-account {
259
- transform: translateY(-33.333%);
260
- border-top-color: transparent!important;
261
- }
262
-
263
- // In
264
- // -----------------------------------------------------------------------
265
-
266
- //.qlwapp-chat {
267
- // overflow: hidden;
268
- //}
269
-
270
- .qlwapp-user {
271
- display: block;
272
- //opacity: 0;
273
- }
274
-
275
- .qlwapp-message,
276
- .qlwapp-previous,
277
- .qlwapp-response {
278
- opacity: 1;
279
- }
280
-
281
- .qlwapp-response {
282
- pointer-events: all;
283
- }
284
-
285
- .qlwapp-message,
286
- .qlwapp-previous {
287
- transform: translate(0);
288
- }
289
-
290
- .qlwapp-header {
291
-
292
- .qlwapp-slide {
293
- max-height: 84px;
294
- }
295
-
296
- .qlwapp-name,
297
- .qlwapp-avatar {
298
- opacity: 1;
299
- }
300
-
301
- .qlwapp-label {
302
- opacity: 0.5;
303
- }
304
-
305
- .qlwapp-name,
306
- .qlwapp-label {
307
- transform: translateX(0);
308
- }
309
-
310
- .qlwapp-avatar {
311
- transform: scale(1);
312
- }
313
-
314
- }
315
-
316
- &.opening {
317
-
318
- .qlwapp-footer,
319
- .qlwapp-response,
320
- .qlwapp-close,
321
- .qlwapp-previous,
322
- .qlwapp-description,
323
- .qlwapp-header .qlwapp-name,
324
- .qlwapp-header .qlwapp-label {
325
- visibility: visible;
326
- }
327
- }
328
-
329
- }
330
-
331
- &.texting {
332
-
333
- .qlwapp-body {
334
- overflow-y: auto;
335
- }
336
-
337
- .qlwapp-user {
338
- opacity: 1;
339
- transform: translate(0);
340
- }
341
-
342
- }
343
-
344
- &.closing {
345
-
346
- .qlwapp-carousel {
347
-
348
- .qlwapp-slide {
349
- //transition-delay: 0ms;
350
- //transition: max-height 500ms cubic-bezier(0.215, 0.61, 0.355, 1) 1000ms, transform 300ms cubic-bezier(0.215, 0.61, 0.355, 1) 0ms, opacity 500ms ease-in 500ms;
351
- }
352
- }
353
-
354
- .qlwapp-previous {
355
- transition-delay: 0ms;
356
- transform: translateX(-24px);
357
- opacity: 0;
358
- transition: transform cubic-bezier(0.215, 0.61, 0.355, 1) 300ms, opacity ease-out 200ms;
359
- }
360
-
361
- .qlwapp-description {
362
- opacity: 0;
363
- }
364
-
365
- }
366
-
367
- }
368
- }
369
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/less/colors.less DELETED
@@ -1,53 +0,0 @@
1
- #qlwapp {
2
- .qlwapp-previous,
3
- .qlwapp-close,
4
- .qlwapp-toggle,
5
- .qlwapp-box .qlwapp-header,
6
- .qlwapp-box .qlwapp-contact,
7
- .qlwapp-box .qlwapp-user {
8
- color: #ffffff;
9
- }
10
-
11
- &.qlwapp-bubble {
12
- .qlwapp-toggle .qlwapp-text {
13
- color: #303030;
14
- }
15
- }
16
-
17
- .qlwapp-box,
18
- .qlwapp-box:before {
19
- background-color: #fff;
20
- }
21
-
22
- .qlwapp-box .qlwapp-account {
23
- background-color: #fff;
24
-
25
- &:not(:first-child) {
26
- border-top: 1px solid #f5f5f5;
27
- }
28
- }
29
-
30
- .qlwapp-box .qlwapp-avatar .qlwapp-avatar-container {
31
- background-color: #eee;
32
- }
33
-
34
- .qlwapp-box .qlwapp-message,
35
- .qlwapp-box .qlwapp-message:before {
36
- background-color: #eee;
37
- }
38
-
39
- .qlwapp-box .qlwapp-footer,
40
- .qlwapp-box .qlwapp-response {
41
- color: #303030;
42
- background-color: #fff;
43
- border-top: 1px solid #e6e6e6;
44
- }
45
-
46
- .qlwapp-toggle,
47
- .qlwapp-box .qlwapp-header,
48
- .qlwapp-box .qlwapp-user,
49
- .qlwapp-box .qlwapp-user:before {
50
- background-color: #303030;
51
- }
52
-
53
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/less/qlwapp-admin.less DELETED
@@ -1,125 +0,0 @@
1
-
2
- #qlwapp_modal .attachments-browser .attachments {
3
- top: 0;
4
- left: 0;
5
- right: 0;
6
- }
7
-
8
- #qlwapp_modal .wp-core-ui .attachment .thumbnail,
9
- #qlwapp_modal .wp-core-ui .attachment-info .thumbnail {
10
- vertical-align: middle;
11
- text-align: center;
12
- }
13
-
14
- #qlwapp_modal .wp-core-ui .attachment .thumbnail:before,
15
- #qlwapp_modal .wp-core-ui .attachment-info .thumbnail:before {
16
- content: '';
17
- display: inline-block;
18
- width: 0px;
19
- height: 100%;
20
- vertical-align: middle;
21
- }
22
-
23
- #qlwapp_modal .wp-core-ui .attachment .thumbnail>i,
24
- #qlwapp_modal .wp-core-ui .attachment-info .thumbnail>i {
25
- text-align: center;
26
- font-size: 3vw;
27
- display: inline-block;
28
- vertical-align: middle;
29
- height: auto;
30
- width: auto;
31
- }
32
-
33
- #qlwapp_modal .wp-core-ui .attachment-info .thumbnail {
34
- width: 60px;
35
- height: 60px;
36
- background-color: #fff;
37
- }
38
-
39
- #qlwapp_modal .wp-core-ui .attachment-info .thumbnail>i {
40
- font-size: 2em;
41
- position: relative;
42
- left: -1px;
43
- }
44
-
45
- #qlwapp_modal .wp-core-ui .attachment-info .qlwapp-color-picker .container {
46
- box-sizing: border-box;
47
- width: 100%;
48
- border-bottom: 1px solid #ddd;
49
- padding: 11px 0;
50
- }
51
-
52
- #qlwapp_modal .wp-core-ui .attachment-info .qlwapp-color-picker #qlwapp-input-color {
53
- box-sizing: border-box;
54
- margin: 1px;
55
- width: 65%;
56
- float: right;
57
- }
58
-
59
- #qlwapp_modal .wp-core-ui .attachment-info .qlwapp-color-picker .wp-picker-container .wp-color-result {
60
- width: 100%;
61
- margin-top: 5px!important;
62
- }
63
-
64
- #qlwapp_modal .wp-core-ui .attachment-info .qlwapp-color-picker .wp-picker-container .wp-color-result-text {
65
- z-index: 1;
66
- position: relative;
67
- }
68
-
69
- .about-wrap .form-table td img.qlwapp-avatar {
70
- width: 50px;
71
- height: 50px;
72
- }
73
-
74
- .qlwrap .nav-tab i {
75
- line-height: 26px;
76
- }
77
-
78
- .qlwrap .form-table td {
79
- vertical-align: middle;
80
- }
81
-
82
- .qlwrap .qlwapp-input,
83
- .qlwrap .qlwapp-select2 {
84
- width: 350px;
85
- max-width: 100%;
86
- }
87
-
88
- .qlwrap .qlwapp-input {
89
- margin: 0;
90
- padding: 6px;
91
- box-sizing: border-box;
92
- vertical-align: top;
93
- }
94
-
95
- #qlwapp_modal{
96
- &.qlwapp-modal-contact{
97
- max-width:890px;
98
- max-height:800px;
99
- margin:auto;
100
- table{
101
- width: 100%;
102
- padding: 15px;
103
- &:not(:last-child){
104
- border-bottom: 1px solid #ddd;
105
- }
106
- th{
107
- width: 60px
108
- }
109
- td{
110
- max-width: calc(50%-60px);
111
- }
112
- }
113
- }
114
- .qlwapp-modal-contact-content{
115
- bottom: 61px;
116
-
117
-
118
- }
119
-
120
-
121
- &.qlwapp-modal-icons{
122
-
123
- }
124
- }
125
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/less/qlwapp.less DELETED
@@ -1,844 +0,0 @@
1
- // Fix backward clicks
2
- // #qlwapp pointer-events:none
3
- // .qlwapp-toggle pointer-events:all
4
- // .qlwapp-box pointer-events:all
5
-
6
- @font-face {
7
- font-family: 'qlwapp-whatsapp';
8
- src: url(data:application/x-font-woff;charset=utf-8;base64,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) format('woff');
9
- font-weight: normal;
10
- font-style: normal;
11
- }
12
-
13
- .qlwapp-whatsapp-icon {
14
- font-family: 'qlwapp-whatsapp' !important;
15
- speak: none;
16
- font-style: normal;
17
- font-weight: normal;
18
- font-variant: normal;
19
- text-transform: none;
20
- line-height: 1;
21
- -webkit-font-smoothing: antialiased;
22
- -moz-osx-font-smoothing: grayscale;
23
- }
24
-
25
- .qlwapp-whatsapp-icon:before {
26
- content: "\e900";
27
- }
28
-
29
- #qlwapp {
30
- pointer-events: none;
31
- box-sizing: border-box;
32
-
33
- @media (min-width: 430px) {
34
- width: 430px;
35
- }
36
-
37
-
38
- * {
39
- box-sizing: border-box;
40
- }
41
-
42
- // Ready
43
- // ---------------------------------------------------------------------------
44
- &.qlwapp-js-ready {
45
- display: block;
46
- }
47
-
48
- &.qlwapp-hide,
49
- &.qlwapp-desktop.mobile,
50
- &.qlwapp-mobile.desktop {
51
- display: none;
52
- }
53
-
54
- // Status
55
- // ---------------------------------------------------------------------------
56
- .qlwapp-readonly,
57
- &.qlwapp-readonly {
58
- pointer-events: none!important;
59
- opacity: 0.5!important;
60
- }
61
-
62
- .qlwapp-disabled,
63
- &.qlwapp-disabled {
64
- display: none;
65
- visibility: hidden;
66
- }
67
-
68
- // Position
69
- // ---------------------------------------------------------------------------
70
- &.qlwapp-middle-left,
71
- &.qlwapp-bottom-left,
72
- &.qlwapp-middle-right,
73
- &.qlwapp-bottom-right {
74
- position: fixed;
75
- z-index: 9999999;
76
- }
77
-
78
- // Left
79
- // ---------------------------------------------------------------------------
80
-
81
- &.qlwapp-middle-left,
82
- &.qlwapp-bottom-left {
83
- right: auto;
84
- left: 0;
85
-
86
- .qlwapp-toggle {
87
- .qlwapp-time {
88
- left: 0;
89
- right: auto;
90
- }
91
- }
92
-
93
- &.qlwapp-bubble,
94
- &.qlwapp-button {
95
- .qlwapp-developer,
96
- .qlwapp-toggle {
97
- margin-left: 20px;
98
- }
99
- }
100
-
101
- &.qlwapp-bubble {
102
- .qlwapp-toggle {
103
- .qlwapp-text {
104
- right: auto;
105
- left: 60px;
106
- }
107
- }
108
- }
109
-
110
- .qlwapp-box {
111
- &:before {
112
- right: auto;
113
- left: 20px;
114
- }
115
- }
116
-
117
- }
118
-
119
- // Right
120
- // ---------------------------------------------------------------------------
121
-
122
- &.qlwapp-middle-right,
123
- &.qlwapp-bottom-right {
124
- left: auto;
125
- right: 0;
126
-
127
- .qlwapp-toggle {
128
- .qlwapp-time {
129
- left: auto;
130
- right: 0;
131
- }
132
- }
133
-
134
- &.qlwapp-bubble,
135
- &.qlwapp-button {
136
- .qlwapp-developer,
137
- .qlwapp-toggle {
138
- margin-right: 20px;
139
- }
140
- }
141
-
142
- }
143
-
144
- // Middle
145
- // ---------------------------------------------------------------------------
146
-
147
- &.qlwapp-middle-left,
148
- &.qlwapp-middle-right {
149
- top: 40%;
150
- bottom: auto;
151
- .qlwapp-developer {
152
- padding: 0 24px;
153
- }
154
- }
155
-
156
- &.qlwapp-middle-left {
157
- &.qlwapp-button {
158
- .qlwapp-developer,
159
- .qlwapp-toggle {
160
- margin-left: -48px;
161
- padding-left: 60px;
162
- }
163
- }
164
- }
165
-
166
- &.qlwapp-middle-right {
167
- &.qlwapp-button {
168
- .qlwapp-developer,
169
- .qlwapp-toggle {
170
- margin-right: -48px;
171
- padding-right: 60px;
172
- }
173
- }
174
- }
175
-
176
- // Bottom
177
- // ---------------------------------------------------------------------------
178
-
179
- &.qlwapp-bottom-left,
180
- &.qlwapp-bottom-right {
181
- top: auto;
182
- bottom: 0;
183
- }
184
-
185
- /*&.qlwapp-middle-left {
186
- &.qlwapp-button {
187
- .qlwapp-developer,
188
- .qlwapp-toggle {
189
- margin-left: -48px;
190
- padding-left: 60px;
191
- }
192
- }
193
- }
194
-
195
- &.qlwapp-middle-right {
196
- &.qlwapp-button {
197
- .qlwapp-developer,
198
- .qlwapp-toggle {
199
- margin-right: -48px;
200
- padding-right: 60px;
201
- }
202
-
203
- }
204
- }
205
-
206
- &.qlwapp-bottom-left {
207
- &.qlwapp-bubble,
208
- &.qlwapp-button {
209
- .qlwapp-developer,
210
- .qlwapp-toggle {
211
- margin-left: 20px;
212
- }
213
- }
214
-
215
- &.qlwapp-bubble {
216
- .qlwapp-toggle {
217
- .qlwapp-text {
218
- right: auto;
219
- left: 60px;
220
- }
221
- }
222
- }
223
-
224
- .qlwapp-box {
225
- &:before {
226
- right: auto;
227
- left: 20px;
228
- }
229
- }
230
-
231
- }
232
-
233
- &.qlwapp-bottom-right {
234
- &.qlwapp-bubble,
235
- &.qlwapp-button {
236
-
237
- .qlwapp-developer,
238
- .qlwapp-toggle {
239
- margin-right: 20px;
240
- }
241
- }
242
- }*/
243
-
244
- &.qlwapp-rounded {
245
- &.qlwapp-bubble {
246
- .qlwapp-toggle {
247
- border-radius: 50%;
248
- }
249
- }
250
- &.qlwapp-button {
251
- .qlwapp-toggle {
252
- border-radius: 50px;
253
- }
254
- }
255
-
256
- .qlwapp-box {
257
- @media (min-width: 430px) {
258
- border-radius: 8px;
259
- }
260
-
261
- .qlwapp-user,
262
- .qlwapp-message {
263
- border-radius: 4px;
264
- }
265
-
266
- }
267
- }
268
-
269
- p:last-child {
270
- margin: 0;
271
- }
272
-
273
- time {
274
- opacity: 0.8;
275
- font-style: italic;
276
- font-size: 10px;
277
- }
278
-
279
- // General
280
- // ---------------------------------------------------------------------------
281
-
282
- .qlwapp-container {
283
- display: flex;
284
- flex-direction: column;
285
- }
286
-
287
- .qlwapp-clearfix {
288
- &:before,
289
- &:after {
290
- content: '';
291
- display: block;
292
- clear: both;
293
- }
294
- }
295
-
296
- .qlwapp-previous,
297
- .qlwapp-close {
298
- display: block;
299
- opacity: 0.8;
300
- font-style: unset;
301
- font-size: 24px;
302
- font-weight: bold;
303
- width: 24px;
304
- height: 24px;
305
- cursor: pointer;
306
- text-align: center;
307
- line-height: 24px;
308
- z-index: 1;
309
- }
310
-
311
- .qlwapp-previous {
312
- width: 16px;
313
- height: 36px;
314
- cursor: pointer;
315
- text-align: center;
316
- line-height: 36px;
317
- margin-right: auto;
318
- }
319
-
320
- .qlwapp-developer {
321
- font-size: 8px;
322
- top: -20px;
323
- position: relative;
324
- }
325
-
326
- .qlwapp-developer,
327
- .qlwapp-toggle {
328
- display: inline-flex;
329
- align-items: center;
330
- justify-content: center;
331
- margin-left: auto;
332
- margin-right: auto;
333
- }
334
-
335
- .qlwapp-toggle {
336
- pointer-events: all;
337
- cursor: pointer;
338
- box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.06), 0 2px 32px 0 rgba(0, 0, 0, 0.16);
339
- margin-top: 24px;
340
- margin-bottom: 24px;
341
- position: relative;
342
- text-decoration: none;
343
-
344
- &,
345
- &:active,
346
- &:focus,
347
- &:hover {
348
- outline: none;
349
- text-decoration: none;
350
- }
351
-
352
- .qlwapp-time {
353
- position: absolute;
354
- bottom: -2em;
355
- color: initial;
356
- font-size: 10px;
357
- display: inline-block;
358
- top: auto;
359
- width: 120px;
360
- //right: 0;
361
- }
362
-
363
- }
364
-
365
- .qlwapp-avatar {
366
- .qlwapp-avatar-container {
367
- overflow: hidden;
368
- border-radius: 50%;
369
- width: inherit;
370
- height: inherit;
371
- img {
372
- width: 100%;
373
- height: auto;
374
- }
375
- }
376
- }
377
-
378
- //.qlwapp-readonly {
379
- // pointer-events: none;
380
- // opacity: 0.85;
381
- //}
382
- // Bubble
383
- // ---------------------------------------------------------------------------
384
- &.qlwapp-bubble {
385
-
386
- .qlwapp-toggle {
387
- width: 60px;
388
- height: 60px;
389
-
390
- .qlwapp-icon,
391
- .qlwapp-close {
392
- position: absolute;
393
- display: block;
394
- pointer-events: none;
395
- font-size: 24px;
396
- }
397
-
398
- .qlwapp-text {
399
- position: absolute;
400
- right: 60px;
401
- height: 60px;
402
- margin: 0 24px;
403
- display: flex;
404
- align-items: center;
405
- justify-content: flex-end;
406
- font-weight: bold;
407
- white-space: pre;
408
- }
409
- }
410
- }
411
-
412
- // Button
413
- // ---------------------------------------------------------------------------
414
- &.qlwapp-button {
415
-
416
- .qlwapp-toggle {
417
- height: 40px;
418
- white-space: nowrap;
419
- padding: 12px 24px;
420
-
421
- .qlwapp-icon {
422
- margin: 0 12px 0 0;
423
- }
424
-
425
- .qlwapp-close {
426
- display: none;
427
- }
428
-
429
- }
430
- }
431
-
432
- // Box
433
- // ---------------------------------------------------------------------------
434
- .qlwapp-box {
435
- pointer-events: all;
436
- padding-bottom: 56px;
437
- position: fixed;
438
- top: auto;
439
- bottom: 0;
440
- left: 0;
441
- right: 0;
442
- z-index: 99999;
443
- box-shadow: 0px 5px 40px 5px rgba(0,0,0,0.5);
444
-
445
- // Desktop
446
- // ---------------------------------------------------------------------------
447
-
448
- @media (min-width: 430px) {
449
- position: relative;
450
- top: auto;
451
- bottom: auto;
452
- left: auto;
453
- right: auto;
454
- box-shadow: 0 8px 25px -5px rgba(45, 62, 79, .15);
455
- margin-top: 24px;
456
- margin-left: 24px;
457
- margin-right: 24px;
458
- margin-bottom: 12px;
459
-
460
- &:before {
461
- content: '';
462
- position: absolute;
463
- bottom: -6px;
464
- right: 24px;
465
- width: 13px;
466
- height: 13px;
467
- transform: rotate(45deg);
468
- }
469
-
470
- .qlwapp-header {
471
- border-top-left-radius: inherit;
472
- border-top-right-radius: inherit;
473
- }
474
-
475
- .qlwapp-footer,
476
- .qlwapp-response {
477
- border-bottom-left-radius: inherit;
478
- border-bottom-right-radius: inherit;
479
- }
480
-
481
- }
482
-
483
- // Header
484
- // -------------------------------------------------------------------------
485
-
486
- .qlwapp-header {
487
- position: relative;
488
- overflow: hidden;
489
-
490
- &:before {
491
- content: '';
492
- position: absolute;
493
- top: 0;
494
- bottom: 0;
495
- left: 0;
496
- right: 0;
497
- background: linear-gradient(135deg, transparent 0%, rgba(0,0,0,0.3) 100%);
498
- }
499
-
500
- .qlwapp-close {
501
- position: absolute;
502
- top: 12px;
503
- right: 12px;
504
-
505
- @media (min-width: 430px) {
506
- position: absolute;
507
- top: 7px;
508
- right: 7px;
509
- font-size: 16px;
510
- }
511
- }
512
-
513
- .qlwapp-description {
514
- position: relative;
515
- }
516
-
517
- }
518
-
519
- .qlwapp-description,
520
- .qlwapp-contact {
521
- padding: 24px 36px;
522
- height: 100%;
523
- }
524
-
525
- // Description
526
- // -------------------------------------------------------------------------
527
-
528
- .qlwapp-description {
529
-
530
- p,
531
- h3 {
532
- color: inherit;
533
- font-family: inherit;
534
- margin: 0;
535
- }
536
-
537
- h3 {
538
- margin: 0 0 0.25em 0;
539
- }
540
- }
541
-
542
- // Response
543
- // -------------------------------------------------------------------------
544
-
545
- .qlwapp-contact {
546
- display: flex;
547
- justify-content: flex-end;
548
- align-items: center;
549
- text-align: right;
550
-
551
- .qlwapp-previous {
552
- position: relative;
553
- left: -16px;
554
-
555
- > i {
556
- //font-size: 26px;
557
- line-height: 36px;
558
- }
559
- }
560
-
561
- .qlwapp-avatar {
562
- width: 42px;
563
- height: 42px;
564
- }
565
-
566
- .qlwapp-label,
567
- .qlwapp-name {
568
- color: inherit;
569
- }
570
- }
571
-
572
- .qlwapp-account {
573
- color: inherit;
574
- padding: 16px 36px;
575
- display: flex;
576
- align-items: center;
577
- overflow: hidden;
578
- position: relative;
579
- cursor: pointer;
580
- width: 100%;
581
- text-decoration: none;
582
-
583
- &:only-of-type {
584
- padding-top: 36px;
585
- padding-bottom: 36px;
586
- }
587
-
588
- //&.disabled {
589
- // display: none;
590
- //}
591
- //&.readOnly {
592
- // pointer-events: none;
593
- // opacity: 0.5;
594
- //}
595
-
596
- }
597
-
598
- .qlwapp-info {
599
- padding: 0 16px;
600
-
601
- }
602
-
603
- .qlwapp-avatar {
604
- position: relative;
605
- width: 62px;
606
- height: 62px;
607
- //border-radius: 50%;
608
-
609
- &:after {
610
- content: '';
611
- display: block;
612
- width: 15px;
613
- height: 15px;
614
- position: absolute;
615
- bottom: 2px;
616
- right: 2px;
617
- background-image: url(data:image/png;base64,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);
618
- background-color: transparent;
619
- background-repeat: no-repeat;
620
- background-position: center center;
621
- background-size: cover;
622
- z-index: 4;
623
- }
624
- }
625
-
626
- .qlwapp-time,
627
- .qlwapp-label,
628
- .qlwapp-offline-text {
629
- font-size: 12px;
630
- line-height: 1.5em;
631
- opacity: .6;
632
- display: block;
633
- }
634
-
635
- .qlwapp-time {
636
- font-size: 11px;
637
- font-style: italic;
638
- }
639
-
640
- .qlwapp-name {
641
- display: block;
642
- font-weight: bold;
643
- line-height: 1.5em;
644
- }
645
-
646
- // Body
647
- // -------------------------------------------------------------------------
648
- .qlwapp-body {
649
- overflow-x: hidden;
650
- overflow-y: auto;
651
-
652
- .qlwapp-carousel {
653
- max-height: 470px;
654
- min-height: 134px;
655
- }
656
- }
657
-
658
- // Chat
659
- // -------------------------------------------------------------------------
660
-
661
- .qlwapp-chat {
662
- display: flex;
663
- flex-direction: column;
664
- //height: 100%;
665
- overflow: hidden;
666
- }
667
-
668
- .qlwapp-user,
669
- .qlwapp-message {
670
- padding: 16px 24px;
671
- margin: 36px;
672
- position: relative;
673
- word-wrap: break-word;
674
- width: calc(~"100% - 36px*2");
675
-
676
- &:before {
677
- content: '';
678
- position: absolute;
679
- top: -6px;
680
- right: 24px;
681
- width: 13px;
682
- height: 13px;
683
- transform: rotate(45deg);
684
- }
685
- }
686
-
687
- .qlwapp-user {
688
- width: auto;
689
- max-width: 75%;
690
- align-self: flex-start;
691
- justify-self: flex-end;
692
- margin-top: 0;
693
-
694
- &:before {
695
- top: auto;
696
- bottom: -6px;
697
- left: 24px;
698
- }
699
- }
700
-
701
- // Footer
702
- // -------------------------------------------------------------------------
703
-
704
- .qlwapp-padding {
705
- padding-bottom: 56px;
706
- }
707
-
708
- .qlwapp-footer,
709
- .qlwapp-response {
710
- //pointer-events: all;
711
- position: absolute;
712
- bottom: 0;
713
- left: 0;
714
- right: 0;
715
- height: auto;
716
- width:100%;
717
-
718
- &,
719
- pre,
720
- textarea {
721
- max-height: 160px;
722
- }
723
-
724
- pre,
725
- textarea {
726
- color: inherit;
727
- background-color: inherit;
728
- }
729
-
730
- &:before {
731
- pointer-events: none;
732
- position: absolute;
733
- content: '';
734
- height: 59px;
735
- top: -59px;
736
- background-image: linear-gradient(transparent, rgba(0, 0, 0, 0.05));
737
- left: 0;
738
- right: 0;
739
- }
740
-
741
- }
742
-
743
- .qlwapp-footer {
744
- min-height: 56px;
745
- display: flex;
746
- align-items: center;
747
- justify-content: center;
748
- text-align: center;
749
- font-size: 12px;
750
- padding: 12px 36px;
751
-
752
- p {
753
- padding: 0;
754
- font-size: inherit;
755
- }
756
-
757
- p:last-child {
758
- margin-bottom: 0;
759
- }
760
- }
761
-
762
- // Response
763
- // -------------------------------------------------------------------------
764
- .qlwapp-response {
765
-
766
- &,
767
- pre,
768
- textarea,
769
- .qlwapp-buttons {
770
- min-height: 56px;
771
- }
772
-
773
- pre,
774
- textarea {
775
- width: 100%;
776
- height: 100%;
777
- resize: none;
778
- border: none;
779
- padding: 18px 56px 18px 36px;
780
- font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;
781
- font-size: 14px;
782
- font-weight: normal;
783
- line-height: 20px;
784
- white-space: pre-wrap;
785
- word-wrap: break-word;
786
- border-radius: inherit;
787
- margin: 0;
788
- }
789
-
790
- pre {
791
- visibility: hidden;
792
- }
793
-
794
- textarea {
795
- position: absolute;
796
- bottom: 0;
797
- left: 0;
798
-
799
- &:focus {
800
- outline: none;
801
- }
802
-
803
- }
804
-
805
- .qlwapp-buttons {
806
- position: absolute;
807
- top: 0;
808
- right: 21px;
809
- display: flex;
810
- align-items: center;
811
-
812
- &.active {
813
-
814
- > i {
815
- display: none;
816
- }
817
-
818
- > i.qlwf-emoji {
819
- display: block;
820
- }
821
- }
822
-
823
- > i {
824
- opacity: 0.4;
825
- }
826
-
827
- > i,
828
- > a {
829
- cursor: pointer;
830
- margin: 0 0 0 10px;
831
- display: inherit;
832
- font-size: 18px;
833
- line-height: 24px;
834
- }
835
-
836
- }
837
-
838
- }
839
-
840
- }
841
-
842
- }
843
- @import 'colors.less';
844
- @import 'animations.less';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
changelog.txt CHANGED
@@ -1,3 +1,6 @@
 
 
 
1
  = 4.4.8 =
2
  * Fix. remove rating request non admin users
3
 
@@ -24,7 +27,7 @@
24
  * Fix. default settings updated
25
 
26
  = 4.4.1 =
27
- * Fix. small css fixes
28
 
29
  = 4.4.0 =
30
  * New. compatibility with whatsapp chat pro 2.3.5
@@ -41,10 +44,10 @@
41
  * Fix. readme update
42
 
43
  = 4.3.6 =
44
- * Fix. small css fixes
45
 
46
  = 4.3.5 =
47
- * Fix. small css fixes
48
 
49
  = 4.3.4 =
50
  * Fix. + removed from phone pattern
1
+ = 4.4.9 =
2
+ * Fix. small css issues
3
+
4
  = 4.4.8 =
5
  * Fix. remove rating request non admin users
6
 
27
  * Fix. default settings updated
28
 
29
  = 4.4.1 =
30
+ * Fix. small css issues
31
 
32
  = 4.4.0 =
33
  * New. compatibility with whatsapp chat pro 2.3.5
44
  * Fix. readme update
45
 
46
  = 4.3.6 =
47
+ * Fix. small css issues
48
 
49
  = 4.3.5 =
50
+ * Fix. small css issues
51
 
52
  = 4.3.4 =
53
  * Fix. + removed from phone pattern
includes/pages/suggestions.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wrap" style="
2
+ position: relative;
3
+ margin: 25px 40px 0 20px;
4
+ max-width: 1200px;">
5
+ <?php
6
+ $wp_list_table = new QLWAPP_Suggestions_List_Table();
7
+ $wp_list_table->prepare_items();
8
+ ?>
9
+ <form id="plugin-filter" method="post" class="importer-item">
10
+ <?php $wp_list_table->display(); ?>
11
+ </form>
12
+ </div>
includes/settings.php CHANGED
@@ -8,6 +8,29 @@ if (!class_exists('QLWAPP_Settings')) {
8
 
9
  protected static $instance;
10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  function add_action_links($links) {
12
 
13
  $links[] = '<a target="_blank" href="' . QLWAPP_PURCHASE_URL . '">' . esc_html__('Premium', 'wp-whatsapp-chat') . '</a>';
@@ -60,6 +83,7 @@ if (!class_exists('QLWAPP_Settings')) {
60
  //add_submenu_page(QLWAPP_DOMAIN, esc_html__('Contacts', 'wp-whatsapp-chat'), esc_html__('Contacts', 'wp-whatsapp-chat'), 'manage_options', QLWAPP_DOMAIN . '_contacts', array($this, 'settings_contacts1'));
61
  add_submenu_page(QLWAPP_DOMAIN, esc_html__('Display', 'wp-whatsapp-chat'), esc_html__('Display', 'wp-whatsapp-chat'), 'manage_options', QLWAPP_DOMAIN . '_display', array($this, 'settings_display'));
62
  add_submenu_page(QLWAPP_DOMAIN, esc_html__('Colors', 'wp-whatsapp-chat'), esc_html__('Colors', 'wp-whatsapp-chat'), 'manage_options', QLWAPP_DOMAIN . '_colors', array($this, 'settings_colors'));
 
63
  add_submenu_page(QLWAPP_DOMAIN, esc_html__('Premium', 'wp-whatsapp-chat'), sprintf('<i class="dashicons dashicons-awards"></i> %s', esc_html__('Premium', 'wp-whatsapp-chat')), 'edit_posts', QLWAPP_DOMAIN . '_premium', array($this, 'settings_premium'));
64
  }
65
 
@@ -73,11 +97,11 @@ if (!class_exists('QLWAPP_Settings')) {
73
  <p class="about-text"><?php printf(esc_html__('Thanks for using %s! We will do our best to offer you the best and improved communication experience with your users.', 'wp-whatsapp-chat'), QLWAPP_PLUGIN_NAME); ?></p>
74
 
75
  <p class="about-text">
76
- <?php printf('<a href="%s" target="_blank">%s</a>', QLWAPP_DEMO_URL, esc_html__('Demo', 'wp-whatsapp-chat')); ?></a> |
77
  <?php printf('<a href="%s" target="_blank">%s</a>', QLWAPP_DOCUMENTATION_URL, esc_html__('Documentation', 'wp-whatsapp-chat')); ?></a>
78
  </p>
79
 
80
- <?php printf('<a href="%s" target="_blank"><div style="
81
  background: #006bff url(%s) no-repeat;
82
  background-position: top center;
83
  background-size: 130px 130px;
@@ -99,11 +123,11 @@ if (!class_exists('QLWAPP_Settings')) {
99
  ?>
100
  <div class="wrap about-wrap full-width-layout qlwrap">
101
  <h2 class="nav-tab-wrapper">
102
- <?php
103
- foreach ($submenu[QLWAPP_DOMAIN] as $tab) {
104
- if (strpos($tab[2], '.php') !== false)
105
- continue;
106
- ?>
107
  <a href="<?php echo admin_url('admin.php?page=' . esc_attr($tab[2])); ?>" class="nav-tab<?php echo (isset($_GET['page']) && $_GET['page'] == $tab[2]) ? ' nav-tab-active' : ''; ?>"><?php echo $tab[0]; ?></a>
108
  <?php
109
  }
@@ -167,112 +191,122 @@ if (!class_exists('QLWAPP_Settings')) {
167
  ?>
168
  <?php $this->settings_header(); ?>
169
  <div class="wrap about-wrap full-width-layout qlwrap">
170
- <?php include_once('pages/welcome.php'); ?>
171
  </div>
172
- <?php
173
- }
174
 
175
- function settings_button() {
176
 
177
- global $qlwapp;
178
- ?>
179
  <?php $this->settings_header(); ?>
180
  <div class="wrap about-wrap full-width-layout qlwrap">
181
- <?php include_once('pages/button.php'); ?>
182
  </div>
183
- <?php
184
- }
185
 
186
- function settings_box() {
187
 
188
- global $qlwapp;
189
- ?>
190
  <?php $this->settings_header(); ?>
191
  <div class="wrap about-wrap full-width-layout qlwrap">
192
- <?php include_once('pages/box.php'); ?>
193
  </div>
194
- <?php
195
- }
196
 
197
- function settings_contacts1() {
198
 
199
- global $qlwapp;
200
- ?>
201
  <?php $this->settings_header(); ?>
202
  <div class="wrap about-wrap full-width-layout qlwrap">
203
- <?php include_once('pages/contacts.php'); ?>
204
  </div>
205
- <?php
206
- }
207
 
208
- function settings_display() {
209
 
210
- global $qlwapp;
211
- ?>
212
  <?php $this->settings_header(); ?>
213
  <div class="wrap about-wrap full-width-layout qlwrap">
214
- <?php include_once('pages/display.php'); ?>
215
  </div>
216
- <?php
217
- }
218
 
219
- function settings_colors() {
220
 
221
- global $qlwapp;
222
- ?>
223
  <?php $this->settings_header(); ?>
224
  <div class="wrap about-wrap full-width-layout qlwrap">
225
- <?php include_once('pages/colors.php'); ?>
226
  </div>
227
- <?php
228
- }
229
 
230
- function settings_premium() {
231
 
232
- global $qlwapp;
233
- ?>
234
  <?php $this->settings_header(); ?>
235
  <div class="wrap about-wrap full-width-layout qlwrap">
236
- <?php include_once('pages/premium.php'); ?>
237
  </div>
 
 
 
 
 
 
 
 
 
 
238
  <?php
239
  }
240
 
241
  function settings_contacts() {
242
  ?>
243
  <table class="form-table widefat" id="qlwapp-contact-form" data-editindex="-1">
244
- <?php
245
- //gestion de la time zone
246
- $current_offset = get_option('gmt_offset');
247
- $tzstring = get_option('timezone_string');
248
 
249
- $check_zone_info = true;
250
 
251
- // Remove old Etc mappings. Fallback to gmt_offset.
252
- if (false !== strpos($tzstring, 'Etc/GMT')) {
253
- $tzstring = '';
254
- }
255
- if (empty($tzstring)) { // Create a UTC+- zone if no timezone string exists
256
- $check_zone_info = false;
257
- if (0 == $current_offset) {
258
- $tzstring = 'UTC+0';
259
- } elseif ($current_offset < 0) {
260
- $tzstring = 'UTC' . $current_offset;
261
- } else {
262
- $tzstring = 'UTC+' . $current_offset;
263
- }
264
  }
265
- // echo 'aca ' . get_option('gmt_offset'). ' aca'.get_option( 'timezone_string');
266
- // gestion de los contactos + gmt
267
- $this->contact_table();
268
- ?>
 
269
  </table>
270
- <?php
271
- }
272
 
273
- function contact_table($id = 0) {
274
- global $qlwapp;
275
- ?>
276
  <tr>
277
  <td>
278
  <div class="upload">
@@ -325,7 +359,7 @@ if (!class_exists('QLWAPP_Settings')) {
325
  <b><label for="timezone"><?php esc_html_e('Timezone', 'wp-whatsapp-chat'); ?></label></b></td>
326
  <td class="qlwapp-premium-field">
327
  <select id="ctimezone" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts][' . $id . '][timezone]'); ?>" aria-describedby="timezone-description">
328
- <?php echo wp_timezone_choice(get_option('timezone_string'), get_user_locale()); ?>
329
  </select>
330
  <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
331
 
@@ -387,7 +421,7 @@ if (!class_exists('QLWAPP_Settings')) {
387
  <div class="attachments-browser">
388
  <input type="hidden" id="qlwapp_icon" value="{{ data.icon }}">
389
  <ul tabindex="-1" class="attachments">
390
- <?php foreach (explode(',', 'qlwf-chat,qlwf-chat1,qlwf-chat2,qlwf-comments,qlwf-chat3,qlwf-bubble1,qlwf-chat-alt-fill,qlwf-chat-alt-stroke,qlwf-comment-alt2-fill,qlwf-comment-alt2-stroke,qlwf-comment-fill,qlwf-comment-stroke,qlwf-comment,qlwf-comment-alt1-stroke,qlwf-chat4,qlwf-comments1,qlwf-chat5,qlwf-comment1,qlwf-bubble,qlwf-bubbles,qlwf-bubbles2,qlwf-bubble2,qlwf-bubbles3,qlwf-bubbles4,qlwf-whatsapp,qlwf-chat6,qlwf-mode_comment,qlwf-insert_comment,qlwf-chat_bubble_outline,qlwf-chat_bubble,qlwf-bubble_chart,qlwf-comment2,qlwf-chat7,qlwf-commenting-o,qlwf-commenting,qlwf-comments-o,qlwf-comment-o,qlwf-wechat,qlwf-comments2,qlwf-comment3,qlwf-chat8,qlwf-chat-bubble-dots,qlwf-bubbles1,qlwf-bubble3') as $id => $icon) : ?>
391
  <li tabindex="0" role="checkbox" aria-label="<?php echo esc_attr($icon); ?>" aria-checked="false" data-id="<?php echo esc_attr($id); ?>" class="attachment save-ready icon _<?php echo esc_attr(str_replace(' ', '_', trim($icon))); ?>">
392
  <div class="attachment-preview js--select-attachment type-image subtype-jpeg landscape">
393
  <div class="thumbnail">
@@ -399,7 +433,7 @@ if (!class_exists('QLWAPP_Settings')) {
399
  <span class="screen-reader-text"><?php esc_html_e('Deselect'); ?></span>
400
  </button>
401
  </li>
402
- <?php endforeach; ?>
403
  </ul>
404
  </div>
405
  </div>
@@ -488,6 +522,10 @@ if (!class_exists('QLWAPP_Settings')) {
488
  add_action('wp_ajax_qlwapp_add_contact', array($this, 'ajax_add_contact'));
489
  add_action('wp_ajax_qlwapp_edit_contact', array($this, 'ajax_edit_contact'));
490
  add_action('wp_ajax_qlwapp_save_contact', array($this, 'ajax_save_contact'));
 
 
 
 
491
  }
492
 
493
  ///
8
 
9
  protected static $instance;
10
 
11
+ // fix for activateUrl on install now button
12
+ public function network_admin_url($url, $path) {
13
+
14
+ if (wp_doing_ajax() && !is_network_admin()) {
15
+ if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'install-plugin') {
16
+ if (strpos($url, 'plugins.php') !== false) {
17
+ $url = self_admin_url($path);
18
+ }
19
+ }
20
+ }
21
+
22
+ return $url;
23
+ }
24
+
25
+ public function add_redirect() {
26
+
27
+ if (isset($_REQUEST['activate']) && $_REQUEST['activate'] == 'true') {
28
+ if (wp_get_referer() == admin_url('admin.php?page=' . QLWAPP_DOMAIN . '_suggestions')) {
29
+ wp_redirect(admin_url('admin.php?page=' . QLWAPP_DOMAIN . '_suggestions'));
30
+ }
31
+ }
32
+ }
33
+
34
  function add_action_links($links) {
35
 
36
  $links[] = '<a target="_blank" href="' . QLWAPP_PURCHASE_URL . '">' . esc_html__('Premium', 'wp-whatsapp-chat') . '</a>';
83
  //add_submenu_page(QLWAPP_DOMAIN, esc_html__('Contacts', 'wp-whatsapp-chat'), esc_html__('Contacts', 'wp-whatsapp-chat'), 'manage_options', QLWAPP_DOMAIN . '_contacts', array($this, 'settings_contacts1'));
84
  add_submenu_page(QLWAPP_DOMAIN, esc_html__('Display', 'wp-whatsapp-chat'), esc_html__('Display', 'wp-whatsapp-chat'), 'manage_options', QLWAPP_DOMAIN . '_display', array($this, 'settings_display'));
85
  add_submenu_page(QLWAPP_DOMAIN, esc_html__('Colors', 'wp-whatsapp-chat'), esc_html__('Colors', 'wp-whatsapp-chat'), 'manage_options', QLWAPP_DOMAIN . '_colors', array($this, 'settings_colors'));
86
+ add_submenu_page(QLWAPP_DOMAIN, esc_html__('Suggestions', 'wp-whatsapp-chat'), sprintf('%s', esc_html__('Suggestions', 'wp-whatsapp-chat')), 'edit_posts', QLWAPP_DOMAIN . '_suggestions', array($this, 'settings_suggestions'), 99);
87
  add_submenu_page(QLWAPP_DOMAIN, esc_html__('Premium', 'wp-whatsapp-chat'), sprintf('<i class="dashicons dashicons-awards"></i> %s', esc_html__('Premium', 'wp-whatsapp-chat')), 'edit_posts', QLWAPP_DOMAIN . '_premium', array($this, 'settings_premium'));
88
  }
89
 
97
  <p class="about-text"><?php printf(esc_html__('Thanks for using %s! We will do our best to offer you the best and improved communication experience with your users.', 'wp-whatsapp-chat'), QLWAPP_PLUGIN_NAME); ?></p>
98
 
99
  <p class="about-text">
100
+ <?php printf('<a href="%s" target="_blank">%s</a>', QLWAPP_DEMO_URL, esc_html__('Demo', 'wp-whatsapp-chat')); ?></a> |
101
  <?php printf('<a href="%s" target="_blank">%s</a>', QLWAPP_DOCUMENTATION_URL, esc_html__('Documentation', 'wp-whatsapp-chat')); ?></a>
102
  </p>
103
 
104
+ <?php printf('<a href="%s" target="_blank"><div style="
105
  background: #006bff url(%s) no-repeat;
106
  background-position: top center;
107
  background-size: 130px 130px;
123
  ?>
124
  <div class="wrap about-wrap full-width-layout qlwrap">
125
  <h2 class="nav-tab-wrapper">
126
+ <?php
127
+ foreach ($submenu[QLWAPP_DOMAIN] as $tab) {
128
+ if (strpos($tab[2], '.php') !== false)
129
+ continue;
130
+ ?>
131
  <a href="<?php echo admin_url('admin.php?page=' . esc_attr($tab[2])); ?>" class="nav-tab<?php echo (isset($_GET['page']) && $_GET['page'] == $tab[2]) ? ' nav-tab-active' : ''; ?>"><?php echo $tab[0]; ?></a>
132
  <?php
133
  }
191
  ?>
192
  <?php $this->settings_header(); ?>
193
  <div class="wrap about-wrap full-width-layout qlwrap">
194
+ <?php include_once('pages/welcome.php'); ?>
195
  </div>
196
+ <?php
197
+ }
198
 
199
+ function settings_button() {
200
 
201
+ global $qlwapp;
202
+ ?>
203
  <?php $this->settings_header(); ?>
204
  <div class="wrap about-wrap full-width-layout qlwrap">
205
+ <?php include_once('pages/button.php'); ?>
206
  </div>
207
+ <?php
208
+ }
209
 
210
+ function settings_box() {
211
 
212
+ global $qlwapp;
213
+ ?>
214
  <?php $this->settings_header(); ?>
215
  <div class="wrap about-wrap full-width-layout qlwrap">
216
+ <?php include_once('pages/box.php'); ?>
217
  </div>
218
+ <?php
219
+ }
220
 
221
+ function settings_contacts1() {
222
 
223
+ global $qlwapp;
224
+ ?>
225
  <?php $this->settings_header(); ?>
226
  <div class="wrap about-wrap full-width-layout qlwrap">
227
+ <?php include_once('pages/contacts.php'); ?>
228
  </div>
229
+ <?php
230
+ }
231
 
232
+ function settings_display() {
233
 
234
+ global $qlwapp;
235
+ ?>
236
  <?php $this->settings_header(); ?>
237
  <div class="wrap about-wrap full-width-layout qlwrap">
238
+ <?php include_once('pages/display.php'); ?>
239
  </div>
240
+ <?php
241
+ }
242
 
243
+ function settings_colors() {
244
 
245
+ global $qlwapp;
246
+ ?>
247
  <?php $this->settings_header(); ?>
248
  <div class="wrap about-wrap full-width-layout qlwrap">
249
+ <?php include_once('pages/colors.php'); ?>
250
  </div>
251
+ <?php
252
+ }
253
 
254
+ function settings_premium() {
255
 
256
+ global $qlwapp;
257
+ ?>
258
  <?php $this->settings_header(); ?>
259
  <div class="wrap about-wrap full-width-layout qlwrap">
260
+ <?php include_once('pages/premium.php'); ?>
261
  </div>
262
+ <?php
263
+ }
264
+
265
+ function settings_suggestions() {
266
+
267
+ global $qlwapp;
268
+ ?>
269
+ <?php $this->settings_header(); ?>
270
+ <?php include_once('suggestions.php'); ?>
271
+ <?php include_once('pages/suggestions.php'); ?>
272
  <?php
273
  }
274
 
275
  function settings_contacts() {
276
  ?>
277
  <table class="form-table widefat" id="qlwapp-contact-form" data-editindex="-1">
278
+ <?php
279
+ //gestion de la time zone
280
+ $current_offset = get_option('gmt_offset');
281
+ $tzstring = get_option('timezone_string');
282
 
283
+ $check_zone_info = true;
284
 
285
+ // Remove old Etc mappings. Fallback to gmt_offset.
286
+ if (false !== strpos($tzstring, 'Etc/GMT')) {
287
+ $tzstring = '';
288
+ }
289
+ if (empty($tzstring)) { // Create a UTC+- zone if no timezone string exists
290
+ $check_zone_info = false;
291
+ if (0 == $current_offset) {
292
+ $tzstring = 'UTC+0';
293
+ } elseif ($current_offset < 0) {
294
+ $tzstring = 'UTC' . $current_offset;
295
+ } else {
296
+ $tzstring = 'UTC+' . $current_offset;
 
297
  }
298
+ }
299
+ // echo 'aca ' . get_option('gmt_offset'). ' aca'.get_option( 'timezone_string');
300
+ // gestion de los contactos + gmt
301
+ $this->contact_table();
302
+ ?>
303
  </table>
304
+ <?php
305
+ }
306
 
307
+ function contact_table($id = 0) {
308
+ global $qlwapp;
309
+ ?>
310
  <tr>
311
  <td>
312
  <div class="upload">
359
  <b><label for="timezone"><?php esc_html_e('Timezone', 'wp-whatsapp-chat'); ?></label></b></td>
360
  <td class="qlwapp-premium-field">
361
  <select id="ctimezone" name="<?php echo esc_attr(QLWAPP_DOMAIN . '[contacts][' . $id . '][timezone]'); ?>" aria-describedby="timezone-description">
362
+ <?php echo wp_timezone_choice(get_option('timezone_string'), get_user_locale()); ?>
363
  </select>
364
  <p class="description hidden"><small><?php esc_html_e('This is a premium feature', 'wp-whatsapp-chat'); ?></small></p>
365
 
421
  <div class="attachments-browser">
422
  <input type="hidden" id="qlwapp_icon" value="{{ data.icon }}">
423
  <ul tabindex="-1" class="attachments">
424
+ <?php foreach (explode(',', 'qlwf-chat,qlwf-chat1,qlwf-chat2,qlwf-comments,qlwf-chat3,qlwf-bubble1,qlwf-chat-alt-fill,qlwf-chat-alt-stroke,qlwf-comment-alt2-fill,qlwf-comment-alt2-stroke,qlwf-comment-fill,qlwf-comment-stroke,qlwf-comment,qlwf-comment-alt1-stroke,qlwf-chat4,qlwf-comments1,qlwf-chat5,qlwf-comment1,qlwf-bubble,qlwf-bubbles,qlwf-bubbles2,qlwf-bubble2,qlwf-bubbles3,qlwf-bubbles4,qlwf-whatsapp,qlwf-chat6,qlwf-mode_comment,qlwf-insert_comment,qlwf-chat_bubble_outline,qlwf-chat_bubble,qlwf-bubble_chart,qlwf-comment2,qlwf-chat7,qlwf-commenting-o,qlwf-commenting,qlwf-comments-o,qlwf-comment-o,qlwf-wechat,qlwf-comments2,qlwf-comment3,qlwf-chat8,qlwf-chat-bubble-dots,qlwf-bubbles1,qlwf-bubble3') as $id => $icon) : ?>
425
  <li tabindex="0" role="checkbox" aria-label="<?php echo esc_attr($icon); ?>" aria-checked="false" data-id="<?php echo esc_attr($id); ?>" class="attachment save-ready icon _<?php echo esc_attr(str_replace(' ', '_', trim($icon))); ?>">
426
  <div class="attachment-preview js--select-attachment type-image subtype-jpeg landscape">
427
  <div class="thumbnail">
433
  <span class="screen-reader-text"><?php esc_html_e('Deselect'); ?></span>
434
  </button>
435
  </li>
436
+ <?php endforeach; ?>
437
  </ul>
438
  </div>
439
  </div>
522
  add_action('wp_ajax_qlwapp_add_contact', array($this, 'ajax_add_contact'));
523
  add_action('wp_ajax_qlwapp_edit_contact', array($this, 'ajax_edit_contact'));
524
  add_action('wp_ajax_qlwapp_save_contact', array($this, 'ajax_save_contact'));
525
+
526
+ //
527
+ add_action('admin_init', array($this, 'add_redirect'));
528
+ add_filter('network_admin_url', array($this, 'network_admin_url'), 10, 2);
529
  }
530
 
531
  ///
includes/suggestions.php ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require_once( ABSPATH . 'wp-admin/includes/class-wp-plugin-install-list-table.php' );
4
+
5
+ class QLWAPP_Suggestions_List_Table extends WP_Plugin_Install_List_Table {
6
+
7
+ public $promote = array(
8
+ 'wp-menu-icons',
9
+ 'wp-whatsapp-chat',
10
+ 'insta-gallery',
11
+ 'quadmenu',
12
+ 'woocommerce-checkout-manager',
13
+ 'woocommerce-direct-checkout',
14
+ );
15
+
16
+ private function remove_plugins($plugins) {
17
+
18
+ $promote = array();
19
+
20
+ foreach ($this->promote as $order => $slug) {
21
+
22
+ if ($id = @max(array_keys(array_column($plugins, 'slug'), $slug))) {
23
+
24
+ $promote[] = $plugins[$id];
25
+ }
26
+ }
27
+
28
+ return $promote;
29
+ }
30
+
31
+ public function self_admin_url($url, $path) {
32
+
33
+ if (strpos($url, 'tab=plugin-information') !== false) {
34
+ $url = network_admin_url($path);
35
+ }
36
+
37
+ return $url;
38
+ }
39
+
40
+ public function network_admin_url($url, $path) {
41
+
42
+ if (strpos($url, 'plugins.php') !== false) {
43
+ $url = self_admin_url($path);
44
+ }
45
+
46
+ return $url;
47
+ }
48
+
49
+ public function display_rows() {
50
+ add_filter('self_admin_url', array($this, 'self_admin_url'), 10, 2);
51
+ add_filter('network_admin_url', array($this, 'network_admin_url'), 10, 2);
52
+ parent::display_rows();
53
+ }
54
+
55
+ public function is_connected() {
56
+
57
+ global $wp_version;
58
+
59
+ $http_args = array(
60
+ 'timeout' => 15,
61
+ 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url('/'),
62
+ );
63
+
64
+ return is_wp_error(wp_remote_get('http://api.wordpress.org/plugins/info/1.2/', $http_args));
65
+ }
66
+
67
+ public function get_plugins() {
68
+
69
+ $plugins = get_transient('ql_suggestions_plugins');
70
+
71
+ if ($plugins === false) {
72
+
73
+ $args = array(
74
+ 'per_page' => 36,
75
+ 'author' => 'quadlayers',
76
+ 'locale' => get_user_locale(),
77
+ );
78
+
79
+ $api = plugins_api('query_plugins', $args);
80
+
81
+ if (!is_wp_error($api)) {
82
+
83
+ $plugins = $this->remove_plugins($api->plugins);
84
+
85
+ set_transient('ql_suggestions_plugins', $plugins, 24 * HOUR_IN_SECONDS);
86
+ }
87
+ }
88
+
89
+ return $plugins;
90
+ }
91
+
92
+ public function prepare_items() {
93
+
94
+ include_once( ABSPATH . 'wp-admin/includes/plugin-install.php' );
95
+
96
+ global $tabs, $tab;
97
+
98
+ wp_enqueue_style('thickbox');
99
+ wp_enqueue_script('plugin-install');
100
+ wp_enqueue_script('thickbox');
101
+ wp_enqueue_script('updates');
102
+
103
+ wp_reset_vars(array('tab'));
104
+
105
+ $tabs = array();
106
+
107
+ if ('search' === $tab) {
108
+ $tabs['search'] = __('Search Results');
109
+ }
110
+ if ($tab === 'beta' || false !== strpos(get_bloginfo('version'), '-')) {
111
+ $tabs['beta'] = _x('Beta Testing', 'Plugin Installer');
112
+ }
113
+ $tabs['featured'] = _x('Featured', 'Plugin Installer');
114
+ $tabs['popular'] = _x('Popular', 'Plugin Installer');
115
+ $tabs['recommended'] = _x('Recommended', 'Plugin Installer');
116
+ $tabs['favorites'] = _x('Favorites', 'Plugin Installer');
117
+
118
+ $nonmenu_tabs = array('plugin-information'); // Valid actions to perform which do not have a Menu item.
119
+
120
+ $tabs = apply_filters('install_plugins_tabs', $tabs);
121
+
122
+ $nonmenu_tabs = apply_filters('install_plugins_nonmenu_tabs', $nonmenu_tabs);
123
+
124
+ // If a non-valid menu tab has been selected, And it's not a non-menu action.
125
+ if (empty($tab) || (!isset($tabs[$tab]) && !in_array($tab, (array) $nonmenu_tabs) )) {
126
+ $tab = key($tabs);
127
+ }
128
+
129
+ $this->items = $this->get_plugins();
130
+ }
131
+
132
+ }
readme.txt CHANGED
@@ -4,11 +4,11 @@ Donate link: https://quadlayers.com/portfolio/wordpress-whatsapp-chat/
4
  Tags: whatsapp, whatsapp button, whatsapp chat, whatsapp support, contact, click to chat, directly message whatsapp, floating whatsapp, whatsapp business, messaging, help desk
5
  Requires at least: 4.6
6
  Tested up to: 5.2.2
7
- Stable tag: 4.4.8
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
- Formerly "WhatsApp Chat". This plugin allows your site visitors and customers to contact you or your team through WhatsApp chat with a single click.
12
 
13
  == Description ==
14
 
4
  Tags: whatsapp, whatsapp button, whatsapp chat, whatsapp support, contact, click to chat, directly message whatsapp, floating whatsapp, whatsapp business, messaging, help desk
5
  Requires at least: 4.6
6
  Tested up to: 5.2.2
7
+ Stable tag: 4.4.9
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
+ Formerly "WhatsApp Chat". This plugin allows your users to contact you through WhatsApp chat with a single click.
12
 
13
  == Description ==
14
 
wp-whatsapp-chat.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: WhatsApp Chat
4
  * Plugin URI: https://quadlayers.com/portfolio/wordpress-whatsapp-chat/
5
  * Description: WhatsApp Chat allows your visitors to contact you or your team through WhatsApp chat with a single click.
6
- * Version: 4.4.8
7
  * Author: QuadLayers
8
  * Author URI: https://quadlayers.com
9
  * License: GPL-2.0+
@@ -18,7 +18,7 @@ if (!defined('QLWAPP_PLUGIN_NAME')) {
18
  define('QLWAPP_PLUGIN_NAME', 'WhatsApp Chat');
19
  }
20
  if (!defined('QLWAPP_PLUGIN_VERSION')) {
21
- define('QLWAPP_PLUGIN_VERSION', '4.4.8');
22
  }
23
  if (!defined('QLWAPP_PLUGIN_FILE')) {
24
  define('QLWAPP_PLUGIN_FILE', __FILE__);
3
  * Plugin Name: WhatsApp Chat
4
  * Plugin URI: https://quadlayers.com/portfolio/wordpress-whatsapp-chat/
5
  * Description: WhatsApp Chat allows your visitors to contact you or your team through WhatsApp chat with a single click.
6
+ * Version: 4.4.9
7
  * Author: QuadLayers
8
  * Author URI: https://quadlayers.com
9
  * License: GPL-2.0+
18
  define('QLWAPP_PLUGIN_NAME', 'WhatsApp Chat');
19
  }
20
  if (!defined('QLWAPP_PLUGIN_VERSION')) {
21
+ define('QLWAPP_PLUGIN_VERSION', '4.4.9');
22
  }
23
  if (!defined('QLWAPP_PLUGIN_FILE')) {
24
  define('QLWAPP_PLUGIN_FILE', __FILE__);