Browse code

removed files to implement auto-reply fix, etc.

DoubleBastionAdmin authored on 20/05/2023 00:46:30
Showing 23 changed files
1 1
deleted file mode 100644
... ...
@@ -1,90 +0,0 @@
1
-======= CHANGELOG =======
2
-
3
-Versions:
4
-
5
-== 1.0.0 - 2022-1-27 ==
6
-* Initial release.
7
-
8
-== 1.0.1 - 2022-3-31 ==
9
-* Changed presentation text.
10
-
11
-== 1.0.2 - 2022-4-13 ==
12
-* Changed application controller class, to respect custom path of 'datadirectory'.
13
-* Fixed filters row arrow not showing up when using Apache.
14
-* Added the 'Contributors.txt' file.
15
-
16
-== 1.0.3 - 2022-4-15 ==
17
-* Changed the way the app gets the timezone.
18
-
19
-== 1.0.4 - 2022-5-7 ==
20
-* Changed the data type of the 'message' column in the 'sms_relent_sent' and 'sms_relent_received' tables.
21
-
22
-== 1.0.5 - 2022-5-9 ==
23
-* Changed string length for 'message' column in 'sms_relent_sent' and 'sms_relent_received' tables.
24
-* Changed syntax of SQL queries and of encryption function.
25
-* Changed structure of webhook URLs in case Nextcloud is served on a subdirectory.
26
-
27
-== 1.0.6 - 2022-8-13 ==
28
-* Added support for Twilio.
29
-* Added support for new lines in messages and email notifications.
30
-* Solved column width issue in sent/received SMS tables.
31
-* Minor explanatory text changes.
32
-
33
-== 1.0.7 - 2022-8-16 ==
34
-* Solved bug related to receiving messages on Twilio number when it's not associated with any Messaging Service.
35
-* Changed css properties for Network column.
36
-
37
-== 1.0.8 - 2022-8-23 ==
38
-* Added support for Flowroute.
39
-* Added automatic scrolling to bottom of received/sent messages table when clicking on 'Received/Sent SMS Messages' button.
40
-* Added scroll bar to info pop-up notes.
41
-
42
-== 1.0.9 - 2022-9-3 ==
43
-* Added support for MMS.
44
-* Minor CSS improvements.
45
-* Small changes to explanatory text.
46
-
47
-== 1.1.0 - 2022-9-5 ==
48
-* Solved issue with previewing images picked from Nextcloud.
49
-* Text changes to README.md.
50
-
51
-== 1.1.1 - 2022-9-9 ==
52
-* Changed signature verification process for Twilio.
53
-* Removed Alphanumeric Sender ID for Flowroute, since it's not supported.
54
-* Minor text changes on presentation page and settings page.
55
-
56
-== 1.1.2 - 2022-10-27 ==
57
-* Changed CSS settings to match the modifications introduced in Nextcloud 25.
58
-
59
-== 1.1.3 - 2022-12-1 ==
60
-* Fixed SQL error that appeared in fresh installations.
61
-* Added support for dark themes.
62
-* Updated explanatory text for Telnyx on the Settings page.
63
-
64
-== 1.1.4 - 2022-12-2 ==
65
-* Changed migration files to prevent installation errors.
66
-* Modified 3 svg files converting text objects to paths.
67
-
68
-== 1.1.5 - 2023-2-28 ==
69
-* Fixed issue related to Twilio message signing.
70
-* Updated message pricing information in app description.
71
-
72
-== 1.1.6 - 2023-5-8 ==
73
-* Implemented showing display names of message authors before their messages.
74
-* Added checkbox to enable/disable prepending display names before messages.
75
-* Custom display names can be now saved for external phone numbers.
76
-* Restrictions for groups or users can be placed on phone numbers by admins.
77
-* Admins can see just their own messages or all the messages in their message tables.
78
-* Auto-replies with 'daily mode' and 'vacation mode' can be configured for any controlled phone number.
79
-* Added a new message table that lists all the messages grouped by phone numbers.
80
-* Added the ability to see all the messages sent/received to/from a phone number, by clicking on 
81
-  a button located below the number, in the 'Received SMS Messages' and 'Sent SMS Messages' tables
82
-
83
-== 1.1.7 - 2023-5-9 ==
84
-* Fixed bug related to not being able to see messages in pop-up windows and on grouped messages table.
85
-
86
-== 1.1.8 - 2023-5-9 ==
87
-* Fixed migration issue bug.
88
-
89
-== 1.1.9 - 2023-5-9 ==
90
-* Made the app available to upgrade to for Nextcloud 26.
91 0
deleted file mode 100644
... ...
@@ -1,147 +0,0 @@
1
-<span style="display:block;height:15px!important"></span>
2
-<p align="center"><img src="https://git.doublebastion.com/sms-relentless/raw/develop/img/sms_relentless_logo.png" alt="SMS Relentless" width="191px" height="157px"/></p>
3
-
4
-<span style="display:block;height:20px!important"></span>
5
-
6
-**SMS Relentless is a Nextcloud application that allows sending and receiving SMS and MMS messages in Nextcloud.**
7
-
8
-A telnyx.com, plivo.com, twilio.com or flowroute.com account and a real phone number acquired from one of the 4 providers are needed.
9
-
10
-<span style="display:block;height:20px!important"></span>
11
-
12
-## Features
13
-
14
-<span style="display:block;height:10px!important"></span>
15
-
16
-* 🚀 Use one or multiple local phone numbers in countries of your choice, to send and receive SMS/MMS messages with your browser, on any device connected to the Internet.
17
-
18
-* 📑 Sent and received SMS/MMS messages are stored in the database per sending/receiving user and can be viewed in paginated tables with filters for every column.
19
-
20
-* 🖼️  Up to 10 files of various formats, including jpeg, png and gif, can be sent as MMS messages from MMS enabled phone numbers. Files included in incoming MMS messages are not downloaded automatically. They are stored as URL links to the actual files, so that the receivers can download them only if they trust the senders.
21
-
22
-* 📔 SMS/MMS messages older than a specified number of days can be deleted in bulk with one click and they are automatically archived in csv files stored in Nextcloud, before being removed from the database. This makes them available for future analysis.
23
-
24
-* 💻 Sending SMS/MMS messages to thousands of recipients can be achieved by uploading a txt/csv file containing the recipients' phone numbers and the same SMS/MMS is sent automatically to all. The time interval between two consecutive messages is configurable.
25
-
26
-* 👤 If messages are sent by Nextcloud users from phone numbers mentioned in their profiles, their Display Names appear before their messages.
27
-
28
-* ⚠️  Admins can restrict the use of specific phone numbers to specific groups or users.
29
-
30
-* ✉️  Auto-replies in 'daily mode' and 'vacation mode' can be configured for any controlled phone number.
31
-
32
-* 🔏 SMS/MMS messages coming from Telnyx, Plivo and Twilio are checked for authenticity by verifying the SMS provider's signature.
33
-
34
-* 📧 Users receive notifications in Nextcloud and (optionally) emails when new SMS/MMS messages arrive.
35
-
36
-* 📄 Each sent message receives a delivery receipt displayed in the Sent SMS Messages table.
37
-
38
-* 📱 It works with regular 'long code' (10-digit) phone numbers, but also with 'toll-free' numbers and 'short codes'. Users see a list with their current phone numbers and can set them as Sender IDs. Setting alphanumeric Sender IDs is also possible. 
39
-
40
-* 💵 It allows checking the current Telnyx/Plivo/Twilio balance by selecting the provider on the left panel.
41
-
42
-* 💰 The only ongoing cost is about $1 per month (depending on the country) for an SMS/MMS enabled phone number located in a country chosen by the user. No contracts.
43
-
44
-* 💸 Low prices per SMS: starting from $0.0060 per sent message and $0.0040 per received message (Telnyx), or $0.0070 per sent message and $0 per received message (Plivo), or $0.0099 per sent message and 0.0079 per received message (Twilio), or $0.0055 per sent message and 0.0040 per received message (Flowroute) in the USA.
45
-
46
-<span style="display:block;height:10px!important"></span>
47
-
48
-Double Bastion is not affiliated with Telnyx, Plivo, Twilio or Flowroute.
49
-
50
-### Donations
51
-
52
-* 🎁 [Donate](https://www.doublebastion.com/donations/)
53
-
54
-<span style="display:block;height:20px!important"></span>
55
-
56
-Send SMS message
57
-<span style="display:block;height:10px!important"></span>
58
-![Image of SMS Relentless Interface](https://git.doublebastion.com/sms-relentless/raw/develop/img/sms_relentless_send_sms.png)
59
-<span style="display:block;height:40px!important"></span>
60
-Send MMS message
61
-<span style="display:block;height:10px!important"></span>
62
-![Image of SMS Relentless Interface](https://git.doublebastion.com/sms-relentless/raw/develop/img/sms_relentless_mms_sending.png)
63
-<span style="display:block;height:40px!important"></span>
64
-List received SMS messages
65
-<span style="display:block;height:10px!important"></span>
66
-![Image of SMS Relentless Interface](https://git.doublebastion.com/sms-relentless/raw/develop/img/sms_relentless_received.png)
67
-<span style="display:block;height:40px!important"></span>
68
-List sent SMS messages
69
-<span style="display:block;height:10px!important"></span>
70
-![Image of SMS Relentless Interface](https://git.doublebastion.com/sms-relentless/raw/develop/img/sms_relentless_sent.png)
71
-<span style="display:block;height:40px!important"></span>
72
-Send SMS message to multiple recipients
73
-<span style="display:block;height:10px!important"></span>
74
-![Image of SMS Relentless Interface](https://git.doublebastion.com/sms-relentless/raw/develop/img/sms_relentless_send_mass_sms.png)
75
-<span style="display:block;height:40px!important"></span>
76
-Filter messages by date and keyword
77
-<span style="display:block;height:10px!important"></span>
78
-![Image of SMS Relentless Interface](https://git.doublebastion.com/sms-relentless/raw/develop/img/sms_relentless_filter_messages_by_date_and_keyword.png)
79
-<span style="display:block;height:40px!important"></span>
80
-Delete old SMS messages
81
-<span style="display:block;height:10px!important"></span>
82
-![Image of SMS Relentless Interface](https://git.doublebastion.com/sms-relentless/raw/develop/img/sms_relentless_delete_old_messages.png)
83
-<span style="display:block;height:40px!important"></span>
84
-
85
-## Browsers
86
-<span style="display:block;height:10px!important"></span>
87
-
88
-SMS Relentless works with all major browsers.
89
-
90
-<span style="display:block;height:20px!important"></span>
91
-
92
-## Programming Languages
93
-<span style="display:block;height:10px!important"></span>
94
-
95
-SMS Relentless only uses PHP, SQL, jQuery, CSS and HTML. This means it's robust, efficient, light-weight and easy to maintain and debug.
96
-
97
-<span style="display:block;height:20px!important"></span>
98
-
99
-## Minimum Requirements
100
-<span style="display:block;height:10px!important"></span>
101
-
102
-- **Nextcloud 22+** has to be installed and properly configured, preferably by following the <a href="https://www.doublebastion.com/install-nextcloud/" rel="noreferrer noopener" target="_blank">Install Nextcloud</a> chapter in our guide.
103
-
104
-- **A telnyx.com, plivo.com, twilio.com or flowroute.com account and an SMS/MMS enabled phone number** attached to it.
105
-
106
-- The **libcurl** PHP library has to be installed on the server.
107
-
108
-To enable email notifications for every received SMS/MMS, the "sendmail" utility ("/usr/sbin/sendmail" on Debian Linux), has to be present on the server. "sendmail" is a binary which gets 
109
-installed when Postfix is installed. Also, the web server user (www-data) has to be allowed to send emails from command line (by specifying "authorized\_submit\_users = www-data" in 
110
-"/etc/postfix/main.cf" for Postfix on Debian).
111
-
112
-<span style="display:block;height:20px!important"></span>
113
-
114
-## Installation
115
-<span style="display:block;height:10px!important"></span>
116
-
117
-<a href="https://www.doublebastion.com/install-nextcloud/#install-sms-relentless" rel="noreferrer noopener" target="_blank">This chapter</a> of our Complete Guide to a Complete Linux Server 
118
-explains in detail how to install and use this application.
119
-
120
-SMS Relentless is a component of RED Scarf Suite. It can be installed and used alone, but if you want to install <a href="https://www.doublebastion.com/red-scarf-suite-components/" rel="noreferrer noopener" target="_blank">all 
121
-the components</a> of RED Scarf Suite, you can follow our <a href="https://www.doublebastion.com/free-server/complete-guide-to-a-complete-linux-server/" rel="noreferrer noopener" target="_blank">complete guide</a>.
122
-
123
-<span style="display:block;height:20px!important"></span>
124
-
125
-## Contribute
126
-<span style="display:block;height:10px!important"></span>
127
-
128
-This is the official git repository of SMS Relentless. The <a href="https://github.com/DoubleBastionAdmin/sms-relentless" rel="noreferrer noopener" target="_blank">GitHub SMS Relentless
129
-repository</a> is just a pointer to this repository. We don’t use GitHub for developing SMS Relentless because GitHub is owned by one of the companies that proved their disrespect for
130
-digital freedom over the years and because centralized services create autonomy and privacy issues, in spite of all the benefits.
131
-
132
-If you want to contribute code to this project, please submit <a href="https://git.doublebastion.com/sms-relentless/pullrequests/contrib" rel="noreferrer noopener" target="_blank">this form</a>, 
133
-mentioning your intended changes. We'll send you the credentials needed to push code to the "contrib" branch of this repository. After we review the changes we can include them in the 
134
-project.
135
-
136
-Please post any bugs that are not security related, or feature requests, on the <a href="https://git.doublebastion.com/sms-relentless/issues/develop" rel="noreferrer noopener" target="_blank">
137
-issue tracker</a>. If you notice bugs related to security, don’t post them on the issue tracker; instead, send them to manager [at] doublebastion [dot] com .
138
-
139
-<span style="display:block;height:20px!important"></span>
140
-
141
-## License
142
-<span style="display:block;height:10px!important"></span>
143
-
144
-SMS Relentless as a whole is licensed under the GNU Affero General Public License Version 3. If you use SMS Relentless or distribute it in modified or unmodified form, you will need to comply with 
145
-the terms of the GNU Affero General Public License Version 3.
146
-
147
-SMS Relentless includes libraries licensed under different free software licenses. These libraries contain their respective original copyright notices.
148 0
deleted file mode 100644
... ...
@@ -1,90 +0,0 @@
1
-<?xml version="1.0"?>
2
-<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
3
-      xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
4
-    <id>sms_relentless</id>
5
-    <name>SMS Relentless</name>
6
-    <summary>Send and receive SMS in Nextcloud</summary>
7
-    <description><![CDATA[
8
-This application allows sending and receiving SMS and MMS messages in Nextcloud. An SMS/MMS enabled phone number acquired from 
9
-Telnyx or Plivo or Twilio or Flowroute is needed. The 'libcurl' PHP library has to be installed on the server. Detailed instructions 
10
-on how to configure and use this application can be found on the 'Admin documentation' page.
11
-
12
-### Features:
13
-
14
-* 🚀 Use one or multiple local phone numbers in countries of your choice, to send and receive SMS/MMS messages with your browser, on any device connected to the Internet.
15
-
16
-* 📑 Sent and received SMS/MMS messages are stored in the database per sending/receiving user and can be viewed in paginated tables with filters for every column.
17
-
18
-* 🖼️  Up to 10 files of various formats, including jpeg, png and gif, can be sent as MMS messages from MMS enabled phone numbers. Files included in incoming MMS messages are not downloaded automatically. They are stored as URL links to the actual files, so that the receivers can download them only if they trust the senders.
19
-
20
-* 📔 SMS/MMS messages older than a specified number of days can be deleted in bulk with one click and they are automatically archived in csv files stored in Nextcloud, before being removed from the database. This makes them available for future analysis.
21
-
22
-* 💻 Sending SMS/MMS messages to thousands of recipients can be achieved by uploading a txt/csv file containing the recipients' phone numbers and the same SMS/MMS is sent automatically to all. The time interval between two consecutive messages is configurable.
23
-
24
-* 👤 If messages are sent by Nextcloud users from phone numbers mentioned in their profiles, their Display Names appear before their messages.
25
-
26
-* ⚠️  Admins can restrict the use of specific phone numbers to specific groups or users.
27
-
28
-* ✉️  Auto-replies in 'daily mode' and 'vacation mode' can be configured for any controlled phone number.
29
-
30
-* 🔏 SMS/MMS messages coming from Telnyx, Plivo and Twilio are checked for authenticity by verifying the SMS provider's signature.
31
-
32
-* 📧 Users receive notifications in Nextcloud and (optionally) emails when new SMS/MMS messages arrive.
33
-
34
-* 📄 Each sent message receives a delivery receipt displayed in the Sent SMS Messages table.
35
-
36
-* 📱 It works with regular 'long code' (10-digit) phone numbers, but also with 'toll-free' numbers and 'short codes'. Users see a list with their current phone numbers and can set them as Sender IDs. Setting alphanumeric Sender IDs is also possible. 
37
-
38
-* 💵 It allows checking the current Telnyx/Plivo/Twilio balance by selecting the provider on the left panel.
39
-
40
-* 💰 The only ongoing cost is about $1 per month (depending on the country) for an SMS/MMS enabled phone number located in a country chosen by the user. No contracts.
41
-
42
-* 💸 Low prices per SMS: starting from $0.0060 per sent message and $0.0040 per received message (Telnyx), or $0.0070 per sent message and $0 per received message (Plivo), or $0.0099 per sent message and 0.0079 per received message (Twilio), or $0.0055 per sent message and 0.0040 per received message (Flowroute) in the USA.
43
-
44
-We have no affiliation with Telnyx, Plivo, Twilio or Flowroute.
45
-
46
-### Documentation
47
-
48
-* [Admin documentation](https://www.doublebastion.com/install-nextcloud/#install-sms-relentless)
49
-
50
-### Donations
51
-
52
-* 🎁 [Donate](https://www.doublebastion.com/donations/)
53
-
54
-    ]]></description>
55
-    <version>1.1.9</version>
56
-    <licence>AGPL</licence>
57
-    <author mail="contact@doublebastion.com">Double Bastion LLC</author>
58
-    <namespace>SMSRelentless</namespace>
59
-	<documentation>
60
-		<admin>https://www.doublebastion.com/install-nextcloud/#install-sms-relentless</admin>
61
-	</documentation>
62
-    <category>office</category>
63
-    <category>organization</category>
64
-
65
-    <website>https://www.doublebastion.com/sms-relentless/</website>
66
-    <bugs>https://git.doublebastion.com/sms-relentless/issues/develop</bugs>
67
-    <repository>https://git.doublebastion.com/sms-relentless/develop/</repository>
68
-
69
-    <screenshot>https://git.doublebastion.com/sms-relentless/raw/develop/img/sms_relentless_screenshot.png</screenshot>
70
-
71
-    <dependencies>
72
-            <nextcloud min-version="25" max-version="26" />
73
-    </dependencies>
74
-
75
-    <navigations>
76
-        <navigation>
77
-            <name>SMS Relentless</name>
78
-            <route>sms_relentless.page.index</route>
79
-            <order>102</order>
80
-            <icon>../img/sms_relentless.svg</icon>
81
-        </navigation>
82
-    </navigations>
83
-
84
-    <settings>
85
-            <personal>OCA\SMSRelentless\Settings\Personal</personal>
86
-            <personal-section>OCA\SMSRelentless\Settings\PersonalSection</personal-section>
87
-            <admin>OCA\SMSRelentless\Settings\Admin</admin>
88
-    	    <admin-section>OCA\SMSRelentless\Settings\AdminSection</admin-section>
89
-    </settings>
90
-</info>
91 0
deleted file mode 100644
... ...
@@ -1,76 +0,0 @@
1
-<?php
2
-/**
3
- * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
4
- *
5
- * @author Double Bastion LLC
6
- *
7
- * @license GNU AGPL version 3 or any later version
8
- *
9
- * This program is free software; you can redistribute it and/or
10
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
11
- * License as published by the Free Software Foundation; either
12
- * version 3 of the License, or any later version.
13
- *
14
- * This program is distributed in the hope that it will be useful,
15
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
18
- *
19
- * You should have received a copy of the GNU Affero General Public
20
- * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
- *
22
- */
23
-
24
-declare(strict_types=1);
25
-
26
-return [
27
-  'routes' => [
28
-     // User views
29
-     ['name' => 'page#index', 'url' => '/', 'verb' => 'GET'],
30
-     ['name' => 'author_api#receivesmstel', 'url' => '/api/recsmstel', 'verb' => 'POST'],
31
-     ['name' => 'author_api#receivesmsnex', 'url' => '/api/recsmsnex', 'verb' => 'POST'],
32
-     ['name' => 'author_api#receivesmstwil', 'url' => '/api/recsmstwil', 'verb' => 'POST'],
33
-     ['name' => 'author_api#receivesmsflow', 'url' => '/api/recsmsflow', 'verb' => 'POST'],
34
-     ['name' => 'author_api#recdeliveryreptel', 'url' => '/api/recdeliverytel', 'verb' => 'POST'],
35
-     ['name' => 'author_api#recdeliveryrepnex', 'url' => '/api/recdeliverynex', 'verb' => 'POST'],
36
-     ['name' => 'author_api#recdeliveryreptwil', 'url' => '/api/recdeliverytwil', 'verb' => 'POST'],
37
-     ['name' => 'author_api#recdeliveryrepflow', 'url' => '/api/recdeliveryflow', 'verb' => 'POST'],
38
-     ['name' => 'smsrelentless#cleantempdir', 'url' => '/user/cleantempdir/{userId}', 'verb' => 'POST'],
39
-     ['name' => 'smsrelentless#getreceivedtable', 'url' => '/user/getreceivedtable/{userId}', 'verb' => 'GET'],
40
-     ['name' => 'smsrelentless#getreceivedtablefordel', 'url' => '/user/getreceivedtablefordel/{userId}', 'verb' => 'GET'],
41
-     ['name' => 'smsrelentless#getsenttable', 'url' => '/user/getsenttable/{userId}', 'verb' => 'GET'],
42
-     ['name' => 'smsrelentless#getsenttablefordel', 'url' => '/user/getsenttablefordel/{userId}', 'verb' => 'GET'],
43
-     ['name' => 'smsrelentless#getgroupedtable', 'url' => '/user/getgroupedtable/{userId}', 'verb' => 'GET'],
44
-     ['name' => 'smsrelentless#getgroupedpernumber', 'url' => '/user/getgroupedpernumber/{userId}', 'verb' => 'POST'],
45
-     ['name' => 'smsrelentless#removerecrows', 'url' => '/user/removerecrows/{userId}', 'verb' => 'POST'],
46
-     ['name' => 'smsrelentless#removesentrows', 'url' => '/user/removesentrows/{userId}', 'verb' => 'POST'],
47
-     ['name' => 'smsrelentless#saveoldrecrows', 'url' => '/user/saveoldrecrows/{userId}', 'verb' => 'POST'],
48
-     ['name' => 'smsrelentless#saveoldsentrows', 'url' => '/user/saveoldsentrows/{userId}', 'verb' => 'POST'],
49
-     ['name' => 'smsrelentless#getbalancetel', 'url' => '/user/getbalancetel/{userId}', 'verb' => 'POST'],
50
-     ['name' => 'smsrelentless#getbalancenex', 'url' => '/user/getbalancenex/{userId}', 'verb' => 'POST'],
51
-     ['name' => 'smsrelentless#getbalancetwil', 'url' => '/user/getbalancetwil/{userId}', 'verb' => 'POST'],
52
-     ['name' => 'smsrelentless#getbalanceflow', 'url' => '/user/getbalanceflow/{userId}', 'verb' => 'POST'],
53
-     ['name' => 'smsrelentless#getsmsnumbers', 'url' => '/user/getsmsnumbers/{userId}', 'verb' => 'POST'],
54
-     ['name' => 'smsrelentless#upload_numbers_file', 'url' => '/user/upload_numbers_file/{userId}', 'verb' => 'POST'],
55
-     ['name' => 'smsrelentless#uploadfile', 'url' => '/user/uploadfile/{userId}', 'verb' => 'POST'],
56
-     ['name' => 'smsrelentless#pickfile', 'url' => '/user/pickfile/{userId}', 'verb' => 'POST'],
57
-     ['name' => 'smsrelentless#removeupfile', 'url' => '/user/removeupfile/{userId}', 'verb' => 'POST'],
58
-     ['name' => 'smsrelentless#sendsmstel', 'url' => '/user/sendsmstel/{userId}', 'verb' => 'POST'],
59
-     ['name' => 'smsrelentless#sendsmsnex', 'url' => '/user/sendsmsnex/{userId}', 'verb' => 'POST'],
60
-     ['name' => 'smsrelentless#sendsmstwil', 'url' => '/user/sendsmstwil/{userId}', 'verb' => 'POST'],
61
-     ['name' => 'smsrelentless#sendsmsflow', 'url' => '/user/sendsmsflow/{userId}', 'verb' => 'POST'],
62
-     ['name' => 'smsrelentless#getmessagesperpage', 'url' => '/user/getmessagesperpage/{userId}', 'verb' => 'GET'],
63
-     ['name' => 'smsrelentless#savedisplayname', 'url' => '/user/savedisplayname/{userId}', 'verb' => 'POST'],
64
-     ['name' => 'smsrelentless#getautoreplyconf', 'url' => '/user/getautoreplyconf/{userId}', 'verb' => 'GET'],
65
-     // Settings
66
-     ['name' => 'smsrelentless#getsettings', 'url' => '/user/getsettings/{userId}', 'verb' => 'GET'],
67
-     ['name' => 'smsrelentless#getadminsettings', 'url' => '/user/getadminsettings/{userId}', 'verb' => 'GET'],
68
-     ['name' => 'smsrelentless#updatesettings', 'url' => '/user/updatesettings/{userId}', 'verb' => 'PUT'],
69
-     ['name' => 'smsrelentless#updateadminsettings', 'url' => '/user/updateadminsettings/{userId}', 'verb' => 'PUT'],
70
-     ['name' => 'smsrelentless#updatenumberrestrictions', 'url' => '/user/updatenumberrestrictions/{userId}', 'verb' => 'PUT'],
71
-     ['name' => 'smsrelentless#updateautoreplies', 'url' => '/user/updateautoreplies/{userId}', 'verb' => 'PUT'],
72
-     ['name' => 'smsrelentless#removenumberrestrictions', 'url' => '/user/removenumberrestrictions/{userId}', 'verb' => 'POST'],
73
-     ['name' => 'smsrelentless#removeautoreplies', 'url' => '/user/removeautoreplies/{userId}', 'verb' => 'POST'],
74
-  ]
75
-];
76
-
77 0
deleted file mode 100644
... ...
@@ -1,852 +0,0 @@
1
-{
2
-    "hashes": {
3
-        "CHANGELOG.txt": "69035833fbc77059676f5a0b3f77954abe688726da527a3194dc5e78f98f9e7c99336ac3f6fef3c1a3fdf38d37a3e3ba7cd57f9a1c05b9304d3279e53a845e10",
4
-        "COPYING.txt": "a0a86214ea153fb07ff35ceec0848dd1703eae22de036a825efc8394e50f65e3044832f3b49cf7e45a39edc470bdf738abc36a3a78ca7df3a6e73c14eaef94a8",
5
-        "Contributors.txt": "8ab4ea9b8c38e4d115af6ca08e8e27592198b763982bd166b67f38ee0b9f2b7e093cd58ce0927ae38ee3bc015b129add2ffeb3967288c804da493241bc67ba9b",
6
-        "README.md": "833782c0bd1fa4e5cfe0b53255ec4607d7d0ff4d9a0bd7083985578715ef31005a202b52a7771d8694ef1154ee5c55ad49fb16ffeacc91b98904c8663994c7b6",
7
-        "appinfo\/info.xml": "a716c1a1fd5bc9e20f215f27f46fd36848e90551523d13d132b8ea76c1a6887703d8ce744b21d609e7677694adf7d1d36410a52fc2c3262dee605323329f5bc9",
8
-        "appinfo\/routes.php": "1927c345743ee2d31283d64d0bf3a96dd53b2077951fef73635cc250216751efa9268c49073cb4af18b64c1d621781378916e55ec035b3a525cf2c053e409843",
9
-        "css\/style.css": "7cbb6ffdc611eb76e5171ce1829510f68bdb5f26e888ca04a7babd9a8d9fdfb611370b5b3c39df7f51f39d832706e549c116de36511e93c022f79207ed9e9628",
10
-        "img\/add.svg": "f4e608b47f2e54e92f717c821f99a8d67eeb92ce04a1ef39d58f562bd2378a33e6dc0bf14fe9a8fdb138055e70655eb8e26a625c735c2336499eb5636fedf574",
11
-        "img\/arrow-top-small.svg": "3fba2fbf3a27f4d6b44d1c94da2260d025bbe682a3db18c21b9aa548f4878609770cdaa2e5c24e8b5cd97249647187b7499ab18bcd843ae7ee145def41561bbf",
12
-        "img\/arrow-top.svg": "389b15b7bfa8c90a79cd80958d1150538ddd0aeed875eae3a498b9bee8da3e63752fbc6c073cf58405fc35633a9b786e34b3ca1f6d234af685277aa8d439e1a6",
13
-        "img\/arrowDown.svg": "6fb30b189e848b26369238f7446eb1533327a4e99c70b699c10bb03088eeb7d47393f18d4f16bc03edb945f36cf13b96f05b763dba821c0b04b209cd81624103",
14
-        "img\/arrowUp.svg": "4f6a413d836635fd7e2e4d5846ee257c9a13e80624468e444ec906febfcf07a1c84f48d29cce730f29729cc8fbbbd3dab490e2192e5beb2707a6a4b1036bfd76",
15
-        "img\/check.svg": "aff77744fbd4e8eef8d91fd9e128e9e8be2830a93db9ba8d8a8277e78c8610d6ea5ec9678b3dfd2b8f2b4f8970dc40c4111e7af5011b0873bf461f5fbdeeaa88",
16
-        "img\/clearfilters.svg": "f554eff67f4c1440eb3865ea98b00bcde1f27361ae5888dfa7db1ed95d074915aaba0f6aed3f70d6d7c4cb5ca592dbc3f3175f958708e54830f895e8b652b499",
17
-        "img\/close.svg": "85211855f8b84c1305faeba8f6125ee472807d49917633ca207cef8d3fa27c52752449a173a6191700be158447f3d053fed1b157fe6e20c39f87028aa729ed65",
18
-        "img\/dots.svg": "e4a46301c4b70f3820be8d6906ccec273a96edaaab44d7c133bb58f5499f2fc6381f2029c27d0393e3d31e1cf10bc55ee98f05347fa6af3533cc74290d9bb909",
19
-        "img\/filter_icon.svg": "5258d0d0e3677c10a8ae5d8cc37318855e5a6d5071d5a61ee6d29aad7109292502d60571f2c5ae716295dd8f93a327c060ec7c65f2f9cbfee4b85086682a385e",
20
-        "img\/garbage.svg": "b76cde0659b7f127a810406d2b734f03871e3a7c8bc53acb723c2a97fa6ca0801a26cfebd4ceaa28d2ad237a67a222e00aafaecaf7e749cc8e8f93ae35a4c4f3",
21
-        "img\/garbage_bright.svg": "45bbad63a659b6add876294f8aebda1cf03790b0c253ba442f04fd9677c1a35795eb823dbb92bbf38066e8cdf89fb34671763dabbcdad4722aba3ffcaa21581b",
22
-        "img\/group.svg": "fbc10073fb9f5ac1780ccad2c61586512a922359b48ff76194bc5be2711ba99efcf9ce42a694e4cf1209dc78cf2bd077e12f98590c1fe1123260a23419cd256f",
23
-        "img\/incoming.svg": "c8f6e4c7e55c7fff5c74a87fe14e9f404fe5954a546949f148fd60cae7dd2e9165e883c34f1a3eb5500c12ae2bf281ab1607e04c4b75bd6322571ccf7e6ccc25",
24
-        "img\/list.svg": "2364a4ad93d0e4c85345a293f4f6b0e4135cbfb8b7b5e1ecd81d08affd0e0441439f9cd9e60da77eaa53052ef20cec20b49263e387b500c1fb4a3607b081e73f",
25
-        "img\/nextcloud_logo.svg": "4e0d3f0c371d668d83d443e5b1f69f0eedcc759092601d8fe8710dd97b16fd53aa3f9667bba7f305dc3aacfbc14e29b09b78da8b7bf6f41dcb83f5b16473991e",
26
-        "img\/nextcloud_logo_bright.svg": "aeab941556e29f9537508171583bb3309372866122c150c887c21d6a567c5aa06d2653db67c7151b064d4e2fa25f1fc63df21c786ede02ca5f40f12e5c1bad26",
27
-        "img\/outgoing.svg": "b5be7538df66570991b975b1fdca452144fdc27a14521dfb2ae4d0393d0f3b8abb6837458892e04adbdec0182ee3fd25ae33c6792457154dc2cab6e35bd6eb9e",
28
-        "img\/question.svg": "1e429671b267db5d28a7323d88f58d93540e606e1da88329a7c875d3095126d9ba124f0e46205a87ef31b54bcfa2a41e363314c57de1ad3346c8bf4a20a5f43e",
29
-        "img\/refresh_logo.svg": "a95a19645bbde5e2146a3ec669950bc6029bfc6104886552eaeb4746733657ecbe4f9199e676ee2e9852ef0c5adb612d93e300e3fa9713fc611e1f8e7c1d5183",
30
-        "img\/sms_relentless.svg": "010ad7cee20f3a256a24bee2482b6798f042a3992c7df5d56ba803cca93552c3cda2a68d1772e67143ce45207b89d397e34ba6909f6b8515134db64e2c5497eb",
31
-        "img\/sms_relentless_dark.svg": "cbe97fe9fe636790ea0b415035cd78321ff53ec93ab1276d4ef609555592fa13d09b2037c20e06bbb9024fcfcc0ebb806c89572b08adcfe4ee9d06c6466b685a",
32
-        "img\/sms_relentless_delete_old_messages.png": "077c74a6f138ed1c46ee9426c0c0573bbee12b71c85ae0cb3ebba1ea040b4f88099405d1074a49496050f092e47af03feac9afb85ed1a2480d74d9f07716d287",
33
-        "img\/sms_relentless_filter_messages_by_date_and_keyword.png": "a014a100ec4be4e5d2e09b8d8afc85125fc3f5fdd4379c8338c209a08cfc65a547b1ebbebe6dcc81d05b68081a66982a31f85bf7f7b6c66f441e679743f65814",
34
-        "img\/sms_relentless_grey.svg": "ffac810d151f22067a4ce4985b6c84ec6f6bbf7f1c0a8711ad4a374b838251d3681edfa8439e18c1fcb78160fcdfa20d4f08527a594c5080938aa611991acb2e",
35
-        "img\/sms_relentless_logo.png": "bcc8bc7301aa9c4811ee875b5deb4ed21d9c7eca187970643962f0ae11a7483adc5257e26b307c41644dfef63ec82c4e61a221f133c62827e1d4418928c253c5",
36
-        "img\/sms_relentless_mms_sending.png": "063dcd7d06eced6be8a33c00abd9605ec196c3962c526212990760ee5f157fac0f9778d50d84ff5593a01ea0cdc15d5e848dbe39af47d082909e671f45832bef",
37
-        "img\/sms_relentless_received.png": "1161fbf9e9351510edf200ae89f36730af1c1410cda4186f631d15797e2e484e384898eae1dd97d2904a4d6272f551bb25071a01ecaae101acefb32f855e6f50",
38
-        "img\/sms_relentless_screenshot.png": "5bddd3148637473bd5d0b551df701094c8983e1a7706d753697df1bcec27029b88ef92146c7bc9213914dcdfce65eeaf6eb49d9aa95ce4d6e7f6317f4d9324ab",
39
-        "img\/sms_relentless_send_mass_sms.png": "f8043b8d2dd53058c28552ef96e637072337d1c751930f3418ba8ea7a394507246f35ed98f8123ff1e9e6598babbafdc5b893dbedc0624a2d9c5c1184c6ad60e",
40
-        "img\/sms_relentless_send_sms.png": "0a028ba48f0b86d820dd2fc13327c9069665a327f461310847286bc6ae085fbb7337162b27125b2d42fd7136a30c9dc7f6866501912647899aa0cc7ae676f706",
41
-        "img\/sms_relentless_sent.png": "7aef983c66793540b102f6879151449ad0da60751d89eae68ffeec7b20ac6e84a1d92388fb808d10dbf63f7bedb68c888dda509ea2ecd7715ca8f264e05a470f",
42
-        "img\/user.svg": "d69cf4ee448f7ba5d46fcee24895e8705c297f078d943ecee1ea242b470c5e89318a5eb077c81e9c2a656f903c4e869298cc2935cf05a4a5f79e295dbf86df60",
43
-        "js\/adminsettings.js": "26fc2723a276b61a337966e9c47f331d63649db9383924002a04b251fe1f8dca4ae60f187a3f742939273d6ab2cc763e76274296f1dd500200deb46465356f73",
44
-        "js\/arrowup.js": "819fd1975011e2819502cbe5bd006204122d5e73560f6f7fabe9c9f14c7086206e54c8b51e3b005820a1e2d9d29c9254ce2c1c8687285efc8daf3d667e51e738",
45
-        "js\/deleteoldsms.js": "e949b8a7a325f63bbc78144f1c14a82e9c28c3ed6e420906871220d7d53aba5c1784813f6bda914cc6b5857035660c5a79a74beefce5ed8787a9ae9990f45a96",
46
-        "js\/sendsms.js": "60d41c865dce5ac5ae6fcecbdc11ab8b8ebb8253d0a9e69a29cb60205ce373be42b7f687bbca3cdebafae6461f07a9afaa8aebd4e512975e89108169dcb00861",
47
-        "js\/settings.js": "461c1385f63c2ed97d2a722bc555949530f71d8674d742b0537c663fdd9a9858b018cb272e5df99683f0b03c92cb66395a7def984afa8af2a2d7f121bc5fc7cd",
48
-        "js\/showsmstables.js": "4e0b286ee9f7e3a7559d1e64de7cbebfedb389e20f7a5aa07b6e8f8534a03f8175035333c4cb56d1a395d6efcd8d48f2c680d9342a17dd42a2b9ed28ebc70870",
49
-        "js\/tiff.min.js": "c35f67b587aab62db7a3de662779a7b3264d70f5f856142cae88eadd1b477e474977f2b8c5ab31c16be002cb7ca9b52282e6de533b6fd79a02e6d33815919cb4",
50
-        "l10n\/en_GB.js": "30be5a195908c731891e456c699053a5b9675e5c21bcfbe6f2091f467dab6bf0dff3ea167b9f96e7c6b492d74709d5c732a5eabdbec30c129607b0990773609e",
51
-        "l10n\/en_GB.json": "7f1567f247b9b4ad32dd836903f34ae02cb93c26b34e7eec509ddd1a6e320d64be2d907796017c379afd7a9fd75c9ed5bd00187e93da4100132beed5c16ca74b",
52
-        "lib\/AppConfig.php": "c52269913ee80151397520bbebe4f0c725526910ce18f8717ba1c8016a5f4dcdc9a6f9350bc56c8a6b607ea342ee0cbe0f65afd9f03c31902190c008f41c9672",
53
-        "lib\/AppInfo\/Application.php": "7e5ff3a817b1d46e8b05e2453c34450c5629c25b5c3955593b36a22e5ff0a6a67a197665d476f7904c3dc8712105687153954c22a12f597828247a56a80f509b",
54
-        "lib\/Controller\/AuthorApiController.php": "e546e69712a6e61b6ca46476cff277c80da48eef5799124764359abdec352867d657924b4f84dde8171343d0c6f496ee954da961873e68079383ca221f2a2bfc",
55
-        "lib\/Controller\/PageController.php": "07da5883ea41b3f7993a3e358a03a3db592a30fa81ea1ed0f26a234fcc3824a243316b76824fb9a24f40304ae945c48118dd4bed1f0d2f6993e479ab2c1dcab6",
56
-        "lib\/Controller\/SmsrelentlessController.php": "b68b10f529fd1eb55870a63397bb45ab02bac865053ab8ccaa943d694db2960dd094c09e21274741f07ee91dbb1d08a646cf81f7a5007e6f21871b59f07de822",
57
-        "lib\/Migration\/Version100Date20211106192148.php": "96b9793edf72598c0330aed9f0c6c27ebf02287bd84b6b7a0285fc784bdf6442b560bc5dd2e55b464bb384a24831ae17d7ea144b0896d9b11cb82a27fbf602ff",
58
-        "lib\/Migration\/Version106Date20220813144231.php": "33f1f2953e038350e37c670462cc79fa48ab3a72b595f5fce970fdcc6d7eefa3401722da4cc532c7114d0c8aab7fbf0281afb374a695d5c1c1b311c30f64c9b8",
59
-        "lib\/Migration\/Version108Date20220823132408.php": "5d94388496cd88cec1dbbe67a2e9d6ae6fd5db7ed42d4bc737710d3c51ad4d8ad29d53a62739e05e2986e2d4c96374f4660a53dd7b7808d30e44e5c605105971",
60
-        "lib\/Migration\/Version114Date20221202011625.php": "920ee001204afad537bf2b7dbdb7c78e95b4ad0c79f5f693bd56347a1df91045cd83348f99e2ad714df2a735cf1a1d85aeb385c675ef6e90eed26f18b0b7d344",
61
-        "lib\/Migration\/Version116Date20230508212745.php": "d83244bcc8bda6aca6f408cf1a7f3ca6fe13fa6182fc547766917076016f3fdce48412791043b5b8be41b138fbe69b4e6a6f5bad9bfc3e941acdb322981852a2",
62
-        "lib\/Migration\/Version117Date20230509183517.php": "476048f45ac776517df802a842e98e1cc5998efe10ea5971df3dba233789725cf07185884af6904f5ef9fcf61cf1a2e26488fb60a63db513b4cfef742df884b1",
63
-        "lib\/Migration\/Version118Date20230509194216.php": "e3c399cabe54c59ca854594c249f030856976ba1edad0d9e5fbda0de10c7bb7403dd21005840b340ab22307d2870049c00684d0e1772ccba32036afbbf78a4d7",
64
-        "lib\/Service\/SmsrelentlessService.php": "b2bdfe8206bc345ec34895a9de098f8c1b5901e3e18629ce34505b09686f5769199bd16f09358b1080bc36ace75f32871a8e7b977b711bf09fe4381e53cd3950",
65
-        "lib\/Settings\/Admin.php": "e4e5f6e8fc5748b11c90b676326dc228fbc52fe1f77a07e7b7460c6dbf2a8013b5e0b0f9084aac3f941478ae6ae75c47be17df3d229d8a998363b9a1d289f405",
66
-        "lib\/Settings\/AdminSection.php": "1c8fb26e8347d67c69af385b0aa33be2764135a4672b872b6c6d41bef3eac6733ca2796c393c8ff334ff56accd7ed4d4c38ca50baff2360d8d8be02b9f8a7c08",
67
-        "lib\/Settings\/Personal.php": "db6fc80342c865841edcae7d2cce5e50d04473a9ac47e26c2daabce493bbb1bbb922bbe9eb7353d759965506dbf1b4c99ce8e9c93f5c43769e1064cba19f95dd",
68
-        "lib\/Settings\/PersonalSection.php": "e65e1a8939e3818e7cd295ce86581a603b1e2fedb732ce51ed1fce62cb61ebae9b93742b1d923f08e14cdc6bd5cf2818d47917321e0aa1736932830c05a81682",
69
-        "providers\/Flowroute\/readme.txt": "25f08fea0f30105e850dbf07bb7a9351e47883640dd87d26981cf50f02ab5af8ef59dbd1fbe5e4127c0e019e13ce036f9414401b9d3f3a924c4125c291e53446",
70
-        "providers\/Plivo\/composer.json": "2d8def5ce9444d4bfe4ff32e008e6aeec924efd40e0cb61f3a72585fc4cf89e7b62970e796d56ebdd5d2f6378f39d3ad540ffdd02c31e2c4daae9b760482619e",
71
-        "providers\/Plivo\/composer.lock": "d9a2b89de334156eaded5ca4cdaee9b53c05e5d78584faf000a141692225a1bf6a1dd9ea6259bee2158ca7669c4000b3c366703fcd1f55a835278aa9f653c7c1",
72
-        "providers\/Plivo\/vendor\/autoload.php": "597387bcc320be22e8b0060c456fc745d8e3fbb06cd1cfbdf093b0ee52aa30cb7e4c31d6d8c38450f52387c0cd5f9d0483e3976611d96f391f5651b71d2095fc",
73
-        "providers\/Plivo\/vendor\/composer\/ClassLoader.php": "2b6fa585122ace1ba816410acbd8372cb75329917aae6363dbad48e396cca581452616e1386a2e445a8fbb0e461b988279103f4f89adf704bce7726f761abf0e",
74
-        "providers\/Plivo\/vendor\/composer\/InstalledVersions.php": "62b61a5303337c975905fa55addb6b1157034fecaa5fb3b5bad251ef7fa1b1ba840308f64fd2e1244d2098b7f87431e35939a153298530cdbd82f81b99cabaa2",
75
-        "providers\/Plivo\/vendor\/composer\/LICENSE": "f3bb64009f41a425df5a9bbab53490f0eb9b74fa8d6aaa2f57efb928edc4ffff330260666edeaa04a91fed708c3663371cf01b284f3a08d6698aaef7a23f355a",
76
-        "providers\/Plivo\/vendor\/composer\/autoload_classmap.php": "1844f7843fdaabef42d1d9e4c09f92f51a5ad45b26d44b34a2aa9202a183489239a0f5ee6502f302b169ccfa3a4bea7308771ca02d3bad96095b5b2194a65377",
77
-        "providers\/Plivo\/vendor\/composer\/autoload_files.php": "c0eaa5b28b83539deb67f24a98ebff5ac0483f9117a72d5cbba02e26f1f18cd4c93ebc23786047ee61eeef11961c55ae6cd4d4096a16f18a19d2af49a47820bb",
78
-        "providers\/Plivo\/vendor\/composer\/autoload_namespaces.php": "0ac6bde683c053d62b7024686ecced083ca1a326d5346a248b1a058ac74a5af71d515d311ce76df799a518027f734b80b9e7f6e8022a9556c0f24ce90240d822",
79
-        "providers\/Plivo\/vendor\/composer\/autoload_psr4.php": "91bffab80b2ba961f206bf3008a7380f81b7cac7b09afe4bcd2d4787d8b4c839ffe2a67442e04010918631b1c76b66304e7d7bce76371e741b444f2ef527355f",
80
-        "providers\/Plivo\/vendor\/composer\/autoload_real.php": "2ff5b7a817e3acbf585fe506b11345f6f3ab0f21c0ee96c67037f09de6130126d4c0e728ea22508192787a451322369197610726f96f32a12f91b7e48cee86a1",
81
-        "providers\/Plivo\/vendor\/composer\/autoload_static.php": "4fdf5e58875a6dc6bab4aafefd254cf3504f78feecdeda5fb431a56f84b37d2cf8fab8e233ecaadc2667f1be492ded264423f3200e1095aa507172b0dad3f60b",
82
-        "providers\/Plivo\/vendor\/composer\/installed.json": "0365a8c8cb376a0b3ca8cdf63147012435d2488c5ab585db3f9e0d926b588887992c1c8cfe07ac187f5f72afa9a3db936c6885d443db444147d7c87ff0f3084b",
83
-        "providers\/Plivo\/vendor\/composer\/installed.php": "923c151f9cca2fe9489aa4cfe04053d20e1923dfb388cc6aea2486557d77284fe6d9d2a77a7acd94496237465f03b712166a2f2f5837ab13bbb7f0aed8d52552",
84
-        "providers\/Plivo\/vendor\/composer\/platform_check.php": "49e79f2c7c1c32796dfef02f64feda4fc8fc5aa05197465fba579997d332cb9dfcad3511efbb34a32a2b2c8d8901be4ca39867026b2471fb17999ba840c3c340",
85
-        "providers\/Plivo\/vendor\/firebase\/php-jwt\/LICENSE": "6f6cbdccc57476f5386f5336c1efa105b4116760a329ae2fedb30fabe1f34f7c1a3073e7f711e07284c8b57b3b8ab6dcb38ba8d71f6835ac024ad524ad658f94",
86
-        "providers\/Plivo\/vendor\/firebase\/php-jwt\/README.md": "8f3226941b2d676aa31b66f5a38f6fa78a4073ec7ea6d6a3aaf0209072cbc8df2ebee65f64460e350f499f8448542443f9859db75f927fcbe70f1f59384e1a70",
87
-        "providers\/Plivo\/vendor\/firebase\/php-jwt\/composer.json": "82e17e8f606504476175a3c5116bff37c3d58faf5fbd9590cc4047f787b6aae79a84c660bf2e8dca453b998926dec84e6d5bca5d81b6817e09d99c6774cd04e3",
88
-        "providers\/Plivo\/vendor\/firebase\/php-jwt\/src\/BeforeValidException.php": "8aac5fb14b6d94bcf048a1cd4935af09c25183e74eaad8f2db19902f1f017a33261707b12be8080d5a662bd01d997d4d5805cfcdf3127f447feb6ec6b971f563",
89
-        "providers\/Plivo\/vendor\/firebase\/php-jwt\/src\/ExpiredException.php": "7cf0ec0dd02717f5152abf5c01979526fbb89f04c01802915745097c8606e432b41a4de5bf92b7cd1543b37a939ce8e133b7622f29cc48798c321654dfb94a3a",
90
-        "providers\/Plivo\/vendor\/firebase\/php-jwt\/src\/JWK.php": "3f134e7503b44f882a92a699dc4cbb4d7415bb93526438e4395cbe877ab2da700d3ef7a8c037d7d2ffabb84e20165f93e338bb32c2bad9426e63708da4f842e3",
91
-        "providers\/Plivo\/vendor\/firebase\/php-jwt\/src\/JWT.php": "9e5e21477b0495c3cc6fdff79d9b6acc136c0187d732cfa4ea438d9802be4642c2fe0e76b288238fa29bb0a8e37e31d57546d548519436dc49de467cfa704ed1",
92
-        "providers\/Plivo\/vendor\/firebase\/php-jwt\/src\/SignatureInvalidException.php": "0c00a3a08bf4fc2eb675fe8ad3d8cb732a82a8f88d37dba5e510ec798a49342b8089098dfae1f1ef1906e62a4b8e465fb7b4c6d17c9c0d8e66ba33ab271e5c88",
93
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/CHANGELOG.md": "f99b50bf2d30b8e842d2db14a28068364b330b402db7bb1fe87fd4e1e3a9009edb05a519a4c35be68ba99c4c334680ff52ff0bebb84ab99de8814959d34e9c90",
94
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/LICENSE": "ed4199d68a412c0515450194549bac0c6a6d838b3950c036bff6c97457fade76fc914d11bf008321b3e2622ef0a3c14da0bee2f109529cfa5a5fdc11fc6452ae",
95
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/README.md": "dcb463420d7da1805c5cc020988f60c15fc5623a2493556ba4bba63d431c21f0584c1e65f27bf0a4c7962074aacf40d763981f878a10e12327cff9b89204ae57",
96
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/UPGRADING.md": "4f2540329c6e06bc0f05a574b0ce5d77ac3f7fa4032371665dce41a766cd28ee12a0b7803ca507faf005f6a3ec5107a60978b69a4fede8bc562333b736576f55",
97
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/composer.json": "8746b3c8b0fcf0ede926b6a60b4d34e7a3e0e9664aef67b34e7e238c25179d22ce599e8c4a580e9f3d73122a0c9b373b87526874c947878ab339e662b03c150d",
98
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/BodySummarizer.php": "649dbacf3be500e6171769c18b1eec1888bfe831dcef8464ebce4461d5fd337c60a200d3c89f9bd7c2714c0567e5e220b31ec2970e7a013f914123824ea324a8",
99
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/BodySummarizerInterface.php": "d0a1271ad03136dca5752c0dfaa7fa678c6fb03890be828780201cd9fbdc8169ff4fd7c17867cf82ef1672ecf0e9f871f682ade1a8ff37e7b84d24c572e1b962",
100
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Client.php": "8fc98c3490398476a81f660a0dda38306acedaab2f662f762881c11f98bab8b5194ea6c05477bfb2676848f54229087df8fac0e6aacec6499f2313e09b940ea4",
101
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/ClientInterface.php": "d1ab53fbb1b6695e6537050421b3a749a7b34b3184015da449a1c76987fd6944bcc1c4cca7247b98b338926af89fa477f9be4897e6316cefb2c1656520c3ea2d",
102
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/ClientTrait.php": "ec1e95b2f1c56e4443c6fcf695ede88e02f1129b7027287f968a0ef2f7debb7533ce2371a27b5ee07f78818786b0a6d1b3d2f8ce28f44f4a8f7e275bbd1b6727",
103
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Cookie\/CookieJar.php": "3fa0964d59cbba956bb47fe103f02e4707a2a6ebe5a60dd5c33f59402a090b6f0110c2795b52f961f6ddf338567382e1248f1e27bf2d0e2033a43efd15e2705c",
104
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Cookie\/CookieJarInterface.php": "a3c6b9138e285d6c6b7521dc7059a04e1c80bc0de7a925c93ecde6c95cb7fadab91ee05e9594d6b891872a557a1b98fc6717ca1d1d46e00992c9cdcdb934a71a",
105
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Cookie\/FileCookieJar.php": "35111b9229059f54b537baec960b8480d5e3caf2961ca3e7e45de3fa5ad5bd0b0a91c2c4231f6386a4966bf9d97aa308a7e444000dae9b21f8c58b6832dee68b",
106
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Cookie\/SessionCookieJar.php": "9cf11d2908913a7555e9e190e6a4ffb0f0e26ddb3d141faeb0e7bafaa6f0b3259119ce6febb6d01b5a7f5a3193f72a099f08ea45b5955bdc7120bfd4857879a6",
107
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Cookie\/SetCookie.php": "7d6c4c14c9d652c27da23923cb577fa999e24f81c1b82f13fa329da3eda3373ba7a832b72d793d924fda9d6a3a02cb39db97e49e17feab3ecc93f395e614d44b",
108
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/BadResponseException.php": "4b7a572e9796b8043d56dc6650709e59bde237b3bacab1206b807485cc850ec99dde86892696d73121c345f1c88a9d2e879dc91be2cd438defe2609e521011b4",
109
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/ClientException.php": "0011418b0cd07eff70f99645a008c30e9a6a90b9ec396e8cf70ffc281140054bf313eba40d97ed34b59e04e5fd6712330d34268353493d112b8029c1c42e5046",
110
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/ConnectException.php": "bca929720f3f8f4484899b18b40f5d4d40ebc4105b316679a9349b97200c74ad2ae6408e2362b4639bcc4a3150fe63ca1e08bc1b159c51744d76466c41203c83",
111
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/GuzzleException.php": "444ae2d2847cc99d9a3895e2d23f0abe59bf0eae279809f7a4983e34098ee0a0ad7408d251df821c4029621060aff1ea0dc890615535ea4368e5796151a767cb",
112
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/InvalidArgumentException.php": "2647ca6c297960b01b29435db7522ece3a997def6b3af71e26113abd43ca4493501c130e7767b845db0e723f9955164ce33664d49bd67a45bd29d270a66e0e3b",
113
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/RequestException.php": "b0b3163e4eb96ace90c03faf9406b89ae21c7cd5fcabe78035d5d9e1e7ba0ff72bcf31b877ce2d5cd38e940cf0ead52659c3637dfa3567745fb46a11cc9de31a",
114
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/ServerException.php": "9cab599fd913d8f0bb1b8f448932ae0b5c5b1cd7d83fc4e1e4c13fec29b0a849a5385a6c40183b8dc58404ed020227b9ea4483ac89d135c6c82e4c7985604044",
115
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/TooManyRedirectsException.php": "99c4e6f908a5dc03939ca083232cf48cecd742616e00839ae25ca173ec458e6da10be2690b98588b76e0f3c24ee7f35c09ed5c848f9348c639c414aecedf6c2d",
116
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/TransferException.php": "665600a8617328454b70a43fbb72c81ea196584dc22e10324b3c861974aa55ff5867b30b86a65123f1bd4fece75049a9f6c4bfeef5410a9f29913d350358178b",
117
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/CurlFactory.php": "1dd7a848ab73a8db9354fa2f0461a995320ccb677b29464812a484730a85f405d8b6c9b39783881b299328cb8f99e67b9d959b00672bf60a4559b136fdae8119",
118
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/CurlFactoryInterface.php": "0d063ee120e0ff6042a58d29b109bf6573494d427e20184a4d448ef31fe0cb0cedd60bb47c7289d5f6e1027413a28f9f57921823605d4f11086da5c9be8c0902",
119
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/CurlHandler.php": "ae0388a0146bd0cfff1c597570f58acec92876d3d01298e1988dabc717ffd76895b45359cafd7bbc62ca1fb5e7e96fdab70697a2cb469c8c5d0298aef12e44e9",
120
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/CurlMultiHandler.php": "d03d4a374657d671554d06e5622eef0d1b06d0a39a9167ec6f894ee28af31defe1d4306f937376cf5997c1421643e08e757880e45a1c9c10959c967022160f96",
121
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/EasyHandle.php": "7438c054921687fcc4bea6ef6b49aae15651a95cced2cf73ffe46bb15abdf924afdd4784e8d2121ca851934fafce69d3661f1a792e6f2352cc5f5c1803ace3de",
122
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/MockHandler.php": "0d8e2e43e0b8079f20de6b86c241afdc83bb5bcdc5a91ac47084ffdf2a3904a79e5db6fbafa4715785ded8fb90dd8fc418aa05bc0fa8c52220555720f81e827e",
123
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/Proxy.php": "9caf11da430da351eff6e9be0a1e8e029bce41283a6d8215e2215d6abbd3f021018564d1e6717f65f280703d5e4dab78a2b522042d63c5a9cfd019b0bb0aa4f9",
124
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/StreamHandler.php": "e45738ddf123fa57df229fccc94622b9a2ad5dd9bf6f65d24756239b587937bac9b7a37220e65c55f2abbd7159bc16ac785893d4aac5c192e6422af4fc4f1222",
125
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/HandlerStack.php": "900b9df966c3c1f3aadc45bd42a81e8ab153c74d0eb90cb3c8b2f9d46115353f45e5bcaf0eaba1281ab98dffb3d136a0c0fa0058fe73d906eebb741b273c150a",
126
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/MessageFormatter.php": "99460bb55080cbc7e08eb6f1b3c8abc71c38cd5d6e04422bdf8144ca554e7d7de29fc5d5dbf7aab5f7440c4ec9d779d684f8194f90139a1ece1bb086f14e3cc5",
127
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/MessageFormatterInterface.php": "609462659ab00682e7fdd1bb56aed5ad3cf54a2ee3b641623175b9dca0136b4e1cbd3cb0541526ed86d05174a18a9333ba52a9e50f4c05ece55cdc636815e385",
128
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Middleware.php": "42fea3a5bff7eb363a7af1f85a21a9322aee8d7e343295209815739f8bbd5dc372f14e3e8c5454f7650a3b9d802ca25fa069d64fa16b0f5d4d48c3d626ba3527",
129
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Pool.php": "a6d17779976754d7c16127680ae32f8e45ed54c3ef4a2a6364a1e4100ce732b8494b2848977ba6b2bf6fd296d7a54b30a2f021cba5a88ddd0d1e0f3a3712b9cd",
130
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/PrepareBodyMiddleware.php": "268182133f0e484b56fa23193d20def23166eeabcc2fd9626b17cbc20188d76549adaa4c768df695b787d31b2eb26a5316f0a3531ad3ed022aaddf0574fc2ac8",
131
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/RedirectMiddleware.php": "38bbd75b92a6764b0502cea113e222d5cce7abe53c7ea0c01e441fbbb6b0514f2f54388ff14d459ed611925eaf9b48c0aee1b1fb41892d07d1b260734a1d2afb",
132
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/RequestOptions.php": "239e524c17dadb296efbd8b9ba82b94ddfcd90c83377fe4bf2890dae5dbc62f58032205274575f14bb2e745112ee59bb559936b992d9a227dec00f5b2e32c03d",
133
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/RetryMiddleware.php": "01236bb2265c0761148ccdda7d3668c10f9539119bcdcc36f10d077ca32013ca0169938d6f4bd0703018f38fac53b2bd34e873a07d8e5287c26fb64b7284dfe8",
134
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/TransferStats.php": "4fe882f7f801ba55a3934e00d81aef09edd092eadef498f3bb424f7f32dc8d568940806a9d8e80b1b6c768cffd41ecf0814a0bb366195b2400f08a8e310a8c19",
135
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Utils.php": "c3e52199a0a1755f52b6902b78d008de10e33ff8b93242a709d7a12e8c05c1c2c09c2874439606f0f3ce6b353bbe3b8ac385a236307b428fbccc078e1959c7c1",
136
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/functions.php": "f45c62cbff0de0255f4f149ee3e93c52bdae44492d43c9314a48d8a793ef028f8a8f704a2b28c5b84491687c3b682e9f85c4ea61bf63de56c6cc6a4ba8081ae8",
137
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/functions_include.php": "058a92f735b5848dc18be383478bd1659a0b578beba1dce5a1ef3b7a0b6b5f643e2f222dd72ed09ec72e8a5c5c9fae9757979f7c4016c5654bcce9d7dfd42d37",
138
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/.php_cs.dist": "4d42019074dff2a1a5bebfa51568de254e5128b88ad309bbed5e8348ef213035cf3a4da66ae6753354a0dcf6ccc0001bfafa2453028bffb3548f2ede26c30177",
139
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/CHANGELOG.md": "0c021cdbfea029de4a20511445e64d0d6c35400025f1361cc913754adce9b2dc16efeac12cbdd489ffcbb76e95f91108dcc557fb9dfdacc99e5bb98f20b55b43",
140
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/LICENSE": "9699a00cb2c5ebf932515e1232b83f79c944f8100881df096de09e25222fa01173bf24d9e083db7d9605d1e4f5dfa14c726aed52c0fc2499643714a9e64c4cc5",
141
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/Makefile": "a350f48cbb68a05cd07f787522193851f9cdc6b2643e34eb502fe261387d97e5ceb8499a22b20ff2fec5d7352ff239a952fa3b129ba3407fae871683d65e9bbe",
142
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/README.md": "1ea705deca28d726cc65d0f55db886545b9f5309ccc085bb482f627a0ddb5f8609d6635f65686e3e26b9a23cb8bf03b3e8d02a26d25eaf8195dc6c2cc93be0bf",
143
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/composer.json": "74a66451bfa422f886266ff300b4ca5f7b0ed62199293635671718caced457f6eab5b8c9467f24e999762f56368fb35742dc0adaa35a233d32c72783112a6c50",
144
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/phpstan-baseline.neon": "916bcb7d298578dfc4770a3c49ee558eef9a20dbff8e3d097506379c8680917b08a8f96f2b59d96b1b56b1ccf4a5478c868a2da504a1935956db70f51528494f",
145
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/phpstan.neon.dist": "ddfcf700a47b916ed1072c979f13d6d51327c9bc389c49ad264ba23279b01151b90aaeef0a81a13eafd40115d407ceaf471c20a61b47f1b4796f8adf3c1ad218",
146
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/psalm.xml": "52c09c8b7daf6d90db16a5ce50b7a8ce15c1ffa02265fd1d4b117cf717331475245bfd4f2dc45d3990d67333988a11081e13ebf783bca8854a1df9c1b0cc9cfa",
147
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/AggregateException.php": "97b6e46aa16ad26a2b714129b83d933cba02ec7afcda514ef67c5027cf5b9b93a5d7cbc72560307adf294179a4d7b86a6da9caa835bcf5be17e398501bb88fba",
148
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/CancellationException.php": "b958ade84fa4e6c7a7efed66dfb6a7f83b9743a9ac6581276eb99bcab667ebcdfea92a9bb114d086c5831d26abf7f6ec3e03254067e2b29abaec995e28cbce8d",
149
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/Coroutine.php": "d1c789e47536cf8c9db52acf791bc6de0d61790856a78f0cf6a9c98a1628d2c42cdf9e5e94e05fea802a099bd3ae3c65b790f2fb5a342bd130654c4cfb4fcf07",
150
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/Create.php": "a3651bfb1f458675c58397460c8534c2819404fc89422467f119de4cd80147177e462a9965bde6a75e74e4354c3c6935cebe1891e6a53a1bb26383f22e9dbccc",
151
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/Each.php": "e57ea03f69e1680b56676ca1057e8defe7eaefeffb456b636f3cb32295eb6be36073c7a9a621f656c40d5661c0fbfaa3a632961d82ec7f116ab7fb5aa9db196a",
152
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/EachPromise.php": "c7d79757cca80b7352ffd12a6743a515255e4a89764f65067035b16fe39c09b6dabb833aec3fad3cb741aefd778f620202caf79e98b86095c6b252f4e555bbcd",
153
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/FulfilledPromise.php": "952eac7f7cc150394dedb72ac97e624db8156ecd41c8afc382ed0cf8e4c2c6c94879b7ddf6ff76608c6a95ef30ee136f44fa03ab9f5ce4b7fa01bcd0c7e7574f",
154
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/Is.php": "894b3c475b5a828e442745507fae4b35bf394fc9fc93905258f9736a67112c321b1f3e353f8f3fb84e8778bff67bd9d27a6fd5ab6dab3218a30d82b8fd14ae0a",
155
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/Promise.php": "bbfba94124c36b87941e1548162708a5543f156d64a8f465f78397a02bdc34c764b60f73d5e77a3a2e48727f4cbd91f60b9c1cd47c0fe205994c4ffdadb99c5c",
156
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/PromiseInterface.php": "8d8d1d9e04d75ceb6d3e656794fa93170a3b1f9c2dd3b53ba6b4dd3e599f880599cab0b1ec15eaedc1b26d09d6c535dc9fe92802ea8ab1ed5927ee8cda7cb9b3",
157
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/PromisorInterface.php": "1058176a68078d02c288528673176648e38d2b8093e67b0984d73ebc710c0bda7019689303b1f064726cbbfc9382e733443e9d5443a77715ba40bb798ac79e04",
158
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/RejectedPromise.php": "53914a46ca238b8d079333f9c71180aed015a77bf765cd2793790dde21fa7fcf67dcedc5c797a1d7caa06d788bd9631628712861b1185f3cef9aa63260aff0cd",
159
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/RejectionException.php": "6dae5e0b0b47538e5c94a3d4890623e3ec41be8198a1d00ca84d77f32b9d074cae13e25ea90e2af614e802aa28271def466e5ab623c187df49425cdfc5bc05f3",
160
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/TaskQueue.php": "431a73762758dd08406a41587115a11e61f921cc01997ea71efd803b2e3882b9cb7f6d89694e06ecd2992f2bffa38ba55d631dba7fabfce3b84d68dd4913a02f",
161
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/TaskQueueInterface.php": "f0b2b36ffb75337c590f82d3d7d19a4caa4eecd6003c0bec7ef935604dfe35f4e960f49da7115b3b3cf65c61d04bdf258310ae1b4f4b6cff4eb09f52626adc11",
162
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/Utils.php": "9bb1eebf4d0f43bc47cda6f70f08b3fde962355075bb87d40ec75d41b552c262a79023a72e2e8d776b6d0db1ef1d412e398ae16d96476aa5c72afbdab9d5a9fc",
163
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/functions.php": "b756c2bce2557e9c6b8db2ebfb026354418c93f54169d1e9249478532bb02e1062c30e14060a3bae195098c74deb4f7580943aca944a162615c44139acfa7861",
164
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/functions_include.php": "17063296fca8aa655e7d5267abcf04051cd58fab5a7ff02530e1becb5002306252d5ec55c82461cc51f62c881c51dd80da53ed9d90640b6d0dd56d5e8f819022",
165
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/CHANGELOG.md": "0540da857957565d77741b846932c739e0883751660d561b2a0990a7cec8188573c2d31400cf9f125d1b6eab482455d19f30a8363354341e3c54088a0c418e7a",
166
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/LICENSE": "5d25479f1c9c0b802e2944e029d7011f9b9d3f7b37f7c12eb77321ba448414f79b0b254c0846d2e5e1b8826bed85d7c377803a4ad5d5afb288f220c761822043",
167
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/README.md": "b9759cedfe2199b2477e95fc0770f35ed6a4a18c6e6b4b4e30a20f75945505dcc76834e20e61e3aed90fd790c677536bb43f593de8a68558a200000eca8d0bdc",
168
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/composer.json": "27ad0b2937068e201fd0312a7dcfba706a8a318ca4e09d80f29611803bfb28d48433ba5f2b452da8bd76fdfe2b9f073f81f2e2cd6fc3e4223b20637408f6c836",
169
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/AppendStream.php": "d94d352d6f640589e84fe2aae0bd20880c4d6e897a29a47d4dffe6aed4d852fd5df274db2e68124c7f15b84d6f4fc684873fd03d003db39caa61b024b053e396",
170
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/BufferStream.php": "eee7de67e107fb33e8f97949743726a30e8201fd874490fc93870a410b1e0e3a059b75dda972b3a844b8c739b9b768a73d65c61bf8030589d0d787aa26f70e8e",
171
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/CachingStream.php": "e9b1e3d5e2bfae610677b9d216643be7b2e8b97cf661bc5c67631f994df0dc88a9a9ac7bb9dd68fcfd2ed343cadbbae227a8a46baa3b732733497e24f1338be7",
172
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/DroppingStream.php": "63db37354a2eba98b768f0929ee9a4ffbce1647a79cc9aee5e994cb693e53cfdb9f7a0fc4c32b68b46c64b39438b1c53a30532f5f8fb442f07062a6b4861e39e",
173
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/FnStream.php": "bd25e2ca8ea196a5e876c5b9d01c6f2a27b206f7ba05d047cb46476c52191a594f1280c7435b6429e4ea411fe5fc01a2388e213df26d27c5ae5094a0d0f2d619",
174
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Header.php": "27014466522ffca93b4a3da6e96a5e8501f11691f7642a2e5091f3d0c1b146789ea41fd7fa1e3948f264926e7b764b557b1b564a95a7b5cd56c17c8ddfb6b7d1",
175
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/InflateStream.php": "e19b69eb2f1d2f8782f7285414095ea810f746d02a447badef5ec7185623235f17f5689682b185ba124e71a19b0dcf3d36b64894d183e25edf27f1d1e34c1c0f",
176
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/LazyOpenStream.php": "8c262a2c574767d61a9eb084d6848bef77d047601ec5688a90fbc012d5349d9b4ea188444fe509c8ffbcbf6ecdfd839a461505ed3746b6e1c5283860f7fd4a2d",
177
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/LimitStream.php": "81a43b1ec261207c1a52faac2c5099a429e43083bbe0c9099f447859d2ea12a45d30e7f0b5a994696084b3c59401bc28564685c432644caf6a9d8b9669404c91",
178
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Message.php": "4e9b857c226b57e2d2faea27643d6f213bba65bf158889a528fd684cf1acce6f480805d04da39a32fbd25be9fc51c4f1a3c1bbc9e92f3707fcf33a120b2aa256",
179
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/MessageTrait.php": "367bacfe383be2caeb0064fe80e5f6b138050dd4189bb65ff82d8f86d0b1b604090b61a2473d7e80c733c395cb893fa9eb2dad0a63a353c19da32e940a1de01a",
180
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/MimeType.php": "98467f19beca7d4239963d4d91a7896d44539c13a5c694c4aa8ec68f3b57031367d1cddff19fb51c389393cd1402a574c9afdc448766c8807228d726796d2e9c",
181
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/MultipartStream.php": "5bbb8f71ad1f2f421eac8c0d40c3a18372516e8ab8f2bb3f917871bec9aef0eafbef930902084aa3ca64a8ae930edb1f2befe1e6b49dec387ea239c5c475c099",
182
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/NoSeekStream.php": "f003ec01ce15f5dd56200396a84a2c94a1b134d320230983ef91efb1abc770827018894a1b8d1f3a68c2aa481e8f0bfbaec4c568d0b0fe251a61f76ee22efa38",
183
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/PumpStream.php": "15192b83cabf910107b30bde59197618e524aece85f9d396dcd8459174fe50a1cb82de51e5225b8e6ea64fbeec7b4d94f035bba2ed893efebb660105021fc98d",
184
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Query.php": "8ace1f141c08396103431803ed35e1bf247fdf7f7c7b727ca63e58a1cfdd7e353a6c266c8a7bdbb863e5d290414ea630bbe37f55f275cc5a5b946b794ce01740",
185
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Request.php": "e0582b7b304fddcd81a214bd8ecd4db301479eddec3084b18b822f5e22fbc9d1fe3f3d2f6ba52959619dfbd0e98db304b2400e67675fca41f470ca6126085da2",
186
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Response.php": "32524250d58fba5c152472ed37160a9aba92c586c9b2a6bc55f97134e490636189bc8708fd8ca4145478a5bb20ea51b5bc417fa8d61ab08fab3479a04c4506e2",
187
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Rfc7230.php": "beb2f85fd643c3cdb3c92b401c4df1385bc6fcddf7dfbfbed88396611438720a1b86ecb9b913472ca8edf1bd9782a3692b2138195fb366ac1b8a7f1b0b81d390",
188
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/ServerRequest.php": "f3fead87c83ce2f73b2890ec79cc620f319c59ebc41a041e4b70b38bb1e412c928fd7ff0f10d96fffed841cdc1ef2874d5ddb0e7cfbbad3ffa81ce7484365c05",
189
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Stream.php": "7d108ed410ba89cad35637f837d97f7ef53c43a4666d0502e3e7dc4aad06e7bc365f311961d2bb8768faf9d9c6d64d09e080aa9bc65638084a127e7a563acbbb",
190
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/StreamDecoratorTrait.php": "e1b90e1d97a4a1ed1eb1552bcaa9011f79733167b7e5e3f2af8cfdc54adf0d64a414ed630ec74418020fd8ecc7c75e43db6bbe0fdb9ec6d3ea928bd3bb3f4561",
191
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/StreamWrapper.php": "7ed1833a91a1f56b743172192b7ce4399928b261eddba6bdcdde958bbeedeadcaadff4fe5b3913dad0e4b2cd9346f47b43849cc65bbdb839c9d9e4b586638eef",
192
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/UploadedFile.php": "a66f1119bd7327a19315456f17ac2d3ecb40e564705d41047a91a02b431efcde1eab2750b2f354fd2f5c10c1ec1b5968e84e758d51210f011dafa8df5fb35c0c",
193
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Uri.php": "fc5c81c97687dcd34ebd18c6714479eb6b4d1c7d58963bf7f1f732eae98a04b094dd9c99d58f4bff265b2faf0629a456c391ab5b96534c927420f51a95dda637",
194
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/UriNormalizer.php": "8992ef486358f43df4a9567a6a232ad76883d9c7cacdc94707343e5465c857a4385739f66d0024136df94c59e60a5ccbf1850634a55f2cc1f56adddc717434e0",
195
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/UriResolver.php": "46e4c0ed24579ad9a0cf467141fda7dce6dd3a3d3281a1606261f322462d1b19bca413f3c5590b7ad42fda1fc57e60ba86d121b5af0c5b5a2ea21bbdf07f44fa",
196
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Utils.php": "be75312627f929b2ac94cd6d12972816a13660a40d25cf87f6fc7fb7af416316ba8988656147a16becfa8120ce2a484c84d9f399b43dea2cd3c7ed916f7d8302",
197
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/functions.php": "f31604b89969730b482cd03a13b1356ff9b91324eeaa9ec45a45f86be2bd52a8209cec55aa878d5875a3c82fadd86848d558789d0072e853505d644f0a2603ab",
198
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/functions_include.php": "5b85d1438039f778c454f67bfd3ff2933d06b1aa4bbf9dc516e385bd36cd749f7001de6278c5a1b4e3c5a7d280876d4d35337f87a0dcc6e521ccc20a3ddad1bb",
199
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/AUTHORS.md": "bd202fc574c862a7c3d4a27653605b6fa377823744a793a7848ddaa7001166fd645d6047892d79c8488786d82fee785b87b19e9af1d04512503eb195bd300aad",
200
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/CHANGELOG.md": "ef87f930b797ba0b32dec670491e021b5c881f6986624c1906d8f910e8393b37e6d7f5eb9f860c1bb8447ce61a206bca80db4b2279c57bb064a28be3d83690fd",
201
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/Jenkinsfile": "98d95e7185d040e9aea6e75118ec17ac34e38e17f8ad5a38d869ea02c0c9de5dd79d208a78da23ccb87444df7b7de827b314469027ee7573cc51423521786320",
202
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/LICENSE.txt": "0974968907abaaf61b640ece98a502e3c677b7cf734ccc82cb522b3e166c50eaccb189b4d31b03bdfe8e61a97b3ce06917a7ff5c7c60887e2ae944f909fb6e72",
203
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/README.md": "ddaea1367057ed09023311b6ce37938985c188fbbcb6867c6c3ddfbdb984b954e42fd6450d1e5cfe10374ddc4448f9b96d6130d465983d634ddb3c0b01a276a4",
204
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/ci\/config.yml": "d50e43de2ba68261ae35625f8ce984903baffc3c6535d31a7fb3c5efddd08f71cf0ec3aaf22ee9e17e93852dd99284b653b343a053ba50a45cf6716033131e3f",
205
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/composer.json": "c6b4f35c928d33d62b48139a8be5d85868fdcd0716380865f8dbe0f5a708600ad7dffb3ba510a45bf4a8002f7e1fbefb1c835de7e3e2d9b7c1cbddf9fa2b565d",
206
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Examples\/JWT.php": "ee8052cfd45be4eac77df60902c518a14bf2df07ae7218322493a8e2d115280b87c65f9637ca766a63d82dce36c7c78e894984dc83031a9b7a8d5a6345d38214",
207
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Examples\/Phlo.php": "f9d6482c51987aaa3d7f0db59cd45030e17284262681866999309205161094d96a55a39dd2898d0b7980074d764e1bde6cb6ad1f50be8a40cc9d557431c1bf91",
208
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Examples\/SSML.php": "932a827eedcd81956c275529815a2f7542636b0cb887fcf182648e8f972006f6ba8ea4a763b3de48aac989f26a5e44752c7d3a62df256ee2b6a1c922de677e14",
209
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Authentication\/BasicAuth.php": "42c036c38225556834ad5cb916db0c4783c7127909053ef623e7f71aa51c9fc968b9523fe5dcdaebee769cecdb0c4c76215116cbf5959b268c8792fa96754531",
210
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/BaseClient.php": "029f2be5a3c7734b5030b4fa96e0d7c0c1252bb7b30b9f001a78abaa646d6d3821a127859e5d170ea5e3c7f5c86d06112f28152c5cb2315f94dbccd318f9e5e0",
211
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoAuthenticationException.php": "7ee7458999adea1ab1722358f669467cb35265eb616ef2eb16e6bc3d42a7f3c2fcb0b42655df8f4f21127bfecded765bcb479a6923dbf1a184e00f6e26321ab4",
212
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoNotFoundException.php": "bf54dd70534e988c27d5e7d17bf8edf9dc65191b77677d9ffbf95ae3bd019f1ba368065e82440e04f9a0d7045cd62b5915943273b5d8d72ba01676ebf2975edb",
213
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoRequestException.php": "6655a36e42e700283235b84889088e378bab6861ae98ea99c20bde017ed39b83dc743e5c166e8129b9910a434b119578b23523fdfd5e9e1dcf3d57c5cf9375ef",
214
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoResponseException.php": "4f18628f90b1c5142446f0e394d5071a91995baec240344a1afa47687ae463cdc3dd18a79008813077a3511c1b00dff7a8715d26990afcb6f9726598c96822f3",
215
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoRestException.php": "758babb40ea45fb50dafe5231605196214736f014860618af9ca7161157255cdf20c5b0bf534f6f6b30a4f9bf612b5ff5edd2f7adc45553ef12555354f82c15a",
216
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoServerException.php": "b2b8f6d1d03a720885ce5718b1c80bc75c7f483f72a1d2d2313b98a37e152ca78bb688f7923f025563517a52de7e915325cf86e463a2083c30ca2473446b91c6",
217
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoValidationException.php": "5faec3f351037d6affa710c10f733c57a7919cb04820f93ef0c19f75b2f2b2b8ae1a0d004c216673977539b713ca31475f233fdd21698a390319364d2b9a4ba3",
218
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoXMLException.php": "a66429863ac7caad7e0d77f7a1fc105fea0a45e7eecb753e64bfd5a76c89b5eb06e4228bd63a78134090774458a646e10a11417855d3e72b2a6fd75aa754c625",
219
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Http\/PlivoRequest.php": "3fa26ce55e1b201dbe78e4bf3615f8c38d9e6c4e96e5b3673f6cf7985bc4055b88f227677273189381bd29076ae5e8baba6c0cef4bd612f2ff8fbd2847b6c129",
220
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Http\/PlivoResponse.php": "3f9f1ce15ef75db2e028f198d1bb337c37f31fa6dc7e5b985ad589f6a4dd7d873e3dae968b80f5e1eb6056b4bd00e1a4df4d54242206861302f9d6263d177bbe",
221
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/HttpClients\/HttpClientsFactory.php": "a9fbd6c007260fc2169648c9c764ff7b5988af0874b21211f8e85e8a995897d597cbc0c9fce4ec5c8d60a901ea05c5a8cd70684c2302ea17bff528ac674ea578",
222
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/HttpClients\/PlivoGuzzleHttpClient.php": "dc661dc489b30bfa98e0d75f04147d164ad953e7dc51326a20fa94846fe30afff07ce92958c27a9bce9fd15371543852c0be4c24031cf382b54403a0901189ce",
223
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/HttpClients\/PlivoHttpClientInterface.php": "61a18efcb4383bea7598ad9167ffe49a73e295d2ed3229c015f9a5ea08b00362005df1388cf6846f1c331b123b187290a1651341c76ce2cd4233926c927b6e9c",
224
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/MessageClient.php": "f96e09d05b71a2e0b6675300132634f5664026bbb84472a1e7ca5f72b679390170ed5aa0d4e21a4dd1bc646cf0267f0f9240c931657f7cca9b2bdea501586d26",
225
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Account\/Account.php": "22bf526a376e6045fe9045ef4eaef52c769ceb8a7c3ef11902e66acdbb673fa521f70f446e6724155c8499cc700a6cf4f4d435ed06d81baab69f638cb15651ef",
226
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Account\/AccountInterface.php": "5093f51c3803de918f3a500f1754f47a3dbf990008804c07e543da253a22641b96ca2ae5faa7e6800cfa10a41f7d407e5d29e9907c0970a9183a8795be9f7543",
227
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Account\/Address\/Address.php": "7ba3e1e7e136d43989fa0449b29882d78fcea39cb764e54228c7a4a899d5ce4db2deae9d9ff9ed5cc53a8af72f98c55914c10be3dbb7b9a354b8a06e17cce829",
228
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Account\/Address\/AddressInterface.php": "36182073184f67cb024e0c020307d4d74c8b5c65e3ac7affcb76e189c91af9750c318404d8ba3a5a6e104d64459c59c80d7a944395796f0f5aaad18d43d93720",
229
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Application\/Application.php": "9431715557954e8ac1cc340f3f568a6eddd6e00a0ff0356154b2778b118f620d0afad3979e79eef0a583b313256fdd018516cc8128a441dc667b39668b6f506b",
230
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Application\/ApplicationCreateResponse.php": "cb1167e6057eb71e102d55ad2ac3cc2c7aa2a757b317cc97d8d08dc400548d4ac56379653583d53185ee8ab37c4dd189b66af011bc9a32baae55991922c41466",
231
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Application\/ApplicationInterface.php": "77af1063e341dacee15504837264b8140ffa3e8f537b9eb0b102e8f6d184deefab6a08ff7f771965c31d6c84333de9963b2e998bd0389bd0517479d5ee150d3f",
232
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Application\/ApplicationList.php": "0840ebcf3a0d9688cc68a82f11484339d8dadc9d1a50787ee11b3849a361a421f30417ad4322633c53633b4cf58ff7980de6ef87471fc88b16d090f127763450",
233
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Call\/Call.php": "8e0a3bd97abbb7b9d03e22a4eca6eac4989653c43facff064a374f6787698bcc91320352d105f66aa3f31cc0d70902c8cef0f9264062ec4bf4e5cba6d07549ec",
234
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Call\/CallCreateResponse.php": "a3a07958282fc5a6e7b99978427e2361e8828a63c06a940159a7fbb356ab9621a899e6e2a25c27d445fb92ac34b63d8e5a8b6f0782b7f20c7d9f4308306903ee",
235
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Call\/CallInterface.php": "9aa42eadb3b1c06c802d46f1a11b17acf59e0c78ae65b6c9039b4afd9fe53f171cd8023be738a359128afef545a6fddd43bc039d94b014d122e9714f9591ab71",
236
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Call\/CallList.php": "9883c38a74497c496cbf7c4a837051cb6bfa0ed0b9ca9298f8908e7195a000196f7c79b4846417c64af0aeddb6327e45ad4b36352a28e8300c977e21db0fbd0e",
237
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Call\/CallLive.php": "14fc226091078fd069998fe41625d086407e0c22455dde078284f9a3e8fb34fbcac0b75484c5350b437387dc203db7690d9fe1f02aeb09da2d5c57f7b2ffa651",
238
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Call\/CallQueued.php": "64552d83e5911b11202ae4a965bcd7c408643c446566c3d09aebb0bd02fac0dca41477988aae62e91bfb42913900f1eeae9d20693c6bc29651e2734b06cf18da",
239
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Call\/CallRecording.php": "d23438ea994b0ab936c3917d77ae9bb38bc9ca14dff4c5c120a0f583db46891af3bde1a8c3f55d15bacae99723e510184c14c60eb6d3d411d46aa90c5c8acfa8",
240
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/CallFeedback\/CallFeedbackCreateResponse.php": "cff0c47988bfee02787a2d73df6b3165749844c1a93b1fb91e87e80582bd28c8c7efe101fcd532bdab62886eadc6354924eea81278da5037ad9d3ee5d8dc8f29",
241
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/CallFeedback\/CallFeedbackInterface.php": "7860708568f488bd0832e626123f4bb5ab986fa5d54f305d4744503ceb4e919857b78a02b766e7241d324a77d86592f60f26d1ed78955f5550bd0fcc7bbabcab",
242
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Conference\/Conference.php": "8b97d6c9abee836cce410fa1216fdb5aa8a4df0c8543a75c2415bb31a5ee2d87531d5d162b218660a33cdc30539861cb09d85a780feab2d5321d0e8ce06194cc",
243
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Conference\/ConferenceInterface.php": "34f563cac4a75ca234e4517cb4678998461011440f30f9d81895adfdbb2e1960009114773ac30901dfbd2596d327554fd335057de66516b656f7a96446f4b06b",
244
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Conference\/ConferenceMember.php": "1a880200a2988394ed0436702f805ce60762be1774e1d156f38e45be39cc72203fd4f04411a521ceba8fa9647cb00f6d1bc6d94798b66f12175fc68d88c51dcb",
245
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Conference\/ConferenceRecording.php": "1c3239209726556971c2cccc812ce5bb5a3fc8c7a0e4f3ef520e037acde32d9659dea1dc5d3803e1f7cfd39e945a1680983bdeba8cf62459fc168f0df731adab",
246
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Endpoint\/Endpoint.php": "4c9a87fd6042a3eb486af5dc899d1e4c0948de5ebb1467cc85704030947e2588e79d23407ff662a21b097fb46a05925c3df29dd6e2a038555cf44844342cb206",
247
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Endpoint\/EndpointCreateReponse.php": "f77356f3ca29ef7163e47530004a5d79c1da73e922b17333a89512e39c7d3cc842b161d9dcbc745075f6a6c7ae27b7f7cf85f56a6d5bb796b87db4efbb8425ae",
248
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Endpoint\/EndpointInterface.php": "09914bc8e8eeca2812a4dc07469137011eec1dd77b99e3aefc8d5b8f4675b8f221bc54e37417f6c45b07896b84bed953f8c85831f9e7cc7b85b7293142b60fff",
249
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Lookup\/LookupInterface.php": "040b0a2c01ca3c0c02c2c8450b47e8d1847ab7158014ae161ce971e330712d14d389cd746a353707d2bd2667dc604e55c662af8eb15796cfc613f285e170ed15",
250
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Media\/Media.php": "72b83f02669ec7b942dd898a74c22e909cd9b058ea2e903e92ef4dd9e985305311d53c30a0c54a3f0c210433aeb7b8bd04a4b3a768c853aa73ee4dad9c621a56",
251
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Media\/MediaInterface.php": "1cda06754bd1ba503a8405561594f9d3cd5befee2cc6d9cee98542886c71601bd8744899e7ede346df6b90552f05a9eadeec4cb4d11fdab3269de88170cae961",
252
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Message\/Message.php": "54ae356246cc911258552001390f10f701929afa24801b2bc6cde72484c915e2e738a03d04aee90908003efb3b4b3cc8106f92d7ff87d2119e8a350f7aeab54e",
253
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Message\/MessageCreateResponse.php": "75495f459ecf577e2e0c2f8c075d569f36df80c5c828fd1d6b84a001de2c3d032add50b5ef08177d5c68014fccbc939c8ff89ce6c884ac0c1b64f4301d81cc5e",
254
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Message\/MessageInterface.php": "e96af121fd4a851e4c1f27297c602a5e6862e0ac54974aedb19248f017f2d98386ea9b495ef6cb775aacafa7b51b6117665c803356442786142c15e86066ef41",
255
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Message\/MessageList.php": "baacdb72ec116be9a14b8e7e55d6c40cfd8b04c5bd1b0d93d5c9919ccba2591105e03dee96effee29e95ab7b7e58e45569760ae825351c1891877dd96853254e",
256
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Number\/Number.php": "1bf8e1b1844ccced8d8068a80ae45b6904f59b0fa0e7d6a7c5b43adda906859ec11d709a501f560aac3f8315176e9260ba4796aa9cbbd637431ec94f0ec0c668",
257
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Number\/NumberInterface.php": "e633bf2e705735759f6e27f9e747e3e05e839484b57672e2da405b7e2d8615653fa828f8295a442d13f5b64645fd009ba6cd923f0c163f2070710c7df57a1a70",
258
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/ConferenceBridge\/ConferenceBridge.php": "3da97309ccefdb15596bab5180d386e2a78cf938823225820f5b206d8d8f366209dcf96bd139cd0364729c8b733612ae067d03e1e29aef472c4dc82527d3002f",
259
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/ConferenceBridge\/ConferenceBridgeMember.php": "9ee728dc1f37fc183fd4890ca5d213bb1f47899d2379a16009de7ae32b75b459444a1a329357faff349909ee89843ac5798c75699fb2b8d939501f61dc09b564",
260
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/MultiiPartyCall\/MultiPartyCall.php": "d13d863ee416714a697600882f33b88a8bc9de8d5603149fa199f787d7d904d55aaa6646cfdb3d71caa99e4e95d7e352199e8b54230d3c64cfb81924f1b603f9",
261
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/MultiiPartyCall\/MultiPartyCallMember.php": "6e8f1c6a1177d0c933352bc2d8bd54c989db7679f2feb893f430e9e634c446d033d01a82ea740185b1926734f285facdb3d99b18ffcefe83be723fc08b50fc12",
262
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/Node\/NodeClass.php": "b8a08dfe16a42c08ea66d141b3b4471caffd2bbf89fa4b360a1b16a7072ea29d538792c16b93f1e3f1a1a01d564acf1a40906c32482c4cef0ef42f1647e483d8",
263
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/Node\/NodeMember.php": "e13f76753f278f07e8778f1d0ad64c9ff401633423ab2476700ad0711ea5534f7caa871b5e10fbb26096feca64471205082f9ba45de607e7ce71eccda0e7db91",
264
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/Phlo.php": "da8e7b69e9290d876b6ebe6778c09ab68f47f13cb22438ac92d6eb880b7fe72ffcc68c681cbb9be074e36f3ce4afefc69680e7a3493d3046a04ca9ec432d7a99",
265
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/PhloRestClient.php": "5f3b9bb5e3f7dd96572f1dc71531caeb0b14b21ba7c291561c1ebb040c3ded22bfc0dbd9030843cfeda8b4f83e69d86ed9db2b3b7d0cc8b311ec64000f3b935c",
266
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/Phlorunner.php": "c1f3764aa4a4c14a33614bc7cdaa05043d268b24f88cb2312bec3596e5e7e5286e9d0429edb8583b640723784b28ebf69df691d5e4ec53b7d7912252832c3ed9",
267
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PhoneNumber\/PhoneNumber.php": "57bb602a9f511dd39c7143c50a9ca6537bd83f398eeb6f198feec689877a9a423d9cfb0645c4d20eaf30490ae6b6ebb91fbf1d00ce633a2007333ddd6273b032",
268
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PhoneNumber\/PhoneNumberBuyResponse.php": "6929f9a7447425d76afae60b91de8d6a5a42a1e7864871dc73a40199181d5af8be9f645185ce1e796e75440d138cd0f69ef86ef404879d74b58107ce32824b6b",
269
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PhoneNumber\/PhoneNumberInterface.php": "3720a8056618a019c64de2e4e05e99e0b30cf48de07117e75172b8ba02f2b2c60a1e0b12c3cc07b3f5ba8aeee2e747c3eed43b5bf589c29c7236b47b5ce75747",
270
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Powerpack\/Numberpool.php": "a774de315b1d34a61c9b9af9b21b8fd1f624b48bcdbc7ed1302ed25cc21093e05ce1533c0ce4788ad36ab28792878321a99b941cf9e1a8ec7fa2f2ab1d16f872",
271
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Powerpack\/Numbers.php": "f62f6534b223fa353f2363e38fb1069c3d10544a4cae2efeaff30019c0cfec7de2b4b9f551cfc16bf26fa1dfb916f6d916f9cd1d1357f8cf6f7cc84815812237",
272
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Powerpack\/Powerpack.php": "895da995fc1445bb6f7458c3904c918d8ba8e8db75e94e558f04ab8355058bf82d881d7c282fd8e03acf723c232f3081733a9ace2bef1da42c3e9f4de452d2cb",
273
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Powerpack\/PowerpackInterface.php": "e09a8e4e67ece27935a81730b7587bf29afe72ff9aac57b6c0efa6fdbc4b7cf4c91d60bdcc506a2c0b86f7a4cf7df70c38135e295504417d39024a4671b3cd33",
274
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Powerpack\/Shortcode.php": "afd1a0a277918a55fabfc2b46460ab6a8740ac68e1d7b9a0180d88229d7a93269305765fdc362c02cc2996ff7c3d8c95417bc90bb74e44f9c2cf12f023f45b08",
275
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Powerpack\/Tollfree.php": "0c63aaf33046375a8d7c0f9c7c092ca1041f553b1987ad5e2944630dd23f865785e06205b0711c215468630455d8c2264c0b141fee5cbdb4bf9430e6ef90527d",
276
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/Inbound.php": "285fd073a2fbf84c533af3c0e60b369689592882364413a1879691a025655bf4bdc40831d13d96c59ec7a8827233e92d478c14d1d648df885c75fbe3d054351b",
277
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/Local.php": "5140df58e671179a4edbfa82fcb7b7277e440706406200255ade35177e9a715c3340f5920c4a57c351b6e222f7bb1ef20b207d0830c487bd14b9fa713d3d8c4f",
278
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/Message.php": "ae4e8bbe3a668748ba57bfa571cabcd97932d6cb7a8a63ea04689863ccf75a63e0aa867fad60c39e263cc685521a8465b46f730014933dcdc941ebf152fc437b",
279
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/Outbound.php": "7656989e6b1da4e4887f8443304e422ad2aa01c9c05aea5b5245b4f3edc333935be4f573fc5105e13cf03ba6ed0ee0ea323cc76c833846bc5cfa01f3a0f33763",
280
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/OutboundNetwork.php": "900ae54c0c0aa0f85af4f02da252a34907999bcd311e9e39ef8d8e27a16fc6c8bbde5d5f6460af6b8e68cf584419ccd7fbc4de177cb827cabb5ae9b2c896494e",
281
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/PhoneNumbers.php": "cb51001dfd504ac52dfd39e2a0fcd01686de42e78464c76767f99fbc7884cc2d6e304cedd72e66dde42852f72cd833dc49dc1e92fe1487b2682648432e7979fa",
282
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/Pricing.php": "5d197bd5eef109ba3d877f6de48f8567f135466adf1d811d32908d8d4fa7c8961592733d6bdbaa4f646c3d25a31c8098768dff183d192617b2c1726e8f41c447",
283
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/PricingInterface.php": "dc940fc2f0338348b06fefb22caa65b98fbfd37063621fb4e4f1e23c5dfe21149e2e648c1a32b09012b34c5bd622fe28126bd33ba1255c6ae3c370dabce6ee97",
284
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/Tollfree.php": "ad733c0d904ecfd646e79a3b6bb3ade270f99df5e6353bd6c8695322a71238fae107a55d33167063dc2e4b1b905273bb0631f051d06cbfcf5d01c94e9252fbdb",
285
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/Voice.php": "ab645548152bfd840951e981c0d18aad23d613afefd4453af077a6055f902d6bea6a0bcc805288f130da6686d8419913e86422cae35b57c1087eea3371b7e799",
286
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Recording\/Recording.php": "def8da050e24afea59514b4fda360ecd1d80a49df2013b258e3d78304d6eb2ccbe21ff1ac50a851079234a1460d0f2750da8fb59c9ff184e8ba1f1becdfffe6c",
287
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Recording\/RecordingInterface.php": "1953832ff8be0a6801f306632f3ca3bc46f067d08662b8ca6d53e29d53507a48750bdd891d2d0164c029f675b8c4c1dfa6765c9abf328578838b428dcea22615",
288
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Resource.php": "b8a8f583217c43c3eceedcb8f047efa1569bfe5f440fcf4f252f1a8402f484e18abff63229521f89697c1f7df21a2ff919488fcd9df42b5aaf7a160a50f0c62a",
289
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/ResourceInterface.php": "85bde5b0479b85aefa79139d36192ac334e3deb3a07353b7b1b0cea1180a050a92dcb563ef4a968b6436f60ac990fc5c1322ba3ee6f4ffd41d2997d604653b6b",
290
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/ResourceList.php": "71fc010407c57d77f5b31105f6e645d04347d961c3c81eef6cacc7b8dd475d86bd228c5ea5dd5976ce34d025b0753083b5361a47cde5d5daf0507678762106fe",
291
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/ResponseDelete.php": "3acf13bc2797c0ed58c78abac46ae2822a67b9c9194b3c9864738516847618c0033fe12c5a62d9dcb7d110ffd4264c534fded370d04a2960a2da32059fecaa8e",
292
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/ResponseUpdate.php": "4db3ee43405d0a456dbc23801c2c0d71676c3f88ac7c4161395ad275e7fd0dc6b53aee99a882706da4f14fc6c35844d54143a7fa3b6597a5a25d59ed67e0e6bc",
293
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/SubAccount\/SubAccount.php": "b39e628ab06827320f3dcb47d3ea55d459af1a133430e8e51e8e6aed5216c31b54498c836cfd2a5c5f2d9cda4bcac03ac476bd8ae81c3ee2c7865ddfcd359dfb",
294
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/SubAccount\/SubAccountCreateResponse.php": "3b92a7ef8da848a7a5d7b79436ae557657e97141ecb2bad076e69d495d78f94f6e9c68464dd7e790d64dc563428e4567a1baf96df1f8bc97cfdcb946e60e94ce",
295
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/SubAccount\/SubAccountInterface.php": "a4cec509ce127faf30261cf75555a2905c6e551223b4b90949251f0822dc20d7b97efadbcb6bb189cc9302acffed8106ceab79628a7531c161f4f713d6a26c4e",
296
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/SubAccount\/SubAccountList.php": "228e0fc0fc27fb523c9d2d9e62de77a5deb3bb2a29c10d91d7c59b6cf36b3e12b8b1935a69fb0ceda72c4008b2a04436e6aa3f84740edf265d0f647eed7c52d4",
297
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/RestClient.php": "91f01799f98c6d65e1a0a8025668fb0c9f5fa4b77d44e86790b34599c2b9045cbce2cb3a5dcd93a1fa8523cb688d9f2b895d7d5f2377f64f2e33ce68e621dd82",
298
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Util\/ArrayOperations.php": "04a84eb09d1ba33c3414dfc74d1c4b31c3149dc8e3a038912be632673a92e693da8e531a987c5ce747aa11fe01bf65bc05ac91924ccbb8f157c15c62f8ce9694",
299
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Util\/jwt.php": "61ef00cfe10afee4047149729431595a9e21d44b25de3e8808014312a869110bc22898552fd9216cda6906c91de2b3ef9d723ff0d4e18020d1b7f5d1050fe810",
300
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Util\/signatureValidation.php": "2bf40afd282bd8711459cff1b366510ea253508349adca2f64ad101b6c4e3e20bf405194b9e421ea7cad5b738716624127969de5497e16e3647872e0b3bfc6a6",
301
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Util\/v3SignatureValidation.php": "d70083f5ecd20fc41035462a2a27e04a9367d9b7b13e6bad5579dde4556ff187b8ecdfa17b2c07a0fcf88cce0141baf7dccfaad85a17aa2fd1a7afe7998d1037",
302
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Version.php": "365ed59af02f30183af840aafe55b67b682919cbb3d662f860baf1defaede8a67fccc5a7f087209494239466f356fc83f612faa02f9f03a301f5ffc66b52bd09",
303
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Break.php": "89a669d486a72465efc2c6128deb6760dd86c9fb69cd8c0f57c209d10eb74067efb50bc6f0e68e2d1c9c2f39862ef3fa03a35c65b7395aea6ca963a013869658",
304
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Conference.php": "bf673327e263996b05a0b45e323168e3d44b27a65efb8a8acb0eccb0276360c1a0391f08edc34ac617aa079c6c2b1f45eba6142446a7ae2286e23f337819caef",
305
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Cont.php": "45ed9435166f1b72dc5ee98afaf3547ae646d16d41677ce5409a6005ccb9ff23743e4c528385a1e0a8f5570eb7ec9374433f609bb8cdcbdfe756842f1005c52f",
306
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/DTMF.php": "14c619e3f01d6dee2dbbe9b718c6c64458a97bf70ae333455aa45c9cce91e4bab693f5265de0099c9cef2334a5310bb85e3374c5f0cde9b93c3051cdf5b57a4f",
307
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Dial.php": "5370d1f1a1ca8420560fa204d295558ba9aeb626fb7149ee06e12acf7f4b7d079307f329f91594e138847a2b3dd9e3f3e9a9e6e774a3c1095c3201ab249e9c03",
308
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Element.php": "4913c3c78365a85eb5c90aa721b0e1cf535c00d5815f509e336ce635cf47a9d9aed1346ff0cbc875eabae65190be2875d0820312a6a5c90c6df3acfa23bc80c0",
309
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Emphasis.php": "d6fda7993f909d3a1a50441ef74003811252d68a33ec2da63d3551236a005952d3b6c7e2bcdf5d9c85d33bee2a9255dbc2b95988cbe0e115b42eeb667d58ca38",
310
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/GetDigits.php": "e41a4e05fd55fec82a24cb2a545db122000251abc0986715a4d5866dc64604ac340c59cf0a30a35ffeeaf17713eed730a7705f32aa20aa3b14ffea368cdddfe2",
311
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/GetInput.php": "cb11a5e0311d3b8938f7d94462d24c5d4b8a2ea4d733943253ffcf36aaa648cd3a4337d732799f382526e0e2b2059dd1489e9ac7fc5ae478eb1db07b3830a711",
312
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Hangup.php": "6a7ac35846ffaf61d8de286929bdce05974799b26b17f4d61e68b6f740cff49bc4a0b72899d1150ae03d72e4f8c4dc7cac491872e76be0aec6b1a665446a9226",
313
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Lang.php": "c16c3db519373df61712fb1748f91785d79ba0fcd7e85a32cff1d17ae89768cbc10b3c4cbceab380fa9762cc1b6948d8fa56054d78185f8c9c1d6c60a012f527",
314
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Message.php": "541a76d5dc1e25633d7bf67c83d1fa123820296b4755e7e48aca094040ba0c2acc6215eb29176551516941b8e8225e6084fbf89892893557e12f678cbe2abb86",
315
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Number.php": "82569de717d895eca9c4270a3fc48022e666e59e6d6c74dffe4982a8db1f6031d80c51863226c750cef5db111f0de940878baaafb352153bd0d053f716c43fe2",
316
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/P.php": "d8bc0f70c13af91549bf4c37ce4c95b6683590ac9c9a3006bf2a4dc02d85ea63a33d0d8fce4a6465f25e0f86b35994d98e7bf75c07e30737305a7f2707ceb444",
317
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Phoneme.php": "9bce52123dcc7451f21ecb2e155884479b7530715d78d175cd616da86198151481632af22cfc19f9c70a4cf0f29f3262f335982fc9988e4aa3a435cd74f14c59",
318
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Play.php": "9b25a9f3a6149ad856c4aa008c405192bf2804432d83d3a572cf066dbb151b8298272b0a9185bb26a5faa51c03d069aed172ddb135d4dff3fb99af9fe982ded5",
319
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/PlivoXML.php": "03c37815022f4b4e7ea917f69b5516c3bb5499e68b65ed1b50f7427d9827de1e84037745d25b420c1f81ab829f51ae752b126943005c82b06a668c8ff895e923",
320
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/PreAnswer.php": "f66f22bedaae6dce341d650d5ded5007d867361c570162a642e0a15f5fd6e90b49a4c8fac2d3a1cb5fea446c75e30834a1106a3acd1ac02a87b5a7df7c1d5af2",
321
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Prosody.php": "12c8b634b226bad4ec0a7dea7b8249959943bc5ab0e71f75fd42afbf6d1413834563c38430e9348bde2cdf1059f266a2ef59fb7a8f6187ecec135ee9d5dede4b",
322
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Record.php": "070470af5650220e0556baa6b109684e1abceb6e80af620ec750f0c691824249121e1c6aef6cc1c91bebb45b76ea9db24f9cadbdbab8857b367ba2521d1cd001",
323
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Redirect.php": "34e09e0b208c4dde1c4b53c451b09f23985c8f74737e73f4675053494cfc81b14920afd6620ff161877c4e1b7b6e7381cf3f824a2b06508d84299aa4e0e45690",
324
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Response.php": "8db3a9e823e3c11b8377829c783d93f0b7cf98afc6d837e514803b478a7887d6602bae6efac9dae6a2e7683d8409c23f78c463185754fd7916845aec23e42c58",
325
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/S.php": "d0dc3f3bcc818d107fd8e4be38718587edf610e3f840d7e6763ce8fef51a1e96de3b49076995802aac9edc7d8a976ef024a1d45ef634599a56d13c56a8ba73de",
326
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/SayAs.php": "46c8fff6a9dbb36df1bb14d0c4247569e00ce77b37730d7f8fe6fc4a404a632ae70e48c774f40c4ac0e19b10ecca7c09686c7d5a6fc7d5311edcba657177b6db",
327
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Speak.php": "d18aafc18ac404a85d18627ddc66d2810ba1061f8e0d3d3634d5f5258b239a139649a8cf479367dc026929010288a291aa1144aec2415a2de6083040b8a4a96f",
328
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Sub.php": "9d34d26e76074e65fc01a3a477ac176027b1ceb5dca2fff450111bd2cfc0027c7f7338777b494728ae2617a27075888ea699d4226b60049c4fec633d42cff8d5",
329
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/User.php": "2dab0ac6bb38d9216c1b39b81ce20f1a2af1d385c90ea13aa566176eeb288f8ce80e11048209abf8c38151207137cc86b754b7784cc478dcfa1f567fcf929520",
330
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/W.php": "798d6f10e6d07a54b29916216dbb2382f25bbf2f96e15906f842cd2ae4aee22b8f3e56535264b1da6d40835d5b9da6a9f4346303f7602c9562587b29fa419f3b",
331
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Wait.php": "99e6e66fb4d2a81f0419ac823be64ea8c81e6ffc8313934b41d6189519d053b54b5e95dbc7b869dc979b72b551b5654dcd6eef0540c3b01eb900716e97d52dd9",
332
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/BaseTestCase.php": "662140921fab3f1e7be65bef2d063673900eb3c41de8ddf68320de194e254ec3fbba3322790812c258698af81da35277cbdfc0d2fc957fd5f68956e7db2ceac2",
333
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/accountGetResponse.json": "1ee7d7e260e8678fa70fa47206ac7c4645e9d698da7017ab05fb56266710e34bce48b19d3c65541a084be28cfe918e81fd52073064071daba77355af2eddbbf2",
334
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/accountModifyResponse.json": "ef0e777d38b4605ab58d951f26e975566b61a26ebe5710b9c8c7588aae799c68cf76dc5860f44aaa666864f3fc1f74185b5eba888c1dfa8c2004fb8baf6d859a",
335
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/applicationCreateResponse.json": "19336630707d50a021e3dd3cbcd8a229f9f6123211e27fdba211494bc40e9b9fc5573ef328806bf00b937106e7c894ef96a98080f6003d91cdec67f50196849d",
336
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/applicationGetResponse.json": "26a3aee28fa9219455b0c7a54d47eaf1ee7e9fb526185d1598d5611246c1ad7b0cb1abb05b12d21189463955e25d2da906cf5b04f1bd4c3b826d44de47c0d56d",
337
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/applicationListResponse.json": "b363791ef3276030677b53f555a42deb02a9873cb5b21e17aee9176d425ed38c562da7fc162cf5771f0bd259b46d615ded3799f34f6fef590e2df97180ebd228",
338
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/applicationModifyResponse.json": "742b49b7f428a281b1189fd5f23811931f2d6c71fa271ead086b6acfac63bafed22b86f2e460fcea35d8bdd46786c5db83707f35c7a855efbb92e51ec01a4859",
339
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/break.xml": "6707a46a4316a9f23104a23e4ce9c79f8b4f969639c08f5196a9aa94ba3abd4a1972a29d6131e563a685732e8cb0a4fc90a76f2d0ff5b72637fba2f974abecd3",
340
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/callCreateResponse.json": "513446e1e7fb97b30b86dad2119bc9fe73e70f01f4976ac40e57e41e7d96a2faf978fc72fe2ff49e3326fdef8e17cb4da24bf665be81089aad1232716e42e114",
341
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/callGetResponse.json": "2958c05e7fe02f5f6f2f8834b34050599df05c6f5751fde2fb038853383683e78b2b33b9534bf8da38770173e08ea9c7015d7b2d4f270efddcaedffd77ce661a",
342
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/callListResponse.json": "b2b35a27aaff76dafc6f5a42b6ff515e56ea9d7c196670613b97c2b4c0b7f2dfc3ba7ca705b2618f3851e1db554268018c7c2bb658e94b66493576048c54ab49",
343
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/callUpdateResponse.json": "06be7ca7ccaf82f24f23e8c33382d372ba639662283023a9b6ef555fa24d273efd845ab27fd423dd4267d66a8df24604f96113aa3bb8f8dcfa49e713f3d71bbf",
344
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceDeleteAllResponse.json": "6722c7663c8877f4bd5d417638d5a0fde3db7cd2ba1880dc66a7ce9ad25a14de60b4942d84647cc21c0b12211227161349109162ef3eafc2a9607c2645d3c93a",
345
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceDeleteResponse.json": "9a8baf62bab7971a89490d637633a3d498d4442bb11ca29486d21a3dde432ca6c0cb36d236bbc94859efac83b2e56d33442a13a4395f4b026dfece2103ca790d",
346
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceGetResponse.json": "950fb7d6e6e120ce670da43937ab4ce9e7a7df5296848cb52261f5f854bd89d47f26d76f89929adc59bdadbc8d0e77de79f29edc5d6e6b4b73aff1a0c126bd43",
347
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceListResponse.json": "9f5635d9e0988b03c2bffa8457962cb6870a39d4354ec6c065b58949850b188d2829fcd3db1761ec42a4bed30ee3704b6c353d2b9372742cd6d8b00bff273dc3",
348
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberDeafCreateResponse.json": "b39ae8d7a1de7d5732afdc00da955a91850b855f6463b143b5837023dd8281b450fa79635a3fc729b5b198c6af5cb57f9c6797c8eb56daf72b7c7131196fb4da",
349
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberDeleteResponse.json": "ec18404f82674de8b7ca25eaf95074cefef51b13b038de14dc9ed5f2664c6e6c5c87d3f7a08eeab3926869e171ac26d1647ba1cca03253085a194cb0fbe16975",
350
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberKickCreateResponse.json": "9f924beac462c4ad9f42a705f7bfde5aafe5e73563b07e98ac9db42e95d3c657f5c4ba0d6ea64b01e2e061563fec41d53f8ae8fbd7f5e08857a903c948019e1c",
351
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberMuteCreateResponse.json": "c3f1c38b6c8295b28d531c446199454fd7422d00e3cf71fdd318a821edca4afba444f8cea38175c0853b34dcda5dcc2c6317a9f3103e16474fb36c43241a52de",
352
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberPlayCreateResponse.json": "ac345d15512ca5debe0a20092d8a4bba1f725a581799a632bbdccea771f1b6094b6df3362120a29c1d9109cd8ca8857447c3be08436fa94a5a4304725b75ef4d",
353
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberPlayDeleteResponse.json": "10b6ab89ba98b9d6d08dba8637971ca9260757c318a4842521c7d2bb2a1b967498453aee4cef6fd964cf2e614c25364f543412a0a88b877154b3faa9f18ab3ca",
354
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberSpeakCreateResponse.json": "b2b01526d4838a72c816ad9c6ca7f9cb473a89818d4444b48aefc269d0173fc9eeed1e2473667517280c18315d67a548f41937ab4b7d26f2edd4d0e13486aff7",
355
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberSpeakDeleteResponse.json": "d42658e98680911d21be32033be208b53071e3ee2c514a86809ef4d06cc138ca0a74d9b2e546c54b51c66f3aa891cf0ba3b4db9a6a07e7f06ed37bfb39ef3a6f",
356
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceRecordCreateResponse.json": "c9d8570ab20fea79181b1416cdc44b8e9f8b18b06ad446a0929ecbec53a6bb3d66ddc8609a2baff92d8ddf9bb68b802ac4eb3d62e958d2cdc1485711a6286ed8",
357
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/contSpeak.xml": "1115d194144f96d3b4ba895d45268e346e7e56bd308b4b7c58bf62712380908bb71d5250323bfa6d13b8d25e64a86580437f7ac1f2c63896965e3c13909c240d",
358
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/defaultSpeak.xml": "2449ff96f102465168a4551ddac6ff85bc680370b423d46ee10b345c128755560e0bf48c070081e8045839503450c0f8b443fe0b33b455410ad5dfd639a6adb0",
359
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/emphasisSpeak.xml": "1ae7422578c6921013c5dd65650f0c1efa50512824b429334cc150ee6872dd2a7981a125b07a8023e360d8a881a32333de24f1b595c95a339507dfb29732af83",
360
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/endpointCreateResponse.json": "e0cd43507839270c51117e48fdf3158e67662c1bdf9c8c964b57a13c15517ab7c83483855764b763f63bfee011bb893c20eca7e7a0b3b8872bbb1f26228ed720",
361
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/endpointGetResponse.json": "05359131cc3ed432c1b29f3766d019be556f58e5e7f7b502d866d0057c04917ad7011bea5afd7ca8f2814dc75c45a52930d48464f7fd740ae94b45d0a07d3627",
362
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/endpointListResponse.json": "d6488ec5e6277af9a34629d901a211e37c9a522107f84ea77f861c417345ddfa409d7de389ae69b719997600a0495289bcde64791ef07c257f75bdef4fa8006e",
363
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/endpointUpdateResponse.json": "3f20870d3ef78c57407bd42cd424775a7014473d891020bfc41fd78c9187acc3d7fc2a2d7a137eb5bf9e8741525db9aec853889b11d2d3ff508f7fb16a4bfc88",
364
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/langSpeak.xml": "1eb16f6028ee00a12e677560ec9b3ca4921deb2d6da15b3686c43f506e9a13ab0cf811d71e942e1f225989f3a486ee39b4949d17d8692ac0a50574845491cc8f",
365
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/liveCallDtmfCreateResponse.json": "f30ceb762f24445068ff4a688935a84cb64840310bd518806c1259ec26fd60da6a8be9f11c9c0882d08c857058944cf1c69c95035517716dba322a1a865435f2",
366
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/liveCallGetResponse.json": "339633aa5d9cd2aea4a86dc48dd8c63ea8c0c56d5cc0f4513bcd2d66df425ce4b74b246a8c39d6cb0dcde75a8c01d4ec8347e69342649ac27599a79a72fafd9e",
367
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/liveCallListGetResponse.json": "7e8efa8df76422d6a9bb0133c81d96b9ed932f7f529644a109b35e9f8f301b3a548e8e7f6a9213e301f25e914b98c3855160ca7e0d6f0283e947cd6fc95c5ed8",
368
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/liveCallPlayCreateResponse.json": "4cf2ddd4f3087fdcdf772219c5ed84ffe1dc027208540059bc532961b6c4cad382bce98dec481e0245c99e288c9523e8f33ae7c3c35316c8130f49f81db40604",
369
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/liveCallRecordCreateResponse.json": "02f2c4c88fc63e5585f6e5988d5f615488507a7d7eba442430753a60f0cc2763c38abf905042c9ae0f7d017dc50caf67f269267972b5a7fdd4fe7675572589a6",
370
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/liveCallSpeakCreateResponse.json": "ef69736cd0199704894c2fd938e4f84768b09a6b9d2f334ef0a83b1750db0bf0eab538471fead4397b49ffa8e86011da111e867d5d8b3532bf3f4250958d6146",
371
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/liveCallSpeakDeleteResponse.json": "63a9fda757cfbe1a338c42f19532609e8607f3c2c8a317ec8e5aa2a164b0e9f9a652129bbf7fbf9fe05c38a0f68138ba10b4d256f48dda1fa292c18f2b717d3b",
372
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/lookupGetResponse.json": "6b2dd461ce651012160ed88d092de0859ff1cc132c57091a1064b5745b83cd6e5144e8204b6810da7bb675eca802fff54fa298f03be6ef858c59058acd24e640",
373
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/mediaGetResponse.json": "251c9d7226411a160031776b1c7039d7e7f3d715ad7bb89131353611a2509a570656b8e29577e505102cf588ba50cab34b3b74351dd33e2a99333676d48b7aaf",
374
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/mediaListResponse.json": "1512baf046701056ae6b5ef06a1e6405cd62a27d4b82f5b38ed2b2ef6faddfd147b6d57074d04d77cc14325d50d7908c0446acd4a5a0355e9dd9316f80b0f448",
375
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/mediaResponse.json": "329e01ec90033528ca170704dc7a3de8f5d004a609fda5abaee4ad610b1559464a97b423ca27248f49fa3696f12ce6c1b3ef69ba198ae57877927ff78257231f",
376
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/messageGetResponse.json": "10494dc350e9a659083f44802a899a893e67fd82acdc506210c827642e27bb4ca1fca7c00a73a7aa20900ead392b9983ae719c6a9aaeeb0ff9f9b9e02539ca4b",
377
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/messageListResponse.json": "5751782fdb135ac45cec47687b7bcb10d4e2c4c8ae88461baca0eb6f0f81b8144aca9b610cc6ef7f3cffd4b5dc2ddac08247e74608166d147bafb1a9ecd4b834",
378
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/messageSendResponse.json": "ae5ef8b7e2a5db03fc5c04e96cef35b3f819f1670cce72e0e729b57de018bd6ffc254e00f20fa7c662eea100f78bb1824f0080275ac270f7e1229566683fc62a",
379
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/mmsmediaListResponse.json": "fa4d1e3885b6c84d72c9f9a4a414de7d1ae1d574db325cd773600c7a17f83fcbe2a84c0daa8fc690d5f5d95431b1ffe5097c17279593ccb4155d5f99b1a853c6",
380
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/numberCreateResponse.json": "e7acbc2aac3a716dd50e27de2e8937e27fe70da7dfcce17561f4d81a2de53e8cdfb5a695255e1ac65c8c49e4b894722e7ecc9297b9d040dadff97d1cb61ea414",
381
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/numberGetResponse.json": "261a85df87eb4ebd1d310575e8f33d94f74c30f5ba3aef1ed47654f7569ebe4310019c5dd317a8c6e2b015a1ac3f72455118e0878d688817580b18b747d6dda4",
382
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/numberListResponse.json": "134543e58c07917a79e0498e85466b9cbb1c97a0e3087473463419bc6c178bc278ca75e148f885eead7f6b1074063256fa61745c57a0dec4ac060c4b03afc499",
383
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/numberUpdateResponse.json": "e7acbc2aac3a716dd50e27de2e8937e27fe70da7dfcce17561f4d81a2de53e8cdfb5a695255e1ac65c8c49e4b894722e7ecc9297b9d040dadff97d1cb61ea414",
384
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/numberpoolListResponse.json": "961fe25a8fe8c35dee1b0608a24d741b6ab91f2104a9f2af2080279d6cbe4e631416d7b3d8e3772715e376a603cb740d652435a0f2d7971e64e00eb44e7cd518",
385
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/numberpoolResponse.json": "c725314dd96d000028683c175528d15657c046cb421add91a927472c235ae5c1ee1aab060aa0eec56b6c717138623684f827a2de50bdbec1017e7bff937b437f",
386
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/pSpeak.xml": "1e49af0752b825db21fc50126642fde3f39dd8b63cec3db00c3df92ca38935d58b8752ad14928278b98ef23421d0926d624b6aae948f9473398d25e2d087b963",
387
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/paramBreak.xml": "1202da39615a87758a5fd85096a4d98f6c2726d705ef0b1086cfc66cd0f456b15e3f79d9850e1bb8b99e9114e41b3ca19ee4fd269a42c002c205de005c72ceef",
388
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/phoneNumberCreateResponse.json": "a1dd38958ee69b5036aaa1c86cc730802dc2d7612eb1de9266f9a6651f6f067cf9a42d44c736bf85d1f40048f01f99fa05ccb3fb26baf3875e3bea98fbb9bbd8",
389
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/phoneNumberListResponse.json": "f2c263fdf122dfcf98289f6cd9276cd8c22fe4ff5bffca19b3509800d07909664e9ddfa3e145da04c06dfc6c5227a39868d17ca947e55b65a9cb18a6faadfe57",
390
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/phonemeSpeak.xml": "30620187252e4a92154e06e611a2cda1ca881a0d85b1c6c36e3c713734c0be9ce79bb9ad38a11e040cff437c5676c01638eecbacc5b50a20e0adb506565a9475",
391
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/powerpackDeleteResponse.json": "f170bba1b0b6bb42c88bc74353ea4db09b82f07f5a2166f693d0579e5b7d6beacb8cf11e39cff546345333b14752456212584e284c2c360cc673d009fd2aa018",
392
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/powerpackListResponse.json": "0cf4f36945bf4f73377a6688f99bb3efb0c35924ca9278bd777ecd0081c3f667d45de4a34f7101588b7a7b3b20179d18a393dcc468ed88df8eb53b5e2463d7c1",
393
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/powerpackResponse.json": "4318b75a2ac1642f6ee33fc62f18765a5142aa52e0353082a9d38cbc7660e40f24e1665a59c723ba90ba9a86edb4cd4a396bb9a0c00cebf6d5944e0ba84e7919",
394
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/pricingGetResponse.json": "25a616f338c147cb22228535abafa9c1439f663230d1fc5109af24f4f11a637c5d0cfdbfbf3b2762b87d0b4693f14223254e431f3b8ab1f518b32ea884e2d1fd",
395
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/prosodySpeak.xml": "0529a04b9ebbfc245e7d50bce1177e3eea9f0f6ede900e9fd3a447f86078ca86fe8c9911fad4645494cc784394194c5e6b63141a2a9125a1ecdde2cbe8bd7c86",
396
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/recordingGetResponse.json": "bdf9cd97b6c687685b9c37a0921bcba910dfc811abe416be7b17fefbf857c3ee1233e987570eb444d168edd660c26acb55377f60b8aa0a898f0c9af1743edc81",
397
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/recordingListResponse.json": "2d831eb418cd0de8a0d63da8a2ed133005a3e15e4e021c3451a737c45f42e5753ca5143204acf2f8bdf6ee91cf1ee8b04ee960f942ae0e62bfc3583ab44a1dbb",
398
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/sSpeak.xml": "b81f50357fb60ad968d8e949aed15c7544abed0a45c26c5bdcd4b166fa1d9bf74f57137fcfd378fec345e1fb2281ac38c30b2a3150cc6fcdc13581ea29379796",
399
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/sayAsSpeak.xml": "84e2d4a310c8d1fccc5be4be4cab026e1dde129ed2e18ab4fedcd50512cee91a52cf437606cc936c474cbfa508a105f36272edb6bcae29388f2a75bcb354de6b",
400
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/shortcodeListResponse.json": "449e0c165ad81254715b4521e5f4d39b0a6d1ecd583bf337e8b85ba40550a0942c04a8e33b69e5327a275fca4e42e31dd1719f100c8d6e459939a3696ede1a71",
401
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/shortcodeResponse.json": "867e2309b5c912c9dac5b06929a835b578b0dd3391c43f6e0d454adccf997060e1e5013051b394a94d44af3e5cfea67a88f4376088a376a031d6fde5fafa09be",
402
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/speak.xml": "a781afeb86ed31833e74d834de6d9834783264ec43678fe3e70a7f963e97a9dfd05dcb5ae75f51fdeec1d5d8d299d8c476454307a23efb830022a477500c02f2",
403
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/subSpeak.xml": "06ff8e0c15b36727265d9f80c736a1781438c04445e91bd563b73a1f9ed4b501458f7e3ec22607dcd96e9f95da6e6d874c39381ca061a768c2b664a1b4bfc504",
404
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/subaccountCreateResponse.json": "7fb28239b065aab21f14d158e51ab6bfff6b10de97ca558da02adb639fd15e99343ca54277d0e0b0dc6be11c01abe6517fcc2f0e862d5a3538342f86bea87994",
405
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/subaccountGetResponse.json": "929de7e767657a691c8bf34be8abe52990835f9787114256bca7a1fd6016b34798d36e2318ad3d4a2a8931986d8034e2310e4b4247fa38a84314658402aa3bc3",
406
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/subaccountListResponse.json": "c57bcf1f52d302550eacbe5492bbb1cc17bd399d03b6c83971bebd83fa8be975e97859063a2115edfed47f622adfb413d5c28d6cc180710211bce192d867052c",
407
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/subaccountModifyResponse.json": "a06022b797598bdabfd7029128d9ebc9934784edf77175292c17b60152e7464938f78ddb8ab2883e0da22fdf94e584d0fe8d766c40228bc0a564e6ce76c39365",
408
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/uploadmedia.json": "35f19877904dd5eacf97183a286db18153002e37159f6e007c9c70644843d73963e9293a5e64c1854665821e36592f5ca11289d2ece86fafb3ddc4b8b758dc4f",
409
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/wSpeak.xml": "05cdd9418d049dc33432e02bc305b10635daf3bda936c695c4136bc4bb8167ac63e6ae809202a566e5a1488d8543c06fd9c52f869b03a474bfc3db560769c00b",
410
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/AccountTest.php": "8a98fbb165ab60db8a7423252e78d9db1da922dc2e1de9ef5cde32488c04380ab01e8fe53f4f542c602b28e574966adf58385456388fb4aff543dc04467de668",
411
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/ApplicationTest.php": "e23381682056702928ea1c587bf8241f71743e4349cb30b621f2c843711c108c0811689c953ecd52515b2c780c50c134f959e4ef77ad2c0dd65dfccfa8c79c2c",
412
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/CallTest.php": "7aa7df68b91782de7a8ff67ce4bdce917de03ce4800da2d6c103f0d1297fc26c09effbbb7ead06d70566398b8679c54246213c4babefca43976c289b8bdb895c",
413
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/ConferenceTest.php": "3d1149c50cc760ec57de791d7a1eb46a5210c113fe91e1756dc642d2d94b333067c9c3c5ff9d0c90d9ad8981963394d332287b57b84c634c8e4008ec5cb2356c",
414
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/EndpointTest.php": "aae4c23a72674a9d4da6261986147a3b3a1c5e4da03d2efe7f4ec21336e03d352ddc0f7e47dab3c9b4063a170d37e0eebeba649ecd1159d85a3c5553789c51b1",
415
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/LookupTest.php": "c436483d9ad54681ed44ef7a6b44d4899d06b7b421be27d2a076aa4bbef23a5d160d5098c60d5c380a8e66ebf8245c917074edf6a7b682d056f9f60e082de032",
416
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/MediaTest.php": "a6ea3f17046c123698c0b8fc1e7cfca6665159166dd53b51d1b5a7700373527c7346a90e67a382f4df26ed3f92209790c3ca93c0c3d3b653d424e17a1fed9f17",
417
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/MessageTest.php": "9749cc39c4acb64b49150958745f19952ffeab648abf06ae839eccf8eb9a6c66bea62e7d8fa398dc48a79bdc97ee063df934ba827632faf88f4aca01e5432181",
418
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/NumberTest.php": "9123fe40158482d314279a729e4c5c0eecf3733884ea39df16de986e775e93e90b8d9c7ad35fbde8f3d4cde3e02b33c70ebe87cbb27039615de8213cc27aad47",
419
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/PhoneNumberTest.php": "4b52dd78392c66e1d1803a278ab98bb03e4bfe5275e28b043e4f672357125b4373acece1c2c5668081be021a683acd2796e6ba5ff2646baf3435dda1d6de7667",
420
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/PowerpackTest.php": "52a3c6967c93b1b996abb3fe7e40ebaec915e58e715c6943b0f5ebd945c8a59023184dd1339cd044d2f3ef1a0041a61559a41a3832bfc222332fd85bca8371c9",
421
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/PricingTest.php": "91a088d32f726c2eb49160363f7a77d351f3f65d43a9282cbea646310e2d01a33d22a2adff9ce5795f949bd205c0b6e77571f0a231265514704f42bdefbc51bf",
422
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/RecordingTest.php": "353008dcfc66ae09e915787634877d598930e60fff3f1e6eec0aa5590881f66d78ebd79aa1ba2b2a20409e4b9372eef9ab28406c9fd29f95ca6c773d8c83fa63",
423
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/SubAccountTest.php": "6dd803629402c6f7b8d923753477f6c03d6cfbd50aa59fcd63556527cdbc3d932557b318cf8c7a9f5a9d3ff8ff143ef15f31256e488fa8c35cd62bf80ae04d5a",
424
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/TestClient.php": "8917a380e2cc030228dbb37a7a3aaedd2cd624d8102eee1fc3469a9838f31f7ee734a40cd45e510d63bf4c1526da4bb3af8d45bd4ebd4382cc9fd5bc2ba178c1",
425
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/UtilTest.php": "6a66cd73b0cd403f64f8a4752381964bbac7507b4449e81c9aaa64d61db244128c604a8995327dd8e8ccc8a30cee7a3a57fc617b845ebe65a65ac38125ca7394",
426
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/BreakTest.php": "740c84bc38e7044f5138e3816b72c6a94bca3accb592733421578a6eee2080bc6721d85cefeb8b6f1db751e2056fbf722e0dae61d260b089dd803e72cd9cc0d7",
427
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/ContSpeakTest.php": "f3b641231907bf807c5c09b65a13409ea054b0116b9b36f5bbcc2bfa651592ae1f4707be5780c37c5b9f1516044a9f524f4ca829cd0b5387a6a32526ba11cc94",
428
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/EmphasisTest.php": "b76b6d0eee048b44965f87fa6f59614e64d885864ef3ff0aa2310746d76304fb5ac6cc6d0c714e7560e5472e018fd0183cf9a918d3e4ee5415723314d7d219e6",
429
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/LangTest.php": "1a4ef409ded7d9c7abd8c63994dd3e221b16bd1fcca8133ce43e04b300a28468cea68e430098393acafb78e537e37b0574644735cb84fd08e33dbd828e2fb071",
430
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/PTest.php": "9084715ad9065f1a926e8dfdabc5816b16a385dd5cd74f16f6fdfd1aef043b7d344d9cdac4b9dc43df85e8e63f329909553e20b86d995d9eb6d25d716fc5fd1b",
431
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/PhonemeTest.php": "f85a3119f95615c3d3e16c0a4c1d2aec7b2191629b60de276cedb769b23e11546fc27fff57e329c1ac6cb52868208d29f88d1412b452932b573d88cee9fbd68c",
432
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/ProsodyTest.php": "5aecbb6cb41b0269b0895e580bf87dae24703c3116dd39774c11d52406635f4167bf55ed0b950cb4d8af9138c03361161527c7f0e08867053034d8aea1fb1daa",
433
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/STest.php": "55343bd191ba9b88fdafcc409c1685224cd6673225c1ecdc006d4c3643d9e4f71fde0a07ead3f1bfda80bed486f09a7fdf42e16cf3d4fe66f592bb72397320bf",
434
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/SayAsTest.php": "005fb0efa4803847719d9e7d52438ada0026b3860d7143fa4deb96a80826ff0f8608b3dd9302617547dd36cdee5293ec25570dd6513cd81a921ff483379574ab",
435
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/SpeakTest.php": "cc92de5d0f5df6de17b121249074752bb191265335a6e50dcc4739fe525cc9d0014c187a7d15cd0c1226c56360277469ba10da72dc56dde01f478acc510a8dad",
436
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/SubTest.php": "5c113371cb363691313226362512772facc38c30afdc32e96976aa309d6ac33aa32bab7d4ba674cd566182641048434dc65cf1403f25ea4adfdf6c6793db2fc9",
437
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/WTest.php": "f7cb4983bde61290a90fac15c009ff1780b02fb81c8568d0e8a1f40fab97dc1ec2245cd477b5ec669c6f54e56bcf7351e38c09caac7255756174baf4070c9284",
438
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XmlTest.php": "58317dda536a0383749d695ee8cce6f73d6ab413984673d46b10d9299e5a70c6cc464051e986b75c849286787a8fb23ef15e8bdf6bbc9a27e1c0cadf46a1bcd3",
439
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/bootstrap.php": "fb1c83cc2a11ffef9903eaf721f4cbcda4767f70368be33a0980aec4e5b515fa8258750f6e19fca0eff6843d0294de9c35b8e95af0e62f51a94442be0099720d",
440
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/phpunit.xml": "74191aa62aebbcf797167fc2bfb6bb304cb3d309287a73919caa1c43c188dcef47a1f1905e56143952e4b342ef183a84887dacd6976c18e58025582d5f672035",
441
-        "providers\/Plivo\/vendor\/psr\/http-client\/CHANGELOG.md": "82bb81ca074204aff5d95ac5d3edfa9c85569c8b9114f809e3e2f9525a6046a1276187ca42f638ed428311631791f60e6dace74cd60d77f1af0a41e9f76ab2ac",
442
-        "providers\/Plivo\/vendor\/psr\/http-client\/LICENSE": "3e0ee70fc857b6dda26ef2eafa55ef09384d82bb2f85b4289abcd94a60201c698eb477dcf03a73858b2cbb9efcf00affa199e848344b84dd4a4c135601e886ce",
443
-        "providers\/Plivo\/vendor\/psr\/http-client\/README.md": "a8fc38f5744eb4c1f14f5016b02108319b7cceea7fb3219f57f0604a2e92778fa9be6f1e340003b095f70c962aff0b49ccfb0264b26eecb8fa7782667e62cf3a",
444
-        "providers\/Plivo\/vendor\/psr\/http-client\/composer.json": "b767c510e3dc28fc5c8c0debf4e5627f4897940d41ced88cb0c85284c2e0765f49305997407e84d87154a4d9e14045e6c50fd86163d3d7452294af8b7bc36ccf",
445
-        "providers\/Plivo\/vendor\/psr\/http-client\/src\/ClientExceptionInterface.php": "33aededf573747615cbf7b8bc6aa10faea7762c903a0cc98bc43803043f9bad58460f09f7301814c22e95f2a6d0269388d8ca899ab76fcf0f2bd8d82aea5d9c3",
446
-        "providers\/Plivo\/vendor\/psr\/http-client\/src\/ClientInterface.php": "11b1cee24748c4ed1a41681b1b6e43e865e08150be14452de885daaca737f4029d65e8381632a23910789d3cf5e9f9d02f4999aad62e4e8c80a2fda9ac96a4ed",
447
-        "providers\/Plivo\/vendor\/psr\/http-client\/src\/NetworkExceptionInterface.php": "6d3d81d18a51f451e8a1b74a16b3ac8ce6c5642013a2d1375ce6718090de5369779f9d6f594675aeeb7bc3f55a11f1b9396036354c4e9ae0c90183ff369fd65e",
448
-        "providers\/Plivo\/vendor\/psr\/http-client\/src\/RequestExceptionInterface.php": "46391124b679cd54538ce5ae6b05d7fcfb6b9ef7680f33c8771f94b38075a366788293b757ccc674060d615783476e1151d0ab8a5f2a10e24578c9b46cc1433f",
449
-        "providers\/Plivo\/vendor\/psr\/http-message\/CHANGELOG.md": "5567e49c016bd259491fd13a96e5b88629fe67ccaa0d75f7aa7c54096edd663fc743930eeade981a041cf7524d9f65104718c129fa36a200397d30c0e5d2c954",
450
-        "providers\/Plivo\/vendor\/psr\/http-message\/LICENSE": "22ef0ac33682fbed60a5274a5b25991308decbb45c6ed45fb3222cc045bb9e552fa7310b1ab6f38329b63f53a02c25e7bc5e955ad23c5bb2366b417563cb71de",
451
-        "providers\/Plivo\/vendor\/psr\/http-message\/README.md": "d58ab57a3e35e51848c3c21313836c88eaca950eb5b716878ba950ad2389bdd84b24a5fd8e6b19ce3ff04b07d879b5206b0f26d5e3a63a5be19beac0e9ccc1de",
452
-        "providers\/Plivo\/vendor\/psr\/http-message\/composer.json": "4f074821b6fb7074c418bed0fb6232677a0cf6ae5ddf24694e14bd5aa7fb3610a645f2221fd024e7c4bfe3e95501421455dcfbbbb38468e9db442b8cde9471a7",
453
-        "providers\/Plivo\/vendor\/psr\/http-message\/src\/MessageInterface.php": "b79e96e691ad169d4d70420953ccb5933301ce7cedc17d4eaba859dbd56719008198fd201e3be1606ea5dbc78b559f1d86ba17b73ab7e843f0c2f0b49564147f",
454
-        "providers\/Plivo\/vendor\/psr\/http-message\/src\/RequestInterface.php": "f54aefad46987c6b4880d5f09f7e99909e6e2a99f9d305d1f73e4de58b43493179149912352869e50fc46e057f50c78ba7ed5df6280a7c0347f3d7c36afcbfe4",
455
-        "providers\/Plivo\/vendor\/psr\/http-message\/src\/ResponseInterface.php": "69d177fb504f47ca0181ab35e2155cacf16e77535d07bf4eb4d790e1ddbc7a133f3de21eff936a3e75acb704c936ee2f2b12b2cf3516464222c3d60ea9760488",
456
-        "providers\/Plivo\/vendor\/psr\/http-message\/src\/ServerRequestInterface.php": "ea36ff66e8bd962e468fb2bc832e70f7bbd81f92dc0e607cd69092b737609d565f3e254a2d54fb3588f5302315f62e53c6eefe9299ba4b6f1f53ba8feffa815c",
457
-        "providers\/Plivo\/vendor\/psr\/http-message\/src\/StreamInterface.php": "11ab8a9d07beea1f1633f8f6cabb2a463ff288555f2fb8a4cc0b99404d8580493018557a0f2674feef653be51f6fb8d9aa3ad8e6dede0391cadb7bb49f96f781",
458
-        "providers\/Plivo\/vendor\/psr\/http-message\/src\/UploadedFileInterface.php": "65da733a08d80c5490fec8e69c7b56a47efc522e720a2ddcc673bd74c0e21f5fad4d522ad47da4942d25d139b5392e0882de32b7fe5a5697b86f40fd96ff0f8e",
459
-        "providers\/Plivo\/vendor\/psr\/http-message\/src\/UriInterface.php": "0d46735005331a3489e3ef4c8229307320de44b0443ff74d238cf8f3962d83e99316da9435259d479b48477d33e8713dd3d1a1859264c22f2a53b43cd6adae2c",
460
-        "providers\/Plivo\/vendor\/ralouphie\/getallheaders\/LICENSE": "ba7ad111dab105773d8a75d20024b48c4222cba6f7836b7b608fddf34f367cd218302829a1926a675bfd22660f4562b0e9a679d15b41162412924ebcc1a4e557",
461
-        "providers\/Plivo\/vendor\/ralouphie\/getallheaders\/README.md": "48ce2def80836640ced369db92da9f9e943b319849cc89441023bc260edd6919c710d08c91fbdf04864c6e08bf89e60a397f5e814b3e9699b48df574f5799522",
462
-        "providers\/Plivo\/vendor\/ralouphie\/getallheaders\/composer.json": "495b111d0e0b4f4496ccaec984dc89c897f189a67d840c09b0cf17034629e1c896c37c4ddb1afdceb7d5a188dd0d90405ce34aad409d3b7722169628411d3ca4",
463
-        "providers\/Plivo\/vendor\/ralouphie\/getallheaders\/src\/getallheaders.php": "a61a5f91f21a68108c7e9c8eef22282e4b1b6f6f14ff997c5f47c83f39acd08ec60f4b9d25d306d67fdc68ec57c7f71a44a1f63ebf7c25b40ad61fa1cb4e58a6",
464
-        "providers\/Telnyx\/CHANGELOG.md": "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e",
465
-        "providers\/Telnyx\/LICENSE": "8756122099aea86ddf6f176a480c0454f2be6dd278e475bd6be7d7ab3d572162f1bd44c9f623e52e53514cb15336be6e84a5eafc8e2a347b481ab5799ebd6e17",
466
-        "providers\/Telnyx\/README.md": "321748e1de717ff62ccd3fb2c10fbed8ce92a66271f2047c83be8929f965c179cd163e429175b44893ae30addef3623f96659b98528a405a585f7afc7394e866",
467
-        "providers\/Telnyx\/VERSION": "7558cccb74c98362a480e1c0ae17e711de8e5d6cd10f508a31395105c0efb22cdea79aa6f9f6f890837d519acafc2cb3c429d3ab17a283e1992e5aca5053e25b",
468
-        "providers\/Telnyx\/build.php": "485d76b827a54d8455550e8a8f8d14862f9444381da251e66c2bb8ceaf2106a554c1cd339666b1260450749d0244d6b9ba0c6d0a2220ab2411aa4041fc83f8ad",
469
-        "providers\/Telnyx\/composer.json": "7ab90dcc0b5854786b213e5f2ee8c8030b21f65b2f8d0f74a3aa6d771ca1054ae5e1ba58ad6684dd1234e7eb7244be537cdb0a6888172cffcdaefcc7f5908dd5",
470
-        "providers\/Telnyx\/composer.lock": "1e4b665caeb711f94b1e7f0ce6388e91ada9973159c1230d4e60f0dcfd44ba9af2dd236e6acaa27564e91b4a89dde817d5a73cad8682aa9cb93b203f467c6be0",
471
-        "providers\/Telnyx\/data\/ca-certificates.crt": "66816e077ee99ceb9535a472e6bbf4f0e48ca838099c8a97c7baf3297fcada9a43016ea1ded63a455ee56a8f18501417a0f744fc17b215bb599cafd76b754518",
472
-        "providers\/Telnyx\/docker-compose.yml": "1fe4c651e406095f0ff1bfc196406d473184bf53cf80f7c67dc79f1aa94b26db74174e0e9bc47adc95eb2a5f6eb950255c4a5cf44ccb7029ba712df3be9e6384",
473
-        "providers\/Telnyx\/docker\/Dockerfile": "a63d1fabd8c19fef37b90922aa4bb21fbd1094635666cf2a3a4db47009888bfd3f1ad5c34c05184e2ccc8f581971f6dae91c1ff137730821422cd482c39e9390",
474
-        "providers\/Telnyx\/docker\/entrypoint.sh": "2bf3911c365a271fc52d17a0aac1687abf52e5286a5d52cd34367e18651dcfd6ef1f791b54105b7742f5d691564ddca3c05a9ba4ce8edfbc68fe919e0bdf6c1e",
475
-        "providers\/Telnyx\/init.php": "e590e355286b775423b39dd23b5aa0d3383d8a85ed2d1346802e0c487cb834154b4ba1b0ca41ae112ba81cf5afbcc9133db8747e08565c00fa3b0ea04fa7ccbd",
476
-        "providers\/Telnyx\/lib\/AlphanumericSenderID.php": "c6f7d381cd9901af59d67c66fbe6ace0729c77ac2b2962ce41351ed076cb39c9049aeeb72ba0e3933ebce4ab8a936b86a7e21d30a1c07b2b08cad9da2abcda1e",
477
-        "providers\/Telnyx\/lib\/ApiOperations\/All.php": "5caeaf5bede40fa19422387d224255ed534a866638b22a7a832111cada5496764bc0434cb1aa7365e1d4e0a8ad55545bb05a42a17ae5f2b361ed42c12166a229",
478
-        "providers\/Telnyx\/lib\/ApiOperations\/Create.php": "811f9227ecc5acb172e8e7120541227de0bc22cbf66a41490b743b3e49647a38889d5cfa5d64139b602572f0fcc0fbb96e3971c78801ed9acf7b50db2ab7499c",
479
-        "providers\/Telnyx\/lib\/ApiOperations\/Delete.php": "4c03010d81be8014694e366cf93244dd2f73dfb38fe8a1f3066b6ce179b999967de5a9d3e3140b3076d0dbbeccea329ac750ebb93915ced1e44891ab589f0c7f",
480
-        "providers\/Telnyx\/lib\/ApiOperations\/NestedResource.php": "390efb020ed7c101b32379716bc2111e83273e2a7092da61623f85295c67ad1f6ac2fda617ec91eb28d02ed52a86db9992ee044356f3d96aff2e3474b16da601",
481
-        "providers\/Telnyx\/lib\/ApiOperations\/Request.php": "5b947c7171a05a754fce9c5bcb81f93c1614db086fd4ceef9be1a57977f8bfa7311af0a60a2879d8cb9380c64ddbf7c991738e5b5a4e4b2feb5d88e25c822f3d",
482
-        "providers\/Telnyx\/lib\/ApiOperations\/Retrieve.php": "d2a5aed1aaab9421f2f2b41f69047a70bdea46082e118cd94e087f4082865313d7c67aa037fac194063c53b06d9dccbfa5e65582a9adbbcaaa2982396cbda01c",
483
-        "providers\/Telnyx\/lib\/ApiOperations\/Update.php": "a102e823a46dca1eea6c0bd67b4b7c63bdc0d074c97b42a830de18006782309d3c5f77103b32e82c778f670aade73d3c31f49da49682d9ac204560bd868cd526",
484
-        "providers\/Telnyx\/lib\/ApiRequestor.php": "617ebb71c97dbd896ad736a4e1235f784ea7b89dd73a980a2b259820e3dde0ae935fa532d1fc8e0d9e14a63f843e880e074319bab2f9c519c1ec19467f80bbd7",
485
-        "providers\/Telnyx\/lib\/ApiResource.php": "40b33a633cfba6c4efd4035bb668720a802c2b86538a36bae2f56b8cb1025b87f204732b9ed4f731cb9293de3d69e753e2e55a4f17980b75c2d91c572329c6a9",
486
-        "providers\/Telnyx\/lib\/ApiResponse.php": "0d292d053a85224f4ac839f54253decab0eec5ae9861ca95314e98cad0fec2d2f0a7e712a8ec433adb302b6702d69262c8866b20fd08d67b2d18571965bf6789",
487
-        "providers\/Telnyx\/lib\/AvailablePhoneNumber.php": "7c82ca4fa28264c4fdd910c71741270657e52cdbc760343339bbb7c1d5980d27b7af476f7e1bd431926d428dba685a6e34d250f9678ef0a4e3cd8c4b06289e55",
488
-        "providers\/Telnyx\/lib\/Collection.php": "8953b7490974401e598cfdba09be005dcc037ff74d7eed660d11afca7a45d62c47f6b6c4f31b3b3003f3d9401599283122034362618a9c3d487eb131d05cfa13",
489
-        "providers\/Telnyx\/lib\/Error\/Api.php": "5c496f65e000a74652c5e7e3c79303befb693e497d67dab4e13287ebe72722c9651fa04c4de4065ea969e140f7a2f74ccaee2ab728f05790ee26200558d0085c",
490
-        "providers\/Telnyx\/lib\/Error\/ApiConnection.php": "469821ef557d096a088d2997f762b4a39c82c49bcf22ca707bcbf611b20006106522150d6365835e0c7e23e3303bd407d78181fb7b5d86bd35095645e68da158",
491
-        "providers\/Telnyx\/lib\/Error\/Authentication.php": "e1c7a938a695fcd8602e5a972086989efd349a6d8d5e3abddbf6f548ba2e1f9bdabe708b5ea75474f7c3588ba7cca8a1dc60970a8be70a80962f90342e67c13c",
492
-        "providers\/Telnyx\/lib\/Error\/Base.php": "9d311a5445b2f3d9c4e25c42094734c3d6243fdc5025c7e5a609ce49d2b2a47f01ea2f163154917f3330e1a92d30a736319c4daf3ae18bb6ddc41d131afae0ff",
493
-        "providers\/Telnyx\/lib\/Error\/Idempotency.php": "cde2f56479baab53e74c6784878c7914e7393b655bfdbf7a36e0619fa9c521671c105c3d5002983b3759989a22eafa0bba7b4aedd4801d7d6b820842c0285e35",
494
-        "providers\/Telnyx\/lib\/Error\/InvalidRequest.php": "0c5748224174c20020155c9f0c734121d07c752460ef63648b08a2392bb6d8b6ff0a9eba13ed1cfb8988545f6dc8c70930de6e78da03c63da0e59bc5fa109a9f",
495
-        "providers\/Telnyx\/lib\/Error\/Permission.php": "3a03b08e77e6fd0897de16d69fb3769707f6fb46717b2a00f1282d7b3e33527f5ca5ea94b6df03c883ea177520140ab2dce4986e0ee0977cce8c375e8a5011fd",
496
-        "providers\/Telnyx\/lib\/Error\/RateLimit.php": "0ceb884f1078559f5bbfbba6153e6bacd6ebc49dac2d047da9e7c64d45c7cff0abc067711366aaec74a4f2736b7205c02ae9de8c214871a82ed1fc53faf4be73",
497
-        "providers\/Telnyx\/lib\/Error\/SignatureVerification.php": "8aec6ea46f62c2b6ecf845cadb726332f89a6c0dd92f4864ac71ffd25268b2af0468cfa83b32a24e91c735ae947498bdc6181efe09857c6bfa799cec721dadda",
498
-        "providers\/Telnyx\/lib\/HttpClient\/ClientInterface.php": "f47e88048bac320e8cabb1b61869f138f84a04858afc3b7aff4de858db9b3efc507d1607037bf07ec5fb1f1df4069b71bf8ec1d0edf953bd1eb8255e67651ae9",
499
-        "providers\/Telnyx\/lib\/HttpClient\/CurlClient.php": "fed4939d221213da7fa7865b4405e5c0b7dc092375e5acd890bfdf178baa6572ec7ac7ad57cb02caab5af24d2aa52763bae1b21679f3b94e6f7ba659cee7a438",
500
-        "providers\/Telnyx\/lib\/Message.php": "18acf4bf51ec27d330df16216924c65a45db59895b610a3c803ef1d09beb7d96d20753b4ec16be06ed40f2886ad46bb3d866f14a87021484ede5d33ac1a93c4a",
501
-        "providers\/Telnyx\/lib\/MessagingPhoneNumber.php": "2a2caa5e44efc5de92ef9b0f8ed0a68af1ab2c80932f4cd7fe79caa87ca1e146af3bd0e1d16d977738da2a3af1fb3cef77081c32a0dac50bbe8ef54a108efbc9",
502
-        "providers\/Telnyx\/lib\/MessagingProfile.php": "351d96a913427c045f534b6993c37fa6ce2ecbdd7a398502ae6447d631ff322ce146cd73dcd1161c999f6bc9ab9764221b4bd3567888dd14c110b98bdc4432b3",
503
-        "providers\/Telnyx\/lib\/NumberOrder.php": "52067d9999c150fbefcbba9969b308bb6118eabe25bd08f30cc4978cdebd68fce4479e53d71ce29632133e8c69bb4ce9276301f5a36ea95bd77d29fd057f5d46",
504
-        "providers\/Telnyx\/lib\/NumberReservation.php": "2b44bfa3fdcce2e21668004d458e9e6bcdb5e33cc37e9a0c980bbdcacec945dc4e06e489bf5b9d0194df00229a79e39bc2a62395d44e4072473441e258841baa",
505
-        "providers\/Telnyx\/lib\/Reporting\/ReportRun.php": "2a7b066db83e08b86e3da4c0b2d041c4d53ce0a1fc95ca3dab76ad2bbf549d74f9a97974be6bbbf0d7b592a814a00b514bb26ad13c7621b5c229f9bc40abac7c",
506
-        "providers\/Telnyx\/lib\/Reporting\/ReportType.php": "92ad055c626d39d9f878666310ffec1c425d4625af9e7803547d50f1684c166ea1dc67d79c35580ae08850bb6e570a81994014e82f4d4080377cfbc664c4fbc5",
507
-        "providers\/Telnyx\/lib\/RequestTelemetry.php": "cefdb55dce61e5f276bd49f6b49e57c78085338537e56cce6fea5a81cd1d2235f1eaa78be326cbd513117be88a046177afb628659088b66ce423799995c53709",
508
-        "providers\/Telnyx\/lib\/ShortCode.php": "4abc882d0dbc72becbff07212d17b8e1383b0efb43818a7eab983fd2a08c3f591a4f4ba2f185003fab0622a43329c969d2fcc80b23cb94410007a0879309ad49",
509
-        "providers\/Telnyx\/lib\/SingletonApiResource.php": "f11599b789dfaef76ef6cf10bade1b426d2e16749bd207c6d08ddd007fea470fdbf0492f9a59cf8bc9f8589aa4532cd6c3887629cf27060696c3f086b0a48673",
510
-        "providers\/Telnyx\/lib\/Telnyx.php": "4971ff61049149242b0cfdca4a15dce213c465ee697cb444eb47da8215eddf2737508164c59393bd7661cf40b1a525afa9fc0df0dae8a071a59f3646a5ec44b9",
511
-        "providers\/Telnyx\/lib\/TelnyxObject.php": "a1bb11b6bfecd69ba694dd34d6309707e916ef45edea1e81e160c572dc404aa4e16841f3be7a82b3965037efef24db7c7c9730fbb65d26e8a188d30fa9af01f6",
512
-        "providers\/Telnyx\/lib\/Util\/AutoPagingIterator.php": "d03ac3841bb553d847be9ea73ab9debd8c1f2c829b0d38ac4416a121ac535a5ece2ecd9943d89e720cb5abb1c907ca9b96df899a561c190ccd6843bde785114b",
513
-        "providers\/Telnyx\/lib\/Util\/CaseInsensitiveArray.php": "bcdf3fba35ae234bc63ba6cdb5429aaa5fd6baed85857991abb9eff854b23eb7a878184ed038636292ac470b67f91c6bf8d79c20a6214d31c872d22fe51833a5",
514
-        "providers\/Telnyx\/lib\/Util\/DefaultLogger.php": "50a69f9f6ad628e489a05fdad0df811c926c957c301adb0b4b906dcce9733a0598f6c2eb126865c54a0100131dc4230a834b1e98275237ce8e90bff2e96cd0fb",
515
-        "providers\/Telnyx\/lib\/Util\/LoggerInterface.php": "8d2dc2c59af5e625eaeef0b85b09f78a42e533b62fee84717d67a4c706fbacd94674f439d3ac60984c0a3947b7d2f5a8ccfb64e071c41d063b8298f57578f88c",
516
-        "providers\/Telnyx\/lib\/Util\/RandomGenerator.php": "292c880420b28390e3d734c6343acd48f322db0c474f80430402916de1dcbf8e988b3d2753a7c18e763e632f474284b213ccc8e8fe4e52f00569e72728dcccb4",
517
-        "providers\/Telnyx\/lib\/Util\/RequestOptions.php": "61a13e62a72e7fc4a1f4d2a707d03ca785af36dd8566e037efa4b1a07d91debe1bccc637bbae6ab9dd836b20a4133cdb7316d6c2628da0d13d2164d6613f1e3f",
518
-        "providers\/Telnyx\/lib\/Util\/Set.php": "1381d2144748a490fd27329fe231e9d3a9a8b428499d4005f9ff18a946c350d8dda1ea90285314a1a99f5d351b1b235ad37a74823c37d7345da8af528dbbba87",
519
-        "providers\/Telnyx\/lib\/Util\/Util.php": "d7c35dbf5a2832ced6059800a6730fbe75338252641edab902adfb134a179d96e162f05bca2902c6c2d99cf4827d5b89b0daac826162c7d460e17017ee405606",
520
-        "providers\/Telnyx\/phpunit.no_autoload.xml": "06ad2f4fe0a292902757629f5605509f32a0d1dca527550619c98a61519d83fc70f3c886b12f5e5734b1031186fd9c7fed6fba813cd816b0f07d36c2a6bf11e4",
521
-        "providers\/Telnyx\/phpunit.xml": "82ac037adc20f2aa76682878094e8bffbfe31782dc6a94e2987bac5546e3ffec90577d03715f4ce481cc977685eec9e4109a61b4b46bc19351c2cad555d7cadf",
522
-        "providers\/Telnyx\/tests\/TelnyxMock.php": "e8e93ca1114530cb7e9cad46eb20e32072934496d515a9391ce8093773450dd60f3288f9d3ba46533a0f650fe67b508d5e54bbfc6e1642443d1fc043b88eaaeb",
523
-        "providers\/Telnyx\/tests\/TestCase.php": "9945df738b56e344648cc00d3d4b94345c15d8749ce511b5095a87d5e52aed35d8e3c773276d9dde9d9fa04eada784a55e4876ebf70a198ba719c8e94c8c32d8",
524
-        "providers\/Telnyx\/tests\/api_resources\/AlphanumericSenderIDTest.php": "1db47c5c215f1dccbc0456035edb1619cb7575dfe2b152924a6e1abe4a021bf63be3b1d1cf1b86285c5425f5df46c8e396cd66b6ff6a27534e402e145e5fb194",
525
-        "providers\/Telnyx\/tests\/api_resources\/AvailablePhoneNumberTest.php": "823ab5138035a84a790d70c9bc5964e7aa163f195aeaa2fb50d2cfc7068f1a77440f09a134bec36a187cf57cca6c735b428b225239a263aa26cc5cecbecdf6d5",
526
-        "providers\/Telnyx\/tests\/api_resources\/CollectionTest.php": "af248a4d4c4504f5fb7148e8f5ddbce3a05cc859a761f57cffb8335be10b07ef6d4e808002601f92eff2968e86873fbbc3fad838420db0694f81b9cd95091452",
527
-        "providers\/Telnyx\/tests\/api_resources\/MessageTest.php": "a616a69339b599526dfd24a25d8e99eefc99c2341bb7d4f635d1b4984f41dc38a3eb6bca3e4242caccb974b141a490624669b5c2b2f5315b6cb07540d74fcad7",
528
-        "providers\/Telnyx\/tests\/api_resources\/MessagingPhoneNumberTest.php": "40409c270a6f9a683bc690f6e91051fe1ac4c8a6cb1b4e5536416d64fc3f8c81f327f33e562ee94cee1481e0ec2f13148b0dc3f76f3f20a49a9d80adfa5c1afa",
529
-        "providers\/Telnyx\/tests\/api_resources\/MessagingProfileTest.php": "1ca7abc2b47f221b491ebbe7def5569deada6eaf4184bd6e6327f7bf2da15669d1fff581e24c466621e8462e816c0a12d02e0aa1d91aa3746092f8a09a9131ae",
530
-        "providers\/Telnyx\/tests\/api_resources\/NumberOrderTest.php": "dd6e4382dcdb0cd60ded9d9db6262bbc7f523e8f5eb842e15655fe8ba4e24ad5192b8be40bbc762de2c62de3aeec31e1373063420a99e39bf02f5bf74915d5ab",
531
-        "providers\/Telnyx\/tests\/api_resources\/NumberReservationTest.php": "8b8386c0e044e120b6d60f97433c9ecf0ddc272f805034768300bf01bfbc731a3f6f964758e509d650013df03bca66eb1db13fa1a24315df76ea55fd86287fd6",
532
-        "providers\/Telnyx\/tests\/api_resources\/ShortCodeTest.php": "8aef092868b89adda6517905c7f05245b3c39affed4c7723e5a32cf17b8e39528e8925923aad4b2add5a0bbce9049a8f934141b87a790fcb002eaf77aa494258",
533
-        "providers\/Telnyx\/tests\/bootstrap.no_autoload.php": "cb002f7c8f77834b6414db6535f083bcd227ee6085363fa3cb0f66b55226680a45c8562fd8458249868465957b2aeae134b3379f8ee2ed22c96425475e9c0af1",
534
-        "providers\/Telnyx\/tests\/bootstrap.php": "50e143ed68aceb91d3e119d5a31521e76bfe9876bd780c90ac83afb7ca4f32be48ff81c33c134109eafe1d22f35e0957a9a834966b8853df99dc1df04795adf4",
535
-        "providers\/Telnyx\/tests\/data\/test.png": "6ad523f5b65487369d305613366b9f68dcdeee225291766e3b25faf45439ca069f614030c08ca54c714fdbf7a944fac489b1515a8bf9e0d3191e1bcbbfe6a9df",
536
-        "providers\/Telnyx\/tests\/openapi\/README.md": "0c54fffd5b7a5f393358864ff9e3bd3793075d6060cc1336603b2455d60f16d160ffd47b52bca6834acf0d9713855b386f69580099a3dcc131e8d5d617975ff2",
537
-        "providers\/Telnyx\/update_certs.php": "46dfc1129c3dff2211cdd8274fadd8629c450e94a7a1c8527373221b25a0664b6043d6b007351ac9afa4b40ba349a7fdbf4ad2e088cf0a8d864f7cbb81145fb9",
538
-        "providers\/Telnyx\/vendor\/autoload.php": "1d4735a3ebfd65901ce478f8bb98ac576ef9ba2706f17a1c6ab125979a882ec7ff463b577fed1c418f817c1a56e842fc25b6aeb8e7ce6dcdd554a25e03959c3a",
539
-        "providers\/Telnyx\/vendor\/composer\/ClassLoader.php": "866e8cbde808b4e7774c5d9e2bdda44e84ff9bc84268785aff1a75277bd7918dc26ceeb27732718c9ea93756777ec0d16c09c15f9c1179be3cbb410c7914d295",
540
-        "providers\/Telnyx\/vendor\/composer\/InstalledVersions.php": "86ebb1216b59b01b7cd1f3b2e66311cd6295b58fab91a9a82603f903c6d2f716d7697a82d625372538f809e9e45f7dbd257a00e2b95d23c3785e4eeb3a6ebb60",
541
-        "providers\/Telnyx\/vendor\/composer\/LICENSE": "f3bb64009f41a425df5a9bbab53490f0eb9b74fa8d6aaa2f57efb928edc4ffff330260666edeaa04a91fed708c3663371cf01b284f3a08d6698aaef7a23f355a",
542
-        "providers\/Telnyx\/vendor\/composer\/autoload_classmap.php": "a298b75d605ec9a330a5efe11769e79f02cf202f49d8b241afbd175c7fcfa0ac4db8e72a29aa1d839138e3b181fbfeca525181eb57e998a4a2c14ec9e457cf1a",
543
-        "providers\/Telnyx\/vendor\/composer\/autoload_files.php": "107b2d75757e7b39e2d279e373fd4291d57e91a7f442b0f880b51d07e7119beb9d41d1cdf916131bba717e8da953e2117ff83f1bd9ef850fc1d9056d0f02996f",
544
-        "providers\/Telnyx\/vendor\/composer\/autoload_namespaces.php": "30324cf2dc20c214c5b5c8fdc2099b67772149ddea1d1d51969c711be9a83d036e43746c600f958a6b49969b16a10ef93e9b1e3d5af9714721ead916b9aef344",
545
-        "providers\/Telnyx\/vendor\/composer\/autoload_psr4.php": "02804e683dc13b4eb2ad98284be2dff3eeb97f0ae9054c3a45641ce7e6144a3b5f34ae36eb764fd2faae39fe5dd4131b4dffd4649c6ba3220ef24aeab45efcb4",
546
-        "providers\/Telnyx\/vendor\/composer\/autoload_real.php": "469f95fde429006c3262cabe72cd49970b0cd6098b743d8e5a646af25679dfe539c98d3337b51a8faf7f30d9c64e1def8d131a93e8897f801830e7e1c4da5874",
547
-        "providers\/Telnyx\/vendor\/composer\/autoload_static.php": "4845f043e32744886f456f358ea87cdcfd641508151ba6c3b0169c9aa53fe111f05b78b82e204368da01da68d7007709c9140d08dce4e7dca3cc4c9f60397dcb",
548
-        "providers\/Telnyx\/vendor\/composer\/installed.json": "5ca47a408f164e118f7ccba81577933913002efce47331f2eeb13f3e24d78878521db08454026d270deaa6552095260d745f0a424c91eb7efd36f6a9a20adfba",
549
-        "providers\/Telnyx\/vendor\/composer\/installed.php": "38fb24f1f4e4aa0435926d601c7b78797c231eb0e3621e370b17078645f5d238a1d02da3a29cd14a9125f78f53964445f4326311f6e830cf8faa24e944215ce4",
550
-        "providers\/Telnyx\/vendor\/composer\/platform_check.php": "4d385b31994301facce94382fa007a56ee32268d2e1cdbe7c9f9cfa834ed4195d3cf8e8e7c9a800c97aafe2c9b46f3c1a93e632c7415e8a9e4a282c083cc6f9a",
551
-        "providers\/Telnyx\/vendor\/paragonie\/random_compat\/LICENSE": "0c0bf603f7e196edaf56d02acbb2e14df7f73a2da0617d62b5fc811f088c29865ecdbc7c6925a19bda63132cc651c56f1cdac79dfa02aaeb3fcca49033636ee0",
552
-        "providers\/Telnyx\/vendor\/paragonie\/random_compat\/build-phar.sh": "a5ecc580bc6e95a9c901ad1a0097fd47ab857dee79d0221ae463e27f27cc8b2227e1975ab2699b9d0782f0b0396ed9b3ac0106f53fe61315cd2954ae54beb333",
553
-        "providers\/Telnyx\/vendor\/paragonie\/random_compat\/composer.json": "c400438df2f41ace7bff40d284236bb06c6095ac03b58caef5b062e7ef317bac5a6bf551c94459ffc838acdae7df6cdfc615dfc3cbecd16be37ba67bd948415f",
554
-        "providers\/Telnyx\/vendor\/paragonie\/random_compat\/dist\/random_compat.phar.pubkey": "e8909663e5350be2fa9416e28c6b179c41e87feab8da0d6fa6a41c294c9b00e8cc40ae8bcd03997770056f70d946315fd530f72f42974f63195f14b3c675e3c9",
555
-        "providers\/Telnyx\/vendor\/paragonie\/random_compat\/dist\/random_compat.phar.pubkey.asc": "f07fb9c7b00f297e73127dddb1f3986fcebdb0760454765f6ce0977347919c0c74ea197ed310bcd86dca7ed227812bfa6d1595c44e40f10c085cbcbf602e163f",
556
-        "providers\/Telnyx\/vendor\/paragonie\/random_compat\/lib\/random.php": "fe4539e2b55b47dfff1e2256c91498e5a41a85e28e42d790fdbcc42102c16abb09b0d7a0e2268ee004c555e1001241a9925fab1eeaa16c11ae2188e1f01540b9",
557
-        "providers\/Telnyx\/vendor\/paragonie\/random_compat\/other\/build_phar.php": "370c622746a37b65aa6e36c2fb94486b4fb01f2db3f3c9539a7fde711d1abe3f9e9c30bc61f4200e6da9b47086c207b03cd7258d77dd2ea6b48126a618e2fa0e",
558
-        "providers\/Telnyx\/vendor\/paragonie\/random_compat\/psalm-autoload.php": "f05ea11c8e973ddffde4d60688b161701217ac8e5c9237cfb57babf7113482d5e19ea441f5092eb1448a21b95ceed75f994427d6febfe0de100c376ed17e91c3",
559
-        "providers\/Telnyx\/vendor\/paragonie\/random_compat\/psalm.xml": "88c631fb2f70a79d0e56a4484fb7ae8b6b3502ed2a9599757e7a3302c42b0adfc6f0c45c9916b88d7430f209d8934b6121221dd8b424dd913c49236db7ef01c4",
560
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/LICENSE": "db260eb10b8775cb408f675dcbe11bfb1a738d638f4215467df6c4bd03b8265dec7712fffa30dbcd38b5ef944266c3963343d033f497eaa6dc602f55fdd8729d",
561
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/README.md": "82f123f85b02a7e91c3ebece404b85ef5a0950e0ca79bb0841735a5a03b88d1a3efed4bc8229b3ee1db245471cf58b81923ac9800586ace3b794421f379f7bb3",
562
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/appveyor.yml": "ed6f025871e47d5afb1eda2e0705a2185670c447279cadd8c0fa796779fa2f1d7a5f17efaf6412c403e40bee345ac3224a45f9aa0e5143f06ea5e25ba8cb848a",
563
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/autoload-fast.php": "a40c6c77f211a2257d3339ad80ae7197ede8ba0a94c76b48052cfbcc8ce903959dbd8e3434e6660bfce2c5e935cb9f38568f96cf00819d03f4a1c46cd6b7b0b1",
564
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/autoload-pedantic.php": "c1a0e8a5b461135bc58ebf0a37d75e865d9e44ce666aba9a95d6416cc7d57a834aae6fb6ef4a9cb4176690a4e41cdd8638106a11b32a155f3a8ca3acebf7a504",
565
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/autoload-php7.php": "0ac98043c8df48e7bdd3a20c11688ad3702a06271687e1019c2a7288288532ea593e7e462635b806c0b18dacbb8f2bd6d9c700a61d2b1deb90eba0b49660b008",
566
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/autoload-phpunit.php": "d34cda9cd77a67d93817d5b9b1bb51a13521b2539f9a8d0189debb1938934df1d5fd51fd2a82c9d4775f5a8613708a1e78687fab86c3afdc356bc4b02045bc66",
567
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/autoload.php": "91c2a6366a27a76a0390c69dc4cf061c73cb03a22a3303aad673cd08e8cd659c7fa7e6796acdd9d2d271f015eb16b15663c5d21d8a538fe14f459519c9f9e8d1",
568
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/build-phar.sh": "5bc154a32c62797e85b82595da69ed11676d98deb9644b62a12d5ec169d3edfd4d3b24c67170143f12ca63d9bea06cd0803f68d5e63a7849ea9c4dc9483f7b4e",
569
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/composer-php52.json": "10cd40189c6ef385b9e21311b8b2bc8f7943273552227c8006a38889d743fde82c8c61286484d59bebfb83e645a87cf6d99f29409439a1057fd16a4ca7727417",
570
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/composer.json": "e9b03b450c47dc1a593e35493c7c80c373f958ac5ddbe89a163f15e7a30a8139ac0f9868466610899e3d5e5d573d517bf09acfc68d2b9420e3301b39e7736aad",
571
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/dist\/Makefile": "1cb0cca3e1413538bad70b8c8a22dd68d17bcb6450e0c4ee41fab9fab09c36bffb4816dd0f7ea2f40ca1b4cec6b030c5c0cc17955d2c83ec08759e748b04d965",
572
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/dist\/box.json": "47543b120abf7596f26b58f9911963e9bd0cbe2297b65d43f74dc52130e503ce09049a4be53146387b7fb42b7640f6577e3c1f4862540d4f8a0e668b0001e62c",
573
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/lib\/constants.php": "4e0597dadc39ae7b81e46ef5f3f045812a11753d9116215bf0d905e0bb3760bc44639988f1ec8f0ae8998f507e0c99eecbd19705f5399edfacb87172d7a577ba",
574
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/lib\/namespaced.php": "c550633d5dbd23c1bb2fe9a14b787e239bd5fa898932ddb8a1b1f8909a57393e01f12337fcc53f54b24bc48a97c3ed89de03da089ffbea71ef90d48c5091e200",
575
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/lib\/php72compat.php": "85b52455b2764ef4b80d60b8d99d5f65264b2a2e7d770b2ab05871a5aad213ad35f2cd755a8b5d19b5ddcea758c024175480f2dbc89ec75dc86ccdb453f5fc25",
576
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/lib\/php72compat_const.php": "177d6b1b8fb5286842400019be1465fa0438e06dfce2fbf5e93e93d0715c161ad07c0c31c17394cb0c6673a058f34544454cc0845893242dfb5a998655c93701",
577
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/lib\/ristretto255.php": "f2c36f65a9a556c43bf9f2fcad02f1c87c29d89bb5b3d81634112defbae7ac0c85e558fb3b5a5e74d95906a4b543e7a2cf16fd444ff28888ef09d73fb9e6b6f9",
578
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/lib\/sodium_compat.php": "75e3119fb1d400aba554506a562c64c1b1b82e66277383bf307406fd1f4c68499a32b82108529d5af99878890e3551dfd1fef1ab62ae86982c27dc975dd39155",
579
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/lib\/stream-xchacha20.php": "4cf0cb7bf023249c18f2261057f994faf8c4233022651285fdf8978fe9a71d7eae0511ea1f64faf2f3fcb1ae5b010112a5a4ebe8df9fea7ce908916cc2ec90af",
580
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Compat.php": "7a8389a0ca9cb8e544b7f345c60705e1cca41769105531211219142f15c83bd60b442dbe8bd62042a5fddf31040a19ba1f3f00ba6c2a44c3160089a2605099da",
581
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/BLAKE2b.php": "91aa0293c7c821d238f36fbb1f4327e67a718b53c13f0ea0f4d6e1d1675618bdadf183d842d4dea103017be863d40762a20c644a4f3619c7549991f11a19445b",
582
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/ChaCha20.php": "7e09160954fc59c77890f28e75f7ce8b75fdf08b9d5461c5e7dc1f49bc664bcb1b7ac74e3f5437657a20729c2db965d968060b27309a4a06a252d22b7f8dd4f6",
583
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/ChaCha20\/Ctx.php": "f19f61e54d42bf154182d203594613371f430d7c78f5b8229cb9bb94e19e42bb9a8e434639accff18497cd728ef391a1128d0145b8958f8d4350ee340340df39",
584
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/ChaCha20\/IetfCtx.php": "41ac6fb53ae553db13ef5c12d8c1c16d017267f130e8a00e9c2a8ad10d723aaee5ee08f2888f016babe4d712a0f1fa50012e4ebe6626b34973c26ad6728e36da",
585
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519.php": "5404d91b94a8e6c442c3eb30b763f1dd0c1234b845b967b7048f71d5a0b6e1ab287b44f43e06ae5bd6fce31f78154b8655353d7df86b6ac699a41200b9df33d7",
586
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519\/Fe.php": "937defa56e99d4f38a81b88c03c649deca5b0f41f5d0b8e340cadccb34ef0677563f18967bb9f63e9547137a2a1827f9e37c62005fe745aff3764e39adf86cee",
587
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519\/Ge\/Cached.php": "3db1263681f9414d237a8318c08ad07bbe3279b7310e21a40c22033f5d90eb5d7074dbde430eec7910a8d7e4286fa6c0131938c92045520f56fe6acc37af70af",
588
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519\/Ge\/P1p1.php": "d757efd8638aa0c1609d59c47f3b18608a0fc6e1e5bc3cb94f16fd3fa2d6125872a796f4837cd8b940ca6988db92d3c668bba684c721476ee5fdb6fb6d50670e",
589
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519\/Ge\/P2.php": "cd70c62efef16eb21967d5bb0489dadef845fb3cd4faf0b1bb7d080a8685164b2b0fde4d8865dec22037795eea6df605dc2151f20871c31d5e9e0084f0066219",
590
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519\/Ge\/P3.php": "56c14b848691af72c00f5dcc3d31281a300d0ea9b6ec273ff929cf30d2279cf34d51891729a5b095445fffa8a63b8c8147f4d1ea24935c86b0216b3c40aa4241",
591
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519\/Ge\/Precomp.php": "f6c53daf36931b4289248a231da52759e91e5c38af10b2cb89a1bd7e55d29e316dc77d144fb9e52ca1cbf50db84234aeebf13603c62d58d5b3ee58dc19cc18f0",
592
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519\/H.php": "c2e48f6273cabcdc40f20fd0f7ea55975fc9da5a419b1c9cb834b694c858533f9a0d3e3ce768b532ea6b69ff5d2df1ae4c246a15b7129916d4034ac497ca2be4",
593
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Ed25519.php": "eda61c7ee144449df655ea9a9142d0b26624644542012652598bdc51493f61938c13651b32b05e942d31d3cfbfb7899b8621f4ebd8a5909a1ed12704b2bcfbca",
594
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/HChaCha20.php": "b5005439c15ef7aed83b566e670053819f59c415d9c5f607550c756622d7161ca32fe65dad8f688e6a292f88192637260d859302064b416465c08bbf7f6dbe13",
595
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/HSalsa20.php": "c882b541376c8eea8ab3bb63d8b51dddb345cc45ade8d5d264dbaa96427f72f0201aea828e696808155da7a978c4a1fad09723d42ec393117693e48187cf2a4f",
596
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Poly1305.php": "c438e61d6b330be26cff863f8b5c42fa3284d6e8abdd1e43a2023c2695dec643d2641b2239a9b0fbea1a34e9e8011d5094b4eb024b111b6fa903a1c026328747",
597
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Poly1305\/State.php": "4558eb5b05c7664408a4e793c2b85a4c2593ab8a1118c3b89db712f337a12346e2e882a0c638c32af733f5589a310b4a528c9bc02c136692ae82f3ac7e6cddab",
598
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Salsa20.php": "2836d7eeeec597187c456ec790107a5dc478a1f79c1c1e4ede4314bb830f865f189e048e3dc55742703e2fb7bf31275f515cca57ab5bc47332961bbdcac7c490",
599
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/SipHash.php": "345fc6b9f37659ec9830c9b3bd1459257b81568dc73809c023c551dd825981b0da6b150b6b7cd57b00097ae9cd3b742d730ebfda2d2e459ebd7d5257fc967156",
600
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Util.php": "81aac8187fcd44a14ae856e34d7337c012ff3603c606e1b9ff5a95fd5cdeb962725b70672a57b600d344fb2f34aeea00ddc8f1d4d8f8888961fae9171f8262d1",
601
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/X25519.php": "d11fca34bc3d313e365ca47981a0efb880a3cc8be3e2cb00da7df69de8d52f2f1fc793c1654cce1385ea66aec40eb5339c5cbf120c127cb399b72fe84b7297c4",
602
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/XChaCha20.php": "de5d7f3dd4402fe3c99b66a92fa4f0766beec66928c8996b3754b2f7a8869b65035c6ebafcc8ba2fe9b309adf541e89eba9491554f1ba548af6139770aedabf8",
603
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Xsalsa20.php": "6abb7e9217d5463d373023d5aab49c41cd3e1026835985dd13256e68374ef63b90b7dd033f7fe14ea60229a98e5e64d0d0f23b7a382ecc9d8b41746bbe3fec11",
604
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Crypto.php": "257d3d05f1acc745b21f25652ddf0b09b5a68b2b75abaa9216bee10ea958f8ed1d3c964dda5326216366d9cca4a71e8678c23994fd07eca2582e3d8c8aa75500",
605
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/File.php": "d7cce5179670dc18544eace3bf8b8b9863e62fc9520526da2870e45d5d400004fdeeb3c0f44a90caf0742f89b633e7fe3f996bd5f89af4c7f52ea37f429e453b",
606
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/phpunit.xml.dist": "0f8b25b7effe47068dfafdc568c3298d7c5f2d4eb1abc040c8dcda1b0daea8523a1f82d8e00d6475ffde3cb566c18d17ccfd07db59c72bda11f40d555b692d32",
607
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/psalm-above-3.xml": "5bb5402c96cd45a0d88542bfaa12ee03c26c3242f42f1e33a2a32e5a16143e6b66e7dd4bca7cbe30f73ee9eea7e72862e356f1bc4c4daaaaf1ebcb248d63b230",
608
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/psalm-below-3.xml": "9ef67d2d8ee81c94d0ed80d592894be0c200045b295178f246865d12a54d963e97b4a8d75ab88595bbb73d74c75ab2275a54b9a33733bea2d15487c5894f515c",
609
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Compat.php": "1c233a4b931c13b00e243f699eed9e81fc683846e089a24ad90dd17f786bfdec9ab32509eb9666074c9fc2a168ea8d411144274e6c4d4413996c78bd3c536515",
610
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/BLAKE2b.php": "27fdd20dc655cc7f58454cfa97fb974e4d99f6da5b97d79e669d41b9c5bfd1be18fa34f0ef7a353731a3bebb11b56fcb68818cabb3d8ff026682e7b39106c6f5",
611
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Base64\/Common.php": "c8512fc6d570a3198107493c7b8d20f38539caec221adb14161d7efbd6ab7d1d0bef4cb5528fcd84cd9484f1a9e0fbeb45aaa2365012680b0106ea92f8873281",
612
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Base64\/Original.php": "4564f7cfef60c318abe626832bcd355cffbe04d020e04d18c5554fc1610c4a1b0ae8d1111681e2a458ae0b9d7ef3528bd62aef019fe3c1a3f9d28b5ae58da86f",
613
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Base64\/UrlSafe.php": "dcbd158a52f33b9c64c8046c8f091d9af95657a562ac694c9ac0beb3a1876d55a3f23cd42c1777d9cf2a55cdae38d88ec54628b2d5fccd6befc92d4d51eaca2a",
614
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/ChaCha20.php": "f0015a4f95fb6028c015c954992233d76ff0b07c7c60de6347e7b7ff1cf704e80de4ed5b3e236502fddd3c56071aa8012758d905031d6154f965c4898251329c",
615
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/ChaCha20\/Ctx.php": "aeb8c31a1bb46b8519f280f23d349fa93911bf766715c0964c0a901369d0f0599e87c6e13459734f582a04ce74d9ba9f3ed7553d4b7214855a815424a8a8610d",
616
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/ChaCha20\/IetfCtx.php": "d22a84b5bbe07297fa80c989e93681b27b3ee502a9b77b63e2b08eccdca03cb98c39834feec5fce3cb0e1915f2944b06e94fe555da123de982fedc61b30c1f91",
617
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519.php": "b25ba0383cbaa00339f5cbaff6b400a25f3bd4d244d2fe70a08b987ead0ebb04a7f51b9476baf01fea5967610911f809114e39d21d4e278a9be72b48ca39b09e",
618
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/Fe.php": "0fad7d424e7f3fbc0abd6a4f9113c83523aadc3f9d3423a94da0954f56d31705ca567ffad0972794bfbba00c4909c8638130b99a983cc52022d262d6b7d145bb",
619
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/Ge\/Cached.php": "58ed8181f08dd61076c0ae9ce176455d951de04b9b1b03260c593d009414e9757d9120ea9e94040ddc1e0867f8a6574dc55e3acf82f946100d03d4506c9f778b",
620
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/Ge\/P1p1.php": "63b5f5a6c7061826799c2e3285884ac2108adb19ea246475b98fb68a26aebd694eeba56191fe15fbc1a9ecb9b85c139bf9e8b65b4456b8fb42652fcf29097fad",
621
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/Ge\/P2.php": "4caf0b912ad4bd82f8c447fc25829177323ba7af6d2355a7709b8ef99a855b51158e5252a1739cf6e9ae72b780e415af0cf3d510bded3fbce3542c99cf057535",
622
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/Ge\/P3.php": "5bd84bc8087c48e62e9d29451c0165376ae8486ad9288556c81e4cb897822cdaf95a2df6093f16e2a336839d0a4ea7c1535361bf041d8be0fddeb1eb245eae55",
623
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/Ge\/Precomp.php": "a58cbf2c93a75948b4576395ba1ebcef5a35b6dfb4625690e872010a44edd92939ba146b145cf40bc2cb6e45da0e19f169a45b575d813a70428f171459ee2d8c",
624
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/H.php": "0ce669e4f370acdbf6cf27d5a525b0a3a3bb7c794b8a2ccc7b2f3a3670fbb048a8493e3e6306a5f148204f50a5458d47ffe4a2705520e15631b02d45d39b0676",
625
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/README.md": "3f50765b54a3cf172c9cdaf2541a54273b811df61330af83883de5309103d6309a0900ecbae056f60aa831e438543c16c809fe183cc15c6a2f2bf15f6f910cf7",
626
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Ed25519.php": "89eada60bdd8739af528cd74b771a2ac04e36aa3e588549c7e8a82d2267a4df5eb4ef13c806185ac65bcd33fcba0f49a03cdbc03f143ffaa576ba6f4ab5efaa7",
627
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/HChaCha20.php": "e221d5f3c4818256a895cc05a8e68ae2b3cced7eaf4e425f3c373d59b2cec31fa7b498e5e42af7e374e70c3a176f966da3cccc4be97b646182a8bef2817986cd",
628
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/HSalsa20.php": "05e5376ceaa53ddb24971a43ded855892cf37fe0f03647660f573334ca79e61edafdd511c418cdb3d42e62298462e729c69b4dae3eb802c4749774b43d659536",
629
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Poly1305.php": "1bc3f6e6323d44ab76eca14cce61e7043ee98d8f7c50f29a5e29704c35adee345faaac767af588e1c6566f5732c1ec40ea815c51711056737460c9143adef1e8",
630
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Poly1305\/State.php": "9a69f92ff7c3e384cd57c0d5fddf9111d57abc9849acebb329ffd1ac4f53e539e1548140f4a430f628cb378d7fc980494307df13e4d1837b0af377bd7811c6d5",
631
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Ristretto255.php": "c4fcc5c22d8ece4e704c847ca01ce6edba7682fb2b9b91d74d664a204cd5955128c3bf8089a855312244f28c4ef6953927832ed989a03edf6eaec5c26df1722e",
632
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Salsa20.php": "8c2ad19b46f527ef9c091cbab17f64d36610745ef32f778e3911e1aa2a142e88c0f6e005ced046a678d66982d2e9ca48677f082697af3999cb62fecee4d800bb",
633
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/SecretStream\/State.php": "629c6f96a7bba323ddb8eb422e7048839c188560932cb4306b9f11ba8a2b15afdfc037fc14ce8725ed3efc72c26700cf6cd2ca4a85870fa885aad6b6d57a4a0c",
634
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/SipHash.php": "6f24cd7d32eb80c943461199a0937b0acdf01560542c54ca916fae6843c3dc5fa65d751380434508aa50501f7dfb6c227e9330996956c4a8c8b32b6ae55bebba",
635
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Util.php": "fe12c7259ad5daa7eecd8e199c77f822e612333169878309cec5b5483a9bcc775261c344a31023c2741d53f37f05a0f6dc6289dc45c7d7b8ac7fedafd5458d57",
636
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/X25519.php": "ea1d665ec23534de7f18c4f48094de4463753baf8b9ba011e38b969873bbaaa32e6b90bbbd0597baed3687c28e37fe394c224a229d734671b7d7e03197d039f1",
637
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/XChaCha20.php": "56d827be22c68fe9a2cc01b9f5890846197c5831c3c0f129d9b8c522391b7d7391a217a2dc48a4bd78e81c3d2f3bd8187546d311f991148fdf43a8a67730c81e",
638
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/XSalsa20.php": "c0367d97622bfb654340a6a7948e8ca4ed399d106dd8b27169a9f5d9bc6532129548b4dabf9f12ffba654f490b8adfa07b0b76935bda15705560feb7c590a3bb",
639
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/BLAKE2b.php": "97cb339b44cc54299394b4fc27c8ab13d5a8d48aa4c8fce71733a27cea5d3226df4341bf9722fb4f4ba71c38f5491d677774245d75bd91a693269aaba0487036",
640
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/ChaCha20.php": "da693dd0be25c739b477673933d361ed4b2f83110ae98f7c6805af20789fb4379b4b7a4ae34aca588666cfbdf61c2dd5776f8a4b1ee0215dae64ea09c6479a10",
641
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/ChaCha20\/Ctx.php": "621194fbbe2eb42c04c9d94e45e3a0ebafdb4cd87195b924705f8c2a9e54c9dc52fa6dcb39967ea1dc4ceeb6f2d20659a1b0aced8035529376f6244ffaa96f07",
642
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/ChaCha20\/IetfCtx.php": "b4a0690f9af7ace9fb3f8c10ca78989573a1cd49d3309f9c0011501daa3c44f7b616868e417096076846b19502ddaaaacb7c85f9b5c8622c57e4882982e09a10",
643
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519.php": "fd10531c29a88f84f8b7de7c09a0e9e66472658827bcbdc55dcb1fba54f620b32dfe9359788e67abe4f6ffed3e4841e6b74939d7504188cfda243512a86c7eb4",
644
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/Fe.php": "e6e5ce11b327d42167d51d2fa462ca6a54bf180229261af9ac1189fab30941148136ddabfff606dcf656985cb9da9bee93902f1863a84a3e5d42bfccbb0111d3",
645
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/Ge\/Cached.php": "350f529a5a178921a2f40818a1668c3effdeac12b9b8aded2f57f1654343d0f7f535c780c5a271d9b7772969fff9381befcb85aaf676650c67b6e583d616c064",
646
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/Ge\/P1p1.php": "fc8344d196cfa17fb61ab576b0a73f0ecbdfdf03de53d669cbf56bf10cf13eabd8c8a83d3eab7d9f9436b4dbb8d0785f9929c190059e0695579811405f3c840a",
647
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/Ge\/P2.php": "6c4051bff3e25a7863fcfef3b9c1f028fa8b94d301e4de5dcb6654c629bc95f44978fdb697698375e3cfd1dfb9ae6a3c8dfcad0bd5138e51cd5d5315b5e5b788",
648
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/Ge\/P3.php": "d6ee2e6bd34cba83a2025bd79e2d8a829d39f148c65ceee5a382662ef25b1c684552e0486ca29215f52d5d1e140176bdf6e2c40febd55970db55675b76d448e2",
649
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/Ge\/Precomp.php": "397b94e8292ad4f09cc37f1b08a7f364e12d6acb74f125ff0148c5562631f632a2ecc44db517cbd5ea61865e70732e6223a0c736b831c751df859a7d2afc4ae6",
650
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/H.php": "7bd14df9e3afbf8bc2ba27d5faf6ba72f17eed218cb7e89f4a458f500f6d9a60c52eaf5f1fd656d7de492246b0b0ac3d5904da319c5d85b754c64ce4b1f1b433",
651
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/README.md": "3f50765b54a3cf172c9cdaf2541a54273b811df61330af83883de5309103d6309a0900ecbae056f60aa831e438543c16c809fe183cc15c6a2f2bf15f6f910cf7",
652
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Ed25519.php": "30b970fe798803452a504ac453c70b5a2b51cf3094639dc58195b3c8e44fc37089c58bec2337d7f79ca60c91c4951af5dfa89e9dfbe3ae327084a806a6b8db7f",
653
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/HChaCha20.php": "d4fdd553cde5a1ff277805bbba85128e3ea59e4fc32eaacbc8502414148933c760ef6da06fd967bc594f9d22523c62e45ebd7cc9411ad4b76e2d76c0fc2c00c5",
654
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/HSalsa20.php": "8bbde85156bb88b6f0f14cab67840cabf1e1c456f9459edc145e09907161bd6fbea93fd37f121678064de6922102e78789cbfa3c2eddfcb40b93178fa3fbab6e",
655
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Int32.php": "325772c5cadd6953316e83afe2a04804041292f25cb16e6027ea230e20aebcdd819c937977918161eeb9c43187fc105be2824949c9d6059e9c0a39e0cbc42219",
656
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Int64.php": "8fde2b57266d78e8b03d8c3f89a1fbca3329bb6d0ed4526b3c6dbf5a0e92ef9d8e9e3697cd23b7eb5f7524fba7474cc5a2e06f1ba6faa04f7cb8729c985a5794",
657
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Poly1305.php": "f0cc2f5cf32a37ad6c3dbaff1a8a155ff334995eab78ab42f2e5bd950390babaee0c1588e3f17d4e73cf970b8e3c34f536096d7da23182f526b0eed704e3ecc8",
658
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Poly1305\/State.php": "8656ebf7aa0c2c7e8cf01546a261bf5e9f6c374eb5f40f8133bcb33e35bda2f19f47471b2ae6af6224df7ab9bf3886cc43b88049e8ddbe54b8dd129b28491129",
659
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Salsa20.php": "bbb3dc0a30030d9c5f5ef1ef63e36f9a067d67891185b9620ebee17a67bee31a7abc420abb7b82f38e913b5de54d235859f0e8f5f718d8f02316f4fb03e24b2a",
660
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/SecretStream\/State.php": "69d505517dbbdd2e77cf5aed72673edffa2aa008e70325db88877ba5673ac3ac070bc4c19cf13707932b0b4d71ee0a9b007e06a0f822292ec278a60def7cf511",
661
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/SipHash.php": "8c3c2d2e4c656ee6f7af729856cc4c79918ae2e09a167d6d0cb92f7dc9240c0bdaa36e65a167f5b63961d9f9ac4df2c19e50c848e5a6da5855566deb5b9ab8b4",
662
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Util.php": "d6ff44eb1015687847600f8b7f6a80974f4de1cb80224ea7f733e908fd53ba2aa669b97d891fe89bf0bb8d358c15a2bbf0661a779e68a715cde0405455127eb4",
663
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/X25519.php": "9e2d803c100fc9a3749100dda30fabe25c6ec59382be64f9995b6505e1652d5b2762111f2243b69316abd942c88106fa5239adcae842971f22fedd8e3aedd954",
664
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/XChaCha20.php": "1d4ef660701da25af79c9d4af2f158e3f62afbc1e5c2aa062f64b970dd33378d5f67c9f0172991985ddd65a976759e09f4604ffdf6ae158bd8a98f4e97af851d",
665
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/XSalsa20.php": "ffcbccb7d8a1d0262c5e74cbc679022bbcf1acf9160599ce2b92f66e261996f0e93b419231fd41ca95852e09b7a892dd8e98101c3426d30cb294f869908ee21b",
666
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Crypto.php": "1af076765319483b5e0c2a3ed9d5a12133fd41b7172cd15073da3723200c41cdf077dbee04f1e4badc2b86ee5e23965dfd0e8f3af3f52b3b584ab2f775f64cf7",
667
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Crypto32.php": "9fd3ecc6e6faec645f2c5166ca551cbb4ff8430664bdb46c383da399048de42ab505a05c709b6ed0de245402a1abd701f21398252f059003a59fd55bffd6399b",
668
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/File.php": "4f2a6c996bd3fe4a07e4e1d49d2790e68798add08c4887efb3d7bdc7beb5ec2c1601b8e77a0b40e570211f7d3b4e5a5f97471f60df8b31434487495677052640",
669
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/PHP52\/SplFixedArray.php": "2adc50710dd4bc2cc1138b741cde09f225f727f2177d006ce8ca82691de0336dc51b6c30384938eef1693ae92628460f8984aaacf336815dea092de4ed1521b5",
670
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/SodiumException.php": "705f6e9777db6be71970f7e218339e36d50023abf723446195cef782976d7431f815a90d1ed83e32ec527303057287f890215b4b0a9a8c992a13d111e8bfb947",
671
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/CHANGELOG.md": "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e",
672
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/LICENSE": "8756122099aea86ddf6f176a480c0454f2be6dd278e475bd6be7d7ab3d572162f1bd44c9f623e52e53514cb15336be6e84a5eafc8e2a347b481ab5799ebd6e17",
673
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/README.md": "b552bcb37ad765a0aba888fe43d2e2f41b5bee6c90e734c365797e74dd0b8c4df017ae74dab2458edb410630299efd7b649438db57acd53fefb1723e233416f3",
674
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/VERSION": "294108697ec66acf16af2f9518c5999605a8585058ad25dc9303029fd890e6835b2fcda23fff2ad60058f8f6a8a19c945d998e4e228453d4946e395b9aa2055d",
675
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/build.php": "485d76b827a54d8455550e8a8f8d14862f9444381da251e66c2bb8ceaf2106a554c1cd339666b1260450749d0244d6b9ba0c6d0a2220ab2411aa4041fc83f8ad",
676
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/composer.json": "e05f4af7ceef33d82ed5704be36e1b9839236d13073d0e23ef77d33ce7ec303cc2cfc2ddcd25318f1a5295bbe3b61a13bc2fe72f55c226e2f072e2a0b1959481",
677
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/composer.lock": "2b8c24986c6cbd290c0ce53ac4f773836751aebfd65a2350fd07b4cf45292ce2667a54494fa098da13a385ce7a9e10a2ed55d20f7c8dd6817f93f33a6cc710fd",
678
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/data\/ca-certificates.crt": "659e8d36bcb65a7fdd299ee008fc4ecd42be87d8ae7d7d15828567b9be44b4ed8a316978f2f7d3d5d7e96a4da0b30bb8bdcfae5202ef099691daa796318a869e",
679
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/docker-compose.yml": "1fe4c651e406095f0ff1bfc196406d473184bf53cf80f7c67dc79f1aa94b26db74174e0e9bc47adc95eb2a5f6eb950255c4a5cf44ccb7029ba712df3be9e6384",
680
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/docker\/Dockerfile": "a63d1fabd8c19fef37b90922aa4bb21fbd1094635666cf2a3a4db47009888bfd3f1ad5c34c05184e2ccc8f581971f6dae91c1ff137730821422cd482c39e9390",
681
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/docker\/entrypoint.sh": "2bf3911c365a271fc52d17a0aac1687abf52e5286a5d52cd34367e18651dcfd6ef1f791b54105b7742f5d691564ddca3c05a9ba4ce8edfbc68fe919e0bdf6c1e",
682
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/examples\/example_webhook.php": "336b92a647e49d8c994c8e6dc6b26670f0a58cb57d4679d0ba7177fa1f56a84a628e5385dd4c1c25a1395b1d8499e54d34eb2c20f9742a2a2a3d0cb20c36be08",
683
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/examples\/simple_webhook.php": "ed299912ca9a55170796df76b25c5c92462660b065ef7eabf24bf7f552e75fe44512fc3fa977fae2a9dd5e9be1ea28100a456de926fd7f24c32152f577f8e46b",
684
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/examples\/verify_sms_demo.php": "042dee741d4fe90d78edcd0614df6a371cee77d1a95d34623b4e558ead69378c693a33d044f450ea204efd7253e7eeee1e5a4119708dfddbafeea358bc5408b0",
685
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/init.php": "82a207681a76c9b00d1a35fcfe64753cf286d9d0122366f8c1f3009ecd6c548369d2b65d5b4e03f20faa9502b967a3bdae30865e5bf8598eba630b5f9555542f",
686
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Address.php": "a01e1efcaab0209fa7cf32ed85722ff793b9c0f750daf7d3bcd0499037dea764f2a61defa54b4bbaf602f8d0f5f477fd4198e35d6d8b47b82fd13c7a7e70ad59",
687
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/AlphanumericSenderID.php": "c6f7d381cd9901af59d67c66fbe6ace0729c77ac2b2962ce41351ed076cb39c9049aeeb72ba0e3933ebce4ab8a936b86a7e21d30a1c07b2b08cad9da2abcda1e",
688
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiOperations\/All.php": "5a6381d1492e2ebd1498fb4371b55c7e112ebf2c898e1861d7dfd2345db8c56df221795208a29b2a0e42295846fcf98f6a60fa8839df7e28fb66b9bde9226ce5",
689
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiOperations\/Create.php": "811f9227ecc5acb172e8e7120541227de0bc22cbf66a41490b743b3e49647a38889d5cfa5d64139b602572f0fcc0fbb96e3971c78801ed9acf7b50db2ab7499c",
690
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiOperations\/Delete.php": "e3cde9f67ab7281870c7399c4e76ff5807791b94b595567f56ee4ee494574e0f6f282a8d0c024c78c1709940198460f386ab8de6118a85de7d8a52feea0b0dd9",
691
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiOperations\/NestedResource.php": "209aecf9e6abb679b4f1ec2b59b1ce363a73970f6d389829b77802cb88b7bb368506e4d0aad42f090b715b4d4a580fdbe5c8479c02227102b4d147d615fbdb8e",
692
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiOperations\/Request.php": "afcba7de3fa312bc9e532e43bdcab8fcc5ca8b532c6f7bec08f94a8d7b2849467266f98af029bd688a136ac24ab2b7f438ca2fc666395c589d578e9d0156053b",
693
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiOperations\/Retrieve.php": "6f29bd2711e3c6b586c2bf6d9805b986a5f76fb0cd8c98c63259cd9873eeacd679f9718dd333110966ec3bb772e2ad06da7b1586bb590180770bf300aef63c8f",
694
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiOperations\/Update.php": "1d353ac81bc74cd57c75f01da21d6c59e053813930a0eb0fa054417bc87b6a140f64393bc04ac312b8c16803bb4c3eabae278839973f772e3202df32828480c0",
695
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiRequestor.php": "deeca798d9ba058eced71d846bd22cac360cbb25bd1271db25cd0ebdb29b1af9ee863b362849035e8a9f6ee62bd49b8415cec97e1fc01e674ad6942ac987b6e0",
696
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiResource.php": "f093051a36277165763e1ee66594056cc266fdb89caec9ab9223ae6af9add8ea4a20e6e3ea6fff4e9625fcbb95f430686f1f89db36f981d7d54034d79bf397a4",
697
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiResponse.php": "0d292d053a85224f4ac839f54253decab0eec5ae9861ca95314e98cad0fec2d2f0a7e712a8ec433adb302b6702d69262c8866b20fd08d67b2d18571965bf6789",
698
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/AvailablePhoneNumber.php": "7c82ca4fa28264c4fdd910c71741270657e52cdbc760343339bbb7c1d5980d27b7af476f7e1bd431926d428dba685a6e34d250f9678ef0a4e3cd8c4b06289e55",
699
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Balance.php": "333bbe5f278ca247d8287c8da5cf3b3f6a96c896a82e3c3b54d01277e3cdc82dd5bbda2a1253fb473a29c49d3030b73b24eb8231cc34f85b0a43bd853682e000",
700
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/BillingGroup.php": "60d9fed23d1520237a50a707986709f3b700d42d049e4070a48fbb50f257a98eab779f45a15939af3d5bce811014c01abbcb86fa1b9ccc5b89d55f44c4b1a308",
701
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Call.php": "eec97591c5e7af2b057dac6e6498cbb2c1fee0439b1b7f31c2d879a5a0fdb5a3eb5ba3bb7e3c5a9195d9019e9df82c99a491ec52f15bec59b496435c0787d43e",
702
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/CallControlApplication.php": "fee499465ecfdd2d5aee0479d3770a80219a5837bed934e0930413e6dde740be21bcd965216c782e0765ba18fd71714ac69a5ee887497845ccc1bd7797d6cac4",
703
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Collection.php": "ba4afd20a921ae7c838a74bd9efcc4e468fc12ecae86b2222f97c9405d376a77533f55924bd1d577429825e746ac59142f6d4576f4d446cb3757cb36b65894fd",
704
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Conference.php": "ef9da126fc06537687947c8eea71fc34a53a7d44607d60bcaea7d8c7f55e76a94a9d7e0057f9abf7efb1f4f270680cba042112a127c2c487fe3c617c5102be29",
705
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Connection.php": "c5f43a62ff80b2e91556dc63ad2f78cd83b4fcae4a7a28ede36388177591fbfc6c20b244f6fd4e540cd9401e34b04946bf422eedfce25316e61c89f15de97665",
706
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/CredentialConnection.php": "fe9d8b7b34a24f5b3b83d6a2597359fedce871db3a526124832d4bf4129e7515366ae16517b8dae259305ae69f95655aaa8b4710a9addc23fffee0e70b70b74c",
707
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ErrorObject.php": "cf83764f49da72bbc816c8741644e15b9a74481145c6c0c11c390221ee4c7ae485cfc09d77db24a48b0756b69c85570242bb2b903c39ca699e636a299ec4dd31",
708
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Event.php": "4e4ccaef81755432630c46881a958928c8b633ef1dea76d05f05711da17f68bf6e5b7b77395abf297b3ab128c065da7b4ed38d1be3a45306eb6d7a1080e72994",
709
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/ApiConnectionException.php": "b2a920958f3e1664a6ea5c5f32c73f9914b3f59d8a927c4e920d385ce87a6676475823729f203b09f5530da667f52e3dc3d4471fa498277270ee9360d0797b5f",
710
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/ApiErrorException.php": "b775efde92c04d1a53dd3f948f2efd92baf1f1dcb5092ed0863f37bb71fe03052562fa89349b1030f3d27a0dffa974ee47c9a3655b40a3941b05e721e7fe97c9",
711
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/AuthenticationException.php": "f8154528a04642cdd24f3de876b1a38d6f97e357d36badafd39e596ca739df7fb77f4259de1efde8bc300f126b20f6e242db4c1e3a25503565df579b62676ec7",
712
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/BadMethodCallException.php": "5e6df108c1df11bc1275948d96829f0ca6ff039126934ec57dbeee74913af00a64e6a9f2b58f42bf74aebeb94596c45cbcf66e5a4afa8924b238ca63d424f452",
713
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/ExceptionInterface.php": "77d5904b79a9a5b265ef121cd19d91b952f631ac7436e7896bb0786d9afc0b7ffe54c7ea901091baefa0154b91abfbb3f9f3a7fcfea4053f27cb44be2d7cb23f",
714
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/InvalidArgumentException.php": "f2872cf684dba5abd50bf876971e32364a23c9259c1e85a01575348614274453d00cc655b01c2dbf2c78c88f4a6143cb486c786dd1664204dc7676a64a9cac4c",
715
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/InvalidRequestException.php": "fa310ff5d5ea8f02f731089c27e6903d9b0e692a3faf272efd19ae4f1075a2a1219d167730b21cac6a30e705816c4230e2511fdda981fb47714f4d81606ffcdd",
716
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/PermissionException.php": "4cc209df863027760738530c5c01962702970a73ac7f11be232234413376dfd34db049f4e49305c8a15ee1f016b26f1c128312930e10cab174e80d6ba20cb12f",
717
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/RateLimitException.php": "c37157b02475d2a3940dc7d007b84cc3c86cab88b42e841a392e3ce4919e637c9b59bc7b33ad3ed8b4b32e74dddafd8e61a6f30d60029b8b1ecc82b8faad4833",
718
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/SignatureVerificationException.php": "3aaa44cc52efcc4caeaee624c070e8ec87b665decbdf00d8aef04ac857358028e4bc0495c4a86c504f3ccc6d753413c5ed685816e3b80851026bf2034514cb59",
719
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/UnexpectedValueException.php": "33504e45241779bae5e9c1d6ace82a75d545e6f7ae76f7d7f071fa4bbab13b2c23d11e59230da3c242b548ee7b5386bf4795e0d06d1719812348d1f9efb0c1cb",
720
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/UnknownApiErrorException.php": "cf5cc44f46c03d9d0de656e2ae61d7b077d123a4b6666a4b0f57fafa2033e072ceb5b14d6a47987bb14e0acd48ae00b39d4d6ac1849fadc879bcc43ed1acb44a",
721
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/FQDN.php": "b7d44de17cfcd207ac1fe6aada6c24871a98dadafc4cddebe28b135c6e507634608e1b6c7052a40cc750f6515fe19c2de29864d4b9551e7002fd800cc6cc05fa",
722
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/FQDNConnection.php": "527d18ad480447e4d79e567e7a91796ca31bb778f10011aa9fafafba6e769d387fdfbc306a6f1ba58e583bc7c37a9a66f1961494d3639dcdcd8912efcd0e6a55",
723
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Fax.php": "fd8af5f711fb5341e2b86a7fc66a49707bd31efabd2cd63a1d5153c24462f07341d6af618b7e82ff1faeb9bdc203f62b6dd5570d74754e052300d0d7edd0424b",
724
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/FaxApplication.php": "f489a9e161565a6e7f55a4d90fc05bdc8147a8947788a757a2b5464059ff2c49e61fa26b6d1f0b43fbf9ce8d0c08328e276442ab4d2d100e7ef34e9b2e0860c0",
725
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/HttpClient\/ClientInterface.php": "da6ee5de3e8aec8ac144511858cb3bec53bfd2aa0b5ff27eb43c7f72dcdbfb1646da223cbd861db7595db904007ff4c8d6a010122547a98bc1d2c07139328a80",
726
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/HttpClient\/CurlClient.php": "dfcbf2f40053699b94de74defc4a57461c2e07280976a377cf4ec3600e6279fa9cc434060b0291c7e10a634647e1a86e67cbaaadc49783eb532681ca25256a42",
727
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/IP.php": "624821d6dcc5d30a1a08368bacba88cc7ce8b768bb3315b3f8013606e303fa8940c13da8ece0c67a43329a0cfd86d8bd09682963eb54138f4253eb2f159c7560",
728
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/IPConnection.php": "01239dc2096fbe207ce1a5a58dad8d25795b9a8a81dbdd4290730009f2fafee76d74335aa951fb7b54e930e4e9530a0566daa9ef7e99ea60a50b8daf956f11dd",
729
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/InboundChannel.php": "c37478b08abc62ca491806db6e2814c4a28a11357fef873f6aff8867e179dc8d89817ee3db3fdaa84150111cbeb426ad0282dfd7550eb815dca100843f542178",
730
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Message.php": "18acf4bf51ec27d330df16216924c65a45db59895b610a3c803ef1d09beb7d96d20753b4ec16be06ed40f2886ad46bb3d866f14a87021484ede5d33ac1a93c4a",
731
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/MessagingHostedNumberOrder.php": "ecee6ab7a46ebf03b93870017aba4ce00c10ee36342a6d3ead209078aacf4ebcb798ae129535fb15af860355b52ea72ae6bcbf0e5261a9d66224e43560858227",
732
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/MessagingPhoneNumber.php": "2a2caa5e44efc5de92ef9b0f8ed0a68af1ab2c80932f4cd7fe79caa87ca1e146af3bd0e1d16d977738da2a3af1fb3cef77081c32a0dac50bbe8ef54a108efbc9",
733
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/MessagingProfile.php": "7a561dcea7b45a4ad4c3dbfc6baa766f011de2b2dee9a23e512689b374017b05f4fcc5c3510f19111a9d8484ed93a5e05d3dc01f35d75e356f475a894596dc49",
734
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/MobileOperatorNetwork.php": "d4436bfd9a628713889a37846829763909033339a086b6983eac792e9af42c0df2a8bcbd688c5c54a196d1fcb3d22aae7b45e9e18c015592d979e9a924c42ffd",
735
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/NumberLookup.php": "cac3b5f1ea0ca30f9121849a8aa52ed2e18b7776c4f1d552dca4c3536e0d4eb96af45267bb687319a9ec715972bc95a19c7dda54c33a2701e20cff9564dfcee5",
736
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/NumberOrder.php": "52067d9999c150fbefcbba9969b308bb6118eabe25bd08f30cc4978cdebd68fce4479e53d71ce29632133e8c69bb4ce9276301f5a36ea95bd77d29fd057f5d46",
737
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/NumberOrderDocument.php": "007830f9c03979a7811a4e0dd0c74c4b2b6d05e05b56b9d6ceb5a6e55167eb95b2546087ae17328715e01d486c0e58e396bc41816b44866391b98d48ca246d03",
738
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/NumberReservation.php": "988c853084f13e0d86445d6638517f84ef3d90c3f618c2c85c0bd8ab790012c3986a1a3eb3e00fef7759d04a6a1957bd9521bb8da6ade8c05fd2e02a8040f6a3",
739
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/OtaUpdate.php": "3c9579c6ac1ef6f31ff572fa3fb7562b3618182cb36eab3f406d8fbe6fc7b1d35a996e47923074428583ee3653aaff3792f9fdc47eabe1627f1a85722fd9dbf0",
740
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/OutboundVoiceProfile.php": "d0c5985f6f629904f4c95b892e329f280f7e0e13b8794d1950e216ef4c28ede7b94baa99f18803ff6f60b09d6178ad39fe5d3c182e984c2b4b57e9732991597e",
741
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/PhoneNumber.php": "8106765a769bf3f6190783917aa923f3f7690af5b7bf971e3dbe73ee5f227b27531a553cff9cc425ccfc7cf2ac52bcfc685f3d3b178875f8fa837a5de99a077c",
742
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/PhoneNumber\/Messaging.php": "d0aded1cbbd4c6108b0fc6e6773dbd03040af54c967f0a8aa9b2523db769317182889c882e6efe6fb0e187ac3f2919563aa6a937c77f4c1ff94e5bbc31f4d9d6",
743
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/PhoneNumber\/Voice.php": "e7e8184351cb186fee77019e88600dcb15da0435161d1878799433686e012167ab3347d7f02efb5cd511b5d02cd7b6547453f6ecaab623ed23fac7c91b0a7333",
744
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/PortingOrder.php": "ad9a683aab02c8817796e62131fa9cad6f3490d3afe231b5718b3b4f0689a535543362a88333ab808c36e9c41bfc8b7b6178be7fbd5b12f38b6d806053726997",
745
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/PortingPhoneNumber.php": "ff2e1e98371b6a7b0cc5265d1ab82f053d97711a72633a7d3911a4211dacf75c08083d6629aa4fc028643c0dc929d3ab56132f6f21808b875a9ce679e56fe055",
746
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Portout.php": "71de0eb22350f649e5023b2c4a374b3d10a4beb0f8066d67482c62f68a39219d9cda4bd95d91e1df2fc215479f45b1ab79bfc0ccc2d39267d2f268356ae83ec8",
747
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/RegulatoryRequirement.php": "0658d49bc2c20a9a16ac72ea01b5306eda422d81747529c3373333facb5ce1940252387aa498d2957dec62f0eeaa8aac3979ffd84ca72308e660a1a0708796d4",
748
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/RequestTelemetry.php": "cefdb55dce61e5f276bd49f6b49e57c78085338537e56cce6fea5a81cd1d2235f1eaa78be326cbd513117be88a046177afb628659088b66ce423799995c53709",
749
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ShortCode.php": "4abc882d0dbc72becbff07212d17b8e1383b0efb43818a7eab983fd2a08c3f591a4f4ba2f185003fab0622a43329c969d2fcc80b23cb94410007a0879309ad49",
750
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/SimCard.php": "46289711eda27b37931b0d9f7e9624c114ef9c1e997ea88055dfdf6fe6dfaf7f9169b9a67cbfe48100dc4df2b73ba4d27328b0ca3ff0af3655789535ec3c0b26",
751
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/TelephonyCredential.php": "497a3dde2d7fcf8bf57b502c71daa5e166010daae45e30e1db7ebacb3a37028fc70c7cdcf39a356dd32f845664e8e9723a366fa69610c8f9bd31fa59b3300624",
752
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Telnyx.php": "f5ecf9589eaf7db991051de8482d582b36edc387b8a7ca48c80a419c1a99e1393d7f099aa4ad3e87adb4706ab62c8714dc843c9a8ce77d6fe6ea5ab929d9a882",
753
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/TelnyxObject.php": "0f45c91559ef686a3eb4ce3777ab7d43ba288b380ffd1031cc3c562138410d3582c251e2d986e8a84a2c189257ed4307500e3fa0d662a48a30b28a9622ae8ad2",
754
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/AutoPagingIterator.php": "d03ac3841bb553d847be9ea73ab9debd8c1f2c829b0d38ac4416a121ac535a5ece2ecd9943d89e720cb5abb1c907ca9b96df899a561c190ccd6843bde785114b",
755
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/CaseInsensitiveArray.php": "d5bcc37aeab4fcbbe0b9f4a9057a5654f6080ed899ae54f8ef18bfc907f244071a6693386dd306caceb6bf338883a13c7972574ac5d700aa00e22ec363932cd6",
756
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/DefaultLogger.php": "50a69f9f6ad628e489a05fdad0df811c926c957c301adb0b4b906dcce9733a0598f6c2eb126865c54a0100131dc4230a834b1e98275237ce8e90bff2e96cd0fb",
757
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/LoggerInterface.php": "8d2dc2c59af5e625eaeef0b85b09f78a42e533b62fee84717d67a4c706fbacd94674f439d3ac60984c0a3947b7d2f5a8ccfb64e071c41d063b8298f57578f88c",
758
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/ObjectTypes.php": "99ce4f7d4d4d9d43e24f3124a7c21b9540267aa160c780efe69d6559843a12948f3790b179db66282b0adda384309a793636d71aeb97d9aab0a62dccfbe2b51b",
759
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/RandomGenerator.php": "292c880420b28390e3d734c6343acd48f322db0c474f80430402916de1dcbf8e988b3d2753a7c18e763e632f474284b213ccc8e8fe4e52f00569e72728dcccb4",
760
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/RequestOptions.php": "00b6d4890b5a38f42f13ffdca556bbf1377c05c8a79ad2d6d0b69b7e27deb70252c15088458da4bbd56e7832cc6b2828e261241661dc344727e2bfb170465de2",
761
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/Set.php": "9cfa1c1bc6c012e8a7a797ba8a7893382eeeb234da73f93594a159f78b9858c984dec1e42da5a6cdb240f00d27d250e3fd6a7842d40c23513661201a148a6c5e",
762
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/Util.php": "4556fc8b785486adfb60ea8001296ad0ae7b13d785f92d545324b557fc4aad85a69ec19dbca27dd868050d64670e4e2be2e3a4f50e4aaac609b0089c0e9e2749",
763
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Verification.php": "b63d4f9d717ba204dcedd1c3315db3300567fe09563faed0e4b8f1415171e43e0068fb06ebb2f42c808602248f623f5773414a1612539a873070f461398be650",
764
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/VerifyProfile.php": "fbdf0818dbe1fdcd6bf13720f21ab6552a3ee7930c80a9adc44c3863ebb3df990b18adc8beee6770f4fca9bcda0d514a689d051c129d871eca48f2c0eccd7649",
765
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/VerifyVerification.php": "f2883946ac990666dfa62e07dad649ae0c9de75d5682857cd22419fda8926d45d504ce4fbf38896a1cbf25323a604a818d3b89f05baf58d91cef497c54d981e7",
766
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Webhook.php": "b451d90496fcad105eb4f61d5716b93878405315742c09d7c4be96c6b9c0427e35c03c1a664ab2f30f1288566b45117f87b069a3ce96d64111ef6a1ef289ac9e",
767
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/WebhookSignature.php": "ad990cd80d771718468e39aab1b06809a0efb9bb47f5ea4d42a649dbe481f5929fcbd502da6140f1438920e96ce2e4af82d9cfd810b0ddd0eaea391599685c0d",
768
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/phpunit.no_autoload.xml": "06ad2f4fe0a292902757629f5605509f32a0d1dca527550619c98a61519d83fc70f3c886b12f5e5734b1031186fd9c7fed6fba813cd816b0f07d36c2a6bf11e4",
769
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/phpunit.xml": "82ac037adc20f2aa76682878094e8bffbfe31782dc6a94e2987bac5546e3ffec90577d03715f4ce481cc977685eec9e4109a61b4b46bc19351c2cad555d7cadf",
770
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/TelnyxMock.php": "e8e93ca1114530cb7e9cad46eb20e32072934496d515a9391ce8093773450dd60f3288f9d3ba46533a0f650fe67b508d5e54bbfc6e1642443d1fc043b88eaaeb",
771
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/TestCase.php": "9945df738b56e344648cc00d3d4b94345c15d8749ce511b5095a87d5e52aed35d8e3c773276d9dde9d9fa04eada784a55e4876ebf70a198ba719c8e94c8c32d8",
772
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/AddressTest.php": "dd980e7890ad3dc1d12858f2d241a461689a34892bd780a8db034e620c23d01587996042c2c12d82333b2072bfcca6585afb06213694b7415b0b13d3084b83f5",
773
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiOperations\/AllTest.php": "6031bc6fa9e899f06af9465468fb9e15bf5a9a7c1051fb52fbd383ea879842e72ba4b5347d07566182c632b5f66d5f2d4bdf73c1368a3581c6010330bff91ec9",
774
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiOperations\/CreateTest.php": "c94c7e854a40716aec0e257c4d7fa279c3e941d64a37e167d4885dae5a0e22a513c8f3b018c436eff90ee045432c5e34b96aeb7d879380e9386c2bc177b94f39",
775
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiOperations\/DeleteTest.php": "02ea2d3adfd1d83770f10dc42cc2c12c28079ca80933fbe02219ea79fe7eb6958d2b1d76cb7a0bfee9e308c01efb1eff61901e22d192e15e89ae67f7edcabe5e",
776
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiOperations\/RequestTest.php": "f6e158958616f0637f827b94cce168e873e0d3be09e4ec27165f984af3d89c0be4d5d5cd3ed66df5b6237bf183003a0de1c652f599827fd01a2ee7ad47d5fd61",
777
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiOperations\/RetrieveTest.php": "b26b8f61eb3cb893ce4ff9517817295fe9b727dd570b1cf79ace36e16902e0ab9f460d6b65342afa28c59236b59ec0ba0809e1cee673f69ea26489fdbf5f4f42",
778
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiOperations\/UpdateTest.php": "6aafed3640a1173822ac9a26c002168eeef552f9b681fab9ec4f191df4f988a920d8c290b2f875c02596ef613273ed003e4b5a6bb6e0bc2760f54ffff445cdd1",
779
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiRequestorTest.php": "5a1234c4a1e4107aaf970bf87f0fdb1420979dd575a548e589b046cd7feea4dc914f25bf15474fe5bcd9773c94184b610d06b309d48639964a78e6137078cb5a",
780
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiResourceTest.php": "05562966c7ecea541b0ae95f67a11d9e2b86e45439b436b319e252d5998e0eb7a6c9b677e233572fc616caee856d9764b56feed80fd07cc1bec0d861490753b4",
781
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiResponseTest.php": "6f8d458b49e34df5c0634276659fd441e4140fb4dade92b384230e4e2b897e0da6d0e82c373b1eca98770dc3396ffc8b924672ce2141426706c624d00ffc7af9",
782
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/AvailablePhoneNumberTest.php": "354326429958fdd199df78d11bbc582a0988018b8f907d93808cbd53243f50332482c0603bf4ff12db2a8977ffe7e663ea9d6e8cb5f485aece0d46ae8942833d",
783
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/BalanceTest.php": "8f866f88a8a59754e2fce7d5fe2a0bf50399fd21711cef171873a45308ff96f929b23163495c273e96c9894b7ea39ee5149c45e764fa0de3b51807a329c674c6",
784
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/BillingGroupTest.php": "4333c81ee3ac767fa600095d95f324286d289c7e105ab251f635d9a942e75c418bde60f96c5954ae29dc152ee5fe7679bc5a8b67452f5fa1f59a411dc4854c69",
785
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/CallControlApplicationTest.php": "2bb4f83cdf82457840352c5beaaed8963aba1dcb59711e310d5aaed0d35429730796b412f1aa4e85d5be5a2288ebdd12fc2be9ad75549506d1a613d604d20749",
786
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/CallTest.php": "50f830a3a3c28953ec53c244d22381910307513ba18b7199d5e7bffc5747863e4da975fa972114b2f8a81d0c24afb2f72df8315010febd8d606d086d79d82165",
787
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/CollectionTest.php": "9e742f72d8a223e64bf1a25362f9a28356c0b55037811510692880a359ee5e39266d9e76aa0832de39530e26798806929fb9ab9795a04651ff316f609e2211f8",
788
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ConferenceTest.php": "4e8ab0baaf21da65e3942b0d98caff11b7a30c24bae10ba546b82f7031d7a85b9d88087f9ac8172e69546eb7635bc1cf8f39b509017b82116e0e13b557bc1f7e",
789
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ConnectionTest.php": "429f80316a563f45783c87db6b6d3dd1564190b5c6a259f254e91ad8b71b2aa5e6ed40b9cf1a98632b7c89b66441e07f0285d434c78dd9729c032c7a4891d4ee",
790
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/CredentialConnectionTest.php": "a1c37f36e418debb034faa2b7df5095eee175ac8801baed517089622123dcc4af642448aecde7aa8b19cf67629de087e4995ec816d791b5007923ee614590c1c",
791
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ErrorObjectTest.php": "97344e9d24c204ae429b856d0b32299de4380ec52e9cfbdef6090add25355d268e3dd3ec35ae7c5e0893f5bb204624930d1a856932243180bb71b40e5a1dc08f",
792
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/EventTest.php": "5152c008cb3de14a47586eeaf3ef778629b2beef87fe154a2c40c337c3f918d664c0ea44d8339e22846fedc696fe6b98f0bb0b557d3f88a3ac62990445a55ec5",
793
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Exception\/ApiErrorExceptionTest.php": "7d54379e1ab9f7d6bddb721ea1c284a8d023674e24e99d115f388ae367250089e10b5962e2bd091e3ebbedd0cc83bb4f821eb0a986ae11487e341569ef7f5c6e",
794
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Exception\/InvalidRequestExceptionTest.php": "a7da1818af1dfb3eaade1e1a122a8a3224e03a557396e11528af75b13cfae07764f82a282a3161d514358b4c55312193c73b5a8900fd70463fe0a66b448cc9f8",
795
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Exception\/SignatureVerificationExceptionTest.php": "1bb0fd1563a5c91b78b02e4f66f3cf0288986f546a0805830e0d4ad1ac449549930558caf86c06cdc578279323c43e4739747961065d5ddfa198dbbcd9540599",
796
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/FQDNConnectionTest.php": "0af10bfb2398682865c4ee72cfb34425fe73b0fd20c86b51c61c4cf72f8c4d39a4ecfa21e4ae2e07a67fdf956057549f0c8c4f77e27e65dc1b75dae8b9b849c9",
797
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/FQDNTest.php": "625370468fb338819fb823fbd38656799a8750f5093eebf75c02cfb592969a8635a442ec2febfe07705a5d6feea362b7644c25c67ae653a245bdf55fc178a2ed",
798
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/FaxApplicationTest.php": "64a60460c62983cb0afc2c76880628e16270f14b0b761a8d62766cbe4c0fb33dfc7bd93ae0cb62de25a8f2b3e1994826fcbfe300ea37353f398c4cc8ed7dd62b",
799
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/FaxTest.php": "a920c8ac18021bedbbc4972109afb0cd0afc16e5d86df2fffa2f8e0bdf837e5684124f926f01daf0bae439473022899498441a770ad8cc52479da3d012f1ea1f",
800
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/HttpClient\/CurlClientTest.php": "cff15215b95a804e4ee233df60671c5c1e9270f621025f6ea7cd5a0bdbb55175caa6c43c62e176300bde05c9ee90d84efda0dcdf0d0b5dda4dab2a47d1a669b7",
801
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/IPConnectionTest.php": "6e034e287616ac89e5059d337c682e3fde010130f4403dc76fe4efa12742c40dac114ddc1aaf7ce9e553c597d9ac27170419c5e33fb1439c31c6b585953ff1a4",
802
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/IPTest.php": "7ff33e91d1c7b8bdbef1ca1f5e373150a05f709e524d5a62b000b5c8b8d697ce42306ea8df917305d9ef2a4ea19f797ca28e2f8d0d5f9e3e31c4ebe5eab55ee9",
803
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/InboundChannelTest.php": "c430f6df3eb5add5bda2342e4b4a3acd77b33d74758516782ee0a045d75e7387aaccf36017fdaef18d71cf8865a28faaa0cf07a4f31c9876858719d84d479657",
804
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/MessageTest.php": "08ae5ad7b98362fa7c1478254f851078ef7e9a223c74f3fc57619d2b9c255259edefefc400e261cceafce7072fa7457b8c1cb4dc8dda29b51e432f6d274a8c3a",
805
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/MessagingHostedNumberOrderTest.php": "f8f8ac7271fb01b07815e2a92d7a0974e4320de63942eadc12df307c9458a7cbda7ddae505a731c491e4aa6bcdda7bec04786890df80dd9acd422593f2a02c0e",
806
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/MessagingPhoneNumberTest.php": "7827d12be3191d1329168c6b277899b81df17aa18b775be538b9b29ec9a90868969c05cf61d53715c42105b92cc37977270c1a7b78bee3d13214d8ece51172f2",
807
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/MessagingProfileTest.php": "0949c56ac67ee6f87854959635dbd003391e497325305692784905987d114b399e4c648252f314bc1147e385daf4e60198cbfd6aa940a6cb24992b8cb5abc24e",
808
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/MobileOperatorNetworkTest.php": "6cdaa23aa8cd0a0e9cc43b6f17c86d9c1f7793f7eb30b774f4a8ae9754488e59e0c180823c31d062abaa356578a8718c65f367588c61015e5e36f9f98e7a5cbe",
809
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/NumberLookupTest.php": "e03a73e589abd73cf52a637dd7d273dd2477533b66bcb75685552b77b47f7b58116c4637477da7f9ccb36a408909d91d3f0d3079396aca9bee996b862f358499",
810
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/NumberOrderDocumentTest.php": "06f3e8f8e8dcf5d8c96f25a6f1888d59e9433654ff060701bcc5cb9f54b07357bb3606ac17af3e3913033fb639358df85c6d5c55bff114407168333d7d49cbec",
811
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/NumberOrderTest.php": "176ca2e94df05262e8a43f14e112fb62108ce886bd90a690e8b907881c696e35bd223f08a4960fb58ebebd20cd42bd4217ffa14132e53ddac260926c6d7e8842",
812
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/NumberReservationTest.php": "11742f7449c279908848fd493817731f3f1343895e16d3426a7a7f9fc3d4cc27e275a858e16d7efb8e9c18d32de1ffffc92929e8e3ba277157ab7304c3023c86",
813
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/OtaUpdateTest.php": "14830affab4936804afdd723714f2dc76c520fc2fd6e4d36d7bb255ef566836eafb6b29c18c5adb8785eed39f4bab030e3cd1aab1ef0293d9660b38a10fd6a45",
814
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/OutboundVoiceProfileTest.php": "e49828087e2114fb11569db7387a0acb7cce8bdb0cd655b280b567445ba2dbf16f8b66a88369876e7a2530fb282bf5a04be702719adf4ace871c2b6df8fa5edf",
815
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/PhoneNumber\/MessagingTest.php": "b3c5665f4661624f58f02b814ab1edbee5ceb8c26643bd356b486f049dbb498a44da0af43daf200890c79acad16d51c169d7aa1a2ad4befe074b0ac539ebe3c0",
816
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/PhoneNumber\/VoiceTest.php": "af08b444289d0194437c414916a8ec9285b98413d78e74d1c832b9b45583f9037832a538751628b5dc86b5a13c40c63e9dd360b719501762e8e868fcaa6fb215",
817
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/PhoneNumberTest.php": "7a07f41165e45e5fab268b0e01523c2f67f0ad146965c401856582c4b4a3f63e53324585b1785b41cbeb637d8e61e26e2bfdb57feaf6c6c04cc33be8e4864df8",
818
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/PortingOrderTest.php": "48d2ed4bb9354c772eef6484a0c9a195487c39f26bee3d143ddf64ae7da15e42e5f280a3e26eaa280940230fdee52ea09b7e5320823d4baefa73eec4490537ad",
819
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/PortingPhoneNumberTest.php": "476748b7e467c4f5a648c394eb19dbf297aebc2c16357c946dbc4f363241639dd1001985a7bb21166d5bc77bff1e31edce6e379dbda10f04406377dafcae1bd5",
820
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/PortoutTest.php": "cd262d5eae7c9ef9ba8c76856ef2d4f604484e6bf8646e9ad5231e89f5d45c8176a8ac33a757c53e4be8e2c98e6bb750c6041aefe8b2a589ac1e70a2db4493b2",
821
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/RegulatoryRequirementTest.php": "daa2836606e7c3f34fa122045e982e42f5da86b46f367ddcd7fe9b12e2a3fe5d472d4f38403d4b63aa0c58473d3b5901b8dd49b93a56fa3e76a0bdcf88ebade0",
822
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/RequestTelemetryTest.php": "61190b3601f7c2c72f55e9b1634cfaf11ca53231cf4b5f854ab14859b97f5dc0f07f6c95b8f7c3516ed253e13768b7d4ed9c1d15d0772fd1850eb894f5821152",
823
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ShortCodeTest.php": "f2e867e0b75d8334ccce51f7bdce842b350e7028319e8d388e0512b5e119585952a54ea79762010f12de8ffcd1c440638ba5300ddbe59adfdcefc712d8e079ac",
824
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/SimCardTest.php": "7000edb2f9b739bdbd44fceeee2e4a16c708efb22c7e38483569d5416f3c107bcecdc759e2e6108553193ba99acc542f5bf3bc353ee1428593a81b80d89ad7c8",
825
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/TelephonyCredentialTest.php": "1f65bad536cd49b2df684db54533b9799856b32464b80700bed5008c9379c414f756d075ab8e231d83f5bd9c1729dba064a5ab5c7e515ca5c32e85698e2036ad",
826
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/TelnyxObjectTest.php": "6214f2c38865c7a183f6a3fd64bc79e7f04963bd726fc124a87b65412075fd236e00cb5f5ed514a3ca2847faec77f4e7a14c59e8906478543daea9c4ddecb7b7",
827
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/TelnyxTelemetryTest.php": "ced938d8d20bdcd0d465155e1bd3ffbaec8ba96a6392c42dbec27a1d10a04da17b90fd3b91322c94b54fcd5a974528e6f10d081ca9b1915a8c8166e0727ceb31",
828
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/TelnyxTest.php": "d88d70053ebb64905acccf7e3cf651ea40c9155130e351d56135c96ada96263311faeabc83d4cef1e72387302ea4a11edf338c3744093d9828e056351eefe11a",
829
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Util\/CaseInsensitiveArrayTest.php": "671262198a48a16dc2ddb7ecf1c7fd309241db9c74c11072d86cbd2f56403973e4bb17ca5bc6c489bddf46cc391098dd6b666b134fded9430c211c2a3193fc58",
830
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Util\/DefaultLoggerTest.php": "39942a071430588bf6c089f5d0c97596b3b46b5b7a2b45d900cc41670dcf4bcf0d34e37895e494f0c89242e52d11d8a62f419650407c26ed91b43ea18c816e9e",
831
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Util\/ObjectTypesTest.php": "2d697994485e6c8f9084f9155a5a5b753261bcd2afcc9dfc5760daa5d4196b7c5baee49b264142a705ca7dd6c5d2cde227db3c1f860173aee6769299db95cd83",
832
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Util\/RequestOptionsTest.php": "86d628c4b19e4b7d057cac471219603643b6405e83745535b6c5f743fe84d5cf918a273f9e8e22c5eded36cc20ce49453e90c0ae05a9ed437059ddc287ccb5f7",
833
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Util\/SetTest.php": "c91cbf6d983f16e033eec154e56705b1d942243371df25d5cec7cb375a359faf29fec0c87fa5f3e4d7aad512d7e757361cf409e60d643fff7fa8fef72d9ff172",
834
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Util\/UtilTest.php": "10f13d306d3ac2211b67e759a6e1fbbbdcbc1cb791db4531ac799a8f84be67b3ab43cc85498b786b0630510324bf5039ac7ed39e2252f607f7937e802f9b578d",
835
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/VerificationTest.php": "8ea7985bfc5075c0e5d3a8b0b703af578479e481d769a0e8659d4b0996314aae15de36cc7022e087c0625c5976255aae323f9ac141e9e4fef3939a23fda6d260",
836
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/VerifyProfileTest.php": "c0986530c0ddd14e2227cbf9ceb0614aeec3c3b2dc37b5bce0de0d174ebd047f61fa28ba0787b4de1fd3efb5d77d5924e36ebf6fbba09711d0237f520365e8fc",
837
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/WebhookTest.php": "7e06c31d714348c6c9a6cf14c4a21a1f593287fe61e41630a6d766f15cf2595dccb1cd92981578cc205f6c89839a07c7c845efca2b44521d0aa36c0be9e444f7",
838
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/bootstrap.no_autoload.php": "cb002f7c8f77834b6414db6535f083bcd227ee6085363fa3cb0f66b55226680a45c8562fd8458249868465957b2aeae134b3379f8ee2ed22c96425475e9c0af1",
839
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/bootstrap.php": "50e143ed68aceb91d3e119d5a31521e76bfe9876bd780c90ac83afb7ca4f32be48ff81c33c134109eafe1d22f35e0957a9a834966b8853df99dc1df04795adf4",
840
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/data\/test.png": "6ad523f5b65487369d305613366b9f68dcdeee225291766e3b25faf45439ca069f614030c08ca54c714fdbf7a944fac489b1515a8bf9e0d3191e1bcbbfe6a9df",
841
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/openapi\/README.md": "0c54fffd5b7a5f393358864ff9e3bd3793075d6060cc1336603b2455d60f16d160ffd47b52bca6834acf0d9713855b386f69580099a3dcc131e8d5d617975ff2",
842
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/update_certs.php": "6a7fd896832dbc4c039fc907c74f25fad01f26882809d1ed0bef2870ba7db5d5930311208e2864190209862a077e4397dabcc1760ef2ec7e29127868016fc0d8",
843
-        "providers\/Twilio\/readme.txt": "879f75eaefe03b56788a884a5cb031533b33a94acd816b9e3e51a9cf0db826de700062955fc45d9561bd4c69f71178e2976f702e801fc06c3c076494c55c8bcb",
844
-        "templates\/content\/index.php": "63d6e27dee39188b80cef2b095db84791e02af0526b80d41bd37845386714f9f82cc9dafaf97fa355b927ab9b74527199ec70604480e09feb10a2b076e313b5a",
845
-        "templates\/index.php": "15ea019ef66fa303773941fa9ca673e472e9521b3f9fdb9052870e6f0596ca3939b247c8924ec0d67e0f3fee6e612e2c447a1297cf23cb5b6144e58a6197d65e",
846
-        "templates\/navigation\/index.php": "9ed089a64a442a2d4ac207c501aa3d85c3d6913784c1bc8619992f756ffea35caf6924887c1ba209402a0b13ea5d539165bed1fc5f859d74c7dbe656529c294e",
847
-        "templates\/settings\/admin.php": "cd39f3a6712d1e8cccaf53d45c3026de7c3f0f325420497a5c0cb4702f541e6fee0a36b06a68c96b0b1149a8a1ecbabb9db61a925f132ce62ad459ef9e51038b",
848
-        "templates\/settings\/personal.php": "2bea6f0491ee26c490a40c0e516902bf4606136bfb8609dc7c29b8e510138748e79648e5af46a6fac0aa5aeb07e6047b1a1457c3a4593d44a9e4c0fd58445a03"
849
-    },
850
-    "signature": "k9YGlmVGfkVL3\/Xz3kcKSu\/4WHJgTev8OoV+psVcMqqtY5tJCnFsJA4qYkpH+KjDxfzyimfpa2BVcyskNR7K+qXXIwVnWy9chKAk+qQ8jkQl3vwlVlFTjiwSUTF+AQPXNot84aP2KuwO1CqAykE2epZVm97kHucYIUy2MVAl5h5MDgARMJvBmrvk2hdHpGVTwuJ9706yl5p+bi7oecbPllFewahTs85rk9oT2ilajC1Mg4mGvnlpvJ8DsbQRxf5eMQCmU9G+OKUkMcrO+GSi0tMkYI07W0lv5S+VBOLlGQzewCgdjTKMM1W5O0dODFjoUJhb7o6DJQe2qBIu71AhwpPr9+PH+CEpJ8DC1skP9QEFPW0CC7IEFdkAvRk0J7kCz7niyBco205ImEqWGv3tz6H0wCbLoiddAWCNIbhz47rZx0OYUa9jJ4zLpijO8HFA0jMAs0Rt6+vz37hgzPp515B9rUCGj4Na3U5tVjk+9fDquOaU6\/dnYLWVzuxVWb7GAq8PXhCqva1NnmITDkMTmftGbvI3LTjY\/PO84t9h50Red0jLay85ilhqzLD1KGrmmwi8VDHP\/Fkg8NvcXHzjdhG5kBk1nK2FL5jYusfm4+6X14jn4F9Ucwxvx5wzk3fQ2yHWdO9hc9qrNPQezr36wGr8Py3ROZJT2M2u7i6fPY8=",
851
-    "certificate": "-----BEGIN CERTIFICATE-----\r\nMIIECTCCAvECAhG8MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD\r\nVQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI\r\nMTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB\r\ndXRob3JpdHkwHhcNMjIwMjI1MTYwMjIyWhcNMzIwNjAyMTYwMjIyWjAZMRcwFQYD\r\nVQQDDA5zbXNfcmVsZW50bGVzczCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC\r\nggIBALbJJdLJIooOqb46AyOdNlWR9LXm3hWzjNBkH0o8wtMFEnotUOLcbaXbmTun\r\niG0Q0eunZGLSF6in+kY5M420Jh9bbDP6bYI8iDG6CSDkmKgnfcdJRlB6i7g0qBG8\r\noMzOB1x7ZVTef8Ho2ylTMWCxCfTlcQ15okAUpLU1G37I5rg0DZH2fPdGs9PMg11a\r\n64Tofl2GJSf9aHsgLi0AXXVzSN\/96wmK2fJYBqTVsPo5qIqKtMVWduhDXsb9yT4q\r\nDMYzyHrr8ydrMSGPwfs940R00hG2qHJcuKKGjYCCtu7djMfpKA9fqsGZBE6IWlVH\r\nCZxYIHPaEfHOybPR5d2GIKzncUQjtO2\/9rsju31GwzrVswG7w0tQUIIaj5AFLIL3\r\njnagjo2LH11ta9mB+DikaZDfd4VYEEfkTJA4BjnNCDa9pYOaFBGGwJMBSH3eWJCZ\r\nURBtk2NBnIheFRaGWRAzUpKAc+ZYdnmuAqe3Eh1en9GNlKTMCO+mAHkFJp3z8Nai\r\n1ijEVK+PIgtrzqc48ft0r6L43Zd184JnSIscBm\/9GUb0sCf+Uv4WFBKm4c7nrWtM\r\nC1LMKqmj2OYD1fZJ65M1VrkAqh8VXNtqQI1caBGMkcs4\/\/1eo\/XomL6sEkvfa9Y2\r\n1OywnVt52ZeLHyUS2P1mvPyWZgL8AxIie82Mtp7ZWX9Q8ubbAgMBAAEwDQYJKoZI\r\nhvcNAQELBQADggEBAI6OdKpKpevWVprPZ1TzUpq5ATj2JyCZySYC71Ud8l3lAEmn\r\nuh9ok5P7ccY\/c\/9\/ePWuvGxNSHmk1+nEEWC8XNXY5OoU9+i+g7vXd6EKOsowallw\r\nvWZB2rjl6+eNC\/AVa0NE2d9C6AWZtLxiV6rVsmkNUbBS6orHq8JJ2PSJKPT0\/nfM\r\nWL+ZORuFguWazEsy9oZBlplaWNxyAgq\/L66SKXynQPe74kZeVdZ5aQluHnBKZAoh\r\n6v0c2YiaoG5Mg6tDWcx4zM8HXv39Nbg2hcAtP2j3F9EkHZaytW9nM7nTIOxZJtR\/\r\nuGJtkj5+e1NQaMYn2NDiYSZALGUQ3YkHv4OIzDY=\r\n-----END CERTIFICATE-----"
852
-}
853 0
\ No newline at end of file
854 1
deleted file mode 100644
... ...
@@ -1,2575 +0,0 @@
1
-/**
2
- * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
3
- *
4
- * @author Double Bastion LLC
5
- *
6
- * @license GNU AGPL version 3 or any later version
7
- *
8
- * This program is free software; you can redistribute it and/or
9
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
10
- * License as published by the Free Software Foundation; either
11
- * version 3 of the License, or any later version.
12
- *
13
- * This program is distributed in the hope that it will be useful,
14
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
17
- *
18
- * You should have received a copy of the GNU Affero General Public
19
- * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
- *
21
- */
22
-
23
-div > label {
24
-   position: relative;
25
-}
26
-
27
-label span {
28
-   display: inline-block;
29
-   min-width: 110px;
30
-   padding: 0px 0px 8px 0px;
31
-}
32
-
33
-select {
34
-  min-height: 25px;
35
-  box-sizing: border-box;
36
-  text-overflow: inherit;
37
-}
38
-
39
-.providerSettings {
40
-   background-color: #F7F7F7;
41
-   padding: 14px;
42
-}
43
-
44
-.providerName {
45
-   font-size: 18px;
46
-   font-weight: bold;
47
-   margin-bottom: 20px;
48
-}
49
-
50
-#smsrelentless_vbar {
51
-   padding: 18px;
52
-   font-family: Calibri, Frutiger, "Myriad Pro", Myriad, sans-serif;
53
-   color: #6d6c6c;
54
-}
55
-
56
-.smsr_textbox {
57
-   display: block;
58
-   box-sizing: content-box;
59
-   width: 70%;
60
-   font-size: 14px !important;
61
-}
62
-
63
-.smsr_textboxspec {
64
-   box-sizing: content-box;
65
-   width: 70%;
66
-   font-size: 14px !important;
67
-}
68
-
69
-#copyToClipboardtel, #copyToClipboardnex, #copyToClipboardtwil, #copyToClipboardflow {
70
-   display: inline-block;
71
-   width: 18px;
72
-   height: 18px;
73
-   margin: 0px 0px -4px 5px;
74
-   cursor: pointer;
75
-}
76
-
77
-#copyToClipboardtel:hover, #copyToClipboardnex:hover, #copyToClipboardtwil:hover, #copyToClipboardflow:hover {
78
-   background-color: #E0E0E0;
79
-}
80
-
81
-#telapi_url, #nexapi_url, #twilapi_url, #twilapi_url_rec, #flowapi_url, #flowapi_url_rec {
82
-   display: inline-block;
83
-   box-sizing: content-box;
84
-   width: 70%;
85
-   font-size: 14px !important;
86
-}
87
-
88
-#generate_tel_rcpt, #generate_tel_delrcpt, #generate_nex_rcpt, #generate_nex_delrcpt, #generate_twil_rcpt, #generate_twil_delrcpt, #generate_flow_rcpt, #generate_flow_delrcpt {
89
-   display: block;
90
-   white-space: normal;
91
-   word-wrap: break-word;
92
-}
93
-
94
-#settings-dscr {
95
-   padding-top: 3px;
96
-}
97
-
98
-.setlabeltext {
99
-  font-size: 15px;
100
-}
101
-
102
-#smsr_save_msg {
103
-   display: inline;
104
-   color: #181918;
105
-   background-color: #a5e5b3;
106
-   font-weight: bold;
107
-}
108
-
109
-#get_notify {
110
-   display: block;
111
-   margin-bottom: 18px;
112
-}
113
-
114
-#get_notify:hover {
115
-   cursor: pointer;
116
-}
117
-
118
-#includesmsinemail, #showallmessages, #showdisplaynames {
119
-   display: block;
120
-   margin-bottom: 14px;
121
-}
122
-
123
-#includesmsinemail:hover {
124
-   cursor: pointer;
125
-}
126
-
127
-#currentbaldiv, #smsnumbersdiv {
128
-   display: block;
129
-   position: relative;
130
-   font-size: 17px;
131
-   font-weight: bold;
132
-   height: 30px;
133
-   margin: 0px 0px 14px 0px;
134
-   background-color: #4CA3D9;
135
-   border-radius: 20px;
136
-}
137
-
138
-.providername {
139
-  color: #FFFFFF;
140
-}
141
-
142
-.providername:hover {
143
-  color: #2c0cfc;
144
-}
145
-
146
-#currentbalance {
147
-  display: inline-block;
148
-  position: relative;
149
-  margin: 1px 0px 0px 100px;
150
-  color: #262626;
151
-  font-weight: 600;
152
-}
153
-
154
-#smsprovider {
155
-  display: inline;
156
-  position: absolute;
157
-  width: 90px;
158
-  height: 22px;
159
-  padding: 0px 0px 1px 0px !important;
160
-  -moz-box-sizing: border-box;
161
-  -webkit-box-sizing: border-box;
162
-  box-sizing: border-box;
163
-  background: #fcfcfc;
164
-  font-size: 15px;
165
-  font-weight: 500;
166
-  color: #565656;
167
-  text-align: center;
168
-  border-radius: 20px;
169
-}
170
-
171
-#currentsmsnmbrs {
172
-  display: inline-block;
173
-  position: absolute;
174
-  height: 22px;
175
-  width: 54%;
176
-  padding: 0.4px 0px 0px 0px !important;
177
-  margin: 2px 0px 0px 4px;
178
-  text-align: center;
179
-  text-overflow: inherit;
180
-  font-size: 14px;
181
-  font-weight: 500;
182
-  color: #565656;
183
-  -moz-box-sizing: border-box;
184
-  -webkit-box-sizing: border-box;
185
-  box-sizing: border-box;
186
-  background: #fcfcfc;
187
-  border-radius: 20px;
188
-}
189
-
190
-.cllridcls {
191
-  position: relative;
192
-  display: inline;
193
-  font-size: 17px;
194
-  color: #000000;
195
-}
196
-
197
-.tooltipbalanceid  {
198
-  position: relative;
199
-  display: inline-block;
200
-  float: right;
201
-  font-size: 15px;
202
-  color: #000000;
203
-  z-index: 9;
204
-}
205
-
206
-.tooltipsetid  {
207
-  position: relative;
208
-  display: inline-block;
209
-  float: right;
210
-  font-size: 15px;
211
-  color: #000000;
212
-  z-index: 8;
213
-}
214
-
215
-.tooltipbalanceid #infobalance {
216
-  display: block;
217
-  position: relative;
218
-  margin: 4px 14px 0px 0px;
219
-  color: #000000;
220
-  font-size: 21px;
221
-  font-weight: bold;
222
-  font-family: 'Liberation Serif', sans-serif;
223
-  font-style: italic;
224
-  z-index: 6;
225
-}
226
-
227
-.tooltipbalanceid .balancetooltip {
228
-  display: block;
229
-  position: absolute;
230
-  visibility: hidden;
231
-  width: 264px;
232
-  background-color: #fafafa;
233
-  font-size: 15px;
234
-  font-weight: bold;
235
-  color: #595959;
236
-  text-align: left;
237
-  border-radius: 5px;
238
-  padding: 5px 5px 5px 8px;
239
-  margin: -4px 0px 0px -244px;
240
-  box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
241
-  -webkit-box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
242
-  -moz-box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
243
-  z-index: 6;
244
-}
245
-
246
-.tooltipbalanceid:hover .balancetooltip {
247
-   visibility: visible;
248
-}
249
-
250
-#infotipid {
251
-   display: block;
252
-   position: relative;
253
-   margin: 4px 10px 0px 0px;
254
-   color: #000000;
255
-   font-size: 21px;
256
-   font-weight: bold;
257
-   font-family: 'Liberation Serif', sans-serif;
258
-   font-style: italic;
259
-   z-index: 5;
260
-}
261
-
262
-#setcalleridtp {
263
-   display: block;
264
-   position: absolute;
265
-   width: 274px;
266
-   overflow-y: scroll;
267
-   visibility: hidden;
268
-   background-color: #fafafa;
269
-   border-radius: 5px;
270
-   margin: -6px 0px 0px -224px;
271
-   scrollbar-width: auto;
272
-   scrollbar-color: #a2a2a2 #ececec;
273
-   box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
274
-   -webkit-box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
275
-   -moz-box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
276
-   z-index: 10;
277
-}
278
-
279
-.calleridtooltip {
280
-   display: block;
281
-   position: relative;
282
-   width: auto;
283
-   height: auto;
284
-   background-color: #f4f4f4;
285
-   font-size: 15px;
286
-   font-weight: bold;
287
-   color: #595959;
288
-   text-align: left;
289
-   padding: 5px 12px 5px 10px;
290
-   z-index: 10;
291
-}
292
-
293
-.tooltipsetid:hover #setcalleridtp {
294
-   visibility: visible;
295
-}
296
-
297
-.pflabels {
298
-   font-size: 15px;
299
-   font-weight: bold;
300
-}
301
-
302
-.srheader {
303
-   display: block;
304
-   position: relative;
305
-   margin: 0px 0px 7px 0px;
306
-   font-size: 17px;
307
-   font-weight: bold;
308
-}
309
-
310
-.sendtomultrcvrs {
311
-   display: block;
312
-   position: relative;
313
-   margin: 0px 0px 7px 0px;
314
-   font-size: 17px;
315
-}
316
-
317
-.smsnbformat {
318
-   display: block;
319
-   position: relative;
320
-   margin: 0px;
321
-   font-size: 17px;
322
-   font-weight: bold;
323
-
324
-}
325
-
326
-.smsrelentless_box {
327
-   width: 400px;
328
-   display: block;
329
-}
330
-.indtext {
331
-   display: inline-block;
332
-   padding-left: 10px;
333
-}
334
-
335
-#settings-dscr {
336
-   padding-top: 3px;
337
-}
338
-
339
-#sms_upload_msg {
340
-   display: block;
341
-   color: #181918;
342
-   background-color: #a5e5b3;
343
-   font-weight: bold;
344
-}
345
-
346
-#sms_submit_msg {
347
-   display: none;
348
-   margin: 14px 0px 8px 0px;
349
-   padding: 3px 20px 0px 20px;
350
-   width: 100%;
351
-   color: #181918;
352
-   background-color: #a5e5b3;
353
-   font-size: 15px;
354
-   font-weight: bold;
355
-   text-align: center;
356
-   border-radius: 14px;
357
-}
358
-
359
-#pickedfilename {
360
-   font-size: 13px;
361
-}
362
-
363
-#smstodiv {
364
-   display: block;
365
-   position: relative;
366
-   height: 32px;
367
-}
368
-
369
-#smsto {
370
-   display: block;
371
-   width: 99%;
372
-   max-height: 32px;
373
-   padding: 0px 15px 0px 15px;
374
-   color: #565656;
375
-   font-size: 16px;
376
-   font-weight: bold;
377
-   border-radius: 20px;
378
-}
379
-
380
-#sendtomultiple {
381
-   display: inline-block;
382
-   position: relative;
383
-   margin: 10px 0px 12px 0px;
384
-   font-size: 16px;
385
-   font-weight: bold;
386
-}
387
-
388
-#entermessage {
389
-   display: block;
390
-   position: relative;
391
-   margin: 4px 0px 0px 0px;
392
-   font-size: 16px;
393
-   font-weight: bold;
394
-}
395
-
396
-#uploadfileforsms {
397
-   margin-left: 7px;
398
-   background-color: #ffffff;
399
-   border-radius: 3px !important;
400
-}
401
-
402
-.entertime {
403
-   display: inline;
404
-   font-size: 16px;
405
-   font-weight: bold;
406
-   margin-right: 7px;
407
-}
408
-
409
-#sendmediafl {
410
-   display: block;
411
-   position: relative;
412
-   margin: 0px 0px 20px 0px;
413
-   font-size: 16px;
414
-   font-weight: bold;
415
-}
416
-
417
-#tomultchckbx {
418
-   display: inline-block;
419
-   position: absolute;
420
-   margin: 3px 0px 0px 10px;
421
-}
422
-
423
-#mediafilechckbx {
424
-   display: inline-block;
425
-   position: absolute;
426
-   margin: -7px 0px 0px 10px;
427
-}
428
-
429
-#deleteoldchckbox {
430
-   display: inline-block;
431
-   position: absolute;
432
-   margin: 3.5px 0px 0px 10px;
433
-}
434
-
435
-#tomultchckbx:hover, #mediafilechckbx:hover, #deleteoldchckbox:hover {
436
-   cursor: pointer;
437
-}
438
-
439
-.maxmessagelength {
440
-   display: none;
441
-   position: relative;
442
-   margin: 2px 7px 4px 0px;
443
-   font-size: 15px;
444
-   color: #000000;
445
-   z-index: 6;
446
-}
447
-
448
-#maxlengthinfo {
449
-   display: block;
450
-   position: absolute;
451
-   width: 274px;
452
-   height: 200px;
453
-   overflow-y: scroll;
454
-   visibility: hidden;
455
-   background-color: #fafafa;
456
-   border-radius: 5px;
457
-   margin: -11px 0px 0px -6px;
458
-   scrollbar-width: auto;
459
-   scrollbar-color: #a2a2a2 #ececec;
460
-   box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
461
-   -webkit-box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
462
-   -moz-box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
463
-   z-index: 10;
464
-}
465
-
466
-.maxlengthtooltip {
467
-   display: block;
468
-   position: relative;
469
-   width: auto;
470
-   height: auto;
471
-   background-color: #f4f4f4;
472
-   font-size: 15px;
473
-   font-weight: bold;
474
-   color: #595959;
475
-   text-align: left;
476
-   padding: 5px 12px 5px 10px;
477
-   z-index: 10;
478
-}
479
-
480
-.maxmessagelength:hover #maxlengthinfo {
481
-   visibility: visible;
482
-}
483
-
484
-.up-bttn-wrapper {
485
-  display: block;
486
-  position: relative;
487
-  overflow: hidden;
488
-  padding-top: 20px;
489
-  padding-bottom: 30px;
490
-}
491
-
492
-#smstext {
493
-  display: inline-block;
494
-  color: #000000;
495
-  width: 100%;
496
-  height: 130px;
497
-  text-align: left;
498
-  font-size: 16px;
499
-  border-radius: 6px;
500
-  resize: vertical;
501
-  white-space: pre-wrap;
502
-}
503
-
504
-#char_count {
505
-  display: none;
506
-  font-size: 15px;
507
-  font-weight: bold;
508
-}
509
-
510
-#mtextSize {
511
-  display: none;
512
-  margin-left: 10px;
513
-  font-size: 15px;
514
-  font-weight: bold;
515
-  color: #4CA3D9;
516
-}
517
-
518
-#submitsms {
519
-   display: block;
520
-   position: relative;
521
-   margin-top: 14px;
522
-   color: white;
523
-   font-weight: bold;
524
-   font-size: 15px;
525
-   background-color: #4CA3D9;
526
-   border-radius: 20px;
527
-}
528
-
529
-#submitsms:hover {
530
-   border-color: #5CAECC;
531
-}
532
-
533
-#submitsms:active {
534
-   background: #4B96B1;
535
-   border-color: #4B96B1;
536
-}
537
-
538
-#multiplerecivers {
539
-   display: none;
540
-   background: #e8f6ff;
541
-   border-radius: 6px;
542
-   padding: 5px;
543
-   margin: 0px 0px 20px 0px;
544
-}
545
-
546
-#multsetrows {
547
-  display: block;
548
-  padding: 5px;
549
-}
550
-
551
-#multsmsinterval {
552
-  display: block;
553
-  width: 100px;
554
-  height: 25px;
555
-  font-size: 14px;
556
-  font-weight: bold;
557
-  padding: 0px 0px 0px 10px;
558
-  border-radius: 20px;
559
-}
560
-
561
-#app {
562
-  position: relative;
563
-  display: flex;
564
-  min-height: 100%;
565
-  min-width: 100%;
566
-}
567
-
568
-#app-content {
569
-   position: relative;
570
-   z-index: 1000;
571
-   flex-basis: 100vw;
572
-   min-width: 0;
573
-   min-height: 100%;
574
-   margin: 0 !important;
575
-   overflow-y: scroll;
576
-}
577
-
578
-#viewerContainer {
579
-   display: block;
580
-   position: relative;
581
-   width: 100%;
582
-   height: 100%;
583
-}
584
-
585
-.pdfViewer #viewer {
586
-   display: block;
587
-   position: relative;
588
-   min-width: 100%;
589
-   min-height: 100%;
590
-}
591
-
592
-#smsdocpreview {
593
-   display: inline-block;
594
-   position: relative;
595
-   width: 100%;
596
-   height: 100%;
597
-   margin-top: -50px;
598
-}
599
-
600
-#outerContainer {
601
-   display: block;
602
-   position: relative;
603
-   width: 100%;
604
-   height: 100%;
605
-}
606
-
607
-#mainContainer {
608
-   display: block;
609
-   position: relative;
610
-   width: 100%;
611
-   height: 100%;
612
-}
613
-
614
-.texttooltip {
615
-  font-family: 'Liberation Serif', Calibri, sans-serif;
616
-  font-style: italic;
617
-  color: #000000;
618
-  font-size: 21px;
619
-  font-weight: bold;
620
-  margin: 0px 0px 4px 4px;
621
-}
622
-
623
-.fortooltip {
624
-   position: relative;
625
-   display: inline-block;
626
-   margin: 0px;
627
-   font-size: 15px;
628
-   color: #000000;
629
-   z-index: 7;
630
-}
631
-
632
-.fortooltipsec {
633
-   position: relative;
634
-   display: inline-block;
635
-   font-size: 15px;
636
-   color: #000000;
637
-   padding: 2px 0px 4px 2px;
638
-   z-index: 3;
639
-}
640
-
641
-.fortooltiptert {
642
-   position: relative;
643
-   display: inline-block;
644
-   font-size: 15px;
645
-   color: #000000;
646
-   padding: 2px 0px 4px 2px;
647
-   z-index: 0;
648
-}
649
-
650
-.fortooltipfourth {
651
-   position: relative;
652
-   display: inline-block;
653
-   font-size: 15px;
654
-   color: #000000;
655
-   padding: 2px 0px 4px 2px;
656
-   z-index: 4;
657
-}
658
-
659
-#tonmbrformat {
660
-   display: block;
661
-   position: absolute;
662
-   width: 274px;
663
-   overflow-y: scroll;
664
-   visibility: hidden;
665
-   background-color: #fafafa;
666
-   border-radius: 5px;
667
-   margin: -11px 0px 0px -6px;
668
-   scrollbar-width: auto;
669
-   scrollbar-color: #a2a2a2 #ececec;
670
-   box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
671
-   -webkit-box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
672
-   -moz-box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
673
-   z-index: 10;
674
-}
675
-
676
-.fortooltiptext {
677
-   display: block;
678
-   position: relative;
679
-   width: auto;
680
-   height: auto;
681
-   background-color: #f4f4f4;
682
-   font-size: 15px;
683
-   font-weight: bold;
684
-   color: #595959;
685
-   text-align: left;
686
-   padding: 5px 12px 5px 10px;
687
-   z-index: 10;
688
-}
689
-
690
-.fortooltip:hover #tonmbrformat {
691
-   visibility: visible;
692
-}
693
-
694
-#uploadfileinfo {
695
-   display: block;
696
-   position: absolute;
697
-   width: 274px;
698
-   overflow-y: scroll;
699
-   visibility: hidden;
700
-   background-color: #fafafa;
701
-   border-radius: 5px;
702
-   margin: -11px 0px 0px -6px;
703
-   scrollbar-width: auto;
704
-   scrollbar-color: #a2a2a2 #ececec;
705
-   box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
706
-   -webkit-box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
707
-   -moz-box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
708
-   z-index: 10;
709
-}
710
-
711
-.fortooltiptextsec {
712
-   display: block;
713
-   position: relative;
714
-   width: auto;
715
-   height: auto;
716
-   background-color: #f4f4f4;
717
-   font-size: 15px;
718
-   font-weight: bold;
719
-   color: #595959;
720
-   text-align: left;
721
-   padding: 5px 12px 5px 10px;
722
-   z-index: 10;
723
-}
724
-
725
-.fortooltipsec:hover #uploadfileinfo {
726
-   visibility: visible;
727
-}
728
-
729
-#deleteoldinfo {
730
-   display: block;
731
-   position: absolute;
732
-   width: 274px;
733
-   height: 200px;
734
-   overflow-y: scroll;
735
-   visibility: hidden;
736
-   background-color: #fafafa;
737
-   border-radius: 5px;
738
-   margin: -11px 0px 0px -6px;
739
-   scrollbar-width: auto;
740
-   scrollbar-color: #a2a2a2 #ececec;
741
-   box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
742
-   -webkit-box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
743
-   -moz-box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
744
-   z-index: 10;
745
-}
746
-
747
-.fortooltiptexttert {
748
-   display: block;
749
-   position: relative;
750
-   width: auto;
751
-   height: auto;
752
-   background-color: #f4f4f4;
753
-   font-size: 15px;
754
-   font-weight: bold;
755
-   color: #595959;
756
-   text-align: left;
757
-   padding: 5px 12px 5px 10px;
758
-   z-index: 10;
759
-}
760
-
761
-.fortooltiptert:hover #deleteoldinfo {
762
-   visibility: visible;
763
-}
764
-
765
-#uploadmmfileinfo {
766
-   display: block;
767
-   position: absolute;
768
-   width: 274px;
769
-   height: 350px;
770
-   overflow-y: scroll;
771
-   visibility: hidden;
772
-   background-color: #fafafa;
773
-   border-radius: 5px;
774
-   margin: -11px 0px 0px -16px;
775
-   scrollbar-width: auto;
776
-   scrollbar-color: #a2a2a2 #ececec;
777
-   box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
778
-   -webkit-box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
779
-   -moz-box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
780
-   z-index: 10;
781
-}
782
-
783
-#tooltiptextfourth {
784
-   display: block;
785
-   position: relative;
786
-   width: auto;
787
-   height: auto;
788
-   background-color: #f4f4f4;
789
-   font-size: 15px;
790
-   font-weight: bold;
791
-   color: #595959;
792
-   text-align: left;
793
-   padding: 5px 12px 5px 10px;
794
-   z-index: 10;
795
-}
796
-
797
-.fortooltipfourth:hover #uploadmmfileinfo {
798
-   visibility: visible;
799
-}
800
-
801
-.fileupload {
802
-   display: none;
803
-}
804
-
805
-.uploadflbt {
806
-   width: 411px;
807
-}
808
-
809
-#infotipmms {
810
-   display: block;
811
-   position: relative;
812
-   margin: 0px;
813
-   color: #000000;
814
-   font-size: 21px;
815
-   font-weight: bold;
816
-   font-family: 'Liberation Serif', sans-serif;
817
-   font-style: italic;
818
-   z-index: 5;
819
-}
820
-
821
-#mmsfoldersview {
822
-   display: none;
823
-   position: relative;
824
-   width: 100%;
825
-   height: 100%;
826
-   margin-top: -50px;
827
-   background-color: #f4f9ff;
828
-}
829
-
830
-#upmediafiles {
831
-   display: none;
832
-   background: #e8f6ff;
833
-   border-radius: 6px;
834
-   padding: 10px;
835
-   margin: 0px 0px 20px 0px;
836
-}
837
-
838
-.uploadflbt .icon-upload {
839
-   display: inline;
840
-}
841
-
842
-.pfprompt {
843
-   font-size: 16px;
844
-   font-weight: bold;
845
-}
846
-
847
-.fileuploadstl, .filesfromnc {
848
-  display: block;
849
-  font-size: 17px;
850
-  font-weight: bold;
851
-  color: #000000;
852
-}
853
-
854
-#uploadfileformms {
855
-   margin-left: 21px;
856
-   background-color: #ffffff;
857
-   border-radius: 3px !important;
858
-}
859
-
860
-#filestotsize {
861
-  display: none;
862
-  position: relative;
863
-  height: auto;
864
-  padding: 0px 0px 8px 0px;
865
-  font-size: 14.5px;
866
-  font-weight: bold;
867
-  color: #189558;
868
-}
869
-
870
-#filessizetext {
871
-  display: inline;
872
-  position: relative;
873
-  padding-left: 10px;
874
-}
875
-
876
-#fileuploadednm .indivflcls {
877
-  display: inline-block;
878
-  position: relative;
879
-  height:auto;
880
-  max-width: 90%;
881
-  overflow: visible;
882
-  white-space: normal;
883
-  word-break: break-all;
884
-  text-overflow: ellipsis;
885
-  font-size: 17px;
886
-  color: #0e6ba0;
887
-}
888
-
889
-#fileuploadednm .indivflcls:hover {
890
-  cursor: pointer;
891
-  text-decoration: underline;
892
-}
893
-
894
-#fileuploadednm .indupfldl {
895
-  position: relative;
896
-  display: inline-block;
897
-  float: right;
898
-  cursor: pointer;
899
-  width: 20px;
900
-  color: #0e6ba0;
901
-  text-align: center;
902
-  font-size: 17px;
903
-}
904
-
905
-#fileuploadednm .indupfldl:hover {
906
-  background-color: #e8f6ff;
907
-  cursor: pointer;
908
-}
909
-
910
-#filespickednc .indivflpckd {
911
-  display: inline-block;
912
-  position: relative;
913
-  height:auto;
914
-  max-width: 90%;
915
-  overflow: visible;
916
-  white-space: normal;
917
-  word-break: break-all;
918
-  text-overflow: ellipsis;
919
-  color: #0e6ba0;
920
-}
921
-
922
-.indivflpckd:hover {
923
-  cursor: pointer;
924
-  text-decoration: underline;
925
-}
926
-
927
-.indpckfldl {
928
-  position: relative;
929
-  display: inline-block;
930
-  float: right;
931
-  cursor: pointer;
932
-  width: 20px;
933
-  color: #0e6ba0;
934
-  text-align: center;
935
-}
936
-
937
-#filespickednc .indpckfldl:hover {
938
-  background-color: #e8f6ff;
939
-  cursor: pointer;
940
-}
941
-
942
-#pf_upload_msg, #pf_choose_msg {
943
-  display: block;
944
-  color: #181918;
945
-  background-color: #a5e5b3;
946
-  font-weight: bold;
947
-  text-align: center;
948
-  border-radius: 3px;
949
-}
950
-
951
-#choosefilen {
952
-  display: inline;
953
-  position: relative;
954
-  margin: 0px 0px 20px 16px;
955
-  padding-top: 15px;
956
-  background-image: url('../img/nextcloud_logo.svg');
957
-  background-repeat: no-repeat;
958
-  background-size: 110% 125%;
959
-  background-position: center center;
960
-  min-width: 66px;
961
-  min-height: 30px;
962
-  cursor:pointer;
963
-}
964
-
965
-#choosefilen:active {
966
-  background-image: url('../img/nextcloud_logo_bright.svg');
967
-  background-repeat: no-repeat;
968
-  background-size: 110% 125%;
969
-  background-position: center center;
970
-  min-width: 66px;
971
-  min-height: 30px;
972
-}
973
-
974
-#pickFromNext, #uploadFile {
975
-  display: inline-block;
976
-  position: relative;
977
-  font-size: 16px;
978
-  font-weight: bold;
979
-  color: #6d6c6c;
980
-}
981
-
982
-#filespickednc .indivflpckd {
983
-  display: inline-block;
984
-  position: relative;
985
-  height:auto;
986
-  max-width: 90%;
987
-  overflow: visible;
988
-  white-space: normal;
989
-  word-break: break-all;
990
-  text-overflow: ellipsis;
991
-  color: #0e6ba0;
992
-}
993
-
994
-#filespickednc .indpckfldl:hover {
995
-  background-color: #e8f6ff;
996
-  cursor: pointer;
997
-}
998
-
999
-.uploadflbt {
1000
-  width: 411px;
1001
-}
1002
-
1003
-.uploadflbt .icon-upload {
1004
-  display: inline;
1005
-}
1006
-
1007
-.uploadfiledv {
1008
-  display: inline-block;
1009
-  position: relative;
1010
-  margin: 16px 0px 22px 0px;
1011
-}
1012
-
1013
-#mmsfileuploadednm .indivflcls {
1014
-  display: inline-block;
1015
-  position: relative;
1016
-  height:auto;
1017
-  max-width: 90%;
1018
-  overflow: visible;
1019
-  white-space: normal;
1020
-  word-break: break-all;
1021
-  text-overflow: ellipsis;
1022
-  font-size: 17px;
1023
-  color: #0e6ba0;
1024
-}
1025
-
1026
-#mmsfileuploadednm .indivflcls:hover {
1027
-  cursor: pointer;
1028
-  text-decoration: underline;
1029
-}
1030
-
1031
-#mmsfileuploadednm .indupfldl {
1032
-  position: relative;
1033
-  display: inline-block;
1034
-  float: right;
1035
-  cursor: pointer;
1036
-  width: 20px;
1037
-  color: #0e6ba0;
1038
-  text-align: center;
1039
-  font-size: 17px;
1040
-}
1041
-
1042
-#mmsfileuploadednm .indupfldl:hover {
1043
-  background-color: #e8f6ff;
1044
-  cursor: pointer;
1045
-}
1046
-
1047
-#filessizetext {
1048
-  display: inline;
1049
-  position: relative;
1050
-  padding-left: 10px;
1051
-}
1052
-
1053
-.srheaderch {
1054
-  display: block;
1055
-  position: relative;
1056
-  margin: 0px 0px 15px 0px;
1057
-  font-size: 16px;
1058
-  font-weight: bold;
1059
-}
1060
-
1061
-.indgenflclsmms, .indgenpckfls {
1062
-  display: block;
1063
-  margin: 10px 6px 0px 6px;
1064
-}
1065
-
1066
-#pickfilesNext {
1067
-  display: block;
1068
-  margin: 20px 0px 0px 0px;
1069
-}
1070
-
1071
-#dirbuttons {
1072
-  margin-top: 20px;
1073
-}
1074
-
1075
-button, input, textarea, div[contenteditable="true"], div[contenteditable="false"] {
1076
-  min-height: 9px;
1077
-}
1078
-
1079
-#choosefilen {
1080
-  display: inline;
1081
-  position: relative;
1082
-  margin: 4px 0px 20px 16px;
1083
-  background-image: url('../img/nextcloud_logo.svg');
1084
-  background-repeat: no-repeat;
1085
-  background-size: 110% 125%;
1086
-  background-position: center center;
1087
-  min-width: 66px;
1088
-  min-height: 30px;
1089
-  cursor:pointer;
1090
-}
1091
-
1092
-#choosefilen:active {
1093
-  background-image: url('../img/nextcloud_logo_bright.svg');
1094
-  background-repeat: no-repeat;
1095
-  background-size: 110% 125%;
1096
-  background-position: center center;
1097
-  min-width: 66px;
1098
-  min-height: 30px;
1099
-}
1100
-
1101
-#selectcalleridbttn {
1102
-  position: relative;
1103
-  padding-left: 0px;
1104
-  margin-top: 2.6px;
1105
-  margin-right: 4px;
1106
-  float: right;
1107
-  background-image: url('../img/refresh_logo.svg');
1108
-  background-repeat: no-repeat;
1109
-  background-size: 110% 110%;
1110
-  background-position: center center;
1111
-  min-width: 24px;
1112
-  min-height: 24px;
1113
-  cursor: pointer;
1114
-  background-color: #ffffff;
1115
-  border-radius: 20px;
1116
-}
1117
-
1118
-#pickid, #showsum {
1119
-  display: inline-block;
1120
-  position: relative;
1121
-  font-size: 17px;
1122
-  font-weight: bold;
1123
-  margin: 4px 0px 8px 14px;
1124
-  color: #FFFFFF;
1125
-}
1126
-
1127
-.smsrelentless_checkbox:hover {
1128
-  cursor: pointer;
1129
-}
1130
-
1131
-#smstables {
1132
-  display: block; 
1133
-  position: relative;
1134
-  min-width: 100%;
1135
-  min-height: 100%;
1136
-}
1137
-
1138
-#smsRGreyLogo {
1139
-  display: block;
1140
-  position: relative;
1141
-  background-image: url('../img/sms_relentless_grey.svg');
1142
-  background-repeat: no-repeat;
1143
-  background-position: center center;
1144
-  width: 100%;
1145
-  height: 675px;
1146
-}
1147
-
1148
-#recSmsTable, #sentSmsTable {
1149
-  display: block;
1150
-  position: relative;
1151
-  top: 0px;
1152
-  width: 100%;
1153
-  height: auto;
1154
-  font-size: 14px;
1155
-  z-index: 50;
1156
-  background: #FFFFFF;
1157
-}
1158
-
1159
-.receivedrows, .receivedrowsbody, .sentrows, .sentrowsbody, .groupedmsgrows {
1160
-  border: 1px solid #f3f3f3;
1161
-  padding: 8px;
1162
-}
1163
-
1164
-#groupedSmsTable {
1165
-  display: block;
1166
-  position: relative;
1167
-  top: 0px;
1168
-  width: 100%;
1169
-  height: auto;
1170
-  font-size: 14px;
1171
-  z-index: 50;
1172
-  background: #FFFFFF;
1173
-}
1174
-
1175
-#groupedSmsTable td {
1176
-  text-align: left;
1177
-  vertical-align: top;
1178
-  border: 1px solid #f3f3f3;
1179
-  padding: 5px;
1180
-}
1181
-
1182
-.groupedrowsbody {
1183
-  border: 1px solid #f3f3f3;
1184
-  padding: 8px;
1185
-}
1186
-
1187
-.groupedLstNmbr {
1188
-  overflow: scroll;
1189
-  white-space: nowrap;
1190
-}
1191
-
1192
-.groupedLstNames {
1193
-  overflow: scroll;
1194
-  white-space: nowrap;
1195
-}
1196
-
1197
-.groupedLstMsgs {
1198
-  overflow: scroll;
1199
-  white-space: nowrap;
1200
-}
1201
-
1202
-.fixedRowHeight {
1203
-  max-height: 300px;
1204
-}
1205
-
1206
-.expandGrpRow {
1207
-  display: block;
1208
-  margin:-3px auto 7px auto;
1209
-  cursor: pointer;
1210
-}
1211
-
1212
-.dispNameList {
1213
-  display: block;
1214
-  margin: 2px 0px;
1215
-  font-size: 14.5px;
1216
-  font-weight: 500;
1217
-  color: #0a559e;
1218
-  cursor: pointer;
1219
-}
1220
-
1221
-.dispNameList:hover {
1222
-  color: #1483f0;
1223
-}
1224
-
1225
-.phoneNmbrRow {
1226
-  font-size: 14.5px;
1227
-  font-weight: 500;
1228
-  color: #06866f;
1229
-  cursor: pointer;
1230
-}
1231
-
1232
-.phoneNmbrRow:hover {
1233
-  color: #08b899;
1234
-}
1235
-
1236
-#selectListedNmbrs {
1237
-  display: block;
1238
-  width: 100%;
1239
-}
1240
-
1241
-.sentMssgStatus {
1242
-  display: inline-block;
1243
-  margin: 0px 6px 0px 6.5px;
1244
-}
1245
-
1246
-.saveRestrictions, .saveAutoReply {
1247
-  display: inline-block;
1248
-  border-radius: 8px !important;
1249
-  padding: 0px 14px !important;
1250
-  margin: 0px 0px 0px 10px !important;
1251
-  color: #ffffff !important;
1252
-  background-color: #59d0b4 !important;
1253
-}
1254
-
1255
-.saveRestrictions:hover, .saveAutoReply:hover {
1256
-  background-color: #40c1a3 !important;
1257
-}
1258
-
1259
-.saveRestrictions:active, .saveAutoReply:active {
1260
-  background-color: #3aad92 !important;
1261
-}
1262
-
1263
-#save_admin_settings {
1264
-  display: inline-block;
1265
-  border-radius: 8px !important;
1266
-  padding: 0px 14px !important;
1267
-  color: #ffffff !important;
1268
-  background-color: #1e89c2 !important;
1269
-}
1270
-
1271
-#save_admin_settings:hover {
1272
-  background-color: #0369a0  !important;
1273
-}
1274
-
1275
-#save_admin_settings:active {
1276
-  background-color: #025480  !important;
1277
-}
1278
-
1279
-#phoneNmbrRestr th {
1280
-  font-weight: 500;
1281
-}
1282
-
1283
-.restrAuthor {
1284
-  width: 200px;
1285
-  height: 40px !important;
1286
-}
1287
-
1288
-.restrPhoneNmbr, .arplPhoneNmbr {
1289
-  width: 194px;
1290
-  height: 40px !important;
1291
-}
1292
-
1293
-.restrGroups, .restrUsers {
1294
-  width: 330px;
1295
-  height: 40px !important;
1296
-  border: 1px solid #000;
1297
-  border-radius: 6px;
1298
-  margin: 0px 1px 0px 0px;
1299
-  overflow: hidden;
1300
-}
1301
-
1302
-.restrGroups:hover, .restrUsers:hover {
1303
-  overflow: auto !important;
1304
-}
1305
-
1306
-#addRestrRow, #addArplRow {
1307
-  display: block;
1308
-  margin: 5px 0px 0px 6px;
1309
-  width: 15px;
1310
-  height: 15px;
1311
-  cursor: pointer;
1312
-  background-color: #ffffff;
1313
-}
1314
-
1315
-#autoReplyTbl td {
1316
-  text-align: left;
1317
-  vertical-align: top;
1318
-  padding: 0px 0px 10px 0px;
1319
-}
1320
-
1321
-#autoReplyTbl th {
1322
-  font-weight: 500;
1323
-}
1324
-
1325
-.arplAuthor {
1326
-  width: 200px;
1327
-  height: 38px !important;
1328
-}
1329
-
1330
-.arplMode {
1331
-  display: inline-block;
1332
-  width: 330px;
1333
-  height: 184px;
1334
-  border: 1px solid #000;
1335
-  border-radius: 6px;
1336
-  margin: 0px 4px 0px 0px;
1337
-  overflow: visible;
1338
-}
1339
-
1340
-.modeContent .date-picker-x {
1341
-   top: -170px !important;
1342
-   left: -170px !important;
1343
-}
1344
-
1345
-.arplText {
1346
-  display: inline-block;
1347
-  color: #000000;
1348
-  width: 330px;
1349
-  height: 184px;
1350
-  font-size: 15px;
1351
-  text-align: left;
1352
-  border: 1px solid #000;
1353
-  border-radius: 6px;
1354
-  margin: 0px 1px 0px 0px;
1355
-  resize: vertical;
1356
-  white-space: pre-wrap;
1357
-  overflow: auto;
1358
-}
1359
-
1360
-.selectArplMode {
1361
-  display: block;
1362
-  width: 322px;
1363
-  margin: 4px 0px 0px 4px;
1364
-  cursor: pointer;
1365
-  font-weight: 500;
1366
-}
1367
-
1368
-.daysOfWeek {
1369
-  display: block;
1370
-  width: 100%;
1371
-  height: 26px;
1372
-  margin: 3px auto;
1373
-  font-weight: 500;
1374
-  text-align: center;
1375
-}
1376
-
1377
-.daysInWeek {
1378
-  display: block;
1379
-  position: relative;
1380
-  width: 322px;
1381
-  height: auto;
1382
-  margin: 0px 0px 0px 4px !important;
1383
-  text-align: center;
1384
-  border: 1px solid #000;
1385
-  border-radius: 6px;
1386
-}
1387
-
1388
-.chooseTInterval {
1389
-  display: block;
1390
-  width: 100%;
1391
-  height: 26px;
1392
-  margin: 5px auto 0px auto;
1393
-  font-weight: 500;
1394
-  text-align: center;
1395
-}
1396
-
1397
-.selectArplHours {
1398
-  display: block;
1399
-  width: 100%;
1400
-  text-align: center;
1401
-}
1402
-
1403
-.tooltipautoreply {
1404
-  display: inline-block;
1405
-  position: absolute;
1406
-  font-size: 15px;
1407
-  z-index: 9;
1408
-}
1409
-
1410
-.tooltipautoreplyst, .tooltipautoreplypn {
1411
-  display: inline-block;
1412
-  position: absolute;
1413
-  font-size: 15px;
1414
-  z-index: 7;
1415
-}
1416
-
1417
-#infoautoreply, #infoautoreplyst, #infoautoreplypn {
1418
-  display: inline-block;
1419
-  position: relative;
1420
-  margin: -2px 0px 0px 10px;
1421
-  color: #000000;
1422
-  font-size: 21px;
1423
-  font-weight: bold;
1424
-  font-family: 'Liberation Serif', sans-serif;
1425
-  font-style: italic;
1426
-  cursor: pointer;
1427
-}
1428
-
1429
-.autorpltooltip, .autorpltooltipst, .autorpltooltippn {
1430
-  display: block;
1431
-  position: absolute;
1432
-  visibility: hidden;
1433
-  width: 330px;
1434
-  height: auto;
1435
-  background-color: #fafafa;
1436
-  font-size: 15px;
1437
-  font-weight: bold;
1438
-  white-space: normal;
1439
-  color: #595959;
1440
-  text-align: left;
1441
-  border-radius: 5px;
1442
-  padding: 5px 5px 5px 8px;
1443
-  margin: -4px 0px 0px -150px;
1444
-  box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
1445
-  -webkit-box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
1446
-  -moz-box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
1447
-}
1448
-
1449
-.tooltipautoreply:hover .autorpltooltip, .tooltipautoreplyst:hover .autorpltooltipst, .tooltipautoreplypn:hover .autorpltooltippn  {
1450
-   visibility: visible;
1451
-}
1452
-
1453
-.selectHrMin {
1454
-  font-weight: 500 !important;
1455
-  color: #01446d !important;
1456
-}
1457
-
1458
-.chooseDateIntvl {
1459
-  display: block;
1460
-  width: 100%;
1461
-  height: 32px;
1462
-  margin: 19px auto 4px auto;
1463
-  font-weight: 500;
1464
-  text-align: center;
1465
-}
1466
-
1467
-.arplstrtendDates {
1468
-  display: block;
1469
-  position: absolute;
1470
-  width: 330px;
1471
-  height: auto;
1472
-}
1473
-
1474
-.stdtTitle {
1475
-  display: inline-block;
1476
-  position: absolute;
1477
-  width: 140px;
1478
-  height: 38px;
1479
-  left: 10px;
1480
-  top: 2px;
1481
-  font-weight: 500;
1482
-  text-align: center;
1483
-}
1484
-
1485
-.enddtTitle {
1486
-  display: inline-block;
1487
-  position: absolute;
1488
-  width: 140px;
1489
-  height: 38px;
1490
-  right: 10px;
1491
-  top: 2px;
1492
-  font-weight: 500;
1493
-  text-align: center;
1494
-}
1495
-
1496
-.startDate {
1497
-  display: inline-block;
1498
-  position: absolute;
1499
-  width: 140px;
1500
-  height: 38px;
1501
-  left: 10px;
1502
-  top: 26px;
1503
-  border: 1px solid #3b3b3b;
1504
-  border-radius: 6px;
1505
-  text-align: center;
1506
-  font-weight: 500;
1507
-  color: #01446d !important;
1508
-}
1509
-
1510
-.endDate {
1511
-  display: inline-block;
1512
-  position: absolute;
1513
-  width: 140px;
1514
-  height: 38px;
1515
-  right: 10px;
1516
-  top: 26px;
1517
-  border: 1px solid #3b3b3b;
1518
-  border-radius: 6px;
1519
-  text-align: center;
1520
-  font-weight: 500;
1521
-  color: #01446d !important;
1522
-}
1523
-
1524
-#adminOverlay {
1525
-  display: block;
1526
-  position: absolute;
1527
-  width: 100%;
1528
-  height: 100%;
1529
-  top: 0;
1530
-  left: 0;
1531
-  opacity: 0;
1532
-  z-index: 4995;
1533
-}
1534
-
1535
-.grpsList, .usrsList {
1536
-  display: block;
1537
-  position: absolute;
1538
-  width: 316px;
1539
-  max-height: 300px;
1540
-  z-index: 5000;
1541
-  overflow: auto;
1542
-  background-color: #ffffff;
1543
-} 
1544
-
1545
-.groupsList, .usersList {
1546
-  display: block;
1547
-  position: relative;
1548
-  float: left;
1549
-  padding: 6px 4px;
1550
-  width: 300px;
1551
-  height: auto;
1552
-  color: #353535;
1553
-  border-radius: 6px;
1554
-  border: 1px solid #dadada;
1555
-  cursor: pointer;
1556
-}
1557
-
1558
-.groupsList:hover, .usersList:hover {
1559
-  background-color: #f1f1f1;
1560
-}
1561
-
1562
-.selectedGrps, .selectedUsrs {
1563
-  display: inline-block;
1564
-  position: relative;
1565
-  margin: 6px 1px 0px 1px;
1566
-  padding: 0px 6px;
1567
-  color: #353535;
1568
-  background-color: #ffffff;
1569
-  border: 1px solid #dadada;
1570
-  border-radius: 6px;
1571
-  box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
1572
-  -webkit-box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
1573
-  -moz-box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
1574
-}
1575
-
1576
-.removeGroup, .removeUser { 
1577
-  margin: 0px 0px -2px 6px;
1578
-  width: 12px;
1579
-  height: 12px;
1580
-  cursor: pointer;
1581
-}
1582
-
1583
-.showAllGroups, .showAllUsers {
1584
-  max-width: 40px !important;
1585
-  margin: 3px 10px 0px 6px;
1586
-  background-color: #ffffff;
1587
-}
1588
-
1589
-.showByNmbrTitle {
1590
-  display: block;
1591
-  width: 100%;
1592
-  color: #353535;
1593
-  text-align: center;
1594
-  font-size: 16px; 
1595
-  font-weight: 500;
1596
-  margin: 0px auto 3px auto;
1597
-}
1598
-
1599
-.marksent {
1600
-  background-color: #F2FBFF !important;
1601
-}
1602
-
1603
-.markreceived {
1604
-  background-color: #F2FFF5 !important;
1605
-}
1606
-
1607
-#sentfiltersrow, #recfiltersrow, #grpfiltersrow {
1608
-  display: none;
1609
-  position: sticky;
1610
-  top: 27px;
1611
-  background: #FFFFFF;
1612
-  box-shadow: 0 6px 7px rgba(0, 0, 0, 0.1);
1613
-  z-index: 1000;
1614
-}
1615
-
1616
-#sentSmsTable th, #recSmsTable th, #groupedSmsTable th {
1617
-  position: sticky;
1618
-  top: 27px;
1619
-  z-index: 999;
1620
-  border: 1px solid #f3f3f3;
1621
-  padding: 7px;
1622
-  background-color: #bfe5f2;
1623
-  font-size: 15px;
1624
-  font-weight: bold;
1625
-  text-align: center;
1626
-}
1627
-
1628
-#sentSmsTable td, #recSmsTable td {
1629
-  border: 1px solid #f3f3f3;
1630
-  padding: 5px;
1631
-  white-space: normal;
1632
-}
1633
-
1634
-.datecolsent {
1635
-  text-align: center;
1636
-}
1637
-
1638
-.sentdbidcolumn {
1639
-  text-align: center;
1640
-}
1641
-
1642
-.dbidcolumnrec {
1643
-  width: 50px;
1644
-  text-align: center;
1645
-}
1646
-
1647
-.messagecolumnsent {
1648
-  background: #fffff2;
1649
-  text-align: left;
1650
-  font-weight: 500;
1651
-  width: 250px;
1652
-  word-break: break-word;
1653
-}
1654
-
1655
-.messagecolumnrec {
1656
-  background: #fffff2;
1657
-  text-align: left;
1658
-  font-weight: 500;
1659
-  width: 526px;
1660
-  word-break: break-word;
1661
-}
1662
-
1663
-.messageAuthorName {
1664
-  border: 0px;
1665
-  border-radius: 20px;
1666
-  padding: 4px 10px;
1667
-  margin: 0px 4px 0px 0px;
1668
-  color: #414141;
1669
-  background-color: #eff9ff;
1670
-}
1671
-
1672
-.msgAuthorNameGrp {
1673
-  border: 0px;
1674
-  border-radius: 20px;
1675
-  padding: 3px 8px;
1676
-  margin: 0px 4px 0px 0px;
1677
-  color: #353535;
1678
-  background-color: #e8edff !important;
1679
-}
1680
-
1681
-.addNameToPhNb {
1682
-  cursor: pointer;
1683
-  border-radius: 20px;
1684
-}
1685
-
1686
-.listToFromMsgs {
1687
-  display: block;
1688
-  margin: 0;
1689
-  cursor: pointer;
1690
-}
1691
-
1692
-.lstMsgToFromImg {
1693
-  cursor: pointer;
1694
-  height: auto;
1695
-}
1696
-
1697
-.lstMsgToFromImg:hover {
1698
-   box-shadow: 0 0 7px rgba(0, 0, 0, 0.25);
1699
-   -webkit-box-shadow: 0 0 7px rgba(0, 0, 0, 0.25);
1700
-   -moz-box-shadow: 0 0 7px rgba(0, 0, 0, 0.25);
1701
-}
1702
-
1703
-.lstMsgToFromImg:active {
1704
-   box-shadow: 0 0 9px rgba(0, 0, 0, 0.25);
1705
-   -webkit-box-shadow: 0 0 9px rgba(0, 0, 0, 0.25);
1706
-   -moz-box-shadow: 0 0 9px rgba(0, 0, 0, 0.25);
1707
-}
1708
-
1709
-#loadMoreMsgs, #loadMoreMsgsusr {
1710
-  display: none;
1711
-  margin: 1px auto 2px auto;
1712
-  width: 180px;
1713
-  height: 22px;
1714
-  border: 1px solid #b8d4e6;
1715
-  border-radius: 20px;
1716
-  color: #6c91b2;
1717
-  line-height: normal;
1718
-  text-align: center;
1719
-  font-size: 15px;
1720
-  font-weight: 500;
1721
-  cursor: pointer;
1722
-}
1723
-
1724
-#loadMoreMsgs:hover, #loadMoreMsgsusr:hover {
1725
-  color: #3a6c9a;
1726
-  border: 1px solid #95bad3;
1727
-}
1728
-
1729
-#loadMoreMsgs:active, #loadMoreMsgsusr:active {
1730
-   box-shadow: 0 0 6px rgba(0, 0, 0, 0.23);
1731
-   -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, 0.23);
1732
-   -moz-box-shadow: 0 0 6px rgba(0, 0, 0, 0.23);
1733
-   border: 1px solid #79a2be;
1734
-}
1735
-
1736
-.addNameToPhNb:hover {
1737
-  box-shadow: 0 0 8px rgba(0, 0, 0, 0.23);
1738
-  -webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.23);
1739
-  -moz-box-shadow: 0 0 8px rgba(0, 0, 0, 0.23);
1740
-}
1741
-
1742
-.addNameToPhNb:active {
1743
-  box-shadow: 0 0 12px rgba(0, 0, 0, 0.33);
1744
-  -webkit-box-shadow: 0 0 12px rgba(0, 0, 0, 0.33);
1745
-  -moz-box-shadow: 0 0 12px rgba(0, 0, 0, 0.33);
1746
-}
1747
-
1748
-#recTblOverlay {
1749
-  display: block;
1750
-  position: absolute;
1751
-  top: 0;
1752
-  left: 0;
1753
-  width: 100%;
1754
-  height: 100%;
1755
-  background-color: #000000;
1756
-  opacity: 0.09;
1757
-  z-index: 5050;
1758
-}
1759
-
1760
-#disNameWindow {
1761
-  display: block;
1762
-  position: absolute;
1763
-  width: 320px;
1764
-  height: 304px;
1765
-  white-space: pre-wrap;
1766
-  border-radius: 6px;
1767
-  background-color: #ffffff;
1768
-  box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
1769
-   -webkit-box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
1770
-   -moz-box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
1771
-  z-index: 5100;
1772
-}
1773
-
1774
-#closeDisNmWindow {
1775
-  display: block;
1776
-  position: absolute;
1777
-  width: 18px !important;
1778
-  height: 18px !important;
1779
-  right: 8px;
1780
-  top: 8px;
1781
-  padding: 0;
1782
-}
1783
-
1784
-#closeFrmMsgWindow {
1785
-  display: block;
1786
-  position: absolute;
1787
-  width: 18px !important;
1788
-  height: 18px !important;
1789
-  right: 8px;
1790
-  top: 8px;
1791
-  padding: 0;
1792
-}
1793
-
1794
-#saveDispName, #sendMsgToNmb {
1795
-  display: block;
1796
-  border-radius: 20px !important;
1797
-  padding: 0px 14px !important;
1798
-  margin: 10px auto !important;
1799
-  color: #ffffff !important;
1800
-  background-color: #40c1a3 !important;
1801
-}
1802
-
1803
-#saveDispName:hover, #sendMsgToNmb:hover {
1804
-  background-color:  #3bb397 !important;
1805
-}
1806
-
1807
-#saveDispName:active, #sendMsgToNmb:active {
1808
-  background-color: #33a087 !important;
1809
-}
1810
-
1811
-#listAllMsgsFromTo {
1812
-  display: block;
1813
-  position: absolute;
1814
-  width: 600px;
1815
-  height: 512px;
1816
-  white-space: pre-wrap;
1817
-  border-radius: 6px;
1818
-  background-color: #ffffff;
1819
-  box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
1820
-  -webkit-box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
1821
-  -moz-box-shadow: 0 0 23px rgba(0, 0, 0, 0.23);
1822
-  z-index: 5100;
1823
-}
1824
-
1825
-#dragDispNmWindow {
1826
-  display: block;
1827
-  position: relative;
1828
-  width: 40px;
1829
-  height: 20px;
1830
-  margin:-3px auto 0px auto;
1831
-  cursor: grab;
1832
-  text-align: center;
1833
-}
1834
-
1835
-#draglstMsgmWindow {
1836
-  display: block;
1837
-  position: relative;
1838
-  width: 500px;
1839
-  height: 20px;
1840
-  margin:-3px auto 0px auto;
1841
-  cursor: grab;
1842
-  text-align: center;
1843
-}
1844
-
1845
-#draglstMsgmWindowsc {
1846
-  display: block;
1847
-  position: relative;
1848
-  width: 500px;
1849
-  height: 20px;
1850
-  margin:-14px auto 0px auto;
1851
-  cursor: grab;
1852
-  text-align: center;
1853
-}
1854
-
1855
-#frmMsgLstWrap {
1856
-  display: block;
1857
-  position: relative;
1858
-  width: 560px;
1859
-  height: 400px;
1860
-  margin: 0 auto;
1861
-  overflow-y: auto;
1862
-  overflow-x: hidden;
1863
-}
1864
-
1865
-#frmMsgLstTbl {
1866
-  display: block;
1867
-  position: relative;
1868
-  width: 100%;
1869
-  height: 100%;
1870
-}
1871
-
1872
-#frmMsgLstTbl td {
1873
-  text-align: left;
1874
-  vertical-align: top;
1875
-}
1876
-
1877
-.groupedLstNamespn {
1878
-  display: block;
1879
-  position: fixed;
1880
-  width: 130px;
1881
-  padding: 0px 0px 0px 4px;
1882
-  overflow: scroll;
1883
-  white-space: pre-wrap;
1884
-}
1885
-
1886
-#msgListRowCell {
1887
-  display: block;
1888
-  width: 428px;
1889
-  height: auto;
1890
-  margin: 0px 0px 0px 130px;
1891
-  padding: 0px 0px 0px 4px;
1892
-  overflow: scroll;
1893
-  white-space: nowrap;
1894
-}
1895
-
1896
-.dispNameListAll {
1897
-  display: block;
1898
-  width: 100%;
1899
-  height: auto;
1900
-  border: 1px solid #c6cedb;
1901
-  border-radius: 20px;
1902
-  margin: 6px 0px 0px 0px;
1903
-  color: #04957b;
1904
-  font-size: 13px;
1905
-  padding: 0px 9px;
1906
-  text-align: center;
1907
-  font-weight: 500;
1908
-  cursor: pointer;
1909
-}
1910
-
1911
-
1912
-#selectAllChckbx:hover {
1913
-  cursor: pointer;
1914
-}
1915
-
1916
-.indivchckbx:hover {
1917
-  cursor: pointer;
1918
-}
1919
-
1920
-.selectsmsdv {
1921
-  width: 30px;
1922
-  padding: 5px 5px 5px 7px;
1923
-  text-align: center;
1924
-}
1925
-
1926
-#selectalldv {
1927
-  width: 30px;
1928
-  padding: 5px 5px 5px 7px;
1929
-}
1930
-
1931
-.indivfilter {
1932
-  height: 30px;
1933
-  font-weight: bold;
1934
-  padding: 0px;
1935
-}
1936
-
1937
-.selectalldvfilter {
1938
-  border: 1px solid #f3f3f3;
1939
-  padding: 3px;
1940
-  margin: 0px; 
1941
-}
1942
-
1943
-.filterbuttonsrec, .filterbuttonsent {
1944
-  display: block;
1945
-  position: relative;
1946
-  margin: 5px auto !important;
1947
-  border-radius: 3px !important;
1948
-  background-color: #ffffff !important;
1949
-  background-image: url('../img/filter_icon.svg');
1950
-  background-repeat: no-repeat;
1951
-  background-position: center center;
1952
-  cursor: pointer;
1953
-}
1954
-
1955
-#clearrecfilters, #clearsentfilters, #cleargrpfilter {
1956
-  display: inline-block;
1957
-  width: 22px;
1958
-  height: 22px;
1959
-  background-color: #ffffff;
1960
-  background-image: url('../img/clearfilters.svg');
1961
-  background-repeat: no-repeat;
1962
-  background-position: center center;
1963
-  margin: 0px 0px 8px 0px;
1964
-  border: none;
1965
-  cursor: pointer;
1966
-}
1967
-
1968
-#deleterecrows, #deletesentrows {
1969
-  display: inline-block;
1970
-  width: 16px;
1971
-  height: 20px;
1972
-  background-color: #ffffff;
1973
-  background-image: url('../img/garbage.svg');
1974
-  background-repeat: no-repeat;
1975
-  background-position: center center;
1976
-  margin: 0px 0px 4px 0px;
1977
-  border: none;
1978
-  cursor: pointer;
1979
-}
1980
-
1981
-#deleterecrows:active, #deletesentrows:active {
1982
-  background-image: url('../img/garbage_bright.svg');
1983
-}
1984
-
1985
-#toptablerec, #toptablesent, #toptablegrp {
1986
-  display: block;
1987
-  position: sticky;
1988
-  top: 0px;
1989
-  height: 27px;
1990
-  width: 100%;
1991
-  z-index: 1001;
1992
-}
1993
-
1994
-.topbuttonandpage {
1995
-  display: block;
1996
-  position: relative;
1997
-  width: 100%;
1998
-  height: 27px;
1999
-  border-radius: 0px 24px 0px 0px;
2000
-  background: #FFFFFF;
2001
-  z-index: 1001;
2002
-}
2003
-
2004
-#paginationrec, #paginationsent, #paginationgrp {
2005
-   display: block;
2006
-   position: relative;
2007
-   float: right;
2008
-   width: auto;
2009
-   margin: -25px 14px 0px 0px;
2010
-   font-size: 16px;
2011
-   font-weight: bold;
2012
-   color: #0082C9;
2013
-   z-index: 1002;
2014
-}
2015
-
2016
-.arrowDownCl {
2017
-    background-image: url('../img/arrowDown.svg');
2018
-    background-repeat: no-repeat;
2019
-    background-position: center center;
2020
-    z-index: 1010;
2021
-}
2022
-
2023
-.arrowUpCl {
2024
-    background-image: url('../img/arrowUp.svg');
2025
-    background-repeat: no-repeat;
2026
-    background-position: center center;
2027
-    z-index: 1010;   
2028
-}
2029
-
2030
-@media (max-width: 1020px) {
2031
-  #recarrow, #sentarrow {
2032
-    display: block;
2033
-    position: relative;
2034
-    float: left;
2035
-    margin: 3.8px 0px 0px 50px;
2036
-    width: 17px;
2037
-    height: 17px;
2038
-    border: none;
2039
-    cursor: pointer;
2040
-  }
2041
-}
2042
-
2043
-@media (min-width: 1021px) {
2044
-  #recarrow, #sentarrow {
2045
-    display: block;
2046
-    position: relative;
2047
-    float: left;
2048
-    margin: 3.8px 0px 0px 5px;
2049
-    width: 17px;
2050
-    height: 17px;
2051
-    border: none;
2052
-    cursor: pointer;
2053
-  }
2054
-}
2055
-
2056
-#totalrecmessages, #totalsentmessages, #totalgrpmessages {
2057
-  display: block;
2058
-  position: relative;
2059
-  padding: 10px 0px 0px 0px;
2060
-  font-size: 14px;
2061
-  font-weight: bold;
2062
-  color: #4cbc86;
2063
-}
2064
-
2065
-.pagenumbers, .pagenumbersbottom, .pagenumbersrec, .pagenumbersbottomrec, .pagenumbersgrp {
2066
-  color: #0082C9;
2067
-}
2068
-
2069
-#dbidtextsent {
2070
-  display: block;
2071
-  margin: auto;
2072
-  width: 95%;
2073
-}
2074
-
2075
-#dbidtextrec {
2076
-  display: block;
2077
-  margin: auto;
2078
-  width: 95%;
2079
-}
2080
-
2081
-#useridtext {
2082
-  display: block;
2083
-  margin: auto;
2084
-  width: 95%;
2085
-}
2086
-
2087
-#useridtextrec {
2088
-  display: block;
2089
-  margin: auto;
2090
-  width: 95%;
2091
-}
2092
-
2093
-#messageidtext {
2094
-  display: block;
2095
-  margin: auto;
2096
-  width: 95%;
2097
-}
2098
-
2099
-#messageidtextrec {
2100
-  display: block;
2101
-  margin: auto;
2102
-  width: 95%;
2103
-}
2104
-
2105
-#datetext {
2106
-  display: block;
2107
-  margin: auto;
2108
-  width: 95px;
2109
-}
2110
-
2111
-#datetextrec {
2112
-  display: block;
2113
-  margin: auto;
2114
-  width: 95%;
2115
-}
2116
-
2117
-#fromtext {
2118
-  display: block;
2119
-  margin: auto;
2120
-  width: 95%;
2121
-}
2122
-
2123
-#fromtextrec {
2124
-  display: block;
2125
-  margin: auto;
2126
-  width: 95%;
2127
-}
2128
-
2129
-#totext {
2130
-  display: block;
2131
-  margin: auto;
2132
-  width: 95%;
2133
-}
2134
-
2135
-#totextrec {
2136
-  display: block;
2137
-  margin: auto;
2138
-  width: 95%;
2139
-}
2140
-
2141
-#networktext {
2142
-  display: block;
2143
-  margin: auto;
2144
-  width: 95%;
2145
-}
2146
-
2147
-#pricetext {
2148
-  display: block;
2149
-  margin: auto;
2150
-  width: 95%;
2151
-}
2152
-
2153
-#statustext {
2154
-  display: block;
2155
-  margin: auto;
2156
-  width: 95%;
2157
-}
2158
-
2159
-#deliveryrcpttext {
2160
-  display: block;
2161
-  margin: auto;
2162
-  width: 95%;
2163
-}
2164
-
2165
-#messagetext {
2166
-  display: block;
2167
-  margin: auto;
2168
-  width: 95%;
2169
-}
2170
-
2171
-#messagetextrec {
2172
-  display: block;
2173
-  margin: auto;
2174
-  width: 95%;
2175
-}
2176
-
2177
-#databaseidfilter {
2178
-  display: block;
2179
-  margin-left: auto;
2180
-  margin-right: auto;
2181
-}
2182
-
2183
-#sentstatuscolumn {
2184
-  max-width: 160px;
2185
-}
2186
-
2187
-.useridcolrec {
2188
-  width: 124px;
2189
-  background-color: #ffffff;
2190
-  text-align: center;
2191
-}
2192
-
2193
-.messageidcolsent {
2194
-  overflow: visible;
2195
-  word-break: break-all;
2196
-  text-align: center;
2197
-}
2198
-
2199
-.messageidcolrec {
2200
-  overflow: visible;
2201
-  word-break: break-all;
2202
-  width: 420px;
2203
-  text-align: center;
2204
-}
2205
-
2206
-.datecolrec {
2207
-  width: 160px;
2208
-  text-align: center;
2209
-}
2210
-
2211
-.fromcolumnrec {
2212
-  width: 140px;
2213
-  text-align: center;
2214
-  background-color: #f2fff5;
2215
-}
2216
-
2217
-.tocolrec {
2218
-  width: 140px;
2219
-  background-color: #f2fbff;
2220
-  text-align: center;
2221
-}
2222
-
2223
-.networkcolumnsent {
2224
-  max-width: 90px;
2225
-  background-color: #ffffff;
2226
-  word-break: break-word;
2227
-  text-align: center;
2228
-}
2229
-
2230
-.useridcolsent, .pricecolumnsent, .statuscolumnsent, .deliveryrcptcolsent {
2231
-  background-color: #ffffff;
2232
-  text-align: center;
2233
-}
2234
-
2235
-.tocolumnsent {
2236
-  background-color: #f2fbff;
2237
-  text-align: center;
2238
-}
2239
-
2240
-.fromcolumnsent {
2241
-  background-color: #f2fff5;
2242
-  text-align: center;
2243
-}
2244
-
2245
-.active {
2246
-  color: #c62b71;
2247
-}
2248
-
2249
-#deleteoldmssgs {
2250
-  display: inline-block;
2251
-  position: relative;
2252
-  margin: 10px 0px 10px 1px;
2253
-  font-size: 16px;
2254
-  font-weight: bold;
2255
-}
2256
-
2257
-#deleteoldsms {
2258
-  display: none;
2259
-  background: #e8f6ff;
2260
-  border-radius: 6px;
2261
-  padding: 5px;
2262
-}
2263
-
2264
-#delOldrecSMS, #delOldsentSMS {
2265
-  display: block;
2266
-  background-color: #0082C9;
2267
-  color: #ffffff;
2268
-  margin: 10px 0px 10px 5px;
2269
-  border-radius: 20px;  
2270
-}
2271
-
2272
-#delOldrecSMS:active, #delOldsentSMS:active {
2273
-  background: #00a2f9;
2274
-}
2275
-
2276
-#delsetrows {
2277
-  display: block;
2278
-  padding: 5px;
2279
-}
2280
-
2281
-.deletesmsolder {
2282
-  display: inline;
2283
-  font-size: 16px;
2284
-  font-weight: bold;
2285
-}
2286
-
2287
-#oldrecSmsInterval, #oldsentSmsInterval {
2288
-  display: inline;
2289
-  width: 60px;
2290
-  height: 25px;
2291
-  padding: 0px 0px 0px 10px;
2292
-  font-size: 14px;
2293
-  font-weight: bold;
2294
-  border-radius: 20px;
2295
-}
2296
-
2297
-#upArrow {
2298
-  background-image: url("../img/arrow-top.svg");
2299
-  background-repeat: no-repeat;
2300
-  background-color: transparent !important;
2301
-  opacity: 0.30;
2302
-  position: fixed;
2303
-  bottom: 40px;
2304
-  right: 4px;
2305
-  width: 50px;
2306
-  height: 50px;
2307
-  border: none;
2308
-  cursor: pointer;
2309
-  display: none;
2310
-  z-index: 1010;
2311
-}
2312
-
2313
-#upArrow:hover {
2314
-  opacity: 1;
2315
-}
2316
-
2317
-#arrowupWrap {
2318
-  display: block;
2319
-  position: sticky;
2320
-  width: 20px;
2321
-  height: 20px;
2322
-  bottom: 14px;
2323
-  left: 530px;
2324
-}
2325
-
2326
-#upArrowSmall {
2327
-  background-image: url("../img/arrow-top-small.svg");
2328
-  background-repeat: no-repeat;
2329
-  background-color: transparent !important;
2330
-  width: 21px;
2331
-  height: 21px;
2332
-  opacity: 0.30;
2333
-  border: none;
2334
-  cursor: pointer;
2335
-  display: none;
2336
-  z-index: 5300;
2337
-}
2338
-
2339
-#upArrowSmall:hover {
2340
-  opacity: 1;
2341
-}
2342
-
2343
-.opensmsfolder {
2344
-  display: block;
2345
-  position: relative;
2346
-  margin: 10px 0px 10px 0px !important;
2347
-  padding: 7px 0px 7px 0px;
2348
-  width: 100% !important;
2349
-  color: #FFFFFF !important;
2350
-  font-size: 15px !important;
2351
-  background-color: #CB99C5 !important;
2352
-}
2353
-
2354
-.opensmsfolder:hover {
2355
-  border: 2px;
2356
-  background-color: #c18bba !important;
2357
-}
2358
-
2359
-.opensmsfolder:active {
2360
-  background-color: #b777af !important;
2361
-  border: 2px;
2362
-  color: #FFFFFF !important;
2363
-  border-color: #b777af;
2364
-}
2365
-
2366
-.opensmsfolder:focus {
2367
-  background-color: #a3669b !important;
2368
-  border: 2px;
2369
-  border-color: #a3669b;
2370
-}
2371
-
2372
-#save_sms_settings {
2373
-  display: inline-block;
2374
-  border-radius: 8px !important;
2375
-  padding: 0px 14px !important;
2376
-  color: #ffffff !important;
2377
-  background-color: #1e89c2 !important;
2378
-}
2379
-
2380
-#save_sms_settings:hover {
2381
-  background-color: #0369a0 !important;
2382
-}
2383
-
2384
-#save_sms_settings:active {
2385
-  background-color: #025480 !important;
2386
-}
2387
-
2388
-/* Changes for dark themes */
2389
-[data-theme-dark] .srheader,
2390
-[data-theme-dark-highcontrast] .srheader {
2391
-  display: block;
2392
-  position: relative;
2393
-  margin: 0px 0px 7px 0px;
2394
-  color: #fafafa;
2395
-  font-size: 17px;
2396
-  font-weight: bold;
2397
-}
2398
-
2399
-[data-theme-dark] #sendtomultiple,
2400
-[data-theme-dark-highcontrast] #sendtomultiple {
2401
-  display: inline-block;
2402
-  position: relative;
2403
-  margin: 10px 0px 12px 0px;
2404
-  color: #fafafa;
2405
-  font-size: 16px;
2406
-  font-weight: bold;
2407
-}
2408
-
2409
-[data-theme-dark] #entermessage,
2410
-[data-theme-dark-highcontrast] #entermessage {
2411
-  display: block;
2412
-  position: relative;
2413
-  margin: 10px 0px 0px 0px;
2414
-  color: #fafafa;
2415
-  font-size: 16px;
2416
-  font-weight: bold;
2417
-}
2418
-
2419
-[data-theme-dark] #sendmediafl,
2420
-[data-theme-dark-highcontrast] #sendmediafl {
2421
-  display: block;
2422
-  position: relative;
2423
-  margin: 0px 0px 20px 0px;
2424
-  color: #fafafa;
2425
-  font-size: 16px;
2426
-  font-weight: bold;
2427
-}
2428
-
2429
-[data-theme-dark] #deleteoldmssgs,
2430
-[data-theme-dark-highcontrast] #deleteoldmssgs {
2431
-  display: inline-block;
2432
-  position: relative;
2433
-  margin: 10px 0px 10px 1px;
2434
-  color: #fafafa;
2435
-  font-size: 16px;
2436
-  font-weight: bold;
2437
-}
2438
-
2439
-[data-theme-dark] #smsto,
2440
-[data-theme-dark-highcontrast] #smsto {
2441
-  display: block;
2442
-  width: 99%;
2443
-  max-height: 32px;
2444
-  padding: 0px 15px 0px 15px;
2445
-  color: #fafafa;
2446
-  font-size: 16px;
2447
-  font-weight: bold;
2448
-  border-radius: 20px;
2449
-}
2450
-
2451
-[data-theme-dark] #smstext,
2452
-[data-theme-dark-highcontrast] #smstext {
2453
-  display: inline-block;
2454
-  color: #fafafa;
2455
-  width: 100%;
2456
-  height: 130px;
2457
-  text-align: left;
2458
-  font-size: 16px;
2459
-  border-radius: 6px;
2460
-  resize: vertical;
2461
-  white-space: pre-wrap;
2462
-}
2463
-
2464
-
2465
-[data-theme-dark] .arplText,
2466
-[data-theme-dark-highcontrast] .arplText {
2467
-  display: inline-block;
2468
-  color: #fafafa;
2469
-  width: 330px;
2470
-  height: 184px;
2471
-  font-size: 15px;
2472
-  text-align: left;
2473
-  border: 1px solid #000;
2474
-  border-radius: 6px;
2475
-  margin: 0px 1px 0px 0px;
2476
-  resize: vertical;
2477
-  white-space: pre-wrap;
2478
-  overflow: auto;
2479
-}
2480
-
2481
-[data-theme-dark] .tooltipbalanceid #infobalance,
2482
-[data-theme-dark-highcontrast] .tooltipbalanceid #infobalance {
2483
-  display: block;
2484
-  position: relative;
2485
-  margin: 4px 14px 0px 0px;
2486
-  color: #fafafa;
2487
-  font-size: 21px;
2488
-  font-weight: bold;
2489
-//  font-family: Times New Roman;
2490
-  font-family: 'Liberation Serif', sans-serif;
2491
-  font-style: italic;
2492
-  z-index: 6;
2493
-}
2494
-
2495
-[data-theme-dark] #infotipid,
2496
-[data-theme-dark-highcontrast] #infotipid {
2497
-  display: block;
2498
-  position: relative;
2499
-  margin: 4px 10px 0px 0px;
2500
-  color: #fafafa;
2501
-  font-size: 21px;
2502
-  font-weight: bold;
2503
-  font-family: 'Liberation Serif', sans-serif;
2504
-  font-style: italic;
2505
-  z-index: 5;
2506
-}
2507
-
2508
-[data-theme-dark] .fortooltip .texttooltip, [data-theme-dark] .maxmessagelength .texttooltip,
2509
-[data-theme-dark-highcontrast] .fortooltip .texttooltip, [data-theme-dark-highcontrast] .maxmessagelength .texttooltip {
2510
-  font-family: 'Liberation Serif', Calibri, sans-serif;
2511
-  font-style: italic;
2512
-  color: #fafafa;
2513
-  font-size: 21px;
2514
-  font-weight: bold;
2515
-  margin: 0px 0px 4px 4px;
2516
-}
2517
-
2518
-[data-theme-dark] #uploadfileforsms,
2519
-[data-theme-dark-highcontrast] #uploadfileforsms {
2520
-  margin-left: 7px;
2521
-  background-color: #434343;
2522
-  border-radius: 3px !important;
2523
-}
2524
-
2525
-[data-theme-dark] #uploadfileformms,
2526
-[data-theme-dark-highcontrast] #uploadfileformms {
2527
-  margin-left: 21px;
2528
-  background-color: #434343;
2529
-  border-radius: 3px !important;
2530
-}
2531
-
2532
-[data-theme-dark] .smsnbformat a,
2533
-[data-theme-dark-highcontrast] .smsnbformat a {
2534
-  color: #cedfff !important;
2535
-}
2536
-
2537
-[data-theme-dark] .smsnbformat font,
2538
-[data-theme-dark-highcontrast] .smsnbformat font {
2539
-  color: #f7547a !important;
2540
-}
2541
-
2542
-[data-theme-dark] .indivfiltersent, [data-theme-dark] .indivfilterrec,
2543
-[data-theme-dark-highcontrast] .indivfiltersent, [data-theme-dark-highcontrast] .indivfilterrec {
2544
-  color: #fafafa !important;
2545
-}
2546
-
2547
-[data-theme-dark] #recSmsTable, [data-theme-dark] #groupedSmsTable, [data-theme-dark] #sentSmsTable,
2548
-[data-theme-dark-highcontrast] #recSmsTable, [data-theme-dark-highcontrast] #groupedSmsTable, [data-theme-dark-highcontrast] #sentSmsTable {
2549
-  color: #272727 !important;
2550
-}
2551
-
2552
-[data-theme-dark] .providerSettings .setlabeltext,
2553
-[data-theme-dark-highcontrast] .providerSettings .setlabeltext {
2554
-  color: #272727;
2555
-}
2556
-
2557
-[data-theme-dark] .providerName,
2558
-[data-theme-dark-highcontrast] .providerName  {
2559
-   font-size: 18px;
2560
-   font-weight: bold;
2561
-   margin-bottom: 20px;
2562
-   color: #272727;
2563
-}
2564
-
2565
-[data-theme-dark] #closeFrmMsgWindow,
2566
-[data-theme-dark-highcontrast] #closeFrmMsgWindow,
2567
-[data-theme-dark] #closeDisNmWindow,
2568
-[data-theme-dark-highcontrast] #closeDisNmWindow {
2569
-   background-color: #353535;
2570
-}
2571
-
2572
-[data-theme-dark] #infoautoreply, [data-theme-dark] #infoautoreplyst, [data-theme-dark] #infoautoreplypn,
2573
-[data-theme-dark-highcontrast] #infoautoreply, [data-theme-dark-highcontrast] #infoautoreplyst, [data-theme-dark-highcontrast] #infoautoreplypn {
2574
-   color: #ffffff;
2575
-}
2576 0
\ No newline at end of file
2577 1
deleted file mode 100644
... ...
@@ -1 +0,0 @@
1
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" viewbox="0 0 16 16"><path d="m14 12.3-1.7 1.7-4.3-4.3-4.3 4.3-1.7-1.7 4.3-4.3-4.3-4.3 1.7-1.7 4.3 4.3 4.3-4.3 1.7 1.7-4.3 4.3z"/></svg>
2 0
deleted file mode 100644
... ...
@@ -1,41 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
-<svg
3
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
4
-   xmlns:cc="http://creativecommons.org/ns#"
5
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
6
-   xmlns:svg="http://www.w3.org/2000/svg"
7
-   xmlns="http://www.w3.org/2000/svg"
8
-   version="1.1"
9
-   viewbox="0 0 16 16"
10
-   width="13"
11
-   height="13"
12
-   id="svg4">
13
-  <metadata
14
-     id="metadata10">
15
-    <rdf:RDF>
16
-      <cc:Work
17
-         rdf:about="">
18
-        <dc:format>image/svg+xml</dc:format>
19
-        <dc:type
20
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
21
-        <dc:title></dc:title>
22
-      </cc:Work>
23
-    </rdf:RDF>
24
-  </metadata>
25
-  <defs
26
-     id="defs8" />
27
-  <path
28
-     id="path2"
29
-     style="fill:#a73434;fill-opacity:1"
30
-     d="M 3.515625,0 0,3.515625 v 4.96875 L 3.515625,12 h 4.96875 L 12,8.484375 V 3.515625 L 8.484375,0 Z" />
31
-  <g
32
-     aria-label="?"
33
-     id="text837"
34
-     style="font-weight:bold;font-size:11.9293px;line-height:1.25;font-family:Inter;-inkscape-font-specification:'Inter, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#ffffff;stroke-width:0.639071"
35
-     transform="matrix(0.91577887,0,0,0.91577887,9.804785,-0.9430916)">
36
-    <path
37
-       d="M -5.1904634,9.3227261 V 9.1786934 q 0.00424,-0.741345 0.131324,-1.1819158 0.131324,-0.4405707 0.3770269,-0.7074549 0.2499392,-0.2711205 0.6057848,-0.4956421 0.3897356,-0.2499392 0.6566198,-0.5422409 0.2668842,-0.296538 0.2668842,-0.7116912 0,-0.4405708 -0.3050105,-0.7032187 -0.3007742,-0.2668842 -0.7286362,-0.2668842 -0.4151532,0 -0.7455813,0.2711204 -0.3261918,0.2711205 -0.3473731,0.7879439 h -1.7283929 q 0.021181,-0.8472515 0.4066807,-1.4022012 0.3854994,-0.5549497 1.020938,-0.8260701 0.6354385,-0.2711205 1.4022011,-0.2711205 0.8430152,0 1.4911625,0.279593 0.6481474,0.2753567 1.0167018,0.8006526 0.3685543,0.5252959 0.3685543,1.2666409 0,0.7455813 -0.3600818,1.2412234 -0.3558456,0.4956421 -0.9489216,0.8472514 -0.4998784,0.3007743 -0.7328725,0.6481474 -0.2329942,0.347373 -0.2414667,0.9658666 v 0.1440327 z m 0.8345427,2.7112049 q -0.4193895,0 -0.7201637,-0.296538 -0.3007743,-0.296538 -0.296538,-0.720164 -0.00424,-0.415153 0.296538,-0.711691 0.3007742,-0.296538 0.7201637,-0.296538 0.4066807,0 0.707455,0.296538 0.3050105,0.296538 0.3092467,0.711691 -0.00424,0.423626 -0.3092467,0.720164 -0.3007743,0.296538 -0.707455,0.296538 z"
38
-       style="fill:#ffffff;stroke-width:0.639071"
39
-       id="path839" />
40
-  </g>
41
-</svg>
42 0
deleted file mode 100644
... ...
@@ -1 +0,0 @@
1
-<svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 16 16" height="16" width="16" version="1.1"><path d="m5 3.8c0 1.4 0.1 2.4 0.8 3.5 0.2 0.286 0.5 0.35 0.7 0.6 0.135 0.5 0.24 0.98 0.1 1.5-1.275 0.45-2.49 1-3.6 1.6-0.85 0.6-0.785 0.31-1 2.3-0.16 1.59 3.5 1.7 6 1.7s6.163-0.1 6-1.7c-0.215-2-0.23-1.71-1-2.3-1.1-0.654-2.45-1.167-3.6-1.6-0.15-0.56-0.04-0.973 0.1-1.5 0.235-0.25 0.5-0.363 0.7-0.6 0.69-0.885 0.8-2.425 0.8-3.5 0-1.59-1.43-2.8-3-2.8-1.75 0-3 1.43-3 2.8z"/></svg>
2 0
deleted file mode 100644
... ...
@@ -1,378 +0,0 @@
1
-/**
2
- * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
3
- *
4
- * @author Double Bastion LLC
5
- *
6
- * @license GNU AGPL version 3 or any later version
7
- *
8
- * This program is free software; you can redistribute it and/or
9
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
10
- * License as published by the Free Software Foundation; either
11
- * version 3 of the License, or any later version.
12
- *
13
- * This program is distributed in the hope that it will be useful,
14
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
17
- *
18
- * You should have received a copy of the GNU Affero General Public
19
- * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
- *
21
- */
22
-
23
-$(document).ready(function() {
24
-
25
-  var userid = "<?php p($userId); ?>";
26
-  var baseUrlget = OC.generateUrl('/apps/sms_relentless/user/getadminsettings');
27
-
28
-  $.ajax({
29
-     method: 'GET',
30
-     url: baseUrlget + '/' + userid,
31
-     contentType: 'application/json',
32
-     success: function(settingsadm) {
33
-
34
-          if (settingsadm.show_all_messages == 1) {
35
-              $("#showallmessages").attr("checked", true);
36
-          } else {
37
-              $("#showallmessages").attr("checked", false);
38
-          }
39
-
40
-          var crntadmDispName = settingsadm.admdisplayname;
41
-          var allRestrictions = settingsadm.restrictions;
42
-          var allGroups = settingsadm.allgroups;
43
-          var allUsers = settingsadm.allusers;
44
-
45
-          if (allRestrictions.length > 0) { 
46
-              var restrNmb = allRestrictions.length;
47
-          } else { 
48
-              var restrNmb = 0; 
49
-          }
50
-
51
-
52
-	  // List the access restrictions for groups and users
53
-          if (restrNmb == 0) {
54
-
55
-              $("#phoneNmbrRestr").append("<tr><td><input type='text' class='restrAuthor' value='"+ crntadmDispName +"' disabled></td><td><select id='rstphn-"+ restrNmb +"' class='restrPhoneNmbr'></select></td><td><div id='rstgrp-"+ restrNmb +"' class='restrGroups'></div></td><td><div id='showGrps-"+ restrNmb +"' class='showAllGroups'><img src='/apps/sms_relentless/img/group.svg' style='cursor:pointer' title='Show all groups'></div></td><td><div id='rstusr-"+ restrNmb +"' class='restrUsers'></div></td><td><div id='showUsr-"+ restrNmb +"' class='showAllUsers'><img src='/apps/sms_relentless/img/user.svg' style='cursor:pointer' title='Show all users'></div></td><td><img id='rmRow-"+ restrNmb +"' class='removeRow' src='/apps/sms_relentless/img/close.svg' title='Remove this row from the database' style='cursor:pointer;margin:6px 7px 0px 6px;'></td><td><input type='submit' id='rstsave-"+ restrNmb +"' class='saveRestrictions' value='Save' title='Save Row' /></td></tr>");
56
-	      $("#phoneNmbrRestr").append("<div><img id='addRestrRow' src='/apps/sms_relentless/img/add.svg' title='Add Row'></div>");
57
-
58
-          } else {
59
-
60
-	      for (k = 0; k < restrNmb; k++) {
61
-
62
-                   if (allRestrictions[k].groups) {
63
-                       var groupsfdbpre = allRestrictions[k].groups.split("|");
64
-                       var groupsfdb = "";
65
-                       for (var g = 0; g < groupsfdbpre.length; g++) {
66
-                            groupsfdb += "<div class='selectedGrps'>"+ groupsfdbpre[g] +"<img id='rmvGrp-"+ groupsfdbpre[g] +"' class='removeGroup' src='/apps/sms_relentless/img/close.svg' title='Remove this group'></div>";
67
-                       }
68
-                   } else { var groupsfdb = ""; }
69
-
70
-                   if (allRestrictions[k].users) {
71
-                       var usersfdbpre = allRestrictions[k].users.split("|");
72
-                       var usersfdb = "";
73
-                       for (var u = 0; u < usersfdbpre.length; u++) {
74
-                            usersfdb += "<div class='selectedUsrs'>"+ usersfdbpre[u] +"<img id='rmvUsr-"+ usersfdbpre[u] +"' class='removeUser' src='/apps/sms_relentless/img/close.svg' title='Remove this user'></div>";
75
-                       }
76
-                   } else { var usersfdb = ""; }
77
-
78
-		   $("#phoneNmbrRestr").append("<tr><td><input type='text' class='restrAuthor' value='"+ allRestrictions[k].saved_by_dsplname +"' disabled></td><td><select id='rstphn-"+ k +"' class='restrPhoneNmbr' style='pointer-events:none'><option selected>"+ allRestrictions[k].phone_number +"</option></select></td><td><div id='rstgrp-"+ k +"' class='restrGroups'>"+ groupsfdb +"</div></td><td><div id='showGrps-"+ k +"' class='showAllGroups'><img src='/apps/sms_relentless/img/group.svg' style='cursor:pointer' title='Show all groups'></div></td><td><div id='rstusr-"+ k +"' class='restrUsers'>"+ usersfdb +"</div></td><td><div id='showUsr-"+ k +"' class='showAllUsers'><img src='/apps/sms_relentless/img/user.svg' style='cursor:pointer' title='Show all users'></div></td><td><img id='rmRow-"+ k +"' class='removeRow' src='/apps/sms_relentless/img/close.svg' title='Remove this row from the database' style='cursor:pointer;margin:6px 7px 0px 6px;'></td><td><input type='submit' id='rstsave-"+ k +"' class='saveRestrictions' value='Edit' title='Edit Row' /></td></tr>");
79
-              }
80
-              $("#phoneNmbrRestr").append("<div><img id='addRestrRow' src='/apps/sms_relentless/img/add.svg' title='Add Row'></div>");
81
-          }
82
-
83
-
84
-          // Get the available phone numbers from all providers associated with the access keys entered on the Settings page
85
-          $("#phoneNumberTh").addClass('icon-loading');
86
-          var getnumbersUrl = OC.generateUrl("/apps/sms_relentless/user/getsmsnumbers");
87
-          var numbersListItems = '';
88
-
89
-	  $.ajax({
90
-		  url: getnumbersUrl + '/' + userid,
91
-		  type: "POST",
92
-		  cache: false,
93
-		  processData: false,
94
-		  contentType: false,
95
-		  success: function(currentnmbrs) {
96
-
97
-                                    $("#phoneNumberTh").removeClass('icon-loading');
98
-
99
-				    // Create a list with all the available phone numbers
100
-                                    numbersListItems = "<option value='' selected>Select phone number</option>";
101
-
102
-				    $.each(currentnmbrs, function(key, indsmsnmb) {
103
-					 var emptyinit = indsmsnmb.split(":");
104
-					 var emptysec = emptyinit[1];
105
-					 var emptycheck = emptysec.replace(" ", "").replace("+", "");
106
-
107
-					 if (emptycheck != '') {
108
-					     numbersListItems += "<option value='"+ indsmsnmb +"'>"+ indsmsnmb +"</option>";
109
-					 }
110
-				    });
111
-
112
-				    if (restrNmb == 0) { var indRow = 0; } else { var indRow = parseInt(restrNmb + 1); }
113
-
114
-				    // Append the list of available phone numbers
115
-				    $("#rstphn-"+ indRow).empty();
116
-				    $("#rstphn-"+ indRow).append(numbersListItems);
117
-        
118
-		  },
119
-		  error: function() {
120
-                                    $("#phoneNumberTh").removeClass('icon-loading'); 
121
-                                    alert("Error while attempting to retrieve the available phone numbers!");
122
-                  }
123
-          });
124
-
125
-
126
-          // Create a list with all the available groups
127
-          var grpsListItems = "";
128
-          $.each(allGroups, function(key, value) {
129
-                 grpsListItems += "<div class='groupsList'>"+ value.gid +"</div>";
130
-          });
131
-
132
-          // Create a list with all the available users
133
-          var usersListItems = "";
134
-          $.each(allUsers, function(key, usrval) {
135
-                 usersListItems += "<div class='usersList'>"+ usrval.value +"</div>";
136
-          });
137
-
138
-
139
-          function showLists() {
140
-
141
-              // Append the list of available groups
142
-              $('[id^="showGrps-"]').click(function() {
143
-                 var crtnmbr = $(this).attr("id").replace("showGrps-", "");
144
-                 $("#grpL-"+ crtnmbr).remove();
145
-                 $("#showGrps-"+ crtnmbr).append("<div id='grpL-"+ crtnmbr +"' class='grpsList'>"+ grpsListItems +"</div>");
146
-                 $("#adminOverlay").remove();
147
-                 $("#admin_conf").append("<div id='adminOverlay'></div>");
148
-
149
-                 $("#adminOverlay").click(function() { 
150
-                    $("#adminOverlay").remove(); 
151
-                    $("#grpL-"+ crtnmbr).remove(); 
152
-                    $("#usrL-"+ crtnmbr).remove();
153
-                 });
154
-
155
-                 // Select a group
156
-                 $(".groupsList").click(function() {
157
-                    var slctdGrp = $(this).text();
158
-                    $("#grpL-"+ crtnmbr).remove();
159
-                    var addedTxtgrp = $("#rstgrp-"+ crtnmbr).text();
160
-
161
-                    if (addedTxtgrp.indexOf(slctdGrp) == -1) {
162
-                        $("#rstgrp-"+ crtnmbr).append("<div class='selectedGrps'>"+ slctdGrp +"<img id='rmvGrp-"+ slctdGrp +"' class='removeGroup' src='/apps/sms_relentless/img/close.svg' title='Remove this group'></div>");
163
-                    } else { alert("That group has already been added!"); }
164
-
165
-                    // Remove a group from list
166
-                    $('[id^="rmvGrp-"]').click(function() {
167
-                       $(this).closest(".selectedGrps").remove();
168
-                    });
169
-                 });
170
-
171
-              });
172
-
173
-              // Append the list of available users
174
-              $('[id^="showUsr-"]').click(function() {
175
-
176
-                 var ctusrnmbr = $(this).attr("id").replace("showUsr-", "");
177
-                 $("#usrL-"+ ctusrnmbr).remove();
178
-                 $("#showUsr-"+ ctusrnmbr).append("<div id='usrL-"+ ctusrnmbr +"' class='usrsList'>"+ usersListItems +"</div>");
179
-                 $("#adminOverlay").remove();
180
-                 $("#admin_conf").append("<div id='adminOverlay'></div>");
181
-
182
-                 $("#adminOverlay").click(function() { 
183
-                    $("#adminOverlay").remove(); 
184
-                    $("#grpL-"+ ctusrnmbr).remove(); 
185
-                    $("#usrL-"+ ctusrnmbr).remove();
186
-                 });
187
-
188
-                 // Select a user
189
-                 $(".usersList").click(function() {
190
-                    var slctdUsr = $(this).text();
191
-                    var addedTxtusr = $("#rstusr-"+ ctusrnmbr).text();
192
-
193
-                    if (addedTxtusr.indexOf(slctdUsr) == -1) {
194
-                        $("#rstusr-"+ ctusrnmbr).append("<div class='selectedUsrs'>"+ slctdUsr +"<img id='rmvUsr-"+ slctdUsr +"' class='removeUser' src='/apps/sms_relentless/img/close.svg' title='Remove this user'></div>");
195
-                    } else { alert("That user has already been added!"); }
196
-
197
-                    // Remove a user from list
198
-                    $('[id^="rmvUsr-"]').click(function() {
199
-                       $(this).closest(".selectedUsrs").remove();
200
-                    });
201
-                 });
202
-
203
-              });
204
-
205
-              // Remove a group from list
206
-              $('[id^="rmvGrp-"]').click(function() {
207
-                 $(this).closest(".selectedGrps").remove();
208
-              });
209
-
210
-              // Remove a user from list
211
-              $('[id^="rmvUsr-"]').click(function() {
212
-                 $(this).closest(".selectedUsrs").remove();
213
-              });
214
-
215
-          }
216
-          showLists();
217
-
218
-
219
-          // Save the data
220
-          function saveRestrRow() {
221
-             $('[id^="rstsave-"]').unbind("click");
222
-             $('[id^="rstsave-"]').click(function(event) {
223
-
224
-                 event.preventDefault();
225
-                 var crntrwnmbr = $(this).attr("id").replace("rstsave-", "");
226
-
227
-                 if ($(this).attr("value") == "Save") {
228
-
229
-                     var phoneNmbr = $("#rstphn-"+ crntrwnmbr).val();
230
-                     var slctdGroups = [];
231
-                     $("#rstgrp-"+ crntrwnmbr +" .selectedGrps").each(function() {
232
-                        slctdGroups.push($(this).text());
233
-                     });
234
-                     var slctdUsers = [];
235
-                     $("#rstusr-"+ crntrwnmbr +" .selectedUsrs").each(function() {
236
-                        slctdUsers.push($(this).text());
237
-                     });
238
-
239
-                     if (phoneNmbr != '') {
240
-
241
-                       if (slctdGroups.length > 0 || slctdUsers.length > 0) {
242
-
243
-                         var saveRestrUrl = OC.generateUrl('/apps/sms_relentless/user/updatenumberrestrictions');
244
-                         var datatosend = { 
245
-                              userId: userid,
246
-                              savedByDsplname: crntadmDispName,
247
-                              phoneNumber: phoneNmbr,
248
-                              groups: slctdGroups,
249
-                              users: slctdUsers
250
-                         };
251
-
252
-	                 $.ajax({
253
-	                   method: 'PUT',
254
-	                   url: saveRestrUrl + '/' + userid,
255
-	                   contentType: 'application/json',
256
-	                   data: JSON.stringify(datatosend),
257
-                           success: function(messagetosend) {
258
-                                        if (messagetosend == 'success') {
259
-                                            alert('The restrictions have been successfully saved to the database!');
260
-                                        } else {
261
-                                            alert('Error while trying to save the restrictions!');
262
-                                        }
263
-                           },
264
-	                   error: function() {
265
-		                        alert('Error while attempting to save the restrictions! You can check the Nextcloud log to find more details about this issue.');
266
-	                   }
267
-	                 });
268
-
269
-                       } else { alert("You must select at least a group or a user in order to restrict the use of a phone number."); return; }
270
-
271
-                     } else { alert("Please select a phone number!"); return; }
272
-
273
-                     $(this).attr("value", "Edit");
274
-
275
-                } else {
276
-
277
-                     $("#rstsave-"+ crntrwnmbr).attr("value", "Save");
278
-                }
279
-
280
-             });
281
-          }
282
-          saveRestrRow();
283
-
284
-          // Remove a row
285
-          function removeRestrRow() {
286
-               $('[id^="rmRow-"]').click(function() {
287
-
288
-                  var slctRowRmv = $(this).attr("id").replace("rmRow-", "");
289
-                  var crntPhNmbr = $("#rstphn-"+ slctRowRmv).val();
290
-
291
-                  if (confirm("Do you really want to remove this row from the database ?")) {
292
-
293
-                      var rmvRestrUrl = OC.generateUrl('/apps/sms_relentless/user/removenumberrestrictions');
294
-                      $.ajax({
295
-                           url: rmvRestrUrl + '/' + userid,
296
-                           method: "POST",
297
-                           dataType: "text",
298
-                           data: { phoneNumber: crntPhNmbr },
299
-                           success: function(delresult) {
300
-
301
-                                             if (delresult.indexOf("success") > -1) {
302
-                                                 alert("The restriction has been removed successfully!");
303
-                                                 $("#rstphn-"+ slctRowRmv).closest("tr").remove();
304
-                                             } else {
305
-                                                 alert("Error while trying to remove restriction data!");
306
-                                             }
307
-                           },
308
-                           error: function() { alert("Error while attempting to remove restriction data! You can check the Nextcloud log to find more details about this issue."); }
309
-                       });
310
-                  }
311
-               });
312
-          }
313
-          removeRestrRow();
314
-
315
-          // Add a new row
316
-	  $("#addRestrRow").click(function() {
317
-              if ($("#phoneNmbrRestr").find("tr:last-child").find(".restrPhoneNmbr").length > 0) {
318
-                  var lastrstAuth = $("#phoneNmbrRestr").find("tr:last-child").find(".restrPhoneNmbr").attr("id").replace("rstphn-", "");
319
-                  var indRowAdd = parseInt(lastrstAuth + 1);
320
-              } else { var indRowAdd = 0; }
321
-	      $("#phoneNmbrRestr").append("<tr><td><input type='text' class='restrAuthor' value='"+ crntadmDispName +"' disabled></td><td><select id='rstphn-"+ indRowAdd +"' class='restrPhoneNmbr'>"+ numbersListItems +"</select></td><td><div id='rstgrp-"+ indRowAdd +"' class='restrGroups'></div></td><td><div id='showGrps-"+ indRowAdd +"' class='showAllGroups'><img src='/apps/sms_relentless/img/group.svg' style='cursor:pointer' title='Show all groups'></div></td><td><div id='rstusr-"+ indRowAdd +"' class='restrUsers'></div></td><td><div id='showUsr-"+ indRowAdd +"' class='showAllUsers'><img src='/apps/sms_relentless/img/user.svg' style='cursor:pointer' title='Show all users'></div></td><td><img id='rmRow-"+ indRowAdd +"' class='removeRow' src='/apps/sms_relentless/img/close.svg' title='Remove this row from the database' style='cursor:pointer;margin:6px 7px 0px 6px;'></td><td><input type='submit' id='rstsave-"+ indRowAdd +"' class='saveRestrictions' value='Save' title='Save Row' /></td></tr>");
322
-              showLists();
323
-              saveRestrRow();
324
-              removeRestrRow();
325
-
326
-              // Check if the same phone number has been already restricted
327
-              $("#rstphn-"+ indRowAdd).change(function() {
328
-                 var selectedPhNmbr = $("#rstphn-"+ indRowAdd).val();
329
-                 var allPHoneRestr = $("#phoneNmbrRestr").find("tr").find(".restrPhoneNmbr");
330
-                 var phNmbrChck = 0;
331
-                 allPHoneRestr.each(function() {
332
-                    var slctdphnmbr = ($(this).val())? $(this).val() : $(this).text();
333
-                    if (selectedPhNmbr == slctdphnmbr) { phNmbrChck++; }
334
-                 });
335
-
336
-                 if (phNmbrChck == 2) {
337
-                     alert("This phone number is already in the list of restricted phone numbers. Please edit its own row, or choose a different phone number to restrict.");
338
-                     $(this).val('');
339
-                     return;
340
-                 }
341
-              });
342
-	  });
343
-
344
-     },
345
-     error: function() {
346
-                alert('Error while getting the admin settings! You can check the Nextcloud log to find more details about this issue.');
347
-     }
348
-  });
349
-
350
-
351
-  $("#save_admin_settings").on("click", function(event) {
352
-
353
-    event.preventDefault();
354
-    OC.msg.startAction('#smsr_save_msg', t('sms_relentless', 'Saved'));
355
-
356
-    var baseUrl = OC.generateUrl('/apps/sms_relentless/user/updateadminsettings');
357
-
358
-    var showallmsgs = 0;
359
-    if ($("#showallmessages").is(':checked')) {
360
-        showallmsgs = 1;
361
-    }
362
-
363
-    var datatosave = {
364
-                      userId: userid,
365
-                      showAllMessages: showallmsgs
366
-    };
367
-
368
-    $.ajax({
369
-       method: 'PUT',
370
-       url: baseUrl + '/' + userid,
371
-       contentType: 'application/json',
372
-       data: JSON.stringify(datatosave),
373
-       error: function(resp) {
374
-                 alert('Error while attempting to save the settings! You can check the Nextcloud log to find more details about this issue.');
375
-       }
376
-    });
377
-  });
378
-});
379 0
deleted file mode 100644
... ...
@@ -1,250 +0,0 @@
1
-/**
2
- * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
3
- *
4
- * @author Double Bastion LLC
5
- *
6
- * @license GNU AGPL version 3 or any later version
7
- *
8
- * This program is free software; you can redistribute it and/or
9
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
10
- * License as published by the Free Software Foundation; either
11
- * version 3 of the License, or any later version.
12
- *
13
- * This program is distributed in the hope that it will be useful,
14
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
17
- *
18
- * You should have received a copy of the GNU Affero General Public
19
- * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
- *
21
- */
22
-
23
-$(document).ready(function() {
24
-
25
-    var userid = "<?php p($userId); ?>";
26
-
27
-    // Delete from the database all the received messages older than the specified period
28
-    $("#delOldrecSMS").on("click", function() {
29
-
30
-      var oldrecInterval = $("#oldrecSmsInterval").val();
31
-      var procoldrecint = oldrecInterval.replace(/[^0-9]/g, "");
32
-      var finaloldrecint = parseInt(procoldrecint);
33
-
34
-      if (finaloldrecint == "" || !$.isNumeric(finaloldrecint)) {
35
-          alert("Please enter the number of days in the box from above !");
36
-      } else {
37
-
38
-         var getRecUrl = OC.generateUrl("/apps/sms_relentless/user/getreceivedtablefordel");
39
-         $('#smstables').addClass('icon-loading');
40
-
41
-         $.ajax({
42
-             url: getRecUrl + '/' + userid,
43
-             method: "GET",
44
-             dataType:'text',
45
-             success: function(recinfoFromDB) {
46
-
47
-                var parsedinfo = $.parseJSON(recinfoFromDB);
48
-
49
-                if (parsedinfo == "not permitted") {
50
-
51
-                    alert("Only admins can remove old messages using this option!");
52
-                    $('#smstables').removeClass('icon-loading');
53
-                    return;
54
-
55
-                } else {
56
-
57
-                    var recmessagedbIDs = [];
58
-                    var oldrecRows = [];
59
-                    oldrecRows.push("id,user_id,message_id,date,from,to,message\r\n");
60
-
61
-                    var targetdate = new Date(new Date().setDate(new Date().getDate() - finaloldrecint));
62
-
63
-                    for (var j = 0; j < parsedinfo.length; j++) {
64
-                         var firstdate = parsedinfo[j].date;
65
-                         var secdate = firstdate.split(" ");
66
-                         var thirddate = secdate[0].split("-");
67
-                         var fourthdate = secdate[1].split(":");
68
-                         var pastdate = new Date(thirddate[0],(thirddate[1]-1),thirddate[2],fourthdate[0],fourthdate[1],fourthdate[2]);
69
-
70
-                         if (pastdate < targetdate) {
71
-                             recmessagedbIDs.push(parsedinfo[j].id);
72
-                             oldrecRows.push(parsedinfo[j].id + "," + parsedinfo[j].user_id + "," + parsedinfo[j].message_id + "," + parsedinfo[j].date + "," + parsedinfo[j].from + "," + parsedinfo[j].to + "," + parsedinfo[j].message + "\r\n");
73
-                         }
74
-                    }
75
-
76
-
77
-                    if (oldrecRows.length == 1) {
78
-
79
-                        alert("No messages will be deleted since there are no messages older than " + finaloldrecint + " days.");
80
-
81
-                    // Save in a '.csv' file all the received messages that will be deleted from the database, then delete them
82
-                    } else {
83
-
84
-                        if (confirm("Are you sure you want to delete all the received messages older than " + finaloldrecint + " days ?")) {
85
-
86
-                            var deloldrecRowsUrl = OC.generateUrl("/apps/sms_relentless/user/saveoldrecrows");
87
-
88
-                            $.ajax({
89
-                                url: deloldrecRowsUrl + '/' + userid,
90
-                                method: "POST",
91
-                                dataType:'text',
92
-                                data: { oldrecRows: oldrecRows },
93
-                                success: function(savecheck) {
94
-
95
-                                            // Delete received messages from the database
96
-                                            var delrecDbSmsUrl = OC.generateUrl("/apps/sms_relentless/user/removerecrows");
97
-
98
-                                            if (savecheck == 1) {
99
-
100
-                                                $.ajax({
101
-                                                       url: delrecDbSmsUrl + '/' + userid,
102
-                                                       method: "POST",
103
-                                                       dataType:'text',
104
-                                                       data: {recmessagedbIDs: recmessagedbIDs},
105
-                                                       success: function() {
106
-                                                            alert((oldrecRows.length - 1)+" rows have been successfully saved in the 'SMS_relentless/removed_received_messages' directory and then deleted from the database !");
107
-                                                            $('#smstables').removeClass('icon-loading');
108
-                                                       },
109
-                                                       error: function() {
110
-                                                            alert("There was an error while deleting the messages older than the specified period!");
111
-                                                            $('#smstables').removeClass('icon-loading');
112
-                                                       }
113
-                                                });
114
-
115
-                                            } else { alert("There was an error while saving the messages older than the specified period!"); }
116
-
117
-                                            $('#smstables').removeClass('icon-loading');
118
-                                },
119
-                                error: function() {
120
-                                     alert("There was an error while saving and/or deleting the messages older than the specified period!");
121
-                                     $('#smstables').removeClass('icon-loading');
122
-                                }
123
-                            });
124
-                        }
125
-                    }
126
-                }
127
-             },
128
-             error: function() {
129
-                alert("An error occurred while getting data from the database!");
130
-                $('#smstables').removeClass('icon-loading');
131
-             }
132
-         });
133
-
134
-      }
135
-
136
-    });
137
-
138
-
139
-    // Delete from the database all the sent messages older than the specified period
140
-    $("#delOldsentSMS").on("click", function() {
141
-
142
-      var oldsentInterval = $("#oldsentSmsInterval").val();
143
-      var procoldsentint = oldsentInterval.replace(/[^0-9]/g, "");
144
-      var finaloldsentint = parseInt(procoldsentint);
145
-
146
-      if (finaloldsentint == "" || !$.isNumeric(finaloldsentint)) {
147
-          alert("Please enter the number of days in the box above !");
148
-      } else {
149
-
150
-         var getSentUrl = OC.generateUrl("/apps/sms_relentless/user/getsenttablefordel");
151
-         $('#smstables').addClass('icon-loading');
152
-
153
-         $.ajax({
154
-             url: getSentUrl + '/' + userid,
155
-             method: "GET",
156
-             dataType:'text',
157
-             success: function(sentinfoFromDB) {
158
-
159
-                var parsedsentinfo = $.parseJSON(sentinfoFromDB);
160
-
161
-                if (parsedsentinfo == "not permitted") {
162
-
163
-                    alert("Only admins can remove old messages using this option!");
164
-                    $('#smstables').removeClass('icon-loading');
165
-                    return;
166
-
167
-                } else {
168
-
169
-                    var sentmessagedbIDs = [];
170
-                    var oldsentRows = [];
171
-                    oldsentRows.push("id,user_id,message_id,date,from,to,network,price,status,deliveryreceipt,message\r\n");
172
-
173
-                    var senttargetdate = new Date(new Date().setDate(new Date().getDate() - finaloldsentint));
174
-
175
-                    for (var j = 0; j < parsedsentinfo.length; j++) {
176
-                         var firstdate = parsedsentinfo[j].date;
177
-                         var secdate = firstdate.split(" ");
178
-                         var thirddate = secdate[0].split("-");
179
-                         var fourthdate = secdate[1].split(":");
180
-                         var sentpastdate = new Date(thirddate[0],(thirddate[1]-1),thirddate[2],fourthdate[0],fourthdate[1],fourthdate[2]);
181
-
182
-                         if (sentpastdate < senttargetdate) {
183
-                             sentmessagedbIDs.push(parsedsentinfo[j].id);
184
-                             oldsentRows.push(parsedsentinfo[j].id + "," + parsedsentinfo[j].user_id + "," + parsedsentinfo[j].message_id + "," + parsedsentinfo[j].date + "," + parsedsentinfo[j].from + "," + parsedsentinfo[j].to + "," + parsedsentinfo[j].network + "," + parsedsentinfo[j].price + "," + parsedsentinfo[j].status + "," + parsedsentinfo[j].deliveryreceipt + "," + parsedsentinfo[j].message + "\r\n");
185
-                         }
186
-                    }
187
-
188
-
189
-                    if (oldsentRows.length == 1) {
190
-
191
-                        alert("No messages will be deleted since there are no messages older than " + finaloldsentint + " days.");
192
-
193
-                    // Save in a '.csv' file all the sent messages that will be deleted from the database, then delete them
194
-                    } else {
195
-
196
-                          if (confirm("Are you sure you want to delete all the sent messages older than " + finaloldsentint + " days ?")) {
197
-
198
-                              var deloldsentRowsUrl = OC.generateUrl("/apps/sms_relentless/user/saveoldsentrows");
199
-
200
-                              $.ajax({
201
-                                  url: deloldsentRowsUrl + '/' + userid,
202
-                                  method: "POST",
203
-                                  dataType:'text',
204
-                                  data: { oldsentRows: oldsentRows },
205
-                                  success: function(savesentcheck) {
206
-
207
-                                            // Delete sent messages from the database
208
-                                            var delsentDbSmsUrl = OC.generateUrl("/apps/sms_relentless/user/removesentrows");
209
-
210
-                                            if (savesentcheck == 1) {
211
-
212
-                                                $.ajax({
213
-                                                       url: delsentDbSmsUrl + '/' + userid,
214
-                                                       method: "POST",
215
-                                                       dataType:'text',
216
-                                                       data: { sentmessagedbIDs: sentmessagedbIDs },
217
-                                                       success: function() {
218
-                                                            alert((oldsentRows.length - 1) + " rows have been successfully saved in the 'SMS_relentless/removed_sent_messages' directory and then deleted from the database !");
219
-                                                            $('#smstables').removeClass('icon-loading');
220
-                                                       },
221
-                                                       error: function() {
222
-                                                            alert("There was an error while deleting the messages older than the specified period!");
223
-                                                            $('#smstables').removeClass('icon-loading');
224
-                                                       }
225
-                                                });
226
-
227
-                                            } else { alert("There was an error while saving the messages older than the specified period!"); }
228
-
229
-                                            $('#smstables').removeClass('icon-loading');
230
-                                  },
231
-                                  error: function() {
232
-                                     alert("There was an error while saving and/or deleting the messages older than the specified period!");
233
-                                     $('#smstables').removeClass('icon-loading');
234
-                                  }
235
-                              });
236
-                          }
237
-                    }
238
-
239
-                }  
240
-
241
-             },
242
-             error: function() {
243
-                alert("An error occurred while getting data from the database!");
244
-                $('#smstables').removeClass('icon-loading');
245
-             }
246
-         });
247
-      }
248
-
249
-    });
250
-});
251 0
deleted file mode 100644
... ...
@@ -1,1453 +0,0 @@
1
-/**
2
- * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
3
- *
4
- * @author Double Bastion LLC
5
- *
6
- * @license GNU AGPL version 3 or any later version
7
- *
8
- * This program is free software; you can redistribute it and/or
9
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
10
- * License as published by the Free Software Foundation; either
11
- * version 3 of the License, or any later version.
12
- *
13
- * This program is distributed in the hope that it will be useful,
14
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
17
- *
18
- * You should have received a copy of the GNU Affero General Public
19
- * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
- *
21
- */
22
-
23
-  var userid = "<?php p($userId); ?>";
24
-  var charcolorthr = 160;
25
-  var textread = '';
26
-  var providerUsed = '';
27
-  var receiversNumbers = [];
28
-  var waittime = 1000;
29
-  var selectedid = '';
30
-  var isMMS = 0;
31
-  var n = 1;
32
-  var textsizekb = 0;
33
-  var uploadedtomms = [];
34
-  var msgtotalflsize = 0;
35
-  var readtxtfile = [];
36
-  var readjpg = [];
37
-  var readpng = [];
38
-  var readgif = [];
39
-  var readbmp = [];
40
-  var readtif = [];
41
-  var readmp4 = [];
42
-  var chosenProvider = '';
43
-  var chosenProvFullName = '';
44
-  var infonotecontent = '';
45
-  var validExtensions = [];
46
-  var maximumsize = 750;
47
-  var maxsizenonimage = 600;
48
-  var maximumfilenumber = 10;
49
-  var maximumsizeinit = 750;
50
-
51
-  // Adjust the path, so that the uploaded pdf files can be previewed while Nextcloud is served on a subdomain or on a subdirectory, by Nginx or by Apache
52
-  var locHref = window.location.href;
53
-  var pathSplit = locHref.split('/');
54
-  var firstPathEl = '';
55
-  if (pathSplit.length == 7) { firstPathEl = '/' + pathSplit[3]; }
56
-
57
-  // Clean the SMS_Relentless/temp_files directory
58
-  var cleanflUrl = OC.generateUrl("/apps/sms_relentless/user/cleantempdir");
59
-
60
-  $.ajax({
61
-          url: cleanflUrl + '/' + userid,
62
-          type: "POST",
63
-          data: { userid: userid },
64
-          cache: false,
65
-          processData: false,
66
-          contentType: false
67
-  });
68
-  
69
-  // Check the available balance
70
-  $("#smsprovider").on("change", function () {
71
-
72
-     var provider = $('#smsprovider :selected').val();
73
-
74
-     if (provider == "Telnyx") {
75
-
76
-        var gettelbalance = function() {
77
-
78
-          $('#currentbalance').addClass('icon-loading');
79
-
80
-          var gettelbalanceUrl = OC.generateUrl("/apps/sms_relentless/user/getbalancetel");
81
-
82
-          $.ajax({
83
-              url: gettelbalanceUrl + '/' + userid,
84
-              type: "POST",
85
-              data: { userid: userid },
86
-              cache: false,
87
-              processData: false,
88
-              contentType: false,
89
-              success: function(currentbalancetel) {
90
-
91
-                     $('#currentbalance').empty();
92
-                     $('#currentbalance').text(currentbalancetel);
93
-                     $('#currentbalance').removeClass('icon-loading');
94
-              }
95
-          });
96
-        }
97
-
98
-        gettelbalance();
99
-
100
-     } else if (provider == "Plivo") {
101
-
102
-          var getnexbalance = function() {
103
-
104
-            $('#currentbalance').addClass('icon-loading');
105
-
106
-            var getnexbalanceUrl = OC.generateUrl("/apps/sms_relentless/user/getbalancenex");
107
-
108
-            $.ajax({
109
-                url: getnexbalanceUrl + '/' + userid,
110
-                type: "POST",
111
-                data: { userid: userid },
112
-                cache: false,
113
-                processData: false,
114
-                contentType: false,
115
-                success: function(currentbalancenex) {
116
-
117
-                     $('#currentbalance').empty();
118
-                     $('#currentbalance').text(currentbalancenex);
119
-                     $('#currentbalance').removeClass('icon-loading');
120
-                }
121
-            });
122
-          }
123
-
124
-          getnexbalance();
125
-
126
-     } else if (provider == "Twilio") {
127
-
128
-          var gettwilbalance = function() {
129
-
130
-            $('#currentbalance').addClass('icon-loading');
131
-
132
-            var gettwilbalanceUrl = OC.generateUrl("/apps/sms_relentless/user/getbalancetwil");
133
-
134
-            $.ajax({
135
-                url: gettwilbalanceUrl + '/' + userid,
136
-                type: "POST",
137
-                data: { userid: userid },
138
-                cache: false,
139
-                processData: false,
140
-                contentType: false,
141
-                success: function(currentbalancetwil) {
142
-
143
-                     $('#currentbalance').empty();
144
-                     $('#currentbalance').text(currentbalancetwil);
145
-                     $('#currentbalance').removeClass('icon-loading');
146
-                }
147
-            });
148
-          }
149
-
150
-          gettwilbalance();
151
-
152
-     } else if (provider == "Flowroute") {
153
-
154
-          var getflowbalance = function() {
155
-
156
-            $('#currentbalance').addClass('icon-loading');
157
-
158
-            var getflowbalanceUrl = OC.generateUrl("/apps/sms_relentless/user/getbalanceflow");
159
-
160
-            $.ajax({
161
-                url: getflowbalanceUrl + '/' + userid,
162
-                type: "POST",
163
-                data: { userid: userid },
164
-                cache: false,
165
-                processData: false,
166
-                contentType: false,
167
-                success: function(currentbalanceflow) {
168
-
169
-                     $('#currentbalance').empty();
170
-                     $('#currentbalance').text(currentbalanceflow);
171
-                     $('#currentbalance').removeClass('icon-loading');
172
-                }
173
-            });
174
-          }
175
-
176
-          getflowbalance();
177
-
178
-       } else if (provider == "") {
179
-                $('#currentbalance').text("");
180
-                $('#currentbalance').removeClass('icon-loading');
181
-       }
182
-  });
183
-
184
-  // Select the Sender ID
185
-  $("#selectcalleridbttn").on("click", function(event) {
186
-
187
-     $('#selectcalleridbttn').addClass('icon-loading');
188
-
189
-     var getsmsnumbersUrl = OC.generateUrl("/apps/sms_relentless/user/getsmsnumbers");
190
-
191
-     $.ajax({
192
-          url: getsmsnumbersUrl + '/' + userid,
193
-          type: "POST",
194
-          data: { userid: userid },
195
-          cache: false,
196
-          processData: false,
197
-          contentType: false,
198
-          success: function(currentnmbrs) {
199
-
200
-                     $('#currentsmsnmbrs').empty();
201
-                     $('#currentsmsnmbrs').append("<option value='' selected='selected' disabled class='optselectsmsnb'>Choose an ID</option>");
202
-
203
-                     $.each(currentnmbrs, function(key, indsmsnmb) {
204
-                         var emptyinit = indsmsnmb.split(":");
205
-                         var emptysec = emptyinit[1];
206
-                         var emptycheck = emptysec.replace(" ", "").replace("+", "");
207
-
208
-                         if (emptycheck != '') {
209
-                             $('#currentsmsnmbrs').append("<option value='"+indsmsnmb+"' class='optselectsmsnb'>"+indsmsnmb+"</option>");
210
-                         }
211
-                     });
212
-
213
-                     $('#selectcalleridbttn').removeClass('icon-loading');
214
-          }
215
-     });
216
-  });
217
-
218
-  // If a Sender ID is selected, get it
219
-  $("#currentsmsnmbrs").on("change", function () {
220
-
221
-          if ($("#currentsmsnmbrs option[value='']").length > 0) {
222
-
223
-              selectedid = $('#currentsmsnmbrs :selected').val();
224
-              var setIdsplit = selectedid.split(":");
225
-	      chosenProvider = setIdsplit[0];
226
-
227
-              // Set the valid MMS file extensions, maximum MMS message size, maximum message size when non-jpeg/png/gif files are included, maximum number of files and the info note content, for the chosen provider
228
-	      if (chosenProvider == "Tx") {
229
-		  validExtensions = ["jpg", "jpeg", "png", "gif", "mp3", "ogg", "amr", "mp4", "3gpp", "pdf", "vcf", "vcard", "txt"];
230
-		  // Maximum size of message text + files in KB
231
-		  maximumsize = 1024;
232
-                  maximumsizeinit = 1024;
233
-		  maxsizenonimage = 600;
234
-		  maximumfilenumber = 10;
235
-                  chosenProvFullName = "Telnyx";
236
-                  infonotecontent = "To send an MMS, you can upload media files or pick them from Nextcloud. You can add up to 10 files. For Telnyx, if you send only jpeg/jpg, png \
237
-                                     or gif files, the size of all the files plus the size of the text should be \
238
-                                     <a href='https://support.telnyx.com/en/articles/4450150-faqs-about-mms-at-telnyx' style='color:#1b60ba' target='_blank' \
239
-                                     rel='noreferrer noopener'>1024 KB</a> or less. If you send files of other formats, the total size of the files plus the size of the text should \
240
-                                     be 600 KB or less. Allowed formats are jpeg/jpg, png, gif, mp3, ogg, amr, mp4, 3gpp, pdf, vcf, vcard and txt. By default, Telnyx accounts are \
241
-                                     limited to <a href='https://support.telnyx.com/en/articles/3102823-mms-sending-and-receiving' style='color:#1b60ba' target='_blank' \
242
-                                     rel='noreferrer noopener'>1 MMS message per second</a>. Deliverability of MMS messages depends on the carrier and device of the receiver. \
243
-                                     Carriers can reject MMS messages with files exceeding a certain size. The best deliverability is achieved when sending jpeg/jpg, png or \
244
-                                     gif files, with a total message size of 600 KB or less. Telnyx allows sending MMS messages only from US or Canadian phone numbers to other US \
245
-                                     or Canadian phone numbers. Although all the specified file types can be added to the MMS, only the most common media file types (jpeg/jpg, png, \
246
-                                     gif, mp4, ogg, etc.) can be previewed in the adjoining pane.";
247
-                  $("#tooltiptextfourth").html(infonotecontent);
248
-	      } else if (chosenProvider == "Pl") {
249
-		  validExtensions = ["jpg", "jpeg", "png", "gif", "bmp", "wav", "wave", "mp4", "amr", "mpg", "mpeg", "3gpp", "3gpp2", "vcf", "vcard", "x-vcard", "ics", "ical", "ifb", 
250
-                                     "icalendar", "csv", "txt", "pdf", "xls"];
251
-		  // Maximum size of message text + files in KB
252
-		  maximumsize = 5120;
253
-                  maximumsizeinit = 5120;
254
-		  maxsizenonimage = 600;
255
-		  maximumfilenumber = 10;
256
-                  chosenProvFullName = "Plivo";
257
-                  infonotecontent = "To send an MMS, you can upload media files or pick them from Nextcloud. You can add up to 10 files. For Plivo, if you send only jpeg/jpg, png \
258
-                                     or gif files, the size of all the files plus the size of the text should be \
259
-                                     <a href='https://support.plivo.com/hc/en-us/articles/360042280091-What-are-the-MMS-upload-size-limits-and-file-restrictions-' \
260
-                                     style='color:#1b60ba' target='_blank' rel='noreferrer noopener'>5120 KB</a> or less. If you send files of other formats, the total size \
261
-                                     of the files plus the size of the text should be 600 KB or less. <a href='https://support.plivo.com/hc/en-us/articles/360042273051' \
262
-                                     style='color:#1b60ba' target='_blank' rel='noreferrer noopener'>Allowed formats</a> are jpeg/jpg, png, gif, bmp, wav/wave, mp4, amr, mpg, mpeg, 3gpp, \
263
-                                     3gpp2, vcf, vcard, x-vcard, ics, ical, ifb, icalendar, csv, txt, pdf and xls. Deliverability of MMS messages depends on the carrier and \
264
-                                     device of the receiver. Carriers can reject MMS messages with files exceeding a certain size. The best deliverability is \
265
-                                     achieved when sending jpeg/jpg, png or gif files, with a total message size of 600 KB or less. Plivo allows sending MMS messages \
266
-                                     only from US or Canadian phone numbers to other US or Canadian phone numbers. Although all the specified file types can be added to the MMS, \
267
-                                     only the most common media file types (jpeg/jpg, png, gif, wav/wave, mp4, etc.) can be previewed in the adjoining pane.";
268
-                  $("#tooltiptextfourth").html(infonotecontent);
269
-	      } else if (chosenProvider == "Tw") {
270
-		  validExtensions = ["jpg", "jpeg", "png", "gif", "bmp", "tiff", "tif", "au", "snd", "l16", "wav", "wave", "aiff", "pcm", "mp4", "ogg", "ra", "ram", "3gpp", 
271
-                                     "3gpp2", "ac3", "webm", "amr", "mpg", "mpeg", "mov", "qt", "h261", "h263", "h264", "vcf", "vcard", "x-vcard", "csv", "rtf", "ics", "ical", "ifb", 
272
-                                     "icalendar", "directory", "pdf", "pkpass"];
273
-		  // Maximum size of message text + files in KB
274
-		  maximumsize = 5120;
275
-                  maximumsizeinit = 5120;
276
-		  maxsizenonimage = 600;
277
-		  maximumfilenumber = 10;
278
-                  chosenProvFullName = "Twilio";
279
-                  infonotecontent = "To send an MMS, you can upload media files or pick them from Nextcloud. You can add up to 10 files. For Twilio, if you send only jpeg/jpg, png \
280
-                                     or gif files, the size of all the files plus the size of the text should be \
281
-                                     <a href='https://support.twilio.com/hc/en-us/articles/360018832773-Twilio-Programmable-SMS-Supported-File-Types-and-Size-Limits-for-MMS-Media-Messages' \
282
-                                     style='color:#1b60ba' target='_blank' rel='noreferrer noopener'>5120 KB</a> or less. If you send files of other formats, the total size \
283
-                                     of the files plus the size of the text should be 600 KB or less. <a href='https://www.twilio.com/docs/sms/accepted-mime-types' \
284
-                                     style='color:#1b60ba' target='_blank' rel='noreferrer noopener'>Allowed formats</a> are jpeg/jpg, png, gif, bmp, tiff/tif, au, snd, l16, \
285
-                                     wav/wave, aiff, pcm, mp4, ogg, ra, ram, 3gpp, 3gpp2, ac3, webm, amr, mpg, mpeg, mov, qt, h261, h263, h264, vcf, vcard, x-vcard, csv, rtf, ics, \
286
-                                     ical, ifb, icalendar, directory, pdf and pkpass. Deliverability of MMS messages depends on the carrier and device of the receiver. Carriers \
287
-                                     can reject MMS messages with files exceeding a certain size. The best deliverability is achieved when sending jpeg/jpg, png or gif files, \
288
-                                     with a total message size of 600 KB or less. Twilio allows sending MMS messages from US or Canadian phone numbers to other US or Canadian phone \
289
-                                     numbers. However, MMS messages sent internationally will be converted to SMS messages with URL links to the included files. Although all the \
290
-                                     specified file types can be added to the MMS, only the most common media file types (jpeg/jpg, png, gif, wav/wave, mp4, ogg, etc.) can be \
291
-                                     previewed in the adjoining pane."
292
-                  $("#tooltiptextfourth").html(infonotecontent);
293
-	      } else if (chosenProvider == "Fl") {
294
-		  validExtensions = ["jpg", "jpeg", "png", "gif", "bmp", "3gp", "mp4", "avi", "amr", "midi", "wav", "wave", "ac3", "mp3"];
295
-		  // Maximum size of message text + files in KB
296
-		  maximumsize = 750;
297
-                  maximumsizeinit = 750;
298
-		  maxsizenonimage = 600;
299
-		  maximumfilenumber = 10;
300
-                  chosenProvFullName = "Flowroute";
301
-                  infonotecontent = "To send an MMS, you can upload media files or pick them from Nextcloud. You can add up to 10 files. For Flowroute, if you send only jpeg/jpg, \
302
-                                     png or gif files, the size of all the files plus the size of the text should be \
303
-                                     <a href='https://developer.flowroute.com/api/messages/v2.1/send-an-mms/' style='color:#1b60ba' target='_blank' \
304
-                                     rel='noreferrer noopener'>750 KB</a> or less. If you send files of other formats, the total \
305
-                                     size of the files plus the size of the text should be 600 KB or less. \
306
-                                     <a href='https://support.flowroute.com/937402-What-file-types-does-Flowroute-MMS-support' style='color:#1b60ba' target='_blank' \
307
-                                     rel='noreferrer noopener'>Allowed formats</a> are jpeg/jpg, png, gif, bmp, 3gp, mp4, avi, amr, midi, wav/wave, ac3 and mp3. Flowroute accounts are \
308
-                                     limited to <a href='https://developer.flowroute.com/docs/sms-mms-best-practices/#sending-and-receiving-limitations' style='color:#1b60ba' \
309
-                                     target='_blank' rel='noreferrer noopener'>1 MMS message per second</a>. Deliverability of MMS messages depends on the carrier and device \
310
-                                     of the receiver. Carriers can reject MMS messages with files exceeding a certain size. The best deliverability is achieved when sending \
311
-                                     jpeg/jpg, png or gif files, with a total message size of 600 KB or less. Flowroute allows sending MMS messages only from US or Canadian phone \
312
-                                     numbers to other US or Canadian phone numbers. Although all the specified file types can be added to the MMS, only the most common media file \
313
-                                     types (jpeg/jpg, png, gif, wav/wave, mp4, etc.) can be previewed in the adjoining pane."
314
-                  $("#tooltiptextfourth").html(infonotecontent);
315
-	      }
316
-
317
-          } else { selectedid = ''; }
318
-  });
319
-
320
-  // Check the checkbox to send SMS message to multiple recipients
321
-  $('#tomultchckbx').change(function() {
322
-      if ($(this).is(':checked')) {
323
-          $("#multiplerecivers").css("display", "block");
324
-          $("#smstodiv").css("visibility", "hidden");
325
-          $("#smsto").val("");
326
-
327
-          receiversNumbers.length = 0;
328
-
329
-      } else {
330
-          $("#multiplerecivers").css("display", "none");
331
-          $("#smstodiv").css("visibility", "visible");
332
-
333
-          // Remove the uploaded file(s) if any
334
-          $("#induploadfile").remove();
335
-
336
-          receiversNumbers.length = 0;
337
-      }
338
-  });
339
-
340
-  // Upload the file with the recipients' phone numbers
341
-  $("#uploadfileforsms").change(function(e) {
342
-
343
-     $("#fileuploadednm").empty();
344
-
345
-     receiversNumbers.length = 0;
346
-
347
-     OC.msg.startAction("#sms_upload_msg", t("sms_relentless", "Uploading ..."));
348
-
349
-     var baseUrl = OC.generateUrl("/apps/sms_relentless/user/upload_numbers_file");
350
-
351
-     var formData = new FormData();
352
-     formData.append('uploadfileforsms', $('#uploadfileforsms')[0].files[0]);
353
-
354
-     var fileup = $('#uploadfileforsms').val();
355
-     var fileuptrim = fileup.split('\\').pop();
356
-
357
-     $('#fileuploadednm').append("<div id='induploadfile' class='indgenflcls'><div id='indfilediv' class='indivflcls'>" + fileuptrim + "</div><div id='indivflremove' class='indupfldl'>X</div></div><br>");
358
-
359
-     var extension = fileup.replace(/^.*\./, '');
360
-
361
-     if (extension == fileup) {
362
-         extension = "";
363
-     } else {
364
-         extension = extension.toLowerCase();
365
-     }
366
-
367
-     var validExtensionsmrec = ["txt", "csv"];
368
-
369
-     if (jQuery.inArray(extension, validExtensionsmrec) != -1) {
370
-
371
-       if (selectedid != '') {
372
-
373
-               $.ajax({
374
-                 url: baseUrl + '/' + userid,
375
-                 type: "POST",
376
-                 data: formData,
377
-                 cache: false,
378
-                 processData: false,
379
-                 contentType: false,
380
-                 success: function(numberarray) {
381
-
382
-		    if (numberarray.length > 0) {
383
-
384
-		        // Get the array of the receivers' phone numbers
385
-		        if (chosenProvider == "Tx") {
386
-
387
-		             for(key in numberarray) {
388
-		                 receiversNumbers.push("+"+numberarray[key]);
389
-		             }
390
-
391
-		        } else if (chosenProvider == "Pl") {
392
-
393
-		             for(key in numberarray) {
394
-		                 receiversNumbers.push(numberarray[key]);
395
-		             }
396
-
397
-		          } else if (chosenProvider == "Tw") {
398
-
399
-		             for(key in numberarray) {
400
-		                 receiversNumbers.push(numberarray[key]);
401
-		             }
402
-		          } else if (chosenProvider == "Fl") {
403
-
404
-		             for(key in numberarray) {
405
-		                 receiversNumbers.push(numberarray[key]);
406
-		             }
407
-		          }
408
-
409
-		    } else {
410
-		          alert("The uploaded file doesn't seem to contain any valid phone numbers. Please upload a txt or csv file that contains phone numbers separated by commas, semicolons, vertical bars or new lines.");
411
-		    }
412
-                            
413
-                    // Preview the uploaded file
414
-                    var smsfilename = e.target.files[0].name;
415
-                    var baseUrl = OC.generateUrl("/remote.php/webdav/SMS_Relentless/temp_files/"+smsfilename);
416
-
417
-                    var reader = new FileReader();
418
-                    reader.readAsText(e.target.files[0]);
419
-                    reader.onload = function(e) {
420
-                          $("#smstables").empty();
421
-                          $("#smstables").append(e.target.result.replace(/(?:\r\n|\r|\n)/g, '<br>'));
422
-                    };
423
-
424
-                    $("#smstables").show();
425
-
426
-                    $('#sms_upload_msg').hide();
427
-                    $('#smstables').removeClass('icon-loading');
428
-
429
-                  },
430
-                  error: function(){
431
-                     alert('Error!');
432
-                  }
433
-               });
434
-
435
-        } else {
436
-               alert("Please choose a Sender ID from the Set ID drop-down list!");
437
-               $('#sms_upload_msg').hide();
438
-               $('#smstables').removeClass('icon-loading');
439
-        }
440
-
441
-     } else {
442
-          alert('The file type is not supported ! Supported formats are txt and csv.');
443
-          $('#pf_upload_msg').hide();
444
-          $('#smstables').removeClass('icon-loading');
445
-
446
-          $("#induploadfile").remove();
447
-          $("#sms_upload_msg").hide();
448
-     }
449
-
450
-     //Preview uploaded file when clicked
451
-     $("#indfilediv").on("click", function() {
452
-
453
-          var smsfilename = e.target.files[0].name;
454
-          var baseUrl = OC.generateUrl("/remote.php/webdav/SMS_Relentless/temp_files/"+smsfilename);
455
-
456
-          var reader = new FileReader();
457
-          reader.readAsText(e.target.files[0]);
458
-          reader.onload = function(e) {
459
-                  $("#smstables").empty();
460
-                  $("#smstables").append(e.target.result.replace(/(?:\r\n|\r|\n)/g, '<br>'));
461
-          };
462
-
463
-          $("#smstables").show();
464
-          $('#sms_upload_msg').hide();
465
-          $('#smstables').removeClass('icon-loading');
466
-     });
467
-
468
-     // Remove selected file
469
-     $("#indivflremove").on("click", function() {
470
-
471
-          $("#induploadfile").remove();
472
-          $("#sms_upload_msg").hide();
473
-
474
-          receiversNumbers.length = 0;
475
-
476
-     });
477
-
478
-  });
479
-
480
-  // Show the number of characters entered in the SMS textarea and the text size in KB
481
-  $("#smstext").on('input', function() {
482
-
483
-     $("#char_count").css("display", "inline");
484
-
485
-     $("#mtextSize").css("display", "inline");
486
-
487
-     $(".maxmessagelength").css("display", "inline-block");
488
-
489
-     $("#countchnb").text($(this).val().length);
490
-
491
-     var textsize = encodeURIComponent($(this).val()).replace(/%[A-F\d]{2}/g, 'U').length;
492
-     textsizekb = parseFloat(textsize/1024).toFixed(4);
493
-     $("#textsizeinkb").text(textsizekb);
494
-
495
-     if ($(this).val().length > charcolorthr) {
496
-         $("#char_count").css("color", "#BB2E4B");
497
-     } else {
498
-         $("#char_count").css("color", "#4cbc86;");
499
-     }
500
-
501
-  });
502
-
503
-
504
-  // Check the checkbox to send file(s) as MMS
505
-  $('#mediafilechckbx').change(function() {
506
-
507
-      if ($(this).is(':checked')) {
508
-
509
-          isMMS = 1;
510
-          if (selectedid == '') {
511
-              alert("Please, first choose a Sender ID from the Set ID drop-down list !");
512
-              $(this).prop("checked", false);
513
-              isMMS = 0;
514
-              return;
515
-          }
516
-          $("#upmediafiles").css("display", "block");
517
-          $("#submitsms").prop("value", "Send MMS");
518
-
519
-      } else {
520
-
521
-          isMMS = 0;
522
-          $("#upmediafiles").css("display", "none");
523
-          $("#submitsms").prop("value", "Send SMS");
524
-
525
-          // Remove the uploaded file(s) if any
526
-          $(".indgenflclsmms").each(function() { $(this).remove(); });
527
-          $(".indgenpckfls").each(function() { $(this).remove(); });
528
-
529
-          uploadedtomms = [];
530
-          n = 1;
531
-
532
-          msgtotalflsize = 0;
533
-
534
-          $("#filestotsize").hide();
535
-      }
536
-  });
537
-
538
-
539
-  // Check if the uploaded files' format is jpeg, png or gif and adjust the maximum cumulative size of files, if necessary
540
-  function adjustMaximumSize(uploadedtomms) {
541
-				      
542
-      var nonimgcheck = 0;
543
-      for (var u = 0; u < uploadedtomms.length; u++) {
544
-	   var crupfl = uploadedtomms[u];
545
-	   var extensionup = crupfl.replace(/^.*\./, '');
546
-	   if ($.inArray(extensionup, ["jpg", "jpeg", "png", "gif"]) === -1) {
547
-	       nonimgcheck = 1;
548
-	   }
549
-      }
550
-
551
-      if (nonimgcheck == 0) { maximumsize = maximumsizeinit; }
552
-  }
553
-
554
-  // Upload files to be sent as MMS
555
-  $("#uploadfileformms").change(function(e) {
556
-
557
-     OC.msg.startAction("#pf_upload_msg", t("sms_relentless", "Uploading ..."));
558
-     $('#smstables').addClass('icon-loading');
559
-     $('#filestotsize').show();
560
-
561
-     var userid = "<?php p($userId); ?>";
562
-     var baseUrl = OC.generateUrl("/apps/sms_relentless/user/uploadfile");
563
-
564
-     var formData = new FormData();
565
-     formData.append('uploadfileformms', $('#uploadfileformms')[0].files[0]);
566
-
567
-     var currentflsize = $('#uploadfileformms')[0].files[0].size;
568
-
569
-     // Add the size of the current file to the total size of all the files
570
-     msgtotalflsize += Math.floor((currentflsize/1024) * 100)/100;
571
-
572
-     var fileup = $('#uploadfileformms').val();
573
-     var fileuptrim = fileup.split('\\').pop();
574
-
575
-     if ($.inArray(fileuptrim, uploadedtomms) != -1) {
576
-         var duplicatescheck = 1;
577
-     } else { 
578
-         var duplicatescheck = 0;
579
-     }
580
-
581
-     var extension = fileup.replace(/^.*\./, '');
582
-
583
-     if (extension == fileup) {
584
-         extension = "";
585
-     } else {
586
-         extension = extension.toLowerCase();
587
-     }
588
-
589
-     // If the uploaded file's format is different from jpeg, png or gif, the maximum allowed size of the message will be lower
590
-     if (($.inArray(extension, ["jpg", "jpeg", "png", "gif"]) === -1) && (msgtotalflsize <= Number(maximumsize) - Number(textsizekb))) {
591
-         maximumsize = maxsizenonimage;
592
-     }
593
-
594
-     if ($.inArray(extension, validExtensions) != -1) {
595
-
596
-       if (duplicatescheck == 0) {
597
-
598
-         if (msgtotalflsize <= Number(maximumsize) - Number(textsizekb)) {
599
-
600
-            if (n <= maximumfilenumber) {
601
-
602
-               $.ajax({
603
-                 url: baseUrl + '/' + userid,
604
-                 type: "POST",
605
-                 data: formData,
606
-                 cache: false,
607
-                 processData: false,
608
-                 contentType: false,
609
-                 success: function(totalflsize) {
610
-
611
-                   uploadedtomms.push(fileuptrim);
612
-
613
-                   $('#filessizetext').text(totalflsize);
614
-
615
-                   var rectotfilesz = parseFloat(totalflsize);
616
-
617
-                   if (rectotfilesz <= maximumsize) {
618
-                       $('#submitsms').attr("disabled", false);
619
-                       $('#filestotsize').css('color', '#189558');
620
-                   } else {
621
-                       $('#filestotsize').css('color', '#ba3555');
622
-                       alert("Error ! For "+ chosenProvFullName +", for the chosen files format, the size of all the included files plus the size of the text cannot exceed "+ maximumsize +" KB !");
623
-                       $('#submitsms').attr("disabled", true);
624
-                       $('#smstables').removeClass('icon-loading');
625
-                       $('#pf_upload_msg').hide();
626
-                   }
627
-
628
-                   $('#mmsfileuploadednm').append("<div class='indgenflclsmms'><div id='"+n+"indfilediv' class='indivflcls'>" + n + ") " + fileuptrim + "</div><div class='indupfldl'>X</div></div>");
629
-                   n++;
630
-
631
-                   // Preview the file when you click on its name
632
-                   $("div:visible[id*='indfilediv']").each(function() {
633
-
634
-                        $(this).on("click", function(eventclck) {
635
-
636
-                           $("#mmsfoldersview").css("display", "inline-block");
637
-                           var mmsfilenameinit = $(this).text();
638
-                           var mmsfilenamesec = mmsfilenameinit.substring(mmsfilenameinit.indexOf(" ") + 1);
639
-                           var mmsfilename = mmsfilenamesec.replace("X","");
640
-                           var baseUrl = firstPathEl+"/remote.php/webdav/SMS_Relentless/temp_files/"+mmsfilename;
641
-                           var extenlst = mmsfilename.replace(/^.*\./, '');
642
-
643
-                           if (extenlst == mmsfilename) {
644
-                               extenlst = "";
645
-                           } else {
646
-                               extenlst = extenlst.toLowerCase();
647
-                           }
648
-
649
-                           if (extenlst == 'jpg' || extenlst == 'jpeg') {
650
-                                  $("#smstables").empty();
651
-                                  $("#smstables").append('<img style="width:auto;height:auto" id="uploadedjpg" src="#" />');
652
-                                  $("#uploadedjpg").attr('src', readjpg[mmsfilename]);
653
-                           } else if (extenlst == 'png') {
654
-                                  $("#smstables").empty();
655
-                                  $("#smstables").append('<img style="width:auto;height:auto" id="uploadedpng" src="#" />');
656
-                                  $("#uploadedpng").attr('src', readpng[mmsfilename]);
657
-                           } else if (extenlst == 'gif') {
658
-                                  $("#smstables").empty();
659
-                                  $("#smstables").append('<img style="width:auto;height:auto" id="uploadedgif" src="#" />');
660
-                                  $("#uploadedgif").attr('src', readgif[mmsfilename]);
661
-                           } else if (extenlst == 'bmp') {
662
-                                  $("#smstables").empty();
663
-                                  $("#smstables").append('<img style="width:auto;height:auto" id="uploadedbmp" src="#" />');
664
-                                  $("#uploadedbmp").attr('src', readbmp[mmsfilename]);
665
-                           } else if (extenlst == 'tif' || extenlst == 'tiff') {
666
-                                  var tiffile = '/remote.php/webdav/SMS_Relentless/temp_files/'+mmsfilename;
667
-                                  var xhr = new XMLHttpRequest();
668
-                                  xhr.responseType = 'arraybuffer';
669
-                                  xhr.open('GET', tiffile);
670
-                                  xhr.onload = function (evnt) {
671
-                                      var tiff = new Tiff({buffer: xhr.response});
672
-                                      var tifcanvas = tiff.toCanvas();
673
-                                      $("#smstables").empty();
674
-                                      $("#smstables").append(tifcanvas);
675
-                                  };
676
-                                  xhr.send();
677
-                           } else if (extenlst == 'pdf') {
678
-                                  var viewerclick = OC.generateUrl('/apps/files_pdfviewer/?file={file}', {file: baseUrl});
679
-                                  var $iframe = $('<iframe id="docclickview" style="width:100%;height:100%;display:block;position:absolute;top:0;left:0;z-index:1041;" src="' + viewerclick + '" sandbox="allow-scripts allow-same-origin allow-popups allow-modals"></iframe>');
680
-                                  $("#smstables").empty();
681
-                                  $("#smstables").append($iframe);
682
-                           } else if (extenlst == 'txt') {
683
-                                  $("#smstables").empty();
684
-                                  $("#smstables").append(readtxtfile[mmsfilename]);
685
-                           } else if (extension == 'mp4') {
686
-                                  $("#smstables").empty();
687
-                                  $("#smstables").append('<video width="100%" height="auto" controls><source id="uploadedmp4" src="'+ baseUrl +'"></video>');
688
-		           } else if (extension == 'ogg') {
689
-		                  $("#smstables").empty();
690
-		                  $("#smstables").append('<video width="100%" height="auto" controls><source id="uploadedogg" src="'+ baseUrl +'"></video>');
691
-		           } else if (extension == 'avi') {
692
-		                  $("#smstables").empty();
693
-		                  $("#smstables").append('<video width="100%" height="auto" controls><source id="uploadedavi" src="'+ baseUrl +'" type="video/avi"></video>');
694
-		           } else if (extension == 'mpg' || extension == 'mpeg') {
695
-		                  $("#smstables").empty();
696
-		                  $("#smstables").append('<video width="100%" height="auto" controls><source id="uploadedmpg" src="'+ baseUrl +'"></video>');
697
-		           } else if (extension == 'wav' || extension == 'wave') {
698
-		                  $("#smstables").empty();
699
-		                  $("#smstables").append('<audio width="100%" height="auto" controls><source id="uploadedwav" src="'+ baseUrl +'"></audio>');
700
-		           } else if (extension == 'mp3') {
701
-		                  $("#smstables").empty();
702
-		                  $("#smstables").append('<audio width="100%" height="auto" controls><source id="uploadedmp3" src="'+ baseUrl +'" type="audio/mp3"></audio>');
703
-		           } else if (extension == 'midi') {
704
-		                  $("#smstables").empty();
705
-		                  $("#smstables").append('<audio width="100%" height="auto" controls><source id="uploadedmidi" src="'+ baseUrl +'" type="audio/midi"></audio>');
706
-		           }
707
-
708
-                           $("#smstables").show();
709
-                           $("#mmsfoldersview").hide();
710
-                        });
711
-                   });
712
-
713
-                   // Remove uploaded files
714
-                   $('[class*="indupfldl"]').last().click(function() {
715
-
716
-                           var userid = "<?php p($userId); ?>";
717
-                           var baseUrl = OC.generateUrl("/apps/sms_relentless/user/removeupfile");
718
-
719
-                           var removedfilenameinit = $(this).closest('[class*="indgenflclsmms"]').find('[class*="indivflcls"]').text();
720
-
721
-                           var removedfilesplit = removedfilenameinit.split(") ");
722
-                           var removedflnb = parseInt(removedfilesplit[0]);
723
-
724
-                           $(this).closest('[class*="indgenflclsmms"]').find('[class*="indivflcls"]').hide();
725
-                           $(this).hide();
726
-
727
-                           var removedfilename = removedfilenameinit.substring(removedfilenameinit.indexOf(" ") + 1);
728
-
729
-                           uploadedtomms = $.grep(uploadedtomms, function(value) {
730
-                                           return value != removedfilename;
731
-                           });
732
-
733
-                           $.ajax({
734
-                                   url: baseUrl + '/' + userid,
735
-                                   type: "POST",
736
-                                   data: {removedfilename: removedfilename},
737
-                                   success: function(totalflsize) {
738
-
739
-                                      msgtotalflsize = totalflsize;
740
-                                      $('#filessizetext').text(totalflsize);
741
-
742
-                                      adjustMaximumSize(uploadedtomms);
743
-
744
-                                      // Check message size
745
-                                      var rectotfilesz = parseFloat(totalflsize);
746
-
747
-                                      if (rectotfilesz <= Number(maximumsize) - Number(textsizekb)) {
748
-                                          $('#submitsms').attr("disabled", false);
749
-                                          $('#filestotsize').css('color', '#189558');
750
-                                      } else {
751
-                                          $('#filestotsize').css('color', '#ba3555');
752
-                                          alert("Error ! For "+ chosenProvFullName +", for the chosen files format, the total size of the included files plus the size of the text cannot exceed "+ maximumsize +" KB !");
753
-                                          $('#submitsms').attr("disabled", true);
754
-                                      }
755
-
756
-                                      // Rewrite order numbers for files that follow
757
-                                      --n;
758
-                                      $("div:visible[id*='indfilediv']").each(function() {
759
-
760
-                                          var getdivtext =  $(this).text();
761
-                                          var splitdivtext = getdivtext.split(") ");
762
-                                          var currentnbvalue = parseInt(splitdivtext[0]);
763
-                                          var newnbvalue = currentnbvalue - 1;
764
-
765
-                                          if (currentnbvalue > removedflnb) {
766
-                                              var replacedstr = newnbvalue + ") " + splitdivtext[1];
767
-                                              $(this).text(replacedstr);
768
-                                          }
769
-                                      });
770
-
771
-                                      $("div:visible[id*='indflpicked']").each(function() {
772
-
773
-                                          var getdivtext =  $(this).text();
774
-                                          var splitdivtext = getdivtext.split(") ");
775
-                                          var currentnbvalue = parseInt(splitdivtext[0]);
776
-                                          var newnbvalue = currentnbvalue - 1;
777
-
778
-                                          if (currentnbvalue > removedflnb) {
779
-                                              var replacedstr = newnbvalue + ") " + splitdivtext[1];
780
-                                              $(this).text(replacedstr);
781
-                                          }
782
-                                      });
783
-
784
-                                   },
785
-                                   error: function() {
786
-                                          alert('Error removing file(s)!');
787
-                                   }
788
-                           });
789
-
790
-                           $('#smstables').removeClass('icon-loading');
791
-                           $("#smstables").empty();
792
-                   });
793
-
794
-                   // Preview the uploaded file
795
-                   $("#mmsfoldersview").css("display", "inline-block");
796
-                   var mmsfilename = e.target.files[0].name;
797
-                   var baseUrl = firstPathEl+"/remote.php/webdav/SMS_Relentless/temp_files/"+mmsfilename;
798
-
799
-
800
-                   if (extension == 'jpg' || extension == 'jpeg') {
801
-                              $("#smstables").empty();
802
-                              $("#smstables").append('<img style="width:auto;height:auto" id="uploadedjpg" src="#" />');
803
-
804
-                              var reader = new FileReader();
805
-                              reader.onload = function (e) {
806
-                                  readjpg[mmsfilename] = e.target.result;
807
-                                  $("#uploadedjpg").attr('src', readjpg[mmsfilename]);
808
-                              }
809
-                              reader.readAsDataURL(e.target.files[0]);
810
-                   } else if (extension == 'png') {
811
-                              $("#smstables").empty();
812
-                              $("#smstables").append('<img style="width:auto;height:auto" id="uploadedpng" src="#" />');
813
-
814
-                              var reader = new FileReader();
815
-                              reader.onload = function (e) {
816
-                                  readpng[mmsfilename] = e.target.result;
817
-                                  $("#uploadedpng").attr('src', readpng[mmsfilename]);
818
-                              }
819
-                              reader.readAsDataURL(e.target.files[0]);
820
-
821
-                   } else if (extension == 'gif') {
822
-                              $("#smstables").empty();
823
-                              $("#smstables").append('<img style="width:auto;height:auto" id="uploadedgif" src="#" />');
824
-
825
-                              var reader = new FileReader();
826
-                              reader.onload = function (e) {
827
-                                  readgif[mmsfilename] = e.target.result;
828
-                                  $("#uploadedgif").attr('src', readgif[mmsfilename]);
829
-                              }
830
-                              reader.readAsDataURL(e.target.files[0]);
831
-
832
-                   } else if (extension == 'bmp') {
833
-                              $("#smstables").empty();
834
-                              $("#smstables").append('<img style="width:auto;height:auto" id="uploadedbmp" src="#" />');
835
-
836
-                              var reader = new FileReader();
837
-                              reader.onload = function (e) {
838
-                                  readbmp[mmsfilename] = e.target.result;
839
-                                  $("#uploadedbmp").attr('src', readbmp[mmsfilename]);
840
-                              }
841
-                              reader.readAsDataURL(e.target.files[0]);
842
-
843
-                   } else if (extension == 'tif' || extension == 'tiff') {
844
-                              var tiffile = '/remote.php/webdav/SMS_Relentless/temp_files/'+mmsfilename;
845
-                              var xhr = new XMLHttpRequest();
846
-                              xhr.responseType = 'arraybuffer';
847
-                              xhr.open('GET', tiffile);
848
-                              xhr.onload = function (e) {
849
-                                  var tiff = new Tiff({buffer: xhr.response});
850
-                                  var tifcanvas = tiff.toCanvas();
851
-                                  $("#smstables").empty();
852
-                                  $("#smstables").append(tifcanvas);
853
-                              };
854
-                              xhr.send();
855
-
856
-                   } else if (extension == 'pdf') {
857
-                              var viewer = OC.generateUrl('/apps/files_pdfviewer/?file={file}', {file: baseUrl});
858
-                              var $iframe = $('<iframe id="docviewer" style="width:100%;height:100%;display:block;position:absolute;top:0;left:0;z-index:1041;" src="' + viewer + '" sandbox="allow-scripts allow-same-origin allow-popups allow-modals"></iframe>');
859
-                              $("#smstables").empty();
860
-                              $("#smstables").append($iframe);
861
-
862
-                   } else if (extension == 'txt') {
863
-                              var reader = new FileReader();
864
-                              reader.readAsText(e.target.files[0]);
865
-                              reader.onload = function(e) {
866
-                                  readtxtfile[mmsfilename] = e.target.result.replace(/(?:\r\n|\r|\n)/g, '<br>');
867
-                                  $("#smstables").empty();
868
-                                  $("#smstables").append(readtxtfile[mmsfilename]);
869
-                              };
870
-                   } else if (extension == 'mp4') {
871
-                              $("#smstables").empty();
872
-                              $("#smstables").append('<video width="100%" height="auto" controls><source id="uploadedmp4" src="'+ baseUrl +'"></video>');
873
-                   } else if (extension == 'ogg') {
874
-                              $("#smstables").empty();
875
-                              $("#smstables").append('<video width="100%" height="auto" controls><source id="uploadedogg" src="'+ baseUrl +'"></video>');
876
-                   } else if (extension == 'avi') {
877
-                              $("#smstables").empty();
878
-                              $("#smstables").append('<video width="100%" height="auto" controls><source id="uploadedavi" src="'+ baseUrl +'" type="video/avi"></video>');
879
-                   } else if (extension == 'mpg' || extension == 'mpeg') {
880
-                              $("#smstables").empty();
881
-                              $("#smstables").append('<video width="100%" height="auto" controls><source id="uploadedmpg" src="'+ baseUrl +'"></video>');
882
-                   } else if (extension == 'wav' || extension == 'wave') {
883
-                              $("#smstables").empty();
884
-                              $("#smstables").append('<audio width="100%" height="auto" controls><source id="uploadedwav" src="'+ baseUrl +'"></audio>');
885
-                   } else if (extension == 'mp3') {
886
-                              $("#smstables").empty();
887
-                              $("#smstables").append('<audio width="100%" height="auto" controls><source id="uploadedmp3" src="'+ baseUrl +'" type="audio/mp3"></audio>');
888
-                   } else if (extension == 'midi') {
889
-                              $("#smstables").empty();
890
-                              $("#smstables").append('<audio width="100%" height="auto" controls><source id="uploadedmidi" src="'+ baseUrl +'" type="audio/midi"></audio>');
891
-                   }
892
-
893
-                   $("#smstables").show();
894
-                   $('#pf_upload_msg').hide();
895
-                   $('#smstables').removeClass('icon-loading');
896
-                   $("#mmsfoldersview").hide();
897
-                 },
898
-                 error: function(data){
899
-                     alert('Error uploading file!');
900
-                 }
901
-               });
902
-
903
-            } else {
904
-                  msgtotalflsize -= Math.floor((currentflsize/1024) * 100)/100;
905
-                  adjustMaximumSize(uploadedtomms);
906
-
907
-                  alert("Error ! You cannot send more than 10 files in one MMS !");
908
-                  $('#pf_upload_msg').hide();
909
-                  $('#smstables').removeClass('icon-loading');
910
-            }
911
-         } else {
912
-              msgtotalflsize -= Math.floor((currentflsize/1024) * 100)/100;
913
-              adjustMaximumSize(uploadedtomms);
914
-
915
-              alert('Error ! For '+ chosenProvFullName +', for the chosen files format, the size of all the included files plus the size of the text cannot be greater than '+ maxsizenonimage +' KB !');
916
-              $('#pf_upload_msg').hide();
917
-              $('#smstables').removeClass('icon-loading');
918
-         }
919
-       } else {
920
-            msgtotalflsize -= Math.floor((currentflsize/1024) * 100)/100;
921
-            adjustMaximumSize(uploadedtomms);
922
-
923
-            alert("Error ! There is already a file named '"+fileuptrim+"' in the 'SMS_Relentless/temp_files' folder !");
924
-            $('#pf_upload_msg').hide();
925
-            $('#smstables').removeClass('icon-loading');
926
-       }
927
-
928
-     } else {
929
-          msgtotalflsize -= Math.floor((currentflsize/1024) * 100)/100;
930
-          adjustMaximumSize(uploadedtomms);
931
-
932
-          alert('The file type is not supported ! Supported extensions for '+ chosenProvFullName +' are: '+ validExtensions.join(", ") +'.');
933
-          $('#pf_upload_msg').hide();
934
-          $('#smstables').removeClass('icon-loading');
935
-     }
936
-  });
937
-
938
-
939
-  // Pick file(s) from Nextcloud, to send as MMS
940
-  var mmsfilename = null;
941
-
942
-  $("#choosefilen").on("click", function(evn) {
943
-
944
-                OC.dialogs.filepicker(
945
-                        t('settings', "Select a file to send as MMS."),
946
-                        function (path) {
947
-
948
-                              OC.msg.startAction("#pf_choose_msg", t("sms_relentless", "Please wait ..."));
949
-                              $('#smstables').addClass('icon-loading');
950
-                              $('#filestotsize').show();
951
-
952
-                              var userid = "<?php p($userId); ?>";
953
-                              var baseUrl = OC.generateUrl("/apps/sms_relentless/user/pickfile");
954
-
955
-                              mmsfilename = path.split('/').pop();
956
-
957
-                              if ($.inArray(mmsfilename, uploadedtomms) != -1) {
958
-                                  var duplicatescheck = 1;
959
-                              } else var duplicatescheck = 0;
960
-
961
-                              var extension = mmsfilename.replace(/^.*\./, '');
962
-
963
-                              if (extension == mmsfilename) {
964
-                                  extension = "";
965
-                              } else {
966
-                                  extension = extension.toLowerCase();
967
-                              }
968
-
969
-			      // If the picked file's format is different from jpeg, png or gif, the maximum allowed size of the message will be lower
970
-			      if ($.inArray(extension, ["jpg", "jpeg", "png", "gif"]) === -1) {
971
-				   maximumsize = maxsizenonimage;
972
-			      }
973
-
974
-                              if ($.inArray(extension, validExtensions) != -1) {
975
-
976
-                                 if (duplicatescheck == 0) {
977
-
978
-                                    if (n <= maximumfilenumber) {
979
-
980
-                                       $.ajax({
981
-                                          url: baseUrl + '/' + userid,
982
-                                          type: "POST",
983
-                                          data: {path: path},
984
-                                          success: function(pickresult) {
985
-
986
-                                                uploadedtomms.push(mmsfilename);
987
-
988
-                                                var totalflsize = pickresult[0];
989
-                                                var pickedflsize = pickresult[1];
990
-
991
-                                                // Check message size
992
-                                                var rectotfilesz = parseFloat(totalflsize);
993
-                                                var filesplustextsize = Number(rectotfilesz) + Number(textsizekb);
994
-
995
-                                                if (filesplustextsize <= maximumsize) {
996
-
997
-                                                    $("#mmsfoldersview").css("display", "inline-block");
998
-
999
-                                                    $('#filespickednc').append("<div class='indgenpckfls'><div id='"+n+"indflpicked' class='indivflpckd'>" + n + ") " + mmsfilename + "</div><div class='indpckfldl'>X</div></div>");
1000
-                                                    n++;
1001
-
1002
-                                                    msgtotalflsize = totalflsize;
1003
-                                                    $('#filessizetext').text(totalflsize);
1004
-                                                    $('#filestotsize').css('color', '#189558');
1005
-
1006
-                                                } else {
1007
-
1008
-                                                    uploadedtomms = uploadedtomms.filter(function(e) { return e !== mmsfilename });
1009
-                                                    $('#filestotsize').css('color', '#ba3555');
1010
-                                                    msgtotalflsize -= pickedflsize;
1011
-                                                    var baseUrlindrm = OC.generateUrl("/apps/sms_relentless/user/removeupfile");
1012
-
1013
-                                                    $.ajax({
1014
-                                                        url: baseUrlindrm + '/' + userid,
1015
-                                                        type: "POST",
1016
-                                                        data: {removedfilename: mmsfilename},
1017
-                                                        success: function(totalflsize) {
1018
-
1019
-                                                                          $('#filessizetext').text(totalflsize);
1020
-                                                                          $('#filestotsize').css('color', '#189558');
1021
-                                                                          adjustMaximumSize(uploadedtomms);
1022
-
1023
-                                                        },
1024
-                                                        error: function(totalflsize) {
1025
-                                                                          $('#filessizetext').text(totalflsize);
1026
-                                                                          if (parseFloat(totalflsize) > maximumsize) {
1027
-                                                                              $('#filestotsize').css('color', '#ba3555');
1028
-                                                                          } else { $('#filestotsize').css('color', '#189558'); }
1029
-                                                                          alert("Error while trying to remove the last picked file from the 'SMS_Relentless/temp_files' directory!"); 
1030
-                                                        }
1031
-                                                    });
1032
-
1033
-                                                    alert("Error ! For "+ chosenProvFullName +", for the chosen files format, the size of all the included files plus the size of the text cannot exceed "+ maximumsize +" KB !");
1034
-
1035
-                                                }
1036
-
1037
-
1038
-                                                // Preview each file when you click on its name
1039
-                                                $("div:visible[id*='indflpicked']").each(function() {
1040
-                                                   $(this).on("click", function(event) {
1041
-
1042
-                                                      var mmsfilenameinit = $(this).text();
1043
-                                                      var mmsfilenamesec = mmsfilenameinit.substring(mmsfilenameinit.indexOf(" ") + 1);
1044
-                                                      var mmsfilenamesp = mmsfilenamesec.replace("X","");
1045
-                                                      var baseUrl = firstPathEl+"/remote.php/webdav/SMS_Relentless/temp_files/"+mmsfilenamesp;
1046
-                                                      var extenlst = mmsfilenamesp.replace(/^.*\./, '');
1047
-
1048
-                                                      if (extenlst == mmsfilenamesp) {
1049
-                                                           extenlst = "";
1050
-                                                      } else {
1051
-                                                           extenlst = extenlst.toLowerCase();
1052
-                                                      }
1053
-
1054
-
1055
-                                                      if (extenlst == 'jpg' || extenlst == 'jpeg') {
1056
-                                                              $("#smstables").empty();
1057
-                                                              $("#smstables").append('<img style="width:auto;height:auto" id="uploadedjpg" src="'+ baseUrl +'" />');
1058
-                                                      } else if (extenlst == 'png') {
1059
-                                                              $("#smstables").empty();
1060
-                                                              $("#smstables").append('<img style="width:auto;height:auto" id="uploadedpng" src="'+ baseUrl +'" />');
1061
-                                                      } else if (extenlst == 'gif') {
1062
-                                                              $("#smstables").empty();
1063
-                                                              $("#smstables").append('<img style="width:auto;height:auto" id="uploadedgif" src="'+ baseUrl +'" />');
1064
-                                                      } else if (extenlst == 'bmp') {
1065
-                                                              $("#smstables").empty();
1066
-                                                              $("#smstables").append('<img style="width:auto;height:auto" id="uploadedbmp" src="'+ baseUrl +'" />');
1067
-                                                      } else if (extenlst == 'tif' || extenlst == 'tiff') {
1068
-                                                              var tiffile = '/remote.php/webdav/SMS_Relentless/temp_files/'+mmsfilenamesp;
1069
-                                                              var xhr = new XMLHttpRequest();
1070
-                                                              xhr.responseType = 'arraybuffer';
1071
-                                                              xhr.open('GET', tiffile);
1072
-                                                              xhr.onload = function (evnt) {
1073
-                                                                  var tiff = new Tiff({buffer: xhr.response});
1074
-                                                                  var tifcanvas = tiff.toCanvas();
1075
-                                                                  $("#smstables").empty();
1076
-                                                                  $("#smstables").append(tifcanvas);
1077
-                                                              };
1078
-                                                              xhr.send();
1079
-                                                      } else if (extenlst == 'pdf') {
1080
-                                                              var viewerclick = OC.generateUrl('/apps/files_pdfviewer/?file={file}', {file: baseUrl});
1081
-                                                              var $iframe = $('<iframe id="docclickview" style="width:100%;height:100%;display:block;position:absolute;top:0;left:0;z-index:1041;" src="' + viewerclick + '" sandbox="allow-scripts allow-same-origin allow-popups allow-modals"></iframe>');
1082
-                                                              $("#smstables").empty();
1083
-                                                              $("#smstables").append($iframe);
1084
-                                                      } else if (extenlst == 'txt') {
1085
-                                                              $("#smstables").empty();
1086
-                                                              $("#smstables").append(readtxtfile[mmsfilenamesp]);
1087
-                                                      } else if (extension == 'mp4') {
1088
-							      $("#smstables").empty();
1089
-							      $("#smstables").append('<video width="100%" height="auto" controls><source id="uploadedmp4" src="'+ baseUrl +'"></video>');
1090
-						      } else if (extension == 'ogg') {
1091
-							      $("#smstables").empty();
1092
-							      $("#smstables").append('<video width="100%" height="auto" controls><source id="uploadedogg" src="'+ baseUrl +'"></video>');
1093
-						      } else if (extension == 'avi') {
1094
-							      $("#smstables").empty();
1095
-							      $("#smstables").append('<video width="100%" height="auto" controls><source id="uploadedavi" src="'+ baseUrl +'" type="video/avi"></video>');
1096
-						      } else if (extension == 'mpg' || extension == 'mpeg') {
1097
-							      $("#smstables").empty();
1098
-							      $("#smstables").append('<video width="100%" height="auto" controls><source id="uploadedmpg" src="'+ baseUrl +'"></video>');
1099
-						      } else if (extension == 'wav' || extension == 'wave') {
1100
-							      $("#smstables").empty();
1101
-							      $("#smstables").append('<audio width="100%" height="auto" controls><source id="uploadedwav" src="'+ baseUrl +'"></audio>');
1102
-						      } else if (extension == 'mp3') {
1103
-							      $("#smstables").empty();
1104
-							      $("#smstables").append('<audio width="100%" height="auto" controls><source id="uploadedmp3" src="'+ baseUrl +'" type="audio/mp3"></audio>');
1105
-						      } else if (extension == 'midi') {
1106
-							      $("#smstables").empty();
1107
-							      $("#smstables").append('<audio width="100%" height="auto" controls><source id="uploadedmidi" src="'+ baseUrl +'" type="audio/midi"></audio>');
1108
-						      }
1109
-
1110
-
1111
-                                                      $("#smstables").show();
1112
-                                                      $("#mmsfoldersview").hide();
1113
-                                                   });
1114
-                                                });
1115
-
1116
-
1117
-                                                // Remove picked files
1118
-                                                $('[class*="indpckfldl"]').last().click(function() {
1119
-                                                    var userid = "<?php p($userId); ?>";
1120
-                                                    var baseUrl = OC.generateUrl("/apps/sms_relentless/user/removeupfile");
1121
-
1122
-                                                    var removedfilenameinit = $(this).closest('[class*="indgenpckfls"]').find('[class*="indivflpckd"]').text();
1123
-
1124
-                                                    var removedfilesplit = removedfilenameinit.split(") ");
1125
-                                                    var removedflnb = parseInt(removedfilesplit[0]);
1126
-
1127
-                                                    $(this).closest('[class*="indgenpckfls"]').find('[class*="indivflpckd"]').hide();
1128
-                                                    $(this).hide();
1129
-                                                    var removedfilename = removedfilenameinit.substring(removedfilenameinit.indexOf(" ") + 1);
1130
-
1131
-                                                    uploadedtomms = $.grep(uploadedtomms, function(value) {
1132
-                                                             return value != removedfilename;
1133
-                                                    });
1134
-
1135
-                                                    $.ajax({
1136
-                                                        url: baseUrl + '/' + userid,
1137
-                                                        type: "POST",
1138
-                                                        data: {removedfilename: removedfilename},
1139
-                                                        success: function(totalflsize) {
1140
-
1141
-                                                             msgtotalflsize = totalflsize;
1142
-                                                             $('#filessizetext').text(totalflsize);
1143
-                                                             adjustMaximumSize(uploadedtomms);
1144
-
1145
-                                                             // Check message size
1146
-                                                             var rectotfilesz = parseFloat(totalflsize);
1147
-
1148
-                                                             if (rectotfilesz > maximumsize) {
1149
-                                                                 $('#filestotsize').css('color', '#ba3555');
1150
-                                                                 alert("Error ! For "+ chosenProvFullName +", for the chosen files format, the size of all the included files plus the size of the text cannot exceed "+ maximumsize +" KB !");
1151
-                                                                 $('#submitsms').attr("disabled", true);
1152
-                                                             } else {
1153
-                                                                 $('#submitsms').attr("disabled", false);
1154
-                                                                 $('#filestotsize').css('color', '#189558');
1155
-                                                               }
1156
-
1157
-                                                             // Rewrite order numbers for files that follow
1158
-                                                             --n;
1159
-                                                             $("div:visible[id*='indflpicked']").each(function() {
1160
-
1161
-                                                                  var getdivtext =  $(this).text();
1162
-                                                                  var splitdivtext = getdivtext.split(") ");
1163
-                                                                  var currentnbvalue = parseInt(splitdivtext[0]);
1164
-                                                                  var newnbvalue = currentnbvalue - 1;
1165
-
1166
-                                                                  if (currentnbvalue > removedflnb) {
1167
-                                                                      var replacedstr = newnbvalue + ") " + splitdivtext[1];
1168
-                                                                      $(this).text(replacedstr);
1169
-                                                                  }
1170
-                                                             });
1171
-                                                        },
1172
-                                                        error: function() {
1173
-                                                             alert('Error !');
1174
-                                                        }
1175
-                                                    });
1176
-
1177
-                                                    $('#smstables').removeClass('icon-loading');
1178
-                                                    $("#smstables").empty();
1179
-                                                });
1180
-
1181
-
1182
-		                                // Preview the picked file
1183
-		                                $("#mmsfoldersview").css("display", "inline-block");
1184
-		                                var flUrl = firstPathEl+"/remote.php/webdav/SMS_Relentless/temp_files/"+mmsfilename;
1185
-		                                var pickUrl = OC.generateUrl("/apps/sms_relentless/user/getpickedfile");
1186
-
1187
-
1188
-						if (extension == 'jpg' || extension == 'jpeg') {
1189
-
1190
-		                                            $("#smstables").empty();
1191
-		                                            $("#smstables").append('<img style="width:auto;height:auto" id="uploadedjpg" src="'+ flUrl +'" />');
1192
-
1193
-		                                } else if (extension == 'png') {
1194
-
1195
-		                                            $("#smstables").empty();
1196
-		                                            $("#smstables").append('<img style="width:auto;height:auto" id="uploadedpng" src="'+ flUrl +'" />');
1197
-
1198
-		                                } else if (extension == 'gif') {
1199
-
1200
-		                                            $("#smstables").empty();
1201
-		                                            $("#smstables").append('<img style="width:auto;height:auto" id="uploadedgif" src="'+ flUrl +'" />');
1202
-
1203
-		                                } else if (extension == 'bmp') {
1204
-
1205
-	                                                    $("#smstables").empty();
1206
-		                                            $("#smstables").append('<img style="width:auto;height:auto" id="uploadedbmp" src="'+ flUrl +'" />');
1207
-
1208
-		                                } else if (extension == 'tif' || extension == 'tiff') {
1209
-
1210
-		                                       var tiffile = '/remote.php/webdav/SMS_Relentless/temp_files/'+mmsfilename;
1211
-		                                       var xhr = new XMLHttpRequest();
1212
-		                                       xhr.responseType = 'arraybuffer';
1213
-		                                       xhr.open('GET', tiffile);
1214
-		                                       xhr.onload = function (event) {
1215
-		                                           var tiff = new Tiff({buffer: xhr.response});
1216
-		                                           var tifcanvas = tiff.toCanvas();
1217
-		                                           $("#smstables").empty();
1218
-		                                           $("#smstables").append(tifcanvas);
1219
-		                                       };
1220
-		                                       xhr.send();
1221
-
1222
-		                                } else if (extension == 'pdf') {
1223
-
1224
-		                                       var viewer = OC.generateUrl('/apps/files_pdfviewer/?file={file}', {file: flUrl});
1225
-		                                       var $iframe = $('<iframe id="docviewer" style="width:100%;height:100%;display:block;position:absolute;top:0;left:0;z-index:1041;" src="' + viewer + '" sandbox="allow-scripts allow-same-origin allow-popups allow-modals"></iframe>');
1226
-		                                       $("#smstables").empty();
1227
-		                                       $("#smstables").append($iframe);
1228
-
1229
-		                                } else if (extension == 'txt') {
1230
-
1231
-							     $.get(flUrl, function(textdata) {
1232
-		                                               readtxtfile[mmsfilename] = textdata.replace(/(?:\r\n|\r|\n)/g, '<br>');
1233
-		                                               $("#smstables").empty();
1234
-							       $("#smstables").append(readtxtfile[mmsfilename]);
1235
-							     });
1236
-
1237
-		                                } else if (extension == 'mp4') {
1238
-						       $("#smstables").empty();
1239
-						       $("#smstables").append('<video width="100%" height="auto" controls><source id="uploadedmp4" src="'+ baseUrl +'"></video>');
1240
-						} else if (extension == 'ogg') {
1241
-						       $("#smstables").empty();
1242
-						       $("#smstables").append('<video width="100%" height="auto" controls><source id="uploadedogg" src="'+ baseUrl +'"></video>');
1243
-						} else if (extension == 'avi') {
1244
-						       $("#smstables").empty();
1245
-						       $("#smstables").append('<video width="100%" height="auto" controls><source id="uploadedavi" src="'+ baseUrl +'" type="video/avi"></video>');
1246
-						} else if (extension == 'mpg' || extension == 'mpeg') {
1247
-						       $("#smstables").empty();
1248
-						       $("#smstables").append('<video width="100%" height="auto" controls><source id="uploadedmpg" src="'+ baseUrl +'"></video>');
1249
-						} else if (extension == 'wav' || extension == 'wave') {
1250
-						       $("#smstables").empty();
1251
-						       $("#smstables").append('<audio width="100%" height="auto" controls><source id="uploadedwav" src="'+ baseUrl +'"></audio>');
1252
-						} else if (extension == 'mp3') {
1253
-						       $("#smstables").empty();
1254
-						       $("#smstables").append('<audio width="100%" height="auto" controls><source id="uploadedmp3" src="'+ baseUrl +'" type="audio/mp3"></audio>');
1255
-						} else if (extension == 'midi') {
1256
-						       $("#smstables").empty();
1257
-						       $("#smstables").append('<audio width="100%" height="auto" controls><source id="uploadedmidi" src="'+ baseUrl +'" type="audio/midi"></audio>');
1258
-						}
1259
-
1260
-
1261
-		                                $("#smstables").show();
1262
-
1263
-		                                $('#pf_choose_msg').hide();
1264
-		                                $('#smstables').removeClass('icon-loading');
1265
-		                                $("#mmsfoldersview").hide();
1266
-
1267
-                                          },
1268
-
1269
-                                          error: function(data){
1270
-                                             alert('Error!');
1271
-                                          }
1272
-
1273
-                                       });
1274
-
1275
-                                    } else {
1276
-                                        alert("Error ! You cannot send more than "+ maximumfilenumber +" files in one MMS message !");
1277
-                                        $('#pf_choose_msg').hide();
1278
-                                        $('#smstables').removeClass('icon-loading');
1279
-                                      }
1280
-                                 } else {
1281
-                                      alert("Error ! There is already a file named '"+ mmsfilename +"' in the 'SMS_Relentless/temp_files' folder !");
1282
-                                      $('#pf_choose_msg').hide();
1283
-                                      $('#smstables').removeClass('icon-loading');
1284
-                                   }
1285
-
1286
-                              } else {
1287
-                                   alert('The file type is not supported ! Supported extensions for '+ chosenProvFullName +' are: '+ validExtensions.join(", ") +'.');
1288
-                                   $('#pf_choose_msg').hide();
1289
-                                   $('#smstables').removeClass('icon-loading');
1290
-                                }
1291
-
1292
-                        }
1293
-                );
1294
-  });
1295
-
1296
-
1297
-
1298
-  // Send the SMS/MMS message
1299
-  $("#submitsms").on("click", function(event) {
1300
-
1301
-     if (isMMS == 0) { var sendingtype = 'SMS'; } else { var sendingtype = 'MMS'; }
1302
-     OC.msg.startAction("#sms_submit_msg", t("sms_relentless", "Sending "+ sendingtype +" ... Please wait !"));
1303
-     $("#sms_submit_msg").css("display", "inline-block");
1304
-     $('#smstables,#recSmsTable,#sentSmsTable').addClass('icon-loading');
1305
-
1306
-     if (selectedid != '') { 
1307
-
1308
-         var sendersplit = selectedid.split(":");
1309
-         var providercap = sendersplit[0];
1310
-         var provsec = sendersplit[1];
1311
-
1312
-         if (/[a-zA-Z]/.test(provsec)) {
1313
-             var alphanumcheck = true;
1314
-         } else { var alphanumcheck = false; }
1315
-
1316
-         if (providercap == 'Tx' && alphanumcheck == false) {  
1317
-             var senderproc = selectedid.replace(/[^0-9]/g, "");
1318
-             var selectedsender = "+" + senderproc;
1319
-             var providerUsed = "telnyx";
1320
-             var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstel");
1321
-         } else if (providercap == 'Pl' && alphanumcheck == false) {
1322
-             var selectedsender = selectedid.replace(/[^0-9]/g, "");
1323
-             var providerUsed = "plivo";
1324
-             var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsnex");
1325
-         } else if (providercap == 'Tw' && alphanumcheck == false) {  
1326
-             var senderproc = selectedid.replace(/[^0-9]/g, "");
1327
-             var selectedsender = "+" + senderproc;
1328
-             var providerUsed = "twilio";
1329
-             var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstwil");
1330
-         } else if (providercap == 'Fl' && alphanumcheck == false) {  
1331
-             var senderproc = selectedid.replace(/[^0-9]/g, "");
1332
-             var selectedsender = "+" + senderproc;
1333
-             var providerUsed = "flowroute";
1334
-             var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsflow");
1335
-         } else if (providercap == 'Tx' && alphanumcheck == true) {
1336
-             var selectedsender = provsec;
1337
-             var providerUsed = "telnyx";
1338
-             var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstel");
1339
-         } else if (providercap == 'Pl' && alphanumcheck == true) {
1340
-             var selectedsender = provsec;
1341
-             var providerUsed = "plivo";
1342
-             var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsnex");
1343
-         } else if (providercap == 'Tw' && alphanumcheck == true) {
1344
-             var selectedsender = provsec;
1345
-             var providerUsed = "twilio";
1346
-             var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstwil");
1347
-         } else if (providercap == 'Fl' && alphanumcheck == true) {
1348
-             var selectedsender = provsec;
1349
-             var providerUsed = "flowroute";
1350
-             var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsflow");
1351
-         }
1352
-
1353
-         // Get the interval between message consecutive sending requests, if it's the case
1354
-         if ($('#tomultchckbx').is(':checked')) {
1355
-
1356
-             var numbersfile = 1;
1357
-             var initinterval = $("#multsmsinterval").val();
1358
-             var secinterval = initinterval.replace(/[^0-9]/g, "");
1359
-
1360
-             if (secinterval != '') {
1361
-                 var tertinterval = parseInt(secinterval);
1362
-                     waittime = tertinterval;
1363
-             }
1364
-
1365
-         } else {
1366
-
1367
-             var numbersfile = 0;
1368
-             var toNumberinit = $('#smsto').val();
1369
-             var toNumber = toNumberinit.replace(/[^0-9,]/g, "");
1370
-             var toNumbersec = toNumber.split(",");
1371
-
1372
-                 for (var i = 0; i < toNumbersec.length; i++) {
1373
-                      toNumbersec[i] = "+" + toNumbersec[i];
1374
-                 }
1375
-
1376
-                 receiversNumbers = toNumbersec.filter(function(v){return v!==""});
1377
-         }
1378
-
1379
-         if (numbersfile == 0 && $('#smsto').val().trim() == '') { receiversNumbers.length = 0; }
1380
-
1381
-         var smstext = $("#smstext").val();
1382
-
1383
-         if (receiversNumbers.length != 0) {
1384
-
1385
-              if (smstext != '') {
1386
-                  $.ajax({
1387
-                     url: relbaseUrl + '/' + userid,
1388
-                     type: "POST",
1389
-                     data: {
1390
-                           receiversPhoneNbs: receiversNumbers,
1391
-                           fromsender: selectedsender,
1392
-                           waitinterval: waittime,
1393
-                           sentsmstext: smstext,
1394
-                           ismms: isMMS,
1395
-                           mmsfiles: uploadedtomms
1396
-                         },
1397
-                     success: function() {
1398
-
1399
-                           if (receiversNumbers.length == 1) {
1400
-                               alert("The message has been sent ! You can press the 'Sent SMS Messages' button to check the current status and the delivery receipt for this message. If they don't appear immediately, wait about 10 seconds and press the button again.");
1401
-                           } else { alert("The messages have been sent ! You can press the 'Sent SMS Messages' button to check the current status and the delivery receipt for each message. If they don't appear immediately, wait about 10 seconds and press the button again."); }
1402
-
1403
-                           $('#sms_submit_msg').hide();
1404
-                           $('#smstables,#recSmsTable,#sentSmsTable').removeClass('icon-loading');
1405
-                     },
1406
-                     error: function() {
1407
-                           alert("An error occurred! Please check the recipient's phone number and your settings !");
1408
-                           $('#sms_submit_msg').hide();
1409
-                           $('#smstables,#recSmsTable,#sentSmsTable').removeClass('icon-loading');
1410
-                     }
1411
-                  });
1412
-              } else {
1413
-                     alert("Please enter a message in the text box !");
1414
-                     $('#sms_submit_msg').hide();
1415
-                     $('#smstables,#recSmsTable,#sentSmsTable').removeClass('icon-loading');
1416
-              }
1417
-         } else if (receiversNumbers.length == 0 && !($('#tomultchckbx').is(':checked'))) {
1418
-                 alert("Please enter the recipient's phone number !");
1419
-                 $('#sms_submit_msg').hide();
1420
-                 $('#smstables,#recSmsTable,#sentSmsTable').removeClass('icon-loading');
1421
-         } else if (receiversNumbers.length == 0 && $('#tomultchckbx').is(':checked')) {
1422
-                 alert("Please upload a txt or csv file that contains phone numbers separated by commas, semicolons, vertical bars or new lines !");
1423
-                 $('#sms_submit_msg').hide();
1424
-                 $('#smstables,#recSmsTable,#sentSmsTable').removeClass('icon-loading');
1425
-         }
1426
-     } else {
1427
-           alert("Please choose a Sender ID from the Set ID drop-down list !");
1428
-           $('#smstables,#recSmsTable,#sentSmsTable').removeClass('icon-loading');
1429
-           $('#sms_submit_msg').hide();
1430
-     }
1431
-
1432
-  });
1433
-
1434
-  // Check the checkbox to delete old messages from the database
1435
-  $('#deleteoldchckbox').change(function() {
1436
-     if ($(this).is(':checked')) {
1437
-         $("#deleteoldsms").css("display", "block");
1438
-     } else {
1439
-         $("#deleteoldsms").css("display", "none");
1440
-     }
1441
-  });
1442
-
1443
-  // Set the height of 3 info notes
1444
-  $('#setcalleridtp').css('height', $(window).height() - 160);
1445
-  $('#tonmbrformat').css('height', $(window).height() - 260);
1446
-  $('#uploadfileinfo').css('height', $(window).height() - 390);
1447
-
1448
-  $(window).resize(function() { 
1449
-    $('#setcalleridtp').css('height', $(window).height() - 160);
1450
-    $('#tonmbrformat').css('height', $(window).height() - 260);
1451
-    $('#uploadfileinfo').css('height', $(window).height() - 390);
1452
-  });
1453
-
1454 0
deleted file mode 100644
... ...
@@ -1,656 +0,0 @@
1
-/**
2
- * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
3
- *
4
- * @author Double Bastion LLC
5
- *
6
- * @license GNU AGPL version 3 or any later version
7
- *
8
- * This program is free software; you can redistribute it and/or
9
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
10
- * License as published by the Free Software Foundation; either
11
- * version 3 of the License, or any later version.
12
- *
13
- * This program is distributed in the hope that it will be useful,
14
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
17
- *
18
- * You should have received a copy of the GNU Affero General Public
19
- * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
- *
21
- */
22
-
23
-$(document).ready(function() {
24
-
25
-  var userid = "<?php p($userId); ?>";
26
-  var strlength;
27
-
28
-  function randomStr(strlength) {
29
-        var fintext = "";
30
-        var keyspace = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
31
-        for (var i = 0; i < strlength; i++) {
32
-             fintext += keyspace.charAt(Math.floor(Math.random() * keyspace.length));
33
-        }
34
-        return fintext;
35
-  }
36
-
37
-  $("#generate_tel_rcpt").on("click", function(event) {
38
-
39
-     var teltokenrec = randomStr(70);
40
-     var telnyxwhurlrec = window.location.origin + OC.generateUrl('/apps/sms_relentless/api/recsmstel?telrecparam=') + teltokenrec;
41
-
42
-     $("#telapi_url_rec").val(telnyxwhurlrec);
43
-  });
44
-
45
-  $("#copyToClipboardtel").on("click", function(event) {
46
-     var $tempEl = $("<input>");
47
-     $("body").append($tempEl);
48
-     $tempEl.val($("#telapi_url_rec").val()).select();
49
-     document.execCommand("Copy");
50
-     $tempEl.remove();
51
-     alert("The link has been copied to your clipboard!");
52
-  });
53
-
54
-  $("#generate_tel_delrcpt").on("click", function(event) {
55
-
56
-     var teltoken = randomStr(70);
57
-     var telnyxwhurl = window.location.origin + OC.generateUrl('/apps/sms_relentless/api/recdeliverytel?teldrparam=') + teltoken;
58
-
59
-     $("#telapi_url").val(telnyxwhurl);
60
-  });
61
-
62
-
63
-  $("#generate_nex_rcpt").on("click", function(event) {
64
-
65
-     var plivotokenrec = randomStr(70);
66
-     var plivowhurlrec = window.location.origin + OC.generateUrl('/apps/sms_relentless/api/recsmsnex?plivorecparam=') + plivotokenrec;
67
-
68
-     $("#nexapi_url_rec").val(plivowhurlrec);
69
-  });
70
-
71
-  $("#copyToClipboardnex").on("click", function(event) {
72
-     var $tempElpl = $("<input>");
73
-     $("body").append($tempElpl);
74
-     $tempElpl.val($("#nexapi_url_rec").val()).select();
75
-     document.execCommand("Copy");
76
-     $tempElpl.remove();
77
-     alert("The link has been copied to your clipboard!");
78
-  });
79
-
80
-  $("#generate_nex_delrcpt").on("click", function(event) {
81
-
82
-     var plivotoken = randomStr(70);
83
-     var plivodrwhurl = window.location.origin + OC.generateUrl('/apps/sms_relentless/api/recdeliverynex?plivodrparam=') + plivotoken;
84
-
85
-     $("#nexapi_url").val(plivodrwhurl);
86
-  });
87
-
88
-
89
-  $("#generate_twil_rcpt").on("click", function(event) {
90
-
91
-     var twiltokenrec = randomStr(35);
92
-     var twilwhurlrec = window.location.origin + OC.generateUrl('/apps/sms_relentless/api/recsmstwil?twilrecparam=') + twiltokenrec;
93
-
94
-     $("#twilapi_url_rec").val(twilwhurlrec);
95
-  });
96
-
97
-  $("#copyToClipboardtwil").on("click", function(event) {
98
-     var $tempElpl = $("<input>");
99
-     $("body").append($tempElpl);
100
-     $tempElpl.val($("#twilapi_url_rec").val()).select();
101
-     document.execCommand("Copy");
102
-     $tempElpl.remove();
103
-     alert("The link has been copied to your clipboard!");
104
-  });
105
-
106
-  $("#generate_twil_delrcpt").on("click", function(event) {
107
-
108
-     var twiltoken = randomStr(35);
109
-     var twildrwhurl = window.location.origin + OC.generateUrl('/apps/sms_relentless/api/recdeliverytwil?twildrparam=') + twiltoken;
110
-
111
-     $("#twilapi_url").val(twildrwhurl);
112
-  });
113
-
114
-
115
-  $("#generate_flow_rcpt").on("click", function(event) {
116
-
117
-     var flowtokenrec = randomStr(70);
118
-     var flowwhurlrec = window.location.origin + OC.generateUrl('/apps/sms_relentless/api/recsmsflow?flowrecparam=') + flowtokenrec;
119
-
120
-     $("#flowapi_url_rec").val(flowwhurlrec);
121
-  });
122
-
123
-  $("#copyToClipboardflow").on("click", function(event) {
124
-     var $tempElpl = $("<input>");
125
-     $("body").append($tempElpl);
126
-     $tempElpl.val($("#flowapi_url_rec").val()).select();
127
-     document.execCommand("Copy");
128
-     $tempElpl.remove();
129
-     alert("The link has been copied to your clipboard!");
130
-  });
131
-
132
-  $("#generate_flow_delrcpt").on("click", function(event) {
133
-
134
-     var flowtoken = randomStr(70);
135
-     var flowdrwhurl = window.location.origin + OC.generateUrl('/apps/sms_relentless/api/recdeliveryflow?flowdrparam=') + flowtoken;
136
-
137
-     $("#flowapi_url").val(flowdrwhurl);
138
-  });
139
-
140
-
141
-  $("#save_sms_settings").on("click", function(event) {
142
-
143
-    event.preventDefault();
144
-    OC.msg.startAction('#smsr_save_msg', t('sms_relentless', 'Saved'));
145
-
146
-    var baseUrl = OC.generateUrl('/apps/sms_relentless/user/updatesettings');
147
-
148
-    var messagesperpageinit = $("#messagesperpage").val();
149
-    var messagesperpagesec = messagesperpageinit.replace(/[^0-9]/g, '');
150
-
151
-    if (messagesperpagesec != '') {
152
-        var messagesperpageproc = messagesperpagesec;
153
-    } else {
154
-        var messagesperpageproc = 100;
155
-    }
156
-
157
-    var getnotify = 0;
158
-
159
-    if ($("#get_notify").is(':checked')) {
160
-        getnotify = 1;
161
-    }
162
-
163
-    var emailaddressinit = $("#notification_email").val();
164
-
165
-    function validate_email($email) {
166
-        var email_reg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
167
-        return email_reg.test($email);
168
-    }
169
-
170
-    if (validate_email(emailaddressinit)) {
171
-         var notifyemail = emailaddressinit;
172
-    } else {
173
-         var notifyemail = '';
174
-    }
175
-
176
-    var telsenderinit = $("#tel_sender_name").val();
177
-    var telsenderproc = telsenderinit.replace(/[^A-Za-z 0-9]/g, '');
178
-
179
-    var nexsenderinit = $("#nex_sender_name").val();
180
-    var nexsenderproc = nexsenderinit.replace(/[^A-Za-z 0-9]/g, '');
181
-
182
-    var twilsenderinit = $("#twil_sender_name").val();
183
-    var twilsenderproc = twilsenderinit.replace(/[^A-Za-z 0-9]/g, '');
184
-
185
-    var includesmsinemail = 0;
186
-    if ($("#includesmsinemail").is(':checked')) {
187
-        includesmsinemail = 1;
188
-    }
189
-
190
-    var showdisplaynm = 0;
191
-    if ($("#showdisplaynames").is(':checked')) {
192
-        showdisplaynm = 1;
193
-    }
194
-
195
-    var datatosave = {
196
-                      userId: userid,
197
-                      telapiKey: $("#telapi_key").val(),
198
-                      telPubKey: $("#tel_pub_key").val(),
199
-                      telapiUrlRec: $("#telapi_url_rec").val(),
200
-                      telapiUrl: $("#telapi_url").val(),
201
-                      messagingProfileId: $("#messaging_profile_id").val(),
202
-                      nexapiKey: $("#nexapi_key").val(),
203
-                      nexapiSecret: $("#nexapi_secret").val(),
204
-                      nexapiUrlRec: $("#nexapi_url_rec").val(),
205
-                      nexapiUrl: $("#nexapi_url").val(),
206
-                      twilapiKey: $("#twilapi_key").val(),
207
-                      twilapiSecret: $("#twilapi_secret").val(),
208
-                      twilapiUrlRec: $("#twilapi_url_rec").val(),
209
-                      twilapiUrl: $("#twilapi_url").val(),
210
-                      flowapiKey: $("#flowapi_key").val(),
211
-                      flowapiSecret: $("#flowapi_secret").val(),
212
-                      flowapiUrlRec: $("#flowapi_url_rec").val(),
213
-                      flowapiUrl: $("#flowapi_url").val(),
214
-                      telSenderName: telsenderproc,
215
-                      nexSenderName: nexsenderproc,
216
-                      twilSenderName: twilsenderproc,
217
-                      messagesperpage: messagesperpageproc,
218
-                      getNotify: getnotify,
219
-                      notificationEmail: notifyemail,
220
-                      getsmsinemail: includesmsinemail,
221
-                      showDisplayNames: showdisplaynm
222
-    };
223
-
224
-
225
-    $.ajax({
226
-       method: 'PUT',
227
-       url: baseUrl + '/' + userid,
228
-       contentType: 'application/json',
229
-       data: JSON.stringify(datatosave),
230
-       success: function() {
231
-       },
232
-       error: function() {
233
-            alert('Error while attempting to save the settings! You can check the Nextcloud log to find more details about this issue.');
234
-       }
235
-    });
236
-
237
-  });
238
-
239
-
240
-  var baseUrlget = OC.generateUrl('/apps/sms_relentless/user/getsettings');
241
-
242
-  $.ajax({
243
-     method: 'GET',
244
-     url: baseUrlget + '/' + userid,
245
-     contentType: 'application/json',
246
-     success: function(settingsfromdb) {
247
-         $("#telapi_key").val(settingsfromdb.telapi_key);
248
-         $("#tel_pub_key").val(settingsfromdb.tel_pub_key);
249
-         $("#telapi_url_rec").val(settingsfromdb.telapi_url_rec);
250
-         $("#telapi_url").val(settingsfromdb.telapi_url);
251
-         $("#messaging_profile_id").val(settingsfromdb.messaging_profile_id);
252
-         $("#nexapi_key").val(settingsfromdb.nexapi_key);
253
-         $("#nexapi_secret").val(settingsfromdb.nexapi_secret);
254
-         $("#nexapi_url_rec").val(settingsfromdb.nexapi_url_rec);
255
-         $("#nexapi_url").val(settingsfromdb.nexapi_url);
256
-         $("#twilapi_key").val(settingsfromdb.twilapi_key);
257
-         $("#twilapi_secret").val(settingsfromdb.twilapi_secret);
258
-         $("#twilapi_url_rec").val(settingsfromdb.twilapi_url_rec);
259
-         $("#twilapi_url").val(settingsfromdb.twilapi_url);
260
-         $("#flowapi_key").val(settingsfromdb.flowapi_key);
261
-         $("#flowapi_secret").val(settingsfromdb.flowapi_secret);
262
-         $("#flowapi_url_rec").val(settingsfromdb.flowapi_url_rec);
263
-         $("#flowapi_url").val(settingsfromdb.flowapi_url);
264
-         $("#tel_sender_name").val(settingsfromdb.tel_sender_name);
265
-         $("#nex_sender_name").val(settingsfromdb.nex_sender_name);
266
-         $("#twil_sender_name").val(settingsfromdb.twil_sender_name);
267
-         $("#messagesperpage").val(settingsfromdb.messagesperpage);
268
-
269
-         if (settingsfromdb.get_notify == 1) {
270
-             $("#get_notify").attr('checked', true);
271
-         } else {
272
-             $("#get_notify").attr('checked', false);
273
-         }
274
-
275
-         $("#notification_email").val(settingsfromdb.notification_email);
276
-
277
-         if (settingsfromdb.getsmsinemail == 1) {
278
-             $("#includesmsinemail").attr('checked', true);
279
-         } else {
280
-             $("#includesmsinemail").attr('checked', false);
281
-         }
282
-
283
-         if (settingsfromdb.show_display_names == 1) {
284
-             $("#showdisplaynames").attr('checked', true);
285
-         } else {
286
-             $("#showdisplaynames").attr('checked', false);
287
-         }
288
-
289
-
290
-         // Auto-reply settings
291
-
292
-         // Get the available phone numbers from all providers associated with the access keys entered on the Settings page (restrictions are applied to numbers for non-admins)
293
-         $("#autoRplPhoneNb").addClass('icon-loading');
294
-         var getnumbersUrl = OC.generateUrl("/apps/sms_relentless/user/getautoreplyconf");
295
-
296
-	 $.ajax({
297
-		  url: getnumbersUrl + '/' + userid,
298
-		  type: "GET",
299
-                  contentType: 'application/json',
300
-		  success: function(autoreplydata) {
301
-
302
-                                    $("#autoRplPhoneNb").removeClass('icon-loading');
303
-                                    var cusrDisplayName = autoreplydata.userdisplayname;
304
-                                    var availPhoneNmbrs = autoreplydata.phonenumbers;
305
-                                    var autorpldata = autoreplydata.autoreplies;
306
-
307
-				    if (autorpldata.length > 0) { 
308
-				        var arplNmb = autorpldata.length;
309
-				    } else { 
310
-				        var arplNmb = 0; 
311
-				    }
312
-
313
-				    // List the auto-replies for the phone numbers available for the current user
314
-				    if (arplNmb == 0) {
315
-
316
-				        $("#autoReplyTbl").append("<tr><td><input type='text' class='arplAuthor' value='"+ cusrDisplayName +"' disabled></td><td><select id='arpphn-"+ arplNmb +"' class='arplPhoneNmbr'></select></td><td><div id='arplmode-"+ arplNmb +"' class='arplMode'><select id='modeselect-"+ arplNmb +"' class='selectArplMode'><option value='' selected>Select mode</option><option value='daily'>Daily mode</option><option value='vacation'>Vacation mode</option></select><div id='modecont-"+ arplNmb +"' class='modeContent'></div></div></td><td><textarea id='arpltxt-"+ arplNmb +"' class='arplText' rows='20' cols='40' placeholder='Enter the auto-reply message here.'></textarea></td><td><img id='rmRow-"+ arplNmb +"' class='removeRow' src='/core/img/actions/close.svg' title='Remove this row from the database' style='cursor:pointer;margin:9px 8px 0px 18px;'></td><td><input type='submit' id='arplsave-"+ arplNmb +"' class='saveAutoReply' value='Save' title='Save Row' /></td></tr>");
317
-				        $("#autoReplyTbl").append("<div><img id='addArplRow' src='/core/img/actions/add.svg' title='Add Row'></div>");
318
-
319
-				    } else {
320
-
321
-				        for (k = 0; k < arplNmb; k++) {
322
-
323
-                                             if (autorpldata[k].days_of_week != '') {
324
-
325
-                                                 var slctdMode = "<option value=''>Select mode</option><option value='daily' selected>Daily mode</option><option value='vacation'>Vacation mode</option>";
326
-                                                 var dailyStartArr = autorpldata[k].daily_start.split(":");
327
-                                                 var dailyEndArr = autorpldata[k].daily_end.split(":");
328
-
329
-		                                 var dlHrStartOptions = "";
330
-			                         for (var hr = 0; hr < 24; hr++) {
331
-		                                      if (dailyStartArr[0] != hr.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false})) {
332
-			                                  dlHrStartOptions += "<option value='"+ hr.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false}) +"'>"+ hr.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false}) +"</option>";
333
-		                                      } else {
334
-			                                  dlHrStartOptions += "<option value='"+ hr.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false}) +"' selected>"+ hr.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false}) +"</option>";
335
-		                                      }
336
-			                         }
337
-
338
-		                                 var dlMnStartOptions = "";
339
-			                         for (var mn = 0; mn < 24; mn++) {
340
-		                                      if (dailyStartArr[1] != hr.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false})) {
341
-			                                  dlMnStartOptions += "<option value='"+ mn.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false}) +"'>"+ mn.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false}) +"</option>";
342
-		                                      } else {
343
-			                                  dlMnStartOptions += "<option value='"+ mn.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false}) +"' selected>"+ mn.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false}) +"</option>";
344
-		                                      }
345
-			                         }
346
-
347
-		                                 var dlHrEndOptions = "";
348
-			                         for (var hr = 0; hr < 24; hr++) {
349
-		                                      if (dailyEndArr[0] != hr.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false})) {
350
-			                                  dlHrEndOptions += "<option value='"+ hr.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false}) +"'>"+ hr.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false}) +"</option>";
351
-		                                      } else {
352
-			                                  dlHrEndOptions += "<option value='"+ hr.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false}) +"' selected>"+ hr.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false}) +"</option>";
353
-		                                      }
354
-			                         }
355
-
356
-		                                 var dlMnEndOptions = "";
357
-			                         for (var mn = 0; mn < 24; mn++) {
358
-		                                      if (dailyEndArr[1] != hr.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false})) {
359
-			                                  dlMnEndOptions += "<option value='"+ mn.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false}) +"'>"+ mn.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false}) +"</option>";
360
-		                                      } else {
361
-			                                  dlMnEndOptions += "<option value='"+ mn.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false}) +"' selected>"+ mn.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false}) +"</option>";
362
-		                                      }
363
-			                         }
364
-
365
-                                                 var modeContent = "<div class='daysOfWeek'>Days of the week:<div class='tooltipautoreply'><div id='infoautoreply'>i</div><div class='autorpltooltip'>Enter the order number of the days of the week in which the auto-reply will be sent. For example, to send the auto-reply every day from Monday to Friday (outside the time interval specified below), enter 1,2,3,4,5 To send the auto-reply only Monday, Thursday and Friday enter 1,4,5 To send the auto-reply every day of the week enter 1,2,3,4,5,6,7</div></div></div><input type='text' id='weekdays-"+ k +"' class='daysInWeek' value='"+ autorpldata[k].days_of_week +"'><div class='chooseTInterval'>Send auto-reply <span style='color:#ad0202'>outside</span> this interval:<div class='tooltipautoreplyst'><div id='infoautoreplyst'>i</div><div class='autorpltooltipst'>These fields specify the time of the server. If the server is located in a time zone that is different from that of the owner/company, the time interval entered here should be adjusted accordingly.</div></div></div><div class='selectArplHours'><select id='dmstarthr-"+ k +"' class='selectHrMin'>"+ dlHrStartOptions +"</select><select id='dmstartmn-"+ k +"' class='selectHrMin'>"+ dlMnStartOptions +"</select><span style='font-weight: 600'> — </span><select id='dmendhr-"+ k +"' class='selectHrMin'>"+ dlHrEndOptions +"</select><select id='dmendmn-"+ k +"' class='selectHrMin'>"+ dlMnEndOptions +"</select></div>";
366
-
367
-                                             } else {
368
-
369
-                                                 var vctnStart = autorpldata[k].vacation_start.split(" ")[0];
370
-                                                 var vctnEnd = autorpldata[k].vacation_end.split(" ")[0];
371
-
372
-                                                 var slctdMode = "<option value=''>Select mode</option><option value='daily'>Daily mode</option><option value='vacation' selected>Vacation mode</option>";
373
-                                                 var modeContent = "<div class='chooseDateIntvl'>Send auto-reply <span style='color:#ad0202'>inside</span> this interval:</div><div class='arplstrtendDates'><div class='stdtTitle'>Start Date</div><input type='text' id='startDT-"+ k +"' class='startDate' placeholder='Pick a date' value='"+ vctnStart +"'><div class='enddtTitle'>End Date</div><input type='text' id='endDT-"+ k +"' class='endDate' placeholder='Pick a date' value='"+ vctnEnd +"'></div>"
374
-                                             }
375
-
376
-				             $("#autoReplyTbl").append("<tr><td><input type='text' class='arplAuthor' value='"+ autorpldata[k].saved_by_dsplname +"' disabled></td><td><select id='arpphn-"+ k +"' class='arplPhoneNmbr' style='pointer-events:none'><option selected>"+ autorpldata[k].phone_number +"</option></select></td><td><div id='arplmode-"+ k +"' class='arplMode'><select id='modeselect-"+ k +"' class='selectArplMode'>"+ slctdMode +"</select><div id='modecont-"+ k +"' class='modeContent'>"+ modeContent +"</div></div></td><td><textarea id='arpltxt-"+ k +"' class='arplText' rows='20' cols='40' placeholder='Enter the auto-reply message here.'>"+ autorpldata[k].message_text +"</textarea></td><td><img id='rmRow-"+ k +"' class='removeRow' src='/core/img/actions/close.svg' title='Remove this row from the database' style='cursor:pointer;margin:9px 8px 0px 18px;'></td><td><input type='submit' id='arplsave-"+ k +"' class='saveAutoReply' value='Edit' title='Edit Row' /></td></tr>");
377
-				        }
378
-				        $("#autoReplyTbl").append("<div><img id='addArplRow' src='/core/img/actions/add.svg' title='Add Row'></div>");
379
-				    }
380
-
381
-
382
-				    // Create a list with all the available phone numbers
383
-                                    var numbersListItems = "<option value='' selected>Select phone number</option>";
384
-
385
-				    $.each(availPhoneNmbrs, function(key, indsmsnmb) {
386
-					 var emptyinit = indsmsnmb.split(":");
387
-					 var emptysec = emptyinit[1];
388
-					 var emptycheck = emptysec.replace(" ", "").replace("+", "");
389
-
390
-					 if (emptycheck != '') {
391
-					     numbersListItems += "<option value='"+ indsmsnmb +"'>"+ indsmsnmb +"</option>";
392
-					 }
393
-				    });
394
-
395
-                                    if (arplNmb == 0) {
396
-				        $("#arpphn-"+ arplNmb).append(numbersListItems);
397
-                                    }
398
-
399
-                                    // Initialize the date picker
400
-			            $('[id^="endDT-"]').datepicker({ dateFormat: "yy-mm-dd" });
401
-			            $('[id^="startDT-"]').datepicker({ dateFormat: "yy-mm-dd" });
402
-
403
-
404
-                                    // Select the auto-reply mode
405
-                                    function selectMode() {
406
-
407
-		                            $('[id^="modeselect-"]').change(function() {
408
-
409
-		                               var crtnmbr = $(this).attr("id").replace("modeselect-", "");
410
-
411
-		                               var dailyHrStart = "";
412
-		                               for (var h = 0; h < 24; h++) {
413
-		                                    dailyHrStart += "<option value='"+ h.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false}) +"'>"+ h.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false}) +"</option>";
414
-		                               }
415
-
416
-		                               var dailyMnStart = "";
417
-		                               for (var m = 0; m < 60; m++) {
418
-		                                    dailyMnStart += "<option value='"+ m.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false}) +"'>"+ m.toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping:false}) +"</option>";
419
-		                               }
420
-
421
-		                               var dailyHrEnd = dailyHrStart;
422
-		                               var dailyMnEnd = dailyMnStart;
423
-
424
-		                               if ($(this).val() == 'daily') {
425
-		                                   $("#modecont-"+ crtnmbr).empty();
426
-		                                   $("#modecont-"+ crtnmbr).append("<div class='daysOfWeek'>Days of the week:<div class='tooltipautoreply'><div id='infoautoreply'>i</div><div class='autorpltooltip'>Enter the order number of the days of the week. For example, to send the auto-reply every day from Monday to Friday outside the specified time interval, enter 1,2,3,4,5 To send the auto-reply only Monday, Thursday and Friday enter 1,4,5 To send the auto-reply every day of the week enter 1,2,3,4,5,6,7</div></div></div><input type='text' id='weekdays-"+ crtnmbr +"' class='daysInWeek'><div class='chooseTInterval'>Send auto-reply <span style='color:#ad0202'>outside</span> this interval:<div class='tooltipautoreplyst'><div id='infoautoreplyst'>i</div><div class='autorpltooltipst'>These fields specify the time of the server. If the server is located in a time zone that is different from that of the owner/company, the time interval entered here should be adjusted accordingly.</div></div></div><div class='selectArplHours'><select id='dmstarthr-"+ crtnmbr +"' class='selectHrMin'>"+ dailyHrStart +"</select><select id='dmstartmn-"+ crtnmbr +"' class='selectHrMin'>"+ dailyMnStart +"</select><span style='font-weight: 600'> — </span><select id='dmendhr-"+ crtnmbr +"' class='selectHrMin'>"+ dailyHrEnd +"</select><select id='dmendmn-"+ crtnmbr +"' class='selectHrMin'>"+ dailyMnEnd +"</select></div>");
427
-		                               } else if ($(this).val() == 'vacation') {
428
-		                                   $("#modecont-"+ crtnmbr).empty();
429
-		                                   $("#modecont-"+ crtnmbr).append("<div class='chooseDateIntvl'>Send auto-reply <span style='color:#ad0202'>inside</span> this interval:</div><div class='arplstrtendDates'><div class='stdtTitle'>Start Date</div><input type='text' id='startDT-"+ crtnmbr +"' class='startDate' placeholder='Pick a date'><div class='enddtTitle'>End Date</div><input type='text' id='endDT-"+ crtnmbr +"' class='endDate' placeholder='Pick a date' /></div>");
430
-		                               }
431
-
432
-					       $("#endDT-"+ crtnmbr +"").datepicker({ dateFormat: "yy-mm-dd" });
433
-					       $("#startDT-"+ crtnmbr +"").datepicker({ dateFormat: "yy-mm-dd" });
434
-		                          });
435
-                                  }
436
-                                  selectMode();
437
-
438
-				  // Save the data
439
-				  function saveArplRow() {
440
-
441
-				     $('[id^="arplsave-"]').unbind("click");
442
-				     $('[id^="arplsave-"]').click(function(event) {
443
-
444
-				        event.preventDefault();
445
-				        var crntrwnmbr = $(this).attr("id").replace("arplsave-", "");
446
-
447
-				        if ($(this).attr("value") == "Save") {
448
-
449
-				            var phoneNmbr = $("#arpphn-"+ crntrwnmbr).val();
450
-				            var arplText = $("#arpltxt-"+ crntrwnmbr).val();
451
-				            var slctdMode = $("#modeselect-"+ crntrwnmbr).val();
452
-
453
-				            var slctddmDays = "";
454
-				            var slctdHrStart = "";
455
-				            var slctdMnStart = "";
456
-				            var slctdHrEnd = "";
457
-				            var slctdMnEnd = "";
458
-
459
-				            var vcStartDate = null;
460
-				            var vcEndDate = null;
461
-
462
-				            if (slctdMode == 'daily') {
463
-
464
-				                slctddmDays = $("#weekdays-"+ crntrwnmbr).val().trim();
465
-				                slctdHrStart = $("#dmstarthr-"+ crntrwnmbr).val().trim();
466
-				                slctdMnStart = $("#dmstartmn-"+ crntrwnmbr).val().trim();
467
-				                slctdHrEnd = $("#dmendhr-"+ crntrwnmbr).val().trim();
468
-				                slctdMnEnd = $("#dmendmn-"+ crntrwnmbr).val().trim();
469
-
470
-                                                if (slctdHrStart != '' && slctdMnStart != '') {
471
-                                                    var hrmnStartComp = slctdHrStart +":"+ slctdMnStart;
472
-                                                } else { var hrmnStartComp = ""; }
473
-
474
-                                                if (slctdHrEnd != '' && slctdMnEnd != '') {
475
-                                                    var hrmnEndComp = slctdHrEnd +":"+ slctdMnEnd;
476
-                                                } else { var hrmnEndComp = ""; }
477
-
478
-                                                if (!(/^[1-7\,]+$/.test(slctddmDays))) {
479
-				                    alert("The 'Days of the week' field can contain only digits from 1 to 7 and commas (,).");
480
-				                    return;
481
-                                                }
482
-
483
-                                                if (!(/^[0-9]+$/.test(slctdHrStart + slctdMnStart + slctdHrEnd + slctdMnEnd))) {
484
-				                    alert("The starting and ending values of the time interval for the 'Daily mode' can contain only digits from 0 to 9.");
485
-				                    return;
486
-                                                }
487
-
488
-                                                if (slctddmDays.trim() == '' || (slctdHrStart == slctdHrEnd && slctdMnStart == slctdMnEnd)) {
489
-				                    alert("For the 'Daily mode', you have to enter the order number of the days of the week for which you want the auto-reply to be sent, and you have to set a starting time that is different from the ending time!");
490
-				                    return;
491
-                                                }
492
-
493
-				            } else if (slctdMode == 'vacation') {
494
-		
495
-                                                if ($("#startDT-"+ crntrwnmbr).val().trim() == '' || $("#endDT-"+ crntrwnmbr).val().trim() == '') {
496
-
497
-				                    alert("For the 'Vacation mode', you have to enter both a start date and an end date.");
498
-				                    return;
499
-
500
-                                                } else {
501
-
502
-                                                    if (!(/^[0-9\-]+$/.test($("#startDT-"+ crntrwnmbr).val().trim() + $("#endDT-"+ crntrwnmbr).val().trim()))) {
503
-				                        alert("The start date and end date values for the 'Vacation mode' can contain only digits from 0 to 9 and hyphens (-).");
504
-				                        return;
505
-                                                    }
506
-
507
-		                                    vcStartDate = $("#startDT-"+ crntrwnmbr).val().trim() +" 00:00:00";
508
-				                    vcEndDate = $("#endDT-"+ crntrwnmbr).val().trim() +" 23:59:59";
509
-				                    var strtDateCmp = new Date(vcStartDate).toJSON().slice(0, 10) +" 00:00:00";
510
-				                    var endDateCmp = new Date(vcEndDate).toJSON().slice(0, 10) +" 23:59:59";
511
-				                    var crntDate = new Date().toJSON().slice(0, 10) +" 23:59:59";
512
-
513
-                                                    if (vcStartDate.trim() == "" || vcEndDate.trim() == "" || (strtDateCmp >= endDateCmp || ((strtDateCmp < crntDate) && (endDateCmp < crntDate)))) {
514
-				                        alert("For 'Vacation mode', you have to enter both a start date and an end date, the start date must be before the end date and at least the ending of the time interval must be in the future.");
515
-				                        return;
516
-                                                    }
517
-                                                }
518
-				            }
519
-
520
-
521
-				            if (phoneNmbr != '') {
522
-
523
-				              if (arplText.trim() != '') {
524
-
525
-				                if (slctdMode != '') {
526
-
527
-				                    var saveArplUrl = OC.generateUrl('/apps/sms_relentless/user/updateautoreplies');
528
-				                    var arpldata = {
529
-				                         userId: userid,
530
-				                         savedByDsplname: cusrDisplayName,
531
-				                         phoneNumber: phoneNmbr,
532
-				                         daysOfWeek: slctddmDays,
533
-				                         dailyStart: hrmnStartComp,
534
-				                         dailyEnd: hrmnEndComp,
535
-				                         vacationStart: vcStartDate,
536
-				                         vacationEnd: vcEndDate,
537
-				                         messageText: arplText
538
-				                    };
539
-
540
-					            $.ajax({
541
-					              method: 'PUT',
542
-					              url: saveArplUrl + '/' + userid,
543
-					              contentType: 'application/json',
544
-					              data: JSON.stringify(arpldata),
545
-				                      success: function(messagereceived) {
546
-
547
-				                                   if (messagereceived == 'success') {
548
-				                                       alert('The auto-reply has been successfully saved to the database!');
549
-				                                   } else if (messagereceived == 'failure') {
550
-				                                       alert('Error while trying to save the auto-reply!');
551
-				                                   } else if (messagereceived == 'not allowed') {
552
-                                                                       alert('You cannot change an auto-reply that was saved by a different user.');
553
-                                                                   }
554
-				                      },
555
-					              error: function() {
556
-						                   alert('Error while attempting to save the auto-reply! You can check the Nextcloud log to find more details about this issue.');
557
-					              }
558
-					            });
559
-
560
-
561
-                                                } else { alert("Please select the auto-reply mode."); return; }
562
-
563
-                                              } else { alert("Please enter the text of the auto-reply."); return; }
564
-
565
-                                            } else { alert("Please select a phone number if at least one number is available in the 'Phone Number' drop-down list. Otherwise, you should contact the administrator."); return; }
566
-
567
-                                            $(this).attr("value", "Edit");
568
-
569
-                                        } else {
570
-                                            $("#arplsave-"+ crntrwnmbr).attr("value", "Save");
571
-                                        }
572
-
573
-                                     });
574
-
575
-				  }
576
-                                  saveArplRow();
577
-
578
-
579
-				  // Remove a row
580
-				  function removeArplRow() {
581
-				       $('[id^="rmRow-"]').click(function() {
582
-
583
-					  var slctRowRm = $(this).attr("id").replace("rmRow-", "");
584
-					  var crntPhnNmbr = $("#arpphn-"+ slctRowRm).val();
585
-
586
-					  if (confirm("Do you really want to remove this row from the database ?")) {
587
-
588
-					      var rmvArplUrl = OC.generateUrl('/apps/sms_relentless/user/removeautoreplies');
589
-					      $.ajax({
590
-						   url: rmvArplUrl + '/' + userid,
591
-						   method: "POST",
592
-						   dataType: "text",
593
-						   data: { phoneNumber: crntPhnNmbr },
594
-						   success: function(delresult) {
595
-
596
-						                     if (delresult.indexOf("success") > -1) {
597
-						                         alert("The auto-reply has been removed successfully!");
598
-						                         $("#arpphn-"+ slctRowRm).closest("tr").remove();
599
-						                     } else if (delresult.indexOf("failure") > -1) {
600
-						                         alert("Error while trying to remove auto-reply data!");
601
-						                     } else if (delresult.indexOf("not allowed") > -1) {
602
-                                                                         alert("You cannot remove the auto-reply saved by another user.");
603
-                                                                     }
604
-						   },
605
-						   error: function() { alert("Error while attempting to remove auto-reply data! You can check the Nextcloud log to find more details about this issue."); }
606
-					       });
607
-					  }
608
-				       });
609
-				  }
610
-				  removeArplRow();
611
-
612
-                                  // Add new row
613
-                                  $("#addArplRow").click(function() {
614
-
615
-                                     if ($("#autoReplyTbl").find("tr:last-child").find(".arplPhoneNmbr").length > 0) {
616
-                                         var lastarpl = $("#autoReplyTbl").find("tr:last-child").find(".arplPhoneNmbr").attr("id").replace("arpphn-", "");
617
-                                         var indArplAdd = parseInt(lastarpl + 1);
618
-                                     } else { var indArplAdd = 0; }
619
-			             $("#autoReplyTbl").append("<tr><td><input type='text' class='arplAuthor' value='"+ cusrDisplayName +"' disabled></td><td><select id='arpphn-"+ indArplAdd +"' class='arplPhoneNmbr'>"+ numbersListItems +"</select></td><td><div id='arplmode-"+ indArplAdd +"' class='arplMode'><select id='modeselect-"+ indArplAdd +"' class='selectArplMode'><option value='' selected>Select mode</option><option value='daily'>Daily mode</option><option value='vacation'>Vacation mode</option></select><div id='modecont-"+ indArplAdd +"' class='modeContent'></div></div></td><td><textarea id='arpltxt-"+ indArplAdd +"' class='arplText' rows='20' cols='40' placeholder='Enter the auto-reply message here.'></textarea></td><td><img id='rmRow-"+ indArplAdd +"' class='removeRow' src='/core/img/actions/close.svg' title='Remove this row from the database' style='cursor:pointer;margin:9px 8px 0px 18px;'></td><td><input type='submit' id='arplsave-"+ indArplAdd +"' class='saveAutoReply' value='Save' title='Save Row' /></td></tr>");
620
-
621
-                                     selectMode();
622
-                                     saveArplRow();
623
-                                     removeArplRow();
624
-
625
-			             // Check if there is an auto-reply set for the same phone number
626
-				     $("#arpphn-"+ indArplAdd).change(function() {
627
-					 var selectedPhNb = $("#arpphn-"+ indArplAdd).val();
628
-					 var allArplPhNmbrs = $("#autoReplyTbl").find("tr").find(".arplPhoneNmbr");
629
-					 var phNbChck = 0;
630
-					 allArplPhNmbrs.each(function() {
631
-					    var slctphnb = ($(this).val())? $(this).val() : $(this).text();
632
-					    if (selectedPhNb == slctphnb) { phNbChck++; }
633
-					 });
634
-
635
-					 if (phNbChck == 2) {
636
-					     alert("There is already an auto-reply set up for this phone number. Please edit its own row, or choose a different phone number.");
637
-					     $(this).val('');
638
-					     return;
639
-					 }
640
-				     });
641
-                                  });
642
-
643
-		  },
644
-		  error: function() {
645
-                                    $("#autoRplPhoneNb").removeClass('icon-loading'); 
646
-                                    alert("Error while attempting to get the auto-reply settings! You can check the Nextcloud log to find more details about this issue.");
647
-                  }
648
-         });
649
-
650
-     },
651
-     error: function() {
652
-                  alert('Error while getting the settings! You can check the Nextcloud log to find more details about this issue.');
653
-     }
654
-  });
655
-
656
-});
657 0
deleted file mode 100644
... ...
@@ -1,2803 +0,0 @@
1
-/**
2
- * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
3
- *
4
- * @author Double Bastion LLC
5
- *
6
- * @license GNU AGPL version 3 or any later version
7
- *
8
- * This program is free software; you can redistribute it and/or
9
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
10
- * License as published by the Free Software Foundation; either
11
- * version 3 of the License, or any later version.
12
- *
13
- * This program is distributed in the hope that it will be useful,
14
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
17
- *
18
- * You should have received a copy of the GNU Affero General Public
19
- * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
- *
21
- */
22
-
23
-$(document).ready(function() {
24
-
25
-  var userid = "<?php p($userId); ?>";
26
-  var parseddata = null;
27
-  var sentparseddata = null;
28
-  var groupedparsed = null;
29
-  // Set the default number of messages per page
30
-  var messagesperpage = 100;
31
-
32
-  // Get the number of messages per page from the database
33
-  var getNoPerPageUrl = OC.generateUrl("/apps/sms_relentless/user/getmessagesperpage");
34
-
35
-  $.ajax({
36
-        url: getNoPerPageUrl + '/' + userid,
37
-        method: 'GET',
38
-        success: function(mesperpagedb) {
39
-                 messagesperpage = parseInt(mesperpagedb);
40
-
41
-        },
42
-        error: function(mesperpagedb) {
43
-               alert("An error occurred. Please check your settings!");
44
-        }
45
-  });
46
-
47
-  // List received messages
48
-  $("#receivedsmstableshow").on("click", function(event) {
49
-
50
-     $('#smstables').empty();
51
-     var getReceivedUrl = OC.generateUrl("/apps/sms_relentless/user/getreceivedtable");
52
-
53
-     $('#smstables').addClass('icon-loading');
54
-
55
-     $.ajax({
56
-          url: getReceivedUrl + '/' + userid,
57
-          method: 'GET',
58
-          contentType: 'application/json',
59
-          success: function(parseddata) {
60
-
61
-                $('#smstables').append("<div id='toptablerec'><div class='topbuttonandpage'><span id='recarrow' title='Show/Hide filters and Delete button'></span></div><div id='paginationrec' class='recpages'>Pages </div></div>");
62
-                $('#smstables').append("<table id='recSmsTable'></table>");
63
-
64
-                $('#recSmsTable').append("<tr id='recfiltersrow'><td class='selectalldvfilter'><button id='clearrecfilters' title='Clear all filters.'></button><button id='deleterecrows' title='Permanently delete the selected row(s) from below from the database.'></button></td><td class='selectalldvfilter'><input type='text' id='dbidtextrec' class='indivfilterrec' title='Enter a database ID number to apply the filter.'><input type='submit' id='databaseidfilter' class='filterbuttonsrec' value='' title='Filter rows by the specified database ID.' /></td><td class='selectalldvfilter'><input type='text' id='useridtextrec' class='indivfilterrec' title='Enter a Nextcloud username to apply the filter.' /><input type='submit' id='useridfilter' class='filterbuttonsrec' value='' title='Filter rows by the specified username.' /></td><td class='selectalldvfilter'><input type='text' id='messageidtextrec' class='indivfilterrec' title='Enter a fragment from a message ID to apply the filter.'  /><input type='submit' id='messageidfilter' class='filterbuttonsrec' value='' title='Filter rows by the specified string.' /></td><td class='selectalldvfilter'><input type='text' id='datetextrec' class='indivfilterrec' title='Enter a fragment of a date to apply the filter.'/><input type='submit' id='datefilter' class='filterbuttonsrec' value='' title='Filter rows by the specified string.' /></td><td class='selectalldvfilter'><input type='text' id='fromtextrec' class='indivfilterrec' title='Enter a fragment of a sender&#146s phone number or alphanumeric sender ID, to apply the filter.' /><input type='submit' id='fromfilter' class='filterbuttonsrec' value='' title='Filter rows by the specified string.' /></td><td class='selectalldvfilter'><input type='text' id='totextrec' class='indivfilterrec' value='' title='Enter a fragment of a recipient&#146s phone number to apply the filter.'  /><input type='submit' id='tofilter' class='filterbuttonsrec' value='' title='Filter rows by the specified string.' /></td><td class='selectalldvfilter'><input type='text' id='messagetextrec' class='indivfilterrec' title='Enter a fragment of a message to apply the filter.' /><input type='submit' id='messagefilter' class='filterbuttonsrec' value='' title='Filter rows by the specified string.'/></td></tr>");
65
-                $('#recSmsTable').append("<tr class='receivedrows' id='recheaderrow'><th id='selectalldv' class='selectsmsdv'><input type='checkbox' id='selectAllChckbx' class ='indivchckbx' title='Select all rows.' /></th><th title='The database ID of each message.'>ID</th><th>User ID</th><th>Message ID</th><th>Date</th><th>From</th><th>To</th><th>Received Message</th></tr>");
66
-
67
-                $('#recfiltersrow').hide();
68
-
69
-                for (var i = 0; i < parseddata.length; i++) {
70
-
71
-                     if (parseddata[i].author_displayname) {
72
-                         var procrcmessage = "<span class='messageAuthorName'>"+ parseddata[i].author_displayname + ":</span>" + parseddata[i].message;
73
-                     } else {
74
-                         var procrcmessage = parseddata[i].message;
75
-                     }
76
-
77
-                     if (parseddata[i].internal_sender == 0) {
78
-                         var procrecFrom = "<div id='frmNmbr-"+ i +"'><div id='addDispName-"+ i +"' style='display:block;margin-right:5px;'><img class='addNameToPhNb' src='/apps/sms_relentless/img/user.svg' title='Associate a Display Name with this phone number'></div>"+ parseddata[i].from +"<div id='showMsgFrom-"+ i +"' class='listToFromMsgs'><img class='lstMsgToFromImg' src='/apps/sms_relentless/img/list.svg' title='Show all the messages sent/received to/from this phone number.'></div></div>";
79
-                     } else {
80
-                         var procrecFrom = "<div id='frmNmbr-"+ i +"'>"+ parseddata[i].from +"<div id='showMsgFrom-"+ i +"' class='listToFromMsgs'><img class='lstMsgToFromImg' src = '/apps/sms_relentless/img/list.svg' title='Show all the messages sent/received to/from this phone number.'></div></div>";
81
-                     }
82
-
83
-                     var procrecTo = "<div id='toNmbr-"+ i +"'>"+ parseddata[i].to +"<div id='showMsgTo-"+ i +"' class='listToFromMsgs'><img class='lstMsgToFromImg' src = '/apps/sms_relentless/img/list.svg' title='Show all the messages sent/received to/from this phone number.'></div></div>";
84
-
85
-                     $("#recSmsTable").append("<tr id='singlerow_"+ i +"' class='receivedrowsbody'><td class='selectsmsdv'><input type='checkbox' id='selectspec_"+ i +"' class='indivchckbx' /></td><td class='dbidcolumnrec'>"+ parseddata[i].id +"</td><td class='useridcolrec'>"+ parseddata[i].user_id +"</td><td class='messageidcolrec'>"+ parseddata[i].message_id +"</td><td class='datecolrec'>"+ parseddata[i].date +"</td><td class='fromcolumnrec'>"+ procrecFrom +"</td><td class='tocolrec'>"+ procrecTo +"</td><td class='messagecolumnrec'>"+ procrcmessage +"</td></tr>");
86
-                }
87
-
88
-                $('#smstables').append("<div id='totalrecmessages'>Total displayed messages: " + parseddata.length + "</div>");
89
-
90
-                $('#smstables').removeClass('icon-loading');
91
-
92
-                $('#recarrow').removeClass('arrowUpCl');
93
-                $('#recarrow').addClass('arrowDownCl');
94
-
95
-
96
-                // Show the pop-up window that lists all the messages sent/received to/from a phone number
97
-                function showMsgPerNmbr(clckPhNumber) {
98
-
99
-                   var allfrmtomsg = "<div id='listAllMsgsFromTo'>";
100
-                   allfrmtomsg += "<div id='draglstMsgmWindow'><img src='/apps/sms_relentless/img/dots.svg'></div>";
101
-                   allfrmtomsg += "<a id='closeFrmMsgWindow' class='oc-dialog-close' title='Close this window'></a>";
102
-                   allfrmtomsg += "<div class='showByNmbrTitle'>Messages sent/received to/from  <span style='color:#04957b'>"+ clckPhNumber +"</span></div>";
103
-                   allfrmtomsg += "<div id='frmMsgLstWrap'><div id='loadMoreMsgs' title='Click to load older messages.'>Load more messages</div><div id='loadMoreMsgsusr' title='Click to load older messages.'>Load more messages</div>";
104
-                   allfrmtomsg += "<table id='frmMsgLstTbl'></table></div>";
105
-                   allfrmtomsg += "<input type='submit' id='sendMsgToNmb' value='Send a message to "+ clckPhNumber +"'>";
106
-                   allfrmtomsg += "<div id='draglstMsgmWindowsc'><img src='/apps/sms_relentless/img/dots.svg'></div>";
107
-                   allfrmtomsg += "</div>";
108
-
109
-                   $("#content").append("<div id='recTblOverlay'></div>");
110
-                   $("#content").append(allfrmtomsg);
111
-
112
-                   var topDist = parseInt((window.innerHeight / 2).toFixed(2) - 250) +"px";
113
-                   var leftDist = parseInt((window.innerWidth / 2).toFixed(2) - 300) +"px";
114
-                   $("#listAllMsgsFromTo").css({ "top" : topDist, "left" : leftDist });
115
-
116
-                   $("#closeFrmMsgWindow").click(function() { $("#listAllMsgsFromTo").remove(); $("#recTblOverlay").remove(); });
117
-                   $("#recTblOverlay").click(function() { $("#listAllMsgsFromTo").remove(); $("#recTblOverlay").remove(); });
118
-
119
-                   $("#sendMsgToNmb").click(function() {
120
-
121
-                      if ($("#currentsmsnmbrs").val() == null) { $("#selectcalleridbttn").click(); }
122
-                      var clckPhNumberst = clckPhNumber.replace("+", "");
123
-                      $("#smsto").val(clckPhNumberst);
124
-                      $("#smstext").focus();
125
-                      $("#listAllMsgsFromTo").remove();
126
-                      $("#recTblOverlay").remove();
127
-                   });
128
-
129
-	           // Make the window draggable
130
-	           function makeMgrWndDraggable(e) {
131
-
132
-			   window.pmdragging = {};
133
-			   pmdragging.pageX0 = e.pageX;
134
-			   pmdragging.pageY0 = e.pageY;
135
-			   pmdragging.elem = $("#listAllMsgsFromTo");
136
-			   pmdragging.offset0 = $("#listAllMsgsFromTo").offset();
137
-
138
-			   function handle_dragging(e) {
139
-			       var left = pmdragging.offset0.left + (e.pageX - pmdragging.pageX0);
140
-			       var top = pmdragging.offset0.top + (e.pageY - pmdragging.pageY0);
141
-			       $(pmdragging.elem).offset({top: top, left: left});
142
-			   }
143
-
144
-			   function handle_mouseup(e) {
145
-			       $('body').off('mousemove', handle_dragging).off('mouseup', handle_mouseup);
146
-			   }
147
-
148
-			   $('body').on('mouseup', handle_mouseup).on('mousemove', handle_dragging);
149
-	           }
150
-	           $("#draglstMsgmWindow").mousedown(makeMgrWndDraggable);
151
-	           $("#draglstMsgmWindowsc").mousedown(makeMgrWndDraggable);
152
-
153
-                   // Get the sent/received messages for the current phone number, from the database
154
-		   var getGroupedPnUrl = OC.generateUrl("/apps/sms_relentless/user/getgroupedpernumber");
155
-
156
-		   $('#listAllMsgsFromTo').addClass('icon-loading');
157
-		   var totalPhNmbrs = 0;
158
-
159
-		   $.ajax({
160
-			  method: 'POST',
161
-			  url: getGroupedPnUrl + '/' + userid,
162
-			  contentType: 'application/json',
163
-                          data: JSON.stringify({ phoneNumber: clckPhNumber }),
164
-			  success: function(groupedpernb) {
165
-
166
-				     $('#listAllMsgsFromTo').removeClass('icon-loading');
167
-
168
-				     var fromtoNmbrsData = [];
169
-
170
-				     for (var i = 0; i < groupedpernb.length; i++) {
171
-
172
-					     if (groupedpernb[i].author_displayname) {
173
-						 var authordnm = groupedpernb[i].author_displayname;
174
-					     } else { 
175
-						 var authordnm = groupedpernb[i].user_id;
176
-					     }
177
-
178
-					     var sentfromnmbrarr = groupedpernb[i].from.split("+");
179
-				             if (sentfromnmbrarr[1]) {
180
-						 var groupednbfrom = "+"+ sentfromnmbrarr[1];
181
-				             } else {
182
-						 var groupednbfrom = sentfromnmbrarr[0];
183
-				             }
184
-
185
-				             var modmessagerec = '';
186
-				             if (groupedpernb[i].author_displayname) {
187
-						 modmessagerec = "<span class='msgAuthorNameGrp'>"+ groupedpernb[i].author_displayname + ":</span>" + groupedpernb[i].message;
188
-				             } else {
189
-			                         modmessagerec = groupedpernb[i].message;
190
-                                             }
191
-
192
-				             if (groupedpernb[i].to.indexOf(": ") > -1) {
193
-				                 var groupednmbrtopre = groupedpernb[i].to.split(": ");
194
-				                 var groupednmbrto = groupednmbrtopre[1];
195
-				             } else { 
196
-				                 var groupednmbrto = groupedpernb[i].to;
197
-				             }
198
-
199
-				             fromtoNmbrsData.push({
200
-				                       'author_displayname': authordnm,
201
-				                       'from': groupednbfrom,
202
-				                       'to': groupednmbrto,
203
-				                       'message': modmessagerec,
204
-				                       'date': groupedpernb[i].date,
205
-				                       'status': groupedpernb[i].deliveryreceipt,
206
-				                       'table': groupedpernb[i].table
207
-				             });
208
-				     }
209
-
210
-
211
-				     // Remove the duplicates
212
-				     var noDupMsgData = [];
213
-				     $.each(fromtoNmbrsData, function(i, e) {
214
-					    var matchingData = $.grep(noDupMsgData, function(item) {
215
-				                    return item.from == e.from && item.to == e.to && item.message == e.message && item.table == 'received' && e.table == 'sent';
216
-					    });
217
-					    if (matchingData.length === 0) {
218
-						noDupMsgData.push(e);
219
-					    }
220
-				     });
221
-
222
-				     var messagesPerNmbr = {};
223
-				     var msgsNamesPerNmbr = {};
224
-				     var msgsNmbrsNames = {};
225
-
226
-			             var displayNamesarr = [];
227
-			             var convData = [];
228
-
229
-			             for (var n = 0; n < noDupMsgData.length; n++) {
230
-
231
-			                  if (noDupMsgData[n]['from'] == clckPhNumber && noDupMsgData[n]['table'] == 'sent') {
232
-
233
-			                      convData.push({
234
-			                                     'author_displayname': noDupMsgData[n]['author_displayname'],
235
-			                                     'message': noDupMsgData[n]['message'],
236
-			                                     'from': noDupMsgData[n]['from'],
237
-			                                     'to': noDupMsgData[n]['to'],
238
-			                                     'date': noDupMsgData[n]['date'],
239
-			                                     'direction': 'sent_from',
240
-			                                     'status': noDupMsgData[n]['status'],
241
-			                                     'table': noDupMsgData[n]['table']
242
-			                      });
243
-
244
-			                  } else if (noDupMsgData[n]['to'] == clckPhNumber && noDupMsgData[n]['table'] == 'sent') {
245
-
246
-			                      convData.push({
247
-			                                     'author_displayname': noDupMsgData[n]['author_displayname'],
248
-			                                     'message': noDupMsgData[n]['message'],
249
-			                                     'from': noDupMsgData[n]['from'],
250
-			                                     'to': noDupMsgData[n]['to'],
251
-			                                     'date': noDupMsgData[n]['date'],
252
-			                                     'direction': 'sent_to',
253
-			                                     'status': noDupMsgData[n]['status'],
254
-			                                     'table': noDupMsgData[n]['table']
255
-			                      });
256
-
257
-
258
-			                  } else if (noDupMsgData[n]['from'] == clckPhNumber && noDupMsgData[n]['table'] == 'received') {
259
-
260
-			                      convData.push({
261
-			                                     'author_displayname': noDupMsgData[n]['author_displayname'],
262
-			                                     'message': noDupMsgData[n]['message'],
263
-			                                     'from': noDupMsgData[n]['from'],
264
-			                                     'to': noDupMsgData[n]['to'],
265
-			                                     'date': noDupMsgData[n]['date'],
266
-			                                     'direction': 'received_from',
267
-			                                     'status': noDupMsgData[n]['status'],
268
-			                                     'table': noDupMsgData[n]['table']
269
-			                      });
270
-
271
-			                  } else if (noDupMsgData[n]['to'] == clckPhNumber && noDupMsgData[n]['table'] == 'received') {
272
-
273
-			                      convData.push({
274
-			                                     'author_displayname': noDupMsgData[n]['author_displayname'],
275
-			                                     'message': noDupMsgData[n]['message'],
276
-			                                     'from': noDupMsgData[n]['from'],
277
-			                                     'to': noDupMsgData[n]['to'],
278
-			                                     'date': noDupMsgData[n]['date'],
279
-			                                     'direction': 'received_on',
280
-			                                     'status': noDupMsgData[n]['status'],
281
-			                                     'table': noDupMsgData[n]['table']
282
-			                      });
283
-			                  }
284
-			             }
285
-
286
-			             // Sort messages by date
287
-				     convData.sort(function(a, b) {
288
-					var c = new Date(a.date);
289
-					var d = new Date(b.date);
290
-					return c-d;
291
-				     });
292
-                                     convData.reverse();
293
-
294
-			             // Collect the display names of the users that sent messages from the current number
295
-			             var selectedNames = [];
296
-			             var displayNames = '';
297
-			             for (var v = 0; v < convData.length; v++) {
298
-			                  if (selectedNames.indexOf(convData[v]['author_displayname']) == -1) { 
299
-			                      selectedNames.push(convData[v]['author_displayname']);
300
-			                      displayNames += "<div id='diplNm_"+ clckPhNumber +"_"+ v +"' class='dispNameList' name='"+ convData[v]['author_displayname'] +"'>"+ convData[v]['author_displayname'] +"</div>";
301
-			                  }
302
-			             }
303
-			             displayNames += "<div id='diplNmAllMsg' class='dispNameListAll' title='Show all the messages for this number.'>"+ clckPhNumber +"</div>";
304
-
305
-			             // Store the display names for the current number, to be able to see them later
306
-			             var ctPhNumber = clckPhNumber;
307
-			             msgsNamesPerNmbr[ctPhNumber] = displayNames;
308
-
309
-			             // Store the messages sent by each user, to be able to see them later when clicking on the user's name
310
-			             for (var h = 0; h < selectedNames.length; h++) {
311
-
312
-			                  var rowMessageArrpn = [];
313
-			                  for (var b = 0; b < convData.length; b++) {
314
-
315
-			                       if (selectedNames[h] == convData[b]['author_displayname']) {
316
-
317
-					           if (convData[b]['direction'] == 'sent_from') {
318
-					               if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1) {
319
-					                   var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='Message delivered.'>";
320
-					               } else {
321
-					                   var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='There were issues while sending the message.'>";
322
-					               }
323
-					               rowMessageArrpn.push("<div style='display:block;width:97%;float:right;margin:4px 6px 4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fbff;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>");
324
-					           } else if (convData[b]['direction'] == 'sent_to') {
325
-					               if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1) {
326
-					                   var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='Message delivered.'>";
327
-					               } else {
328
-					                   var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='There were issues while sending the message.'>";
329
-					               }
330
-					               rowMessageArrpn.push("<div style='display:block;width:97%;float:right;margin:4px 6px 4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fbff;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>");
331
-					           } else if (convData[b]['direction'] == 'received_from') {
332
-					               rowMessageArrpn.push("<div style='display:block;width:97%;float:left;margin:4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fff8;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div></div>");
333
-					           } else if (convData[b]['direction'] == 'received_on') {
334
-					               rowMessageArrpn.push("<div style='display:block;width:97%;float:left;margin:4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fff8;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div></div>");
335
-			                           }
336
-			                       }
337
-			                  }
338
-			                  var crtNmber = clckPhNumber;
339
-			                  var crtName = selectedNames[h];
340
-			                  msgsNmbrsNames[crtNmber] = msgsNmbrsNames[crtNmber] || {};
341
-                                          msgsNmbrsNames[crtNmber][crtName] = rowMessageArrpn;
342
-			             }
343
-
344
-                                     // The number of messages to be loaded by default
345
-                                     var nmbTblDefault = 50;
346
-
347
-                                     // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button
348
-                                     if (convData.length > nmbTblDefault) {
349
-                                         $("#loadMoreMsgs").css("display", "block");
350
-                                         var nmbToBeLoaded = nmbTblDefault;
351
-                                     } else { var nmbToBeLoaded = convData.length; }
352
-
353
-			             var rowMessageArr = [];
354
-			             for (var m = nmbToBeLoaded - 1; m >= 0; m--) {
355
-
356
-			                  if (convData[m]['direction'] == 'sent_from') {
357
-
358
-			                      if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) {
359
-			                          var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='Message delivered.'>";
360
-			                      } else {
361
-			                          var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='There were issues while sending the message.'>";
362
-			                      }
363
-			                      rowMessageArr.push("<div style='display:block;width:97%;float:right;margin:4px 6px 4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fbff;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>");
364
-
365
-			                  } else if (convData[m]['direction'] == 'sent_to') {
366
-
367
-			                      if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) {
368
-			                          var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='Message delivered.'>";
369
-			                      } else {
370
-			                          var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='There were issues while sending the message.'>";
371
-			                      }
372
-			                      rowMessageArr.push("<div style='display:block;width:97%;float:right;margin:4px 6px 4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fbff;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>");
373
-
374
-			                  } else if (convData[m]['direction'] == 'received_from') {
375
-
376
-					      rowMessageArr.push("<div style='display:block;width:97%;float:left;margin:4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fff8;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>");
377
-
378
-			                  } else if (convData[m]['direction'] == 'received_on') {
379
-
380
-					      rowMessageArr.push("<div style='display:block;width:97%;float:left;margin:4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fff8;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>");
381
-			                  }
382
-			             }
383
-
384
-			             var convDataPerNmbr = rowMessageArr.join("");
385
-
386
-				     $("#frmMsgLstTbl").append("<tr class='groupedrowsbody'><td><div class='groupedLstNamespn'>"+ displayNames +"</div></td><td><div id='msgListRowCell' class='groupedLstMsgspn'>"+ convDataPerNmbr +"</div><div id='arrowupWrap'><div id='upArrowSmall' title='Scroll to the top'></div></div></td></tr>");
387
-
388
-
389
-			             // Store the messages for the current number, to be able to see them later, when clicking on the number
390
-			             var rowMessageArrcpt = [];
391
-//			             for (var m = convData.length - 1; m >= 0; m--) {
392
-			             for (var m = 0; m < convData.length; m++) {
393
-
394
-			                  if (convData[m]['direction'] == 'sent_from') {
395
-
396
-			                      if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) {
397
-			                          var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='Message delivered.'>";
398
-			                      } else {
399
-			                          var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='There were issues while sending the message.'>";
400
-			                      }
401
-			                      rowMessageArrcpt.push("<div style='display:block;width:97%;float:right;margin:4px 6px 4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fbff;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>");
402
-
403
-			                  } else if (convData[m]['direction'] == 'sent_to') {
404
-
405
-			                      if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) {
406
-			                          var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='Message delivered.'>";
407
-			                      } else {
408
-			                          var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='There were issues while sending the message.'>";
409
-			                      }
410
-			                      rowMessageArrcpt.push("<div style='display:block;width:97%;float:right;margin:4px 6px 4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fbff;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>");
411
-
412
-			                  } else if (convData[m]['direction'] == 'received_from') {
413
-
414
-					      rowMessageArrcpt.push("<div style='display:block;width:97%;float:left;margin:4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fff8;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>");
415
-
416
-			                  } else if (convData[m]['direction'] == 'received_on') {
417
-
418
-					      rowMessageArrcpt.push("<div style='display:block;width:97%;float:left;margin:4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fff8;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>");
419
-			                  }
420
-			             }
421
-
422
-			             messagesPerNmbr[clckPhNumber] = rowMessageArrcpt;
423
-
424
-                                     // Scroll down to the bottom of the window
425
-                                     $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200);
426
-
427
-                                     // Load more messages
428
-                                     var clickNmb = 0;
429
-                                     $("#loadMoreMsgs").click(function() {
430
-
431
-                                         clickNmb++;
432
-
433
-                                         var crefnb = (clickNmb + 1) * nmbToBeLoaded;
434
-
435
-                                         if (crefnb > convData.length) {
436
-                                             var nmbmsg = convData.length - 1;
437
-                                             $("#loadMoreMsgs").css("display", "none");
438
-                                         } else { 
439
-                                             var nmbmsg = crefnb - 1;
440
-                                         }
441
-
442
-                                         var rowMessageArrAdd = [];
443
-
444
-                                         for (var m = nmbmsg; m >= clickNmb * nmbToBeLoaded; m--) {
445
-
446
-			                      if (convData[m]['direction'] == 'sent_from') {
447
-
448
-			                          if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) {
449
-			                              var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='Message delivered.'>";
450
-			                          } else {
451
-			                              var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='There were issues while sending the message.'>";
452
-			                          }
453
-			                          rowMessageArrAdd.push("<div style='display:block;width:97%;float:right;margin:4px 6px 4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fbff;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>");
454
-
455
-			                      } else if (convData[m]['direction'] == 'sent_to') {
456
-
457
-			                          if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) {
458
-			                              var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='Message delivered.'>";
459
-			                          } else {
460
-			                              var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='There were issues while sending the message.'>";
461
-			                          }
462
-			                          rowMessageArrAdd.push("<div style='display:block;width:97%;float:right;margin:4px 6px 4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fbff;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>");
463
-
464
-			                      } else if (convData[m]['direction'] == 'received_from') {
465
-
466
-					          rowMessageArrAdd.push("<div style='display:block;width:97%;float:left;margin:4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fff8;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>");
467
-
468
-			                      } else if (convData[m]['direction'] == 'received_on') {
469
-
470
-					          rowMessageArrAdd.push("<div style='display:block;width:97%;float:left;margin:4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fff8;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>");
471
-			                      }
472
-                                         }
473
-
474
-			                 var convDataPerNmbrad = rowMessageArrAdd.join("");
475
-
476
-                                         var scrlheight = $("#msgListRowCell").height();
477
-                                         $("#msgListRowCell").prepend(convDataPerNmbrad);
478
-
479
-                                         $("#frmMsgLstWrap").scrollTop($("#msgListRowCell").height() - scrlheight);
480
-                                     });
481
-
482
-
483
-			             // Show the messages sent by each user whose name is clicked
484
-			             $('[id*="diplNm_"]').click(function() {
485
-
486
-			                 var crntNmbr = $(this).attr("id").split("_")[1];
487
-			                 var crntDisName = $(this).attr("name");                               
488
-                                         $("#loadMoreMsgs").css("display", "none");
489
-
490
-                                         var convDataprn = [];
491
-                                         $.each(msgsNmbrsNames[crntNmbr][crntDisName], function(index, item) {
492
-                                                convDataprn.push(item);
493
-                                         });
494
-
495
-                                         // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button
496
-                                         if (convDataprn.length > nmbTblDefault) {
497
-                                             $("#loadMoreMsgsusr").css("display", "block");
498
-                                             var nmbToBeLoaded = nmbTblDefault;
499
-                                         } else { var nmbToBeLoaded = convDataprn.length; }
500
-
501
-
502
-			                 var rowMessageArrprnst = [];
503
-
504
-			                 for (var n = nmbToBeLoaded - 1; n >= 0; n--) {
505
-                                              rowMessageArrprnst.push(convDataprn[n]);
506
-			                 }
507
-
508
-			                 var convDataPerNmbrprnst = rowMessageArrprnst.join("");
509
-
510
-                                         $("#msgListRowCell").empty();
511
-                                         $("#msgListRowCell").append(convDataPerNmbrprnst);
512
-
513
-                                         // Scroll down to the bottom of the window
514
-                                         $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200);
515
-
516
-                                         // Load more messages
517
-                                         var clckNb = 0;
518
-                                         $("#loadMoreMsgsusr").unbind("click");
519
-                                         $("#loadMoreMsgsusr").click(function() {
520
-
521
-                                             clckNb++;
522
-                                             var crefnb = (clckNb + 1) * nmbToBeLoaded;
523
-
524
-                                             if (crefnb > convDataprn.length) {
525
-                                                 var nmbmsg = convDataprn.length - 1;
526
-                                                 $("#loadMoreMsgsusr").css("display", "none");
527
-                                             } else { 
528
-                                                 var nmbmsg = crefnb - 1;
529
-                                                 $("#loadMoreMsgsusr").css("display", "block");
530
-                                             }
531
-
532
-                                             $("#loadMoreMsgs").css("display", "none");
533
-
534
-                                             var rowMessageArrAddst = [];
535
-
536
-                                             for (var q = nmbmsg; q >= clckNb * nmbToBeLoaded; q--) {
537
-
538
-                                                  rowMessageArrAddst.push(convDataprn[q]);
539
-                                             }
540
-
541
-			                     var convDataPerNmbradst = rowMessageArrAddst.join("");
542
-
543
-                                             var scrlheight = $("#msgListRowCell").height();
544
-                                             $("#msgListRowCell").prepend(convDataPerNmbradst);
545
-
546
-                                             $("#frmMsgLstWrap").scrollTop($("#msgListRowCell").height() - scrlheight);
547
-                                         });
548
-
549
-
550
-			                 $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); });
551
-			                 $("#diplNmAllMsg").css("color", "#04957b");
552
-			                 $(this).css("color", "#1b8efe");
553
-			             });
554
-
555
-
556
-			             // Show again all the messages sent/received to/from the clicked number
557
-			             $("#diplNmAllMsg").click(function() {
558
-
559
-                                         $("#loadMoreMsgsusr").css("display", "none");
560
-                                         $("#loadMoreMsgs").css("display", "block");
561
-                         
562
-                                         $("#loadMoreMsgs").css("display", "none");
563
-
564
-                                         var convDataprn = [];
565
-                                         $.each(messagesPerNmbr[clckPhNumber], function(index, item) {
566
-                                                convDataprn.push(item);
567
-                                         });
568
-
569
-                                         // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button
570
-                                         if (convDataprn.length > nmbTblDefault) {
571
-                                             $("#loadMoreMsgsusr").css("display", "block");
572
-                                             var nmbToBeLoaded = nmbTblDefault;
573
-                                         } else { var nmbToBeLoaded = convDataprn.length; }
574
-
575
-
576
-			                 var rowMessageArrprnst = [];
577
-
578
-			                 for (var n = nmbToBeLoaded - 1; n >= 0; n--) {
579
-                                              rowMessageArrprnst.push(convDataprn[n]);
580
-			                 }
581
-
582
-			                 var convDataPerNmbrprnst = rowMessageArrprnst.join("");
583
-
584
-                                         $("#msgListRowCell").empty();
585
-                                         $("#msgListRowCell").append(convDataPerNmbrprnst);
586
-
587
-                                         // Scroll down to the bottom of the window
588
-                                         $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200);
589
-
590
-
591
-                                         // Load more messages
592
-                                         var clckNb = 0;
593
-                                         $("#loadMoreMsgsusr").unbind("click");
594
-                                         $("#loadMoreMsgsusr").click(function() {
595
-
596
-                                             clckNb++;
597
-                                             var crefnb = (clckNb + 1) * nmbToBeLoaded;
598
-
599
-                                             if (crefnb > convDataprn.length) {
600
-                                                 var nmbmsg = convDataprn.length - 1;
601
-                                                 $("#loadMoreMsgsusr").css("display", "none");
602
-                                             } else { 
603
-                                                 var nmbmsg = crefnb - 1;
604
-                                                 $("#loadMoreMsgsusr").css("display", "block");
605
-                                             }
606
-
607
-                                             $("#loadMoreMsgs").css("display", "none");
608
-
609
-                                             var rowMessageArrAddst = [];
610
-
611
-                                             for (var q = nmbmsg; q >= clckNb * nmbToBeLoaded; q--) {
612
-
613
-                                                  rowMessageArrAddst.push(convDataprn[q]);
614
-                                             }
615
-
616
-			                     var convDataPerNmbradst = rowMessageArrAddst.join("");
617
-
618
-                                             var scrlheight = $("#msgListRowCell").height();
619
-                                             $("#msgListRowCell").prepend(convDataPerNmbradst);
620
-
621
-                                             $("#frmMsgLstWrap").scrollTop($("#msgListRowCell").height() - scrlheight);
622
-                                         });
623
-
624
-
625
-			                 $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); });
626
-			                 $("#diplNmAllMsg").css("color", "#04957b");
627
-			                 $(this).css("color", "#04c6a4");
628
-
629
-			             });
630
-
631
-
632
-				     // Show the scroll-up arrow
633
-				     $("#frmMsgLstWrap").scroll(function() {
634
-					if ($(this).scrollTop() > 900) {
635
-					      $('#upArrowSmall').fadeIn();
636
-					} else {
637
-					      $('#upArrowSmall').fadeOut();
638
-					}
639
-				     });
640
-
641
-				     $("#upArrowSmall").click(function() {
642
-					$("#frmMsgLstWrap").animate({scrollTop : 0},400);
643
-				     });
644
-
645
-			  },
646
-			  error: function() {
647
-				     alert("Error while attempting to get message data from the database!");
648
-				     $('#listAllMsgsFromTo').removeClass('icon-loading');
649
-			  }
650
-		   });
651
-                }
652
-
653
-                $('[id^="showMsgFrom-"]').click(function() {
654
-
655
-                   var ctrwnb = $(this).attr("id").replace("showMsgFrom-", "");
656
-                   var clckPhNumber = $("#frmNmbr-"+ ctrwnb).text();
657
-
658
-                   showMsgPerNmbr(clckPhNumber);
659
-                })
660
-
661
-                $('[id^="showMsgTo-"]').click(function() {
662
-                   var ctrwnbTo = $(this).attr("id").replace("showMsgTo-", "");
663
-                   if ($("#toNmbr-"+ ctrwnbTo).text().indexOf(":") > -1) {
664
-                       var clckPhNbTo = $("#toNmbr-"+ ctrwnbTo).text().split(": ")[1];
665
-                   } else { var clckPhNbTo = $("#toNmbr-"+ ctrwnbTo).text(); };
666
-
667
-                   showMsgPerNmbr(clckPhNbTo);
668
-                })
669
-
670
-                // Show the pop-up window for adding a Display Name to the 'From' numbers of unknown senders
671
-                $('[id^="addDispName-"]').click(function() {
672
-
673
-                   var crrownb = $(this).attr("id").replace("addDispName-", "");
674
-                   var slctPhoneNb = $("#frmNmbr-"+ crrownb).text();
675
-
676
-                   var addDNameWindow = "<div id='disNameWindow'>";
677
-                   addDNameWindow += "<div id='dragDispNmWindow'><img src='/apps/sms_relentless/img/dots.svg'></div>";
678
-                   addDNameWindow += "<a id='closeDisNmWindow' class='oc-dialog-close' title='Close this window'></a>";
679
-                   addDNameWindow += "<div style='display:block;text-align:left;font-size:16px;margin:14px 22px 0px 22px;color:#353535;'>Since this phone number is not associated with any current Nextcloud user, you can save a Display Name for this number, so that all the messages coming from it will be preceded by the specified Display Name:</div>";
680
-                   addDNameWindow += "<div style='display:block;text-align:center;color:#49B382;font-size:16px;font-weight:500;margin:6px 0px 10px 0px;'>"+ slctPhoneNb +"</div>";
681
-                   addDNameWindow += "<input type='text' id='saveDispNmText' placeholder='Eg: John Smith' style='display:block;width:80%;height:30px;margin:10px auto;padding:0px 12px;border-radius: 20px;'>";
682
-                   addDNameWindow += "<input type='submit' id='saveDispName' value='Save'>";
683
-                   addDNameWindow += "</div>";
684
-
685
-                   $("#content").append("<div id='recTblOverlay'></div>");
686
-                   $("#content").append(addDNameWindow);
687
-
688
-                   var topNmDist = parseInt((window.innerHeight / 2).toFixed(2) - 152) +"px";
689
-                   var leftNmDist = parseInt((window.innerWidth / 2).toFixed(2) - 150) +"px";
690
-                   $("#disNameWindow").css({ "top" : topNmDist, "left" : leftNmDist });
691
-
692
-                   $("#closeDisNmWindow").click(function() { $("#disNameWindow").remove(); $("#recTblOverlay").remove(); });
693
-                   $("#recTblOverlay").click(function() { $("#disNameWindow").remove(); $("#recTblOverlay").remove(); });
694
-
695
-
696
-	           // Make the window draggable
697
-	           function makeMgrWndDraggable(e) {
698
-
699
-			   window.pmdragging = {};
700
-			   pmdragging.pageX0 = e.pageX;
701
-			   pmdragging.pageY0 = e.pageY;
702
-			   pmdragging.elem = $("#disNameWindow");
703
-			   pmdragging.offset0 = $("#disNameWindow").offset();
704
-
705
-			   function handle_dragging(e) {
706
-			       var left = pmdragging.offset0.left + (e.pageX - pmdragging.pageX0);
707
-			       var top = pmdragging.offset0.top + (e.pageY - pmdragging.pageY0);
708
-			       $(pmdragging.elem).offset({top: top, left: left});
709
-			   }
710
-
711
-			   function handle_mouseup(e) {
712
-			       $('body').off('mousemove', handle_dragging).off('mouseup', handle_mouseup);
713
-			   }
714
-
715
-			   $('body').on('mouseup', handle_mouseup).on('mousemove', handle_dragging);
716
-	           }
717
-	           $("#dragDispNmWindow").mousedown(makeMgrWndDraggable);
718
-
719
-                   // Save the Display Name
720
-                   $("#saveDispName").click(function() {
721
-
722
-                      var dispNmText = $("#saveDispNmText").val();
723
-
724
-                      if (/^[a-zA-Z0-9\s\-\/\.\)\(\']+$/.test(dispNmText) && dispNmText.length < 256) {
725
-
726
-                             var saveDispNameUrl = OC.generateUrl("/apps/sms_relentless/user/savedisplayname");
727
-
728
-			     $.ajax({
729
-				  url: saveDispNameUrl + '/' + userid,
730
-				  method: 'POST',
731
-				  dataType:'text',
732
-                                  data: { 
733
-                                          authorDisplayname: dispNmText,
734
-                                          from: slctPhoneNb
735
-                                         },
736
-				  success: function(respupdname) {
737
-                                               alert(respupdname);
738
-                                               $("#disNameWindow").remove();
739
-                                               $("#recTblOverlay").remove();
740
-                                  },
741
-				  error: function() {
742
-                                               alert("Error while attempting to save the new Display Name to the database.");
743
-                                               $("#disNameWindow").remove();
744
-                                               $("#recTblOverlay").remove();
745
-                                  }
746
-			     });
747
-
748
-                      } else { alert("The Display Name should contain only letters, numbers, spaces, hyphens (-), slashes (/), periods (.), round brackets ()() and single quotation marks ('), it should not be empty and should have less than 256 characters."); }
749
-                   });
750
-
751
-                });
752
-
753
-
754
-                // Add pagination
755
-                var rowsShown = messagesperpage;
756
-                var rowsTotal = $("#recSmsTable tr").length;
757
-
758
-                var numPages = (rowsTotal - 2) / rowsShown;
759
-
760
-                for (i = 0; i < numPages; i++) {
761
-                     var pageNum = i + 1;
762
-                     $('#paginationrec').append('<a href="#" rel="' + i + '" class="pagenumbersrec">' + pageNum + '</a> ');
763
-                }
764
-
765
-                $('#paginationrec').children(":first").addClass('active');
766
-
767
-                $(".receivedrowsbody").hide();
768
-
769
-                $('#paginationrec a:first').addClass('active');
770
-
771
-                // Show table page when clicking a page number
772
-                $('.recpages a').bind('click', function() {
773
-
774
-                   $('#paginationrec').children().removeClass('active');
775
-
776
-                   $(this).addClass('active');
777
-
778
-                   var currentPageNo = $(this).text();
779
-
780
-                   $('#paginationrec a').each(function() {
781
-                       if ($(this).text() == currentPageNo) {
782
-                           $(this).addClass('active');
783
-                       }
784
-                   });
785
-
786
-                   // Sort table rows
787
-		   var rows = $('#recSmsTable tr').get();
788
-
789
-		   rows.sort(function(a, b) {
790
-
791
-		        var A = parseInt($('td.dbidcolumnrec', a).text());
792
-		        var B = parseInt($('td.dbidcolumnrec', b).text());
793
-
794
-		        if (A < B) {
795
-		            return -1;
796
-		        }
797
-
798
-		        if (A > B) {
799
-		            return 1;
800
-		        }
801
-
802
-		        return 0;
803
-		   });
804
-
805
-		   $.each(rows, function(index, row) {
806
-		      $('#recSmsTable').append(row);
807
-		   });
808
-
809
-                   var currPage = $(this).attr('rel');
810
-                   var startItem = currPage * rowsShown;
811
-                   var endItem = startItem + rowsShown;
812
-
813
-                   $(".receivedrowsbody").hide().slice(startItem, endItem).css('display', 'table-row');
814
-
815
-                   $('#totalrecmessages').remove();
816
-                   $('#smstables').append("<div id='totalrecmessages'>Total displayed messages: " + parseddata.length + "</div>");
817
-                });
818
-
819
-                $('#paginationrec').children(":last").trigger('click');
820
-
821
-                // Select all records
822
-                $('#selectAllChckbx').change(function() {
823
-                  if ($(this).is(':checked')) {
824
-                       $(".indivchckbx").prop("checked", true);
825
-                  } else {
826
-                       $(".indivchckbx").prop("checked", false);
827
-                  }
828
-                });
829
-
830
-                function reorderRecRows() {
831
-                   var currenttext = $(".filterbuttonsrec").closest('[class="filterbuttonsrec"]').find('[class="indivfilterrec"]').text();
832
-                   if (currenttext == '') {
833
-                       $('tr').sort(function (a, b) {
834
-                          return parseInt($('td.dbidcolumnrec', b).text()) < parseInt($('td.dbidcolumnrec', a).text());
835
-                       }).appendTo("#recSmsTable");
836
-                   }
837
-                }
838
-
839
-                // Filter rows
840
-                $("#databaseidfilter").on("click", function(event) {
841
-
842
-                      var databaseId = $("#dbidtextrec").val();
843
-                      var msgrowsNo = 0;
844
-
845
-                      $(".receivedrowsbody").each(function() {
846
-
847
-                          var checkrecEmpty1 = 0;
848
-                          $(".indivfilterrec").not("#dbidtextrec").each(function() {
849
-                              if ($(this).val() != '') {
850
-                                  checkrecEmpty1 = 1;
851
-                              }
852
-                          });
853
-
854
-                          if (checkrecEmpty1 == 0) {
855
-                              $(this).show();
856
-                          }
857
-
858
-                          if (databaseId != '') {
859
-                             if ($(this).find('[class="dbidcolumnrec"]').text() == databaseId) {
860
-                                $("#recSmsTable").append(this);
861
-                                if ($(this).is(":visible")) { msgrowsNo++; }
862
-                             } else {
863
-                                $(this).hide();
864
-                             }
865
-                          } else {
866
-                                $(this).show();
867
-                                msgrowsNo++;
868
-                          }
869
-                      });
870
-
871
-                      reorderRecRows();
872
-                      $('#totalrecmessages').remove();
873
-                      $('#smstables').append("<div id='totalrecmessages'>Total filtered messages: " + msgrowsNo + "</div>");
874
-                });
875
-
876
-
877
-                $("#useridfilter").on("click", function(event) {
878
-
879
-                      var useridtxt = $("#useridtextrec").val().toLowerCase();
880
-                      var msgrowsNo = 0;
881
-
882
-                      $(".receivedrowsbody").each(function() {
883
-
884
-                          var checkrecEmpty2 = 0;
885
-                          $(".indivfilterrec").not("#useridtextrec").each(function() {
886
-                              if ($(this).val() != '') {
887
-                                  checkrecEmpty2 = 1;
888
-                              }
889
-                          });
890
-
891
-                          if (checkrecEmpty2 == 0) {
892
-                              $(this).show();
893
-                          }
894
-
895
-                          if (useridtxt != '') {
896
-                             var useridfound = $(this).find('[class="useridcolrec"]').text().toLowerCase();
897
-                             if(useridfound.indexOf(useridtxt) != -1) {
898
-                                $("#recSmsTable").append(this);
899
-                                if ($(this).is(":visible")) { msgrowsNo++; }
900
-                             } else {
901
-                                $(this).hide();
902
-                             }
903
-                          } else {
904
-                                $(this).show();
905
-                                msgrowsNo++;
906
-                          }
907
-                      });
908
-
909
-                      reorderRecRows();
910
-                      $('#totalrecmessages').remove();
911
-                      $('#smstables').append("<div id='totalrecmessages'>Total filtered messages: " + msgrowsNo + "</div>");
912
-
913
-                });
914
-
915
-                $("#messageidfilter").on("click", function(event) {
916
-
917
-                      var messageidtxt = $("#messageidtextrec").val().toLowerCase();
918
-                      var msgrowsNo = 0;
919
-
920
-                      $(".receivedrowsbody").each(function() {
921
-
922
-                          var checkrecEmpty3 = 0;
923
-                          $(".indivfilterrec").not("#messageidtextrec").each(function() {
924
-                              if ($(this).val() != '') {
925
-                                  checkrecEmpty3 = 1;
926
-                              }
927
-                          });
928
-
929
-                          if (checkrecEmpty3 == 0) {
930
-                              $(this).show();
931
-                          }
932
-
933
-                          if (messageidtxt != '') {
934
-                             var foundtdmssgid = $(this).find('[class="messageidcolrec"]').text().toLowerCase();
935
-                             if (foundtdmssgid.indexOf(messageidtxt) != -1) {
936
-                                $("#recSmsTable").append(this);
937
-                                if ($(this).is(":visible")) { msgrowsNo++; }
938
-                             } else {
939
-                                $(this).hide();
940
-                             }
941
-                          } else {
942
-                                $(this).show();
943
-                                msgrowsNo++;
944
-                          }
945
-                      });
946
-
947
-                      reorderRecRows();
948
-                      $('#totalrecmessages').remove();
949
-                      $('#smstables').append("<div id='totalrecmessages'>Total filtered messages: " + msgrowsNo + "</div>");
950
-                });
951
-
952
-                $("#datefilter").on("click", function(event) {
953
-
954
-                      var datetxtvr = $("#datetextrec").val().toLowerCase();
955
-                      var msgrowsNo = 0;
956
-
957
-                      $(".receivedrowsbody").each(function() {
958
-
959
-                          var checkrecEmpty4 = 0;
960
-                          $(".indivfilterrec").not("#datetextrec").each(function() {
961
-                              if ($(this).val() != '') {
962
-                                  checkrecEmpty4 = 1;
963
-                              }
964
-                          });
965
-
966
-                          if (checkrecEmpty4 == 0) {
967
-                              $(this).show();
968
-                          }
969
-
970
-                          if (datetxtvr != '') {
971
-                              var founddate = $(this).find('[class="datecolrec"]').text().toLowerCase();
972
-                              if (founddate.indexOf(datetxtvr) != -1) {
973
-                                  $("#recSmsTable").append(this);
974
-                                  if ($(this).is(":visible")) { msgrowsNo++; }
975
-                              } else {
976
-                                  $(this).hide();
977
-                              }
978
-                          } else {
979
-                                  $(this).show();
980
-                                  msgrowsNo++;
981
-                          }
982
-                      });
983
-
984
-                      reorderRecRows();
985
-                      $('#totalrecmessages').remove();
986
-                      $('#smstables').append("<div id='totalrecmessages'>Total filtered messages: " + msgrowsNo + "</div>");
987
-                });
988
-
989
-                $("#fromfilter").on("click", function(event) {
990
-
991
-                      var fromtxtvr = $("#fromtextrec").val().toLowerCase();
992
-                      var msgrowsNo = 0;
993
-
994
-                      $(".receivedrowsbody").each(function() {
995
-
996
-                          var checkrecEmpty5 = 0;
997
-                          $(".indivfilterrec").not("#fromtextrec").each(function() {
998
-                              if ($(this).val() != '') {
999
-                                  checkrecEmpty5 = 1;
1000
-                              }
1001
-                          });
1002
-
1003
-                          if (checkrecEmpty5 == 0) {
1004
-                              $(this).show();
1005
-                          }
1006
-
1007
-                          if (fromtxtvr != '') {
1008
-                             var foundfrom = $(this).find('[class="fromcolumnrec"]').text().toLowerCase();
1009
-                             if (foundfrom.indexOf(fromtxtvr) != -1) {
1010
-                                 $("#recSmsTable").append(this);
1011
-                                 if ($(this).is(":visible")) { msgrowsNo++; }
1012
-                             } else {
1013
-                                 $(this).hide();
1014
-                             }
1015
-                          } else {
1016
-                                 $(this).show();
1017
-                                 msgrowsNo++;
1018
-                          }
1019
-                      });
1020
-
1021
-                      reorderRecRows();
1022
-                      $('#totalrecmessages').remove();
1023
-                      $('#smstables').append("<div id='totalrecmessages'>Total filtered messages: " + msgrowsNo + "</div>");
1024
-                });
1025
-
1026
-                $("#tofilter").on("click", function(event) {
1027
-
1028
-                      var totxtvr = $("#totextrec").val().toLowerCase();
1029
-                      var msgrowsNo = 0;
1030
-
1031
-                      $(".receivedrowsbody").each(function() {
1032
-
1033
-                          var checkrecEmpty6 = 0;
1034
-                          $(".indivfilterrec").not("#totextrec").each(function() {
1035
-                              if ($(this).val() != '') {
1036
-                                  checkrecEmpty6 = 1;
1037
-                              }
1038
-                          });
1039
-
1040
-                          if (checkrecEmpty6 == 0) {
1041
-                              $(this).show();
1042
-                          }
1043
-
1044
-                          if (totxtvr != '') {
1045
-                             var foundto = $(this).find('[class="tocolrec"]').text().toLowerCase();
1046
-                             if (foundto.indexOf(totxtvr) != -1) {
1047
-                                 $("#recSmsTable").append(this);
1048
-                                 if ($(this).is(":visible")) { msgrowsNo++; }
1049
-                             } else {
1050
-                                 $(this).hide();
1051
-                             }
1052
-                          } else {
1053
-                                 $(this).show();
1054
-                                 msgrowsNo++;
1055
-                          }
1056
-                      });
1057
-
1058
-                      reorderRecRows();
1059
-                      $('#totalrecmessages').remove();
1060
-                      $('#smstables').append("<div id='totalrecmessages'>Total filtered messages: " + msgrowsNo + "</div>");
1061
-                });
1062
-
1063
-                $("#messagefilter").on("click", function(event) {
1064
-
1065
-                      var messagetxtvr = $("#messagetextrec").val().toLowerCase();
1066
-                      var msgrowsNo = 0;
1067
-
1068
-                      $(".receivedrowsbody").each(function() {
1069
-
1070
-                          var checkrecEmpty7 = 0;
1071
-                          $(".indivfilterrec").not("#messagetextrec").each(function() {
1072
-                              if ($(this).val() != '') {
1073
-                                  checkrecEmpty7 = 1;
1074
-                              }
1075
-                          });
1076
-
1077
-                          if (checkrecEmpty7 == 0) {
1078
-                              $(this).show();
1079
-                          }
1080
-
1081
-                          if (messagetxtvr != '') {
1082
-                             var foundmessage = $(this).find('[class="messagecolumnrec"]').text().toLowerCase();
1083
-                             if (foundmessage.indexOf(messagetxtvr) != -1) {
1084
-                                $("#recSmsTable").append(this);
1085
-                                if ($(this).is(":visible")) { msgrowsNo++; }
1086
-                             } else {
1087
-                                $(this).hide();
1088
-                             }
1089
-                          } else {
1090
-                                $(this).show();
1091
-                                msgrowsNo++;
1092
-                          }
1093
-                      });
1094
-
1095
-                      reorderRecRows();
1096
-                      $('#totalrecmessages').remove();
1097
-                      $('#smstables').append("<div id='totalrecmessages'>Total filtered messages: " + msgrowsNo + "</div>");
1098
-               });
1099
-
1100
-               // Clear all filters
1101
-               $("#clearrecfilters").on("click", function(event) {
1102
-                      $(".receivedrowsbody").each(function() {
1103
-                          $(this).show();
1104
-                      });
1105
-                      $(".indivfilterrec").val("");
1106
-                      $('#totalrecmessages').remove();
1107
-                      $('#smstables').append("<div id='totalrecmessages'>Total displayed messages: " + parseddata.length + "</div>");
1108
-               });
1109
-
1110
-               // Delete selected rows from the database
1111
-               $("#deleterecrows").on("click", function() {
1112
-                  var checkcheckbx = jQuery("#recSmsTable input[type=checkbox]:checked").length;
1113
-                  if (checkcheckbx == 0) {
1114
-                     alert("Please select the row(s) to permanently delete from the database !");
1115
-                  } else {
1116
-                          var checkboxIds = [];
1117
-                          $(".receivedrowsbody").each(function() {
1118
-                             var rowcheckbx = $(this).find('input[type="checkbox"]');
1119
-                             if (rowcheckbx.is(":checked")) {
1120
-                                 var dbrowid = $(this).find('[class="dbidcolumnrec"]').text();
1121
-                                 checkboxIds.push(dbrowid);
1122
-                             }
1123
-                          });
1124
-
1125
-                          if (confirm("Please note that the row(s) you selected will be permanently deleted from the database, without being saved before removal. This action cannot be undone ! If you really want to permanently delete the selected row(s) press 'OK'.")) {
1126
-
1127
-                              var deleterecRowsUrl = OC.generateUrl("/apps/sms_relentless/user/removerecrows");
1128
-                              $('#smstables').addClass('icon-loading');
1129
-
1130
-                              $.ajax({
1131
-                                   url: deleterecRowsUrl + '/' + userid,
1132
-                                   method: "POST",
1133
-                                   dataType:'text',
1134
-                                   data: {recmessagedbIDs: checkboxIds},
1135
-                                   success: function() {
1136
-                                            alert("The row(s) have been deleted successfully !");
1137
-                                            $('#smstables').removeClass('icon-loading');
1138
-                                            $('#receivedsmstableshow').click();
1139
-                                   },
1140
-                                   error: function() {
1141
-                                            alert("There was an error while deleting the selected row(s) !");
1142
-                                            $('#smstables').removeClass('icon-loading');
1143
-                                   }
1144
-                              });
1145
-                          }
1146
-                  }
1147
-               });
1148
-
1149
-
1150
-               // Show/Hide filter row
1151
-	       $('#recarrow').on('click', function() {
1152
-	          if ($('#recfiltersrow').is(':visible')) {
1153
-		      $('#recfiltersrow').hide();
1154
-                      $('#recheaderrow').css('top', '0px');
1155
-                      $(this).removeClass('arrowUpCl');
1156
-                      $(this).addClass('arrowDownCl');
1157
-		  } else {
1158
-		      $('#recfiltersrow').show();
1159
-                      $('#recheaderrow').css('top', '158px');
1160
-                      $(this).removeClass('arrowDownCl');
1161
-                      $(this).addClass('arrowUpCl');
1162
-                  }
1163
-               });
1164
-
1165
-               $("#app-content").animate({scrollTop:$("#recSmsTable").prop("scrollHeight")},200);
1166
-          },
1167
-          error: function(recdatafromdb) {
1168
-                      alert("An error occurred. Please check your settings!");
1169
-                      $('#smstables').removeClass('icon-loading');
1170
-          }
1171
-     });
1172
-
1173
-  });
1174
-
1175
-
1176
-  // List sent messages
1177
-  $("#sentsmstableshow").on("click", function(event) {
1178
-
1179
-     $('#smstables').empty();
1180
-
1181
-     var getSentUrl = OC.generateUrl("/apps/sms_relentless/user/getsenttable");
1182
-     $('#smstables').addClass('icon-loading');
1183
-
1184
-     $.ajax({
1185
-          url: getSentUrl + '/' + userid,
1186
-          method: "GET",
1187
-          contentType: 'application/json',
1188
-          success: function(sentparseddata) {
1189
-
1190
-
1191
-                $('#smstables').append("<div id='toptablesent'><div class='topbuttonandpage'><span id='sentarrow' title='Show/Hide filters and Delete button'></span></div><div id='paginationsent' class='pages'>Pages </div></div>");
1192
-                $('#smstables').append("<table id='sentSmsTable'></table>");
1193
-                $('#sentSmsTable').append("<tr id='sentfiltersrow'><td class='selectalldvfilter'><button id='clearsentfilters' title='Clear all filters.'></button><button id='deletesentrows' title='Permanently delete the selected row(s) from below from the database.'></button></td><td class='selectalldvfilter'><input type='text' id='dbidtextsent' class='indivfiltersent' title='Enter a database ID number to apply the filter.'><input type='submit' id='databaseidfilter' class='filterbuttonsent' value='' title='Filter rows by the specified database ID.' /></td><td class='selectalldvfilter'><input type='text' id='useridtext' class='indivfiltersent' title='Enter a Nextcloud username to apply the filter.' /><input type='submit' id='useridfilter' class='filterbuttonsent' value='' title='Filter rows by the specified username.' /></td><td class='selectalldvfilter'><input type='text' id='messageidtext' class='indivfiltersent' title='Enter a fragment from a message ID to apply the filter.'  /><input type='submit' id='messageidfilter' class='filterbuttonsent' value='' title='Filter rows by the specified string.' /></td><td class='selectalldvfilter'><input type='text' id='datetext' class='indivfiltersent' title='Enter a fragment of a date to apply the filter.'/><input type='submit' id='datefilter' class='filterbuttonsent' value='' title='Filter rows by the specified string.' /></td><td class='selectalldvfilter'><input type='text' id='fromtext' class='indivfiltersent' title='Enter a fragment of a sender&#146s phone number or alphanumeric Sender ID, to apply the filter.' /><input type='submit' id='fromfilter' class='filterbuttonsent' value='' title='Filter rows by the specified string.' /></td><td class='selectalldvfilter'><input type='text' id='totext' class='indivfiltersent' value='' title='Enter a fragment of a recipient&#146s phone number to apply the filter.'  /><input type='submit' id='tofilter' class='filterbuttonsent' value='' title='Filter rows by the specified string.' /></td><td class='selectalldvfilter'><input type='text' id='networktext' class='indivfiltersent' title='Enter a fragment of a network number to apply the filter.' /><input type='submit' id='networkfilter' class='filterbuttonsent' value='' title='Filter rows by the specified string.'/></td><td class='selectalldvfilter'><input type='text' id='pricetext' class='indivfiltersent' title='Enter a fragment of a price string to apply the filter.' /><input type='submit' id='pricefilter' class='filterbuttonsent' value='' title='Filter rows by the specified string.'/></td><td class='selectalldvfilter'><input type='text' id='statustext' class='indivfiltersent' title='Enter a fragment of a status to apply the filter.' /><input type='submit' id='statusfilter' class='filterbuttonsent' value='' title='Filter rows by the specified string.'/></td><td class='selectalldvfilter'><input type='text' id='deliveryrcpttext' class='indivfiltersent' title='Enter a fragment of a delivery receit to apply the filter.' /><input type='submit' id='deliveryrecfilter' class='filterbuttonsent' value='' title='Filter rows by the specified string.'/></td><td class='selectalldvfilter'><input type='text' id='messagetext' class='indivfiltersent' title='Enter a fragment of a message to apply the filter.' /><input type='submit' id='messagefilter' class='filterbuttonsent' value='' title='Filter rows by the specified string.'/></td></tr>");
1194
-                $('#sentSmsTable').append("<tr class='sentrows' id='sentheaderrow'><th id='selectalldv' class='selectsmsdv'><input type='checkbox' id='selectAllChckbx' class ='indivchckbx' title='Select all rows.' /></th><th title='The database ID of each message.'>ID</th><th>User ID</th><th>Message ID</th><th>Date</th><th>From</th><th>To</th><th title='When a 5 or 6 digits code appears in this column, the first 3 digits specify the mobile country code and the last 2 or 3 digits specify the mobile network code of the receiver. You can look up the mobile country code and then the mobile network code on https://en.wikipedia.org/wiki/Mobile_country_code#National_operators'>Network</th><th title=\"The currency is the currency configured in the client account, on the SMS provider's website.\">Price</th><th id='sentstatuscolumn' title=\"This column generally shows the status received from the recipient's carrier, or any errors generated when attempting to send the message.\">Status</th><th title='Not all delivery receipts guarantee that the target received the message. Some delivery receipts represent successful completion of just one step in the delivery process, such as transmitting the message to another telephony operator.'>Delivery<br>Receit</th><th>Sent Message</th></tr>");
1195
-
1196
-                $('#sentfiltersrow').hide();
1197
-
1198
-                for (var i = 0; i < sentparseddata.length; i++) {
1199
-
1200
-                     if (sentparseddata[i].author_displayname) {
1201
-                         var procmessage = "<span class='messageAuthorName'>"+ sentparseddata[i].author_displayname + ":</span>" + sentparseddata[i].message;
1202
-                     } else {
1203
-                         var procmessage = sentparseddata[i].message;
1204
-                     }
1205
-
1206
-                     var procsentFrom = "<div id='frmNmbr-"+ i +"'>"+ sentparseddata[i].from +"<div id='showMsgFrom-"+ i +"' class='listToFromMsgs'><img class='lstMsgToFromImg' src='/apps/sms_relentless/img/list.svg' title='Show all the messages sent/received to/from this phone number.'></div></div>";
1207
-
1208
-                     var procsentTo = "<div id='toNmbr-"+ i +"'>"+ sentparseddata[i].to +"<div id='showMsgTo-"+ i +"' class='listToFromMsgs'><img class='lstMsgToFromImg' src='/apps/sms_relentless/img/list.svg' title='Show all the messages sent/received to/from this phone number.'></div></div>";
1209
-
1210
-                     $('#sentSmsTable').append("<tr id='singlerow_"+ i +"' class='sentrowsbody'><td class='selectsmsdv'><input type='checkbox' id='selectspec_"+ i +"' class='indivchckbx' /></td><td class='sentdbidcolumn'>"+ sentparseddata[i].id +"</td><td class='useridcolsent'>"+ sentparseddata[i].user_id +"</td><td class='messageidcolsent'>"+ sentparseddata[i].message_id +"</td><td class='datecolsent'>"+ sentparseddata[i].date +"</td><td class='fromcolumnsent'>"+ procsentFrom +"</td><td class='tocolumnsent'>"+ procsentTo +"</td><td class='networkcolumnsent'>"+ sentparseddata[i].network +"</td><td class='pricecolumnsent'>"+ sentparseddata[i].price +"</td><td class='statuscolumnsent'>"+ sentparseddata[i].status +"</td><td class='deliveryrcptcolsent'>"+ sentparseddata[i].deliveryreceipt +"</td><td class='messagecolumnsent'>"+ procmessage +"</td></tr>");
1211
-                }
1212
-
1213
-                $('#smstables').append("<div id='totalsentmessages'><span>Total displayed messages: " + sentparseddata.length + "</span></div>");
1214
-
1215
-                $('#smstables').removeClass('icon-loading');
1216
-
1217
-                $('#sentarrow').removeClass('arrowUpCl');
1218
-                $('#sentarrow').addClass('arrowDownCl');
1219
-
1220
-
1221
-                // Show the pop-up window that lists all the messages sent/received to/from a phone number
1222
-                function showMsgPerNmbr(clckPhNumber) {
1223
-
1224
-                   var allfrmtomsg = "<div id='listAllMsgsFromTo'>";
1225
-                   allfrmtomsg += "<div id='draglstMsgmWindow'><img src='/apps/sms_relentless/img/dots.svg'></div>";
1226
-                   allfrmtomsg += "<a id='closeFrmMsgWindow' class='oc-dialog-close' title='Close this window'></a>";
1227
-                   allfrmtomsg += "<div class='showByNmbrTitle'>Messages sent/received to/from  <span style='color:#04957b'>"+ clckPhNumber +"</span></div>";
1228
-                   allfrmtomsg += "<div id='frmMsgLstWrap'><div id='loadMoreMsgs' title='Click to load older messages.'>Load more messages</div><div id='loadMoreMsgsusr' title='Click to load older messages.'>Load more messages</div>";
1229
-                   allfrmtomsg += "<table id='frmMsgLstTbl'></table></div>";
1230
-                   allfrmtomsg += "<input type='submit' id='sendMsgToNmb' value='Send a message to "+ clckPhNumber +"'>";
1231
-                   allfrmtomsg += "<div id='draglstMsgmWindowsc'><img src='/apps/sms_relentless/img/dots.svg'></div>";
1232
-                   allfrmtomsg += "</div>";
1233
-
1234
-                   $("#content").append("<div id='recTblOverlay'></div>");
1235
-                   $("#content").append(allfrmtomsg);
1236
-
1237
-                   var topDist = parseInt((window.innerHeight / 2).toFixed(2) - 250) +"px";
1238
-                   var leftDist = parseInt((window.innerWidth / 2).toFixed(2) - 300) +"px";
1239
-                   $("#listAllMsgsFromTo").css({ "top" : topDist, "left" : leftDist });
1240
-
1241
-                   $("#closeFrmMsgWindow").click(function() { $("#listAllMsgsFromTo").remove(); $("#recTblOverlay").remove(); });
1242
-                   $("#recTblOverlay").click(function() { $("#listAllMsgsFromTo").remove(); $("#recTblOverlay").remove(); });
1243
-
1244
-                   $("#sendMsgToNmb").click(function() {
1245
-
1246
-                      if ($("#currentsmsnmbrs").val() == null) { $("#selectcalleridbttn").click(); }
1247
-                      var clckPhNumberst = clckPhNumber.replace("+", "");
1248
-                      $("#smsto").val(clckPhNumberst);
1249
-                      $("#smstext").focus();
1250
-                      $("#listAllMsgsFromTo").remove();
1251
-                      $("#recTblOverlay").remove();
1252
-                   });
1253
-
1254
-	           // Make the window draggable
1255
-	           function makeMgrWndDraggable(e) {
1256
-
1257
-			   window.pmdragging = {};
1258
-			   pmdragging.pageX0 = e.pageX;
1259
-			   pmdragging.pageY0 = e.pageY;
1260
-			   pmdragging.elem = $("#listAllMsgsFromTo");
1261
-			   pmdragging.offset0 = $("#listAllMsgsFromTo").offset();
1262
-
1263
-			   function handle_dragging(e) {
1264
-			       var left = pmdragging.offset0.left + (e.pageX - pmdragging.pageX0);
1265
-			       var top = pmdragging.offset0.top + (e.pageY - pmdragging.pageY0);
1266
-			       $(pmdragging.elem).offset({top: top, left: left});
1267
-			   }
1268
-
1269
-			   function handle_mouseup(e) {
1270
-			       $('body').off('mousemove', handle_dragging).off('mouseup', handle_mouseup);
1271
-			   }
1272
-
1273
-			   $('body').on('mouseup', handle_mouseup).on('mousemove', handle_dragging);
1274
-	           }
1275
-	           $("#draglstMsgmWindow").mousedown(makeMgrWndDraggable);
1276
-	           $("#draglstMsgmWindowsc").mousedown(makeMgrWndDraggable);
1277
-
1278
-                   // Get the sent/received messages for the current phone number, from the database
1279
-		   var getGroupedPnUrl = OC.generateUrl("/apps/sms_relentless/user/getgroupedpernumber");
1280
-
1281
-		   $('#listAllMsgsFromTo').addClass('icon-loading');
1282
-		   var totalPhNmbrs = 0;
1283
-
1284
-		   $.ajax({
1285
-			  method: 'POST',
1286
-			  url: getGroupedPnUrl + '/' + userid,
1287
-			  contentType: 'application/json',
1288
-                          data: JSON.stringify({ phoneNumber: clckPhNumber }),
1289
-			  success: function(groupedpernb) {
1290
-
1291
-				     $('#listAllMsgsFromTo').removeClass('icon-loading');
1292
-
1293
-				     var fromtoNmbrsData = [];
1294
-
1295
-				     for (var i = 0; i < groupedpernb.length; i++) {
1296
-
1297
-					     if (groupedpernb[i].author_displayname) {
1298
-						 var authordnm = groupedpernb[i].author_displayname;
1299
-					     } else { 
1300
-						 var authordnm = groupedpernb[i].user_id;
1301
-					     }
1302
-
1303
-					     var sentfromnmbrarr = groupedpernb[i].from.split("+");
1304
-				             if (sentfromnmbrarr[1]) {
1305
-						 var groupednbfrom = "+"+ sentfromnmbrarr[1];
1306
-				             } else {
1307
-						 var groupednbfrom = sentfromnmbrarr[0];
1308
-				             }
1309
-
1310
-				             var modmessagesent = '';
1311
-				             if (groupedpernb[i].author_displayname) {
1312
-						 modmessagesent = "<span class='msgAuthorNameGrp'>"+ groupedpernb[i].author_displayname + ":</span>" + groupedpernb[i].message;
1313
-				             } else {
1314
-			                         modmessagesent = groupedpernb[i].message;
1315
-                                             }
1316
-
1317
-				             if (groupedpernb[i].to.indexOf(": ") > -1) {
1318
-				                 var groupednmbrtopre = groupedpernb[i].to.split(": ");
1319
-				                 var groupednmbrto = groupednmbrtopre[1];
1320
-				             } else { 
1321
-				                 var groupednmbrto = groupedpernb[i].to;
1322
-				             }
1323
-
1324
-				             fromtoNmbrsData.push({
1325
-				                       'author_displayname': authordnm,
1326
-				                       'from': groupednbfrom,
1327
-				                       'to': groupednmbrto,
1328
-				                       'message': modmessagesent,
1329
-				                       'date': groupedpernb[i].date,
1330
-				                       'status': groupedpernb[i].deliveryreceipt,
1331
-				                       'table': groupedpernb[i].table
1332
-				             });
1333
-				     }
1334
-
1335
-
1336
-				     // Remove the duplicates
1337
-				     var noDupMsgData = [];
1338
-				     $.each(fromtoNmbrsData, function(i, e) {
1339
-					    var matchingData = $.grep(noDupMsgData, function(item) {
1340
-				                    return item.from == e.from && item.to == e.to && item.message == e.message && item.table == 'received' && e.table == 'sent';
1341
-					    });
1342
-					    if (matchingData.length === 0) {
1343
-						noDupMsgData.push(e);
1344
-					    }
1345
-				     });
1346
-
1347
-				     var messagesPerNmbr = {};
1348
-				     var msgsNamesPerNmbr = {};
1349
-				     var msgsNmbrsNames = {};
1350
-
1351
-			             var displayNamesarr = [];
1352
-			             var convData = [];
1353
-
1354
-			             for (var n = 0; n < noDupMsgData.length; n++) {
1355
-
1356
-			                  if (noDupMsgData[n]['from'] == clckPhNumber && noDupMsgData[n]['table'] == 'sent') {
1357
-
1358
-			                      convData.push({
1359
-			                                     'author_displayname': noDupMsgData[n]['author_displayname'],
1360
-			                                     'message': noDupMsgData[n]['message'],
1361
-			                                     'from': noDupMsgData[n]['from'],
1362
-			                                     'to': noDupMsgData[n]['to'],
1363
-			                                     'date': noDupMsgData[n]['date'],
1364
-			                                     'direction': 'sent_from',
1365
-			                                     'status': noDupMsgData[n]['status'],
1366
-			                                     'table': noDupMsgData[n]['table']
1367
-			                      });
1368
-
1369
-			                  } else if (noDupMsgData[n]['to'] == clckPhNumber && noDupMsgData[n]['table'] == 'sent') {
1370
-
1371
-			                      convData.push({
1372
-			                                     'author_displayname': noDupMsgData[n]['author_displayname'],
1373
-			                                     'message': noDupMsgData[n]['message'],
1374
-			                                     'from': noDupMsgData[n]['from'],
1375
-			                                     'to': noDupMsgData[n]['to'],
1376
-			                                     'date': noDupMsgData[n]['date'],
1377
-			                                     'direction': 'sent_to',
1378
-			                                     'status': noDupMsgData[n]['status'],
1379
-			                                     'table': noDupMsgData[n]['table']
1380
-			                      });
1381
-
1382
-
1383
-			                  } else if (noDupMsgData[n]['from'] == clckPhNumber && noDupMsgData[n]['table'] == 'received') {
1384
-
1385
-			                      convData.push({
1386
-			                                     'author_displayname': noDupMsgData[n]['author_displayname'],
1387
-			                                     'message': noDupMsgData[n]['message'],
1388
-			                                     'from': noDupMsgData[n]['from'],
1389
-			                                     'to': noDupMsgData[n]['to'],
1390
-			                                     'date': noDupMsgData[n]['date'],
1391
-			                                     'direction': 'received_from',
1392
-			                                     'status': noDupMsgData[n]['status'],
1393
-			                                     'table': noDupMsgData[n]['table']
1394
-			                      });
1395
-
1396
-			                  } else if (noDupMsgData[n]['to'] == clckPhNumber && noDupMsgData[n]['table'] == 'received') {
1397
-
1398
-			                      convData.push({
1399
-			                                     'author_displayname': noDupMsgData[n]['author_displayname'],
1400
-			                                     'message': noDupMsgData[n]['message'],
1401
-			                                     'from': noDupMsgData[n]['from'],
1402
-			                                     'to': noDupMsgData[n]['to'],
1403
-			                                     'date': noDupMsgData[n]['date'],
1404
-			                                     'direction': 'received_on',
1405
-			                                     'status': noDupMsgData[n]['status'],
1406
-			                                     'table': noDupMsgData[n]['table']
1407
-			                      });
1408
-			                  }
1409
-			             }
1410
-
1411
-			             // Sort messages by date
1412
-				     convData.sort(function(a, b) {
1413
-					var c = new Date(a.date);
1414
-					var d = new Date(b.date);
1415
-					return c-d;
1416
-				     });
1417
-                                     convData.reverse();
1418
-
1419
-			             // Collect the display names of the users that sent messages from the current number
1420
-			             var selectedNames = [];
1421
-			             var displayNames = '';
1422
-			             for (var v = 0; v < convData.length; v++) {
1423
-			                  if (selectedNames.indexOf(convData[v]['author_displayname']) == -1) { 
1424
-			                      selectedNames.push(convData[v]['author_displayname']);
1425
-			                      displayNames += "<div id='diplNm_"+ clckPhNumber +"_"+ v +"' class='dispNameList' name='"+ convData[v]['author_displayname'] +"'>"+ convData[v]['author_displayname'] +"</div>";
1426
-			                  }
1427
-			             }
1428
-			             displayNames += "<div id='diplNmAllMsg' class='dispNameListAll' title='Show all the messages for this number.'>"+ clckPhNumber +"</div>";
1429
-
1430
-			             // Store the display names for the current number, to be able to see them later
1431
-			             var ctPhNumber = clckPhNumber;
1432
-			             msgsNamesPerNmbr[ctPhNumber] = displayNames;
1433
-
1434
-			             // Store the messages sent by each user, to be able to see them later when clicking on the user's name
1435
-			             for (var h = 0; h < selectedNames.length; h++) {
1436
-
1437
-			                  var rowMessageArrpn = [];
1438
-			                  for (var b = 0; b < convData.length; b++) {
1439
-
1440
-			                       if (selectedNames[h] == convData[b]['author_displayname']) {
1441
-
1442
-					           if (convData[b]['direction'] == 'sent_from') {
1443
-					               if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1) {
1444
-					                   var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='Message delivered.'>";
1445
-					               } else {
1446
-					                   var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='There were issues while sending the message.'>";
1447
-					               }
1448
-					               rowMessageArrpn.push("<div style='display:block;width:97%;float:right;margin:4px 6px 4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fbff;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>");
1449
-					           } else if (convData[b]['direction'] == 'sent_to') {
1450
-					               if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1) {
1451
-					                   var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='Message delivered.'>";
1452
-					               } else {
1453
-					                   var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='There were issues while sending the message.'>";
1454
-					               }
1455
-					               rowMessageArrpn.push("<div style='display:block;width:97%;float:right;margin:4px 6px 4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fbff;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>");
1456
-					           } else if (convData[b]['direction'] == 'received_from') {
1457
-					               rowMessageArrpn.push("<div style='display:block;width:97%;float:left;margin:4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fff8;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div></div>");
1458
-					           } else if (convData[b]['direction'] == 'received_on') {
1459
-					               rowMessageArrpn.push("<div style='display:block;width:97%;float:left;margin:4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fff8;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div></div>");
1460
-			                           }
1461
-			                       }
1462
-			                  }
1463
-			                  var crtNmber = clckPhNumber;
1464
-			                  var crtName = selectedNames[h];
1465
-			                  msgsNmbrsNames[crtNmber] = msgsNmbrsNames[crtNmber] || {};
1466
-                                          msgsNmbrsNames[crtNmber][crtName] = rowMessageArrpn;
1467
-			             }
1468
-
1469
-                                     // The number of messages to be loaded by default
1470
-                                     var nmbTblDefault = 50;
1471
-
1472
-                                     // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button
1473
-                                     if (convData.length > nmbTblDefault) {
1474
-                                         $("#loadMoreMsgs").css("display", "block");
1475
-                                         var nmbToBeLoaded = nmbTblDefault;
1476
-                                     } else { var nmbToBeLoaded = convData.length; }
1477
-
1478
-			             var rowMessageArr = [];
1479
-			             for (var m = nmbToBeLoaded - 1; m >= 0; m--) {
1480
-
1481
-			                  if (convData[m]['direction'] == 'sent_from') {
1482
-
1483
-			                      if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) {
1484
-			                          var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='Message delivered.'>";
1485
-			                      } else {
1486
-			                          var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='There were issues while sending the message.'>";
1487
-			                      }
1488
-			                      rowMessageArr.push("<div style='display:block;width:97%;float:right;margin:4px 6px 4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fbff;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>");
1489
-
1490
-			                  } else if (convData[m]['direction'] == 'sent_to') {
1491
-
1492
-			                      if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) {
1493
-			                          var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='Message delivered.'>";
1494
-			                      } else {
1495
-			                          var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='There were issues while sending the message.'>";
1496
-			                      }
1497
-			                      rowMessageArr.push("<div style='display:block;width:97%;float:right;margin:4px 6px 4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fbff;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>");
1498
-
1499
-			                  } else if (convData[m]['direction'] == 'received_from') {
1500
-
1501
-					      rowMessageArr.push("<div style='display:block;width:97%;float:left;margin:4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fff8;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>");
1502
-
1503
-			                  } else if (convData[m]['direction'] == 'received_on') {
1504
-
1505
-					      rowMessageArr.push("<div style='display:block;width:97%;float:left;margin:4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fff8;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>");
1506
-			                  }
1507
-			             }
1508
-
1509
-			             var convDataPerNmbr = rowMessageArr.join("");
1510
-
1511
-				     $("#frmMsgLstTbl").append("<tr class='groupedrowsbody'><td><div class='groupedLstNamespn'>"+ displayNames +"</div></td><td><div id='msgListRowCell' class='groupedLstMsgspn'>"+ convDataPerNmbr +"</div><div id='arrowupWrap'><div id='upArrowSmall' title='Scroll to the top'></div></div></td></tr>");
1512
-
1513
-
1514
-			             // Store the messages for the current number, to be able to see them later, when clicking on the number
1515
-			             var rowMessageArrcpt = [];
1516
-			             for (var m = 0; m < convData.length; m++) {
1517
-
1518
-			                  if (convData[m]['direction'] == 'sent_from') {
1519
-
1520
-			                      if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) {
1521
-			                          var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='Message delivered.'>";
1522
-			                      } else {
1523
-			                          var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='There were issues while sending the message.'>";
1524
-			                      }
1525
-			                      rowMessageArrcpt.push("<div style='display:block;width:97%;float:right;margin:4px 6px 4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fbff;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>");
1526
-
1527
-			                  } else if (convData[m]['direction'] == 'sent_to') {
1528
-
1529
-			                      if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) {
1530
-			                          var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='Message delivered.'>";
1531
-			                      } else {
1532
-			                          var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='There were issues while sending the message.'>";
1533
-			                      }
1534
-			                      rowMessageArrcpt.push("<div style='display:block;width:97%;float:right;margin:4px 6px 4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fbff;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>");
1535
-
1536
-			                  } else if (convData[m]['direction'] == 'received_from') {
1537
-
1538
-					      rowMessageArrcpt.push("<div style='display:block;width:97%;float:left;margin:4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fff8;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>");
1539
-
1540
-			                  } else if (convData[m]['direction'] == 'received_on') {
1541
-
1542
-					      rowMessageArrcpt.push("<div style='display:block;width:97%;float:left;margin:4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fff8;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>");
1543
-			                  }
1544
-			             }
1545
-
1546
-			             messagesPerNmbr[clckPhNumber] = rowMessageArrcpt;
1547
-
1548
-                                     // Scroll down to the bottom of the window
1549
-                                     $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200);
1550
-
1551
-                                     // Load more messages
1552
-                                     var clickNmb = 0;
1553
-                                     $("#loadMoreMsgs").click(function() {
1554
-
1555
-                                         clickNmb++;
1556
-
1557
-                                         var crefnb = (clickNmb + 1) * nmbToBeLoaded;
1558
-
1559
-                                         if (crefnb > convData.length) {
1560
-                                             var nmbmsg = convData.length - 1;
1561
-                                             $("#loadMoreMsgs").css("display", "none");
1562
-                                         } else { 
1563
-                                             var nmbmsg = crefnb - 1;
1564
-                                         }
1565
-
1566
-                                         var rowMessageArrAdd = [];
1567
-
1568
-                                         for (var m = nmbmsg; m >= clickNmb * nmbToBeLoaded; m--) {
1569
-
1570
-			                      if (convData[m]['direction'] == 'sent_from') {
1571
-
1572
-			                          if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) {
1573
-			                              var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='Message delivered.'>";
1574
-			                          } else {
1575
-			                              var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='There were issues while sending the message.'>";
1576
-			                          }
1577
-			                          rowMessageArrAdd.push("<div style='display:block;width:97%;float:right;margin:4px 6px 4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fbff;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>");
1578
-
1579
-			                      } else if (convData[m]['direction'] == 'sent_to') {
1580
-
1581
-			                          if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) {
1582
-			                              var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='Message delivered.'>";
1583
-			                          } else {
1584
-			                              var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='There were issues while sending the message.'>";
1585
-			                          }
1586
-			                          rowMessageArrAdd.push("<div style='display:block;width:97%;float:right;margin:4px 6px 4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fbff;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>");
1587
-
1588
-			                      } else if (convData[m]['direction'] == 'received_from') {
1589
-
1590
-					          rowMessageArrAdd.push("<div style='display:block;width:97%;float:left;margin:4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fff8;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>");
1591
-
1592
-			                      } else if (convData[m]['direction'] == 'received_on') {
1593
-
1594
-					          rowMessageArrAdd.push("<div style='display:block;width:97%;float:left;margin:4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fff8;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>");
1595
-			                      }
1596
-                                         }
1597
-
1598
-			                 var convDataPerNmbrad = rowMessageArrAdd.join("");
1599
-
1600
-                                         var scrlheight = $("#msgListRowCell").height();
1601
-                                         $("#msgListRowCell").prepend(convDataPerNmbrad);
1602
-
1603
-                                         $("#frmMsgLstWrap").scrollTop($("#msgListRowCell").height() - scrlheight);
1604
-                                     });
1605
-
1606
-
1607
-			             // Show the messages sent by each user whose name is clicked
1608
-			             $('[id*="diplNm_"]').click(function() {
1609
-
1610
-			                 var crntNmbr = $(this).attr("id").split("_")[1];
1611
-			                 var crntDisName = $(this).attr("name");                               
1612
-                                         $("#loadMoreMsgs").css("display", "none");
1613
-
1614
-                                         var convDataprn = [];
1615
-                                         $.each(msgsNmbrsNames[crntNmbr][crntDisName], function(index, item) {
1616
-                                                convDataprn.push(item);
1617
-                                         });
1618
-
1619
-                                         // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button
1620
-                                         if (convDataprn.length > nmbTblDefault) {
1621
-                                             $("#loadMoreMsgsusr").css("display", "block");
1622
-                                             var nmbToBeLoaded = nmbTblDefault;
1623
-                                         } else { var nmbToBeLoaded = convDataprn.length; }
1624
-
1625
-
1626
-			                 var rowMessageArrprnst = [];
1627
-
1628
-			                 for (var n = nmbToBeLoaded - 1; n >= 0; n--) {
1629
-                                              rowMessageArrprnst.push(convDataprn[n]);
1630
-			                 }
1631
-
1632
-			                 var convDataPerNmbrprnst = rowMessageArrprnst.join("");
1633
-
1634
-                                         $("#msgListRowCell").empty();
1635
-                                         $("#msgListRowCell").append(convDataPerNmbrprnst);
1636
-
1637
-                                         // Scroll down to the bottom of the window
1638
-                                         $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200);
1639
-
1640
-                                         // Load more messages
1641
-                                         var clckNb = 0;
1642
-                                         $("#loadMoreMsgsusr").unbind("click");
1643
-                                         $("#loadMoreMsgsusr").click(function() {
1644
-
1645
-                                             clckNb++;
1646
-                                             var crefnb = (clckNb + 1) * nmbToBeLoaded;
1647
-
1648
-                                             if (crefnb > convDataprn.length) {
1649
-                                                 var nmbmsg = convDataprn.length - 1;
1650
-                                                 $("#loadMoreMsgsusr").css("display", "none");
1651
-                                             } else { 
1652
-                                                 var nmbmsg = crefnb - 1;
1653
-                                                 $("#loadMoreMsgsusr").css("display", "block");
1654
-                                             }
1655
-
1656
-                                             $("#loadMoreMsgs").css("display", "none");
1657
-
1658
-                                             var rowMessageArrAddst = [];
1659
-
1660
-                                             for (var q = nmbmsg; q >= clckNb * nmbToBeLoaded; q--) {
1661
-
1662
-                                                  rowMessageArrAddst.push(convDataprn[q]);
1663
-                                             }
1664
-
1665
-			                     var convDataPerNmbradst = rowMessageArrAddst.join("");
1666
-
1667
-                                             var scrlheight = $("#msgListRowCell").height();
1668
-                                             $("#msgListRowCell").prepend(convDataPerNmbradst);
1669
-
1670
-                                             $("#frmMsgLstWrap").scrollTop($("#msgListRowCell").height() - scrlheight);
1671
-                                         });
1672
-
1673
-
1674
-			                 $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); });
1675
-			                 $("#diplNmAllMsg").css("color", "#04957b");
1676
-			                 $(this).css("color", "#1b8efe");
1677
-			             });
1678
-
1679
-
1680
-			             // Show again all the messages sent/received to/from the clicked number
1681
-			             $("#diplNmAllMsg").click(function() {
1682
-
1683
-                                         $("#loadMoreMsgsusr").css("display", "none");
1684
-                                         $("#loadMoreMsgs").css("display", "block");
1685
-                         
1686
-                                         $("#loadMoreMsgs").css("display", "none");
1687
-
1688
-                                         var convDataprn = [];
1689
-                                         $.each(messagesPerNmbr[clckPhNumber], function(index, item) {
1690
-                                                convDataprn.push(item);
1691
-                                         });
1692
-
1693
-                                         // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button
1694
-                                         if (convDataprn.length > nmbTblDefault) {
1695
-                                             $("#loadMoreMsgsusr").css("display", "block");
1696
-                                             var nmbToBeLoaded = nmbTblDefault;
1697
-                                         } else { var nmbToBeLoaded = convDataprn.length; }
1698
-
1699
-
1700
-			                 var rowMessageArrprnst = [];
1701
-
1702
-			                 for (var n = nmbToBeLoaded - 1; n >= 0; n--) {
1703
-                                              rowMessageArrprnst.push(convDataprn[n]);
1704
-			                 }
1705
-
1706
-			                 var convDataPerNmbrprnst = rowMessageArrprnst.join("");
1707
-
1708
-                                         $("#msgListRowCell").empty();
1709
-                                         $("#msgListRowCell").append(convDataPerNmbrprnst);
1710
-
1711
-                                         // Scroll down to the bottom of the window
1712
-                                         $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200);
1713
-
1714
-
1715
-                                         // Load more messages
1716
-                                         var clckNb = 0;
1717
-                                         $("#loadMoreMsgsusr").unbind("click");
1718
-                                         $("#loadMoreMsgsusr").click(function() {
1719
-
1720
-                                             clckNb++;
1721
-                                             var crefnb = (clckNb + 1) * nmbToBeLoaded;
1722
-
1723
-                                             if (crefnb > convDataprn.length) {
1724
-                                                 var nmbmsg = convDataprn.length - 1;
1725
-                                                 $("#loadMoreMsgsusr").css("display", "none");
1726
-                                             } else { 
1727
-                                                 var nmbmsg = crefnb - 1;
1728
-                                                 $("#loadMoreMsgsusr").css("display", "block");
1729
-                                             }
1730
-
1731
-                                             $("#loadMoreMsgs").css("display", "none");
1732
-
1733
-                                             var rowMessageArrAddst = [];
1734
-
1735
-                                             for (var q = nmbmsg; q >= clckNb * nmbToBeLoaded; q--) {
1736
-
1737
-                                                  rowMessageArrAddst.push(convDataprn[q]);
1738
-                                             }
1739
-
1740
-			                     var convDataPerNmbradst = rowMessageArrAddst.join("");
1741
-
1742
-                                             var scrlheight = $("#msgListRowCell").height();
1743
-                                             $("#msgListRowCell").prepend(convDataPerNmbradst);
1744
-
1745
-                                             $("#frmMsgLstWrap").scrollTop($("#msgListRowCell").height() - scrlheight);
1746
-                                         });
1747
-
1748
-
1749
-			                 $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); });
1750
-			                 $("#diplNmAllMsg").css("color", "#04957b");
1751
-			                 $(this).css("color", "#04c6a4");
1752
-
1753
-			             });
1754
-
1755
-
1756
-				     // Show the scroll-up arrow
1757
-				     $("#frmMsgLstWrap").scroll(function() {
1758
-					if ($(this).scrollTop() > 900) {
1759
-					      $('#upArrowSmall').fadeIn();
1760
-					} else {
1761
-					      $('#upArrowSmall').fadeOut();
1762
-					}
1763
-				     });
1764
-
1765
-				     $("#upArrowSmall").click(function() {
1766
-					$("#frmMsgLstWrap").animate({scrollTop : 0},400);
1767
-				     });
1768
-
1769
-			  },
1770
-			  error: function() {
1771
-				     alert("Error while attempting to get message data from the database!");
1772
-				     $('#listAllMsgsFromTo').removeClass('icon-loading');
1773
-			  }
1774
-		   });
1775
-                }
1776
-
1777
-
1778
-                $('[id^="showMsgFrom-"]').click(function() {
1779
-
1780
-                   var ctrwnb = $(this).attr("id").replace("showMsgFrom-", "");
1781
-                   if ($("#frmNmbr-"+ ctrwnb).text().indexOf(":") > -1) {
1782
-                       var clckPhNumber = $("#frmNmbr-"+ ctrwnb).text().split(": ")[1];
1783
-                   } else { var clckPhNumber = $("#frmNmbr-"+ ctrwnb).text(); }
1784
-
1785
-                   showMsgPerNmbr(clckPhNumber);
1786
-                })
1787
-
1788
-                $('[id^="showMsgTo-"]').click(function() {
1789
-                   var ctrwnbTo = $(this).attr("id").replace("showMsgTo-", "");
1790
-                   var clckPhNbTo = $("#toNmbr-"+ ctrwnbTo).text();
1791
-
1792
-                   showMsgPerNmbr(clckPhNbTo);
1793
-                })
1794
-
1795
-
1796
-                // Add pagination
1797
-                var rowsShown = messagesperpage;
1798
-                var rowsTotal = $("#sentSmsTable tr").length;
1799
-                var numPages = (rowsTotal - 2) / rowsShown;
1800
-
1801
-                for (i = 0; i < numPages; i++) {
1802
-                     var pageNum = i + 1;
1803
-                     $('#paginationsent').append('<a href="#" rel="' + i + '" class="pagenumbers">' + pageNum + '</a> ');
1804
-                }
1805
-
1806
-                $('#paginationsent').children(":first").addClass('active');
1807
-
1808
-                $(".sentrowsbody").hide();
1809
-
1810
-                $('#paginationsent a:first').addClass('active');
1811
-
1812
-                // Show table page when clicking on page number
1813
-                $('.pages a').bind('click', function () {
1814
-
1815
-                      $('#paginationsent').children().removeClass('active');
1816
-
1817
-                      $(this).addClass('active');
1818
-
1819
-                      var currentsentPgNo = $(this).text();
1820
-
1821
-                      $('#paginationsent a').each(function() {
1822
-                         if ($(this).text() == currentsentPgNo) {
1823
-                             $(this).addClass('active');
1824
-                         }
1825
-                      });
1826
-
1827
-                      // Sort table rows
1828
-		      var rows = $('#sentSmsTable tr').get();
1829
-
1830
-		      rows.sort(function(a, b) {
1831
-
1832
-		           var A = parseInt($('td.sentdbidcolumn', a).text());
1833
-		           var B = parseInt($('td.sentdbidcolumn', b).text());
1834
-
1835
-		           if (A < B) {
1836
-		               return -1;
1837
-		           }
1838
-
1839
-		           if (A > B) {
1840
-		               return 1;
1841
-		           }
1842
-
1843
-		           return 0;
1844
-		      });
1845
-
1846
-		      $.each(rows, function(index, row) {
1847
-		         $('#sentSmsTable').append(row);
1848
-		      });
1849
-
1850
-                      var currPage = $(this).attr('rel');
1851
-                      var startItem = currPage * rowsShown;
1852
-                      var endItem = startItem + rowsShown;
1853
-
1854
-                      $('.sentrowsbody').hide().slice(startItem, endItem).css('display', 'table-row');
1855
-
1856
-                      $('#totalsentmessages').remove();
1857
-                      $('#smstables').append("<div id='totalsentmessages'>Total displayed messages: " + sentparseddata.length + "</div>");
1858
-                });
1859
-
1860
-                $('#paginationsent').children(":last").trigger('click');
1861
-
1862
-                // Select all records
1863
-                $('#selectAllChckbx').change(function() {
1864
-                   if ($(this).is(':checked')) {
1865
-                       $(".indivchckbx").prop("checked", true);
1866
-                   } else {
1867
-                       $(".indivchckbx").prop("checked", false);
1868
-                   }
1869
-                });
1870
-
1871
-                function reorderSentRows() {
1872
-                    var currenttext = $(".filterbuttonsent").closest('[class="filterbuttonsent"]').find('[class="indivfiltersent"]').text();
1873
-                    if (currenttext == '') {
1874
-                        $('tr').sort(function (a, b) {
1875
-                           return parseInt($('td.sentdbidcolumn', b).text()) < parseInt($('td.sentdbidcolumn', a).text());
1876
-                        }).appendTo("#sentSmsTable");
1877
-                    }
1878
-                }
1879
-
1880
-                // Filter rows
1881
-                $("#databaseidfilter").on("click", function(event) {
1882
-
1883
-                       var databaseId = $("#dbidtextsent").val();
1884
-                       var msgrowsNo = 0;
1885
-
1886
-                       $(".sentrowsbody").each(function() {
1887
-
1888
-                          var checkEmpty = 0;
1889
-                          $(".indivfiltersent").not("#dbidtextsent").each(function() {
1890
-                              if ($(this).val() != '') {
1891
-                                  checkEmpty = 1;
1892
-                              }
1893
-                          });
1894
-
1895
-                          if (checkEmpty == 0) {
1896
-                              $(this).show();
1897
-                          }
1898
-
1899
-                          if (databaseId != '') {
1900
-                             if ($(this).find('[class="sentdbidcolumn"]').text() == databaseId) {
1901
-                                 $("#sentSmsTable").append(this);
1902
-                                 if ($(this).is(":visible")) { msgrowsNo++; }
1903
-                             } else {
1904
-                                 $(this).hide();
1905
-                             }
1906
-                          } else {
1907
-                                 $(this).show();
1908
-                                 msgrowsNo++;
1909
-                          }
1910
-                       });
1911
-
1912
-                       reorderSentRows();
1913
-                       $('#totalsentmessages').remove();
1914
-                       $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>");
1915
-                });
1916
-
1917
-                $("#useridfilter").on("click", function(event) {
1918
-
1919
-                       var useridtxt = $("#useridtext").val().toLowerCase();
1920
-                       var msgrowsNo = 0;
1921
-
1922
-                       $(".sentrowsbody").each(function() {
1923
-
1924
-                          var checkEmpty1 = 0;
1925
-                          $(".indivfiltersent").not("#useridtext").each(function() {
1926
-                              if ($(this).val() != '') {
1927
-                                  checkEmpty1 = 1;
1928
-                              }
1929
-                          });
1930
-
1931
-                          if (checkEmpty1 == 0) {
1932
-                              $(this).show();
1933
-                          }
1934
-
1935
-                          if (useridtxt != '') {
1936
-                              var founduserid = $(this).find('[class="useridcolsent"]').text().toLowerCase();
1937
-                              if (founduserid.indexOf(useridtxt) != -1) {
1938
-                                  $("#sentSmsTable").append(this);
1939
-                                  if ($(this).is(":visible")) { msgrowsNo++; }
1940
-                             } else {
1941
-                                  $(this).hide();
1942
-                             }
1943
-                          } else {
1944
-                                  $(this).show();
1945
-                                  msgrowsNo++;
1946
-                          }
1947
-                       });
1948
-
1949
-                       reorderSentRows();
1950
-                       $('#totalsentmessages').remove();
1951
-                       $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>");
1952
-                });
1953
-
1954
-                $("#messageidfilter").on("click", function(event) {
1955
-
1956
-                       var messageidtxt = $("#messageidtext").val().toLowerCase();
1957
-                       var msgrowsNo = 0;
1958
-
1959
-                       $(".sentrowsbody").each(function() {
1960
-
1961
-                          var checkEmpty2 = 0;
1962
-                          $(".indivfiltersent").not("#messageidtext").each(function() {
1963
-                              if ($(this).val() != '') {
1964
-                                  checkEmpty2 = 1;
1965
-                              }
1966
-                          });
1967
-
1968
-                          if (checkEmpty2 == 0) {
1969
-                              $(this).show();
1970
-                          }
1971
-
1972
-                          if (messageidtxt != '') {
1973
-                              var foundtdmssgid = $(this).find('[class="messageidcolsent"]').text().toLowerCase();
1974
-                              if (foundtdmssgid.indexOf(messageidtxt) != -1) {
1975
-                                  $("#sentSmsTable").append(this);
1976
-                                  if ($(this).is(":visible")) { msgrowsNo++; }
1977
-                              } else {
1978
-                                  $(this).hide();
1979
-                              }
1980
-                          } else {
1981
-                                  $(this).show();
1982
-                                  msgrowsNo++;
1983
-                          }
1984
-                       });
1985
-
1986
-                       reorderSentRows();
1987
-                       $('#totalsentmessages').remove();
1988
-                       $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>");
1989
-                });
1990
-
1991
-                $("#datefilter").on("click", function(event) {
1992
-
1993
-                       var datetxtvr = $("#datetext").val().toLowerCase();
1994
-                       var msgrowsNo = 0;
1995
-
1996
-                       $(".sentrowsbody").each(function() {
1997
-
1998
-                          var checkEmpty3 = 0;
1999
-                          $(".indivfiltersent").not("#datetext").each(function() {
2000
-                              if ($(this).val() != '') {
2001
-                                  checkEmpty3 = 1;
2002
-                              }
2003
-                          });
2004
-
2005
-                          if (checkEmpty3 == 0) {
2006
-                              $(this).show();
2007
-                          }
2008
-
2009
-                          if (datetxtvr != '') {
2010
-                             var founddate = $(this).find('[class="datecolsent"]').text().toLowerCase();
2011
-                             if (founddate.indexOf(datetxtvr) != -1) {
2012
-                                 $("#sentSmsTable").append(this);
2013
-                                 if ($(this).is(":visible")) { msgrowsNo++; }
2014
-                             } else {
2015
-                                 $(this).hide();
2016
-                             }
2017
-                          } else {
2018
-                                 $(this).show();
2019
-                                 msgrowsNo++;
2020
-                          }
2021
-                       });
2022
-
2023
-                       reorderSentRows();
2024
-                       $('#totalsentmessages').remove();
2025
-                       $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>");
2026
-                });
2027
-
2028
-                $("#fromfilter").on("click", function(event) {
2029
-
2030
-                       var fromtxtvr = $("#fromtext").val().toLowerCase();
2031
-                       var msgrowsNo = 0;
2032
-
2033
-                       $(".sentrowsbody").each(function() {
2034
-
2035
-                          var checkEmpty4 = 0;
2036
-                          $(".indivfiltersent").not("#fromtext").each(function() {
2037
-                              if ($(this).val() != '') {
2038
-                                  checkEmpty4 = 1;
2039
-                              }
2040
-                          });
2041
-
2042
-                          if (checkEmpty4 == 0) {
2043
-                              $(this).show();
2044
-                          }
2045
-
2046
-                          if (fromtxtvr != '') {
2047
-                             var foundfrom = $(this).find('[class="fromcolumnsent"]').text().toLowerCase();
2048
-                             if (foundfrom.indexOf(fromtxtvr) != -1) {
2049
-                                 $("#sentSmsTable").append(this);
2050
-                                 if ($(this).is(":visible")) { msgrowsNo++; }
2051
-                             } else {
2052
-                                 $(this).hide();
2053
-                             }
2054
-                          } else {
2055
-                                 $(this).show();
2056
-                                 msgrowsNo++;
2057
-                          }
2058
-                       });
2059
-
2060
-                       reorderSentRows();
2061
-                       $('#totalsentmessages').remove();
2062
-                       $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>");
2063
-                });
2064
-
2065
-                $("#tofilter").on("click", function(event) {
2066
-
2067
-                      var totxtvr = $("#totext").val().toLowerCase();
2068
-                      var msgrowsNo = 0;
2069
-
2070
-                      $(".sentrowsbody").each(function() {
2071
-
2072
-                          var checkEmpty5 = 0;
2073
-                          $(".indivfiltersent").not("#totext").each(function() {
2074
-                              if ($(this).val() != '') {
2075
-                                  checkEmpty5 = 1;
2076
-                              }
2077
-                          });
2078
-
2079
-                          if (checkEmpty5 == 0) {
2080
-                              $(this).show();
2081
-                          }
2082
-
2083
-                          if (totxtvr != '') {
2084
-                             var foundto = $(this).find('[class="tocolumnsent"]').text().toLowerCase();
2085
-                             if (foundto.indexOf(totxtvr) != -1) {
2086
-                                 $("#sentSmsTable").append(this);
2087
-                                 if ($(this).is(":visible")) { msgrowsNo++; }
2088
-                             } else {
2089
-                                 $(this).hide();
2090
-                             }
2091
-                          } else {
2092
-                                 $(this).show();
2093
-                                 msgrowsNo++;
2094
-                          }
2095
-                      });
2096
-
2097
-                      reorderSentRows();
2098
-                      $('#totalsentmessages').remove();
2099
-                      $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>");
2100
-                });
2101
-
2102
-                $("#networkfilter").on("click", function(event) {
2103
-
2104
-                      var networktxtvr = $("#networktext").val().toLowerCase();
2105
-                      var msgrowsNo = 0;
2106
-
2107
-                      $(".sentrowsbody").each(function() {
2108
-
2109
-                          var checkEmpty6 = 0;
2110
-                          $(".indivfiltersent").not("#networktext").each(function() {
2111
-                              if ($(this).val() != '') {
2112
-                                  checkEmpty6 = 1;
2113
-                              }
2114
-                          });
2115
-
2116
-                          if (checkEmpty6 == 0) {
2117
-                              $(this).show();
2118
-                          }
2119
-
2120
-                          if (networktxtvr != '') {
2121
-                              var foundnetwork = $(this).find('[class="networkcolumnsent"]').text().toLowerCase();
2122
-                              if (foundnetwork.indexOf(networktxtvr) != -1) {
2123
-                                  $("#sentSmsTable").append(this);
2124
-                                  if ($(this).is(":visible")) { msgrowsNo++; }
2125
-                              } else {
2126
-                                  $(this).hide();
2127
-                              }
2128
-                          } else {
2129
-                                  $(this).show();
2130
-                                  msgrowsNo++;
2131
-                          }
2132
-                      });
2133
-
2134
-                      reorderSentRows();
2135
-                      $('#totalsentmessages').remove();
2136
-                      $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>");
2137
-                });
2138
-
2139
-                $("#pricefilter").on("click", function(event) {
2140
-
2141
-                      var pricetxtvr = $("#pricetext").val().toLowerCase();
2142
-                      var msgrowsNo = 0;
2143
-
2144
-                      $(".sentrowsbody").each(function() {
2145
-
2146
-                          var checkEmpty7 = 0;
2147
-                          $(".indivfiltersent").not("#pricetext").each(function() {
2148
-                              if ($(this).val() != '') {
2149
-                                  checkEmpty7 = 1;
2150
-                              }
2151
-                          });
2152
-
2153
-                          if (checkEmpty7 == 0) {
2154
-                              $(this).show();
2155
-                          }
2156
-
2157
-                          if (pricetxtvr != '') {
2158
-                              var foundprice = $(this).find('[class="pricecolumnsent"]').text().toLowerCase();
2159
-                              if (foundprice.indexOf(pricetxtvr) != -1) {
2160
-                                  $("#sentSmsTable").append(this);
2161
-                                  if ($(this).is(":visible")) { msgrowsNo++; }
2162
-                              } else {
2163
-                                  $(this).hide();
2164
-                              }
2165
-                          } else {
2166
-                                  $(this).show();
2167
-                                  msgrowsNo++;
2168
-                          }
2169
-                      });
2170
-
2171
-                      reorderSentRows();
2172
-                      $('#totalsentmessages').remove();
2173
-                      $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>");
2174
-                });
2175
-
2176
-                $("#statusfilter").on("click", function(event) {
2177
-
2178
-                      var statustxtvr = $("#statustext").val().toLowerCase();
2179
-                      var msgrowsNo = 0;
2180
-
2181
-                      $(".sentrowsbody").each(function() {
2182
-
2183
-                          var checkEmpty8 = 0;
2184
-                          $(".indivfiltersent").not("#statustext").each(function() {
2185
-                              if ($(this).val() != '') {
2186
-                                  checkEmpty8 = 1;
2187
-                              }
2188
-                          });
2189
-
2190
-                          if (checkEmpty8 == 0) {
2191
-                              $(this).show();
2192
-                          }
2193
-
2194
-                          if (statustxtvr != '') {
2195
-                              var foundstatus = $(this).find('[class="statuscolumnsent"]').text().toLowerCase();
2196
-                              if (foundstatus.indexOf(statustxtvr) != -1) {
2197
-                                  $("#sentSmsTable").append(this);
2198
-                                  if ($(this).is(":visible")) { msgrowsNo++; }
2199
-                              } else {
2200
-                                  $(this).hide();
2201
-                              }
2202
-                          } else {
2203
-                                  $(this).show();
2204
-                                  msgrowsNo++;
2205
-                          }
2206
-                      });
2207
-
2208
-                      reorderSentRows();
2209
-                      $('#totalsentmessages').remove();
2210
-                      $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>");
2211
-                });
2212
-
2213
-                $("#deliveryrecfilter").on("click", function(event) {
2214
-
2215
-                      var deliverytxtvr = $("#deliveryrcpttext").val().toLowerCase();
2216
-                      var msgrowsNo = 0;
2217
-
2218
-                      $(".sentrowsbody").each(function() {
2219
-
2220
-                          var checkEmpty9 = 0;
2221
-                          $(".indivfiltersent").not("#deliveryrcpttext").each(function() {
2222
-                              if ($(this).val() != '') {
2223
-                                  checkEmpty9 = 1;
2224
-                              }
2225
-                          });
2226
-
2227
-                          if (checkEmpty9 == 0) {
2228
-                              $(this).show();
2229
-                          }
2230
-
2231
-                          if (deliverytxtvr != '') {
2232
-                              var founddeliveryrcpt = $(this).find('[class="deliveryrcptcolsent"]').text().toLowerCase();
2233
-                              if (founddeliveryrcpt.indexOf(deliverytxtvr) != -1) {
2234
-                                  $("#sentSmsTable").append(this);
2235
-                                  if ($(this).is(":visible")) { msgrowsNo++; }
2236
-                              } else {
2237
-                                  $(this).hide();
2238
-                              }
2239
-                          } else {
2240
-                                  $(this).show();
2241
-                                  msgrowsNo++;
2242
-                          }
2243
-                      });
2244
-
2245
-                      reorderSentRows();
2246
-                      $('#totalsentmessages').remove();
2247
-                      $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>");
2248
-                });
2249
-
2250
-                $("#messagefilter").on("click", function(event) {
2251
-
2252
-                      var messagetxtvr = $("#messagetext").val().toLowerCase();
2253
-                      var msgrowsNo = 0;
2254
-
2255
-                      $(".sentrowsbody").each(function() {
2256
-
2257
-                          var checkEmpty10 = 0;
2258
-                          $(".indivfiltersent").not("#messagetext").each(function() {
2259
-                              if ($(this).val() != '') {
2260
-                                  checkEmpty10 = 1;
2261
-                              }
2262
-                          });
2263
-
2264
-                          if (checkEmpty10 == 0) {
2265
-                              $(this).show();
2266
-                          }
2267
-
2268
-                          if (messagetxtvr != '') {
2269
-                              var foundmessage = $(this).find('[class="messagecolumnsent"]').text().toLowerCase();
2270
-                              if (foundmessage.indexOf(messagetxtvr) != -1) {
2271
-                                  $("#sentSmsTable").append(this);
2272
-                                  if ($(this).is(":visible")) { msgrowsNo++; }
2273
-                              } else {
2274
-                                  $(this).hide();
2275
-                              }
2276
-                          } else {
2277
-                                  $(this).show();
2278
-                                  msgrowsNo++;
2279
-                          }
2280
-                      });
2281
-
2282
-                      reorderSentRows();
2283
-                      $('#totalsentmessages').remove();
2284
-                      $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>");
2285
-                });
2286
-
2287
-                // Clear all filters
2288
-                $("#clearsentfilters").on("click", function(event) {
2289
-                       $(".sentrowsbody").each(function() {
2290
-                          $(this).show();
2291
-                       });
2292
-                       $(".indivfiltersent").val("");
2293
-                       $('#totalsentmessages').remove();
2294
-                       $('#smstables').append("<div id='totalsentmessages'>Total displayed messages: " + sentparseddata.length + "</div>");
2295
-                });
2296
-
2297
-                // Delete selected rows from the database
2298
-                $("#deletesentrows").on("click", function() {
2299
-
2300
-                   var checkcheckbx = jQuery("#sentSmsTable input[type=checkbox]:checked").length;
2301
-                   if (checkcheckbx == 0) {
2302
-                       alert("Please select the row(s) to permanently delete from the database !");
2303
-                   } else {
2304
-                          var sentcheckboxIds = [];
2305
-                          $(".sentrowsbody").each(function() {
2306
-                             var sentrowcheckbx = $(this).find('input[type="checkbox"]');
2307
-                             if (sentrowcheckbx.is(":checked")) {
2308
-                                 var dbrowid = $(this).find('[class="sentdbidcolumn"]').text();
2309
-                                 sentcheckboxIds.push(dbrowid);
2310
-                             }
2311
-                          });
2312
-
2313
-                          if (confirm("Please note that the row(s) you selected will be permanently deleted from the database, without being saved before removal. This action cannot be undone ! If you really want to permanently delete the selected row(s) press 'OK'.")) {
2314
-
2315
-                              var deletesentRowsUrl = OC.generateUrl("/apps/sms_relentless/user/removesentrows");
2316
-                              $('#smstables').addClass('icon-loading');
2317
-
2318
-                              $.ajax({
2319
-                                   url: deletesentRowsUrl + '/' + userid,
2320
-                                   method: "POST",
2321
-                                   dataType:'text',
2322
-                                   data: {sentmessagedbIDs: sentcheckboxIds},
2323
-                                   success: function() {
2324
-                                            alert("The row(s) have been deleted successfully !");
2325
-                                            $('#smstables').removeClass('icon-loading');
2326
-                                            $('#sentsmstableshow').click();
2327
-                                   },
2328
-                                   error: function() {
2329
-                                            alert("There was an error while deleting the selected row(s) !");
2330
-                                            $('#smstables').removeClass('icon-loading');
2331
-                                   }
2332
-                              });
2333
-                          }
2334
-                    }
2335
-                });
2336
-
2337
-                // Show/Hide filter row
2338
-	        $('#sentarrow').on('click', function() {
2339
-	           if ($('#sentfiltersrow').is(':visible')) {
2340
-		       $('#sentfiltersrow').hide();
2341
-                       $('#sentheaderrow').css('top', '0px');
2342
-                       $(this).removeClass('arrowUpCl');
2343
-                       $(this).addClass('arrowDownCl');
2344
-		   } else {
2345
-		       $('#sentfiltersrow').show();
2346
-                       $('#sentheaderrow').css('top', '158px');
2347
-                       $(this).removeClass('arrowDownCl');
2348
-                       $(this).addClass('arrowUpCl');
2349
-                   }
2350
-                });
2351
-
2352
-                $("#app-content").animate({scrollTop:$("#sentSmsTable").prop("scrollHeight")},200);
2353
-          },
2354
-          error: function(sentdatafromdb) {
2355
-                alert("An error occurred!");
2356
-                $('#smstables').removeClass('icon-loading');
2357
-          }
2358
-     });
2359
-
2360
-  });
2361
-
2362
-  // List grouped messages
2363
-  $("#groupedtableshow").on("click", function(event) {
2364
-
2365
-     $('#smstables').empty();
2366
-     var getGroupedUrl = OC.generateUrl("/apps/sms_relentless/user/getgroupedtable");
2367
-
2368
-     $('#smstables').addClass('icon-loading');
2369
-     var totalPhNmbrs = 0;
2370
-
2371
-     $.ajax({
2372
-          method: 'GET',
2373
-          url: getGroupedUrl + '/' + userid,
2374
-          contentType: 'application/json',
2375
-          success: function(groupedparsed) {
2376
-
2377
-		        $('#smstables').append("<div id='toptablegrp'><div class='topbuttonandpage'><span id='recarrow' title='Show/Hide filters'></span></div><div id='paginationgrp' class='grppages'>Pages </div></div>");
2378
-		        $('#smstables').append("<table id='groupedSmsTable'></table>");
2379
-
2380
-                        $('#groupedSmsTable').append("<tr id='grpfiltersrow'><td colspan='2'><div id='filterByNumber'></div></td><td><button id='cleargrpfilter' title='Clear the filter'></button></td></tr>");
2381
-                        $('#groupedSmsTable').append("<tr class='groupedmsgrows' id='grpheaderrow'><th>Phone Number</th><th>Senders / Receivers</th><th>Messages</th></tr>");
2382
-
2383
-                        $('#grpfiltersrow').hide();
2384
-
2385
-                        var fromtoNmbrsData = [];
2386
-                        var fromtoNumberArr = [];
2387
-
2388
-		        for (var i = 0; i < groupedparsed.length; i++) {
2389
-
2390
-			     if (groupedparsed[i].author_displayname) {
2391
-			         var authordnm = groupedparsed[i].author_displayname;
2392
-			     } else { 
2393
-			         var authordnm = groupedparsed[i].user_id;
2394
-			     }
2395
-
2396
-			     var sentfromnmbrarr = groupedparsed[i].from.split("+");
2397
-                             if (sentfromnmbrarr[1]) {
2398
-			         var groupednbfrom = "+"+ sentfromnmbrarr[1];
2399
-                             } else {
2400
-			         var groupednbfrom = sentfromnmbrarr[0];
2401
-                             }
2402
-
2403
-                             var modmessage = '';
2404
-                             if (groupedparsed[i].author_displayname) {
2405
-			         modmessage = "<span class='msgAuthorNameGrp'>"+ groupedparsed[i].author_displayname + ":</span>" + groupedparsed[i].message;
2406
-                             } else {
2407
-			         modmessage = groupedparsed[i].message;
2408
-                             }
2409
-
2410
-                             if (groupedparsed[i].to.indexOf(": ") > -1) {
2411
-                                 var groupednmbrtopre = groupedparsed[i].to.split(": ");
2412
-                                 var groupednmbrto = groupednmbrtopre[1];
2413
-                             } else { 
2414
-                                 var groupednmbrto = groupedparsed[i].to;
2415
-                             }
2416
-
2417
-                             fromtoNmbrsData.push({
2418
-                                       'author_displayname': authordnm,
2419
-                                       'from': groupednbfrom,
2420
-                                       'to': groupednmbrto,
2421
-                                       'message': modmessage,
2422
-                                       'date': groupedparsed[i].date,
2423
-                                       'status': groupedparsed[i].deliveryreceipt,
2424
-                                       'table': groupedparsed[i].table
2425
-                             });
2426
-
2427
-                             if (fromtoNumberArr.indexOf(groupednbfrom) == -1) { fromtoNumberArr.push(groupednbfrom); }
2428
-                             if (fromtoNumberArr.indexOf(groupednmbrto) == -1) { fromtoNumberArr.push(groupednmbrto); }
2429
-		        }
2430
-
2431
-                        totalPhNmbrs = fromtoNumberArr.length;
2432
-
2433
-                        // Remove the duplicates
2434
-			var noDupMsgData = [];
2435
-			$.each(fromtoNmbrsData, function(i, e) {
2436
-			    var matchingData = $.grep(noDupMsgData, function(item) {
2437
-                                return item.from == e.from && item.to == e.to && item.message == e.message && item.table == 'received' && e.table == 'sent'
2438
-			    });
2439
-			    if (matchingData.length === 0) {
2440
-				noDupMsgData.push(e);
2441
-			    }
2442
-			});
2443
-
2444
-                        var messagesPerNmbr = {};
2445
-                        var msgsNamesPerNmbr = {};
2446
-                        var msgsNmbrsNames = {};
2447
-
2448
-                        for (var k = 0; k < fromtoNumberArr.length; k++) {
2449
-
2450
-                             var displayNamesarr = [];
2451
-                             var convData = [];
2452
-
2453
-                             for (var n = 0; n < noDupMsgData.length; n++) {
2454
-
2455
-                                  if (noDupMsgData[n]['from'] == fromtoNumberArr[k] && noDupMsgData[n]['table'] == 'sent') {
2456
-
2457
-                                      convData.push({
2458
-                                                     'author_displayname': noDupMsgData[n]['author_displayname'],
2459
-                                                     'message': noDupMsgData[n]['message'],
2460
-                                                     'from': noDupMsgData[n]['from'],
2461
-                                                     'to': noDupMsgData[n]['to'],
2462
-                                                     'date': noDupMsgData[n]['date'],
2463
-                                                     'direction': 'sent_from',
2464
-                                                     'status': noDupMsgData[n]['status'],
2465
-                                                     'table': noDupMsgData[n]['table']
2466
-                                      });
2467
-
2468
-                                  } else if (noDupMsgData[n]['to'] == fromtoNumberArr[k] && noDupMsgData[n]['table'] == 'sent') {
2469
-
2470
-                                      convData.push({
2471
-                                                     'author_displayname': noDupMsgData[n]['author_displayname'],
2472
-                                                     'message': noDupMsgData[n]['message'],
2473
-                                                     'from': noDupMsgData[n]['from'],
2474
-                                                     'to': noDupMsgData[n]['to'],
2475
-                                                     'date': noDupMsgData[n]['date'],
2476
-                                                     'direction': 'sent_to',
2477
-                                                     'status': noDupMsgData[n]['status'],
2478
-                                                     'table': noDupMsgData[n]['table']
2479
-                                      });
2480
-
2481
-
2482
-                                  } else if (noDupMsgData[n]['from'] == fromtoNumberArr[k] && noDupMsgData[n]['table'] == 'received') {
2483
-
2484
-                                      convData.push({
2485
-                                                     'author_displayname': noDupMsgData[n]['author_displayname'],
2486
-                                                     'message': noDupMsgData[n]['message'],
2487
-                                                     'from': noDupMsgData[n]['from'],
2488
-                                                     'to': noDupMsgData[n]['to'],
2489
-                                                     'date': noDupMsgData[n]['date'],
2490
-                                                     'direction': 'received_from',
2491
-                                                     'status': noDupMsgData[n]['status'],
2492
-                                                     'table': noDupMsgData[n]['table']
2493
-                                      });
2494
-
2495
-                                  } else if (noDupMsgData[n]['to'] == fromtoNumberArr[k] && noDupMsgData[n]['table'] == 'received') {
2496
-
2497
-                                      convData.push({
2498
-                                                     'author_displayname': noDupMsgData[n]['author_displayname'],
2499
-                                                     'message': noDupMsgData[n]['message'],
2500
-                                                     'from': noDupMsgData[n]['from'],
2501
-                                                     'to': noDupMsgData[n]['to'],
2502
-                                                     'date': noDupMsgData[n]['date'],
2503
-                                                     'direction': 'received_on',
2504
-                                                     'status': noDupMsgData[n]['status'],
2505
-                                                     'table': noDupMsgData[n]['table']
2506
-                                      });
2507
-                                  }
2508
-                             }
2509
-
2510
-                             // Sort messages by date
2511
-		             convData.sort(function(a, b) {
2512
-			        var c = new Date(a.date);
2513
-			        var d = new Date(b.date);
2514
-			        return c-d;
2515
-		             });
2516
-
2517
-                             // Collect the display names of the users that sent messages from the current number
2518
-                             var selectedNames = [];
2519
-                             var displayNames = '';
2520
-                             for (var v = 0; v < convData.length; v++) {
2521
-                                  if (selectedNames.indexOf(convData[v]['author_displayname']) == -1) { 
2522
-                                      selectedNames.push(convData[v]['author_displayname']);
2523
-                                      displayNames += "<div id='diplNm_"+ fromtoNumberArr[k] +"_"+ v +"' class='dispNameList' name='"+ convData[v]['author_displayname'] +"'>"+ convData[v]['author_displayname'] +"</div>";
2524
-                                  }
2525
-                             }
2526
-
2527
-                             // Store the display names for the current number, to be able to see them later when selecting the number from the drop-down list
2528
-                             var ctPhNumber = fromtoNumberArr[k];
2529
-                             msgsNamesPerNmbr[ctPhNumber] = displayNames;
2530
-
2531
-                             // Store the messages sent by each user, to be able to see them later when clicking on the user's name
2532
-                             for (var h = 0; h < selectedNames.length; h++) {
2533
-
2534
-                                  var rowMessageArrpn = [];
2535
-                                  for (var b = 0; b < convData.length; b++) {
2536
-
2537
-                                       if (selectedNames[h] == convData[b]['author_displayname']) {
2538
-
2539
-		                           if (convData[b]['direction'] == 'sent_from') {
2540
-		                               if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1) {
2541
-		                                   var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='Message delivered.'>";
2542
-		                               } else {
2543
-		                                   var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='There were issues while sending the message.'>";
2544
-		                               }
2545
-		                               rowMessageArrpn.push("<div style='display:block;width:97%;float:right;margin:4px 6px 4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fbff;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>");
2546
-		                           } else if (convData[b]['direction'] == 'sent_to') {
2547
-		                               if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1) {
2548
-		                                   var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='Message delivered.'>";
2549
-		                               } else {
2550
-		                                   var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='There were issues while sending the message.'>";
2551
-		                               }
2552
-		                               rowMessageArrpn.push("<div style='display:block;width:97%;float:right;margin:4px 6px 4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fbff;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>");
2553
-		                           } else if (convData[b]['direction'] == 'received_from') {
2554
-		                               rowMessageArrpn.push("<div style='display:block;width:97%;float:left;margin:4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fff8;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div></div>");
2555
-		                           } else if (convData[b]['direction'] == 'received_on') {
2556
-		                               rowMessageArrpn.push("<div style='display:block;width:97%;float:left;margin:4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fff8;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div></div>");
2557
-                                           }
2558
-                                       }
2559
-                                  }
2560
-                                  var convDataPerNmbrpn = rowMessageArrpn.join("<br>");
2561
-                                  var crtNmber = fromtoNumberArr[k];
2562
-                                  var crtName = selectedNames[h];
2563
-                                  msgsNmbrsNames[crtNmber] = msgsNmbrsNames[crtNmber] || {};
2564
-                                  msgsNmbrsNames[crtNmber][crtName] = convDataPerNmbrpn;
2565
-                             }
2566
-
2567
-                             var rowMessageArr = [];
2568
-                             for (var m = 0; m < convData.length; m++) {
2569
-
2570
-                                  if (convData[m]['direction'] == 'sent_from') {
2571
-
2572
-                                      if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) {
2573
-                                          var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='Message delivered.'>";
2574
-                                      } else {
2575
-                                          var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='There were issues while sending the message.'>";
2576
-                                      }
2577
-                                      rowMessageArr.push("<div style='display:block;width:97%;float:right;margin:4px 6px 4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fbff;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>");
2578
-
2579
-                                  } else if (convData[m]['direction'] == 'sent_to') {
2580
-
2581
-                                      if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) {
2582
-                                          var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='Message delivered.'>";
2583
-                                      } else {
2584
-                                          var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='There were issues while sending the message.'>";
2585
-                                      }
2586
-                                      rowMessageArr.push("<div style='display:block;width:97%;float:right;margin:4px 6px 4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fbff;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>");
2587
-
2588
-                                  } else if (convData[m]['direction'] == 'received_from') {
2589
-
2590
-		                      rowMessageArr.push("<div style='display:block;width:97%;float:left;margin:4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fff8;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>");
2591
-
2592
-                                  } else if (convData[m]['direction'] == 'received_on') {
2593
-
2594
-		                      rowMessageArr.push("<div style='display:block;width:97%;float:left;margin:4px 0px;padding:8px 10px;border:0;border-radius:6px;background-color:#f2fff8;'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>");
2595
-                                  }
2596
-                             }
2597
-
2598
-                             var convDataPerNmbr = rowMessageArr.join("");
2599
-
2600
-                             var rowPhoneNumber = "<div id='nmbrow_"+ fromtoNumberArr[k] +"' class='phoneNmbrRow'>"+ fromtoNumberArr[k] +"</div>";
2601
-
2602
-		             $("#groupedSmsTable").append("<tr id='singlerow_"+ k +"' class='groupedrowsbody'><td><div class='groupedLstNmbr fixedRowHeight'>"+ rowPhoneNumber +"</div></td><td><div class='groupedLstNames fixedRowHeight'>"+ displayNames +"</div></td><td style='width:100%'><div class='groupedLstMsgs fixedRowHeight'>"+ convDataPerNmbr +"</div></td></tr>");
2603
-                             $("#groupedSmsTable").append("<tr id='expandRow_"+ k +"' class='groupedrowsexp'><td colspan='3'><div style='display:block;width:100%;height:14px;cursor:pointer;'><img class='expandGrpRow' src='/apps/sms_relentless/img/arrowDown.svg'></div><td></tr>");
2604
-
2605
-                             // Store the messages for the current number, to be able to see them later, when clicking on the number
2606
-                             var ctNmbr = fromtoNumberArr[k];
2607
-                             messagesPerNmbr[ctNmbr] = convDataPerNmbr;
2608
-                        }
2609
-
2610
-
2611
-                        // Add the 'filter by number' drop-down list
2612
-                        var nmbrslst = "<option value='title'>Filter messages by number</option>";
2613
-                        for (var p = 0; p < fromtoNumberArr.length; p++) {
2614
-                             nmbrslst += "<option value='"+ fromtoNumberArr[p] +"'>"+ fromtoNumberArr[p] +"</option>";
2615
-                        }
2616
-                        $("#filterByNumber").append("<select id='selectListedNmbrs'>"+ nmbrslst +"</select>");
2617
-
2618
-
2619
-                        $("#selectListedNmbrs").change(function() {
2620
-
2621
-                          var selectedNmbr = $(this).val();
2622
-
2623
-                          if (selectedNmbr != "title") {
2624
-
2625
-                              $(".groupedrowsbody,.groupedrowsexp").each(function() { $(this).hide(); });
2626
-		              $("#groupedSmsTable").append("<tr id='singlerowfl_"+ fromtoNumberArr.indexOf(selectedNmbr) +"' class='groupedrowsbody'><td><div class='groupedLstNmbr fixedRowHeight'><div id='nmbrow_"+ selectedNmbr +"' style='font-size:15px;font-weight:500;color:#06866f;cursor:pointer;'>"+ selectedNmbr +"</div></div></td><td><div class='groupedLstNames fixedRowHeight'>"+ msgsNamesPerNmbr[selectedNmbr] +"</div></td><td style='width:100%'><div class='groupedLstMsgs fixedRowHeight'>"+ messagesPerNmbr[selectedNmbr] +"</div></td></tr>");
2627
-                              $("#groupedSmsTable").append("<tr id='expandRowfl_"+ fromtoNumberArr.indexOf(selectedNmbr) +"' class='groupedrowsexp'><td colspan='3'><div style='display:block;width:100%;height:14px;cursor:pointer;'><img class='expandGrpRow' src='/apps/sms_relentless/img/arrowDown.svg'></div><td></tr>");
2628
-
2629
-
2630
-                               // Show the messages sent by each user whose name is listed for the phone number of the current row
2631
-                               $('[id*="diplNm_"]').click(function() {
2632
-
2633
-                                  var crntNmbr = $(this).attr("id").split("_")[1];
2634
-                                  var crntDisName = $(this).attr("name");                        
2635
-                                  var clsmsgcell = $(this).closest(".groupedrowsbody").find(".groupedLstMsgs");
2636
-                                  clsmsgcell.empty();
2637
-                                  clsmsgcell.html(msgsNmbrsNames[crntNmbr][crntDisName]);
2638
-
2639
-                                  $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); });
2640
-                                  $(this).css("color", "#1483f0");
2641
-                                  $("#nmbrow_"+ selectedNmbr).css("color", "#06866f");
2642
-                                  $(".groupedLstNmbr").each(function () { $(this).css("color", "#06866f"); });
2643
-                               });
2644
-
2645
-
2646
-		               // Show all the messages sent to/from the clicked number
2647
-		               $('[id*="nmbrow_"]').click(function() {
2648
-		                  var rwNmbr = $(this).attr("id").replace("nmbrow_", "");
2649
-		                  var rowmsgcell = $(this).closest(".groupedrowsbody").find(".groupedLstMsgs");
2650
-		                  rowmsgcell.empty();
2651
-		                  rowmsgcell.html(messagesPerNmbr[rwNmbr]);
2652
-
2653
-		                  $(".phoneNmbrRow").each(function() { $(this).css("color", "#06866f"); });
2654
-		                  $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); })
2655
-		                  $(this).css("color", "#08b899");
2656
-		               });
2657
-
2658
-
2659
-		               // Expand the rows to see all the messages
2660
-		               $('[id^="expandRowfl_"]').click(function() {
2661
-		                   var idnumbrfl = $(this).attr("id").replace("expandRowfl_", "");
2662
-		                   var crntExpandfl = $(this).find(".expandGrpRow");
2663
-
2664
-		                   if (crntExpandfl.attr('src') == '/apps/sms_relentless/img/arrowDown.svg') {
2665
-                                       $("#singlerowfl_"+ idnumbrfl).find(".fixedRowHeight").removeClass("fixedRowHeight");
2666
-		                       crntExpandfl.attr('src', '/apps/sms_relentless/img/arrowUp.svg');
2667
-		                   } else {
2668
-                                       $("#singlerowfl_"+ idnumbrfl).find(".groupedLstNmbr,.groupedLstNames,.groupedLstMsgs").addClass("fixedRowHeight");
2669
-                                       crntExpandfl.attr('src', '/apps/sms_relentless/img/arrowDown.svg'); 
2670
-		                   }
2671
-		               });
2672
-
2673
-		               $('#totalgrpmessages').remove();
2674
-		               $('#smstables').append("<div id='totalgrpmessages'>Total displayed phone numbers: 1</div>");
2675
-                           }
2676
-                        });
2677
-
2678
-                        // Clear the 'filter by number' filter
2679
-                        $("#cleargrpfilter").click(function() {
2680
-                               $('[id^="singlerowfl_"]').remove();
2681
-                               $('[id^="expandRowfl_"]').remove();
2682
-                               $(".groupedrowsbody,.groupedrowsexp").each(function() { $(this).show(); });
2683
-                               $("#selectListedNmbrs").val("title");
2684
-		               $('#totalgrpmessages').remove();
2685
-		               $('#smstables').append("<div id='totalgrpmessages'>Total displayed phone numbers: "+ totalPhNmbrs +"</div>");
2686
-                        });
2687
-
2688
-                        // Show the messages sent by each user whose name is listed for the phone number on the current row
2689
-                        $('[id*="diplNm_"]').click(function() {
2690
-
2691
-                           var crntNmbr = $(this).attr("id").split("_")[1];
2692
-                           var crntDisName = $(this).attr("name");                               
2693
-                           var clsmsgcell = $(this).closest(".groupedrowsbody").find(".groupedLstMsgs");
2694
-                           clsmsgcell.empty();
2695
-                           clsmsgcell.html(msgsNmbrsNames[crntNmbr][crntDisName]);
2696
-
2697
-                           $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); });
2698
-                           $(this).css("color", "#1483f0");
2699
-                        });
2700
-
2701
-                        // Show all the messages sent to/from the clicked number
2702
-                        $('[id*="nmbrow_"]').click(function() {
2703
-                           var rwNmbr = $(this).attr("id").replace("nmbrow_", "");
2704
-                           var rowmsgcell = $(this).closest(".groupedrowsbody").find(".groupedLstMsgs");
2705
-                           rowmsgcell.empty();
2706
-                           rowmsgcell.html(messagesPerNmbr[rwNmbr]);
2707
-
2708
-                           $(".phoneNmbrRow").each(function() { $(this).css("color", "#06866f"); });
2709
-                           $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); })
2710
-                           $(this).css("color", "#08b899");
2711
-                        });
2712
-
2713
-
2714
-		        $('#smstables').removeClass('icon-loading');
2715
-		        $('#recarrow').removeClass('arrowUpCl');
2716
-		        $('#recarrow').addClass('arrowDownCl');
2717
-
2718
-                        // Expand the rows to see all the messages
2719
-                        $('[id^="expandRow_"]').click(function() {
2720
-                            var idnumbr = $(this).attr("id").replace("expandRow_", "");
2721
-                            var crntExpand = $(this).find(".expandGrpRow");
2722
-
2723
-                            if (crntExpand.attr('src') == '/apps/sms_relentless/img/arrowDown.svg') {
2724
-                                $("#singlerow_"+ idnumbr).find(".fixedRowHeight").removeClass("fixedRowHeight");
2725
-                                crntExpand.attr('src', '/apps/sms_relentless/img/arrowUp.svg');
2726
-                            } else {
2727
-                                $("#singlerow_"+ idnumbr).find(".groupedLstNmbr,.groupedLstNames,.groupedLstMsgs").addClass("fixedRowHeight");
2728
-                                crntExpand.attr('src', '/apps/sms_relentless/img/arrowDown.svg'); 
2729
-                            }
2730
-                        });
2731
-
2732
-
2733
-		        // Add pagination
2734
-		        var rowsShowngrp = messagesperpage;
2735
-		        var rowsTotalgrp = $("#groupedSmsTable tr").length;
2736
-
2737
-		        var numPagesgrp = ((rowsTotalgrp - 2) / rowsShowngrp) / 2;
2738
-
2739
-		        for (i = 0; i < numPagesgrp; i++) {
2740
-		             var pageNumgrp = i + 1;
2741
-		             $('#paginationgrp').append('<a href="#" rel="' + i + '" class="pagenumbersgrp">' + pageNumgrp + '</a> ');
2742
-		        }
2743
-
2744
-		        $('#paginationgrp').children(":first").addClass('active');
2745
-
2746
-		        $(".groupedrowsbody,.groupedrowsexp").hide();
2747
-
2748
-		        $('#paginationgrp a:first').addClass('active');
2749
-
2750
-		        // Show table page when clicking a page number
2751
-		        $('.grppages a').bind('click', function() {
2752
-
2753
-		           $('#paginationgrp').children().removeClass('active');
2754
-
2755
-		           $(this).addClass('active');
2756
-
2757
-		           var currentPageNogrp = $(this).text();
2758
-
2759
-		           $('#paginationgrp a').each(function() {
2760
-		               if ($(this).text() == currentPageNogrp) {
2761
-		                   $(this).addClass('active');
2762
-		               }
2763
-		           });
2764
-
2765
-		           var currPagegrp = $(this).attr('rel');
2766
-		           var startItemgrp = currPagegrp * rowsShowngrp;
2767
-		           var endItemgrp = startItemgrp + rowsShowngrp;
2768
-
2769
-		           $(".groupedrowsbody").hide().slice(startItemgrp, endItemgrp).css('display', 'table-row');
2770
-		           $(".groupedrowsexp").hide().slice(startItemgrp, endItemgrp).css('display', 'table-row');
2771
-
2772
-		           $('#totalgrpmessages').remove();
2773
-		           $('#smstables').append("<div id='totalgrpmessages'>Total displayed phone numbers: " + totalPhNmbrs + "</div>");
2774
-		        });
2775
-
2776
-                        $('#paginationgrp').children(":last").trigger('click');
2777
-
2778
-
2779
-		        // Show/Hide filter row
2780
-		        $('#recarrow').on('click', function() {
2781
-			   if ($('#grpfiltersrow').is(':visible')) {
2782
-			       $('#grpfiltersrow').hide();
2783
-		               $('#grpheaderrow').css('top', '0px');
2784
-		               $(this).removeClass('arrowUpCl');
2785
-		               $(this).addClass('arrowDownCl');
2786
-			   } else {
2787
-			       $('#grpfiltersrow').show();
2788
-		               $('#grpheaderrow').css('top', '158px');
2789
-		               $(this).removeClass('arrowDownCl');
2790
-		               $(this).addClass('arrowUpCl');
2791
-		           }
2792
-		        });
2793
-
2794
-          },
2795
-          error: function() {
2796
-
2797
-                        alert("Error while attempting to get the messages from the database.");
2798
-                        $('#smstables').removeClass('icon-loading');
2799
-          }
2800
-     });
2801
-  });
2802
-
2803
-});
2804 0
deleted file mode 100644
... ...
@@ -1,1163 +0,0 @@
1
-<?php
2
-/**
3
- * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
4
- *
5
- * @author Double Bastion LLC
6
- *
7
- * @license GNU AGPL version 3 or any later version
8
- *
9
- * This program is free software; you can redistribute it and/or
10
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
11
- * License as published by the Free Software Foundation; either
12
- * version 3 of the License, or any later version.
13
- *
14
- * This program is distributed in the hope that it will be useful,
15
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
18
- *
19
- * You should have received a copy of the GNU Affero General Public
20
- * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
- *
22
- */
23
-
24
-declare(strict_types=1);
25
-
26
-namespace OCA\SMSRelentless\Controller;
27
-
28
-use OCP\AppFramework\ApiController;
29
-use OCP\IRequest;
30
-use OCA\SMSRelentless\Service\SmsrelentlessService;
31
-use OCP\AppFramework\Http\DataResponse;
32
-use OCP\AppFramework\OCSController;
33
-use OCP\IUserSession;
34
-use OCP\IConfig;
35
-use \DateTime;
36
-use OCP\AppFramework\Controller;
37
-use OCP\Files\IAppData;
38
-use OCP\AppFramework\App;
39
-use OCP\Files\NotPermittedException;
40
-use \ReflectionClass;
41
-use OCP\Notification;
42
-use OCP\Notification\INotification;
43
-use OCP\Notification\IManager;
44
-use OCP\Notification\IAction;
45
-use Plivo\RestClient;
46
-use Plivo\Util\signatureValidation;
47
-
48
-use OCP\IDBConnection;
49
-
50
-class AuthorApiController extends ApiController {
51
-
52
-    private $service;
53
-    private $userId;
54
-    private $config;
55
-    private $connection;
56
-
57
-    public function __construct($appName, IRequest $request, SmsrelentlessService $service, $userId, IConfig $config, IDBConnection $connection) {
58
-        parent::__construct(
59
-            $appName,
60
-            $request,
61
-            'PUT, POST, GET, DELETE, PATCH',
62
-            'Authorization, Content-Type, Accept',
63
-            1728000);
64
-
65
-        $this->service = $service;
66
-        $this->userId = $userId;
67
-        $this->config = $config;
68
-        $this->connection = $connection;
69
-    }
70
-
71
-
72
-    /**
73
-     * @NoAdminRequired
74
-     */
75
-    public function object_to_array($obj) {
76
-       if(is_object($obj)) $obj = (array)$this->dismount($obj);
77
-       if(is_array($obj)) {
78
-          $new = array();
79
-          foreach($obj as $key => $val) {
80
-              $new[$key] = $this->object_to_array($val);
81
-          }
82
-       }
83
-       else $new = $obj;
84
-       return $new;
85
-    }
86
-
87
-
88
-    /**
89
-     * @NoAdminRequired
90
-     */
91
-    public function dismount($object) {
92
-       $reflectionClass = new ReflectionClass(get_class($object));
93
-       $array = array();
94
-       foreach ($reflectionClass->getProperties() as $property) {
95
-          $property->setAccessible(true);
96
-          $array[$property->getName()] = $property->getValue($object);
97
-          $property->setAccessible(false);
98
-       }
99
-       return $array;
100
-    }
101
-
102
-
103
-    /**
104
-     * @NoAdminRequired
105
-     */
106
-    public function verifyHeader($receiveddata, $signature_header, $timestamp, $public_key = '', $tolerance = null ) {
107
-        // Typecast timestamp to int for comparisons
108
-        $timestamp = (int)$timestamp;
109
-
110
-        // Check if timestamp is within tolerance
111
-        if (($tolerance > 0) && (\abs(\time() - $timestamp) > $tolerance)) {
112
-             return false;
113
-        } else {
114
-
115
-            // Convert base64 string to bytes for sodium crypto functions
116
-            $public_key_bytes = base64_decode($public_key);
117
-            $signature_header_bytes = base64_decode($signature_header);
118
-
119
-            // Construct a message to test against the signature header using the timestamp and payload
120
-            $constructed_string = $timestamp . '|' . $receiveddata;
121
-
122
-            if (!\sodium_crypto_sign_verify_detached($signature_header_bytes, $constructed_string, $public_key_bytes)) {
123
-                return false;
124
-            } else {
125
-                return true;
126
-            }
127
-        }
128
-    }
129
-
130
-
131
-    /**
132
-     * @NoAdminRequired
133
-     * @NoCSRFRequired
134
-     * @PublicPage
135
-     */
136
-    public function recdeliveryreptel() {
137
-
138
-       $request = file_get_contents("php://input");
139
-       $recdata = json_decode($request, TRUE);
140
-
141
-       $delsmswebhookurl = $recdata["data"]["payload"]["webhook_url"];
142
-       $ncuserfortelnyxdel = $this->service->getuserbyteldelrwhurl($delsmswebhookurl);
143
-
144
-       if ($ncuserfortelnyxdel != '' && $ncuserfortelnyxdel != null && $ncuserfortelnyxdel != 'undefined') {
145
-
146
-	       $messageid = $recdata["data"]["payload"]["id"];
147
-
148
-	       $network = $recdata["data"]["payload"]["to"][0]["carrier"];
149
-	       $messageprice = $recdata["data"]["payload"]["cost"]["amount"];
150
-	       $deliverystatus = $recdata["data"]["payload"]["to"][0]["status"];
151
-
152
-	       $goterrorinit = $recdata["data"]["payload"]["errors"];
153
-
154
-	       if (!empty($goterrorinit)) {
155
-		   $retrievedtitle = $recdata["data"]["payload"]["errors"][0]["title"];
156
-		   $retrievedcode = $recdata["data"]["payload"]["errors"][0]["code"];
157
-		   $messagestatus = "(Error " . $retrievedcode . ") " . $retrievedtitle;
158
-	       } else {
159
-		   $messagestatus = "Success ! The message has been successfully accepted for delivery.";
160
-	       }
161
-
162
-	       return $this->service->updatedeliverystatustel($ncuserfortelnyxdel, $messageid, $network, $messageprice, $messagestatus, $deliverystatus); 
163
-
164
-       } else { return "access denied"; }
165
-
166
-    }
167
-
168
-
169
-    /**
170
-     * @NoAdminRequired
171
-     * @NoCSRFRequired
172
-     * @PublicPage
173
-     */
174
-    public function recdeliveryrepnex() {
175
-
176
-       $plivodrurl = $_SERVER['REQUEST_SCHEME'] . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
177
-
178
-       $ncuserforplivodel = $this->service->getuserbyplivodelrwhurl($plivodrurl);
179
-
180
-       if ($ncuserforplivodel != '' && $ncuserforplivodel != null && $ncuserforplivodel != 'undefined') {
181
-
182
-	       $networkcode = "";
183
-	       $mStatus = ""; 
184
-
185
-	       if (isset($_REQUEST["MessageUUID"])) { $messageid = $_REQUEST["MessageUUID"]; } else { $messageid = ''; }
186
-	       if (isset($_REQUEST["MCC"]) && isset($_REQUEST["MNC"])) { $networkcode = $_REQUEST["MCC"] . " " . $_REQUEST["MNC"]; } else { $networkcode = ''; }
187
-	       if (isset($_REQUEST["TotalAmount"])) { $messageprice = $_REQUEST["TotalAmount"]; } else { $messageprice = ''; }
188
-	       if (isset($_REQUEST["ErrorCode"]) && $_REQUEST["ErrorCode"] == "") {
189
-                   $mStatus = "Success ! The message has been successfully accepted for delivery.";
190
-               } elseif (isset($_REQUEST["ErrorCode"]) && $_REQUEST["ErrorCode"] != "") {
191
-                   $mStatus = "Error " . $_REQUEST["ErrorCode"]; 
192
-               } else { $mStatus = ''; }
193
-
194
-	       if (isset($_REQUEST["Status"])) { $deliverystatus = $_REQUEST["Status"]; }
195
-
196
-	       return $this->service->updatedeliverystatusnex($ncuserforplivodel, $messageid, $networkcode, $messageprice, $mStatus, $deliverystatus);
197
-
198
-       } else { return "access denied"; }
199
-
200
-    }
201
-
202
-
203
-    /**
204
-     * @NoAdminRequired
205
-     * @NoCSRFRequired
206
-     * @PublicPage
207
-     */
208
-    public function recdeliveryreptwil() {
209
-
210
-       $twildrurl = $_SERVER['REQUEST_SCHEME'] . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
211
-
212
-       $ncuserfortwildel = $this->service->getuserbytwildelrwhurl($twildrurl);
213
-
214
-       if ($ncuserfortwildel != '' && $ncuserfortwildel != null && $ncuserfortwildel != 'undefined') {
215
-
216
-           $messageid = $_REQUEST["SmsSid"];
217
-
218
-           if ($messageid != null) {
219
-
220
-               $credentialstw = $this->service->getapicredentials($ncuserfortwildel);
221
-               $sidtw = $credentialstw[15];
222
-               $tokentw = $credentialstw[16];
223
-               $msdetails = json_decode(file_get_contents("https://".$sidtw.":".$tokentw."@api.twilio.com/2010-04-01/Accounts/".$sidtw."/Messages/".$messageid.".json"));
224
-               $errorMessage = $msdetails->error_message;
225
-               $errorCode = $msdetails->error_code;
226
-               $deliverystatus = $msdetails->status;
227
-
228
-               if ($errorCode == null) { 
229
-                   $mStatus = 'Success ! The message has been successfully accepted for delivery.'; 
230
-               } else { $mStatus = 'Error ' . $errorCode . '. '. ($errorMessage != '') ? 'Message: '. $errorMessage : ''; }
231
-
232
-               $messagepricepre = $msdetails->price;
233
-               $messageprice = str_replace("-", "", $messagepricepre);
234
-               $networkcode = '';
235
-
236
-	       return $this->service->updatedeliverystatustwil($ncuserfortwildel, $messageid, $networkcode, $messageprice, $mStatus, $deliverystatus);
237
-
238
-           } else { exit(); }
239
-
240
-       } else { exit(); }
241
-
242
-    }
243
-
244
-
245
-    /**
246
-     * @NoAdminRequired
247
-     * @NoCSRFRequired
248
-     * @PublicPage
249
-     */
250
-    public function recdeliveryrepflow() {
251
-
252
-       $flowdrurl = $_SERVER['REQUEST_SCHEME'] . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
253
-
254
-       $ncuserforflowdel = $this->service->getuserbyflowdelrwhurl($flowdrurl);
255
-
256
-       if ($ncuserforflowdel != '' && $ncuserforflowdel != null && $ncuserforflowdel != 'undefined') {
257
-
258
-           $receivereq = file_get_contents('php://input');
259
-           $recmdec = json_decode($receivereq, true);
260
-           $recmsid = $recmdec['data']['id'];
261
-
262
-           $smsapicredfl = $this->service->getapicredentials($ncuserforflowdel);
263
-           $flowapikey = $smsapicredfl[20];
264
-           $flowapisecret = $smsapicredfl[21];
265
-
266
-           $getmsdetails = json_decode(file_get_contents("https://".$flowapikey.":".$flowapisecret."@api.flowroute.com/v2.1/messages/".$recmsid.""), true);
267
-           $messagepriceflinit = $getmsdetails['data']['attributes']['amount_display'];
268
-           $messagepricefl = str_replace("$", "", $messagepriceflinit);
269
-
270
-           $mdeliveryflinit = $getmsdetails['data']['attributes']['delivery_receipts'][0]['status'];
271
-
272
-           if ($mdeliveryflinit != 'message buffered') {
273
-               if ($mdeliveryflinit == 'Ok') {
274
-                   $messagedeliveryfl = "Issues";
275
-               } else { $messagedeliveryfl = $mdeliveryflinit; }
276
-           } else { $messagedeliveryfl = 'delivered'; }
277
-
278
-           $messagestatuscode = $getmsdetails['data']['attributes']['delivery_receipts'][0]['status_code'];
279
-           $messagestatusdescr = $getmsdetails['data']['attributes']['delivery_receipts'][0]['status_code_description'];
280
-
281
-           if ($messagestatuscode != '') { 
282
-               $messagestatusfl = (($messagestatusdescr != '') ? $messagestatusdescr . ". " : "") . "Status code: " . $messagestatuscode; 
283
-           } else { $messagestatusfl = "There were issues with message delivery."; }
284
-
285
-           $networkcodefl = '';
286
-
287
-           return $this->service->updatedeliverystatusflow($ncuserforflowdel, $recmsid, $networkcodefl, $messagepricefl,  $messagestatusfl, $messagedeliveryfl);
288
-
289
-       } else { return "access denied"; }
290
-
291
-    }
292
-
293
-
294
-    /**
295
-     * @NoAdminRequired
296
-     * @NoCSRFRequired
297
-     * @PublicPage
298
-     */
299
-    public function receivesmstel() {
300
-
301
-       $signature = $_SERVER['HTTP_TELNYX_SIGNATURE_ED25519'];
302
-       $timestamp = $_SERVER['HTTP_TELNYX_TIMESTAMP'];
303
-
304
-       $receivereq = file_get_contents('php://input');
305
-
306
-       $recmesdata = json_decode($receivereq, TRUE);
307
-
308
-       $recsmswebhookurl = $recmesdata["data"]["payload"]["webhook_url"];
309
-
310
-       $ncuserfortelnyx = $this->service->getuserbytelrecwhurl($recsmswebhookurl);
311
-
312
-       $txcredentials = $this->service->getapicredentials($ncuserfortelnyx);
313
-
314
-       $telpubkey = $txcredentials[1];
315
-       $telnyxkey = $txcredentials[0];
316
-       $teldelrecurl = $txcredentials[3];
317
-       $messagingprofid = $txcredentials[4];
318
-
319
-
320
-       // Verify message signature
321
-       $signatureverify = $this->verifyHeader($receivereq, $signature, $timestamp, $telpubkey, $tolerance = 30);
322
-
323
-       if ($signatureverify) {
324
-
325
-          if ($ncuserfortelnyx != '' && $ncuserfortelnyx != null && $ncuserfortelnyx != 'undefined') {
326
-
327
-	       $messageid = $recmesdata["data"]["payload"]["id"];
328
-
329
-	       $messagedate = date("Y-m-d H:i:s");
330
-
331
-	       $messagefrom = $recmesdata["data"]["payload"]["from"]["phone_number"];
332
-
333
-	       $messageto = "Telnyx: " . $recmesdata["data"]["payload"]["to"][0]["phone_number"];
334
-
335
-               $messagetopr = $recmesdata["data"]["payload"]["to"][0]["phone_number"];
336
-
337
-               $messagetoprtx = "Tx: " . $messagetopr;
338
-
339
-               // Check if the message is a MMS
340
-               if ($recmesdata["data"]["payload"]['type'] == 'MMS') {
341
-
342
-                   $includedFiles = '';
343
-
344
-                   foreach ($recmesdata["data"]["payload"]['media'] as $telkey => $telvalue) {
345
-                        if (is_array($telvalue)) {
346
-                            foreach ($telvalue as $telkeysec => $telvaluesec) {
347
-                                if ($telkeysec == "url") {
348
-                                    $includedFiles .= $telvaluesec . "<br><br>";
349
-                                }
350
-                            }
351
-                        }
352
-                   }
353
-
354
-                   $messagetexttel = $recmesdata["data"]["payload"]["text"] . "<br><br><br>--- The file(s) included in the MMS follow. Download them only if you trust the sender and the domain of the URLs ---<br><br>" . $includedFiles;
355
-                   $ismmstel = 1;
356
-               } else {
357
-                   $messagetexttel = $recmesdata["data"]["payload"]["text"];
358
-                   $ismmstel = 0;
359
-               }
360
-
361
-	       $recmessagearr = [$messageid, $messagedate, $messagefrom, $messageto, $messagetexttel];
362
-
363
-	       $this->service->insertrecsms($ncuserfortelnyx, $recmessagearr);
364
-
365
-
366
-               // Check if there is any auto-reply configured for the receiving number
367
-	       $telgetarpl = $this->connection->prepare('SELECT `phone_number`, `days_of_week`, `daily_start`, `daily_end`, `vacation_start`, `vacation_end`, `message_text` FROM 
368
-                                                        `*PREFIX*sms_relent_autorply` WHERE `phone_number` = ?');
369
-	       $telgetarplres = $telgetarpl->execute([$messagetoprtx]);
370
-	       $telarpldata = $telgetarplres->fetch();
371
-	       $telgetarplres->closeCursor();
372
-
373
-               if ($telarpldata) {
374
-
375
-                   $autoreplytext = $telarpldata['message_text'];
376
-
377
-                   // Check if the auto-reply is in 'daily mode'
378
-                   if ($telarpldata['days_of_week']) {
379
-
380
-                       // Check if the auto-reply should be sent 
381
-                       $daysofweekarr = explode(",", $telarpldata['days_of_week']);
382
-                       $dailystart = $telarpldata['daily_start'];
383
-                       $dailyend = $telarpldata['daily_end'];
384
-
385
-                       $crntdate = date("Y-m-d");
386
-                       $crntDayNumber = date('N', strtotime($crntdate));
387
-
388
-                       if (in_array($crntDayNumber, $daysofweekarr)) {
389
-
390
-                           $crntimehrmin = date("H:i");
391
-                           $crntdatefmt = new DateTime($crntimehrmin);
392
-                           $startdatefmt = new DateTime($dailystart);
393
-                           $enddatefmt = new DateTime($dailyend);
394
-
395
-                           if ($crntdatefmt > $startdatefmt && $enddatefmt > $crntdatefmt) {
396
-                               // OK
397
-                           } else {
398
-
399
-			       // Send the auto-reply
400
-			       \Telnyx\Telnyx::setApiKey($telnyxkey);
401
-			       $messagedate = date("Y-m-d H:i:s");
402
-			       $message = \Telnyx\Message::Create(["from" => $messagetopr, "to" => $messagefrom, "text" => $autoreplytext, "webhook_url" => $teldelrecurl]);
403
-
404
-			       // Insert the sent SMS in the 'sms_relent_sent' table
405
-			       $messageid = $message['id'];
406
-			       $messagefromtx = "Telnyx: " . $messagetopr;
407
-			       $messagetotx = $messagefrom;
408
-			       $messagenetwork = null;
409
-			       $messageprice = null;
410
-			       $messagestatus = $message['to'][0]['status'];
411
-			       $messagedelivery = null;
412
-
413
-			       $sentmessagearr = [$messageid, $messagedate, $messagefromtx, $messagetotx, $messagenetwork, $messageprice, $messagestatus, $messagedelivery, $autoreplytext];
414
-
415
-			       $this->service->insertsentsms($ncuserfortelnyx, $sentmessagearr);
416
-
417
-                           }
418
-                       }
419
-
420
-                   } elseif ($telarpldata['vacation_start'] && $telarpldata['vacation_end']) {
421
-
422
-                             $vacationstart = $telarpldata['vacation_start'];
423
-                             $vacationend = $telarpldata['vacation_end'];
424
-
425
-                             $crntimeymd = date("Y-m-d H:i:s");
426
-                             $crntdatevcfmt = new DateTime($crntimeymd);
427
-                             $startdatevcfmt = new DateTime($vacationstart);
428
-                             $enddatefvcmt = new DateTime($vacationend);
429
-
430
-                             if ($startdatevcfmt <= $crntdatevcfmt && $crntdatevcfmt <= $enddatefvcmt) {
431
-
432
-			        // Send the auto-reply
433
-			        \Telnyx\Telnyx::setApiKey($telnyxkey);
434
-			        $messagedate = date("Y-m-d H:i:s");
435
-			        $message = \Telnyx\Message::Create(["from" => $messagetopr, "to" => $messagefrom, "text" => $autoreplytext, "webhook_url" => $teldelrecurl]);
436
-
437
-			        // Insert the sent SMS in the 'sms_relent_sent' table
438
-			        $messageid = $message['id'];
439
-			        $messagefromtx = "Telnyx: " . $messagetopr;
440
-			        $messagetotx = $messagefrom;
441
-			        $messagenetwork = null;
442
-			        $messageprice = null;
443
-			        $messagestatus = $message['to'][0]['status'];
444
-			        $messagedelivery = null;
445
-
446
-			        $sentmessagearr = [$messageid, $messagedate, $messagefromtx, $messagetotx, $messagenetwork, $messageprice, $messagestatus, $messagedelivery, $autoreplytext];
447
-
448
-			        $this->service->insertsentsms($ncuserfortelnyx, $sentmessagearr);
449
-
450
-                           }
451
-
452
-                   }
453
-               }
454
-
455
-
456
-	       // Send notifications
457
-	       $nameofhost = exec("hostname");
458
-
459
-	       $telsmsapicred = $this->service->getapicredentials($ncuserfortelnyx);
460
-	       $telnotify = $telsmsapicred[12];
461
-	       $emailaddress = $telsmsapicred[13];
462
-	       $includemessageinemail = $telsmsapicred[14];
463
-
464
-               if ($ismmstel == 0) { $smsormmstel = "SMS"; } else { $smsormmstel = "MMS"; }
465
-
466
-	       if ($telnotify != 0 ) {
467
-
468
-		   $notifytel = exec("php ./occ notification:generate ".$ncuserfortelnyx." 'SMS Relentless has received a new ". $smsormmstel ." message !' -l 'You can read the new message by going to SMS Relentless and clicking on the Received SMS Messages button.'");
469
-
470
-	       }
471
-
472
-	       if ($emailaddress != '') {
473
-
474
-		   $gmtind = "UTC " . date('P');
475
-		   $smsdateinit = date("Y-m-d  H:i:s");
476
-		   $smsdate = $smsdateinit . " " . $gmtind;
477
-
478
-		   $subject = "New ". $smsormmstel ." message received";
479
-
480
-                   $messagetextnltel = str_replace("\n", "<br>", $messagetexttel);
481
-
482
-		   if ($includemessageinemail == 0) {
483
-		       $message = "Hello, <br><br> You have received a new message on ".$smsdate." .<br> You can check the new message by going to 'SMS Relentless' > 'Received SMS Messages'. <br><br> Yours, <br> SMS Relentless <br> An SMS application for Nextcloud <br> Host: '".$nameofhost."' <br>";
484
-		   } else {
485
-		       $message = "Hello, <br><br> You have received a new message on ".$smsdate." :<br><br><br> Message ID: ".$messageid." <br> Message Date: ".$messagedate." <br> From: ".$messagefrom." <br> To: ".$messageto."<br> Message Text: <br><br><b>".$messagetextnltel."</b><br><br>____________<br><br> Yours, <br> SMS Relentless <br> An SMS application for Nextcloud <br> Host: '".$nameofhost."' <br>";
486
-		   }
487
-
488
-                   $messagefin = chunk_split(base64_encode($message));
489
-
490
-		   $headers = "MIME-Version: 1.0" . "\r\n";
491
-		   $headers .= "Content-type: text/html; charset=UTF-8" . "\r\n";
492
-                   $headers .= "Content-Transfer-Encoding: base64" . "\r\n";
493
-
494
-		   // Set the email sender
495
-		   $headers .= "From: " . $emailaddress . "\r\n";
496
-		   $headers .= "Reply-To: " . $emailaddress . "\r\n";
497
-
498
-		   mail($emailaddress, $subject, $messagefin, $headers);
499
-	       }
500
-
501
-	       return http_response_code(200);
502
-
503
-          } else { return "access denied"; }
504
-
505
-       } else { return "access denied"; }
506
-    }
507
-
508
-
509
-    /**
510
-     * @NoAdminRequired
511
-     * @NoCSRFRequired
512
-     * @PublicPage
513
-     */
514
-    public function receivesmsnex() {
515
-
516
-       $plivosignature = $_SERVER['HTTP_X_PLIVO_SIGNATURE_V2'];
517
-       $plivononce = $_SERVER["HTTP_X_PLIVO_SIGNATURE_V2_NONCE"];
518
-
519
-       $plivorecurl = $_SERVER['REQUEST_SCHEME'] . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
520
-
521
-       $ncuserforplivo = $this->service->getuserbyplivorecwhurl($plivorecurl);
522
-
523
-       $smsapicred = $this->service->getapicredentials($ncuserforplivo);
524
-
525
-       $plivoapikey = $smsapicred[5];
526
-       $plivoauthtoken = $smsapicred[6];
527
-       $plivowhdelrcpt = $smsapicred[8];
528
-
529
-       $baseplivourlinit = explode("?", $plivorecurl);  
530
-       $baseplivoURI = $baseplivourlinit[0];
531
-
532
-       // Verify message signature
533
-       $SigValidation = new signatureValidation();
534
-       $signverify = $SigValidation->validateSignature($baseplivoURI, $plivononce, $plivosignature, $plivoauthtoken);
535
-
536
-       if ($signverify) {
537
-
538
-              if ($ncuserforplivo != '' && $ncuserforplivo != null && $ncuserforplivo != 'undefined') {
539
-
540
-	          $messageid = $_REQUEST["MessageUUID"];
541
-
542
-	          $messagedate = date("Y-m-d H:i:s");
543
-
544
-	          $messagefrom = "+" . $_REQUEST['From'];
545
-	          $messageto = "Plivo: +" . $_REQUEST['To'];
546
-	          $messagetoprpl = "Pl: +" . $_REQUEST['To'];
547
-                  $messagetoplsp = "+" . $_REQUEST['To'];
548
-
549
-                  // Check if the message is a MMS
550
-                  if ($_REQUEST['Type'] == 'mms') {
551
-
552
-                      $includedFiles = '';
553
-                      foreach ($_REQUEST as $plkey => $plvalue) {
554
-
555
-			   if (strpos($plkey, "Media") !== false && $plkey != "MediaCount") {
556
-                               $includedFiles .= $plvalue . "<br><br>";
557
-			   }
558
-                      }
559
-
560
-                      $messagetextpl = $_REQUEST['Body'] . "<br><br><br>--- The file(s) included in the MMS follow. Download them only if you trust the sender and the domain of the URLs ---<br><br>" . $includedFiles;
561
-                      $ismmspl = 1;
562
-                  } else {
563
-                      $messagetextpl = $_REQUEST['Text'];
564
-                      $ismmspl = 0;
565
-                  }
566
-
567
-	          $recmessagearr = [$messageid, $messagedate, $messagefrom, $messageto, $messagetextpl];
568
-
569
-                  $this->service->insertrecsms($ncuserforplivo, $recmessagearr);
570
-
571
-
572
-                  // Check if there is any auto-reply configured for the receiving number
573
-	          $plgetarpl = $this->connection->prepare('SELECT `phone_number`, `days_of_week`, `daily_start`, `daily_end`, `vacation_start`, `vacation_end`, `message_text` FROM 
574
-                                                          `*PREFIX*sms_relent_autorply` WHERE `phone_number` = ?');
575
-	          $plgetarplres = $plgetarpl->execute([$messagetoprpl]);
576
-	          $plarpldata = $plgetarplres->fetch();
577
-	          $plgetarplres->closeCursor();
578
-
579
-                  if ($plarpldata) {
580
-
581
-                      $autoreplytext = $plarpldata['message_text'];
582
-
583
-                      // Check if the auto-reply is in 'daily mode'
584
-                      if ($plarpldata['days_of_week']) {
585
-
586
-                          // Check if the auto-reply should be sent 
587
-                          $daysofweekarr = explode(",", $plarpldata['days_of_week']);
588
-                          $dailystart = $plarpldata['daily_start'];
589
-                          $dailyend = $plarpldata['daily_end'];
590
-
591
-                          $crntdate = date("Y-m-d");
592
-                          $crntDayNumber = date('N', strtotime($crntdate));
593
-
594
-                          if (in_array($crntDayNumber, $daysofweekarr)) {
595
-
596
-                              $crntimehrmin = date("H:i");
597
-                              $crntdatefmt = new DateTime($crntimehrmin);
598
-                              $startdatefmt = new DateTime($dailystart);
599
-                              $enddatefmt = new DateTime($dailyend);
600
-
601
-                              if ($crntdatefmt > $startdatefmt && $enddatefmt > $crntdatefmt) {
602
-                                  // OK
603
-                              } else {
604
-
605
-		                  $client = new RestClient($plivoapikey, $plivoauthtoken);
606
-                                  $messagedatepl = date("Y-m-d H:i:s");
607
-		                  $response = $client->messages->create($messagetoplsp,[$messagefrom],$autoreplytext,["url" => $plivowhdelrcpt]);
608
-//		                  $messagetextpl = $autoreplytext;
609
-			          $messageidinit = $response->getmessageUuid(0);
610
-		                  $messageid = $messageidinit[0];
611
-
612
-		                  if (property_exists($response, 'error')) { 
613
-		                      $messagestatus = "Error: " . $response->error;
614
-		                  } else { $messagestatus = 'The message has been accepted for delivery.'; }
615
-
616
-                                  $messagefrompl = $messageto;
617
-			          $messagetopl = $messagefrom;
618
-			          $messagenetwork = '';
619
-			          $messageprice = '';
620
-
621
-			          $messagedelivery = '';
622
-
623
-			          $sentmessagearr = [$messageid, $messagedatepl, $messagefrompl, $messagetopl, $messagenetwork, $messageprice, $messagestatus, $messagedelivery, $autoreplytext];
624
-
625
-			          $this->service->insertsentsms($ncuserforplivo, $sentmessagearr);
626
-                              }
627
-                          }
628
-
629
-                      } elseif ($plarpldata['vacation_start'] && $plarpldata['vacation_end']) {
630
-
631
-		                  $client = new RestClient($plivoapikey, $plivoauthtoken);
632
-                                  $messagedatepl = date("Y-m-d H:i:s");
633
-		                  $response = $client->messages->create($messagetoplsp,[$messagefrom],$autoreplytext,["url" => $plivowhdelrcpt]);
634
-
635
-			          $messageidinit = $response->getmessageUuid(0);
636
-		                  $messageid = $messageidinit[0];
637
-
638
-		                  if (property_exists($response, 'error')) { 
639
-		                      $messagestatus = "Error: " . $response->error;
640
-		                  } else { $messagestatus = 'The message has been accepted for delivery.'; }
641
-
642
-                                  $messagefrompl = $messageto;
643
-			          $messagetopl = $messagefrom;
644
-			          $messagenetwork = '';
645
-			          $messageprice = '';
646
-
647
-			          $messagedelivery = '';
648
-
649
-			          $sentmessagearr = [$messageid, $messagedatepl, $messagefrompl, $messagetopl, $messagenetwork, $messageprice, $messagestatus, $messagedelivery, $autoreplytext];
650
-
651
-			          $this->service->insertsentsms($ncuserforplivo, $sentmessagearr);
652
-
653
-                      }
654
-                  }
655
-
656
-
657
-	          // Send notifications
658
-	          $nameofhost = exec("hostname");
659
-
660
-	          $nextnotify = $smsapicred[12];
661
-	          $emailaddress = $smsapicred[13];
662
-	          $includemessageinemail = $smsapicred[14];
663
-
664
-                  if ($ismmspl == 0) { $smsormmspl = "SMS"; } else { $smsormmspl = "MMS"; }
665
-
666
-	          if ($nextnotify != 0 ) {
667
-		      $notifynext = exec("php ./occ notification:generate ".$ncuserforplivo." 'SMS Relentless has received a new ". $smsormmspl ." message !' -l 'You can read the new message by going to SMS Relentless and clicking on the Received SMS Messages button.'");
668
-	          }
669
-
670
-	          if ($emailaddress != '') {
671
-
672
-		      $gmtind = "UTC " . date('P');
673
-		      $smsdateinit = date("Y-m-d  H:i:s");
674
-		      $smsdate = $smsdateinit . " " . $gmtind;
675
-
676
-		      $subject = "New ". $smsormmspl ." message received";
677
-
678
-                      $messagetextnlpl = str_replace("\n", "<br>", $messagetextpl);
679
-
680
-		      if ($includemessageinemail == 0) {
681
-		          $message = "Hello, <br><br> You have received a new message on ".$smsdate." .<br> You can check the new message by going to 'SMS Relentless' > 'Received SMS Messages'. <br><br> Yours, <br> SMS Relentless <br> An SMS application for Nextcloud <br> Host: '".$nameofhost."' <br>";
682
-		      } else {
683
-		          $message = "Hello, <br><br> You have received a new message on ".$smsdate." :<br><br><br> Message ID: ".$messageid." <br> Message Date: ".$messagedate." <br> From: ".$messagefrom." <br> To: ".$messageto."<br> Message Text: <br><br><b>".$messagetextnlpl."</b><br><br>____________<br><br> Yours, <br> SMS Relentless <br> An SMS application for Nextcloud <br> Host: '".$nameofhost."' <br>";
684
-		      }
685
-
686
-                      $messagefin = chunk_split(base64_encode($message));
687
-
688
-		      $headers = "MIME-Version: 1.0" . "\r\n";
689
-		      $headers .= "Content-type: text/html; charset=UTF-8" . "\r\n";
690
-                      $headers .= "Content-Transfer-Encoding: base64" . "\r\n";
691
-
692
-		      // Set the email sender
693
-		      $headers .= "From: " . $emailaddress . "\r\n";
694
-		      $headers .= "Reply-To: " . $emailaddress . "\r\n";
695
-
696
-		      mail($emailaddress, $subject, $messagefin, $headers);
697
-	          }
698
-
699
-	          return http_response_code(200);
700
-
701
-              } else { return "access denied"; }
702
-
703
-       } else { return "access denied"; }
704
-    }
705
-
706
-
707
-    /**
708
-     * @NoAdminRequired
709
-     * @NoCSRFRequired
710
-     * @PublicPage
711
-     */
712
-    public function receivesmstwil() {
713
-
714
-       $twilsig = $_SERVER['HTTP_X_TWILIO_SIGNATURE'];
715
-
716
-       $basepath = $this->config->getSystemValue('overwrite.cli.url');
717
-       $twilrecprm = $_GET["twilrecparam"];
718
-       $twilrecurl = $basepath . "/apps/sms_relentless/api/recsmstwil?twilrecparam=" . $twilrecprm;
719
-
720
-       $ncuserfortwil = $this->service->getuserbytwilrecwhurl($twilrecurl);
721
-
722
-       $smsapicred = $this->service->getapicredentials($ncuserfortwil);
723
-       $apikeyTw = $smsapicred[15];
724
-       $authTokenTw = $smsapicred[16];
725
-       $apidelrecurltw = $smsapicred[18];
726
-
727
-       $postVars = $_POST;
728
-       ksort($postVars);
729
-
730
-       $compurlpart = '';
731
-
732
-       foreach ($postVars as $twilkey => $twilvalue) {
733
-                $compurlpart .= $twilkey . $twilvalue;
734
-       }
735
-
736
-       $compURL1 = $basepath . "/apps/sms_relentless/api/recsmstwil?twilrecparam=" . $twilrecprm . $compurlpart;
737
-       $compURL2 = $basepath . "/apps/sms_relentless/api/recsmstwil?twilrecparam=" . $twilrecprm . "&twilrecparam=" . $twilrecprm . $compurlpart;
738
-       $computedsig1 = base64_encode(hash_hmac('sha1', $compURL1, $authTokenTw, true));
739
-       $computedsig2 = base64_encode(hash_hmac('sha1', $compURL2, $authTokenTw, true));
740
-
741
-       // Verify message signature
742
-       if (strcmp($computedsig1, $twilsig) == 0 || strcmp($computedsig2, $twilsig) == 0) {
743
-
744
-           if ($ncuserfortwil) {
745
-
746
-	       $messageid = $_POST['MessageSid'];
747
-
748
-	       $messagedate = date("Y-m-d H:i:s");
749
-
750
-	       $messagefrom = $_POST['From'];
751
-
752
-	       $messageto = "Twilio: " . $_POST['To'];
753
-
754
-	       $messagetoprtw = $_POST['To'];
755
-
756
-	       $messagetotwls = "Tw: " . $_POST['To'];
757
-
758
-               // Check if the new message is a MMS
759
-               if ($_POST['NumMedia'] != 0) {
760
-
761
-                   $includedFiles = '';
762
-                   foreach ($_POST as $twkey => $twvalue) {
763
-
764
-			if (strpos($twkey, "MediaUrl") !== false) {
765
-                            $includedFiles .= $twvalue . "<br><br>";
766
-			}
767
-                   }
768
-                   $messagetexttw = $_POST['Body'] . "<br><br><br>--- The file(s) included in the MMS follow. Download them only if you trust the sender and the domain of the URLs. ---<br><br>" . $includedFiles;
769
-                   $ismmstw = 1;
770
-               } else {
771
-                   $messagetexttw = $_POST['Body'];
772
-                   $ismmstw = 0;
773
-               }
774
-
775
-	       $recmessagearr = [$messageid, $messagedate, $messagefrom, $messageto, $messagetexttw];
776
-
777
-	       $this->service->insertrecsms($ncuserfortwil, $recmessagearr);
778
-
779
-
780
-
781
-               // Check if there is any auto-reply configured for the receiving number
782
-	       $twilgetarpl = $this->connection->prepare('SELECT `phone_number`, `days_of_week`, `daily_start`, `daily_end`, `vacation_start`, `vacation_end`, `message_text` FROM 
783
-                                                         `*PREFIX*sms_relent_autorply` WHERE `phone_number` = ?');
784
-	       $twilgetarplres = $twilgetarpl->execute([$messagetotwls]);
785
-	       $twilarpldata = $twilgetarplres->fetch();
786
-	       $twilgetarplres->closeCursor();
787
-
788
-               if ($twilarpldata) {
789
-
790
-                   $autoreplytext = $twilarpldata['message_text'];
791
-
792
-                   // Check if the auto-reply is in 'daily mode'
793
-                   if ($twilarpldata['days_of_week']) {
794
-
795
-                       // Check if the auto-reply should be sent 
796
-                       $daysofweekarr = explode(",", $twilarpldata['days_of_week']);
797
-                       $dailystart = $twilarpldata['daily_start'];
798
-                       $dailyend = $twilarpldata['daily_end'];
799
-
800
-                       $crntdate = date("Y-m-d");
801
-                       $crntDayNumber = date('N', strtotime($crntdate));
802
-
803
-                       if (in_array($crntDayNumber, $daysofweekarr)) {
804
-
805
-                           $crntimehrmin = date("H:i");
806
-                           $crntdatefmt = new DateTime($crntimehrmin);
807
-                           $startdatefmt = new DateTime($dailystart);
808
-                           $enddatefmt = new DateTime($dailyend);
809
-
810
-                           if ($crntdatefmt > $startdatefmt && $enddatefmt > $crntdatefmt) {
811
-                               // OK
812
-                           } else {
813
-
814
-			       $datatoposttw = [["To" => $messagefrom, "From" => $messagetoprtw, "Body" => $autoreplytext, "StatusCallback" => $apidelrecurltw]];
815
-
816
-			       $postedsendingfl = implode('&', array_map('http_build_query', $datatoposttw));
817
-			       $messagedatetw = date("Y-m-d H:i:s");
818
-
819
-			       $chtw = curl_init();
820
-			       curl_setopt($chtw, CURLOPT_URL, 'https://api.twilio.com/2010-04-01/Accounts/' . $apikeyTw . '/Messages.json');
821
-			       curl_setopt($chtw, CURLOPT_TIMEOUT, 300);
822
-			       curl_setopt($chtw, CURLOPT_RETURNTRANSFER, 1);
823
-			       curl_setopt($chtw, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
824
-			       curl_setopt($chtw, CURLOPT_USERPWD, "$apikeyTw:$authTokenTw");
825
-			       curl_setopt($chtw, CURLOPT_POST, 1);
826
-			       curl_setopt($chtw, CURLOPT_POSTFIELDS, $postedsendingfl);
827
-
828
-			       $resulttw = curl_exec ($chtw);
829
-			       $statusCodetw = curl_getinfo($chtw, CURLINFO_HTTP_CODE);
830
-			       curl_close ($chtw);
831
-
832
-			       $decresulttw = json_decode($resulttw);
833
-
834
-			       if ($resulttw) {
835
-				   $messageidtw = $decresulttw->sid;
836
-			       } else { $messageidtw = ''; }
837
-
838
-			       if (in_array($statusCodetw, [200, 201, 202, 203, 204, 205, 206])) {
839
-				   $messagestatustw = 'The message has been accepted for delivery.';
840
-			       } else {
841
-				   $messagestatustw = 'An error occurred while trying to send the message.';
842
-			       }
843
-
844
-			       $messagenetworktw = '';
845
-			       $messagepricetw = '';
846
-			       $messagedeliverytw = '';
847
-
848
-			       $sentmessagearr = [$messageidtw, $messagedatetw, $messageto, $messagefrom, $messagenetworktw, $messagepricetw, $messagestatustw, $messagedeliverytw, $autoreplytext];
849
-
850
-			       $this->service->insertsentsms($ncuserfortwil, $sentmessagearr);
851
-                           }
852
-                       }
853
-
854
-                   } elseif ($twilarpldata['vacation_start'] && $twilarpldata['vacation_end']) {
855
-
856
-			       $datatoposttw = [["To" => $messagefrom, "From" => $messagetoprtw, "Body" => $autoreplytext, "StatusCallback" => $apidelrecurltw]];
857
-
858
-			       $postedsendingfl = implode('&', array_map('http_build_query', $datatoposttw));
859
-			       $messagedatetw = date("Y-m-d H:i:s");
860
-
861
-			       $chtw = curl_init();
862
-			       curl_setopt($chtw, CURLOPT_URL, 'https://api.twilio.com/2010-04-01/Accounts/' . $apikeyTw . '/Messages.json');
863
-			       curl_setopt($chtw, CURLOPT_TIMEOUT, 300);
864
-			       curl_setopt($chtw, CURLOPT_RETURNTRANSFER, 1);
865
-			       curl_setopt($chtw, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
866
-			       curl_setopt($chtw, CURLOPT_USERPWD, "$apikeyTw:$authTokenTw");
867
-			       curl_setopt($chtw, CURLOPT_POST, 1);
868
-			       curl_setopt($chtw, CURLOPT_POSTFIELDS, $postedsendingfl);
869
-
870
-			       $resulttw = curl_exec ($chtw);
871
-			       $statusCodetw = curl_getinfo($chtw, CURLINFO_HTTP_CODE);
872
-			       curl_close ($chtw);
873
-
874
-			       $decresulttw = json_decode($resulttw);
875
-
876
-			       if ($resulttw) {
877
-				   $messageidtw = $decresulttw->sid;
878
-			       } else { $messageidtw = ''; }
879
-
880
-			       if (in_array($statusCodetw, [200, 201, 202, 203, 204, 205, 206])) {
881
-				   $messagestatustw = 'The message has been accepted for delivery.';
882
-			       } else {
883
-				   $messagestatustw = 'An error occurred while trying to send the message.';
884
-			       }
885
-
886
-			       $messagenetworktw = '';
887
-			       $messagepricetw = '';
888
-			       $messagedeliverytw = '';
889
-
890
-			       $sentmessagearr = [$messageidtw, $messagedatetw, $messageto, $messagefrom, $messagenetworktw, $messagepricetw, $messagestatustw, $messagedeliverytw, $autoreplytext];
891
-
892
-			       $this->service->insertsentsms($ncuserfortwil, $sentmessagearr);
893
-
894
-                   }
895
-               }
896
-
897
-
898
-
899
-	       // Send notifications
900
-	       $nameofhost = exec("hostname");
901
-
902
-	       $twilnotify = $smsapicred[12];
903
-	       $emailaddress = $smsapicred[13];
904
-	       $includemessageinemail = $smsapicred[14];
905
-
906
-               if ($ismmstw == 0) { $smsormmstw = "SMS"; } else { $smsormmstw = "MMS"; }
907
-
908
-	       if ($twilnotify != 0 ) {
909
-		   $notifynext = exec("php ./occ notification:generate ".$ncuserfortwil." 'SMS Relentless has received a new ". $smsormmstw ." message !' -l 'You can read the new message by going to SMS Relentless and clicking on the Received SMS Messages button.'");
910
-	       }
911
-
912
-	       if ($emailaddress != '') {
913
-
914
-		   $gmtind = "UTC " . date('P');
915
-		   $smsdateinit = date("Y-m-d  H:i:s");
916
-		   $smsdate = $smsdateinit . " " . $gmtind;
917
-
918
-		   $subject = "New ". $smsormmstw ." message received";
919
-
920
-                   $messagetextnltw = str_replace("\n", "<br>", $messagetexttw);
921
-
922
-		   if ($includemessageinemail == 0) {
923
-		       $message = "Hello, <br><br> You have received a new message on ".$smsdate." .<br> You can check the new message by going to 'SMS Relentless' > 'Received SMS Messages'. <br><br> Yours, <br> SMS Relentless <br> An SMS application for Nextcloud <br> Host: '".$nameofhost."' <br>";
924
-		   } else {
925
-		       $message = "Hello, <br><br> You have received a new message on ".$smsdate." :<br><br><br> Message ID: ".$messageid." <br> Message Date: ".$messagedate." <br> From: ".$messagefrom." <br> To: ".$messageto."<br> Message Text: <br><br><b>".$messagetextnltw."</b><br><br>____________<br><br> Yours, <br> SMS Relentless <br> An SMS application for Nextcloud <br> Host: '".$nameofhost."' <br>";
926
-		   }
927
-
928
-                   $messagefin = chunk_split(base64_encode($message));
929
-
930
-		   $headers = "MIME-Version: 1.0" . "\r\n";
931
-		   $headers .= "Content-type: text/html; charset=UTF-8" . "\r\n";
932
-                   $headers .= "Content-Transfer-Encoding: base64" . "\r\n";
933
-
934
-		   // Set the email sender
935
-		   $headers .= "From: " . $emailaddress . "\r\n";
936
-		   $headers .= "Reply-To: " . $emailaddress . "\r\n";
937
-
938
-		   mail($emailaddress, $subject, $messagefin, $headers);
939
-	       }
940
-
941
-               exit();
942
-
943
-           } else { exit(); }
944
-
945
-       } else { exit(); }
946
-
947
-    }
948
-
949
-
950
-    /**
951
-     * @NoAdminRequired
952
-     * @NoCSRFRequired
953
-     * @PublicPage
954
-     */
955
-    public function receivesmsflow() {
956
-
957
-       $flowdrurl = $_SERVER['REQUEST_SCHEME'] . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
958
-
959
-       $receivesms = file_get_contents('php://input');
960
-       $recsmsarr = json_decode($receivesms, true);
961
-
962
-       $ncuserforflowrec = $this->service->getuserbyflowrecwhurl($flowdrurl);
963
-
964
-       if ($ncuserforflowrec != '' && $ncuserforflowrec != null && $ncuserforflowrec != 'undefined') {
965
-
966
-           $messageidfl = $recsmsarr['data']['id'];
967
-
968
-           $messagedatefl = date("Y-m-d H:i:s");
969
-
970
-           $messagefromflpre = $recsmsarr['data']['attributes']['from'];
971
-           if (substr($messagefromflpre, 0, 1) == '+') { $messagefromfl = $messagefromflpre; } else { $messagefromfl = '+' . $messagefromflpre; }
972
-
973
-           $messagetofl = "Flowroute: +" . $recsmsarr['data']['attributes']['to'];
974
-           $messagetoprsl = "+" . $recsmsarr['data']['attributes']['to'];
975
-           $messagetoprfl = "Fl: +" . $recsmsarr['data']['attributes']['to'];
976
-
977
-           // Check if the message is a MMS
978
-           if ($recsmsarr['data']['attributes']['is_mms'] == true) {
979
-
980
-               $includedFiles = '';
981
-               for ($k = 0; $k < count($recsmsarr['included']); $k++) {
982
-                    $includedFiles .= $recsmsarr['included'][$k]['attributes']['url'] . "<br><br>";
983
-               }
984
-               $messagetextfl = $recsmsarr['data']['attributes']['body'] . "<br><br><br>--- The file(s) included in the MMS follow. Download them only if you trust the sender and the domain of the URLs. ---<br><br>" . $includedFiles;
985
-               $ismmsfl = 1;
986
-           } else {
987
-               $messagetextfl = $recsmsarr['data']['attributes']['body'];
988
-               $ismmsfl = 0;
989
-           }
990
-
991
-           $recmessagearr = [$messageidfl, $messagedatefl, $messagefromfl, $messagetofl, $messagetextfl];
992
-
993
-           $this->service->insertrecsms($ncuserforflowrec, $recmessagearr);
994
-
995
-           $flsmsapicred = $this->service->getapicredentials($ncuserforflowrec);
996
-	   $flownotify = $flsmsapicred[12];
997
-	   $emailaddress = $flsmsapicred[13];
998
-	   $includemessageinemail = $flsmsapicred[14];
999
-           $flowapikey = $flsmsapicred[20];
1000
-           $flowapisecret = $flsmsapicred[21];
1001
-           $flowdelrecurl = $flsmsapicred[23];
1002
-
1003
-
1004
-           // Check if there is any auto-reply configured for the receiving number
1005
-	   $flgetarpl = $this->connection->prepare('SELECT `phone_number`, `days_of_week`, `daily_start`, `daily_end`, `vacation_start`, `vacation_end`, `message_text` FROM 
1006
-                                                   `*PREFIX*sms_relent_autorply` WHERE `phone_number` = ?');
1007
-	   $flgetarplres = $flgetarpl->execute([$messagetoprfl]);
1008
-	   $flarpldata = $flgetarplres->fetch();
1009
-	   $flgetarplres->closeCursor();
1010
-
1011
-           if ($flarpldata) {
1012
-
1013
-               $autoreplytext = $flarpldata['message_text'];
1014
-
1015
-               // Check if the auto-reply is in 'daily mode'
1016
-               if ($flarpldata['days_of_week']) {
1017
-
1018
-                   // Check if the auto-reply should be sent 
1019
-                   $daysofweekarr = explode(",", $flarpldata['days_of_week']);
1020
-                   $dailystart = $flarpldata['daily_start'];
1021
-                   $dailyend = $flarpldata['daily_end'];
1022
-
1023
-                   $crntdate = date("Y-m-d");
1024
-                   $crntDayNumber = date('N', strtotime($crntdate));
1025
-
1026
-                   if (in_array($crntDayNumber, $daysofweekarr)) {
1027
-
1028
-                       $crntimehrmin = date("H:i");
1029
-                       $crntdatefmt = new DateTime($crntimehrmin);
1030
-                       $startdatefmt = new DateTime($dailystart);
1031
-                       $enddatefmt = new DateTime($dailyend);
1032
-
1033
-                       if ($crntdatefmt > $startdatefmt && $enddatefmt > $crntdatefmt) {
1034
-                           // OK
1035
-                       } else {
1036
-
1037
-		           $postedparamsfl = json_encode(["to" => $messagefromfl, "from" => $messagetoprsl, "body" => $autoreplytext, "dlr_callback" => $flowdelrecurl]);
1038
-		           $messagedatefl = date("Y-m-d H:i:s");
1039
-
1040
-		           $chfl = curl_init();
1041
-		           curl_setopt($chfl, CURLOPT_URL, 'https://' . $flowapikey . ':' . $flowapisecret . '@api.flowroute.com/v2.1/messages');
1042
-		           curl_setopt($chfl, CURLOPT_HTTPHEADER, array("Content-Type: application/vnd.api+json"));
1043
-		           curl_setopt($chfl, CURLOPT_TIMEOUT, 300);
1044
-		           curl_setopt($chfl, CURLOPT_RETURNTRANSFER, 1);
1045
-		           curl_setopt($chfl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
1046
-		           curl_setopt($chfl, CURLOPT_POST, 1);
1047
-		           curl_setopt($chfl, CURLOPT_POSTFIELDS, $postedparamsfl);
1048
-		           $resultfl = curl_exec ($chfl);
1049
-		           $statusCode = curl_getinfo($chfl, CURLINFO_HTTP_CODE);
1050
-		           curl_close ($chfl);
1051
-
1052
-		           $decresultfl = json_decode($resultfl);
1053
-
1054
-		           if ($resultfl) {
1055
-		               $messageidfl = $decresultfl->data->id;
1056
-		           } else { $messageidfl = ''; }
1057
-
1058
-		           if (in_array($statusCode, [200, 201, 202, 203, 204, 205, 206])) {
1059
-		               $messagestatusfl = 'The message has been accepted for delivery.'; 
1060
-		           } else { 
1061
-		               $messagestatusfl = 'An error occurred while trying to send the message.'; 
1062
-		           }
1063
-
1064
-		           $messagefromflow = "Flowroute: " . $messagetoprsl;
1065
-                           $messagetoflow = $messagefromfl;
1066
-		           $messagenetworkfl = '';
1067
-		           $messagepricefl = '';
1068
-		           $messagedeliveryfl = '';
1069
-
1070
-		           $sentmessagearr = [$messageidfl, $messagedatefl, $messagefromflow, $messagetoflow, $messagenetworkfl, $messagepricefl, $messagestatusfl, $messagedeliveryfl, $autoreplytext];
1071
-
1072
-		           $this->service->insertsentsms($ncuserforflowrec, $sentmessagearr);
1073
-                       }
1074
-                   }
1075
-
1076
-               } elseif ($flarpldata['vacation_start'] && $flarpldata['vacation_end']) {
1077
-
1078
-		           $postedparamsfl = json_encode(["to" => $messagefromfl, "from" => $messagetoprsl, "body" => $autoreplytext, "dlr_callback" => $flowdelrecurl]);
1079
-		           $messagedatefl = date("Y-m-d H:i:s");
1080
-
1081
-		           $chfl = curl_init();
1082
-		           curl_setopt($chfl, CURLOPT_URL, 'https://' . $flowapikey . ':' . $flowapisecret . '@api.flowroute.com/v2.1/messages');
1083
-		           curl_setopt($chfl, CURLOPT_HTTPHEADER, array("Content-Type: application/vnd.api+json"));
1084
-		           curl_setopt($chfl, CURLOPT_TIMEOUT, 300);
1085
-		           curl_setopt($chfl, CURLOPT_RETURNTRANSFER, 1);
1086
-		           curl_setopt($chfl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
1087
-		           curl_setopt($chfl, CURLOPT_POST, 1);
1088
-		           curl_setopt($chfl, CURLOPT_POSTFIELDS, $postedparamsfl);
1089
-		           $resultfl = curl_exec ($chfl);
1090
-		           $statusCode = curl_getinfo($chfl, CURLINFO_HTTP_CODE);
1091
-		           curl_close ($chfl);
1092
-
1093
-		           $decresultfl = json_decode($resultfl);
1094
-
1095
-		           if ($resultfl) {
1096
-		               $messageidfl = $decresultfl->data->id;
1097
-		           } else { $messageidfl = ''; }
1098
-
1099
-		           if (in_array($statusCode, [200, 201, 202, 203, 204, 205, 206])) {
1100
-		               $messagestatusfl = 'The message has been accepted for delivery.'; 
1101
-		           } else { 
1102
-		               $messagestatusfl = 'An error occurred while trying to send the message.'; 
1103
-		           }
1104
-
1105
-		           $messagefromflow = "Flowroute: " . $messagetoprsl;
1106
-                           $messagetoflow = $messagefromfl;
1107
-		           $messagenetworkfl = '';
1108
-		           $messagepricefl = '';
1109
-		           $messagedeliveryfl = '';
1110
-
1111
-		           $sentmessagearr = [$messageidfl, $messagedatefl, $messagefromflow, $messagetoflow, $messagenetworkfl, $messagepricefl, $messagestatusfl, $messagedeliveryfl, $autoreplytext];
1112
-
1113
-		           $this->service->insertsentsms($ncuserforflowrec, $sentmessagearr);
1114
-
1115
-               }
1116
-           }
1117
-
1118
-
1119
-
1120
-	   // Send notifications
1121
-	   $nameofhost = exec("hostname");
1122
-
1123
-           if ($ismmsfl == 0) { $smsormmsfl = "SMS"; } else { $smsormmsfl = "MMS"; }
1124
-
1125
-	   if ($flownotify != 0 ) {
1126
-	       $notifyflow = exec("php ./occ notification:generate ".$ncuserforflowrec." 'SMS Relentless has received a new ". $smsormmsfl ." message !' -l 'You can read the new message by going to SMS Relentless and clicking on the Received SMS Messages button.'");
1127
-	   }
1128
-
1129
-	   if ($emailaddress != '') {
1130
-
1131
-	       $gmtind = "UTC " . date('P');
1132
-	       $smsdateinit = date("Y-m-d  H:i:s");
1133
-	       $smsdate = $smsdateinit . " " . $gmtind;
1134
-
1135
-	       $subject = "New ". $smsormmsfl ." message received";
1136
-
1137
-               $messagetextnlfl = str_replace("\n", "<br>", $messagetextfl);
1138
-
1139
-	       if ($includemessageinemail == 0) {
1140
-	           $message = "Hello, <br><br> You have received a new message on ".$smsdate." .<br> You can check the new message by going to 'SMS Relentless' > 'Received SMS Messages'. <br><br> Yours, <br> SMS Relentless <br> An SMS application for Nextcloud <br> Host: '".$nameofhost."' <br>";
1141
-	       } else {
1142
-	           $message = "Hello, <br><br> You have received a new message on ".$smsdate." :<br><br><br> Message ID: ".$messageidfl." <br> Message Date: ".$messagedatefl." <br> From: ".$messagefromfl." <br> To: ".$messagetofl."<br> Message Text: <br><br><b>".$messagetextnlfl."</b><br><br>____________<br><br> Yours, <br> SMS Relentless <br> An SMS application for Nextcloud <br> Host: '".$nameofhost."' <br>";
1143
-	       }
1144
-
1145
-               $messagefin = chunk_split(base64_encode($message));
1146
-
1147
-	       $headers = "MIME-Version: 1.0" . "\r\n";
1148
-	       $headers .= "Content-type: text/html; charset=UTF-8" . "\r\n";
1149
-               $headers .= "Content-Transfer-Encoding: base64" . "\r\n";
1150
-
1151
-	       // Set the email sender
1152
-	       $headers .= "From: " . $emailaddress . "\r\n";
1153
-	       $headers .= "Reply-To: " . $emailaddress . "\r\n";
1154
-
1155
-	       mail($emailaddress, $subject, $messagefin, $headers);
1156
-	   }
1157
-
1158
-           return http_response_code(200);
1159
-
1160
-       } else { return "access denied"; }
1161
-
1162
-    }
1163
-}
1164 0
deleted file mode 100644
... ...
@@ -1,1210 +0,0 @@
1
-<?php
2
-/**
3
- * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
4
- *
5
- * @author Double Bastion LLC
6
- *
7
- * @license GNU AGPL version 3 or any later version
8
- *
9
- * This program is free software; you can redistribute it and/or
10
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
11
- * License as published by the Free Software Foundation; either
12
- * version 3 of the License, or any later version.
13
- *
14
- * This program is distributed in the hope that it will be useful,
15
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
18
- *
19
- * You should have received a copy of the GNU Affero General Public
20
- * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
- *
22
- */
23
-
24
-declare(strict_types=1);
25
-
26
-namespace OCA\SMSRelentless\Controller;
27
-
28
-use OCP\IRequest;
29
-use OCP\AppFramework\Controller;
30
-use OCA\SMSRelentless\Service\SmsrelentlessService;
31
-use OCP\AppFramework\App;
32
-use OC\Http\Client\Client;
33
-use OCP\Files\SimpleFS\ISimpleFile;
34
-use OCP\Files\SimpleFS\ISimpleFolder;
35
-use OCP\IL10N;
36
-use OCP\Files\Folder;
37
-use OCP\IConfig;
38
-use OC\Files\Filesystem;
39
-use OC\Files\View;
40
-use \ReflectionClass;
41
-use \FilesystemIterator;
42
-use \DateTime;
43
-use \DateInterval;
44
-use OCP\AppFramework\Http\DataResponse;
45
-use OCP\Files\NotFoundException;
46
-use OCP\Files\NotPermittedException;
47
-use Plivo\RestClient;
48
-use OCP\IURLGenerator;
49
-use OCP\Share\IManager;
50
-use OCP\Constants;
51
-use OCP\IGroupManager;
52
-use OCP\IDBConnection;
53
-
54
-
55
-class SmsrelentlessController extends Controller {
56
-
57
-    private $service;
58
-    private $config;
59
-    private $userId;
60
-    private $folder;
61
-    private $filesystem;
62
-    private $view;
63
-    private $urlGenerator;
64
-    private $shareManager;
65
-
66
-    private $groupManager;
67
-    private $connection;
68
-
69
-    public function __construct($appName, IRequest $request, SmsrelentlessService $service, IConfig $config, $userId, Folder $folder, Filesystem $filesystem, View $view, IURLGenerator $urlGenerator, IManager $shareManager, IGroupManager $groupManager, IDBConnection $connection) {
70
-        parent::__construct($appName, $request);
71
-        $this->service = $service;
72
-        $this->config = $config;
73
-        $this->userId = $userId;
74
-        $this->folder = $folder;
75
-        $this->filesystem = $filesystem;
76
-        $this->view = $view;
77
-	$this->urlGenerator = $urlGenerator;
78
-	$this->shareManager = $shareManager;
79
-        $this->groupManager = $groupManager;
80
-        $this->connection = $connection;
81
-    }
82
-
83
-
84
-    /**
85
-     * @NoAdminRequired
86
-     */
87
-    public function object_to_array($obj) {
88
-        if (is_object($obj)) $obj = (array)$this->dismount($obj);
89
-        if (is_array($obj)) {
90
-           $new = array();
91
-           foreach($obj as $key => $val) {
92
-               $new[$key] = $this->object_to_array($val);
93
-           }
94
-        }
95
-        else $new = $obj;
96
-        return $new;
97
-    }
98
-
99
-
100
-    /**
101
-     * @NoAdminRequired
102
-     */
103
-    public function dismount($object) {
104
-        $reflectionClass = new ReflectionClass(get_class($object));
105
-        $array = array();
106
-        foreach ($reflectionClass->getProperties() as $property) {
107
-           $property->setAccessible(true);
108
-           $array[$property->getName()] = $property->getValue($object);
109
-           $property->setAccessible(false);
110
-        }
111
-        return $array;
112
-    }
113
-
114
-
115
-    /**
116
-     * @NoAdminRequired
117
-     */
118
-    public function getbalancetel($userId) {
119
-
120
-        $telsmsapicred = $this->service->getapicredentials($this->userId);
121
-
122
-        $telapikey = $telsmsapicred[0];
123
-        $ch = curl_init();
124
-        $headerstel = array("Content-Type: application/json", "Accept: application/json", "Authorization: Bearer ".$telapikey);
125
-
126
-        curl_setopt($ch, CURLOPT_URL, "https://api.telnyx.com/v2/balance");
127
-        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
128
-        curl_setopt($ch, CURLOPT_HTTPHEADER, $headerstel);
129
-        $responsetel = curl_exec($ch);
130
-        $recdatatel = json_decode($responsetel, TRUE);
131
-        $telbalresponse = $recdatatel['data']['balance'];
132
-        $currentbalancetel = round(floatval($telbalresponse), 3);
133
-        curl_close($ch);
134
-
135
-        return $currentbalancetel;
136
-    }
137
-
138
-
139
-    /**
140
-     * @NoAdminRequired
141
-     */
142
-    public function getbalancenex($userId) {
143
-
144
-        $smsapicred = $this->service->getapicredentials($this->userId);
145
-        $smsapikey = $smsapicred[5];
146
-        $smsapisecret = $smsapicred[6];
147
-
148
-        if ($smsapikey == '' || $smsapisecret == '') {
149
-            $currentbalancenex = "N/A";
150
-        } else {
151
-            $getmesdata = "https://".$smsapikey.":".$smsapisecret."@api.plivo.com/v1/Account/".$smsapikey."/";
152
-            $mesdata = file_get_contents($getmesdata);
153
-            $datainit = json_decode($mesdata);
154
-            $balancenex = $datainit->cash_credits;
155
-            $currentbalancenex = round(floatval($balancenex), 3);
156
-        }
157
-        return $currentbalancenex;
158
-    }
159
-
160
-
161
-    /**
162
-     * @NoAdminRequired
163
-     */
164
-    public function getbalancetwil($userId) {
165
-
166
-        $smsapicred = $this->service->getapicredentials($this->userId);
167
-        $smsapisid = $smsapicred[15];
168
-        $smsapitoken = $smsapicred[16];
169
-
170
-        if ($smsapisid == '' || $smsapitoken == '') {
171
-            $currentbalancetwil = "N/A";
172
-        } else {
173
-
174
-            $twilbalance = json_decode(file_get_contents("https://".$smsapisid.":".$smsapitoken."@api.twilio.com/2010-04-01/Accounts/".$smsapisid."/Balance.json"));
175
-            $balancetwil = $twilbalance->balance;
176
-
177
-            $currentbalancetwil = round(floatval($balancetwil), 3);
178
-        }
179
-        return $currentbalancetwil;
180
-    }
181
-
182
-
183
-    /**
184
-     * @NoAdminRequired
185
-     */
186
-    public function getbalanceflow($userId) {
187
-
188
-        $currentbalanceflow = 'n/a';
189
-
190
-        return $currentbalanceflow;
191
-    }
192
-
193
-
194
-    /**
195
-     * @NoAdminRequired
196
-     */
197
-    public function getsmsnumbers($userId) {
198
-
199
-        $smsapicred = $this->service->getapicredentials($this->userId);
200
-
201
-        $telnyxkey = $smsapicred[0];
202
-
203
-        $nexapikey = $smsapicred[5];
204
-        $nexapisecret = $smsapicred[6];
205
-
206
-        $twilapikey = $smsapicred[15];
207
-        $twilapisecret = $smsapicred[16];
208
-
209
-        $flowapikey = $smsapicred[20];
210
-        $flowapisecret = $smsapicred[21];
211
-
212
-        $telsendernameinit = $smsapicred[9];
213
-        $nexsendernameinit = $smsapicred[10];
214
-        $twilsendernameinit = $smsapicred[19];
215
-
216
-        $telsendername = "Tx: " . $telsendernameinit;
217
-        $nexsendername = "Pl: " . $nexsendernameinit;
218
-        $twilsendername = "Tw: " . $twilsendernameinit;
219
-
220
-        // Get Telnyx phone numbers
221
-        if ($telnyxkey != '') {
222
-
223
-           \Telnyx\Telnyx::setApiKey($telnyxkey);
224
-           $telnumbers = \Telnyx\MessagingPhoneNumber::All();
225
-
226
-           $telnumbersarr = $this->object_to_array($telnumbers);
227
-           $telnmbrs = [];
228
-
229
-           foreach ($telnumbersarr['_originalValues'] as $nmbkey => $nmbvalue) {
230
-              if (is_int($nmbkey)) {
231
-                 foreach ($nmbvalue as $nkey => $nvalue) {
232
-                    if ($nkey == 'phone_number') {
233
-                       $telnmbrs[] = "Tx: " . $nvalue;
234
-                    }
235
-                 }
236
-              }
237
-           }
238
-
239
-        } else { $telnmbrs = []; }
240
-
241
-        // Get Plivo phone numbers
242
-        if ($nexapikey != '' && $nexapisecret != '') {
243
-
244
-           $getacdata = "https://".$nexapikey.":".$nexapisecret."@api.plivo.com/v1/Account/".$nexapikey."/Number/";
245
-           $acdata = file_get_contents($getacdata);
246
-           $datainit = json_decode($acdata, true);
247
-
248
-           $findata = $this->object_to_array($datainit);
249
-
250
-           $nexcurrentnmbrs = [];
251
-
252
-           foreach ($findata['objects'] as $smskey => $smsvalue) {
253
-                   if (is_array($smsvalue)) {
254
-                         foreach ($smsvalue as $smskey2 => $smsvalue2) {
255
-                               if ($smskey2 == 'number') {
256
-                                   $nexcurrentnmbrs[] = "Pl: +" . $smsvalue2;
257
-                               }
258
-                         }
259
-                   }
260
-           }
261
-
262
-
263
-        } else { $nexcurrentnmbrs = []; }
264
-
265
-        // Get Twilio phone numbers
266
-        if ($twilapikey != '' && $twilapisecret != '') {
267
-
268
-            $twilnumbers = json_decode(file_get_contents("https://".$twilapikey.":".$twilapisecret."@api.twilio.com/2010-04-01/Accounts/".$twilapikey."/IncomingPhoneNumbers.json"), true);
269
-            $twilactivenmbrs = $twilnumbers['incoming_phone_numbers'];
270
-
271
-            $twilcurrentnmbrs = [];
272
-            foreach ($twilactivenmbrs as $twnbkey => $twnbvalue) {
273
-                 if (is_array($twnbvalue)) {
274
-                     foreach ($twnbvalue as $twfkey => $twfvalue) {
275
-                          if ($twfkey == 'phone_number') {
276
-                              $twilcurrentnmbrs[] = "Tw: " . $twfvalue;
277
-                          }
278
-                     }
279
-                 }
280
-            }
281
-
282
-        } else { $twilcurrentnmbrs = []; }
283
-
284
-        // Get Flowroute phone numbers
285
-        if ($flowapikey != '' && $flowapisecret != '') {
286
-
287
-            $flnbrsresult = json_decode(file_get_contents("https://".$flowapikey.":".$flowapisecret."@api.flowroute.com/v2/numbers"));
288
-            $flnbrsarr = $flnbrsresult->data;
289
-            $flowcurrentnmbrs = [];
290
-            foreach ($flnbrsarr as $flkey => $flitem) {
291
-                     $flowcurrentnmbrs[] = "Fl: +" . $flitem->id;
292
-            }
293
-
294
-        } else { $flowcurrentnmbrs = []; }
295
-
296
-
297
-        $telsenderarr = [0 => $telsendername];
298
-        $nexsenderarr = [0 => $nexsendername];
299
-        $twilsenderarr = [0 => $twilsendername];
300
-
301
-        $currentnmbrs = array_merge($telnmbrs, $nexcurrentnmbrs, $twilcurrentnmbrs, $flowcurrentnmbrs, $telsenderarr, $nexsenderarr, $twilsenderarr);
302
-
303
-        if ($this->groupManager->isAdmin($this->userId)) {
304
-
305
-            return $currentnmbrs;
306
-
307
-        } else {
308
-
309
-            // Get the restrictions from the 'sms_relent_restrict' table
310
-            $getrestr = $this->connection->prepare('
311
-		       SELECT `phone_number`, `groups`, `users` FROM `*PREFIX*sms_relent_restrict`');
312
-            $getrestrres = $getrestr->execute();
313
-
314
-            $restrdata = [];
315
-            while ($restrfetched = $getrestrres->fetch()) {
316
-                   $restrdata[] = $restrfetched;
317
-            }
318
-            $getrestrres->closeCursor();
319
-
320
-            if ($restrdata) {
321
-
322
-                // Get the groups to which the current user belongs
323
-                $usrId = $this->userId;
324
-                $getusrgrp = $this->connection->prepare('
325
-		       SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `uid` = ?');
326
-                $getusrgrpres = $getusrgrp->execute([$usrId]);
327
-
328
-                $usergrps = [];
329
-                while ($fetchedgrps = $getusrgrpres->fetch()) {
330
-                       $usergrps[] = $fetchedgrps['gid'];
331
-                }
332
-                $getusrgrpres->closeCursor();
333
-
334
-		// Get the Display Name of the current user
335
-		$getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?');
336
-		$getacdatadnres = $getacdatadn->execute([$usrId, 'displayname']);
337
-		$acdatausrdnadm = $getacdatadnres->fetch();
338
-		$cruserdname = $acdatausrdnadm['value'];
339
-		$getacdatadnres->closeCursor();
340
-
341
-                // Get the phone numbers that are not allowed for the current user
342
-                $restrPhoneNb = [];
343
-                foreach ($restrdata as $rskey => $rsvalue) {
344
-
345
-                       $restrgrparr = explode("|", $rsvalue['groups']);
346
-                       $chck = 0;
347
-                       foreach ($restrgrparr as $rkey => $rvalue) {
348
-                                if (str_contains(implode("|", $usergrps), $rvalue)) { $chck++; }
349
-                       }
350
-                       if (str_contains($rsvalue['users'], $cruserdname)) { $chck++; }
351
-
352
-                       if ($chck == 0) { $restrPhoneNb[] = $rsvalue['phone_number']; }
353
-                }
354
-
355
-                $restrPhoneNmbrs = array_unique($restrPhoneNb);
356
-
357
-                // Clean the restricted phone numbers from tags
358
-                $restrPhfin = [];
359
-                foreach ($restrPhoneNmbrs as $phkey => $phvalue) {
360
-
361
-                    $restrpharr = explode(": ", $phvalue);
362
-                    $restrPhfin[] = $restrpharr[1];
363
-                }
364
-
365
-                // Assemble the array of phone numbers that the current user is allowed to use
366
-                for ($k = 0; $k < count($currentnmbrs); $k++) {
367
-
368
-                    $availnmbrarr = explode(": ", $currentnmbrs[$k]);
369
-                    $availphnmbr = $availnmbrarr[1];
370
-
371
-                    if (in_array($availphnmbr, $restrPhfin)) {
372
-                        unset($currentnmbrs[$k]);
373
-                    }
374
-                }
375
-
376
-                $currentnmbrsrstr = array_values($currentnmbrs);
377
-
378
-                return $currentnmbrsrstr;
379
-
380
-            } else { return $currentnmbrs; }
381
-        }
382
-    }
383
-
384
-
385
-    /**
386
-     * @NoAdminRequired
387
-     */
388
-    public function cleantempdir($userId) {
389
-
390
-        // Create the temporary folder if it doesn't exist
391
-        if ($this->folder->nodeExists('SMS_Relentless/temp_files') == false) {
392
-            $this->folder->newFolder('SMS_Relentless/temp_files');
393
-        }
394
-        $datadir = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/';
395
-        $targetdir = $datadir . $this->userId . "/files/SMS_Relentless/temp_files";
396
-        $fileSystemIterator = new FilesystemIterator($targetdir);
397
-
398
-        $dirfiles = [];
399
-        foreach ($fileSystemIterator as $fileInfo){
400
-                 $dirfiles[] = $fileInfo->getFilename();
401
-        }
402
-
403
-        foreach ($dirfiles as $key => $indfile) {
404
-                 $thisuserroot = $this->view->getRoot();
405
-                 $tempfile = $thisuserroot . "/SMS_Relentless/temp_files/" . $indfile;
406
-                 $removetmpfile = $this->filesystem->unlink($tempfile);
407
-        }
408
-     }
409
-
410
-
411
-    /**
412
-     * @NoAdminRequired
413
-     */
414
-    public function uploadNumbersFile($userId, $uploadfileforsms) {
415
-
416
-        // Create the temporary folder if it doesn't exist
417
-        if ($this->folder->nodeExists('SMS_Relentless/temp_files') == false) {
418
-            $this->folder->newFolder('SMS_Relentless/temp_files');
419
-        }
420
-
421
-        // First delete any file that has been previously uploaded
422
-        $datadir = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/';
423
-        $targetdir = $datadir . $this->userId . "/files/SMS_Relentless/temp_files";
424
-        $fileSystemIterator = new FilesystemIterator($targetdir);
425
-
426
-        $dirfiles = [];
427
-        foreach ($fileSystemIterator as $fileInfo){
428
-                 $dirfiles[] = $fileInfo->getFilename();
429
-        }
430
-
431
-        foreach ($dirfiles as $key => $indfile) {
432
-                 $thisuserroot = $this->view->getRoot();
433
-                 $tempfile = $thisuserroot . "/SMS_Relentless/temp_files/" . $indfile;
434
-                 $removetmpfile = $this->filesystem->unlink($tempfile);
435
-        }
436
-
437
-        // Upload the new file
438
-        $fileContent = file_get_contents($_FILES['uploadfileforsms']['tmp_name']);
439
-        $fileName = $_FILES['uploadfileforsms']['name'];
440
-
441
-        $userroot = $this->view->getRoot();
442
-        $targetfile = $userroot . "/SMS_Relentless/temp_files/" . $fileName;
443
-
444
-        $target = $this->folder->newFile($targetfile);
445
-        $target->putContent($fileContent);
446
-
447
-        // Extract the phone numbers from the file
448
-        $numberarraysec = str_replace(array(";", "|", "\r\n", "\r", "\n", "\t"), ",", $fileContent);
449
-        $numberarraytert = preg_replace("/[^0-9,]/", "", $numberarraysec);
450
-        $numberarrayfourth = explode(",", $numberarraytert);
451
-        $numberarrayfifth = array_filter(array_map('trim', $numberarrayfourth));
452
-        $numberarray = array_unique($numberarrayfifth);
453
-
454
-        return $numberarray;
455
-    }
456
-
457
-
458
-    /**
459
-     * @NoAdminRequired
460
-     */
461
-    public function uploadfile($uploadfileformms) {
462
-
463
-           $fileContent = file_get_contents($_FILES['uploadfileformms']['tmp_name']);
464
-           $fileName = $_FILES['uploadfileformms']['name'];
465
-           $fileSizeinit = $_FILES['uploadfileformms']['size'];
466
-           $fileSize = $fileSizeinit / 1024;
467
-
468
-           if ($this->folder->nodeExists('SMS_Relentless/temp_files') == false) {
469
-               $this->folder->newFolder('SMS_Relentless/temp_files');
470
-           }
471
-
472
-           $userroot = $this->view->getRoot();
473
-           $targetfile = $userroot . "/SMS_Relentless/temp_files/" . $fileName;
474
-
475
-           $target = $this->folder->newFile($targetfile);
476
-           $target->putContent($fileContent);
477
-
478
-           // Get the cumulative files size of the uploaded files
479
-           $datadir = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/';
480
-           $targetdir = $datadir . $this->userId . "/files/SMS_Relentless/temp_files";
481
-
482
-           $fileSystemIterator = new FilesystemIterator($targetdir);
483
-
484
-           $dirfiles = [];
485
-           foreach ($fileSystemIterator as $fileInfo){
486
-                    $dirfiles[] = $fileInfo->getFilename();
487
-           }
488
-
489
-           $totalflsizeinit = 0;
490
-           foreach ($dirfiles as $key => $indfile) {
491
-                    $fileSizeinit = $this->filesystem->filesize($userroot . "/SMS_Relentless/temp_files/" . $indfile);
492
-                    $mbSize = round($fileSizeinit / 1024, 4);
493
-                    $totalflsizeinit += $mbSize;
494
-           }
495
-
496
-           $totalflsize = round($totalflsizeinit, 4);
497
-
498
-           return $totalflsize;
499
-    }
500
-
501
-
502
-    /**
503
-     * @NoAdminRequired
504
-     */
505
-    public function pickfile($path) {
506
-
507
-           if ($this->folder->nodeExists('SMS_Relentless/temp_files') == false) {
508
-               $this->folder->newFolder('SMS_Relentless/temp_files');
509
-           }
510
-
511
-           $datadir = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/';
512
-
513
-           $fltgt = $datadir . $this->userId . "/files" . $path;
514
-
515
-           $fileContent = file_get_contents($fltgt);
516
-
517
-           $pkfilesize = round(filesize($fltgt) / 1024, 4);
518
-
519
-           $patharr = explode("/", $path);
520
-
521
-           $revarr = array_reverse($patharr);
522
-
523
-           $relflpath = "/SMS_Relentless/temp_files/" . $revarr[0]; 
524
-
525
-           $target = $this->folder->newFile($relflpath);
526
-
527
-           $target->putContent($fileContent);
528
-
529
-           // Get the cumulative files size of the uploaded files
530
-           $targetdir = $datadir . $this->userId . "/files/SMS_Relentless/temp_files";
531
-
532
-           $fileSystemIterator = new FilesystemIterator($targetdir);
533
-
534
-           $dirfiles = [];
535
-           foreach ($fileSystemIterator as $fileInfo) {
536
-                    $dirfiles[] = $fileInfo->getFilename();
537
-           }
538
-
539
-           $totalflsizeinit = 0;
540
-
541
-           foreach ($dirfiles as $key => $indfile) {
542
-
543
-                    $fileSizeinit = $this->filesystem->filesize("/SMS_Relentless/temp_files/" . $indfile);
544
-                    $mbSize = round($fileSizeinit / 1024, 4);
545
-                    $totalflsizeinit += $mbSize;
546
-           }
547
-
548
-           $totalflsize = round($totalflsizeinit, 4);
549
-
550
-           $pickresult = [$totalflsize, $pkfilesize];
551
-
552
-           return $pickresult;
553
-    }
554
-
555
-
556
-    /**
557
-     * @NoAdminRequired
558
-     */
559
-    public function removeupfile($removedfilename) {
560
-
561
-           $tmpfl = "/" . $this->userId . "/files/SMS_Relentless/temp_files/" . $removedfilename;
562
-
563
-           $removefile = $this->view->unlink($tmpfl);
564
-
565
-           // Get the cumulative files size of the uploaded files
566
-           $datadir = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/';
567
-           $targetdir = $datadir . $this->userId . "/files/SMS_Relentless/temp_files";
568
-           $fileSystemIterator = new FilesystemIterator($targetdir);
569
-
570
-           $dirfiles = [];
571
-           foreach ($fileSystemIterator as $fileInfo){
572
-                    $dirfiles[] = $fileInfo->getFilename();
573
-           }
574
-
575
-           $totalflsizeinit = 0;
576
-
577
-           foreach ($dirfiles as $key => $indfile) {
578
-                    $fileSizeinit = $this->filesystem->filesize("/SMS_Relentless/temp_files/" . $indfile);
579
-                    $mbSize = round($fileSizeinit / 1024, 4);
580
-                    $totalflsizeinit += $mbSize;
581
-           }
582
-
583
-           $totalflsize = round($totalflsizeinit, 4);
584
-
585
-           return $totalflsize;
586
-    }
587
-
588
-
589
-    /**
590
-     * @NoAdminRequired
591
-     */
592
-    public function sendsmstel($userId, $receiversPhoneNbs, $fromsender, $waitinterval, $sentsmstext, $ismms, $mmsfiles) {
593
-         $telsmsapicred = $this->service->getapicredentials($this->userId);
594
-         $telnyxkey = $telsmsapicred[0];
595
-         $teldelrecurl = $telsmsapicred[3];
596
-         $messagingprofid = $telsmsapicred[4];
597
-
598
-         \Telnyx\Telnyx::setApiKey($telnyxkey);
599
-
600
-         $microinterval = $waitinterval * 1000;
601
-
602
-         foreach ($receiversPhoneNbs as $keytel => $tonumber) {
603
-
604
-             usleep($microinterval);
605
-
606
-             $messagedate = date("Y-m-d H:i:s");
607
-
608
-             if ($ismms == 0) {
609
-
610
-                 if (preg_match('/[A-Za-z]+/', $fromsender)) {
611
-                     $message = \Telnyx\Message::Create(["from" => $fromsender, "to" => $tonumber, "text" => $sentsmstext, "webhook_url" => $teldelrecurl, "messaging_profile_id" => $messagingprofid]);
612
-                 } else {
613
-                     $message = \Telnyx\Message::Create(["from" => $fromsender, "to" => $tonumber, "text" => $sentsmstext, "webhook_url" => $teldelrecurl]);
614
-                 }
615
-
616
-                 $messagetexttel = $sentsmstext;
617
-
618
-             } else {
619
-
620
-                 $mediaURLarr = [];
621
-                 $includedMediaFiles = '';
622
-
623
-                 for ($p = 0; $p < count($mmsfiles); $p++ ) {
624
-
625
-                      $userroot = $this->view->getRoot();
626
-                      $filetoshare = $userroot . "/SMS_Relentless/temp_files/".$mmsfiles[$p]."";
627
-
628
-                      $flsharetarget = $this->folder->newFile($filetoshare);
629
-
630
-	              $share = $this->shareManager->newShare();
631
-	              $share->setNode($flsharetarget);
632
-	              $share->setPermissions(Constants::PERMISSION_READ);
633
-	              $share->setShareType(\OC\Share\Constants::SHARE_TYPE_LINK);
634
-	              $share->setSharedBy($this->userId);
635
-                      $expirydate = DateTime::createFromFormat('Y-m-d H:i:s', $messagedate);
636
-                      $expirydate->add(new \DateInterval('P1D'));
637
-                      $share->setExpirationDate($expirydate);
638
-                      $shared = $this->shareManager->createShare($share);
639
-                      $shareToken = $shared->getToken();
640
-
641
-                      $mediaURLarr[] = "https://cloud.webpublicist.net/s/".$shareToken."/download/".$mmsfiles[$p]."";
642
-                      $includedMediaFiles .= "https://cloud.webpublicist.net/s/".$shareToken."/download/".$mmsfiles[$p] . "<br><br>";
643
-                 }
644
-
645
-                 if (preg_match('/[A-Za-z]+/', $fromsender)) {
646
-                     $message = \Telnyx\Message::Create(["from" => $fromsender, "to" => $tonumber, "text" => $sentsmstext, "webhook_url" => $teldelrecurl, "messaging_profile_id" => $messagingprofid, "subject" => "MMS", "media_urls" => $mediaURLarr]);
647
-                 } else {
648
-                     $message = \Telnyx\Message::Create(["from" => $fromsender, "to" => $tonumber, "text" => $sentsmstext, "webhook_url" => $teldelrecurl, "subject" => "MMS", "media_urls" => $mediaURLarr]);
649
-                 }
650
-
651
-                 $messagetexttel = $sentsmstext . "<br><br><br>--- File(s) included in MMS ---<br><br>" . $includedMediaFiles;
652
-             }
653
-
654
-             $messageid = $message['id'];
655
-             $messagefrom = "Telnyx: " . $fromsender;
656
-             $messageto = $tonumber;
657
-             $messagenetwork = null;
658
-             $messageprice = null;
659
-             $messagestatus = $message['to'][0]['status'];
660
-             $messagedelivery = null;
661
-
662
-             $sentmessagearr = [$messageid, $messagedate, $messagefrom, $messageto, $messagenetwork, $messageprice, $messagestatus, $messagedelivery, $messagetexttel];
663
-
664
-             $this->service->insertsentsms($this->userId, $sentmessagearr);
665
-         }
666
-    }
667
-
668
-
669
-    /**
670
-     * @NoAdminRequired
671
-     */
672
-    public function sendsmsnex($userId, $receiversPhoneNbs, $fromsender, $waitinterval, $sentsmstext, $ismms, $mmsfiles) {
673
-
674
-         $smsapicred = $this->service->getapicredentials($this->userId);
675
-
676
-         $smsapikey = $smsapicred[5];
677
-         $smsapisecret = $smsapicred[6];
678
-         $smsapideliveryrecurl = $smsapicred[8];
679
-
680
-         $microinterval = $waitinterval * 1000;
681
-
682
-         foreach ($receiversPhoneNbs as $keynex => $tonumber) {
683
-
684
-             usleep($microinterval);
685
-
686
-             $messagedatepl = date("Y-m-d H:i:s");
687
-
688
-             if ($ismms == 0) {
689
-
690
-                 $client = new RestClient($smsapikey, $smsapisecret);
691
-                 $response = $client->messages->create($fromsender,[$tonumber],$sentsmstext,["url" => $smsapideliveryrecurl]);
692
-                 $messagetextpl = $sentsmstext;
693
-	         $messageidinit = $response->getmessageUuid(0);
694
-                 $messageid = $messageidinit[0];
695
-
696
-                 if (property_exists($response, 'error')) { 
697
-                     $messagestatus = "Error: " . $response->error;
698
-                 } else { $messagestatus = 'The message has been accepted for delivery.'; }
699
-
700
-             } else {
701
-
702
-                 $mediaURLarr = [];
703
-                 $includedMediaFiles = '';
704
-
705
-                 for ($p = 0; $p < count($mmsfiles); $p++ ) {
706
-
707
-                      $userroot = $this->view->getRoot();
708
-                      $filetoshare = $userroot . "/SMS_Relentless/temp_files/".$mmsfiles[$p]."";
709
-
710
-                      $flsharetarget = $this->folder->newFile($filetoshare);
711
-
712
-	              $share = $this->shareManager->newShare();
713
-	              $share->setNode($flsharetarget);
714
-	              $share->setPermissions(Constants::PERMISSION_READ);
715
-	              $share->setShareType(\OC\Share\Constants::SHARE_TYPE_LINK);
716
-	              $share->setSharedBy($this->userId);
717
-                      $expirydate = DateTime::createFromFormat('Y-m-d H:i:s', $messagedatepl);
718
-                      $expirydate->add(new \DateInterval('P1D'));
719
-                      $share->setExpirationDate($expirydate);
720
-                      $shared = $this->shareManager->createShare($share);
721
-                      $shareToken = $shared->getToken();
722
-
723
-                      $mediaURLarr[] = "https://cloud.webpublicist.net/s/".$shareToken."/download/".$mmsfiles[$p]."";
724
-                      $includedMediaFiles .= "https://cloud.webpublicist.net/s/".$shareToken."/download/".$mmsfiles[$p] . "<br><br>";
725
-                 }
726
-
727
-		 $datatosendpl = ["src" => $fromsender, "dst" => $tonumber, "text" => $sentsmstext, "url" => $smsapideliveryrecurl, "type" => "mms", "media_urls" => $mediaURLarr];
728
-		 $postedparamspl = json_encode($datatosendpl);
729
-
730
-		 $chpl = curl_init();
731
-		 curl_setopt($chpl, CURLOPT_URL, 'https://'.$smsapikey.':'.$smsapisecret.'@api.plivo.com/v1/Account/'.$smsapikey.'/Message/');
732
-		 curl_setopt($chpl, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
733
-		 curl_setopt($chpl, CURLOPT_TIMEOUT, 300);
734
-		 curl_setopt($chpl, CURLOPT_RETURNTRANSFER, 1);
735
-		 curl_setopt($chpl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
736
-		 curl_setopt($chpl, CURLOPT_POST, 1);
737
-		 curl_setopt($chpl, CURLOPT_POSTFIELDS, $postedparamspl);
738
-		 $resultpl = curl_exec ($chpl);
739
-		 $statusCodepl = curl_getinfo($chpl, CURLINFO_HTTP_CODE);
740
-		 curl_close ($chpl);
741
-
742
-		 $decresultpl = json_decode($resultpl);
743
-
744
-                 if (property_exists($decresultpl, 'message_uuid')) {
745
-                     $messageidinit = $decresultpl->message_uuid;
746
-                     $messageid = $messageidinit[0];
747
-                 }
748
-
749
-	         if (in_array($statusCodepl, [200, 201, 202, 203, 204, 205, 206])) {
750
-
751
-                     if (property_exists($decresultpl, 'error')) {
752
-                         $messagestatus = "Error: " . $decresultpl->error;
753
-                     } else { $messagestatus = 'The message has been accepted for delivery.'; }
754
-
755
-                 } else { $messagestatus = 'An error occurred while trying to send the message.'; }
756
-
757
-                 $messagetextpl = $sentsmstext . "<br><br><br>--- File(s) included in MMS ---<br><br>" . $includedMediaFiles;
758
-             }
759
-
760
-             if (preg_match('/[A-Za-z]+/', $fromsender)) {
761
-                 $messagefrom = "Plivo: " . $fromsender;
762
-             } else { $messagefrom = "Plivo: +" . $fromsender; }
763
-
764
-             $messageto = $tonumber;
765
-             $messagenetwork = '';
766
-             $messageprice = '';
767
-
768
-             $messagedelivery = '';
769
-
770
-             $sentmessagearr = [$messageid, $messagedatepl, $messagefrom, $messageto, $messagenetwork, $messageprice, $messagestatus, $messagedelivery, $messagetextpl];
771
-
772
-             $this->service->insertsentsms($this->userId, $sentmessagearr);
773
-         }
774
-    }
775
-
776
-
777
-    /**
778
-     * @NoAdminRequired
779
-     */
780
-    public function sendsmstwil($userId, $receiversPhoneNbs, $fromsender, $waitinterval, $sentsmstext, $ismms, $mmsfiles) {
781
-
782
-         $smsapicred = $this->service->getapicredentials($this->userId);
783
-
784
-         $sid = $smsapicred[15];
785
-         $token = $smsapicred[16];
786
-         $smsapirecurltw = $smsapicred[18];
787
-
788
-         $microinterval = $waitinterval * 1000;
789
-
790
-         foreach ($receiversPhoneNbs as $keytwil => $tonumbertw) {
791
-
792
-             usleep($microinterval);
793
-
794
-             $messagedatetw = date("Y-m-d H:i:s");
795
-
796
-             if ($ismms == 0) {
797
-
798
-                  $datatoposttw = [["To" => $tonumbertw, "From" => $fromsender, "Body" => $sentsmstext, "StatusCallback" => $smsapirecurltw]];
799
-                  $sentsmstextfintw = $sentsmstext;
800
-
801
-             } else {
802
-
803
-                 $mediaURLs = [];
804
-
805
-                 for ($p = 0; $p < count($mmsfiles); $p++ ) {
806
-
807
-                      $userroot = $this->view->getRoot();
808
-                      $filetoshare = $userroot . "/SMS_Relentless/temp_files/".$mmsfiles[$p]."";
809
-
810
-                      $flsharetarget = $this->folder->newFile($filetoshare);
811
-
812
-	              $share = $this->shareManager->newShare();
813
-	              $share->setNode($flsharetarget);
814
-	              $share->setPermissions(Constants::PERMISSION_READ);
815
-	              $share->setShareType(\OC\Share\Constants::SHARE_TYPE_LINK);
816
-	              $share->setSharedBy($this->userId);
817
-                      $expirydate = DateTime::createFromFormat('Y-m-d H:i:s', $messagedatetw);
818
-                      $expirydate->add(new \DateInterval('P1D'));
819
-                      $share->setExpirationDate($expirydate);
820
-                      $shared = $this->shareManager->createShare($share);
821
-                      $shareToken = $shared->getToken();
822
-
823
-                      $mediaURLs[] = "https://cloud.webpublicist.net/s/".$shareToken."/download/".$mmsfiles[$p]."";
824
-                 }
825
-
826
-                 $datatoposttw = [["To" => $tonumbertw, "From" => $fromsender, "Body" => $sentsmstext, "StatusCallback" => $smsapirecurltw]];
827
-                 $includedMediaFiles = '';
828
-
829
-                 for ($m = 0; $m < count($mediaURLs); $m++) {
830
-                      array_push($datatoposttw, ["MediaUrl" => $mediaURLs[$m]]);
831
-                      $includedMediaFiles .= $mediaURLs[$m] . "<br><br>";
832
-                 }
833
-
834
-                 $sentsmstextfintw = $sentsmstext . "<br><br><br>--- File(s) included in MMS ---<br><br>" . $includedMediaFiles;
835
-             }
836
-
837
-             $postedsendingfl = implode('&', array_map('http_build_query', $datatoposttw));
838
-
839
-	     $chtw = curl_init();
840
-	     curl_setopt($chtw, CURLOPT_URL, 'https://api.twilio.com/2010-04-01/Accounts/'.$sid.'/Messages.json');
841
-	     curl_setopt($chtw, CURLOPT_TIMEOUT, 300);
842
-	     curl_setopt($chtw, CURLOPT_RETURNTRANSFER, 1);
843
-	     curl_setopt($chtw, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
844
-             curl_setopt($chtw, CURLOPT_USERPWD, "$sid:$token");
845
-	     curl_setopt($chtw, CURLOPT_POST, 1);
846
-             curl_setopt($chtw, CURLOPT_POSTFIELDS, $postedsendingfl);
847
-
848
-	     $resulttw = curl_exec ($chtw);
849
-	     $statusCodetw = curl_getinfo($chtw, CURLINFO_HTTP_CODE);
850
-	     curl_close ($chtw);
851
-
852
-             $decresulttw = json_decode($resulttw);
853
-
854
-             if ($resulttw) {
855
-                 $messageidtw = $decresulttw->sid;
856
-             } else { $messageidtw = ''; }
857
-
858
-	     if (in_array($statusCodetw, [200, 201, 202, 203, 204, 205, 206])) {
859
-                 $messagestatustw = 'The message has been accepted for delivery.';
860
-             } else {
861
-                 $messagestatustw = 'An error occurred while trying to send the message.';
862
-             }
863
-
864
-             if (preg_match('/[A-Za-z]+/', $fromsender)) {
865
-                 $messagefromtw = "Twilio: " . $fromsender;
866
-             } else { $messagefromtw = "Twilio: " . $fromsender; }
867
-
868
-             $messagenetworktw = '';
869
-             $messagepricetw = '';
870
-             $messagedeliverytw = '';
871
-
872
-
873
-             $sentmessagearr = [$messageidtw, $messagedatetw, $messagefromtw, $tonumbertw, $messagenetworktw, $messagepricetw, $messagestatustw, $messagedeliverytw, $sentsmstextfintw];
874
-
875
-             $this->service->insertsentsms($this->userId, $sentmessagearr);
876
-         }
877
-
878
-    }
879
-
880
-
881
-    /**
882
-     * @NoAdminRequired
883
-     */
884
-    public function sendsmsflow($userId, $receiversPhoneNbs, $fromsender, $waitinterval, $sentsmstext, $ismms, $mmsfiles) {
885
-
886
-         $smsapicredfl = $this->service->getapicredentials($this->userId);
887
-
888
-         $flowapikey = $smsapicredfl[20];
889
-         $flowapisecret = $smsapicredfl[21];
890
-         $flowdelrecurl = $smsapicredfl[23];
891
-         $sentsmstextproc = str_replace('"','\\"', $sentsmstext);
892
-
893
-         $microinterval = $waitinterval * 1000;
894
-
895
-         foreach ($receiversPhoneNbs as $keyflow => $tonumberfl) {
896
-
897
-             usleep($microinterval);
898
-
899
-             $messagedatefl = date("Y-m-d H:i:s");
900
-
901
-             if ($ismms == 0) {
902
-
903
-                 $messagetextfinfl = $sentsmstext;
904
-                 $postedparamsfl = json_encode(["to" => $tonumberfl, "from" => $fromsender, "body" => $sentsmstextproc, "dlr_callback" => $flowdelrecurl]);
905
-
906
-             } else {
907
-
908
-		 $mediaurlsarr = [];
909
-
910
-		 for ($p = 0; $p < count($mmsfiles); $p++ ) {
911
-
912
-		      $userroot = $this->view->getRoot();
913
-		      $filetoshare = $userroot . "/SMS_Relentless/temp_files/".$mmsfiles[$p]."";
914
-
915
-		      $flsharetarget = $this->folder->newFile($filetoshare);
916
-
917
-		      $share = $this->shareManager->newShare();
918
-		      $share->setNode($flsharetarget);
919
-		      $share->setPermissions(Constants::PERMISSION_READ);
920
-		      $share->setShareType(\OC\Share\Constants::SHARE_TYPE_LINK);
921
-		      $share->setSharedBy($this->userId);
922
-                      $expirydate = DateTime::createFromFormat('Y-m-d H:i:s', $messagedatefl);
923
-                      $expirydate->add(new \DateInterval('P1D'));
924
-                      $share->setExpirationDate($expirydate);
925
-		      $shared = $this->shareManager->createShare($share);
926
-		      $shareToken = $shared->getToken();
927
-
928
-		      $mediaurlsarr[] = "https://cloud.webpublicist.net/s/".$shareToken."/download/".$mmsfiles[$p]."";
929
-		 }
930
-
931
-		 $includedMediaFiles = '';
932
-
933
-		 for ($m = 0; $m < count($mediaurlsarr); $m++) {
934
-		      $includedMediaFiles .= $mediaurlsarr[$m] . "<br><br>";
935
-		 }
936
-
937
-                 $messagetextfinfl = $sentsmstext . "<br><br><br>--- File(s) included in MMS ---<br><br>" . $includedMediaFiles;
938
-
939
-                 $postedparamsfl = json_encode(["to" => $tonumberfl, "from" => $fromsender, "body" => $sentsmstextproc, "dlr_callback" => $flowdelrecurl, "media_urls" => $mediaurlsarr]);
940
-             }
941
-
942
-
943
-	     $chfl = curl_init();
944
-	     curl_setopt($chfl, CURLOPT_URL, 'https://'.$flowapikey.':'.$flowapisecret.'@api.flowroute.com/v2.1/messages');
945
-	     curl_setopt($chfl, CURLOPT_HTTPHEADER, array("Content-Type: application/vnd.api+json"));
946
-	     curl_setopt($chfl, CURLOPT_TIMEOUT, 300);
947
-	     curl_setopt($chfl, CURLOPT_RETURNTRANSFER, 1);
948
-	     curl_setopt($chfl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
949
-	     curl_setopt($chfl, CURLOPT_POST, 1);
950
-             curl_setopt($chfl, CURLOPT_POSTFIELDS, $postedparamsfl);
951
-	     $resultfl = curl_exec ($chfl);
952
-	     $statusCode = curl_getinfo($chfl, CURLINFO_HTTP_CODE);
953
-	     curl_close ($chfl);
954
-
955
-             $decresultfl = json_decode($resultfl);
956
-
957
-             if ($resultfl) {
958
-                 $messageidfl = $decresultfl->data->id;
959
-             } else { $messageidfl = ''; }
960
-
961
-	     if (in_array($statusCode, [200, 201, 202, 203, 204, 205, 206])) {
962
-                 $messagestatusfl = 'The message has been accepted for delivery.'; 
963
-             } else { 
964
-                 $messagestatusfl = 'An error occurred while trying to send the message.'; 
965
-             }
966
-
967
-             if (preg_match('/[A-Za-z]+/', $fromsender)) {
968
-                 $messagefromfl = "Flowroute: " . $fromsender;
969
-             } else { $messagefromfl = "Flowroute: " . $fromsender; }
970
-
971
-             $messagetofl = $tonumberfl;
972
-             $messagenetworkfl = '';
973
-             $messagepricefl = '';
974
-             $messagedeliveryfl = '';
975
-
976
-             $sentmessagearr = [$messageidfl, $messagedatefl, $messagefromfl, $messagetofl, $messagenetworkfl, $messagepricefl, $messagestatusfl, $messagedeliveryfl, $messagetextfinfl];
977
-
978
-             $this->service->insertsentsms($this->userId, $sentmessagearr);
979
-         }
980
-
981
-    }
982
-
983
-
984
-    /**
985
-     * @NoAdminRequired
986
-     */
987
-    public function saveoldrecrows($userId, $oldrecRows) {
988
-
989
-           // Create the folder for removed messages if it doesn't exist
990
-           if ($this->folder->nodeExists('SMS_Relentless/removed_received_messages') == false) {
991
-               $this->folder->newFolder('SMS_Relentless/removed_received_messages');
992
-           }
993
-           $savecheck = 0;
994
-
995
-           if (count($oldrecRows) > 1) {
996
-               $msfileContent = implode("", $oldrecRows);
997
-
998
-               $delrowsdate = date("Y-m-d_H-i-s");
999
-               $msfileName = "Received_Messages_Deleted_On_" . $delrowsdate . ".csv";
1000
-
1001
-               $userroot = $this->view->getRoot();
1002
-               $targetfile = $userroot . "/SMS_Relentless/removed_received_messages/" . $msfileName;
1003
-
1004
-               $target = $this->folder->newFile($targetfile);
1005
-               $target->putContent($msfileContent);
1006
-
1007
-               if ($this->filesystem->file_get_contents($targetfile) != '') {
1008
-                   $savecheck = 1;
1009
-               }
1010
-           }
1011
-
1012
-           return $savecheck;
1013
-    }
1014
-
1015
-
1016
-    /**
1017
-     * @NoAdminRequired
1018
-     */
1019
-    public function saveoldsentrows($userId, $oldsentRows) {
1020
-
1021
-           // Create the folder for removed messages if it doesn't exist
1022
-           if ($this->folder->nodeExists('SMS_Relentless/removed_sent_messages') == false) {
1023
-               $this->folder->newFolder('SMS_Relentless/removed_sent_messages');
1024
-           }
1025
-           $savesentcheck = 0;
1026
-
1027
-           if (count($oldsentRows) > 1) {
1028
-               $sntfileContent = implode("", $oldsentRows);
1029
-
1030
-               $delsentrowsdate = date("Y-m-d_H-i-s");
1031
-               $sntfileName = "Sent_Messages_Deleted_On_" . $delsentrowsdate . ".csv";
1032
-
1033
-               $userroot = $this->view->getRoot();
1034
-               $snttargetfile = $userroot . "/SMS_Relentless/removed_sent_messages/" . $sntfileName;
1035
-
1036
-               $snttarget = $this->folder->newFile($snttargetfile);
1037
-               $snttarget->putContent($sntfileContent);
1038
-
1039
-               if ($this->filesystem->file_get_contents($snttargetfile) != '') {
1040
-                   $savesentcheck = 1;
1041
-               }
1042
-           }
1043
-
1044
-           return $savesentcheck;
1045
-    }
1046
-
1047
-
1048
-    /**
1049
-     * @NoAdminRequired
1050
-     */
1051
-    public function getreceivedtable($userId) {
1052
-           return $this->service->getreceivedtable($this->userId);
1053
-    }
1054
-
1055
-    /**
1056
-     * @NoAdminRequired
1057
-     */
1058
-    public function getreceivedtablefordel($userId) {
1059
-           return $this->service->getreceivedtablefordel($this->userId);
1060
-    }
1061
-
1062
-    /**
1063
-     * @NoAdminRequired
1064
-     */
1065
-    public function removerecrows($userId, $recmessagedbIDs) {
1066
-           return $this->service->removerecrows($this->userId, $recmessagedbIDs);
1067
-    }
1068
-
1069
-    /**
1070
-     * @NoAdminRequired
1071
-     */
1072
-    public function getsenttable($userId) {
1073
-           return $this->service->getsenttable($this->userId);
1074
-    }
1075
-
1076
-    /**
1077
-     * @NoAdminRequired
1078
-     */
1079
-    public function getsenttablefordel($userId) {
1080
-           return $this->service->getsenttablefordel($this->userId);
1081
-    }
1082
-
1083
-    /**
1084
-     * @NoAdminRequired
1085
-     */
1086
-    public function removesentrows($userId, $sentmessagedbIDs) {
1087
-           return $this->service->removesentrows($this->userId, $sentmessagedbIDs);
1088
-    }
1089
-
1090
-    /**
1091
-     * @NoAdminRequired
1092
-     */
1093
-    public function getgroupedtable($userId) {
1094
-           return $this->service->getgroupedtable($this->userId);
1095
-    }
1096
-
1097
-    /**
1098
-     * @NoAdminRequired
1099
-     */
1100
-    public function savedisplayname($userId, $authorDisplayname, $from) {
1101
-           return $this->service->savedisplayname($this->userId, $authorDisplayname, $from);
1102
-    }
1103
-
1104
-    /**
1105
-     * @NoAdminRequired
1106
-     */
1107
-    public function getmessagesperpage($userId) {
1108
-           return $this->service->getmessagesperpage($this->userId);
1109
-    }
1110
-
1111
-    /**
1112
-     * @NoAdminRequired
1113
-     */
1114
-    public function getdelrecsettings($userId) {
1115
-           return $this->service->getdelrecsettings($this->userId);
1116
-    }
1117
-
1118
-    public function updatenumberrestrictions($userId, $savedByDsplname, $phoneNumber, $groups, $users) {
1119
-           return $this->service->updatenumberrestrictions($this->userId, $savedByDsplname, $phoneNumber, $groups, $users);
1120
-    }
1121
-
1122
-    public function removenumberrestrictions($userId, $phoneNumber) {
1123
-           return $this->service->removenumberrestrictions($this->userId, $phoneNumber);
1124
-    }
1125
-
1126
-    /**
1127
-     * @NoAdminRequired
1128
-     */
1129
-    public function updateautoreplies($userId, $savedByDsplname, $phoneNumber, $daysOfWeek, $dailyStart, $dailyEnd, $vacationStart, $vacationEnd, $messageText) {
1130
-           return $this->service->updateautoreplies($this->userId, $savedByDsplname, $phoneNumber, $daysOfWeek, $dailyStart, $dailyEnd, $vacationStart, $vacationEnd, $messageText);
1131
-    }
1132
-
1133
-    /**
1134
-     * @NoAdminRequired
1135
-     */
1136
-    public function removeautoreplies($userId, $phoneNumber) {
1137
-           return $this->service->removeautoreplies($this->userId, $phoneNumber);
1138
-    }
1139
-
1140
-    /**
1141
-     * @NoAdminRequired
1142
-     */
1143
-    public function getsettings($userId) {
1144
-           return $this->service->getsettings($this->userId);
1145
-    }
1146
-
1147
-    public function getadminsettings($userId) {
1148
-           return $this->service->getadminsettings($this->userId);
1149
-    }
1150
-
1151
-    /**
1152
-     * @NoAdminRequired
1153
-     */
1154
-    public function getautoreplyconf($userId) {
1155
-
1156
-           // Get the available phone numbers for the current user (the restricted phone numbers are excluded)
1157
-           $availphonenmbrs = $this->getsmsnumbers($this->userId);
1158
-
1159
-           // Get the display name of the current user
1160
-           $usrid = $this->userId;
1161
-           $getusrdnm = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?');
1162
-	   $getusrdnmres = $getusrdnm->execute([$usrid, 'displayname']);
1163
-	   $getusrdnmdata = $getusrdnmres->fetch();
1164
-	   $userDisplayNm = $getusrdnmdata['value'];
1165
-	   $getusrdnmres->closeCursor();
1166
-
1167
-           // Get the auto-replies for the available phone numbers
1168
-           $getautorpl = $this->connection->prepare('SELECT `saved_by_dsplname`, `phone_number`, `days_of_week`, `daily_start`, `daily_end`, `vacation_start`, `vacation_end`, 
1169
-                                                    `message_text` FROM `*PREFIX*sms_relent_autorply`');
1170
-	   $getautorplres = $getautorpl->execute();
1171
-           $autorplconf = [];
1172
-	   while ($acdatausrdnadm = $getautorplres->fetch()) {
1173
-                  $autorplconf[] = $acdatausrdnadm;
1174
-           }
1175
-	   $getautorplres->closeCursor();
1176
-
1177
-           if ($autorplconf) {
1178
-
1179
-               $autoreplyconf = [];
1180
-               foreach ($autorplconf as $arkey => $arvalue) {
1181
-                        if (in_array($arvalue['phone_number'], $availphonenmbrs)) {
1182
-                            $autoreplyconf[] = $arvalue;
1183
-                        }
1184
-               }
1185
-
1186
-           } else { $autoreplyconf = ''; }
1187
-
1188
-           $autoreplyfdb = ['userdisplayname' => $userDisplayNm, 'phonenumbers' => $availphonenmbrs, 'autoreplies' => $autoreplyconf];
1189
-
1190
-           return $autoreplyfdb;
1191
-    }
1192
-
1193
-    /**
1194
-     * @NoAdminRequired
1195
-     */
1196
-    public function getgroupedpernumber($userId, $phoneNumber) {
1197
-           return $this->service->getgroupedpernumber($this->userId, $phoneNumber);
1198
-    }
1199
-
1200
-    /**
1201
-     * @NoAdminRequired
1202
-     */
1203
-    public function updatesettings($userId, $telapiKey, $telPubKey, $telapiUrlRec, $telapiUrl, $messagingProfileId, $nexapiKey, $nexapiSecret, $nexapiUrlRec, $nexapiUrl, $telSenderName, $nexSenderName, $messagesperpage, $getNotify, $notificationEmail, $getsmsinemail, $twilapiKey, $twilapiSecret, $twilapiUrlRec, $twilapiUrl, $twilSenderName, $flowapiKey, $flowapiSecret, $flowapiUrlRec, $flowapiUrl, $showDisplayNames) {
1204
-           return $this->service->updatesettings($this->userId, $telapiKey, $telPubKey, $telapiUrlRec, $telapiUrl, $messagingProfileId, $nexapiKey, $nexapiSecret, $nexapiUrlRec, $nexapiUrl, $telSenderName, $nexSenderName, $messagesperpage, $getNotify, $notificationEmail, $getsmsinemail, $twilapiKey, $twilapiSecret, $twilapiUrlRec, $twilapiUrl, $twilSenderName, $flowapiKey, $flowapiSecret, $flowapiUrlRec, $flowapiUrl, $showDisplayNames);
1205
-    }
1206
-
1207
-    public function updateadminsettings($userId, $showAllMessages) {
1208
-           return $this->service->updateadminsettings($this->userId, $showAllMessages);
1209
-    }
1210
-}
1211 0
deleted file mode 100644
... ...
@@ -1,564 +0,0 @@
1
-<?php
2
-/**
3
- * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
4
- *
5
- * @author Double Bastion LLC
6
- *
7
- * @license GNU AGPL version 3 or any later version
8
- *
9
- * This program is free software; you can redistribute it and/or
10
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
11
- * License as published by the Free Software Foundation; either
12
- * version 3 of the License, or any later version.
13
- *
14
- * This program is distributed in the hope that it will be useful,
15
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
18
- *
19
- * You should have received a copy of the GNU Affero General Public
20
- * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
- *
22
- */
23
-
24
-declare(strict_types=1);
25
-
26
-namespace OCA\SMSRelentless\Migration;
27
-
28
-use Closure;
29
-use OCP\DB\Types;
30
-use OCP\DB\ISchemaWrapper;
31
-use OCP\IDBConnection;
32
-use OCP\Migration\IOutput;
33
-use OCP\Migration\SimpleMigrationStep;
34
-
35
-
36
-class Version116Date20230508212745 extends SimpleMigrationStep {
37
-
38
-        /** @var IDBConnection */
39
-        private $connection;
40
-
41
-        /**
42
-         * @param IDBConnection $connection
43
-         */
44
-        public function __construct(IDBConnection $connection) {
45
-                $this->connection = $connection;
46
-        }
47
-
48
-	/**
49
-	 * @param IOutput $output
50
-	 * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
51
-	 * @param array $options
52
-	 * @return null|ISchemaWrapper
53
-	 */
54
-	public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper {
55
-		/** @var ISchemaWrapper $schema */
56
-		$schema = $schemaClosure();
57
-
58
-		if (!$schema->hasTable('sms_relent_settings')) {
59
-			$table = $schema->createTable('sms_relent_settings');
60
-			$table->addColumn('id', Types::BIGINT, [
61
-				'autoincrement' => true,
62
-				'notnull' => true,
63
-                                'length' => 11,
64
-                                'unsigned' => true,
65
-			]);
66
-			$table->addColumn('user_id', Types::STRING, [
67
-				'notnull' => true,
68
-				'length' => 128,
69
-			]);
70
-			$table->addColumn('telapi_key', Types::STRING, [
71
-				'notnull' => true,
72
-				'length' => 512,
73
-			]);
74
-			$table->addColumn('tel_pub_key', Types::STRING, [
75
-				'notnull' => true,
76
-				'length' => 512,
77
-			]);
78
-			$table->addColumn('telapi_url_rec', Types::STRING, [
79
-				'notnull' => true,
80
-				'length' => 512,
81
-			]);
82
-			$table->addColumn('telapi_url', Types::STRING, [
83
-				'notnull' => true,
84
-				'length' => 512,
85
-			]);
86
-			$table->addColumn('messaging_profile_id', Types::STRING, [
87
-				'notnull' => true,
88
-				'length' => 512,
89
-			]);
90
-			$table->addColumn('nexapi_key', Types::STRING, [
91
-				'notnull' => true,
92
-				'length' => 512,
93
-			]);
94
-			$table->addColumn('nexapi_secret', Types::STRING, [
95
-				'notnull' => true,
96
-				'length' => 512,
97
-			]);
98
-			$table->addColumn('nexapi_url_rec', Types::STRING, [
99
-				'notnull' => true,
100
-				'length' => 512,
101
-			]);
102
-			$table->addColumn('nexapi_url', Types::STRING, [
103
-				'notnull' => true,
104
-				'length' => 512,
105
-			]);
106
-			$table->addColumn('twilapi_key', Types::STRING, [
107
-				'notnull' => true,
108
-				'length' => 512,
109
-			]);
110
-			$table->addColumn('twilapi_secret', Types::STRING, [
111
-				'notnull' => true,
112
-				'length' => 512,
113
-			]);
114
-			$table->addColumn('twilapi_url_rec', Types::STRING, [
115
-				'notnull' => true,
116
-				'length' => 512,
117
-			]);
118
-			$table->addColumn('twilapi_url', Types::STRING, [
119
-				'notnull' => true,
120
-				'length' => 512,
121
-			]);
122
-			$table->addColumn('flowapi_key', Types::STRING, [
123
-				'notnull' => true,
124
-				'length' => 512,
125
-			]);
126
-			$table->addColumn('flowapi_secret', Types::STRING, [
127
-				'notnull' => true,
128
-				'length' => 512,
129
-			]);
130
-			$table->addColumn('flowapi_url_rec', Types::STRING, [
131
-				'notnull' => true,
132
-				'length' => 512,
133
-			]);
134
-			$table->addColumn('flowapi_url', Types::STRING, [
135
-				'notnull' => true,
136
-				'length' => 512,
137
-			]);
138
-			$table->addColumn('tel_sender_name', Types::STRING, [
139
-				'notnull' => false,
140
-				'length' => 48,
141
-				'default' => '',
142
-			]);
143
-			$table->addColumn('nex_sender_name', Types::STRING, [
144
-				'notnull' => false,
145
-				'length' => 48,
146
-				'default' => '',
147
-			]);
148
-			$table->addColumn('twil_sender_name', Types::STRING, [
149
-				'notnull' => false,
150
-				'length' => 48,
151
-				'default' => '',
152
-			]);
153
-			$table->addColumn('flow_sender_name', Types::STRING, [
154
-				'notnull' => false,
155
-				'length' => 48,
156
-				'default' => '',
157
-			]);
158
-			$table->addColumn('messagesperpage', Types::INTEGER, [
159
-				'notnull' => false,
160
-				'length' => 11,
161
-                                'unsigned' => true,
162
-			]);
163
-			$table->addColumn('get_notify', Types::SMALLINT, [
164
-				'notnull' => false,
165
-				'length' => 1,
166
-			]);
167
-			$table->addColumn('notification_email', Types::STRING, [
168
-				'notnull' => false,
169
-				'length' => 512,
170
-				'default' => '',
171
-			]);
172
-			$table->addColumn('getsmsinemail', Types::SMALLINT, [
173
-				'notnull' => false,
174
-				'length' => 1,
175
-			]);
176
-			$table->addColumn('show_all_messages', Types::SMALLINT, [
177
-				'notnull' => false,
178
-				'length' => 1,
179
-			]);
180
-			$table->addColumn('show_display_names', Types::SMALLINT, [
181
-				'notnull' => false,
182
-				'length' => 1,
183
-			]);
184
-                        $table->setPrimaryKey(['id']);
185
-                        $table->addUniqueIndex(['id']);
186
-
187
-		} else {
188
-
189
-                        $table = $schema->getTable('sms_relent_settings');
190
-
191
-			$table->addColumn('show_all_messages', Types::SMALLINT, [
192
-				'notnull' => false,
193
-				'length' => 1,
194
-			]);
195
-			$table->addColumn('show_display_names', Types::SMALLINT, [
196
-				'notnull' => false,
197
-				'length' => 1,
198
-			]);
199
-                }
200
-
201
-
202
-		if (!$schema->hasTable('sms_relent_received')) {
203
-			$table = $schema->createTable('sms_relent_received');
204
-			$table->addColumn('id', Types::BIGINT, [
205
-				'autoincrement' => true,
206
-				'notnull' => true,
207
-                                'length' => 11,
208
-                                'unsigned' => true,
209
-			]);
210
-			$table->addColumn('user_id', Types::STRING, [
211
-				'notnull' => true,
212
-				'length' => 64,
213
-			]);
214
-			$table->addColumn('message_id', Types::STRING, [
215
-				'notnull' => true,
216
-				'length' => 512,
217
-			]);
218
-			$table->addColumn('date', Types::DATETIME, [
219
-				'notnull' => true,
220
-			]);
221
-			$table->addColumn('from', Types::STRING, [
222
-				'notnull' => true,
223
-				'length' => 128,
224
-			]);
225
-			$table->addColumn('to', Types::STRING, [
226
-				'notnull' => true,
227
-				'length' => 128,
228
-			]);
229
-			$table->addColumn('message', Types::TEXT, [
230
-				'notnull' => false,
231
-				'default' => '',
232
-			]);
233
-			$table->addColumn('author_displayname', Types::STRING, [
234
-				'notnull' => true,
235
-				'length' => 255,
236
-			]);
237
-			$table->addColumn('internal_sender', Types::SMALLINT, [
238
-				'notnull' => false,
239
-				'length' => 1,
240
-			]);
241
-                        $table->setPrimaryKey(['id']);
242
-                        $table->addUniqueIndex(['id']);
243
-
244
-		} else {
245
-
246
-                        $table = $schema->getTable('sms_relent_received');
247
-
248
-			$table->addColumn('author_displayname', Types::STRING, [
249
-				'notnull' => true,
250
-				'length' => 255,
251
-			]);
252
-			$table->addColumn('internal_sender', Types::SMALLINT, [
253
-				'notnull' => false,
254
-				'length' => 1,
255
-			]);
256
-                }
257
-
258
-
259
-		if (!$schema->hasTable('sms_relent_sent')) {
260
-			$table = $schema->createTable('sms_relent_sent');
261
-			$table->addColumn('id', Types::BIGINT, [
262
-				'autoincrement' => true,
263
-				'notnull' => true,
264
-                                'length' => 11,
265
-                                'unsigned' => true,
266
-			]);
267
-			$table->addColumn('user_id', Types::STRING, [
268
-				'notnull' => true,
269
-				'length' => 64,
270
-			]);
271
-			$table->addColumn('message_id', Types::STRING, [
272
-				'notnull' => true,
273
-				'length' => 512,
274
-			]);
275
-			$table->addColumn('date', Types::DATETIME, [
276
-				'notnull' => true,
277
-			]);
278
-			$table->addColumn('from', Types::STRING, [
279
-				'notnull' => true,
280
-				'length' => 128,
281
-			]);
282
-			$table->addColumn('to', Types::STRING, [
283
-				'notnull' => true,
284
-				'length' => 128,
285
-			]);
286
-			$table->addColumn('network ', Types::STRING, [
287
-				'notnull' => false,
288
-				'length' => 64,
289
-				'default' => '',
290
-			]);
291
-			$table->addColumn('price', Types::STRING, [
292
-				'notnull' => false,
293
-				'length' => 64,
294
-				'default' => '',
295
-			]);
296
-			$table->addColumn('status', Types::STRING, [
297
-				'notnull' => false,
298
-				'length' => 512,
299
-				'default' => '',
300
-			]);
301
-			$table->addColumn('deliveryreceipt', Types::STRING, [
302
-				'notnull' => false,
303
-				'length' => 64,
304
-				'default' => '',
305
-			]);
306
-			$table->addColumn('message', Types::TEXT, [
307
-				'notnull' => false,
308
-                                'default' => '',
309
-			]);
310
-			$table->addColumn('author_displayname', Types::STRING, [
311
-				'notnull' => true,
312
-				'length' => 255,
313
-			]);
314
-                        $table->setPrimaryKey(['id']);
315
-                        $table->addUniqueIndex(['id']);
316
-
317
-		} else {
318
-
319
-                        $table = $schema->getTable('sms_relent_sent');
320
-
321
-			$table->addColumn('author_displayname', Types::STRING, [
322
-				'notnull' => true,
323
-				'length' => 255,
324
-			]);
325
-                }
326
-
327
-
328
-		if (!$schema->hasTable('sms_relent_autorply')) {
329
-			$table = $schema->createTable('sms_relent_autorply');
330
-			$table->addColumn('id', Types::BIGINT, [
331
-				'autoincrement' => true,
332
-				'notnull' => true,
333
-                                'length' => 11,
334
-                                'unsigned' => true,
335
-			]);
336
-			$table->addColumn('user_id', Types::STRING, [
337
-				'notnull' => true,
338
-				'length' => 128,
339
-			]);
340
-			$table->addColumn('saved_by_dsplname', Types::STRING, [
341
-				'notnull' => true,
342
-				'length' => 255,
343
-			]);
344
-			$table->addColumn('phone_number', Types::STRING, [
345
-				'notnull' => true,
346
-				'length' => 128,
347
-			]);
348
-			$table->addColumn('days_of_week', Types::STRING, [
349
-				'notnull' => false,
350
-				'length' => 64,
351
-                                'default' => '',
352
-			]);
353
-			$table->addColumn('daily_start', Types::STRING, [
354
-				'notnull' => false,
355
-				'length' => 8,
356
-                                'default' => '',
357
-			]);
358
-			$table->addColumn('daily_end', Types::STRING, [
359
-				'notnull' => false,
360
-				'length' => 8,
361
-                                'default' => '',
362
-			]);
363
-			$table->addColumn('vacation_start', Types::DATETIME, [
364
-				'notnull' => false,
365
-			]);
366
-			$table->addColumn('vacation_end', Types::DATETIME, [
367
-				'notnull' => false,
368
-			]);
369
-			$table->addColumn('message_text', Types::TEXT, [
370
-				'notnull' => false,
371
-                                'default' => '',
372
-			]);
373
-                        $table->setPrimaryKey(['id']);
374
-                        $table->addUniqueIndex(['id']);
375
-
376
-		}
377
-
378
-
379
-		if (!$schema->hasTable('sms_relent_restrict')) {
380
-			$table = $schema->createTable('sms_relent_restrict');
381
-			$table->addColumn('id', Types::BIGINT, [
382
-				'autoincrement' => true,
383
-				'notnull' => true,
384
-                                'length' => 11,
385
-                                'unsigned' => true,
386
-			]);
387
-			$table->addColumn('user_id', Types::STRING, [
388
-				'notnull' => true,
389
-				'length' => 128,
390
-			]);
391
-			$table->addColumn('saved_by_dsplname', Types::STRING, [
392
-				'notnull' => true,
393
-				'length' => 255,
394
-			]);
395
-			$table->addColumn('phone_number', Types::STRING, [
396
-				'notnull' => true,
397
-				'length' => 128,
398
-			]);
399
-			$table->addColumn('groups', Types::STRING, [
400
-				'notnull' => true,
401
-				'length' => 2048,
402
-			]);
403
-			$table->addColumn('users', Types::STRING, [
404
-				'notnull' => true,
405
-				'length' => 2048,
406
-			]);
407
-                        $table->setPrimaryKey(['id']);
408
-                        $table->addUniqueIndex(['id']);
409
-
410
-		}
411
-
412
-		return $schema;
413
-	}
414
-
415
-        public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper {
416
-
417
-                // Enter the Nextcloud display name in the 'author_displayname' column of the 'sms_relent_received' table, for messages that were received before
418
-                $getrecfromnb = $this->connection->prepare('SELECT `from` FROM `*PREFIX*sms_relent_received`');
419
-	        $getrecfromnbres = $getrecfromnb->execute();
420
-
421
-                $recdatanmbrs = [];
422
-                while ($rowfetched = $getrecfromnbres->fetch()) {
423
-                       $recdatanmbrs[] = $rowfetched['from'];
424
-                }
425
-                $getrecfromnbres->closeCursor();
426
-
427
-                if ($recdatanmbrs) {
428
-
429
-                    $recnmbrs = array_values(array_unique($recdatanmbrs));
430
-
431
-                    $phoneDisplayPairs = [];
432
-                    foreach ($recnmbrs as $rckey => $rcvalue) {
433
-
434
-                         $rcvalueprc = '%' . $rcvalue;
435
-                         $getacdata = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ? AND `value` LIKE ?');
436
-	                 $getacdatares = $getacdata->execute(['phone', $rcvalueprc]);
437
-
438
-		         $acdatausers = [];
439
-		         while ($acusrfetched = $getacdatares->fetch()) {
440
-		                $acdatausers[] = $acusrfetched['uid'];
441
-		         }
442
-		         $getacdatares->closeCursor();
443
-
444
-
445
-                         if ($acdatausers) {
446
-
447
-		             $acdatausrdn = [];
448
-                             foreach ($acdatausers as $dnkey => $dnvalue) {
449
-
450
-		                  $getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?');
451
-			          $getacdatadnres = $getacdatadn->execute([$dnvalue, 'displayname']);
452
-
453
-				  while ($acusrdnfetched = $getacdatadnres->fetch()) {
454
-				         $acdatausrdn[] = $acusrdnfetched['value'];
455
-				  }
456
-				  $getacdatadnres->closeCursor();
457
-                             }
458
-
459
-                             if ($acdatausrdn) {
460
-
461
-                                 if (count($acdatausrdn) == 1) {
462
-
463
-                                     $phoneDisplayPairs[$rcvalue] = ['author_displayname' => $acdatausrdn[0], 'internal_sender' => 1];
464
-
465
-                                 } elseif (count($acdatausrdn) > 1) {
466
-
467
-                                     $phoneDisplayPairs[$rcvalue] = ['author_displayname' => implode("/", $acdatausrdn), 'internal_sender' => 1];
468
-                                 }
469
-
470
-                             } else { $phoneDisplayPairs[$rcvalue] = ['author_displayname' => '', 'internal_sender' => 0]; }
471
-
472
-                         } else { $phoneDisplayPairs[$rcvalue] = ['author_displayname' => '', 'internal_sender' => 0]; }
473
-                    }
474
-
475
-                    foreach ($phoneDisplayPairs as $pdpkey => $pdpvalue) {
476
-
477
-                         if (is_array($pdpvalue)) {
478
-			     $updaterecms = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_received` SET `author_displayname` = ?, `internal_sender` = ? WHERE `from` = ?');
479
-			     $updaterecmsres = $updaterecms->execute([$pdpvalue['author_displayname'], $pdpvalue['internal_sender'], $pdpkey]);
480
-			     $updaterecmsres->closeCursor();
481
-                         }
482
-                    }
483
-                }
484
-
485
-
486
-                // Enter the Nextcloud display name in the 'author_displayname' column of the 'sms_relent_sent' table, for messages that were sent before
487
-                $getsentfromnb = $this->connection->prepare('SELECT `from` FROM `*PREFIX*sms_relent_sent`');
488
-	        $getsentfromnbres = $getsentfromnb->execute();
489
-
490
-                $sentdatanmbrs = [];
491
-                while ($rowfetchedst = $getsentfromnbres->fetch()) {
492
-
493
-                       $sentdatanmbrspre = $rowfetchedst['from'];
494
-                       $sentdatanmbrsarr = explode("+", $sentdatanmbrspre);
495
-                       if (count($sentdatanmbrsarr) > 1) {
496
-                           $sentdatanmbrs[] = "+" . $sentdatanmbrsarr[1];
497
-                       } else {
498
-                           $sentdatanmbrs[] = $sentdatanmbrsarr[0];
499
-                       }
500
-                }
501
-                $getsentfromnbres->closeCursor();
502
-
503
-                if ($sentdatanmbrs) {
504
-
505
-                    $sentnmbrs = array_values(array_unique($sentdatanmbrs));
506
-
507
-                    $phoneDisplayPairsst = [];
508
-                    foreach ($sentnmbrs as $stkey => $stvalue) {
509
-
510
-                         $stvalueprc = '%' . $stvalue;
511
-                         $getacdatast = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ? AND `value` LIKE ?');
512
-	                 $getacdatastres = $getacdatast->execute(['phone', $stvalueprc]);
513
-
514
-		         $acdatausersst = [];
515
-		         while ($acusrstfetched = $getacdatastres->fetch()) {
516
-		                $acdatausersst[] = $acusrstfetched['uid'];
517
-		         }
518
-		         $getacdatastres->closeCursor();
519
-
520
-                         if ($acdatausersst) {
521
-
522
-		             $acdatausrdnst = [];
523
-                             foreach ($acdatausersst as $dnstkey => $dnstvalue) {
524
-
525
-		                  $getacdatadnst = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?');
526
-			          $getacdatadnstres = $getacdatadnst->execute([$dnstvalue, 'displayname']);
527
-
528
-				  while ($acusrdnstfetched = $getacdatadnstres->fetch()) {
529
-				         $acdatausrdnst[] = $acusrdnstfetched['value'];
530
-				  }
531
-				  $getacdatadnstres->closeCursor();
532
-                             }
533
-
534
-                             if ($acdatausrdnst) {
535
-
536
-                                 if (count($acdatausrdnst) == 1) {
537
-
538
-                                     $phoneDisplayPairsst[$stvalue] = ['author_displayname' => $acdatausrdnst[0]];
539
-
540
-                                 } elseif (count($acdatausrdnst) > 1) {
541
-
542
-                                     $phoneDisplayPairsst[$stvalue] = ['author_displayname' => implode("/", $acdatausrdnst)];
543
-                                 }
544
-
545
-                             } else { $phoneDisplayPairsst[$stvalue] = ['author_displayname' => '']; }
546
-
547
-                         } else { $phoneDisplayPairsst[$stvalue] = ['author_displayname' => '']; }
548
-                    }
549
-
550
-                    foreach ($phoneDisplayPairsst as $pstkey => $pstvalue) {
551
-
552
-                         if (is_array($pstvalue)) {
553
-                             $contfield = "%" . $pstkey;
554
-			     $updatesentmsst = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_sent` SET `author_displayname` = ? WHERE `from` LIKE ?');
555
-			     $updatesentmsres = $updatesentmsst->execute([$pstvalue['author_displayname'], $contfield]);
556
-			     $updatesentmsres->closeCursor();
557
-                         }
558
-                    }
559
-                }
560
-
561
-                return null;
562
-        }
563
-
564
-}
565 0
deleted file mode 100644
... ...
@@ -1,532 +0,0 @@
1
-<?php
2
-/**
3
- * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
4
- *
5
- * @author Double Bastion LLC
6
- *
7
- * @license GNU AGPL version 3 or any later version
8
- *
9
- * This program is free software; you can redistribute it and/or
10
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
11
- * License as published by the Free Software Foundation; either
12
- * version 3 of the License, or any later version.
13
- *
14
- * This program is distributed in the hope that it will be useful,
15
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
18
- *
19
- * You should have received a copy of the GNU Affero General Public
20
- * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
- *
22
- */
23
-
24
-declare(strict_types=1);
25
-
26
-namespace OCA\SMSRelentless\Migration;
27
-
28
-use Closure;
29
-use OCP\DB\Types;
30
-use OCP\DB\ISchemaWrapper;
31
-use OCP\IDBConnection;
32
-use OCP\Migration\IOutput;
33
-use OCP\Migration\SimpleMigrationStep;
34
-
35
-
36
-class Version117Date20230509183517 extends SimpleMigrationStep {
37
-
38
-        /** @var IDBConnection */
39
-        private $connection;
40
-
41
-        /**
42
-         * @param IDBConnection $connection
43
-         */
44
-        public function __construct(IDBConnection $connection) {
45
-                $this->connection = $connection;
46
-        }
47
-
48
-	/**
49
-	 * @param IOutput $output
50
-	 * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
51
-	 * @param array $options
52
-	 * @return null|ISchemaWrapper
53
-	 */
54
-	public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper {
55
-		/** @var ISchemaWrapper $schema */
56
-		$schema = $schemaClosure();
57
-
58
-		if (!$schema->hasTable('sms_relent_settings')) {
59
-			$table = $schema->createTable('sms_relent_settings');
60
-			$table->addColumn('id', Types::BIGINT, [
61
-				'autoincrement' => true,
62
-				'notnull' => true,
63
-                                'length' => 11,
64
-                                'unsigned' => true,
65
-			]);
66
-			$table->addColumn('user_id', Types::STRING, [
67
-				'notnull' => true,
68
-				'length' => 128,
69
-			]);
70
-			$table->addColumn('telapi_key', Types::STRING, [
71
-				'notnull' => true,
72
-				'length' => 512,
73
-			]);
74
-			$table->addColumn('tel_pub_key', Types::STRING, [
75
-				'notnull' => true,
76
-				'length' => 512,
77
-			]);
78
-			$table->addColumn('telapi_url_rec', Types::STRING, [
79
-				'notnull' => true,
80
-				'length' => 512,
81
-			]);
82
-			$table->addColumn('telapi_url', Types::STRING, [
83
-				'notnull' => true,
84
-				'length' => 512,
85
-			]);
86
-			$table->addColumn('messaging_profile_id', Types::STRING, [
87
-				'notnull' => true,
88
-				'length' => 512,
89
-			]);
90
-			$table->addColumn('nexapi_key', Types::STRING, [
91
-				'notnull' => true,
92
-				'length' => 512,
93
-			]);
94
-			$table->addColumn('nexapi_secret', Types::STRING, [
95
-				'notnull' => true,
96
-				'length' => 512,
97
-			]);
98
-			$table->addColumn('nexapi_url_rec', Types::STRING, [
99
-				'notnull' => true,
100
-				'length' => 512,
101
-			]);
102
-			$table->addColumn('nexapi_url', Types::STRING, [
103
-				'notnull' => true,
104
-				'length' => 512,
105
-			]);
106
-			$table->addColumn('twilapi_key', Types::STRING, [
107
-				'notnull' => true,
108
-				'length' => 512,
109
-			]);
110
-			$table->addColumn('twilapi_secret', Types::STRING, [
111
-				'notnull' => true,
112
-				'length' => 512,
113
-			]);
114
-			$table->addColumn('twilapi_url_rec', Types::STRING, [
115
-				'notnull' => true,
116
-				'length' => 512,
117
-			]);
118
-			$table->addColumn('twilapi_url', Types::STRING, [
119
-				'notnull' => true,
120
-				'length' => 512,
121
-			]);
122
-			$table->addColumn('flowapi_key', Types::STRING, [
123
-				'notnull' => true,
124
-				'length' => 512,
125
-			]);
126
-			$table->addColumn('flowapi_secret', Types::STRING, [
127
-				'notnull' => true,
128
-				'length' => 512,
129
-			]);
130
-			$table->addColumn('flowapi_url_rec', Types::STRING, [
131
-				'notnull' => true,
132
-				'length' => 512,
133
-			]);
134
-			$table->addColumn('flowapi_url', Types::STRING, [
135
-				'notnull' => true,
136
-				'length' => 512,
137
-			]);
138
-			$table->addColumn('tel_sender_name', Types::STRING, [
139
-				'notnull' => false,
140
-				'length' => 48,
141
-				'default' => '',
142
-			]);
143
-			$table->addColumn('nex_sender_name', Types::STRING, [
144
-				'notnull' => false,
145
-				'length' => 48,
146
-				'default' => '',
147
-			]);
148
-			$table->addColumn('twil_sender_name', Types::STRING, [
149
-				'notnull' => false,
150
-				'length' => 48,
151
-				'default' => '',
152
-			]);
153
-			$table->addColumn('flow_sender_name', Types::STRING, [
154
-				'notnull' => false,
155
-				'length' => 48,
156
-				'default' => '',
157
-			]);
158
-			$table->addColumn('messagesperpage', Types::INTEGER, [
159
-				'notnull' => false,
160
-				'length' => 11,
161
-                                'unsigned' => true,
162
-			]);
163
-			$table->addColumn('get_notify', Types::SMALLINT, [
164
-				'notnull' => false,
165
-				'length' => 1,
166
-			]);
167
-			$table->addColumn('notification_email', Types::STRING, [
168
-				'notnull' => false,
169
-				'length' => 512,
170
-				'default' => '',
171
-			]);
172
-			$table->addColumn('getsmsinemail', Types::SMALLINT, [
173
-				'notnull' => false,
174
-				'length' => 1,
175
-			]);
176
-			$table->addColumn('show_all_messages', Types::SMALLINT, [
177
-				'notnull' => false,
178
-				'length' => 1,
179
-			]);
180
-			$table->addColumn('show_display_names', Types::SMALLINT, [
181
-				'notnull' => false,
182
-				'length' => 1,
183
-			]);
184
-                        $table->setPrimaryKey(['id']);
185
-                        $table->addUniqueIndex(['id']);
186
-
187
-		}
188
-
189
-
190
-		if (!$schema->hasTable('sms_relent_received')) {
191
-			$table = $schema->createTable('sms_relent_received');
192
-			$table->addColumn('id', Types::BIGINT, [
193
-				'autoincrement' => true,
194
-				'notnull' => true,
195
-                                'length' => 11,
196
-                                'unsigned' => true,
197
-			]);
198
-			$table->addColumn('user_id', Types::STRING, [
199
-				'notnull' => true,
200
-				'length' => 64,
201
-			]);
202
-			$table->addColumn('message_id', Types::STRING, [
203
-				'notnull' => true,
204
-				'length' => 512,
205
-			]);
206
-			$table->addColumn('date', Types::DATETIME, [
207
-				'notnull' => true,
208
-			]);
209
-			$table->addColumn('from', Types::STRING, [
210
-				'notnull' => true,
211
-				'length' => 128,
212
-			]);
213
-			$table->addColumn('to', Types::STRING, [
214
-				'notnull' => true,
215
-				'length' => 128,
216
-			]);
217
-			$table->addColumn('message', Types::TEXT, [
218
-				'notnull' => false,
219
-				'default' => '',
220
-			]);
221
-			$table->addColumn('author_displayname', Types::STRING, [
222
-				'notnull' => true,
223
-				'length' => 255,
224
-			]);
225
-			$table->addColumn('internal_sender', Types::SMALLINT, [
226
-				'notnull' => false,
227
-				'length' => 1,
228
-			]);
229
-                        $table->setPrimaryKey(['id']);
230
-                        $table->addUniqueIndex(['id']);
231
-
232
-		}
233
-
234
-
235
-		if (!$schema->hasTable('sms_relent_sent')) {
236
-			$table = $schema->createTable('sms_relent_sent');
237
-			$table->addColumn('id', Types::BIGINT, [
238
-				'autoincrement' => true,
239
-				'notnull' => true,
240
-                                'length' => 11,
241
-                                'unsigned' => true,
242
-			]);
243
-			$table->addColumn('user_id', Types::STRING, [
244
-				'notnull' => true,
245
-				'length' => 64,
246
-			]);
247
-			$table->addColumn('message_id', Types::STRING, [
248
-				'notnull' => true,
249
-				'length' => 512,
250
-			]);
251
-			$table->addColumn('date', Types::DATETIME, [
252
-				'notnull' => true,
253
-			]);
254
-			$table->addColumn('from', Types::STRING, [
255
-				'notnull' => true,
256
-				'length' => 128,
257
-			]);
258
-			$table->addColumn('to', Types::STRING, [
259
-				'notnull' => true,
260
-				'length' => 128,
261
-			]);
262
-			$table->addColumn('network ', Types::STRING, [
263
-				'notnull' => false,
264
-				'length' => 64,
265
-				'default' => '',
266
-			]);
267
-			$table->addColumn('price', Types::STRING, [
268
-				'notnull' => false,
269
-				'length' => 64,
270
-				'default' => '',
271
-			]);
272
-			$table->addColumn('status', Types::STRING, [
273
-				'notnull' => false,
274
-				'length' => 512,
275
-				'default' => '',
276
-			]);
277
-			$table->addColumn('deliveryreceipt', Types::STRING, [
278
-				'notnull' => false,
279
-				'length' => 64,
280
-				'default' => '',
281
-			]);
282
-			$table->addColumn('message', Types::TEXT, [
283
-				'notnull' => false,
284
-                                'default' => '',
285
-			]);
286
-			$table->addColumn('author_displayname', Types::STRING, [
287
-				'notnull' => true,
288
-				'length' => 255,
289
-			]);
290
-                        $table->setPrimaryKey(['id']);
291
-                        $table->addUniqueIndex(['id']);
292
-
293
-		}
294
-
295
-
296
-		if (!$schema->hasTable('sms_relent_autorply')) {
297
-			$table = $schema->createTable('sms_relent_autorply');
298
-			$table->addColumn('id', Types::BIGINT, [
299
-				'autoincrement' => true,
300
-				'notnull' => true,
301
-                                'length' => 11,
302
-                                'unsigned' => true,
303
-			]);
304
-			$table->addColumn('user_id', Types::STRING, [
305
-				'notnull' => true,
306
-				'length' => 128,
307
-			]);
308
-			$table->addColumn('saved_by_dsplname', Types::STRING, [
309
-				'notnull' => true,
310
-				'length' => 255,
311
-			]);
312
-			$table->addColumn('phone_number', Types::STRING, [
313
-				'notnull' => true,
314
-				'length' => 128,
315
-			]);
316
-			$table->addColumn('days_of_week', Types::STRING, [
317
-				'notnull' => false,
318
-				'length' => 64,
319
-                                'default' => '',
320
-			]);
321
-			$table->addColumn('daily_start', Types::STRING, [
322
-				'notnull' => false,
323
-				'length' => 8,
324
-                                'default' => '',
325
-			]);
326
-			$table->addColumn('daily_end', Types::STRING, [
327
-				'notnull' => false,
328
-				'length' => 8,
329
-                                'default' => '',
330
-			]);
331
-			$table->addColumn('vacation_start', Types::DATETIME, [
332
-				'notnull' => false,
333
-			]);
334
-			$table->addColumn('vacation_end', Types::DATETIME, [
335
-				'notnull' => false,
336
-			]);
337
-			$table->addColumn('message_text', Types::TEXT, [
338
-				'notnull' => false,
339
-                                'default' => '',
340
-			]);
341
-                        $table->setPrimaryKey(['id']);
342
-                        $table->addUniqueIndex(['id']);
343
-
344
-		}
345
-
346
-
347
-		if (!$schema->hasTable('sms_relent_restrict')) {
348
-			$table = $schema->createTable('sms_relent_restrict');
349
-			$table->addColumn('id', Types::BIGINT, [
350
-				'autoincrement' => true,
351
-				'notnull' => true,
352
-                                'length' => 11,
353
-                                'unsigned' => true,
354
-			]);
355
-			$table->addColumn('user_id', Types::STRING, [
356
-				'notnull' => true,
357
-				'length' => 128,
358
-			]);
359
-			$table->addColumn('saved_by_dsplname', Types::STRING, [
360
-				'notnull' => true,
361
-				'length' => 255,
362
-			]);
363
-			$table->addColumn('phone_number', Types::STRING, [
364
-				'notnull' => true,
365
-				'length' => 128,
366
-			]);
367
-			$table->addColumn('groups', Types::STRING, [
368
-				'notnull' => true,
369
-				'length' => 2048,
370
-			]);
371
-			$table->addColumn('users', Types::STRING, [
372
-				'notnull' => true,
373
-				'length' => 2048,
374
-			]);
375
-                        $table->setPrimaryKey(['id']);
376
-                        $table->addUniqueIndex(['id']);
377
-
378
-		}
379
-
380
-		return $schema;
381
-	}
382
-
383
-        public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper {
384
-
385
-                // Enter the Nextcloud display name in the 'author_displayname' column of the 'sms_relent_received' table, for messages that were received before
386
-                $getrecfromnb = $this->connection->prepare('SELECT `from` FROM `*PREFIX*sms_relent_received`');
387
-	        $getrecfromnbres = $getrecfromnb->execute();
388
-
389
-                $recdatanmbrs = [];
390
-                while ($rowfetched = $getrecfromnbres->fetch()) {
391
-                       $recdatanmbrs[] = $rowfetched['from'];
392
-                }
393
-                $getrecfromnbres->closeCursor();
394
-
395
-                if ($recdatanmbrs) {
396
-
397
-                    $recnmbrs = array_values(array_unique($recdatanmbrs));
398
-
399
-                    $phoneDisplayPairs = [];
400
-                    foreach ($recnmbrs as $rckey => $rcvalue) {
401
-
402
-                         $rcvalueprc = '%' . $rcvalue;
403
-                         $getacdata = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ? AND `value` LIKE ?');
404
-	                 $getacdatares = $getacdata->execute(['phone', $rcvalueprc]);
405
-
406
-		         $acdatausers = [];
407
-		         while ($acusrfetched = $getacdatares->fetch()) {
408
-		                $acdatausers[] = $acusrfetched['uid'];
409
-		         }
410
-		         $getacdatares->closeCursor();
411
-
412
-
413
-                         if ($acdatausers) {
414
-
415
-		             $acdatausrdn = [];
416
-                             foreach ($acdatausers as $dnkey => $dnvalue) {
417
-
418
-		                  $getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?');
419
-			          $getacdatadnres = $getacdatadn->execute([$dnvalue, 'displayname']);
420
-
421
-				  while ($acusrdnfetched = $getacdatadnres->fetch()) {
422
-				         $acdatausrdn[] = $acusrdnfetched['value'];
423
-				  }
424
-				  $getacdatadnres->closeCursor();
425
-                             }
426
-
427
-                             if ($acdatausrdn) {
428
-
429
-                                 if (count($acdatausrdn) == 1) {
430
-
431
-                                     $phoneDisplayPairs[$rcvalue] = ['author_displayname' => $acdatausrdn[0], 'internal_sender' => 1];
432
-
433
-                                 } elseif (count($acdatausrdn) > 1) {
434
-
435
-                                     $phoneDisplayPairs[$rcvalue] = ['author_displayname' => implode("/", $acdatausrdn), 'internal_sender' => 1];
436
-                                 }
437
-
438
-                             } else { $phoneDisplayPairs[$rcvalue] = ['author_displayname' => '', 'internal_sender' => 0]; }
439
-
440
-                         } else { $phoneDisplayPairs[$rcvalue] = ['author_displayname' => '', 'internal_sender' => 0]; }
441
-                    }
442
-
443
-                    foreach ($phoneDisplayPairs as $pdpkey => $pdpvalue) {
444
-
445
-                         if (is_array($pdpvalue)) {
446
-			     $updaterecms = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_received` SET `author_displayname` = ?, `internal_sender` = ? WHERE `from` = ?');
447
-			     $updaterecmsres = $updaterecms->execute([$pdpvalue['author_displayname'], $pdpvalue['internal_sender'], $pdpkey]);
448
-			     $updaterecmsres->closeCursor();
449
-                         }
450
-                    }
451
-                }
452
-
453
-
454
-                // Enter the Nextcloud display name in the 'author_displayname' column of the 'sms_relent_sent' table, for messages that were sent before
455
-                $getsentfromnb = $this->connection->prepare('SELECT `from` FROM `*PREFIX*sms_relent_sent`');
456
-	        $getsentfromnbres = $getsentfromnb->execute();
457
-
458
-                $sentdatanmbrs = [];
459
-                while ($rowfetchedst = $getsentfromnbres->fetch()) {
460
-
461
-                       $sentdatanmbrspre = $rowfetchedst['from'];
462
-                       $sentdatanmbrsarr = explode("+", $sentdatanmbrspre);
463
-                       if (count($sentdatanmbrsarr) > 1) {
464
-                           $sentdatanmbrs[] = "+" . $sentdatanmbrsarr[1];
465
-                       } else {
466
-                           $sentdatanmbrs[] = $sentdatanmbrsarr[0];
467
-                       }
468
-                }
469
-                $getsentfromnbres->closeCursor();
470
-
471
-                if ($sentdatanmbrs) {
472
-
473
-                    $sentnmbrs = array_values(array_unique($sentdatanmbrs));
474
-
475
-                    $phoneDisplayPairsst = [];
476
-                    foreach ($sentnmbrs as $stkey => $stvalue) {
477
-
478
-                         $stvalueprc = '%' . $stvalue;
479
-                         $getacdatast = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ? AND `value` LIKE ?');
480
-	                 $getacdatastres = $getacdatast->execute(['phone', $stvalueprc]);
481
-
482
-		         $acdatausersst = [];
483
-		         while ($acusrstfetched = $getacdatastres->fetch()) {
484
-		                $acdatausersst[] = $acusrstfetched['uid'];
485
-		         }
486
-		         $getacdatastres->closeCursor();
487
-
488
-                         if ($acdatausersst) {
489
-
490
-		             $acdatausrdnst = [];
491
-                             foreach ($acdatausersst as $dnstkey => $dnstvalue) {
492
-
493
-		                  $getacdatadnst = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?');
494
-			          $getacdatadnstres = $getacdatadnst->execute([$dnstvalue, 'displayname']);
495
-
496
-				  while ($acusrdnstfetched = $getacdatadnstres->fetch()) {
497
-				         $acdatausrdnst[] = $acusrdnstfetched['value'];
498
-				  }
499
-				  $getacdatadnstres->closeCursor();
500
-                             }
501
-
502
-                             if ($acdatausrdnst) {
503
-
504
-                                 if (count($acdatausrdnst) == 1) {
505
-
506
-                                     $phoneDisplayPairsst[$stvalue] = ['author_displayname' => $acdatausrdnst[0]];
507
-
508
-                                 } elseif (count($acdatausrdnst) > 1) {
509
-
510
-                                     $phoneDisplayPairsst[$stvalue] = ['author_displayname' => implode("/", $acdatausrdnst)];
511
-                                 }
512
-
513
-                             } else { $phoneDisplayPairsst[$stvalue] = ['author_displayname' => '']; }
514
-
515
-                         } else { $phoneDisplayPairsst[$stvalue] = ['author_displayname' => '']; }
516
-                    }
517
-
518
-                    foreach ($phoneDisplayPairsst as $pstkey => $pstvalue) {
519
-
520
-                         if (is_array($pstvalue)) {
521
-                             $contfield = "%" . $pstkey;
522
-			     $updatesentmsst = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_sent` SET `author_displayname` = ? WHERE `from` LIKE ?');
523
-			     $updatesentmsres = $updatesentmsst->execute([$pstvalue['author_displayname'], $contfield]);
524
-			     $updatesentmsres->closeCursor();
525
-                         }
526
-                    }
527
-                }
528
-
529
-                return null;
530
-        }
531
-
532
-}
533 0
deleted file mode 100644
... ...
@@ -1,533 +0,0 @@
1
-<?php
2
-/**
3
- * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
4
- *
5
- * @author Double Bastion LLC
6
- *
7
- * @license GNU AGPL version 3 or any later version
8
- *
9
- * This program is free software; you can redistribute it and/or
10
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
11
- * License as published by the Free Software Foundation; either
12
- * version 3 of the License, or any later version.
13
- *
14
- * This program is distributed in the hope that it will be useful,
15
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
18
- *
19
- * You should have received a copy of the GNU Affero General Public
20
- * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
- *
22
- */
23
-
24
-declare(strict_types=1);
25
-
26
-namespace OCA\SMSRelentless\Migration;
27
-
28
-use Closure;
29
-use OCP\DB\Types;
30
-use OCP\DB\ISchemaWrapper;
31
-use OCP\IDBConnection;
32
-use OCP\Migration\IOutput;
33
-use OCP\Migration\SimpleMigrationStep;
34
-
35
-
36
-class Version118Date20230509194216 extends SimpleMigrationStep {
37
-
38
-        /** @var IDBConnection */
39
-        private $connection;
40
-
41
-        /**
42
-         * @param IDBConnection $connection
43
-         */
44
-        public function __construct(IDBConnection $connection) {
45
-                $this->connection = $connection;
46
-        }
47
-
48
-	/**
49
-	 * @param IOutput $output
50
-	 * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
51
-	 * @param array $options
52
-	 * @return null|ISchemaWrapper
53
-	 */
54
-	public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper {
55
-		/** @var ISchemaWrapper $schema */
56
-		$schema = $schemaClosure();
57
-
58
-		if (!$schema->hasTable('sms_relent_settings')) {
59
-			$table = $schema->createTable('sms_relent_settings');
60
-			$table->addColumn('id', Types::BIGINT, [
61
-				'autoincrement' => true,
62
-				'notnull' => true,
63
-                                'length' => 11,
64
-                                'unsigned' => true,
65
-			]);
66
-			$table->addColumn('user_id', Types::STRING, [
67
-				'notnull' => true,
68
-				'length' => 128,
69
-			]);
70
-			$table->addColumn('telapi_key', Types::STRING, [
71
-				'notnull' => true,
72
-				'length' => 512,
73
-			]);
74
-			$table->addColumn('tel_pub_key', Types::STRING, [
75
-				'notnull' => true,
76
-				'length' => 512,
77
-			]);
78
-			$table->addColumn('telapi_url_rec', Types::STRING, [
79
-				'notnull' => true,
80
-				'length' => 512,
81
-			]);
82
-			$table->addColumn('telapi_url', Types::STRING, [
83
-				'notnull' => true,
84
-				'length' => 512,
85
-			]);
86
-			$table->addColumn('messaging_profile_id', Types::STRING, [
87
-				'notnull' => true,
88
-				'length' => 512,
89
-			]);
90
-			$table->addColumn('nexapi_key', Types::STRING, [
91
-				'notnull' => true,
92
-				'length' => 512,
93
-			]);
94
-			$table->addColumn('nexapi_secret', Types::STRING, [
95
-				'notnull' => true,
96
-				'length' => 512,
97
-			]);
98
-			$table->addColumn('nexapi_url_rec', Types::STRING, [
99
-				'notnull' => true,
100
-				'length' => 512,
101
-			]);
102
-			$table->addColumn('nexapi_url', Types::STRING, [
103
-				'notnull' => true,
104
-				'length' => 512,
105
-			]);
106
-			$table->addColumn('twilapi_key', Types::STRING, [
107
-				'notnull' => true,
108
-				'length' => 512,
109
-			]);
110
-			$table->addColumn('twilapi_secret', Types::STRING, [
111
-				'notnull' => true,
112
-				'length' => 512,
113
-			]);
114
-			$table->addColumn('twilapi_url_rec', Types::STRING, [
115
-				'notnull' => true,
116
-				'length' => 512,
117
-			]);
118
-			$table->addColumn('twilapi_url', Types::STRING, [
119
-				'notnull' => true,
120
-				'length' => 512,
121
-			]);
122
-			$table->addColumn('flowapi_key', Types::STRING, [
123
-				'notnull' => true,
124
-				'length' => 512,
125
-			]);
126
-			$table->addColumn('flowapi_secret', Types::STRING, [
127
-				'notnull' => true,
128
-				'length' => 512,
129
-			]);
130
-			$table->addColumn('flowapi_url_rec', Types::STRING, [
131
-				'notnull' => true,
132
-				'length' => 512,
133
-			]);
134
-			$table->addColumn('flowapi_url', Types::STRING, [
135
-				'notnull' => true,
136
-				'length' => 512,
137
-			]);
138
-			$table->addColumn('tel_sender_name', Types::STRING, [
139
-				'notnull' => false,
140
-				'length' => 48,
141
-				'default' => '',
142
-			]);
143
-			$table->addColumn('nex_sender_name', Types::STRING, [
144
-				'notnull' => false,
145
-				'length' => 48,
146
-				'default' => '',
147
-			]);
148
-			$table->addColumn('twil_sender_name', Types::STRING, [
149
-				'notnull' => false,
150
-				'length' => 48,
151
-				'default' => '',
152
-			]);
153
-			$table->addColumn('flow_sender_name', Types::STRING, [
154
-				'notnull' => false,
155
-				'length' => 48,
156
-				'default' => '',
157
-			]);
158
-			$table->addColumn('messagesperpage', Types::INTEGER, [
159
-				'notnull' => false,
160
-				'length' => 11,
161
-                                'unsigned' => true,
162
-			]);
163
-			$table->addColumn('get_notify', Types::SMALLINT, [
164
-				'notnull' => false,
165
-				'length' => 1,
166
-			]);
167
-			$table->addColumn('notification_email', Types::STRING, [
168
-				'notnull' => false,
169
-				'length' => 512,
170
-				'default' => '',
171
-			]);
172
-			$table->addColumn('getsmsinemail', Types::SMALLINT, [
173
-				'notnull' => false,
174
-				'length' => 1,
175
-			]);
176
-			$table->addColumn('show_all_messages', Types::SMALLINT, [
177
-				'notnull' => false,
178
-				'length' => 1,
179
-			]);
180
-			$table->addColumn('show_display_names', Types::SMALLINT, [
181
-				'notnull' => false,
182
-				'length' => 1,
183
-			]);
184
-                        $table->setPrimaryKey(['id']);
185
-                        $table->addUniqueIndex(['id']);
186
-
187
-		}
188
-
189
-
190
-		if (!$schema->hasTable('sms_relent_received')) {
191
-			$table = $schema->createTable('sms_relent_received');
192
-			$table->addColumn('id', Types::BIGINT, [
193
-				'autoincrement' => true,
194
-				'notnull' => true,
195
-                                'length' => 11,
196
-                                'unsigned' => true,
197
-			]);
198
-			$table->addColumn('user_id', Types::STRING, [
199
-				'notnull' => true,
200
-				'length' => 64,
201
-			]);
202
-			$table->addColumn('message_id', Types::STRING, [
203
-				'notnull' => true,
204
-				'length' => 512,
205
-			]);
206
-			$table->addColumn('date', Types::DATETIME, [
207
-				'notnull' => true,
208
-			]);
209
-			$table->addColumn('from', Types::STRING, [
210
-				'notnull' => true,
211
-				'length' => 128,
212
-			]);
213
-			$table->addColumn('to', Types::STRING, [
214
-				'notnull' => true,
215
-				'length' => 128,
216
-			]);
217
-			$table->addColumn('message', Types::TEXT, [
218
-				'notnull' => false,
219
-				'default' => '',
220
-			]);
221
-			$table->addColumn('author_displayname', Types::STRING, [
222
-				'notnull' => true,
223
-				'length' => 255,
224
-			]);
225
-			$table->addColumn('internal_sender', Types::SMALLINT, [
226
-				'notnull' => false,
227
-				'length' => 1,
228
-			]);
229
-                        $table->setPrimaryKey(['id']);
230
-                        $table->addUniqueIndex(['id']);
231
-
232
-		}
233
-
234
-
235
-		if (!$schema->hasTable('sms_relent_sent')) {
236
-			$table = $schema->createTable('sms_relent_sent');
237
-			$table->addColumn('id', Types::BIGINT, [
238
-				'autoincrement' => true,
239
-				'notnull' => true,
240
-                                'length' => 11,
241
-                                'unsigned' => true,
242
-			]);
243
-			$table->addColumn('user_id', Types::STRING, [
244
-				'notnull' => true,
245
-				'length' => 64,
246
-			]);
247
-			$table->addColumn('message_id', Types::STRING, [
248
-				'notnull' => true,
249
-				'length' => 512,
250
-			]);
251
-			$table->addColumn('date', Types::DATETIME, [
252
-				'notnull' => true,
253
-			]);
254
-			$table->addColumn('from', Types::STRING, [
255
-				'notnull' => true,
256
-				'length' => 128,
257
-			]);
258
-			$table->addColumn('to', Types::STRING, [
259
-				'notnull' => true,
260
-				'length' => 128,
261
-			]);
262
-			$table->addColumn('network ', Types::STRING, [
263
-				'notnull' => false,
264
-				'length' => 64,
265
-				'default' => '',
266
-			]);
267
-			$table->addColumn('price', Types::STRING, [
268
-				'notnull' => false,
269
-				'length' => 64,
270
-				'default' => '',
271
-			]);
272
-			$table->addColumn('status', Types::STRING, [
273
-				'notnull' => false,
274
-				'length' => 512,
275
-				'default' => '',
276
-			]);
277
-			$table->addColumn('deliveryreceipt', Types::STRING, [
278
-				'notnull' => false,
279
-				'length' => 64,
280
-				'default' => '',
281
-			]);
282
-			$table->addColumn('message', Types::TEXT, [
283
-				'notnull' => false,
284
-                                'default' => '',
285
-			]);
286
-			$table->addColumn('author_displayname', Types::STRING, [
287
-				'notnull' => true,
288
-				'length' => 255,
289
-			]);
290
-                        $table->setPrimaryKey(['id']);
291
-                        $table->addUniqueIndex(['id']);
292
-
293
-		}
294
-
295
-
296
-		if (!$schema->hasTable('sms_relent_autorply')) {
297
-			$table = $schema->createTable('sms_relent_autorply');
298
-			$table->addColumn('id', Types::BIGINT, [
299
-				'autoincrement' => true,
300
-				'notnull' => true,
301
-                                'length' => 11,
302
-                                'unsigned' => true,
303
-			]);
304
-			$table->addColumn('user_id', Types::STRING, [
305
-				'notnull' => true,
306
-				'length' => 128,
307
-			]);
308
-			$table->addColumn('saved_by_dsplname', Types::STRING, [
309
-				'notnull' => true,
310
-				'length' => 255,
311
-			]);
312
-			$table->addColumn('phone_number', Types::STRING, [
313
-				'notnull' => true,
314
-				'length' => 128,
315
-			]);
316
-			$table->addColumn('days_of_week', Types::STRING, [
317
-				'notnull' => false,
318
-				'length' => 64,
319
-                                'default' => '',
320
-			]);
321
-			$table->addColumn('daily_start', Types::STRING, [
322
-				'notnull' => false,
323
-				'length' => 8,
324
-                                'default' => '',
325
-			]);
326
-			$table->addColumn('daily_end', Types::STRING, [
327
-				'notnull' => false,
328
-				'length' => 8,
329
-                                'default' => '',
330
-			]);
331
-			$table->addColumn('vacation_start', Types::DATETIME, [
332
-				'notnull' => false,
333
-			]);
334
-			$table->addColumn('vacation_end', Types::DATETIME, [
335
-				'notnull' => false,
336
-			]);
337
-			$table->addColumn('message_text', Types::TEXT, [
338
-				'notnull' => false,
339
-                                'default' => '',
340
-			]);
341
-                        $table->setPrimaryKey(['id']);
342
-                        $table->addUniqueIndex(['id']);
343
-
344
-		}
345
-
346
-
347
-		if (!$schema->hasTable('sms_relent_restrict')) {
348
-			$table = $schema->createTable('sms_relent_restrict');
349
-			$table->addColumn('id', Types::BIGINT, [
350
-				'autoincrement' => true,
351
-				'notnull' => true,
352
-                                'length' => 11,
353
-                                'unsigned' => true,
354
-			]);
355
-			$table->addColumn('user_id', Types::STRING, [
356
-				'notnull' => true,
357
-				'length' => 128,
358
-			]);
359
-			$table->addColumn('saved_by_dsplname', Types::STRING, [
360
-				'notnull' => true,
361
-				'length' => 255,
362
-			]);
363
-			$table->addColumn('phone_number', Types::STRING, [
364
-				'notnull' => true,
365
-				'length' => 128,
366
-			]);
367
-			$table->addColumn('groups', Types::STRING, [
368
-				'notnull' => true,
369
-				'length' => 2048,
370
-			]);
371
-			$table->addColumn('users', Types::STRING, [
372
-				'notnull' => true,
373
-				'length' => 2048,
374
-			]);
375
-                        $table->setPrimaryKey(['id']);
376
-                        $table->addUniqueIndex(['id']);
377
-
378
-		}
379
-
380
-		return $schema;
381
-	}
382
-
383
-        public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper {
384
-
385
-                // Enter the Nextcloud display name in the 'author_displayname' column of the 'sms_relent_received' table, for messages that were received before
386
-                $getrecfromnb = $this->connection->prepare('SELECT `from` FROM `*PREFIX*sms_relent_received`');
387
-	        $getrecfromnbres = $getrecfromnb->execute();
388
-
389
-                $recdatanmbrs = [];
390
-                while ($rowfetched = $getrecfromnbres->fetch()) {
391
-                       $recdatanmbrs[] = $rowfetched['from'];
392
-                }
393
-                $getrecfromnbres->closeCursor();
394
-
395
-                if ($recdatanmbrs) {
396
-
397
-                    $recnmbrs = array_values(array_unique($recdatanmbrs));
398
-
399
-                    $phoneDisplayPairs = [];
400
-                    foreach ($recnmbrs as $rckey => $rcvalue) {
401
-
402
-                         $rcvalueprc = '%' . $rcvalue;
403
-                         $getacdata = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ? AND `value` LIKE ?');
404
-	                 $getacdatares = $getacdata->execute(['phone', $rcvalueprc]);
405
-
406
-		         $acdatausers = [];
407
-		         while ($acusrfetched = $getacdatares->fetch()) {
408
-		                $acdatausers[] = $acusrfetched['uid'];
409
-		         }
410
-		         $getacdatares->closeCursor();
411
-
412
-
413
-                         if ($acdatausers) {
414
-
415
-		             $acdatausrdn = [];
416
-                             foreach ($acdatausers as $dnkey => $dnvalue) {
417
-
418
-		                  $getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?');
419
-			          $getacdatadnres = $getacdatadn->execute([$dnvalue, 'displayname']);
420
-
421
-				  while ($acusrdnfetched = $getacdatadnres->fetch()) {
422
-				         $acdatausrdn[] = $acusrdnfetched['value'];
423
-				  }
424
-				  $getacdatadnres->closeCursor();
425
-                             }
426
-
427
-                             if ($acdatausrdn) {
428
-
429
-                                 if (count($acdatausrdn) == 1) {
430
-
431
-                                     $phoneDisplayPairs[$rcvalue] = ['author_displayname' => $acdatausrdn[0], 'internal_sender' => 1];
432
-
433
-                                 } elseif (count($acdatausrdn) > 1) {
434
-
435
-                                     $phoneDisplayPairs[$rcvalue] = ['author_displayname' => implode("/", $acdatausrdn), 'internal_sender' => 1];
436
-                                 }
437
-
438
-                             } else { $phoneDisplayPairs[$rcvalue] = ['author_displayname' => '', 'internal_sender' => 0]; }
439
-
440
-                         } else { $phoneDisplayPairs[$rcvalue] = ['author_displayname' => '', 'internal_sender' => 0]; }
441
-                    }
442
-
443
-                    foreach ($phoneDisplayPairs as $pdpkey => $pdpvalue) {
444
-
445
-                         if (is_array($pdpvalue)) {
446
-                             $pdpkeyprc = '%' . $pdpkey;
447
-			     $updaterecms = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_received` SET `author_displayname` = ?, `internal_sender` = ? WHERE `from` LIKE ?');
448
-			     $updaterecmsres = $updaterecms->execute([$pdpvalue['author_displayname'], $pdpvalue['internal_sender'], $pdpkeyprc]);
449
-			     $updaterecmsres->closeCursor();
450
-                         }
451
-                    }
452
-                }
453
-
454
-
455
-                // Enter the Nextcloud display name in the 'author_displayname' column of the 'sms_relent_sent' table, for messages that were sent before
456
-                $getsentfromnb = $this->connection->prepare('SELECT `from` FROM `*PREFIX*sms_relent_sent`');
457
-	        $getsentfromnbres = $getsentfromnb->execute();
458
-
459
-                $sentdatanmbrs = [];
460
-                while ($rowfetchedst = $getsentfromnbres->fetch()) {
461
-
462
-                       $sentdatanmbrspre = $rowfetchedst['from'];
463
-                       $sentdatanmbrsarr = explode("+", $sentdatanmbrspre);
464
-                       if (count($sentdatanmbrsarr) > 1) {
465
-                           $sentdatanmbrs[] = "+" . $sentdatanmbrsarr[1];
466
-                       } else {
467
-                           $sentdatanmbrs[] = $sentdatanmbrsarr[0];
468
-                       }
469
-                }
470
-                $getsentfromnbres->closeCursor();
471
-
472
-                if ($sentdatanmbrs) {
473
-
474
-                    $sentnmbrs = array_values(array_unique($sentdatanmbrs));
475
-
476
-                    $phoneDisplayPairsst = [];
477
-                    foreach ($sentnmbrs as $stkey => $stvalue) {
478
-
479
-                         $stvalueprc = '%' . $stvalue;
480
-                         $getacdatast = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ? AND `value` LIKE ?');
481
-	                 $getacdatastres = $getacdatast->execute(['phone', $stvalueprc]);
482
-
483
-		         $acdatausersst = [];
484
-		         while ($acusrstfetched = $getacdatastres->fetch()) {
485
-		                $acdatausersst[] = $acusrstfetched['uid'];
486
-		         }
487
-		         $getacdatastres->closeCursor();
488
-
489
-                         if ($acdatausersst) {
490
-
491
-		             $acdatausrdnst = [];
492
-                             foreach ($acdatausersst as $dnstkey => $dnstvalue) {
493
-
494
-		                  $getacdatadnst = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?');
495
-			          $getacdatadnstres = $getacdatadnst->execute([$dnstvalue, 'displayname']);
496
-
497
-				  while ($acusrdnstfetched = $getacdatadnstres->fetch()) {
498
-				         $acdatausrdnst[] = $acusrdnstfetched['value'];
499
-				  }
500
-				  $getacdatadnstres->closeCursor();
501
-                             }
502
-
503
-                             if ($acdatausrdnst) {
504
-
505
-                                 if (count($acdatausrdnst) == 1) {
506
-
507
-                                     $phoneDisplayPairsst[$stvalue] = ['author_displayname' => $acdatausrdnst[0]];
508
-
509
-                                 } elseif (count($acdatausrdnst) > 1) {
510
-
511
-                                     $phoneDisplayPairsst[$stvalue] = ['author_displayname' => implode("/", $acdatausrdnst)];
512
-                                 }
513
-
514
-                             } else { $phoneDisplayPairsst[$stvalue] = ['author_displayname' => '']; }
515
-
516
-                         } else { $phoneDisplayPairsst[$stvalue] = ['author_displayname' => '']; }
517
-                    }
518
-
519
-                    foreach ($phoneDisplayPairsst as $pstkey => $pstvalue) {
520
-
521
-                         if (is_array($pstvalue)) {
522
-                             $contfield = "%" . $pstkey;
523
-			     $updatesentmsst = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_sent` SET `author_displayname` = ? WHERE `from` LIKE ?');
524
-			     $updatesentmsres = $updatesentmsst->execute([$pstvalue['author_displayname'], $contfield]);
525
-			     $updatesentmsres->closeCursor();
526
-                         }
527
-                    }
528
-                }
529
-
530
-                return null;
531
-        }
532
-
533
-}
534 0
deleted file mode 100644
... ...
@@ -1,1734 +0,0 @@
1
-<?php
2
-/**
3
- * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
4
- *
5
- * @author Double Bastion LLC
6
- *
7
- * @license GNU AGPL version 3 or any later version
8
- *
9
- * This program is free software; you can redistribute it and/or
10
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
11
- * License as published by the Free Software Foundation; either
12
- * version 3 of the License, or any later version.
13
- *
14
- * This program is distributed in the hope that it will be useful,
15
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
18
- *
19
- * You should have received a copy of the GNU Affero General Public
20
- * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
- *
22
- */
23
-
24
-declare(strict_types=1);
25
-
26
-namespace OCA\SMSRelentless\Service;
27
-
28
-use OCP\IDBConnection;
29
-use OCP\Security\ICrypto;
30
-use OCP\AppFramework\ApiController;
31
-use OCP\AppFramework\Controller;
32
-use OCP\IRequest;
33
-use OCP\IGroupManager;
34
-
35
-
36
-class SmsrelentlessService {
37
-
38
-     private $connection;
39
-     private $crypto;
40
-     private $groupManager;
41
-
42
-     public function __construct(IDBConnection $connection, ICrypto $crypto, IGroupManager $groupManager) {
43
-
44
-                $this->connection = $connection;
45
-                $this->crypto = $crypto;
46
-                $this->groupManager = $groupManager;
47
-     }
48
-
49
-
50
-     /**
51
-      * @NoAdminRequired
52
-      *
53
-      */
54
-     public function insertrecsms($userId, $recmessagearr) {
55
-
56
-            $authorDisplayNm = '';
57
-            $internalSender = 0;
58
-
59
-            // Search for the sender's Display Name
60
-            $getacdata = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ? AND `value` = ?');
61
-            $getacdatares = $getacdata->execute(['phone', $recmessagearr[2]]);
62
-
63
-            $acdatausers = [];
64
-            while ($acusrfetched = $getacdatares->fetch()) {
65
-                   $acdatausers[] = $acusrfetched['uid'];
66
-            }
67
-            $getacdatares->closeCursor();
68
-
69
-            if ($acdatausers) {
70
-
71
-                $acdatausrdn = [];
72
-                foreach ($acdatausers as $dnkey => $dnvalue) {
73
-
74
-                     $getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?');
75
-	             $getacdatadnres = $getacdatadn->execute([$dnvalue, 'displayname']);
76
-
77
-		     while ($acusrdnfetched = $getacdatadnres->fetch()) {
78
-		            $acdatausrdn[] = $acusrdnfetched['value'];
79
-		     }
80
-		     $getacdatadnres->closeCursor();
81
-                }
82
-
83
-                if ($acdatausrdn) {
84
-
85
-                    if (count($acdatausrdn) == 1) {
86
-
87
-                        $authorDisplayNm = $acdatausrdn[0];
88
-                        $internalSender = 1;
89
-
90
-                    } elseif (count($acdatausrdn) > 1) {
91
-
92
-                        $authorDisplayNm = implode("/", $acdatausrdn);
93
-                        $internalSender = 1;
94
-                    }
95
-
96
-                } else { $authorDisplayNm = ''; $internalSender = 0; }
97
-
98
-            } else {
99
-
100
-                  // Search for the associated Display Name in the previous messages coming from the same number
101
-                  $getdspnm = $this->connection->prepare('SELECT `from`, `author_displayname` FROM `*PREFIX*sms_relent_received` WHERE `from` = ? LIMIT 1');
102
-	          $getdspnmres = $getdspnm->execute([$recmessagearr[2]]);
103
-                  $dspnmfetched = $getdspnmres->fetch();
104
-		  $authorDisplayNm = $dspnmfetched['author_displayname'];
105
-		  $getdspnmres->closeCursor();
106
-                  $internalSender = 0;
107
-            }
108
-
109
-
110
-            $escapedmessagepre = $recmessagearr[4];
111
-            $escapedmessage = nl2br($escapedmessagepre);
112
-
113
-            $sql = $this->connection->prepare('
114
-				INSERT INTO `*PREFIX*sms_relent_received`
115
-					(`user_id`, `message_id`, `date`, `from`, `to`, `message`, `author_displayname`, `internal_sender`)
116
-				VALUES (?, ?, ?, ?, ?, ?, ?, ?)
117
-			');
118
-	    $sql->execute([$userId, $recmessagearr[0], $recmessagearr[1], $recmessagearr[2], $recmessagearr[3], $escapedmessage, $authorDisplayNm, $internalSender]);
119
-     }
120
-
121
-
122
-     /**
123
-      * @NoAdminRequired
124
-      *
125
-      */
126
-     public function insertsentsms($userId, $sentmessagearr) {
127
-
128
-            $authorDisplayName = '';
129
-            $msgsentfrompre = explode("+", $sentmessagearr[2]);
130
-            $msgsentfrom = "+" . $msgsentfrompre[1];
131
-
132
-            // Search for the sender's Display Name
133
-            $getacdatast = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ? AND `value` = ?');
134
-            $getacdatastres = $getacdatast->execute(['phone', $msgsentfrom]);
135
-
136
-            $acdatausersst = [];
137
-            while ($acusrstfetched = $getacdatastres->fetch()) {
138
-                   $acdatausersst[] = $acusrstfetched['uid'];
139
-            }
140
-            $getacdatastres->closeCursor();
141
-
142
-            if ($acdatausersst) {
143
-
144
-                $acdatausrdnst = [];
145
-                foreach ($acdatausersst as $dnstkey => $dnstvalue) {
146
-
147
-                     $getacdatadnst = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?');
148
-	             $getacdatadnstres = $getacdatadnst->execute([$dnstvalue, 'displayname']);
149
-
150
-		     while ($acusrdnstfetched = $getacdatadnstres->fetch()) {
151
-		            $acdatausrdnst[] = $acusrdnstfetched['value'];
152
-		     }
153
-		     $getacdatadnstres->closeCursor();
154
-                }
155
-
156
-                if ($acdatausrdnst) {
157
-
158
-                    if (count($acdatausrdnst) == 1) {
159
-
160
-                        $authorDisplayName = $acdatausrdnst[0];
161
-
162
-                    } elseif (count($acdatausrdnst) > 1) {
163
-
164
-                        $authorDisplayName = implode("/", $acdatausrdnst);
165
-                    }
166
-
167
-                } else { $authorDisplayName = ''; }
168
-
169
-            } else { $authorDisplayName = ''; }
170
-
171
-
172
-            $textwithnl = nl2br($sentmessagearr[8]);
173
-            $sql = $this->connection->prepare('
174
-				INSERT INTO `*PREFIX*sms_relent_sent`
175
-					(`user_id`, `message_id`, `date`, `from`, `to`, `network`, `price`, `status`, `deliveryreceipt`, `message`, `author_displayname`)
176
-				VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
177
-			');
178
-	    $sql->execute([$userId, $sentmessagearr[0], $sentmessagearr[1], $sentmessagearr[2], $sentmessagearr[3], $sentmessagearr[4], $sentmessagearr[5], $sentmessagearr[6], 
179
-                           $sentmessagearr[7], $textwithnl, $authorDisplayName]);
180
-     }
181
-
182
-
183
-     /**
184
-      * @NoAdminRequired
185
-      *
186
-      */
187
-     public function updatedeliverystatustel($ncuserfortelnyxdel, $messageid, $network, $messageprice, $messagestatus, $deliverystatus) {
188
-
189
-	    $sqlupdateds = $this->connection->prepare('
190
-			UPDATE `*PREFIX*sms_relent_sent`
191
-			SET `price` = ?, `status` = ?, `deliveryreceipt` = ?, `network` = ?
192
-                        WHERE `message_id` = ? AND `user_id` = ? ');
193
-	    $updateRes = $sqlupdateds->execute([$messageprice, $messagestatus, $deliverystatus, $network, $messageid, $ncuserfortelnyxdel]);
194
-	    $updateRes->closeCursor();
195
-     }
196
-
197
-
198
-     /**
199
-      * @NoAdminRequired
200
-      *
201
-      */
202
-     public function updatedeliverystatusnex($ncuserforplivodel, $messageid, $networkcode, $messageprice, $mStatus, $deliverystatus) {
203
-
204
-	    $sqlupdatedspl = $this->connection->prepare('
205
-			UPDATE `*PREFIX*sms_relent_sent`
206
-			SET `price` = ?, `deliveryreceipt` = ?, `status` = ?, `network` = ?
207
-                        WHERE `message_id` = ? AND `user_id` = ? ');
208
-	    $updateResdspl = $sqlupdatedspl->execute([$messageprice, $deliverystatus, $mStatus, $networkcode, $messageid, $ncuserforplivodel]);
209
-	    $updateResdspl->closeCursor();
210
-     }
211
-
212
-
213
-     /**
214
-      * @NoAdminRequired
215
-      *
216
-      */
217
-     public function updatedeliverystatustwil($ncuserfortwildel, $messageid, $networkcode, $messageprice, $mStatus, $deliverystatus) {
218
-
219
-	    $sqlupdatedstw = $this->connection->prepare('
220
-			UPDATE `*PREFIX*sms_relent_sent`
221
-			SET `price` = ?, `deliveryreceipt` = ?, `status` = ?, `network` = ?
222
-                        WHERE `message_id` = ? AND `user_id` = ? ');
223
-	    $updateResdstw = $sqlupdatedstw->execute([$messageprice, $deliverystatus, $mStatus, $networkcode, $messageid, $ncuserfortwildel]);
224
-	    $updateResdstw->closeCursor();
225
-     }
226
-
227
-
228
-     /**
229
-      * @NoAdminRequired
230
-      *
231
-      */
232
-     public function updatedeliverystatusflow($ncuserforflowdel, $messageid, $networkcode, $messageprice, $mStatus, $deliverystatus) {
233
-
234
-	    $sqlupdatedsfl = $this->connection->prepare('
235
-			UPDATE `*PREFIX*sms_relent_sent`
236
-			SET `price` = ?, `deliveryreceipt` = ?, `status` = ?, `network` = ?
237
-                        WHERE `message_id` = ? AND `user_id` = ? ');
238
-	    $updateResdsfl = $sqlupdatedsfl->execute([$messageprice, $deliverystatus, $mStatus, $networkcode, $messageid, $ncuserforflowdel]);
239
-	    $updateResdsfl->closeCursor();
240
-     }
241
-
242
-
243
-     /**
244
-      * @NoAdminRequired
245
-      */
246
-     public function getreceivedtable($userId) {
247
-
248
-        // Get the user's preferences from the settings
249
-        $getgamcheckrc = $this->connection->prepare('
250
-		       SELECT `user_id`, `show_all_messages`, `show_display_names`
251
-		       FROM  `*PREFIX*sms_relent_settings` WHERE `user_id` = ?');
252
-        $getgamcheckrcres = $getgamcheckrc->execute([$userId]);
253
-        $getcrgamsrcpref = $getgamcheckrcres->fetch();
254
-        $crgamsrcpref = $getcrgamsrcpref['show_all_messages'];
255
-        $crdnmsrcpref = $getcrgamsrcpref['show_display_names'];
256
-        $getgamcheckrcres->closeCursor();
257
-
258
-        if ($crgamsrcpref == 1 && $this->groupManager->isAdmin($userId)) {
259
-
260
-            if ($crdnmsrcpref == 1) {
261
-	        $getrectable = $this->connection->prepare('
262
-			SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `message`, `author_displayname`, `internal_sender`
263
-			FROM  `*PREFIX*sms_relent_received`');
264
-	        $rcresult = $getrectable->execute();
265
-            } else {
266
-	        $getrectable = $this->connection->prepare('
267
-			SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `message`, `internal_sender`
268
-			FROM  `*PREFIX*sms_relent_received`');
269
-	        $rcresult = $getrectable->execute();
270
-            }
271
-
272
-        } else {
273
-
274
-            if ($crdnmsrcpref == 1) {
275
-	        $getrectable = $this->connection->prepare('
276
-			SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `message`, `author_displayname`, `internal_sender`
277
-			FROM  `*PREFIX*sms_relent_received`
278
-			WHERE `user_id` = ?');
279
-	        $rcresult = $getrectable->execute([$userId]);
280
-            } else {
281
-	        $getrectable = $this->connection->prepare('
282
-			SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `message`, `internal_sender`
283
-			FROM  `*PREFIX*sms_relent_received`
284
-			WHERE `user_id` = ?');
285
-	        $rcresult = $getrectable->execute([$userId]);
286
-            }
287
-        }
288
-
289
-        $recdatatable = [];
290
-        while ($rowfetched = $rcresult->fetch()) {
291
-               $recdatatable[] = $rowfetched;
292
-        }
293
-	$rcresult->closeCursor();
294
-
295
-        $recdatafromdb = $recdatatable;
296
-
297
-
298
-
299
-        if ($this->groupManager->isAdmin($userId)) {
300
-
301
-            return $recdatafromdb;
302
-
303
-        } else {
304
-
305
-            // Get the restrictions from the 'sms_relent_restrict' table
306
-            $getrestr = $this->connection->prepare('
307
-		       SELECT `phone_number`, `groups`, `users`
308
-		       FROM  `*PREFIX*sms_relent_restrict`');
309
-            $getrestrres = $getrestr->execute();
310
-
311
-            $restrdata = [];
312
-            while ($restrfetched = $getrestrres->fetch()) {
313
-                   $restrdata[] = $restrfetched;
314
-            }
315
-            $getrestrres->closeCursor();
316
-
317
-            if ($restrdata) {
318
-
319
-                // Get the groups to which the current user belongs
320
-                $getusrgrp = $this->connection->prepare('
321
-		       SELECT `gid`, `uid`
322
-		       FROM  `*PREFIX*group_user`
323
-                       WHERE `uid` = ?');
324
-                $getusrgrpres = $getusrgrp->execute([$userId]);
325
-
326
-                $usergrps = [];
327
-                while ($fetchedgrps = $getusrgrpres->fetch()) {
328
-                       $usergrps[] = $fetchedgrps['gid'];
329
-                }
330
-                $getusrgrpres->closeCursor();
331
-
332
-		// Get the Display Name of the current user
333
-		$getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?');
334
-		$getacdatadnres = $getacdatadn->execute([$userId, 'displayname']);
335
-		$acdatausrdnadm = $getacdatadnres->fetch();
336
-		$cruserdname = $acdatausrdnadm['value'];
337
-		$getacdatadnres->closeCursor();
338
-
339
-                // Get the phone numbers that are not allowed for the current user
340
-                $restrPhoneNb = [];
341
-                foreach ($restrdata as $rskey => $rsvalue) {
342
-
343
-                       $restrgrparr = explode("|", $rsvalue['groups']);
344
-                       $chck = 0;
345
-                       foreach ($restrgrparr as $rkey => $rvalue) {
346
-                                if (str_contains(implode("|", $usergrps), $rvalue)) { $chck++; }
347
-                       }
348
-                       if (str_contains($rsvalue['users'], $cruserdname)) { $chck++; }
349
-
350
-                       if ($chck == 0) { $restrPhoneNb[] = $rsvalue['phone_number']; }
351
-                }
352
-
353
-                $restrPhoneNmbrs = array_unique($restrPhoneNb);
354
-
355
-                // Clean the phone numbers from tags
356
-                $restrPhfin = [];
357
-                foreach ($restrPhoneNmbrs as $phkey => $phvalue) {
358
-
359
-                    $restrpharr = explode(": ", $phvalue);
360
-                    $restrPhfin[] = $restrpharr[1];
361
-                }
362
-
363
-                // Assemble the array of message rows that excludes the rows for the restricted phone numbers
364
-                foreach ($recdatafromdb as $mdkey => $mdvalue) {
365
-
366
-                    if (str_contains($mdvalue['to'], "+")) {
367
-                        $fromnmbrarr = explode("+", $mdvalue['to']);
368
-                        if (in_array("+" . $fromnmbrarr[1], $restrPhfin)) {
369
-                            unset($recdatafromdb[$mdkey]);
370
-                        }
371
-                    } else {
372
-                        $tonmbrarr = explode(": ", $mdvalue['to']);
373
-                        if (count($tonmbrarr) == 2) {
374
-                            $tonmbrtbcmprd = $tonmbrarr[1];
375
-                        } else {
376
-                            $tonmbrtbcmprd = $tonmbrarr[0];
377
-                        }
378
-                        if (in_array($tonmbrtbcmprd, $restrPhfin)) {
379
-                            unset($recdatafromdb[$mdkey]);
380
-                        }
381
-                    }
382
-                }
383
-
384
-                $recdatafdbproc = array_values($recdatafromdb);
385
-
386
-                return $recdatafdbproc;
387
-            }
388
-        }
389
-
390
-     }
391
-
392
-
393
-     /**
394
-      * @NoAdminRequired
395
-      */
396
-     public function getreceivedtablefordel($userId) {
397
-
398
-        if ($this->groupManager->isAdmin($userId)) {
399
-
400
-            $getrecfordl = $this->connection->prepare('
401
-			SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `message`
402
-			FROM  `*PREFIX*sms_relent_received`
403
-			WHERE `user_id` = ?');
404
-	    $resultdl = $getrecfordl->execute([$userId]);
405
-
406
-            $recdatatable = [];
407
-            while ($rowfetched = $resultdl->fetch()) {
408
-                   $recdatatable[] = $rowfetched;
409
-            }
410
-            $resultdl->closeCursor();
411
-
412
-            $recdatafromdb = $recdatatable;
413
-
414
-            return $recdatafromdb;
415
-
416
-        } else { return "not permitted"; }
417
-     }
418
-
419
-
420
-     /**
421
-      * @NoAdminRequired
422
-      */
423
-     public function removerecrows($userId, $recmessagedbIDs) {
424
-
425
-        foreach ($recmessagedbIDs as $key => $rowtodel) {
426
-		 $query = $this->connection->prepare('
427
-		       DELETE FROM `*PREFIX*sms_relent_received`
428
-		       WHERE `id` = ?');
429
-		 $deleteResult = $query->execute([$rowtodel]);
430
-		 $deleteResult->closeCursor();
431
-        }
432
-
433
-	$sqlupdate = $this->connection->prepare('
434
-                  SET @resetrec = 0;
435
-		  UPDATE `*PREFIX*sms_relent_received`
436
-		  SET `id` = @resetrec := @resetrec + 1;
437
-                  ALTER TABLE `*PREFIX*sms_relent_received` auto_increment=1;');
438
-	$updateRes = $sqlupdate->execute();
439
-	$updateRes->closeCursor();
440
-     }
441
-
442
-
443
-     /**
444
-      * @NoAdminRequired
445
-      */
446
-     public function getsenttable($userId) {
447
-
448
-        // Get the user's preferences from the settings
449
-        $getgamcheck = $this->connection->prepare('
450
-		       SELECT `user_id`, `show_all_messages`, `show_display_names`
451
-		       FROM  `*PREFIX*sms_relent_settings` WHERE `user_id` = ?');
452
-        $getgamcheckres = $getgamcheck->execute([$userId]);
453
-        $getcrgamspref = $getgamcheckres->fetch();
454
-        $crgamspref = $getcrgamspref['show_all_messages'];
455
-        $crdnamespref = $getcrgamspref['show_display_names'];
456
-        $getgamcheckres->closeCursor();
457
-
458
-        if ($crgamspref == 1 && $this->groupManager->isAdmin($userId)) {
459
-
460
-            if ($crdnamespref == 1) {
461
-                $getsenttbl = $this->connection->prepare('
462
-		       SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `network`, `price`, `status`, `deliveryreceipt`, `message`, `author_displayname`
463
-		       FROM  `*PREFIX*sms_relent_sent`');
464
-                $resultsent = $getsenttbl->execute();
465
-            } else {
466
-                $getsenttbl = $this->connection->prepare('
467
-		       SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `network`, `price`, `status`, `deliveryreceipt`, `message`
468
-		       FROM  `*PREFIX*sms_relent_sent`');
469
-                $resultsent = $getsenttbl->execute();
470
-            }
471
-
472
-        } else {
473
-
474
-            if ($crdnamespref == 1) {
475
-                $getsenttbl = $this->connection->prepare('
476
-		       SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `network`, `price`, `status`, `deliveryreceipt`, `message`, `author_displayname`
477
-		       FROM  `*PREFIX*sms_relent_sent`
478
-		       WHERE `user_id` = ?');
479
-                $resultsent = $getsenttbl->execute([$userId]);
480
-            } else {
481
-                $getsenttbl = $this->connection->prepare('
482
-		       SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `network`, `price`, `status`, `deliveryreceipt`, `message`
483
-		       FROM  `*PREFIX*sms_relent_sent`
484
-		       WHERE `user_id` = ?');
485
-                $resultsent = $getsenttbl->execute([$userId]);
486
-            }
487
-        }
488
-
489
-        $sentdatatable = [];
490
-        while ($rowfetched = $resultsent->fetch()){
491
-               $sentdatatable[] = $rowfetched;
492
-        }
493
-        $resultsent->closeCursor();
494
-
495
-        $sentdatafromdb = $sentdatatable;
496
-
497
-
498
-        if ($this->groupManager->isAdmin($userId)) {
499
-
500
-            return $sentdatafromdb;
501
-
502
-        } else {
503
-
504
-            // Get the restrictions from the 'sms_relent_restrict' table
505
-            $getrestr = $this->connection->prepare('
506
-		       SELECT `phone_number`, `groups`, `users`
507
-		       FROM  `*PREFIX*sms_relent_restrict`');
508
-            $getrestrres = $getrestr->execute();
509
-
510
-            $restrdata = [];
511
-            while ($restrfetched = $getrestrres->fetch()) {
512
-                   $restrdata[] = $restrfetched;
513
-            }
514
-            $getrestrres->closeCursor();
515
-
516
-            if ($restrdata) {
517
-
518
-                // Get the groups to which the current user belongs
519
-                $getusrgrp = $this->connection->prepare('
520
-		       SELECT `gid`, `uid`
521
-		       FROM  `*PREFIX*group_user`
522
-                       WHERE `uid` = ?');
523
-                $getusrgrpres = $getusrgrp->execute([$userId]);
524
-
525
-                $usergrps = [];
526
-                while ($fetchedgrps = $getusrgrpres->fetch()) {
527
-                       $usergrps[] = $fetchedgrps['gid'];
528
-                }
529
-                $getusrgrpres->closeCursor();
530
-
531
-		// Get the Display Name of the current user
532
-		$getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?');
533
-		$getacdatadnres = $getacdatadn->execute([$userId, 'displayname']);
534
-		$acdatausrdnadm = $getacdatadnres->fetch();
535
-		$cruserdname = $acdatausrdnadm['value'];
536
-		$getacdatadnres->closeCursor();
537
-
538
-                // Get the phone numbers that are not allowed for the current user
539
-                $restrPhoneNb = [];
540
-                foreach ($restrdata as $rskey => $rsvalue) {
541
-
542
-                       $restrgrparr = explode("|", $rsvalue['groups']);
543
-                       $chck = 0;
544
-                       foreach ($restrgrparr as $rkey => $rvalue) {
545
-                                if (str_contains(implode("|", $usergrps), $rvalue)) { $chck++; }
546
-                       }
547
-                       if (str_contains($rsvalue['users'], $cruserdname)) { $chck++; }
548
-
549
-                       if ($chck == 0) { $restrPhoneNb[] = $rsvalue['phone_number']; }
550
-                }
551
-
552
-                $restrPhoneNmbrs = array_unique($restrPhoneNb);
553
-
554
-                // Clean the phone numbers from tags
555
-                $restrPhfin = [];
556
-                foreach ($restrPhoneNmbrs as $phkey => $phvalue) {
557
-
558
-                    $restrpharr = explode(": ", $phvalue);
559
-                    $restrPhfin[] = $restrpharr[1];
560
-                }
561
-
562
-                // Assemble the array of message rows that excludes the rows for the restricted phone numbers
563
-                foreach ($sentdatafromdb as $smdkey => $smdvalue) {
564
-
565
-                    if (str_contains($smdvalue['from'], "+")) {
566
-                        $fromnmbrarr = explode("+", $smdvalue['from']);
567
-                        if (in_array("+" . $fromnmbrarr[1], $restrPhfin)) {
568
-                            unset($sentdatafromdb[$smdkey]);
569
-                        }
570
-                    } else {
571
-                        $frmnmbrarr = explode(": ", $smdvalue['from']);
572
-                        if (count($frmnmbrarr) == 2) {
573
-                            $nmbtbcmprd = $frmnmbrarr[1];
574
-                        } else { 
575
-                            $nmbtbcmprd = $frmnmbrarr[0];
576
-                        }
577
-
578
-                        if (in_array($nmbtbcmprd, $restrPhfin)) {
579
-                            unset($sentdatafromdb[$smdkey]);
580
-                        }
581
-                    }
582
-                }
583
-
584
-                $sentdatadbproc = array_values($sentdatafromdb);
585
-
586
-                return $sentdatadbproc;
587
-            }
588
-        }
589
-     }
590
-
591
-
592
-     /**
593
-      * @NoAdminRequired
594
-      */
595
-     public function getsenttablefordel($userId) {
596
-
597
-        if ($this->groupManager->isAdmin($userId)) {
598
-
599
-            $getsenttbldel = $this->connection->prepare('
600
-		          SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `network`, `price`, `status`, `deliveryreceipt`, `message`
601
-		          FROM  `*PREFIX*sms_relent_sent`
602
-		          WHERE `user_id` = ?');
603
-            $resultsentdl = $getsenttbldel->execute([$userId]);
604
-
605
-            $sentdatatable = [];
606
-            while ($rowfetched = $resultsentdl->fetch()){
607
-                   $sentdatatable[] = $rowfetched;
608
-            }
609
-            $resultsentdl->closeCursor();
610
-
611
-            $sentdatafromdb = $sentdatatable;
612
-
613
-            return $sentdatafromdb;
614
-
615
-        } else { return "not permitted"; }
616
-     }
617
-
618
-
619
-     /**
620
-      * @NoAdminRequired
621
-      */
622
-     public function removesentrows($userId, $sentmessagedbIDs) {
623
-
624
-        foreach ($sentmessagedbIDs as $key => $sentrowtodel) {
625
-		 $query = $this->connection->prepare('
626
-		       DELETE FROM `*PREFIX*sms_relent_sent`
627
-		       WHERE `id` = ?');
628
-		 $deleteResult = $query->execute([$sentrowtodel]);
629
-		 $deleteResult->closeCursor();
630
-        }
631
-
632
-	$sqlupdate = $this->connection->prepare('
633
-                  SET @resetsent = 0;
634
-		  UPDATE `*PREFIX*sms_relent_sent`
635
-		  SET `id` = @resetsent := @resetsent + 1;
636
-                  ALTER TABLE `*PREFIX*sms_relent_sent` auto_increment=1;');
637
-	$updateRes = $sqlupdate->execute();
638
-	$updateRes->closeCursor();
639
-     }
640
-
641
-
642
-     /**
643
-      * @NoAdminRequired
644
-      */
645
-     public function getgroupedtable($userId) {
646
-
647
-
648
-        // Get the user's preferences from the settings
649
-        $getpref = $this->connection->prepare('
650
-		       SELECT `user_id`, `show_all_messages`
651
-		       FROM  `*PREFIX*sms_relent_settings` WHERE `user_id` = ?');
652
-        $getprefres = $getpref->execute([$userId]);
653
-        $getprefresdata = $getprefres->fetch();
654
-        $crsampref = $getprefresdata['show_all_messages'];
655
-        $getprefres->closeCursor();
656
-
657
-
658
-        // Get all the received messages
659
-        if ($crsampref == 1 && $this->groupManager->isAdmin($userId)) {
660
-
661
-            $getrecmsgs = $this->connection->prepare('
662
-			SELECT `id`, `user_id`, `date`, `from`, `to`, `message`, `author_displayname`
663
-			FROM  `*PREFIX*sms_relent_received`');
664
-	    $getrecmsgsres = $getrecmsgs->execute();
665
-
666
-        } else {
667
-
668
-            $getrecmsgs = $this->connection->prepare('
669
-			SELECT `id`, `user_id`, `date`, `from`, `to`, `message`, `author_displayname`
670
-			FROM  `*PREFIX*sms_relent_received`
671
-			WHERE `user_id` = ?');
672
-	    $getrecmsgsres = $getrecmsgs->execute([$userId]);
673
-        }
674
-
675
-        $recmsgs = [];
676
-        while ($rcrowsfetch = $getrecmsgsres->fetch()) {
677
-               $rcrowsfetch['deliveryreceipt'] = '';
678
-               $rcrowsfetch['table'] = 'received';
679
-               $recmsgs[] = $rcrowsfetch;
680
-        }
681
-	$getrecmsgsres->closeCursor();
682
-
683
-
684
-        // Get all the sent messages
685
-        if ($crsampref == 1 && $this->groupManager->isAdmin($userId)) {
686
-
687
-            $getsentmsgs = $this->connection->prepare('
688
-		       SELECT `id`, `user_id`, `date`, `from`, `to`,`message`, `author_displayname`, `deliveryreceipt`
689
-		       FROM  `*PREFIX*sms_relent_sent`');
690
-            $getsentmsgsres = $getsentmsgs->execute();
691
-
692
-        } else {
693
-
694
-            $getsentmsgs = $this->connection->prepare('
695
-		       SELECT `id`, `user_id`, `date`, `from`, `to`,`message`, `author_displayname`, `deliveryreceipt`
696
-		       FROM  `*PREFIX*sms_relent_sent`
697
-		       WHERE `user_id` = ?');
698
-            $getsentmsgsres = $getsentmsgs->execute([$userId]);
699
-        }
700
-
701
-        $sentmsgs = [];
702
-        while ($rowfetchedsmsg = $getsentmsgsres->fetch()) {
703
-               $rowfetchedsmsg['table'] = 'sent';
704
-               $sentmsgs[] = $rowfetchedsmsg;
705
-        }
706
-        $getsentmsgsres->closeCursor();
707
-
708
-        $groupedfromdb = array_merge($recmsgs, $sentmsgs);
709
-
710
-        if ($this->groupManager->isAdmin($userId)) {
711
-
712
-            return $groupedfromdb;
713
-
714
-        } else {
715
-
716
-            // Get the restrictions from the 'sms_relent_restrict' table
717
-            $getrestr = $this->connection->prepare('
718
-		       SELECT `phone_number`, `groups`, `users`
719
-		       FROM  `*PREFIX*sms_relent_restrict`');
720
-            $getrestrres = $getrestr->execute();
721
-
722
-            $restrdata = [];
723
-            while ($restrfetched = $getrestrres->fetch()) {
724
-                   $restrdata[] = $restrfetched;
725
-            }
726
-            $getrestrres->closeCursor();
727
-
728
-            if ($restrdata) {
729
-
730
-                // Get the groups to which the current user belongs
731
-                $getusrgrp = $this->connection->prepare('
732
-		       SELECT `gid`, `uid`
733
-		       FROM  `*PREFIX*group_user`
734
-                       WHERE `uid` = ?');
735
-                $getusrgrpres = $getusrgrp->execute([$userId]);
736
-
737
-                $usergrps = [];
738
-                while ($fetchedgrps = $getusrgrpres->fetch()) {
739
-                       $usergrps[] = $fetchedgrps['gid'];
740
-                }
741
-                $getusrgrpres->closeCursor();
742
-
743
-		// Get the Display Name of the current user
744
-		$getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?');
745
-		$getacdatadnres = $getacdatadn->execute([$userId, 'displayname']);
746
-		$acdatausrdnadm = $getacdatadnres->fetch();
747
-		$cruserdname = $acdatausrdnadm['value'];
748
-		$getacdatadnres->closeCursor();
749
-
750
-                // Get the phone numbers that are not allowed for the current user
751
-                $restrPhoneNb = [];
752
-                foreach ($restrdata as $rskey => $rsvalue) {
753
-
754
-                       $restrgrparr = explode("|", $rsvalue['groups']);
755
-                       $chck = 0;
756
-                       foreach ($restrgrparr as $rkey => $rvalue) {
757
-                                if (str_contains(implode("|", $usergrps), $rvalue)) { $chck++; }
758
-                       }
759
-                       if (str_contains($rsvalue['users'], $cruserdname)) { $chck++; }
760
-
761
-                       if ($chck == 0) { $restrPhoneNb[] = $rsvalue['phone_number']; }
762
-                }
763
-
764
-                $restrPhoneNmbrs = array_unique($restrPhoneNb);
765
-
766
-                // Clean the phone numbers from tags
767
-                $restrPhfin = [];
768
-                foreach ($restrPhoneNmbrs as $phkey => $phvalue) {
769
-
770
-                    $restrpharr = explode(": ", $phvalue);
771
-                    $restrPhfin[] = $restrpharr[1];
772
-                }
773
-
774
-                // Assemble the array of message rows that excludes the rows for the restricted phone numbers
775
-                foreach ($groupedfromdb as $gmdkey => $gmdvalue) {
776
-
777
-                    if ($gmdvalue['user_id'] == $userId) {
778
-
779
-                        if ($gmdvalue['table'] == 'sent') {
780
-
781
-                            if (str_contains($gmdvalue['from'], "+")) {
782
-                                $fromnmbrarr = explode("+", $gmdvalue['from']);
783
-                                if (in_array("+" . $fromnmbrarr[1], $restrPhfin)) {
784
-                                    unset($groupedfromdb[$gmdkey]);
785
-                                }
786
-                            } else {
787
-                                $frmnmbrarr = explode(": ", $gmdvalue['from']);
788
-                                if (count($frmnmbrarr) == 2) {
789
-                                    $nmbtbcmprd = $frmnmbrarr[1];
790
-                                } else { 
791
-                                    $nmbtbcmprd = $frmnmbrarr[0];
792
-                                }
793
-                                if (in_array($nmbtbcmprd, $restrPhfin)) {
794
-                                    unset($groupedfromdb[$gmdkey]);
795
-                                }
796
-                            }
797
-
798
-                        } elseif ($gmdvalue['table'] == 'received') {
799
-
800
-                            if (str_contains($gmdvalue['to'], "+")) {
801
-                                $fromnmbrarr = explode("+", $gmdvalue['to']);
802
-                                if (in_array("+" . $fromnmbrarr[1], $restrPhfin)) {
803
-                                    unset($groupedfromdb[$gmdkey]);
804
-                                }
805
-                            } else {
806
-                                $tonmbrarr = explode(": ", $gmdvalue['to']);
807
-                                if (count($tonmbrarr) == 2) {
808
-                                    $tonmbrtbcmprd = $tonmbrarr[1];
809
-                                } else {
810
-                                    $tonmbrtbcmprd = $tonmbrarr[0];
811
-                                }
812
-                                if (in_array($tonmbrtbcmprd, $restrPhfin)) {
813
-                                    unset($groupedfromdb[$gmdkey]);
814
-                                }
815
-                            }
816
-                        }
817
-
818
-                    } else { unset($groupedfromdb[$gmdkey]); }
819
-
820
-                }
821
-
822
-                $groupedfdbproc = array_values($groupedfromdb);
823
-
824
-                return $groupedfdbproc;
825
-            }
826
-        }
827
-     }
828
-
829
-
830
-     /**
831
-      * @NoAdminRequired
832
-      */
833
-     public function getgroupedpernumber($userId, $phoneNumber) {
834
-
835
-        $phoneNumberpr = "%" . $phoneNumber;
836
-
837
-        // Get the user's preferences from the settings
838
-        $getpref = $this->connection->prepare('
839
-		       SELECT `user_id`, `show_all_messages`
840
-		       FROM  `*PREFIX*sms_relent_settings` WHERE `user_id` = ?');
841
-        $getprefres = $getpref->execute([$userId]);
842
-        $getprefresdata = $getprefres->fetch();
843
-        $crsampref = $getprefresdata['show_all_messages'];
844
-        $getprefres->closeCursor();
845
-
846
-
847
-        // Get all the received messages for the current number
848
-        if ($crsampref == 1 && $this->groupManager->isAdmin($userId)) {
849
-
850
-            $getrecmsgs = $this->connection->prepare('
851
-			SELECT `id`, `user_id`, `date`, `from`, `to`, `message`, `author_displayname`
852
-			FROM  `*PREFIX*sms_relent_received` WHERE `from` = ? OR `to` LIKE ?');
853
-	    $getrecmsgsres = $getrecmsgs->execute([$phoneNumber, $phoneNumberpr]);
854
-
855
-        } else {
856
-
857
-            $getrecmsgs = $this->connection->prepare('
858
-			SELECT `id`, `user_id`, `date`, `from`, `to`, `message`, `author_displayname`
859
-			FROM  `*PREFIX*sms_relent_received`
860
-			WHERE `user_id` = ? AND (`from` = ? OR `to` LIKE ?)');
861
-	    $getrecmsgsres = $getrecmsgs->execute([$userId, $phoneNumber, $phoneNumberpr]);
862
-        }
863
-
864
-        $recmsgs = [];
865
-        while ($rcrowsfetch = $getrecmsgsres->fetch()) {
866
-               $rcrowsfetch['deliveryreceipt'] = '';
867
-               $rcrowsfetch['table'] = 'received';
868
-               $recmsgs[] = $rcrowsfetch;
869
-        }
870
-	$getrecmsgsres->closeCursor();
871
-
872
-
873
-        // Get all the sent messages
874
-        if ($crsampref == 1 && $this->groupManager->isAdmin($userId)) {
875
-
876
-            $getsentmsgs = $this->connection->prepare('
877
-		       SELECT `id`, `user_id`, `date`, `from`, `to`,`message`, `author_displayname`, `deliveryreceipt`
878
-		       FROM  `*PREFIX*sms_relent_sent` WHERE `from` LIKE ? OR `to` = ?');
879
-            $getsentmsgsres = $getsentmsgs->execute([$phoneNumberpr, $phoneNumber]);
880
-
881
-        } else {
882
-
883
-            $getsentmsgs = $this->connection->prepare('
884
-		       SELECT `id`, `user_id`, `date`, `from`, `to`,`message`, `author_displayname`, `deliveryreceipt`
885
-		       FROM  `*PREFIX*sms_relent_sent`
886
-		       WHERE `user_id` = ? AND (`from` LIKE ? OR `to` = ?)');
887
-            $getsentmsgsres = $getsentmsgs->execute([$userId, $phoneNumberpr, $phoneNumber]);
888
-        }
889
-
890
-        $sentmsgs = [];
891
-        while ($rowfetchedsmsg = $getsentmsgsres->fetch()) {
892
-               $rowfetchedsmsg['table'] = 'sent';
893
-               $sentmsgs[] = $rowfetchedsmsg;
894
-        }
895
-        $getsentmsgsres->closeCursor();
896
-
897
-        $groupedpernb = array_merge($recmsgs, $sentmsgs);
898
-
899
-        if ($this->groupManager->isAdmin($userId)) {
900
-
901
-            return $groupedpernb;
902
-
903
-        } else {
904
-
905
-            // Get the restrictions from the 'sms_relent_restrict' table
906
-            $getrestr = $this->connection->prepare('
907
-		       SELECT `phone_number`, `groups`, `users`
908
-		       FROM  `*PREFIX*sms_relent_restrict`');
909
-            $getrestrres = $getrestr->execute();
910
-
911
-            $restrdata = [];
912
-            while ($restrfetched = $getrestrres->fetch()) {
913
-                   $restrdata[] = $restrfetched;
914
-            }
915
-            $getrestrres->closeCursor();
916
-
917
-            if ($restrdata) {
918
-
919
-                // Get the groups to which the current user belongs
920
-                $getusrgrp = $this->connection->prepare('
921
-		       SELECT `gid`, `uid`
922
-		       FROM  `*PREFIX*group_user`
923
-                       WHERE `uid` = ?');
924
-                $getusrgrpres = $getusrgrp->execute([$userId]);
925
-
926
-                $usergrps = [];
927
-                while ($fetchedgrps = $getusrgrpres->fetch()) {
928
-                       $usergrps[] = $fetchedgrps['gid'];
929
-                }
930
-                $getusrgrpres->closeCursor();
931
-
932
-		// Get the Display Name of the current user
933
-		$getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?');
934
-		$getacdatadnres = $getacdatadn->execute([$userId, 'displayname']);
935
-		$acdatausrdnadm = $getacdatadnres->fetch();
936
-		$cruserdname = $acdatausrdnadm['value'];
937
-		$getacdatadnres->closeCursor();
938
-
939
-                // Get the phone numbers that are not allowed for the current user
940
-                $restrPhoneNb = [];
941
-                foreach ($restrdata as $rskey => $rsvalue) {
942
-
943
-                       $restrgrparr = explode("|", $rsvalue['groups']);
944
-                       $chck = 0;
945
-                       foreach ($restrgrparr as $rkey => $rvalue) {
946
-                                if (str_contains(implode("|", $usergrps), $rvalue)) { $chck++; }
947
-                       }
948
-                       if (str_contains($rsvalue['users'], $cruserdname)) { $chck++; }
949
-
950
-                       if ($chck == 0) { $restrPhoneNb[] = $rsvalue['phone_number']; }
951
-                }
952
-
953
-                $restrPhoneNmbrs = array_unique($restrPhoneNb);
954
-
955
-                // Clean the phone numbers from tags
956
-                $restrPhfin = [];
957
-                foreach ($restrPhoneNmbrs as $phkey => $phvalue) {
958
-
959
-                    $restrpharr = explode(": ", $phvalue);
960
-                    $restrPhfin[] = $restrpharr[1];
961
-                }
962
-
963
-                // Assemble the array of message rows that excludes the rows for the restricted phone numbers
964
-                foreach ($groupedpernb as $gmdkey => $gmdvalue) {
965
-
966
-                    if ($gmdvalue['user_id'] == $userId) {
967
-
968
-                        if ($gmdvalue['table'] == 'sent') {
969
-
970
-                            if (str_contains($gmdvalue['from'], "+")) {
971
-                                $fromnmbrarr = explode("+", $gmdvalue['from']);
972
-                                if (in_array("+" . $fromnmbrarr[1], $restrPhfin)) {
973
-                                    unset($groupedpernb[$gmdkey]);
974
-                                }
975
-                            } else {
976
-                                $frmnmbrarr = explode(": ", $gmdvalue['from']);
977
-                                if (count($frmnmbrarr) == 2) {
978
-                                    $nmbtbcmprd = $frmnmbrarr[1];
979
-                                } else { 
980
-                                    $nmbtbcmprd = $frmnmbrarr[0];
981
-                                }
982
-                                if (in_array($nmbtbcmprd, $restrPhfin)) {
983
-                                    unset($groupedpernb[$gmdkey]);
984
-                                }
985
-                            }
986
-
987
-                        } elseif ($gmdvalue['table'] == 'received') {
988
-
989
-                            if (str_contains($gmdvalue['to'], "+")) {
990
-                                $fromnmbrarr = explode("+", $gmdvalue['to']);
991
-                                if (in_array("+" . $fromnmbrarr[1], $restrPhfin)) {
992
-                                    unset($groupedpernb[$gmdkey]);
993
-                                }
994
-                            } else {
995
-                                $tonmbrarr = explode(": ", $gmdvalue['to']);
996
-                                if (count($tonmbrarr) == 2) {
997
-                                    $tonmbrtbcmprd = $tonmbrarr[1];
998
-                                } else {
999
-                                    $tonmbrtbcmprd = $tonmbrarr[0];
1000
-                                }
1001
-                                if (in_array($tonmbrtbcmprd, $restrPhfin)) {
1002
-                                    unset($groupedpernb[$gmdkey]);
1003
-                                }
1004
-                            }
1005
-                        }
1006
-
1007
-                    } else { unset($groupedpernb[$gmdkey]); }
1008
-                }
1009
-
1010
-                $groupedpernb = array_values($groupedpernb);
1011
-
1012
-                return $groupedpernb;
1013
-            }
1014
-        }
1015
-     }
1016
-
1017
-
1018
-     /**
1019
-      * @NoAdminRequired
1020
-      */
1021
-     public function savedisplayname($userId, $authorDisplayname, $from) {
1022
-
1023
-        if ($this->groupManager->isAdmin($userId)) {
1024
-
1025
-	    $updatedispnm = $this->connection->prepare('
1026
-			UPDATE `*PREFIX*sms_relent_received`
1027
-			SET `author_displayname` = ?
1028
-                        WHERE `from` = ?');
1029
-	    $updatedispnmres = $updatedispnm->execute([$authorDisplayname, $from]);
1030
-
1031
-            if ($updatedispnmres) {
1032
-                return $respupdname = "The new Display Name has been saved. If on the Settings page the option 'Add the display name of the message author, before each message' is checked, when you refresh the page you will see the new Display Name before the messages.";
1033
-            } else {
1034
-                return $respupdname = "Error while trying to save the new Display Name to the database.";
1035
-            }
1036
-	    $updatedispnmres->closeCursor();
1037
-
1038
-        } else { return $respupdname = "Only admins can save Display Names for phone numbers that are not associated with Nextcloud users."; }
1039
-     }
1040
-
1041
-     /**
1042
-      * @NoAdminRequired
1043
-      */
1044
-     public function getmessagesperpage($userId) {
1045
-
1046
-        $sqlmpp = $this->connection->prepare('
1047
-	       SELECT `user_id`, `messagesperpage` 
1048
-               FROM `*PREFIX*sms_relent_settings`
1049
-               WHERE `user_id` = ?');
1050
-	$result = $sqlmpp->execute([$userId]);
1051
-        $mesppdata = $result->fetch();
1052
-        $result->closeCursor();
1053
-        if ($mesppdata) {
1054
-            $mesperpagedb = $mesppdata['messagesperpage'];
1055
-            return $mesperpagedb;
1056
-        }
1057
-     }
1058
-
1059
-
1060
-     /**
1061
-      * @NoAdminRequired
1062
-      */
1063
-     public function getsettings($userId) {
1064
-
1065
-        $getsettings = $this->connection->prepare('
1066
-                    SELECT `id`, `user_id`, `telapi_key`, `tel_pub_key`, `telapi_url_rec`, `telapi_url`, `messaging_profile_id`, `nexapi_key`, `nexapi_secret`, `nexapi_url_rec`,
1067
-                           `nexapi_url`, `tel_sender_name`, `nex_sender_name`, `messagesperpage`, `get_notify`, `notification_email`, `getsmsinemail`, `twilapi_key`, `twilapi_secret`, 
1068
-                           `twilapi_url_rec`, `twilapi_url`, `twil_sender_name`, `flowapi_key`, `flowapi_secret`, `flowapi_url_rec`, `flowapi_url`, `show_display_names`
1069
-		    FROM  `*PREFIX*sms_relent_settings`
1070
-		    WHERE `user_id` = ?');
1071
-
1072
-        $resultsettings = $getsettings->execute([$userId]);
1073
-
1074
-        $settingsfromdb = $resultsettings->fetch();
1075
-
1076
-        $resultsettings->closeCursor();
1077
-
1078
-        if ($settingsfromdb) {
1079
-
1080
-            if ($settingsfromdb['telapi_key'] != '') {
1081
-
1082
-                // Send a placeholder to the browser, instead of the real API key
1083
-                $settingsfromdb['telapi_key'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20";
1084
-            }
1085
-            if ($settingsfromdb['tel_pub_key'] != '') {
1086
-                $settingsfromdb['tel_pub_key'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20";
1087
-            }
1088
-            if ($settingsfromdb['messaging_profile_id'] != '') {
1089
-                $settingsfromdb['messaging_profile_id'] = "%20%20%20%20%20%20%20%20%20%20%20%20";
1090
-            }
1091
-            if ($settingsfromdb['nexapi_key'] != '') {
1092
-                $settingsfromdb['nexapi_key'] = "%20%20%20%20%20%20%20%20%20";
1093
-            }
1094
-            if ($settingsfromdb['nexapi_secret'] != '') {
1095
-                $settingsfromdb['nexapi_secret'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20";
1096
-            }
1097
-            if ($settingsfromdb['twilapi_key'] != '') {
1098
-                $settingsfromdb['twilapi_key'] = "%20%20%20%20%20%20%20%20%20";
1099
-            }
1100
-            if ($settingsfromdb['twilapi_secret'] != '') {
1101
-                $settingsfromdb['twilapi_secret'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20";
1102
-            }
1103
-            if ($settingsfromdb['flowapi_key'] != '') {
1104
-                $settingsfromdb['flowapi_key'] = "%20%20%20%20%20%20%20%20%20";
1105
-            }
1106
-            if ($settingsfromdb['flowapi_secret'] != '') {
1107
-                $settingsfromdb['flowapi_secret'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20";
1108
-            }
1109
-
1110
-            return $settingsfromdb;
1111
-        }
1112
-
1113
-     }
1114
-
1115
-
1116
-     public function updatenumberrestrictions($userId, $savedByDsplname, $phoneNumber, $groups, $users) {
1117
-
1118
-        if ($this->groupManager->isAdmin($userId)) {
1119
-
1120
-            $groupsproc = implode("|", $groups);
1121
-            $usersproc = implode("|", $users);
1122
-
1123
-            // Get the restrictions for the current number from the 'sms_relent_restrict' table
1124
-            $getrestr = $this->connection->prepare('SELECT `user_id`, `saved_by_dsplname`, `phone_number`, `groups`, `users` FROM `*PREFIX*sms_relent_restrict` WHERE
1125
-                                                   `phone_number` = ?');
1126
-            $getrestrresult = $getrestr->execute([$phoneNumber]);
1127
-            $crntrestr = $getrestrresult->fetch();
1128
-            $getrestrresult->closeCursor();
1129
-
1130
-            if ($getrestrresult && !$crntrestr) {
1131
-
1132
-	        $insertphrestr = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_restrict` (`user_id`, `saved_by_dsplname`, `phone_number`, `groups`, `users`) VALUES
1133
-                                                             (?, ?, ?, ?, ?)');
1134
-	        if ($insertphrestr->execute([$userId, $savedByDsplname, $phoneNumber, $groupsproc, $usersproc])) { $messagetosend = 'success'; } else { $messagetosend = 'failure'; }  
1135
-         
1136
-            } elseif ($getrestrresult && $crntrestr) {
1137
-
1138
-	        $updatephrestr = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_restrict` SET `user_id` = ?, `saved_by_dsplname` = ?, `groups` = ?, `users` = ? WHERE 
1139
-                                                            `phone_number` = ?');
1140
-	        if ($admupdatephonerestr = $updatephrestr->execute([$userId, $savedByDsplname, $groupsproc, $usersproc, $phoneNumber])) { 
1141
-                    $messagetosend = 'success';
1142
-                } else { 
1143
-                    $messagetosend = 'failure'; 
1144
-                }
1145
-
1146
-	        $admupdatephonerestr->closeCursor();
1147
-            }
1148
-            return $messagetosend;
1149
-        }
1150
-     }
1151
-
1152
-
1153
-     public function removenumberrestrictions($userId, $phoneNumber) {
1154
-
1155
-        if ($this->groupManager->isAdmin($userId)) {
1156
-
1157
-                // Remove the restrictions for the given phone number
1158
-		$delrstr = $this->connection->prepare('
1159
-		       DELETE FROM `*PREFIX*sms_relent_restrict`
1160
-		       WHERE `phone_number` = ?');
1161
-                if ($delrstrres = $delrstr->execute([$phoneNumber])) { $delresult = "success"; } else { $delresult = "failure"; }
1162
-		$delrstrres->closeCursor();
1163
-
1164
-	        $updateind = $this->connection->prepare('
1165
-                       SET @resetrec = 0;
1166
-		       UPDATE `*PREFIX*sms_relent_restrict`
1167
-		       SET `id` = @resetrec := @resetrec + 1;
1168
-                       ALTER TABLE `*PREFIX*sms_relent_restrict` auto_increment=1;');
1169
-	        $updateindres = $updateind->execute();
1170
-	        $updateindres->closeCursor();
1171
-
1172
-                return $delresult;
1173
-        }
1174
-     }
1175
-
1176
-
1177
-    /**
1178
-     * @NoAdminRequired
1179
-     */
1180
-    public function updateautoreplies($userId, $savedByDsplname, $phoneNumber, $daysOfWeek, $dailyStart, $dailyEnd, $vacationStart, $vacationEnd, $messageText) {
1181
-
1182
-        // Get the auto-reply for the current number from the 'sms_relent_autorply' table
1183
-        $getarpl = $this->connection->prepare('SELECT `user_id`, `saved_by_dsplname`, `phone_number`, `days_of_week`, `daily_start`, `daily_end`, `vacation_start`,
1184
-                                              `vacation_end`, `message_text` FROM `*PREFIX*sms_relent_autorply` WHERE `phone_number` = ?');
1185
-        $getarplresult = $getarpl->execute([$phoneNumber]);
1186
-        $crntarpl = $getarplresult->fetch();
1187
-        $getarplresult->closeCursor();
1188
-
1189
-        if ($getarplresult && !$crntarpl) {
1190
-
1191
-	    $insertpharpl = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_autorply` (`user_id`, `saved_by_dsplname`, `phone_number`, `days_of_week`, 
1192
-                                                       `daily_start`, `daily_end`, `vacation_start`, `vacation_end`, `message_text`) VALUES
1193
-                                                        (?, ?, ?, ?, ?, ?, ?, ?, ?)');
1194
-	    if ($insertpharpl->execute([$userId, $savedByDsplname, $phoneNumber, $daysOfWeek, $dailyStart, $dailyEnd, $vacationStart, $vacationEnd, $messageText])) { 
1195
-                $messagetosend = 'success'; 
1196
-            } else { 
1197
-                $messagetosend = 'failure'; 
1198
-            }
1199
-         
1200
-        } elseif ($getarplresult && $crntarpl) {
1201
-
1202
-            if ($this->groupManager->isAdmin($userId)) {
1203
-
1204
-                $updatepharpl = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_autorply` SET `user_id` = ?, `saved_by_dsplname` = ?, `days_of_week` = ?, `daily_start` = ?,
1205
-                                                           `daily_end` = ?, `vacation_start` = ?, `vacation_end` = ?, `message_text` = ?  WHERE `phone_number` = ?');
1206
-	        if ($updatephnmbrarpl = $updatepharpl->execute([$userId, $savedByDsplname, $daysOfWeek, $dailyStart, $dailyEnd, $vacationStart, $vacationEnd, $messageText,
1207
-                                                                $phoneNumber])) { 
1208
-                    $messagetosend = 'success';
1209
-                } else { 
1210
-                    $messagetosend = 'failure'; 
1211
-                }
1212
-	        $updatephnmbrarpl->closeCursor();
1213
-
1214
-            } else {
1215
-
1216
-                // Check if the current user is the author of the existing version of the auto-reply
1217
-                if ($userId == $crntarpl['user_id']) {
1218
-
1219
-                    $updatepharpl = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_autorply` SET `user_id` = ?, `saved_by_dsplname` = ?, `days_of_week` = ?, `daily_start` = ?,
1220
-                                                               `daily_end` = ?, `vacation_start` = ?, `vacation_end` = ?, `message_text` = ?  WHERE `phone_number` = ?');
1221
-	            if ($updatephnmbrarpl = $updatepharpl->execute([$userId, $savedByDsplname, $daysOfWeek, $dailyStart, $dailyEnd, $vacationStart, $vacationEnd, $messageText,
1222
-                                                                    $phoneNumber])) { 
1223
-                        $messagetosend = 'success';
1224
-                    } else { 
1225
-                        $messagetosend = 'failure'; 
1226
-                    }
1227
-	            $updatephnmbrarpl->closeCursor();
1228
-
1229
-                } else { $messagetosend = 'not allowed'; }
1230
-            }
1231
-        }
1232
-
1233
-        return $messagetosend;
1234
-    }
1235
-
1236
-
1237
-    /**
1238
-     * @NoAdminRequired
1239
-     */
1240
-    public function removeautoreplies($userId, $phoneNumber) {
1241
-
1242
-        if ($this->groupManager->isAdmin($userId)) {
1243
-
1244
-                // Remove the auto-reply for the given phone number
1245
-		$delarpl = $this->connection->prepare('
1246
-		       DELETE FROM `*PREFIX*sms_relent_autorply`
1247
-		       WHERE `phone_number` = ?');
1248
-                if ($delarplres = $delarpl->execute([$phoneNumber])) { $delarplresult = "success"; } else { $delarplresult = "failure"; }
1249
-		$delarplres->closeCursor();
1250
-
1251
-	        $updateindarpl = $this->connection->prepare('
1252
-                       SET @resetarpl = 0;
1253
-		       UPDATE `*PREFIX*sms_relent_autorply`
1254
-		       SET `id` = @resetarpl := @resetarpl + 1;
1255
-                       ALTER TABLE `*PREFIX*sms_relent_autorply` auto_increment=1;');
1256
-	        $updateindarplres = $updateindarpl->execute();
1257
-	        $updateindarplres->closeCursor();
1258
-
1259
-                return $delarplresult;
1260
-
1261
-        } else {
1262
-                // Get the author of the auto-reply for the given phone number
1263
-		$getarplusr = $this->connection->prepare('SELECT `user_id`, `phone_number` FROM `*PREFIX*sms_relent_autorply` WHERE `phone_number` = ?');
1264
-		$getarplusrres = $getarplusr->execute([$phoneNumber]);
1265
-		$crntarpldata = $getarplusrres->fetch();
1266
-                $crntarpluser = $crntarpldata['user_id'];
1267
-		$getarplusrres->closeCursor();
1268
-
1269
-                // If the author of the auto-reply is the current user, allow the removal
1270
-                if ($crntarpluser == $userId) {
1271
-
1272
-                    // Remove the auto-reply for the given phone number
1273
-		    $delarpl = $this->connection->prepare('
1274
-		           DELETE FROM `*PREFIX*sms_relent_autorply`
1275
-		           WHERE `phone_number` = ?');
1276
-                    if ($delarplres = $delarpl->execute([$phoneNumber])) { $delarplresult = "success"; } else { $delarplresult = "failure"; }
1277
-		    $delarplres->closeCursor();
1278
-
1279
-	            $updateindarpl = $this->connection->prepare('
1280
-                           SET @resetarpl = 0;
1281
-		           UPDATE `*PREFIX*sms_relent_autorply`
1282
-		           SET `id` = @resetarpl := @resetarpl + 1;
1283
-                           ALTER TABLE `*PREFIX*sms_relent_autorply` auto_increment=1;');
1284
-	            $updateindarplres = $updateindarpl->execute();
1285
-	            $updateindarplres->closeCursor();
1286
-
1287
-                    return $delarplresult;
1288
-
1289
-                } else { 
1290
-                    return $delarplresult = 'not allowed';
1291
-                }
1292
-        }
1293
-    }
1294
-
1295
-
1296
-     public function getadminsettings($userId) {
1297
-
1298
-        if ($this->groupManager->isAdmin($userId)) {
1299
-
1300
-	    // Get the 'show_all_messages' option for the current admin
1301
-	    $getsettingsadm = $this->connection->prepare('SELECT `user_id`, `show_all_messages` FROM `*PREFIX*sms_relent_settings` WHERE `user_id` = ?');
1302
-	    $getadmsetresult = $getsettingsadm->execute([$userId]);
1303
-	    $settingsfdbadm = $getadmsetresult->fetch();
1304
-	    $getadmsetresult->closeCursor();
1305
-
1306
-	    if ($settingsfdbadm) {
1307
-
1308
-		    // Get the Display Name of the current admin
1309
-		    $getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?');
1310
-		    $getacdatadnres = $getacdatadn->execute([$userId, 'displayname']);
1311
-		    $acdatausrdnadm = $getacdatadnres->fetch();
1312
-		    $cruserdname = $acdatausrdnadm['value'];
1313
-		    $getacdatadnres->closeCursor();
1314
-
1315
-		    // Get all the restrictions on phone numbers
1316
-		    $getrestr = $this->connection->prepare('SELECT `saved_by_dsplname`, `phone_number`, `groups`, `users` FROM `*PREFIX*sms_relent_restrict`');
1317
-		    $getrestres = $getrestr->execute();
1318
-
1319
-		    $restrictedArr = [];
1320
-		    while ($restrfetched = $getrestres->fetch()) {
1321
-		           $restrictedArr[] = $restrfetched;
1322
-		    }
1323
-		    $getrestres->closeCursor();
1324
-
1325
-		    if ($restrictedArr) { $restrictedUsers = $restrictedArr; } else { $restrictedUsers = ''; }
1326
-
1327
-		    // Get the name of all groups
1328
-		    $getgroups = $this->connection->prepare('SELECT `gid`, `displayname` FROM `*PREFIX*groups`');
1329
-		    $getgroupsres = $getgroups->execute();
1330
-
1331
-		    $groupsArr = [];
1332
-		    while ($groupsfetched = $getgroupsres->fetch()) {
1333
-		           $groupsArr[] = $groupsfetched;
1334
-		    }
1335
-		    $getgroupsres->closeCursor();
1336
-
1337
-		    if ($groupsArr) { $allgroups = $groupsArr; } else { $allgroups = ''; }
1338
-
1339
-
1340
-		    // Get the name of all users
1341
-		    $getusers = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ?');
1342
-		    $getusersres = $getusers->execute(['displayname']);
1343
-
1344
-		    $usersArr = [];
1345
-		    while ($usersfetched = $getusersres->fetch()) {
1346
-		           $usersArr[] = $usersfetched;
1347
-		    }
1348
-		    $getusersres->closeCursor();
1349
-
1350
-		    if ($usersArr) { $allusers = $usersArr; } else { $allusers = ''; }
1351
-
1352
-
1353
-		    $settingsadm = ['show_all_messages' => $settingsfdbadm['show_all_messages'], 'admdisplayname' => $cruserdname, 'restrictions' => $restrictedUsers, 
1354
-		                    'allgroups' => $allgroups, 'allusers' => $allusers];
1355
-
1356
-		    return $settingsadm;
1357
-	    }
1358
-        }
1359
-     }
1360
-
1361
-
1362
-     /**
1363
-      * @NoAdminRequired
1364
-      *
1365
-      */
1366
-     public function updatesettings($userId, $telapiKey, $telPubKey, $telapiUrlRec, $telapiUrl, $messagingProfileId, $nexapiKey, $nexapiSecret, $nexapiUrlRec, $nexapiUrl,
1367
-                                    $telSenderName, $nexSenderName, $messagesperpage, $getNotify, $notificationEmail, $getsmsinemail, $twilapiKey, $twilapiSecret, 
1368
-                                    $twilapiUrlRec, $twilapiUrl, $twilSenderName, $flowapiKey, $flowapiSecret, $flowapiUrlRec, $flowapiUrl, $showDisplayNames) {
1369
-
1370
-        $upsettings = $this->connection->prepare('
1371
-                   SELECT `id`, `user_id`, `telapi_key`, `tel_pub_key`, `telapi_url_rec`, `telapi_url`, `messaging_profile_id`, `nexapi_key`, `nexapi_secret`, `nexapi_url_rec`,
1372
-                          `nexapi_url`, `tel_sender_name`, `nex_sender_name`, `messagesperpage`, `get_notify`, `notification_email`, `getsmsinemail`, `twilapi_key`, `twilapi_secret`,
1373
-                          `twilapi_url_rec`, `twilapi_url`, `twil_sender_name`, `flowapi_key`, `flowapi_secret`, `flowapi_url_rec`, `flowapi_url`, `show_display_names`
1374
-		   FROM  `*PREFIX*sms_relent_settings`
1375
-		   WHERE `user_id` = ?');
1376
-
1377
-        $resultstng = $upsettings->execute([$userId]);
1378
-
1379
-        $rowup = $resultstng->fetch();
1380
-
1381
-        $resultstng->closeCursor();
1382
-
1383
-        if ($resultstng && !$rowup) {
1384
-
1385
-	    if ($telapiKey != '') {
1386
-	        $telapikeystrenc = $this->crypto->encrypt($telapiKey);             
1387
-	    } else { $telapikeystrenc = ''; }
1388
-
1389
-	    if ($telPubKey != '') {
1390
-	        $telpubkeystrenc =  $this->crypto->encrypt($telPubKey);             
1391
-	    } else { $telpubkeystrenc = ''; }
1392
-
1393
-	    if ($messagingProfileId != '') {
1394
-	        $messagingprofenc = $this->crypto->encrypt($messagingProfileId);             
1395
-	    } else { $messagingprofenc = ''; }
1396
-
1397
-	    if ($nexapiKey != '') {
1398
-	        $nexapikeystrenc = $this->crypto->encrypt($nexapiKey);             
1399
-	    } else { $nexapikeystrenc = ''; }
1400
-
1401
-	    if ($nexapiSecret != '') {
1402
-	        $nexapisecretstrenc = $this->crypto->encrypt($nexapiSecret);             
1403
-	    } else { $nexapisecretstrenc = ''; }
1404
-
1405
-	    if ($twilapiKey != '') {
1406
-	        $twilapikeystrenc = $this->crypto->encrypt($twilapiKey);             
1407
-	    } else { $twilapikeystrenc = ''; }
1408
-
1409
-	    if ($twilapiSecret != '') {
1410
-	        $twilapisecretstrenc = $this->crypto->encrypt($twilapiSecret);             
1411
-	    } else { $twilapisecretstrenc = ''; }
1412
-
1413
-	    if ($flowapiKey != '') {
1414
-	        $flowapikeystrenc = $this->crypto->encrypt($flowapiKey);             
1415
-	    } else { $flowapikeystrenc = ''; }
1416
-
1417
-	    if ($flowapiSecret != '') {
1418
-	        $flowapisecretstrenc = $this->crypto->encrypt($flowapiSecret);             
1419
-	    } else { $flowapisecretstrenc = ''; }
1420
-
1421
-	    $sql = $this->connection->prepare('
1422
-				INSERT INTO `*PREFIX*sms_relent_settings`
1423
-					(`user_id`, `telapi_key`, `tel_pub_key`, `telapi_url_rec`, `telapi_url`, `messaging_profile_id`, `nexapi_key`, `nexapi_secret`, `nexapi_url_rec`, 
1424
-	                                 `nexapi_url`, `tel_sender_name`, `nex_sender_name`, `messagesperpage`, `get_notify`, `notification_email`, `getsmsinemail`, `twilapi_key`, 
1425
-	                                 `twilapi_secret`, `twilapi_url_rec`, `twilapi_url`, `twil_sender_name`, `flowapi_key`, `flowapi_secret`, `flowapi_url_rec`, `flowapi_url`,
1426
-                                         `show_display_names`)
1427
-				VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
1428
-			');
1429
-	    $sql->execute([$userId, $telapikeystrenc, $telpubkeystrenc, $telapiUrlRec, $telapiUrl, $messagingprofenc, $nexapikeystrenc, $nexapisecretstrenc, $nexapiUrlRec, $nexapiUrl, 
1430
-	                   $telSenderName, $nexSenderName, $messagesperpage, $getNotify, $notificationEmail, $getsmsinemail, $twilapikeystrenc, $twilapisecretstrenc, $twilapiUrlRec, 
1431
-	                   $twilapiUrl, $twilSenderName, $flowapikeystrenc, $flowapisecretstrenc, $flowapiUrlRec, $flowapiUrl, $showDisplayNames]);
1432
-
1433
-        } elseif ($resultstng && $rowup) {
1434
-
1435
-	    // Check if the value of the field is the placeholder or an empty string
1436
-	    if ($telapiKey != '' && $telapiKey != "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
1437
-	        $telapikeystrenc = $this->crypto->encrypt($telapiKey);                
1438
-	    } elseif ($telapiKey == "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
1439
-	        $telapikeystrenc = $rowup['telapi_key'];
1440
-	    } elseif ($telapiKey == '') {
1441
-	        $telapikeystrenc = '';
1442
-	    }
1443
-
1444
-	    if ($telPubKey != '' && $telPubKey != "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
1445
-	        $telpubkeystrenc = $this->crypto->encrypt($telPubKey);                
1446
-	    } elseif ($telPubKey == "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
1447
-	        $telpubkeystrenc = $rowup['tel_pub_key'];
1448
-	    } elseif ($telPubKey == '') {
1449
-	        $telpubkeystrenc = '';
1450
-	    }
1451
-
1452
-	    if ($messagingProfileId != '' && $messagingProfileId != "%20%20%20%20%20%20%20%20%20%20%20%20") {
1453
-	        $messagingprofenc = $this->crypto->encrypt($messagingProfileId);                
1454
-	    } elseif ($messagingProfileId == "%20%20%20%20%20%20%20%20%20%20%20%20") {
1455
-	        $messagingprofenc = $rowup['messaging_profile_id'];
1456
-	    } elseif ($messagingProfileId == '') {
1457
-	        $messagingprofenc = '';
1458
-	    }
1459
-
1460
-	    if ($nexapiKey != '' && $nexapiKey != "%20%20%20%20%20%20%20%20%20") {
1461
-	        $nexapikeystrenc = $this->crypto->encrypt($nexapiKey);                
1462
-	    } elseif ($nexapiKey == "%20%20%20%20%20%20%20%20%20") {
1463
-	        $nexapikeystrenc = $rowup['nexapi_key'];
1464
-	    } elseif ($nexapiKey == '') {
1465
-	        $nexapikeystrenc = '';
1466
-	    }
1467
-
1468
-	    if ($twilapiKey != '' && $twilapiKey != "%20%20%20%20%20%20%20%20%20") {
1469
-	        $twilapikeystrenc = $this->crypto->encrypt($twilapiKey);                
1470
-	    } elseif ($twilapiKey == "%20%20%20%20%20%20%20%20%20") {
1471
-	        $twilapikeystrenc = $rowup['twilapi_key'];
1472
-	    } elseif ($twilapiKey == '') {
1473
-	        $twilapikeystrenc = '';
1474
-	    }
1475
-
1476
-	    if ($flowapiKey != '' && $flowapiKey != "%20%20%20%20%20%20%20%20%20") {
1477
-	        $flowapikeystrenc = $this->crypto->encrypt($flowapiKey);                
1478
-	    } elseif ($flowapiKey == "%20%20%20%20%20%20%20%20%20") {
1479
-	        $flowapikeystrenc = $rowup['flowapi_key'];
1480
-	    } elseif ($flowapiKey == '') {
1481
-	        $flowapikeystrenc = '';
1482
-	    }
1483
-
1484
-	    if ($nexapiSecret != '' && $nexapiSecret != "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
1485
-	        $nexapisecretstrenc = $this->crypto->encrypt($nexapiSecret);                
1486
-	    } elseif ($nexapiSecret == "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
1487
-	        $nexapisecretstrenc = $rowup['nexapi_secret'];
1488
-	    } elseif ($nexapiSecret == '') {
1489
-	        $nexapisecretstrenc = '';
1490
-	    }
1491
-
1492
-	    if ($twilapiSecret != '' && $twilapiSecret != "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
1493
-	        $twilapisecretstrenc = $this->crypto->encrypt($twilapiSecret);                
1494
-	    } elseif ($twilapiSecret == "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
1495
-	        $twilapisecretstrenc = $rowup['twilapi_secret'];
1496
-	    } elseif ($twilapiSecret == '') {
1497
-	        $twilapisecretstrenc = '';
1498
-	    }
1499
-
1500
-	    if ($flowapiSecret != '' && $flowapiSecret != "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
1501
-	        $flowapisecretstrenc = $this->crypto->encrypt($flowapiSecret);                
1502
-	    } elseif ($flowapiSecret == "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
1503
-	        $flowapisecretstrenc = $rowup['flowapi_secret'];
1504
-	    } elseif ($flowapiSecret == '') {
1505
-	        $flowapisecretstrenc = '';
1506
-	    }
1507
-
1508
-	    $sqlupdatedb = $this->connection->prepare('
1509
-			UPDATE `*PREFIX*sms_relent_settings`
1510
-			SET `telapi_key` = ?, `tel_pub_key` = ?, `telapi_url_rec` = ?, `telapi_url` = ?, `messaging_profile_id` = ?, `nexapi_key` = ?, `nexapi_secret` = ?,
1511
-	                    `nexapi_url_rec` = ?, `nexapi_url` = ?, `tel_sender_name` = ?, `nex_sender_name` = ?, `messagesperpage` = ?, `get_notify` = ?, `notification_email` = ?,
1512
-	                    `getsmsinemail` = ?, `twilapi_key` = ?, `twilapi_secret` = ?, `twilapi_url_rec` = ?, `twilapi_url` = ?, `twil_sender_name` = ?, `flowapi_key` = ?, 
1513
-	                    `flowapi_secret` = ?, `flowapi_url_rec` = ?, `flowapi_url` = ?, `show_display_names` = ?
1514
-	                WHERE `user_id` = ?');
1515
-	    $updateRes = $sqlupdatedb->execute([$telapikeystrenc, $telpubkeystrenc, $telapiUrlRec, $telapiUrl, $messagingprofenc, $nexapikeystrenc, $nexapisecretstrenc, $nexapiUrlRec,
1516
-	                                        $nexapiUrl, $telSenderName, $nexSenderName, $messagesperpage, $getNotify, $notificationEmail, $getsmsinemail, $twilapikeystrenc, 
1517
-	                                        $twilapisecretstrenc, $twilapiUrlRec, $twilapiUrl, $twilSenderName, $flowapikeystrenc, $flowapisecretstrenc, $flowapiUrlRec, 
1518
-	                                        $flowapiUrl, $showDisplayNames, $userId]);
1519
-	    $updateRes->closeCursor();
1520
-
1521
-	}
1522
-     }
1523
-
1524
-
1525
-    public function updateadminsettings($userId, $showAllMessages) {
1526
-
1527
-        if ($this->groupManager->isAdmin($userId)) {
1528
-
1529
-            $upsettingsadm = $this->connection->prepare('SELECT `id`, `user_id`, `show_all_messages` FROM `*PREFIX*sms_relent_settings` WHERE `user_id` = ?');
1530
-
1531
-            $resultstngadm = $upsettingsadm->execute([$userId]);
1532
-
1533
-            $rowupadm = $resultstngadm->fetch();
1534
-
1535
-            $resultstngadm->closeCursor();
1536
-
1537
-            if ($resultstngadm && !$rowupadm) {
1538
-
1539
-	        $sqladm = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_settings` (`user_id`, `show_all_messages`) VALUES (?, ?)');
1540
-	        $sqladm->execute([$userId, $showAllMessages]);
1541
-
1542
-            } elseif ($resultstngadm && $rowupadm) {
1543
-
1544
-	        $sqlupdatedbadm = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_settings` SET `show_all_messages` = ? WHERE `user_id` = ?');
1545
-	        $updateResadm = $sqlupdatedbadm->execute([$showAllMessages, $userId]);
1546
-	        $updateResadm->closeCursor();
1547
-            }
1548
-        }
1549
-    }
1550
-
1551
-    /**
1552
-     * @NoAdminRequired
1553
-     */
1554
-    public function getapicredentials($userId) {
1555
-
1556
-        $sqlcr = $this->connection->prepare('
1557
-              SELECT `id`, `user_id`, `telapi_key`, `tel_pub_key`, `telapi_url_rec`, `telapi_url`, `messaging_profile_id`, `nexapi_key`, `nexapi_secret`, `nexapi_url_rec`, `nexapi_url`,
1558
-                     `tel_sender_name`, `nex_sender_name`, `messagesperpage`, `get_notify`, `notification_email`, `getsmsinemail`, `twilapi_key`, `twilapi_secret`, `twilapi_url_rec`, 
1559
-                     `twilapi_url`, `twil_sender_name`, `flowapi_key`, `flowapi_secret`, `flowapi_url_rec`, `flowapi_url` FROM `*PREFIX*sms_relent_settings`
1560
-	      WHERE `user_id` = ?');
1561
-	$resultcr = $sqlcr->execute([$userId]);
1562
-        $settingsfrdb = $resultcr->fetch();
1563
-        $resultcr->closeCursor();
1564
-
1565
-        if (($settingsfrdb['telapi_key'] != '') && ($settingsfrdb['telapi_key'] != 'undefined') && ($settingsfrdb['telapi_key'] != null)) { 
1566
-             $telapikeystrdec = $this->crypto->decrypt($settingsfrdb['telapi_key']); 
1567
-        } else { $telapikeystrdec = ''; }
1568
-
1569
-        if (($settingsfrdb['tel_pub_key'] != '') && ($settingsfrdb['tel_pub_key'] != 'undefined') && ($settingsfrdb['tel_pub_key'] != null)) {
1570
-             $telpubkeystrdec = $this->crypto->decrypt($settingsfrdb['tel_pub_key']); 
1571
-        } else { $telpubkeystrdec = ''; }
1572
-
1573
-        $telapiurlrec = $settingsfrdb['telapi_url_rec'];
1574
-        $telapiurlstr = $settingsfrdb['telapi_url'];
1575
-
1576
-        if (($settingsfrdb['messaging_profile_id'] != '') && ($settingsfrdb['messaging_profile_id'] != 'undefined') && ($settingsfrdb['messaging_profile_id'] != null)) {
1577
-             $messagingprofid = $this->crypto->decrypt($settingsfrdb['messaging_profile_id']); 
1578
-        } else { $messagingprofid = ''; }
1579
-
1580
-        if (($settingsfrdb['nexapi_key'] != '') && ($settingsfrdb['nexapi_key'] != 'undefined') && ($settingsfrdb['nexapi_key'] != null)) { 
1581
-             $nexapikeystr = $this->crypto->decrypt($settingsfrdb['nexapi_key']); 
1582
-        } else { $nexapikeystr = ''; }
1583
-
1584
-        if (($settingsfrdb['nexapi_secret'] != '') && ($settingsfrdb['nexapi_secret'] != 'undefined') && ($settingsfrdb['nexapi_secret'] != null)) { 
1585
-             $nexapisecretstr = $this->crypto->decrypt($settingsfrdb['nexapi_secret']); 
1586
-        } else { $nexapisecretstr = ''; }
1587
-
1588
-        if (($settingsfrdb['twilapi_key'] != '') && ($settingsfrdb['twilapi_key'] != 'undefined') && ($settingsfrdb['twilapi_key'] != null)) { 
1589
-             $twilapikeystr = $this->crypto->decrypt($settingsfrdb['twilapi_key']); 
1590
-        } else { $twilapikeystr = ''; }
1591
-
1592
-        if (($settingsfrdb['twilapi_secret'] != '') && ($settingsfrdb['twilapi_secret'] != 'undefined') && ($settingsfrdb['twilapi_secret'] != null)) { 
1593
-             $twilapisecretstr = $this->crypto->decrypt($settingsfrdb['twilapi_secret']); 
1594
-        } else { $twilapisecretstr = ''; }
1595
-
1596
-        if (($settingsfrdb['flowapi_key'] != '') && ($settingsfrdb['flowapi_key'] != 'undefined') && ($settingsfrdb['flowapi_key'] != null)) { 
1597
-             $flowapikeystr = $this->crypto->decrypt($settingsfrdb['flowapi_key']); 
1598
-        } else { $flowapikeystr = ''; }
1599
-
1600
-        if (($settingsfrdb['flowapi_secret'] != '') && ($settingsfrdb['flowapi_secret'] != 'undefined') && ($settingsfrdb['flowapi_secret'] != null)) { 
1601
-             $flowapisecretstr = $this->crypto->decrypt($settingsfrdb['flowapi_secret']); 
1602
-        } else { $flowapisecretstr = ''; }
1603
-
1604
-        $nexapiurlrecsms = $settingsfrdb['nexapi_url_rec'];
1605
-        $nexapiurldelrcpt = $settingsfrdb['nexapi_url'];
1606
-        $twilapiurlrecsms = $settingsfrdb['twilapi_url_rec'];
1607
-        $twilapiurldelrcpt = $settingsfrdb['twilapi_url'];
1608
-        $flowapiurlrecsms = $settingsfrdb['flowapi_url_rec'];
1609
-        $flowapiurldelrcpt = $settingsfrdb['flowapi_url'];
1610
-        $gettelsendername = $settingsfrdb['tel_sender_name'];
1611
-        $getnexsendername = $settingsfrdb['nex_sender_name'];
1612
-        $gettwilsendername = $settingsfrdb['twil_sender_name'];
1613
-        $getmessagesperpage = $settingsfrdb['messagesperpage'];
1614
-        $getnotification = $settingsfrdb['get_notify'];
1615
-        $notifyemail = $settingsfrdb['notification_email'];
1616
-        $includesmsinemail = $settingsfrdb['getsmsinemail'];
1617
-
1618
-        return [$telapikeystrdec, $telpubkeystrdec, $telapiurlrec, $telapiurlstr, $messagingprofid, $nexapikeystr, $nexapisecretstr, $nexapiurlrecsms, $nexapiurldelrcpt,
1619
-                $gettelsendername, $getnexsendername, $getmessagesperpage, $getnotification, $notifyemail, $includesmsinemail, $twilapikeystr, $twilapisecretstr, $twilapiurlrecsms, 
1620
-                $twilapiurldelrcpt, $gettwilsendername,  $flowapikeystr, $flowapisecretstr, $flowapiurlrecsms, $flowapiurldelrcpt];
1621
-    }
1622
-
1623
-    /**
1624
-     * @NoAdminRequired
1625
-     */
1626
-    public function getuserbytelrecwhurl($recsmswebhookurl) {
1627
-
1628
-        $sqlrec = $this->connection->prepare('SELECT `user_id`, `telapi_url_rec` FROM `*PREFIX*sms_relent_settings` WHERE `telapi_url_rec` = ?');
1629
-	$result = $sqlrec->execute([$recsmswebhookurl]);
1630
-        $datafromdb = $result->fetch();
1631
-        $result->closeCursor();
1632
-        $ncusertelrec = $datafromdb['user_id'];
1633
-
1634
-        return $ncusertelrec;
1635
-    }
1636
-
1637
-    /**
1638
-     * @NoAdminRequired
1639
-     */
1640
-    public function getuserbyteldelrwhurl($delsmswebhookurl) {
1641
-
1642
-        $sqldel = $this->connection->prepare('SELECT `user_id`, `telapi_url` FROM `*PREFIX*sms_relent_settings` WHERE `telapi_url` = ?');
1643
-	$ressqldel = $sqldel->execute([$delsmswebhookurl]);
1644
-        $datafromdbdel = $ressqldel->fetch();
1645
-        $ressqldel->closeCursor();
1646
-        $ncuserteldel = $datafromdbdel['user_id'];
1647
-
1648
-        return $ncuserteldel;
1649
-    }
1650
-
1651
-    /**
1652
-     * @NoAdminRequired
1653
-     */
1654
-    public function getuserbyplivorecwhurl($plivorecurl) {
1655
-
1656
-        $sqlrecpl = $this->connection->prepare('SELECT `user_id`, `nexapi_url_rec` FROM `*PREFIX*sms_relent_settings` WHERE `nexapi_url_rec` = ?');
1657
-	$plresrecsql = $sqlrecpl->execute([$plivorecurl]);
1658
-        $pldatafromdb = $plresrecsql->fetch();
1659
-        $plresrecsql->closeCursor();
1660
-        $ncuserplrec = $pldatafromdb['user_id'];
1661
-
1662
-        return $ncuserplrec;
1663
-    }
1664
-
1665
-    /**
1666
-     * @NoAdminRequired
1667
-     */
1668
-    public function getuserbyplivodelrwhurl($plivodrurl) {
1669
-
1670
-        $sqldrpl = $this->connection->prepare('SELECT `user_id`, `nexapi_url` FROM `*PREFIX*sms_relent_settings` WHERE `nexapi_url` = ?');
1671
-	$ressqldelrec = $sqldrpl->execute([$plivodrurl]);
1672
-        $datafromdbdr = $ressqldelrec->fetch();
1673
-        $ressqldelrec->closeCursor();
1674
-        $ncuserplivodel = $datafromdbdr['user_id'];
1675
-
1676
-        return $ncuserplivodel;
1677
-    }
1678
-
1679
-    /**
1680
-     * @NoAdminRequired
1681
-     */
1682
-    public function getuserbytwilrecwhurl($twilrecurl) {
1683
-
1684
-        $sqlrectw = $this->connection->prepare('SELECT `user_id`, `twilapi_url_rec` FROM `*PREFIX*sms_relent_settings` WHERE `twilapi_url_rec` = ?');
1685
-	$twresrecsql = $sqlrectw->execute([$twilrecurl]);
1686
-        $twdatafromdb = $twresrecsql->fetch();
1687
-        $twresrecsql->closeCursor();
1688
-        $ncusertwrec = $twdatafromdb['user_id'];
1689
-
1690
-        return $ncusertwrec;
1691
-    }
1692
-
1693
-    /**
1694
-     * @NoAdminRequired
1695
-     */
1696
-    public function getuserbytwildelrwhurl($twildrurl) {
1697
-
1698
-        $sqldrtw = $this->connection->prepare('SELECT `user_id`, `twilapi_url` FROM `*PREFIX*sms_relent_settings` WHERE `twilapi_url` = ?');
1699
-	$ressqldelrectw = $sqldrtw->execute([$twildrurl]);
1700
-        $datafromdbdrtw = $ressqldelrectw->fetch();
1701
-        $ressqldelrectw->closeCursor();
1702
-        $ncusertwildel = $datafromdbdrtw['user_id'];
1703
-
1704
-        return $ncusertwildel;
1705
-    }
1706
-
1707
-    /**
1708
-     * @NoAdminRequired
1709
-     */
1710
-    public function getuserbyflowrecwhurl($flowrecurl) {
1711
-
1712
-        $sqlrecfl = $this->connection->prepare('SELECT `user_id`, `flowapi_url_rec` FROM `*PREFIX*sms_relent_settings` WHERE `flowapi_url_rec` = ?');
1713
-	$flresrecsql = $sqlrecfl->execute([$flowrecurl]);
1714
-        $fldatafromdb = $flresrecsql->fetch();
1715
-        $flresrecsql->closeCursor();
1716
-        $ncuserflrec = $fldatafromdb['user_id'];
1717
-
1718
-        return $ncuserflrec;
1719
-    }
1720
-
1721
-    /**
1722
-     * @NoAdminRequired
1723
-     */
1724
-    public function getuserbyflowdelrwhurl($flowdrurl) {
1725
-
1726
-        $sqldrfl = $this->connection->prepare('SELECT `user_id`, `flowapi_url` FROM `*PREFIX*sms_relent_settings` WHERE `flowapi_url` = ?');
1727
-	$ressqldelrecfl = $sqldrfl->execute([$flowdrurl]);
1728
-        $datafromdbdrfl = $ressqldelrecfl->fetch();
1729
-        $ressqldelrecfl->closeCursor();
1730
-        $ncuserflowdel = $datafromdbdrfl['user_id'];
1731
-
1732
-        return $ncuserflowdel;
1733
-    }
1734
-}
1735 0
deleted file mode 100644
... ...
@@ -1,262 +0,0 @@
1
-<?php
2
-/**
3
- * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
4
- *
5
- * @author Double Bastion LLC
6
- *
7
- * @license GNU AGPL version 3 or any later version
8
- *
9
- * This program is free software; you can redistribute it and/or
10
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
11
- * License as published by the Free Software Foundation; either
12
- * version 3 of the License, or any later version.
13
- *
14
- * This program is distributed in the hope that it will be useful,
15
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
18
- *
19
- * You should have received a copy of the GNU Affero General Public
20
- * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
- *
22
- */
23
-
24
-declare(strict_types=1);
25
-
26
-script('sms_relentless', 'sendsms');
27
-script('sms_relentless', 'showsmstables');
28
-script('sms_relentless', 'deleteoldsms');
29
-style('sms_relentless', 'style');
30
-
31
-?>
32
-
33
-
34
-<div id="smsrelentless_vbar">
35
-
36
-       <div id="currentbaldiv" class="cllridcls">
37
-            <div id="showsum">Balance:</div>
38
-            <select id="smsprovider" class="optselectprov">
39
-                    <option value="" selected="selected" disabled hidden class="selectsmsprov">select</option>
40
-                    <option value="Telnyx" class='selectsmsprov'>Telnyx</option>
41
-                    <option value="Plivo" class='selectsmsprov'>Plivo</option>
42
-                    <option value="Twilio" class='selectsmsprov'>Twilio</option>
43
-                    <option value="Flowroute" class='selectsmsprov'>Flowroute</option>
44
-            </select>           
45
-            <span id="currentbalance"></span>
46
-            <div class="tooltipbalanceid">
47
-                <div id="infobalance">i</div>
48
-                <span class="balancetooltip">To see the current balance, select a provider from the drop-down list. The balance will be rounded to 3 decimal places and the
49
-                      currency will be that of the respective account. You can see Telnyx prices <a href="https://telnyx.com/pricing/messaging" style="color:#1b60ba"
50
-                      target="_blank" rel="noreferrer noopener">here</a>, Plivo prices <a href="https://www.plivo.com/sms/pricing/us/" style="color:#1b60ba" target="_blank"
51
-                      rel="noreferrer noopener">here</a>, Twilio prices <a href="https://www.twilio.com/sms/pricing/ro" style="color:#1b60ba" target="_blank" 
52
-                      rel="noreferrer noopener">here</a> and Flowroute prices <a href="https://flowroute.com/pricing-details/"  style="color:#1b60ba" target="_blank" 
53
-                      rel="noreferrer noopener">here</a>.
54
-                </span>
55
-            </div>
56
-       </div>
57
-
58
-       <div id="smsnumbersdiv" class="cllridcls">
59
-            <div id="pickid">Set ID:</div>
60
-            <select id="currentsmsnmbrs" class="optselectsmsnb">
61
-                  <option value='' selected="selected" disabled hidden class="optselectsmsnb">click refresh button</option>
62
-            </select>
63
-            <button id="selectcalleridbttn" title="Refresh the list of Sender IDs."></button>
64
-            <div class="tooltipsetid">
65
-                <div id="infotipid">i</div>
66
-                <div id="setcalleridtp">
67
-                    <span class="calleridtooltip">First refresh the list, then select a Sender ID from the drop-down list. The Sender ID is the 'From' field that is displayed on
68
-                        the phone of the receiver, when they receive your message. It can be a phone number or an alphanumeric sequence. You must choose as Sender ID one of
69
-                        your numbers, or an alphanumeric sequence that you have entered in Personal settings > SMS Relentless > 'Telnyx/Plivo/Twilio alphanumeric Sender ID' field. 
70
-                        <font style="color:#aa2e4b">There are local restrictions based on market regulations or carrier-specific, that can prevent SMS
71
-                        messages to reach their destination because of their Sender ID.</font> For example, in USA and Canada, incoming SMS messages with alphanumeric Sender IDs
72
-                        are not accepted. All messages to phone numbers in USA and Canada must have a phone number as Sender ID. Before sending SMS messages to a country,
73
-                        it's recommended to read about the <a href="https://support.twilio.com/hc/en-us/articles/223133767-International-support-for-Alphanumeric-Sender-ID" 
74
-                        style="color:#1b60ba" target="_blank" rel="noreferrer noopener">Sender ID restrictions</a> specific to that country. If you use alphanumeric Sender IDs, 
75
-                        there are even <a href="https://support.plivo.com/hc/en-us/articles/360048268071" style="color:#1b60ba" target="_blank" rel="noreferrer noopener">countries</a> 
76
-                        that require that you preregister your Sender ID. If you use Telnyx, to be able to select a phone number as Sender ID, you must have a 'Messaging Profile' 
77
-                        associated with that phone number.
78
-                    </span>
79
-                </div>
80
-            </div>
81
-       </div>
82
-
83
-       <div  class="srheader">
84
-            Enter the recipient's number as:
85
-       </div>
86
-       <div class="smsnbformat">
87
-            <a href="https://en.wikipedia.org/wiki/List_of_country_calling_codes#Alphabetical_order" style="color:#1b60ba"
88
-               target="_blank" rel="noreferrer noopener">CountryCallingCode</a><font style="color:#aa2e4b">PhoneNumber</font>
89
-       </div>
90
-       <div class="fortooltip"><font class="texttooltip">i</font>
91
-         <div id="tonmbrformat">
92
-            <span class="fortooltiptext">
93
-               For example, to send an SMS to the German number 1212121212, enter 491212121212, where 49 is the country calling code of Germany. The
94
-               <a href="https://en.wikipedia.org/wiki/List_of_country_calling_codes#Alphabetical_order"
95
-               style="color:#1b60ba" target="_blank" rel="noreferrer noopener">country calling code</a> must be always included, even if the SMS is sent locally. You don't need to add 
96
-               the '+' sign or '00' in front of the number. <font style="color:#aa2e4b">In different countries there are market regulations and restrictions that
97
-               can prevent certain SMS messages to reach their destination (such as when the text contains repetitive URLs) or can make them illegal (such as when sending messages that 
98
-               advertise money-lending services).</font> Before sending SMS messages to a country, it's recommended to read about the 
99
-               <a href="https://support.twilio.com/hc/en-us/articles/223133767-International-support-for-Alphanumeric-Sender-ID" style="color:#1b60ba" target="_blank" rel="noreferrer noopener">
100
-               restrictions</a> that apply to that country. To send the same message to multiple recipients, you can enter their phone numbers one after the other separated by comma, 
101
-               in the phone number field. If you want to send the same message to more than 10 phone numbers at once, it's recommended to upload a txt/csv file containing the recipients' 
102
-               phone numbers, by using the option from below. If you check that checkbox, you will be able to upload a file containing phone numbers.
103
-            </span>
104
-         </div>
105
-       </div>
106
-
107
-   <div id="smstodiv">
108
-       <input type="text" id="smsto" name="smsto" />
109
-   </div>
110
-
111
-   <div id="sendtomultiple">Upload file with phone numbers:</div><input type="checkbox" id="tomultchckbx" />
112
-
113
-   <div id="multiplerecivers">
114
-       <div class="fortooltipsec"><font class="texttooltip">i</font>
115
-          <div id="uploadfileinfo">
116
-          <span class="fortooltiptextsec">To send an SMS to a large number of recipients, upload a file containing the recipients' phone numbers.
117
-              Supported formats are txt and csv. The phone numbers can be separated by comma (,) , semicolon (;) , vertical bar (|) , or by new line (by listing one number per line).
118
-              The duplicate phone numbers will be automatically removed. If the numbers contain dots, hyphens or plus signs, they will be also automatically removed.
119
-              After uploading the file, enter the time interval in milliseconds (1 second has 1000 milliseconds) between two consecutive message sending requests,
120
-              in the text box from below. It's important to note that SMS providers impose restrictions upon the message sending rate and there are also country specific and 
121
-              carrier specific restrictions regarding the frequency of outgoing/incoming messages. For Telnyx, the allowed SMS sending rate for US or 
122
-              Canadian long code numbers (10 digit numbers) is 
123
-              <a href="https://support.telnyx.com/en/articles/96934-throughput-limit-for-outbound-long-code-sms" style="color:#1b60ba" target="_blank" rel="noreferrer noopener">1 
124
-              message per 6 seconds per number</a> . If you need a higher throughput per number, you can rent toll-free numbers (with sending rates of 20 messages per second per number)
125
-              or short codes (with sending rates of 1000 messages per second per number). For Plivo, if you have rented a US or Canadian 10 digit number, you can send SMS messages at 
126
-              a rate of <a href="https://support.plivo.com/hc/en-us/articles/360041314852-What-s-the-outgoing-rate-limit-for-SMS-messages-" style="color:#1b60ba" target="_blank" 
127
-              rel="noreferrer noopener">1 message per 4 seconds per number</a>. If you need a higher throughput, you can rent toll-free numbers (with rates of 10 messages per second per 
128
-              number) or short codes (with rates of 100 messages per second per number). For Twilio, a US or Canadian 10 digit number can send 
129
-              <a href="https://support.twilio.com/hc/en-us/articles/115002943027-Understanding-Twilio-Rate-Limits-and-Message-Queues" style="color:#1b60ba" target="_blank"
130
-              rel="noreferrer noopener">1 message per second</a>. If you need a higher throughput, you can send 3 messages per second per number with toll-free numbers, or 100 messages 
131
-              per second per number with short codes. For Flowroute, using a US or Canadian 10 digit number or toll-free number, you can send 
132
-              <a href="https://developer.flowroute.com/docs/flowroute-messaging-rate-limits/" style="color:#1b60ba" target="_blank" rel="noreferrer noopener">4 messages per second
133
-              per account</a> (accross all phone numbers). These sending rate limits don't necessarily apply when using non-US and non-Canadian phone numbers to send SMS messages to 
134
-              non-US and non-Canadian numbers. Also, in general, custom sending rates may be obtained by contacting Telnyx/Plivo/Twilio/Flowroute support. Starting from 2021, if you 
135
-              want to send A2P (<a href="https://www.plivo.com/docs/sms/concepts/terminology" style="color:#1b60ba" target="_blank" rel="noreferrer noopener">Application-To-Person</a>) 
136
-              SMS messages to phone numbers or from phone numbers belonging to certain carriers in the US, such as AT&T and T-Mobile, you will need to register your brand and your 
137
-              campaign via
138
-              <a href="https://support.telnyx.com/en/articles/3679260-frequently-asked-questions-about-10dlc" style="color:#1b60ba" target="_blank" rel="noreferrer noopener">Telnyx</a>/
139
-              <a href="https://support.plivo.com/hc/en-us/articles/4682352262809-How-to-Register-10DLC-Brands-and-Campaigns" style="color:#1b60ba" target="_blank" rel="noreferrer noopener">Plivo</a>/
140
-              <a href="https://support.twilio.com/hc/en-us/articles/1260801864489-How-do-I-register-to-use-A2P-10DLC-messaging-" style="color:#1b60ba" target="_blank" rel="noreferrer noopener">Twilio</a>/ 
141
-              <a href="https://support.flowroute.com/265034-Messaging-Guidelines---10DLC-Carrier-Fees-and-Registration" style="color:#1b60ba" target="_blank" rel="noreferrer noopener">Flowroute</a>. 
142
-              Registered campaigns also benefit from a much higher message sending rate, which differs from one use case to another. If you leave the text box from below empty, the 
143
-              application will try to send all the messages with the default sending rate of 1 message per second. If you send messages from a US or Canadian long code number and you 
144
-              surpass the limit of 1 message per 6 seconds for Telnyx or 1 message per 4 seconds for Plivo, or 1 message per 1 second for Twilio, or 4 messages per second for Flowroute,
145
-              Telnyx/Plivo/Twilio/Flowroute respectively will queue your messages and will send them at the specified rates in the order they were received. However, if you send a large 
146
-              number of messages, when the queue becomes full, new messages can be rejected and lost, therefore, to prevent message loss, it's recommended to set the right sending rate 
147
-              in the text box from below.
148
-          </span>
149
-          </div>
150
-       </div>
151
-       <div id="multsetrows">
152
-          <div id="fileuploadednm" class="fileuploadstl"></div>
153
-          <div class="uploadfiledv">
154
-              <form class="uploadflbt"  enctype="multipart/form-data" >
155
-                  <label for="uploadfileforsms" class="pfprompt"><span id="uploadflprmpt"><?php p($l->t('Upload the file ')) ?></span></label>
156
-                  <input id="uploadfileforsms" class="fileupload" name="uploadedtosms" type="file" />
157
-                  <label for="uploadfileforsms" class="button icon-upload svg" id="uploadfileforsms" </label>
158
-              </form>
159
-          </div>
160
-          <span id="sms_upload_msg"></span>
161
-          <span class="entertime">Enter the time interval between consecutive messages, in milliseconds:</span><input type="text"
162
-          id="multsmsinterval" placeholder="Eg.: 1000" />
163
-       </div>
164
-   </div>
165
-
166
-   <div id="entermessage">Enter message:</div>
167
-   <textarea id="smstext"  name="smstext" placeholder="Enter a message here, then press 'Send SMS'."></textarea>
168
-
169
-   <div class="maxmessagelength"><font class="texttooltip">i</font>
170
-       <div id="maxlengthinfo">
171
-           <span class="maxlengthtooltip">
172
-                The maximum length allowed for SMS messages using the standard GSM 03.38 encoding is 160 characters (fewer in some countries),
173
-                while for Unicode encoded messages is 70 characters. If you send an SMS message longer than 160 characters for standard GSM encoding or longer than 70 
174
-                characters for Unicode encoding, the message will be sent as a 'concatenated' message: it will be split into smaller pieces by Telnyx/Plivo/Twilio/Flowroute 
175
-                and it will be reassembled as one message at its destination. However, you will be charged for each piece as for a separate SMS. Thus, if the initial message 
176
-                is 385 GSM encoded characters in length, you will be charged for 3 SMS messages. The maximum number of characters per concatenated message is slightly smaller 
177
-                than the standard 160 for GSM encoded characters and 70 for Unicode, due to the inclusion of concatenation headers. Some symbols in the GSM 7-bit alphabet 
178
-                table (like "£" or "€") will count as two characters, therefore, not always 160 characters will fit into a single GSM encoded SMS message. The maximum length 
179
-                for MMS messages is different. MMS messages can be up to 1600 characters long.
180
-           </span>
181
-       </div>
182
-   </div>
183
-
184
-   <div id="char_count"><span id="countchnb"></span><span> characters</span></div>
185
-   <div id="mtextSize"><span id="textsizeinkb"></span><span> KB</span></div>
186
-
187
-   <div id="sendmediafl">
188
-        <span>Select file(s) to send as MMS:</span><input type="checkbox" id="mediafilechckbx" />
189
-   </div>
190
-
191
-   <div id="upmediafiles">
192
-
193
-       <div class="fortooltipfourth"><div id="infotipmms">i</div>
194
-          <div id="uploadmmfileinfo">
195
-             <span id="tooltiptextfourth">To send an MMS message, you can upload media files or pick them from Nextcloud.</span>
196
-          </div>
197
-       </div>
198
-
199
-       <div class="srheaderch">Choose the file(s) that you want to send as MMS:</div>
200
-
201
-          <div id="filestotsize">Total files size:<span id="filessizetext"></span> KB</div>
202
-
203
-          <div id="mmsfileuploadednm" class="fileuploadstl"></div>
204
-          <div class="uploadfiledv">
205
-               <form class="uploadflbt"  enctype="multipart/form-data" >
206
-                     <span id="uploadFile">Upload file</span>
207
-                     <input id="uploadfileformms" class="fileupload" name="uploadedtomms[]" type="file" multiple />
208
-                     <label for="uploadfileformms" class="button icon-upload svg" id="uploadfileformms" </label>
209
-               </form>
210
-          </div>
211
-
212
-       <span id="pf_upload_msg"></span>
213
-
214
-       <div id="filespickednc" class="filesfromnc"></div>
215
-  
216
-       <div id="pickfilesNext"><span id="pickFromNext">Pick from Nextcloud</span><button id="choosefilen"></button></div>
217
-
218
-       <span id="pf_choose_msg"></span>
219
-
220
-       <p class="pickedflnm"></p>
221
-
222
-   </div>
223
-
224
-   <input type="submit" id="submitsms" value="Send SMS" />
225
-   <span id="sms_submit_msg"></span>
226
-
227
-   <div id="dirbuttons">
228
-       <button id="receivedsmstableshow" class="opensmsfolder">Received SMS Messages</button>
229
-       <button id="sentsmstableshow" class="opensmsfolder">Sent SMS Messages</button>
230
-       <button id="groupedtableshow" class="opensmsfolder">Group Messages by Number</button>
231
-   </div>
232
-
233
-
234
-   <div id="deleteoldmssgs">Remove old messages:</div><input type="checkbox" id="deleteoldchckbox" />
235
-
236
-   <div id="deleteoldsms">
237
-       <div class="fortooltiptert"><font class="texttooltip">i</font>
238
-          <div id="deleteoldinfo">
239
-             <span class="fortooltiptexttert">Since this application records all incoming and outgoing SMS messages, in time, its database can become very large, which
240
-                 can slow it down. To avoid having to work with extremely large tables, it's recommended that you delete from time to time all the sent/received messages older than 
241
-                 a specified number of days (for example 180 days). All the messages deleted using the options from below will be preserved, because they will be saved as csv files
242
-                 before being deleted from the database. The csv files will contain all the data of the deleted messages, they will bear the date of the removal and they will be
243
-                 stored in the 'SMS_Relentless/ removed_sent_messages' and 'SMS_Relentless/ removed_received_messages' directories. Being structured as 'csv',
244
-                 the data can then be viewed and analyzed with other applications to create statistics, graphs etc. Therefore, as long as the 'csv' files are preserved,
245
-                 the deleted messages are not lost. (Please note that this 'save before delete' mechanism is not used when messages are deleted by selecting their respective table 
246
-                 rows and clicking on the 'Permanently delete' upper-left corner icon).
247
-          </span>
248
-          </div>
249
-       </div>
250
-       <div id="delsetrows">
251
-          <span class="deletesmsolder">Delete from the database all the <font style="color: #ba3555;">received</font> messages that are older than <input type="text" id="oldrecSmsInterval" title="Enter the number of days." /> days.</span>
252
-          <input type="submit" id="delOldrecSMS" value="Delete received messages" />
253
-          <span id="sms_deleterecmsg"></span><br><br>
254
-
255
-          <span class="deletesmsolder">Delete from the database all the <font style="color: #ba3555;">sent</font> messages that are older than </span><input type="text" id="oldsentSmsInterval" title="Enter the number of days."/>
256
-          <span class="deletesmsolder"> days.</span>
257
-          <input type="submit" id="delOldsentSMS" value="Delete sent messages" />
258
-          <span id="sms_deletesentmsg"></span>
259
-       </div>
260
-   </div>
261
-
262
-</div>
263 0
deleted file mode 100644
... ...
@@ -1,61 +0,0 @@
1
-<?php
2
-/**
3
- * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
4
- *
5
- * @author Double Bastion LLC
6
- *
7
- * @license GNU AGPL version 3 or any later version
8
- *
9
- * This program is free software; you can redistribute it and/or
10
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
11
- * License as published by the Free Software Foundation; either
12
- * version 3 of the License, or any later version.
13
- *
14
- * This program is distributed in the hope that it will be useful,
15
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
18
- *
19
- * You should have received a copy of the GNU Affero General Public
20
- * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
- *
22
- */
23
-
24
-declare(strict_types=1);
25
-
26
-script('sms_relentless', 'adminsettings');
27
-style('sms_relentless', 'style');
28
-
29
-?>
30
-
31
-<div id="sms_relentless_adm">
32
-
33
-        <div class="section">
34
-           <h2><?php p($l->t('SMS Relentless'));?></h2>
35
-           <p id="settings-dscr"><h3><?php p($l->t('Enter your options in the fields from below:')); ?></h3></p><br>
36
-           <div class="sms_followupsection">
37
-
38
-                <form id="admin_conf" action="#" >
39
-
40
-                   <p><label for="showallmessages" class="setlabeltext"><b>In my message tables, list all the sent/received messages of all the users, not only my messages:</b></label></p>
41
-                   <input type="checkbox" class="sms_rel_checkbox" id="showallmessages" name="showallmessages" autocomplete="false" /><br>
42
-
43
-                   <p><label for="restrNmbrAccess" class="setlabeltext"><b>Restrict access to the following phone numbers:</b></label></p><br>
44
-
45
-                   <table id="phoneNmbrRestr">
46
-
47
-                      <tr><th>Restriction Author</th><th id="phoneNumberTh">Phone Number</th><th>Groups Allowed</th><th style="max-width: 40px !important"></th><th>Users Allowed</th><th style="max-width: 40px !important"></th><th></th><th></th></tr>
48
-
49
-                   </table><br>
50
-
51
-                   <input type="hidden" id="user_id" name="user_id" />
52
-
53
-                   <input id="save_admin_settings" type="submit" value="<?php p($l->t('Save')) ?>" />
54
-
55
-                   <span id="smsr_save_msg"></span>
56
-
57
-               </form>
58
-           </div>
59
-        </div>
60
-</div>
61
-
62 0
deleted file mode 100644
... ...
@@ -1,242 +0,0 @@
1
-<?php
2
-/**
3
- * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
4
- *
5
- * @author Double Bastion LLC
6
- *
7
- * @license GNU AGPL version 3 or any later version
8
- *
9
- * This program is free software; you can redistribute it and/or
10
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
11
- * License as published by the Free Software Foundation; either
12
- * version 3 of the License, or any later version.
13
- *
14
- * This program is distributed in the hope that it will be useful,
15
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
18
- *
19
- * You should have received a copy of the GNU Affero General Public
20
- * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
- *
22
- */
23
-
24
-declare(strict_types=1);
25
-
26
-script('sms_relentless', 'settings');
27
-style('sms_relentless', 'style');
28
-
29
-?>
30
-
31
-<div id="sms_relentless_adm">
32
-        <div class="section">
33
-           <h2><?php p($l->t('SMS Relentless'));?></h2>
34
-           <p id="settings-dscr"><h3><?php p($l->t('Enter your credentials and options in the fields from below. As SMS/MMS service provider you can use Telnyx or Plivo or Twilio 
35
-              or Flowroute or all of them.')); ?></h3></p><br>
36
-           <div class="sms_followupsection">
37
-
38
-                <form id="prov_credentials" action="#" >
39
-
40
-                   <div class="providerSettings">
41
-                   <p class="providerName">Telnyx Settings</p>
42
-                   <p><label for="telapi_key" class="setlabeltext"><b>Telnyx API Secret Key</b> (Log in to Telnyx, then, on the 'Home' page, in the 'API Keys' section from the upper right
43
-                          corner, click on 'Manage Keys'. If you already have an API key, just copy it by clicking the 'Copy to clipboard' icon. Otherwise, to create an API key, click the
44
-                          'Create API Key' button, on the pop up message click 'Create', then enter it in the field from below.):</label></p>
45
-                   <input type="password" class="smsr_textbox" id="telapi_key" name="telapi_key" autocomplete="false"
46
-                          placeholder="<?php p($l->t('e.g. d6f172ce92e4f2 ...')); ?>" /><br>
47
-
48
-                   <p><label for="tel_pub_key" class="setlabeltext"><b>Telnyx Account Public Key</b> (While logged in to Telnyx, on the 'Home' page, in the 'API Keys' section from the 
49
-                          upper right corner, click on 'Manage Keys', then click on 'Public Key' on the upper bar, then copy the key from the 'Key' field and enter it in the field from 
50
-                          below.):</label></p>
51
-                   <input type="password" class="smsr_textbox" id="tel_pub_key" name="tel_pub_key" autocomplete="false"
52
-                          placeholder="<?php p($l->t('e.g. KLCnMsTSp8utW3RRHx0FiXxbf5BxK2Y5q8mMTCn0jgv=')); ?>" /><br>
53
-
54
-                   <p><label for="messaging_profile_id" class="setlabeltext"><b>Messaging Profile ID</b> (While logged in to Telnyx, click on 'Messaging', then on 'Programmable Messaging' 
55
-                       on the left panel, click on the name of the messaging profile that you want to use, then under 'Profile ID' you will find the messaging profile ID. Copy it and 
56
-                       enter it in the field from below.):
57
-                   </label></p>
58
-                   <input type="password" class="smsr_textbox" id="messaging_profile_id" name="messaging_profile_id" autocomplete="false"
59
-                          placeholder="<?php p($l->t('e.g. 9d4f47b6-26c9-d25c-c2f5 ...')); ?>" /><br>
60
-
61
-                   <p><label for="telapi_url_rec" class="setlabeltext"><b>Telnyx webhook URL for incoming SMS/MMS</b> (You have to first generate and then copy this URL into your Telnyx
62
-                       account, so that Telnyx knows where to deliver the SMS/MMS messages received by your Telnyx phone number(s). First generate the URL by pressing the button from
63
-                       below, copy it, then, in your Telnyx account click on 'Messaging' then on 'Programmable Messaging' on the left panel, click on the name of the messaging profile 
64
-                       that you associated with your phone number(s), then, under 'Inbound Settings', enter the webhook URL generated here in the field 'Send a webhook to this URL' and 
65
-                       click the 'Save' button. Don't forget to also click the 'Save' button at the bottom of this page after entering all the credentials, to save all the settings to 
66
-                       the database.)</label></p>
67
-                   <input type="button" id="generate_tel_rcpt" value="<?php p($l->t('Generate new webhook URL for incoming SMS/MMS')) ?>" />
68
-                   <input type="text" class="smsr_textboxspec" id="telapi_url_rec" name="telapi_url_rec" autocomplete="false" />
69
-                   <span id="copyToClipboardtel" class="icon icon-clippy" title="Copy to clipboard"></span><br><br>
70
-
71
-                   <p><label for="telapi_url" class="setlabeltext"><b>Telnyx webhook URL for delivery receipts</b> (This URL will be included by SMS Relentless in message sending 
72
-                       requests, so that Telnyx knows where to send the delivery receipts. Just generate it by pressing the button from below.
73
-                       You don't have to enter this URL into your Telnyx account. Don't forget to click the 'Save' button at the bottom of this page after entering all the credentials, 
74
-                       to save all the settings to the database.)</label></p>
75
-                   <input type="button" id="generate_tel_delrcpt" value="<?php p($l->t('Generate new webhook URL for delivery receipts')) ?>" />
76
-                   <input type="text" id="telapi_url" name="telapi_url" autocomplete="false" /><br><br>
77
-
78
-                   <p><label for="tel_sender_name" class="setlabeltext"><b>Telnyx alphanumeric Sender ID</b> (If you intend to use an alphanumeric Sender ID, enter an alphanumeric 
79
-                          sequence of up to 11 characters in the range of a-z, A-Z, 0-9 and space. In certain countries there are regulations that accept only shorter alphanumeric 
80
-                          Sender IDs, such as up to 6 characters. You cannot send SMS/MMS messages with alphanumeric Sender IDs to USA or Canada. There are even 
81
-                          <a href="https://support.plivo.com/hc/en-us/articles/360041448032" style="color:#1b60ba" target="_blank" rel="noreferrer noopener">countries</a> that require
82
-                          preregistration of alphanumeric Sender IDs. Before sending SMS/MMS messages to a country, it's recommended to read the
83
-                          <a href="https://support.twilio.com/hc/en-us/articles/223133767-International-support-for-Alphanumeric-Sender-ID" style="color:#1b60ba" target="_blank"
84
-                          rel="noreferrer noopener">country specific features and restrictions.</a> Some carriers won't accept messages with an alphanumeric Sender ID): </label></p>
85
-                   <input type="text" class="smsr_textbox" id="tel_sender_name" name="tel_sender_name" autocomplete="false"
86
-                          placeholder="<?php p($l->t('e.g. Smart Inc')); ?>" />
87
-                   </div><br><br><br>
88
-
89
-                   <div class="providerSettings">
90
-                   <p class="providerName">Plivo Settings</p>
91
-                   <p><label for="nexapi_key" class="setlabeltext"><b>Plivo Auth ID</b> (Log in to Plivo. On the first page, which is the Overview page, under Account, copy the 'Auth ID'
92
-                          and enter it in the field from below.):</label></p>
93
-                   <input type="password" class="smsr_textbox" id="nexapi_key" name="nexapi_key" autocomplete="false"
94
-                          placeholder="<?php p($l->t('e.g. r5g974cb92e4t1 ...')); ?>" /><br>
95
-
96
-                   <p><label for="nexapi_secret" class="setlabeltext"><b>Plivo Auth Token</b> (While logged in to Plivo, on the Overview page, under Account, copy the 'Auth Token' and
97
-                          enter it in the field from below.):</label></p>
98
-                   <input type="password" class="smsr_textbox" id="nexapi_secret" name="nexapi_secret" autocomplete="false"
99
-                          placeholder="<?php p($l->t('e.g. k6f489d8awn4p9 ...')); ?>" /><br>
100
-
101
-                   <p><label for="nexapi_url_rec" class="setlabeltext"><b>Plivo webhook URL for incoming SMS/MMS</b> (You have to first generate and then copy this URL into your Plivo
102
-                       account, so that Plivo knows where to deliver the SMS/MMS messages received by your Plivo phone number(s). First generate the URL by pressing the button from
103
-                       below, copy it, then, in your Plivo account click on 'Messaging' on the left vertical bar, click on 'Applications', then, under 'Application name' click on
104
-                       'Inbound SMS Messages', next, under 'Message', enter the webhook URL generated here in the field 'Message URL' and select 'POST' next to it, then click the
105
-                       'Update Application' button. Don't forget to also click the 'Save' button at the bottom of this page after entering all the credentials, to save all the settings 
106
-                       to the database.)</label></p>
107
-                   <input type="button" id="generate_nex_rcpt" value="<?php p($l->t('Generate new webhook URL for incoming SMS/MMS')) ?>" />
108
-                   <input type="text" class="smsr_textboxspec" id="nexapi_url_rec" name="nexapi_url_rec" autocomplete="false" />
109
-                   <span id="copyToClipboardnex" class="icon icon-clippy" title="Copy to clipboard"></span><br><br>
110
-
111
-                   <p><label for="nexapi_url" class="setlabeltext"><b>Plivo webhook URL for delivery receipts</b> (This URL will be included by SMS Relentless in message sending 
112
-                       requests, so that Plivo knows where to send the delivery receipts. Just generate it by pressing the button from below.
113
-                       You don't have to enter this URL into your Plivo account. Don't forget to click the 'Save' button at the bottom of this page after entering all the credentials, 
114
-                       to save all the settings to the database.)</label></p>
115
-                   <input type="button" id="generate_nex_delrcpt" value="<?php p($l->t('Generate new webhook URL for delivery receipts')) ?>" />
116
-                   <input type="text" id="nexapi_url" name="nexapi_url" autocomplete="false" /><br><br>
117
-
118
-                   <p><label for="nex_sender_name" class="setlabeltext"><b>Plivo alphanumeric Sender ID:</b> (If you intend to use an alphanumeric Sender ID, enter an alphanumeric 
119
-                          sequence of up to 11 characters in the range of a-z, A-Z, 0-9 and space. In certain countries there are regulations that accept only shorter alphanumeric 
120
-                          Sender IDs, such as up to 6 characters. You cannot send SMS/MMS messages with alphanumeric Sender IDs to USA or Canada. There are even 
121
-                          <a href="https://support.plivo.com/hc/en-us/articles/360041448032" style="color:#1b60ba" target="_blank" rel="noreferrer noopener">countries</a> that require
122
-                          preregistration of alphanumeric Sender IDs. Before sending SMS/MMS messages to a country, it's recommended to read the
123
-                          <a href="https://support.twilio.com/hc/en-us/articles/223133767-International-support-for-Alphanumeric-Sender-ID" style="color:#1b60ba" target="_blank"
124
-                          rel="noreferrer noopener">country specific features and restrictions.</a> Some carriers won't accept messages with an alphanumeric Sender ID): </label></p>
125
-                   <input type="text" class="smsr_textbox" id="nex_sender_name" name="nex_sender_name" autocomplete="false"
126
-                          placeholder="<?php p($l->t('e.g. Global Inc')); ?>" />
127
-                   </div><br><br><br>
128
-
129
-                   <div class="providerSettings">
130
-                   <p class="providerName">Twilio Settings</p>
131
-                   <p><label for="twilapi_key" class="setlabeltext"><b>Twilio Account SID</b> (Log in to Twilio. On the first page, under Account Info, copy the 'Account SID'
132
-                          and enter it in the field from below.):</label></p>
133
-                   <input type="password" class="smsr_textbox" id="twilapi_key" name="twilapi_key" autocomplete="false"
134
-                          placeholder="<?php p($l->t('e.g. r5g974cb92e4t1 ...')); ?>" /><br>
135
-
136
-                   <p><label for="twilapi_secret" class="setlabeltext"><b>Twilio Auth Token</b> (While logged in to Twilio, on the first page, under Account Info, copy the 'Auth Token'
137
-                          and enter it in the field from below.):</label></p>
138
-                   <input type="password" class="smsr_textbox" id="twilapi_secret" name="twilapi_secret" autocomplete="false"
139
-                          placeholder="<?php p($l->t('e.g. k6f489d8awn4p9 ...')); ?>" /><br>
140
-
141
-                   <p><label for="twilapi_url_rec" class="setlabeltext"><b>Twilio webhook URL for incoming SMS/MMS</b> (You have to first generate and then copy this URL into your Twilio
142
-                       account, so that Twilio knows where to deliver the SMS/MMS messages received by your Twilio phone number(s). First generate the URL by pressing the button from
143
-                       below, copy it, then, in your Twilio account click on 'Phone Numbers' on the left panel > 'Manage' > 'Active numbers', click on the phone number you want to use 
144
-                       for SMS/MMS, scroll down to the 'Messaging' section, then under 'A MESSAGE COMES IN' select 'Webhook', then paste in the webhook URL that you have just generated 
145
-                       and select 'HTTP POST' as the request type. Enter the same data under 'PRIMARY HANDLER FAILS', then click the 'Save' button. If you have multiple SMS/MMS enabled 
146
-                       phone numbers, do the same for each number. Don't forget to also click the 'Save' button at the bottom of this page after entering all the credentials, to save 
147
-                       all the settings to the database.)</label></p>
148
-                   <input type="button" id="generate_twil_rcpt" value="<?php p($l->t('Generate new webhook URL for incoming SMS/MMS')) ?>" />
149
-                   <input type="text" class="smsr_textboxspec" id="twilapi_url_rec" name="twilapi_url_rec" autocomplete="false" />
150
-                   <span id="copyToClipboardtwil" class="icon icon-clippy" title="Copy to clipboard"></span><br><br>
151
-
152
-                   <p><label for="twilapi_url" class="setlabeltext"><b>Twilio webhook URL for delivery receipts</b> (This URL will be included by SMS Relentless in message sending 
153
-                       requests, so that Twilio knows where to send the delivery receipts. Just generate it by pressing the button from below.
154
-                       You don't have to enter this URL into your Twilio account. Don't forget to click the 'Save' button at the bottom of this page after entering all the credentials, 
155
-                       to save all the settings to the database.)</label></p>
156
-                   <input type="button" id="generate_twil_delrcpt" value="<?php p($l->t('Generate new webhook URL for delivery receipts')) ?>" />
157
-                   <input type="text" id="twilapi_url" name="twilapi_url" autocomplete="false" /><br><br>
158
-
159
-                   <p><label for="twil_sender_name" class="setlabeltext"><b>Twilio alphanumeric Sender ID:</b> (If you intend to use an alphanumeric Sender ID, enter an alphanumeric 
160
-                          sequence of up to 11 characters in the range of a-z, A-Z, 0-9 and space. In certain countries there are regulations that accept only shorter alphanumeric 
161
-                          Sender IDs, such as up to 6 characters. You cannot send SMS/MMS messages with alphanumeric Sender IDs to USA or Canada. There are even 
162
-                          <a href="https://support.plivo.com/hc/en-us/articles/360041448032" style="color:#1b60ba" target="_blank" rel="noreferrer noopener">countries</a> that require
163
-                          preregistration of alphanumeric Sender IDs. Before sending SMS/MMS messages to a country, it's recommended to read the
164
-                          <a href="https://support.twilio.com/hc/en-us/articles/223133767-International-support-for-Alphanumeric-Sender-ID" style="color:#1b60ba" target="_blank"
165
-                          rel="noreferrer noopener">country specific features and restrictions.</a> Some carriers won't accept messages with an alphanumeric Sender ID): </label></p>
166
-                   <input type="text" class="smsr_textbox" id="twil_sender_name" name="twil_sender_name" autocomplete="false"
167
-                          placeholder="<?php p($l->t('e.g. Global Inc')); ?>" />
168
-                   </div><br><br><br>
169
-
170
-                   <div class="providerSettings">
171
-                   <p class="providerName">Flowroute Settings</p>
172
-                   <p><label for="flowapi_key" class="setlabeltext"><b>Flowroute Access Key</b> (Log in to Flowroute. On the left panel, click on 'Preferences', then on the 'API Control'
173
-                          tab. Scroll down to the 'API Keys' section. If you already have a pair of keys listed in that section, just copy the Access Key to the field from below. If you
174
-                          haven't created any keys yet, to create a key pair, under 'Add new API Key', in the 'Name' field, enter a name for the new key pair. In the 'Description' field 
175
-                          enter a short description, then click 'Add new'. A new pair of keys will be created and you will be prompted to copy the Secret Key. After you copy the Secret 
176
-                          Key to a safe location, copy the Access Key that has just been created to the field from below.):</label></p>
177
-                   <input type="password" class="smsr_textbox" id="flowapi_key" name="flowapi_key" autocomplete="false"
178
-                          placeholder="<?php p($l->t('e.g. r5g974cb92e4t1 ...')); ?>" /><br>
179
-
180
-                   <p><label for="flowapi_secret" class="setlabeltext"><b>Flowroute Secret Key</b> (Enter the Secret Key created earlier and copied to a safe place, in the field from 
181
-                          below.):</label></p>
182
-                   <input type="password" class="smsr_textbox" id="flowapi_secret" name="flowapi_secret" autocomplete="false"
183
-                          placeholder="<?php p($l->t('e.g. k6f489d8awn4p9 ...')); ?>" /><br>
184
-
185
-                   <p><label for="flowapi_url_rec" class="setlabeltext"><b>Flowroute webhook URL for incoming SMS/MMS</b> (You have to first generate and then copy this URL into your 
186
-                          Flowroute account, so that Flowroute knows where to deliver the SMS/MMS messages received by your Flowroute phone number(s). First generate the URL by pressing 
187
-                          the button from below, copy it, then, in your Flowroute account click on 'Preferences' on the left panel, then click on the 'API Control tab', turn on the 'SMS' 
188
-                          switch and in the field that shows up enter the URL that you have just generated. Click 'Save URL'. If you have an MMS enabled phone number, turn on the 'MMS' 
189
-                          switch, enter the same URL in the URL field and save it. Also, under 'SMS Webhook Version' choose 'v2.1'. Don't forget to also click the 'Save' button at the 
190
-                          bottom of this page after entering all the credentials, to save all the settings to the database.)</label></p>
191
-                   <input type="button" id="generate_flow_rcpt" value="<?php p($l->t('Generate new webhook URL for incoming SMS/MMS')) ?>" />
192
-                   <input type="text" class="smsr_textboxspec" id="flowapi_url_rec" name="flowapi_url_rec" autocomplete="false" />
193
-                   <span id="copyToClipboardflow" class="icon icon-clippy" title="Copy to clipboard"></span><br><br>
194
-
195
-                   <p><label for="flowapi_url" class="setlabeltext"><b>Flowroute webhook URL for delivery receipts</b> (This URL is needed by Flowroute to know where to send the 
196
-                          delivery receipts. Just generate it by pressing the button from below. You don't have to enter this URL into your Flowroute account. Don't forget to click 
197
-                          the 'Save' button at the bottom of this page after entering all the credentials, to save all the settings to the database.)</label></p>
198
-                   <input type="button" id="generate_flow_delrcpt" value="<?php p($l->t('Generate new webhook URL for delivery receipts')) ?>" />
199
-                   <input type="text" id="flowapi_url" name="flowapi_url" autocomplete="false" /><br><br>
200
-                          Flowroute only supports sending/receiving SMS/MMS messages within USA and Canada and it doesn't support Alphanumeric Sender IDs.
201
-
202
-                   </div><br><br><br>
203
-
204
-                   <p><label for="messagesperpage" class="setlabeltext"><b>Number of messages per page</b> (Enter the number of messages to be displayed on one page of the
205
-                          received and sent messages tables. If you don't enter anything in this field, the default of 100 messages per page will be used.):</label></p>
206
-                   <input type="number" class="smsr_textbox" id="messagesperpage" name="messagesperpage" autocomplete="false" placeholder="<?php p($l->t('e.g. 100')); ?>"/><br>
207
-
208
-                   <p><label for="get_notify" class="setlabeltext"><b>I want to see a notification in Nextcloud when a new SMS/MMS is received:</b></label></p>
209
-                   <input type="checkbox" class="sms_rel_checkbox" id="get_notify" name="get_notify" autocomplete="false" /><br>
210
-
211
-                   <p class="setlabeltext">To enable email notifications for every received SMS/MMS, the "sendmail" utility ("/usr/sbin/sendmail" on Debian Linux),
212
-                      has to be present on the server. "sendmail" is a binary which gets installed when Postfix is installed. Also the server user (www-data) has to be
213
-                      allowed to send emails from command line (by specifying "authorized_submit_users = www-data" in "/etc/postfix/main.cf" for Postfix on a Debian based
214
-                      Linux).</p><br>
215
-
216
-                   <p><label for="notification_email" class="setlabeltext"><b>I want to receive a notification to the email address from below, when a new SMS/MMS is
217
-                      received:</b></label></p>
218
-                   <input type="text" class="smsr_textbox" id="notification_email" name="notification_email" autocomplete="false"
219
-                          placeholder="<?php p($l->t('e.g. john.doe@example.com')); ?>" /><br>
220
-
221
-                   <p><label for="includesmsinemail" class="setlabeltext"><b>Include the SMS/MMS message in the email notification itself:</b></label></p>
222
-                   <input type="checkbox" class="sms_rel_checkbox" id="includesmsinemail" name="includesmsinemail" autocomplete="false" /><br>
223
-
224
-                   <p><label for="showdisplaynames" class="setlabeltext"><b>Add the display name of the message author, before each message:</b></label></p>
225
-                   <input type="checkbox" class="sms_rel_checkbox" id="showdisplaynames" name="showdisplaynames" autocomplete="false" /><br>
226
-
227
-                   <p><label for="showdisplaynames" class="setlabeltext"><b>Set auto-reply messages for the following phone numbers:</b></label></p><br>
228
-                   <table id="autoReplyTbl">
229
-                        <tr><th>Auto-reply Author</th><th id="autoRplPhoneNb">Phone Number <div class="tooltipautoreplypn"><div id="infoautoreplypn">i</div><div class="autorpltooltippn">Sending a message to a phone number with a configured auto-reply from another phone number with a configured auto-reply must be avoided because it will trigger an infinite loop: the 2 numbers will send auto-replies to each other incessantly, until they will consume all the available funds in the balance.</div></div></th><th>Mode</th><th>Message</th><tr>
230
-                   </table><br>
231
-
232
-                   <input type="hidden" id="user_id" name="user_id" />
233
-
234
-                   <input id="save_sms_settings" type="submit" value="<?php p($l->t('Save')) ?>" title='Save settings' />
235
-
236
-                   <span id="smsr_save_msg"></span>
237
-
238
-               </form>
239
-           </div>
240
-        </div>
241
-</div>
242
-