Browse code

removed a substantial number of files

DoubleBastionAdmin authored on 08/05/2023 20:27:04
Showing 19 changed files
1 1
deleted file mode 100644
... ...
@@ -1,70 +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 0
deleted file mode 100644
... ...
@@ -1,141 +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
-* 🔏 SMS/MMS messages coming from Telnyx, Plivo and Twilio are checked for authenticity by verifying the SMS provider's signature.
27
-
28
-* 📧 Users receive notifications in Nextcloud and (optionally) emails when new SMS/MMS messages arrive.
29
-
30
-* 📄 Each sent message receives a delivery receipt displayed in the Sent SMS Messages table.
31
-
32
-* 📱 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. 
33
-
34
-* 💵 It allows checking the current Telnyx/Plivo/Twilio balance by selecting the provider on the left panel.
35
-
36
-* 💰 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.
37
-
38
-* 💸 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.
39
-
40
-<span style="display:block;height:10px!important"></span>
41
-
42
-Double Bastion is not affiliated with Telnyx, Plivo, Twilio or Flowroute.
43
-
44
-### Donations
45
-
46
-* 🎁 [Donate](https://www.doublebastion.com/donations/)
47
-
48
-<span style="display:block;height:20px!important"></span>
49
-
50
-Send SMS message
51
-<span style="display:block;height:10px!important"></span>
52
-![Image of SMS Relentless Interface](https://git.doublebastion.com/sms-relentless/raw/develop/img/sms_relentless_send_sms.png)
53
-<span style="display:block;height:40px!important"></span>
54
-Send MMS message
55
-<span style="display:block;height:10px!important"></span>
56
-![Image of SMS Relentless Interface](https://git.doublebastion.com/sms-relentless/raw/develop/img/sms_relentless_mms_sending.png)
57
-<span style="display:block;height:40px!important"></span>
58
-List received SMS messages
59
-<span style="display:block;height:10px!important"></span>
60
-![Image of SMS Relentless Interface](https://git.doublebastion.com/sms-relentless/raw/develop/img/sms_relentless_received.png)
61
-<span style="display:block;height:40px!important"></span>
62
-List sent SMS messages
63
-<span style="display:block;height:10px!important"></span>
64
-![Image of SMS Relentless Interface](https://git.doublebastion.com/sms-relentless/raw/develop/img/sms_relentless_sent.png)
65
-<span style="display:block;height:40px!important"></span>
66
-Send SMS message to multiple recipients
67
-<span style="display:block;height:10px!important"></span>
68
-![Image of SMS Relentless Interface](https://git.doublebastion.com/sms-relentless/raw/develop/img/sms_relentless_send_mass_sms.png)
69
-<span style="display:block;height:40px!important"></span>
70
-Filter messages by date and keyword
71
-<span style="display:block;height:10px!important"></span>
72
-![Image of SMS Relentless Interface](https://git.doublebastion.com/sms-relentless/raw/develop/img/sms_relentless_filter_messages_by_date_and_keyword.png)
73
-<span style="display:block;height:40px!important"></span>
74
-Delete old SMS messages
75
-<span style="display:block;height:10px!important"></span>
76
-![Image of SMS Relentless Interface](https://git.doublebastion.com/sms-relentless/raw/develop/img/sms_relentless_delete_old_messages.png)
77
-<span style="display:block;height:40px!important"></span>
78
-
79
-## Browsers
80
-<span style="display:block;height:10px!important"></span>
81
-
82
-SMS Relentless works with all major browsers.
83
-
84
-<span style="display:block;height:20px!important"></span>
85
-
86
-## Programming Languages
87
-<span style="display:block;height:10px!important"></span>
88
-
89
-SMS Relentless only uses PHP, SQL, jQuery, CSS and HTML. This means it's robust, efficient, light-weight and easy to maintain and debug.
90
-
91
-<span style="display:block;height:20px!important"></span>
92
-
93
-## Minimum Requirements
94
-<span style="display:block;height:10px!important"></span>
95
-
96
-- **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.
97
-
98
-- **A telnyx.com, plivo.com, twilio.com or flowroute.com account and an SMS/MMS enabled phone number** attached to it.
99
-
100
-- The **libcurl** PHP library has to be installed on the server.
101
-
102
-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 
103
-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 
104
-"/etc/postfix/main.cf" for Postfix on Debian).
105
-
106
-<span style="display:block;height:20px!important"></span>
107
-
108
-## Installation
109
-<span style="display:block;height:10px!important"></span>
110
-
111
-<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 
112
-explains in detail how to install and use this application.
113
-
114
-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 
115
-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>.
116
-
117
-<span style="display:block;height:20px!important"></span>
118
-
119
-## Contribute
120
-<span style="display:block;height:10px!important"></span>
121
-
122
-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
123
-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
124
-digital freedom over the years and because centralized services create autonomy and privacy issues, in spite of all the benefits.
125
-
126
-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>, 
127
-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 
128
-project.
129
-
130
-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">
131
-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 .
132
-
133
-<span style="display:block;height:20px!important"></span>
134
-
135
-## License
136
-<span style="display:block;height:10px!important"></span>
137
-
138
-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 
139
-the terms of the GNU Affero General Public License Version 3.
140
-
141
-SMS Relentless includes libraries licensed under different free software licenses. These libraries contain their respective original copyright notices.
142 0
deleted file mode 100644
... ...
@@ -1,82 +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
-* 🔏 SMS/MMS messages coming from Telnyx, Plivo and Twilio are checked for authenticity by verifying the SMS provider's signature.
25
-
26
-* 📧 Users receive notifications in Nextcloud and (optionally) emails when new SMS/MMS messages arrive.
27
-
28
-* 📄 Each sent message receives a delivery receipt displayed in the Sent SMS Messages table.
29
-
30
-* 📱 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. 
31
-
32
-* 💵 It allows checking the current Telnyx/Plivo/Twilio balance by selecting the provider on the left panel.
33
-
34
-* 💰 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.
35
-
36
-* 💸 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.
37
-
38
-We have no affiliation with Telnyx, Plivo, Twilio or Flowroute.
39
-
40
-### Documentation
41
-
42
-* [Admin documentation](https://www.doublebastion.com/install-nextcloud/#install-sms-relentless)
43
-
44
-### Donations
45
-
46
-* 🎁 [Donate](https://www.doublebastion.com/donations/)
47
-
48
-    ]]></description>
49
-    <version>1.1.5</version>
50
-    <licence>AGPL</licence>
51
-    <author mail="contact@doublebastion.com">Double Bastion LLC</author>
52
-    <namespace>SMSRelentless</namespace>
53
-	<documentation>
54
-		<admin>https://www.doublebastion.com/install-nextcloud/#install-sms-relentless</admin>
55
-	</documentation>
56
-    <category>office</category>
57
-    <category>organization</category>
58
-
59
-    <website>https://www.doublebastion.com/sms-relentless/</website>
60
-    <bugs>https://git.doublebastion.com/sms-relentless/issues/develop</bugs>
61
-    <repository>https://git.doublebastion.com/sms-relentless/develop/</repository>
62
-
63
-    <screenshot>https://git.doublebastion.com/sms-relentless/raw/develop/img/sms_relentless_screenshot.png</screenshot>
64
-
65
-    <dependencies>
66
-            <nextcloud min-version="25" max-version="25" />
67
-    </dependencies>
68
-
69
-    <navigations>
70
-        <navigation>
71
-            <name>SMS Relentless</name>
72
-            <route>sms_relentless.page.index</route>
73
-            <order>102</order>
74
-            <icon>../img/sms_relentless.svg</icon>
75
-        </navigation>
76
-    </navigations>
77
-
78
-    <settings>
79
-            <personal>OCA\SMSRelentless\Settings\Personal</personal>
80
-            <personal-section>OCA\SMSRelentless\Settings\PersonalSection</personal-section>
81
-    </settings>
82
-</info>
83 0
deleted file mode 100644
... ...
@@ -1,66 +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#removerecrows', 'url' => '/user/removerecrows/{userId}', 'verb' => 'POST'],
44
-     ['name' => 'smsrelentless#removesentrows', 'url' => '/user/removesentrows/{userId}', 'verb' => 'POST'],
45
-     ['name' => 'smsrelentless#saveoldrecrows', 'url' => '/user/saveoldrecrows/{userId}', 'verb' => 'POST'],
46
-     ['name' => 'smsrelentless#saveoldsentrows', 'url' => '/user/saveoldsentrows/{userId}', 'verb' => 'POST'],
47
-     ['name' => 'smsrelentless#getbalancetel', 'url' => '/user/getbalancetel/{userId}', 'verb' => 'POST'],
48
-     ['name' => 'smsrelentless#getbalancenex', 'url' => '/user/getbalancenex/{userId}', 'verb' => 'POST'],
49
-     ['name' => 'smsrelentless#getbalancetwil', 'url' => '/user/getbalancetwil/{userId}', 'verb' => 'POST'],
50
-     ['name' => 'smsrelentless#getbalanceflow', 'url' => '/user/getbalanceflow/{userId}', 'verb' => 'POST'],
51
-     ['name' => 'smsrelentless#getsmsnumbers', 'url' => '/user/getsmsnumbers/{userId}', 'verb' => 'POST'],
52
-     ['name' => 'smsrelentless#upload_numbers_file', 'url' => '/user/upload_numbers_file/{userId}', 'verb' => 'POST'],
53
-     ['name' => 'smsrelentless#uploadfile', 'url' => '/user/uploadfile/{userId}', 'verb' => 'POST'],
54
-     ['name' => 'smsrelentless#pickfile', 'url' => '/user/pickfile/{userId}', 'verb' => 'POST'],
55
-     ['name' => 'smsrelentless#removeupfile', 'url' => '/user/removeupfile/{userId}', 'verb' => 'POST'],
56
-     ['name' => 'smsrelentless#sendsmstel', 'url' => '/user/sendsmstel/{userId}', 'verb' => 'POST'],
57
-     ['name' => 'smsrelentless#sendsmsnex', 'url' => '/user/sendsmsnex/{userId}', 'verb' => 'POST'],
58
-     ['name' => 'smsrelentless#sendsmstwil', 'url' => '/user/sendsmstwil/{userId}', 'verb' => 'POST'],
59
-     ['name' => 'smsrelentless#sendsmsflow', 'url' => '/user/sendsmsflow/{userId}', 'verb' => 'POST'],
60
-     ['name' => 'smsrelentless#getmessagesperpage', 'url' => '/user/getmessagesperpage/{userId}', 'verb' => 'GET'],
61
-     // Settings
62
-     ['name' => 'smsrelentless#getsettings', 'url' => '/user/getsettings/{userId}', 'verb' => 'GET'],
63
-     ['name' => 'smsrelentless#updatesettings', 'url' => '/user/updatesettings/{userId}', 'verb' => 'PUT']
64
-  ]
65
-];
66
-
67 0
deleted file mode 100644
... ...
@@ -1,834 +0,0 @@
1
-{
2
-    "hashes": {
3
-        "CHANGELOG.txt": "a85408429e1d033f8b0a24b4b07f6e669727b90f4b01981cc083b59c5c880684ee6bda59dfee686f4993214adfd1c007584c43076f62c70fb67abce0b494c01f",
4
-        "COPYING.txt": "a0a86214ea153fb07ff35ceec0848dd1703eae22de036a825efc8394e50f65e3044832f3b49cf7e45a39edc470bdf738abc36a3a78ca7df3a6e73c14eaef94a8",
5
-        "Contributors.txt": "8ab4ea9b8c38e4d115af6ca08e8e27592198b763982bd166b67f38ee0b9f2b7e093cd58ce0927ae38ee3bc015b129add2ffeb3967288c804da493241bc67ba9b",
6
-        "README.md": "035a19025d6f8dfc7a9f4befc812597030dafa76871c1e6271d3027fad9d472abcca1b6a53c59fca352da1b6f012d0ee930495be4043c7e126121d1b41e6d189",
7
-        "appinfo\/info.xml": "1bb9068042c5e5fa9f15948b2041f6c440a5c58b462eed49395573d011254f0d23325cd9eee919745c0e003f8c7f4e2da30984c0dda175518be0137e794e2f57",
8
-        "appinfo\/routes.php": "99f8ff8fea36af2c446f99cfe3356eb377c41812a7b9d5911043bb7925c8d4217f7811dc10be7dbcd2d6738e5ba8889a596c8b9c2a8082ac0d483ffd9647597e",
9
-        "css\/style.css": "829dd4995c84b6544828de434e6b6226546e923c29da3a5b92fbea1d553d07e26f1a3137a9a9e2904ea8f0fd5044794bb7f78a7929684ae2746af392f12b39b3",
10
-        "img\/arrow-top.svg": "389b15b7bfa8c90a79cd80958d1150538ddd0aeed875eae3a498b9bee8da3e63752fbc6c073cf58405fc35633a9b786e34b3ca1f6d234af685277aa8d439e1a6",
11
-        "img\/arrowDown.svg": "1ed4bbc599a2f8772cedcc8894b606aaad1a8f07b7d81ca89c6eaa50483e6027cb6cc13f5fd375d63b7fa196da76c0fd6f244c8dfa75ee3aba46eba46b426a53",
12
-        "img\/arrowUp.svg": "89393ed72d8b23cd8e827c5405fbed6304e487be9936631d1bfecb0b6c4c5e60d8f713e21a55f60c24ec43bf6d02b18a4102be329e9369c5aa6782d7cd7c6bf7",
13
-        "img\/clearfilters.svg": "f554eff67f4c1440eb3865ea98b00bcde1f27361ae5888dfa7db1ed95d074915aaba0f6aed3f70d6d7c4cb5ca592dbc3f3175f958708e54830f895e8b652b499",
14
-        "img\/filter_icon.svg": "5258d0d0e3677c10a8ae5d8cc37318855e5a6d5071d5a61ee6d29aad7109292502d60571f2c5ae716295dd8f93a327c060ec7c65f2f9cbfee4b85086682a385e",
15
-        "img\/garbage.svg": "b76cde0659b7f127a810406d2b734f03871e3a7c8bc53acb723c2a97fa6ca0801a26cfebd4ceaa28d2ad237a67a222e00aafaecaf7e749cc8e8f93ae35a4c4f3",
16
-        "img\/garbage_bright.svg": "45bbad63a659b6add876294f8aebda1cf03790b0c253ba442f04fd9677c1a35795eb823dbb92bbf38066e8cdf89fb34671763dabbcdad4722aba3ffcaa21581b",
17
-        "img\/nextcloud_logo.svg": "4e0d3f0c371d668d83d443e5b1f69f0eedcc759092601d8fe8710dd97b16fd53aa3f9667bba7f305dc3aacfbc14e29b09b78da8b7bf6f41dcb83f5b16473991e",
18
-        "img\/nextcloud_logo_bright.svg": "aeab941556e29f9537508171583bb3309372866122c150c887c21d6a567c5aa06d2653db67c7151b064d4e2fa25f1fc63df21c786ede02ca5f40f12e5c1bad26",
19
-        "img\/refresh_logo.svg": "a95a19645bbde5e2146a3ec669950bc6029bfc6104886552eaeb4746733657ecbe4f9199e676ee2e9852ef0c5adb612d93e300e3fa9713fc611e1f8e7c1d5183",
20
-        "img\/sms_relentless.svg": "010ad7cee20f3a256a24bee2482b6798f042a3992c7df5d56ba803cca93552c3cda2a68d1772e67143ce45207b89d397e34ba6909f6b8515134db64e2c5497eb",
21
-        "img\/sms_relentless_dark.svg": "cbe97fe9fe636790ea0b415035cd78321ff53ec93ab1276d4ef609555592fa13d09b2037c20e06bbb9024fcfcc0ebb806c89572b08adcfe4ee9d06c6466b685a",
22
-        "img\/sms_relentless_delete_old_messages.png": "077c74a6f138ed1c46ee9426c0c0573bbee12b71c85ae0cb3ebba1ea040b4f88099405d1074a49496050f092e47af03feac9afb85ed1a2480d74d9f07716d287",
23
-        "img\/sms_relentless_filter_messages_by_date_and_keyword.png": "a014a100ec4be4e5d2e09b8d8afc85125fc3f5fdd4379c8338c209a08cfc65a547b1ebbebe6dcc81d05b68081a66982a31f85bf7f7b6c66f441e679743f65814",
24
-        "img\/sms_relentless_grey.svg": "ffac810d151f22067a4ce4985b6c84ec6f6bbf7f1c0a8711ad4a374b838251d3681edfa8439e18c1fcb78160fcdfa20d4f08527a594c5080938aa611991acb2e",
25
-        "img\/sms_relentless_logo.png": "bcc8bc7301aa9c4811ee875b5deb4ed21d9c7eca187970643962f0ae11a7483adc5257e26b307c41644dfef63ec82c4e61a221f133c62827e1d4418928c253c5",
26
-        "img\/sms_relentless_mms_sending.png": "063dcd7d06eced6be8a33c00abd9605ec196c3962c526212990760ee5f157fac0f9778d50d84ff5593a01ea0cdc15d5e848dbe39af47d082909e671f45832bef",
27
-        "img\/sms_relentless_received.png": "1161fbf9e9351510edf200ae89f36730af1c1410cda4186f631d15797e2e484e384898eae1dd97d2904a4d6272f551bb25071a01ecaae101acefb32f855e6f50",
28
-        "img\/sms_relentless_screenshot.png": "5bddd3148637473bd5d0b551df701094c8983e1a7706d753697df1bcec27029b88ef92146c7bc9213914dcdfce65eeaf6eb49d9aa95ce4d6e7f6317f4d9324ab",
29
-        "img\/sms_relentless_send_mass_sms.png": "f8043b8d2dd53058c28552ef96e637072337d1c751930f3418ba8ea7a394507246f35ed98f8123ff1e9e6598babbafdc5b893dbedc0624a2d9c5c1184c6ad60e",
30
-        "img\/sms_relentless_send_sms.png": "0a028ba48f0b86d820dd2fc13327c9069665a327f461310847286bc6ae085fbb7337162b27125b2d42fd7136a30c9dc7f6866501912647899aa0cc7ae676f706",
31
-        "img\/sms_relentless_sent.png": "7aef983c66793540b102f6879151449ad0da60751d89eae68ffeec7b20ac6e84a1d92388fb808d10dbf63f7bedb68c888dda509ea2ecd7715ca8f264e05a470f",
32
-        "js\/arrowup.js": "819fd1975011e2819502cbe5bd006204122d5e73560f6f7fabe9c9f14c7086206e54c8b51e3b005820a1e2d9d29c9254ce2c1c8687285efc8daf3d667e51e738",
33
-        "js\/deleteoldsms.js": "e949b8a7a325f63bbc78144f1c14a82e9c28c3ed6e420906871220d7d53aba5c1784813f6bda914cc6b5857035660c5a79a74beefce5ed8787a9ae9990f45a96",
34
-        "js\/sendsms.js": "60d41c865dce5ac5ae6fcecbdc11ab8b8ebb8253d0a9e69a29cb60205ce373be42b7f687bbca3cdebafae6461f07a9afaa8aebd4e512975e89108169dcb00861",
35
-        "js\/settings.js": "87cdc4cfcacaeb9c925ca50a2913279d4de792b2753d737f5a9846fa2cb1aec4e9cf679dfa83fabf9b1b693c35ae55eedd749ab8de41f7012a699b7d190161fa",
36
-        "js\/showsmstables.js": "be2fe62fddd6cec4010be64a5874da0678e9717eb3ce99055fba9a1a02374181851d32931d8f1106278f48d5885f64074573e8e3fa81e9b3b8ecb2ebe55e70c5",
37
-        "js\/tiff.min.js": "c35f67b587aab62db7a3de662779a7b3264d70f5f856142cae88eadd1b477e474977f2b8c5ab31c16be002cb7ca9b52282e6de533b6fd79a02e6d33815919cb4",
38
-        "l10n\/en_GB.js": "30be5a195908c731891e456c699053a5b9675e5c21bcfbe6f2091f467dab6bf0dff3ea167b9f96e7c6b492d74709d5c732a5eabdbec30c129607b0990773609e",
39
-        "l10n\/en_GB.json": "7f1567f247b9b4ad32dd836903f34ae02cb93c26b34e7eec509ddd1a6e320d64be2d907796017c379afd7a9fd75c9ed5bd00187e93da4100132beed5c16ca74b",
40
-        "lib\/AppConfig.php": "c52269913ee80151397520bbebe4f0c725526910ce18f8717ba1c8016a5f4dcdc9a6f9350bc56c8a6b607ea342ee0cbe0f65afd9f03c31902190c008f41c9672",
41
-        "lib\/AppInfo\/Application.php": "7e5ff3a817b1d46e8b05e2453c34450c5629c25b5c3955593b36a22e5ff0a6a67a197665d476f7904c3dc8712105687153954c22a12f597828247a56a80f509b",
42
-        "lib\/Controller\/AuthorApiController.php": "d64b5a9da758f10f8f8f91c5d6ae4b6a4ccb75afddcd5c58126001173e8ecdaf673b3c13cb11acfc91c6813399197db067c0cdb5d5de984143d8f26dc6543f01",
43
-        "lib\/Controller\/PageController.php": "07da5883ea41b3f7993a3e358a03a3db592a30fa81ea1ed0f26a234fcc3824a243316b76824fb9a24f40304ae945c48118dd4bed1f0d2f6993e479ab2c1dcab6",
44
-        "lib\/Controller\/SmsrelentlessController.php": "09f6c101ffc0b18cf832660d3383ae0d85df23285e974eca98b29d3807bc902a632e1b06a44dfe6b463c929d96b161576a69bd4603cf05de1ace01a8ff2443ca",
45
-        "lib\/Migration\/Version100Date20211106192148.php": "96b9793edf72598c0330aed9f0c6c27ebf02287bd84b6b7a0285fc784bdf6442b560bc5dd2e55b464bb384a24831ae17d7ea144b0896d9b11cb82a27fbf602ff",
46
-        "lib\/Migration\/Version106Date20220813144231.php": "33f1f2953e038350e37c670462cc79fa48ab3a72b595f5fce970fdcc6d7eefa3401722da4cc532c7114d0c8aab7fbf0281afb374a695d5c1c1b311c30f64c9b8",
47
-        "lib\/Migration\/Version108Date20220823132408.php": "5d94388496cd88cec1dbbe67a2e9d6ae6fd5db7ed42d4bc737710d3c51ad4d8ad29d53a62739e05e2986e2d4c96374f4660a53dd7b7808d30e44e5c605105971",
48
-        "lib\/Migration\/Version114Date20221202011625.php": "920ee001204afad537bf2b7dbdb7c78e95b4ad0c79f5f693bd56347a1df91045cd83348f99e2ad714df2a735cf1a1d85aeb385c675ef6e90eed26f18b0b7d344",
49
-        "lib\/Service\/SmsrelentlessService.php": "38adac3d5492539392895bffcc200e9c394bfe6a60a716fd89f8dd7e84e064597892f11c2a2d58bbdb18a4c9c2ce7ab3bf1b685c9fb68fb3f02ba7dc9b10f031",
50
-        "lib\/Settings\/Personal.php": "7d13e4157a58d491fe00035d74ec45dc5fbe8680dd75724278dd9288ef52dae306101c820feffcb68ac1b784c33d767d47f9f501d5f131c7b48b55ff528da816",
51
-        "lib\/Settings\/PersonalSection.php": "e65e1a8939e3818e7cd295ce86581a603b1e2fedb732ce51ed1fce62cb61ebae9b93742b1d923f08e14cdc6bd5cf2818d47917321e0aa1736932830c05a81682",
52
-        "providers\/Flowroute\/readme.txt": "25f08fea0f30105e850dbf07bb7a9351e47883640dd87d26981cf50f02ab5af8ef59dbd1fbe5e4127c0e019e13ce036f9414401b9d3f3a924c4125c291e53446",
53
-        "providers\/Plivo\/composer.json": "2d8def5ce9444d4bfe4ff32e008e6aeec924efd40e0cb61f3a72585fc4cf89e7b62970e796d56ebdd5d2f6378f39d3ad540ffdd02c31e2c4daae9b760482619e",
54
-        "providers\/Plivo\/composer.lock": "d9a2b89de334156eaded5ca4cdaee9b53c05e5d78584faf000a141692225a1bf6a1dd9ea6259bee2158ca7669c4000b3c366703fcd1f55a835278aa9f653c7c1",
55
-        "providers\/Plivo\/vendor\/autoload.php": "597387bcc320be22e8b0060c456fc745d8e3fbb06cd1cfbdf093b0ee52aa30cb7e4c31d6d8c38450f52387c0cd5f9d0483e3976611d96f391f5651b71d2095fc",
56
-        "providers\/Plivo\/vendor\/composer\/ClassLoader.php": "2b6fa585122ace1ba816410acbd8372cb75329917aae6363dbad48e396cca581452616e1386a2e445a8fbb0e461b988279103f4f89adf704bce7726f761abf0e",
57
-        "providers\/Plivo\/vendor\/composer\/InstalledVersions.php": "62b61a5303337c975905fa55addb6b1157034fecaa5fb3b5bad251ef7fa1b1ba840308f64fd2e1244d2098b7f87431e35939a153298530cdbd82f81b99cabaa2",
58
-        "providers\/Plivo\/vendor\/composer\/LICENSE": "f3bb64009f41a425df5a9bbab53490f0eb9b74fa8d6aaa2f57efb928edc4ffff330260666edeaa04a91fed708c3663371cf01b284f3a08d6698aaef7a23f355a",
59
-        "providers\/Plivo\/vendor\/composer\/autoload_classmap.php": "1844f7843fdaabef42d1d9e4c09f92f51a5ad45b26d44b34a2aa9202a183489239a0f5ee6502f302b169ccfa3a4bea7308771ca02d3bad96095b5b2194a65377",
60
-        "providers\/Plivo\/vendor\/composer\/autoload_files.php": "c0eaa5b28b83539deb67f24a98ebff5ac0483f9117a72d5cbba02e26f1f18cd4c93ebc23786047ee61eeef11961c55ae6cd4d4096a16f18a19d2af49a47820bb",
61
-        "providers\/Plivo\/vendor\/composer\/autoload_namespaces.php": "0ac6bde683c053d62b7024686ecced083ca1a326d5346a248b1a058ac74a5af71d515d311ce76df799a518027f734b80b9e7f6e8022a9556c0f24ce90240d822",
62
-        "providers\/Plivo\/vendor\/composer\/autoload_psr4.php": "91bffab80b2ba961f206bf3008a7380f81b7cac7b09afe4bcd2d4787d8b4c839ffe2a67442e04010918631b1c76b66304e7d7bce76371e741b444f2ef527355f",
63
-        "providers\/Plivo\/vendor\/composer\/autoload_real.php": "2ff5b7a817e3acbf585fe506b11345f6f3ab0f21c0ee96c67037f09de6130126d4c0e728ea22508192787a451322369197610726f96f32a12f91b7e48cee86a1",
64
-        "providers\/Plivo\/vendor\/composer\/autoload_static.php": "4fdf5e58875a6dc6bab4aafefd254cf3504f78feecdeda5fb431a56f84b37d2cf8fab8e233ecaadc2667f1be492ded264423f3200e1095aa507172b0dad3f60b",
65
-        "providers\/Plivo\/vendor\/composer\/installed.json": "0365a8c8cb376a0b3ca8cdf63147012435d2488c5ab585db3f9e0d926b588887992c1c8cfe07ac187f5f72afa9a3db936c6885d443db444147d7c87ff0f3084b",
66
-        "providers\/Plivo\/vendor\/composer\/installed.php": "923c151f9cca2fe9489aa4cfe04053d20e1923dfb388cc6aea2486557d77284fe6d9d2a77a7acd94496237465f03b712166a2f2f5837ab13bbb7f0aed8d52552",
67
-        "providers\/Plivo\/vendor\/composer\/platform_check.php": "49e79f2c7c1c32796dfef02f64feda4fc8fc5aa05197465fba579997d332cb9dfcad3511efbb34a32a2b2c8d8901be4ca39867026b2471fb17999ba840c3c340",
68
-        "providers\/Plivo\/vendor\/firebase\/php-jwt\/LICENSE": "6f6cbdccc57476f5386f5336c1efa105b4116760a329ae2fedb30fabe1f34f7c1a3073e7f711e07284c8b57b3b8ab6dcb38ba8d71f6835ac024ad524ad658f94",
69
-        "providers\/Plivo\/vendor\/firebase\/php-jwt\/README.md": "8f3226941b2d676aa31b66f5a38f6fa78a4073ec7ea6d6a3aaf0209072cbc8df2ebee65f64460e350f499f8448542443f9859db75f927fcbe70f1f59384e1a70",
70
-        "providers\/Plivo\/vendor\/firebase\/php-jwt\/composer.json": "82e17e8f606504476175a3c5116bff37c3d58faf5fbd9590cc4047f787b6aae79a84c660bf2e8dca453b998926dec84e6d5bca5d81b6817e09d99c6774cd04e3",
71
-        "providers\/Plivo\/vendor\/firebase\/php-jwt\/src\/BeforeValidException.php": "8aac5fb14b6d94bcf048a1cd4935af09c25183e74eaad8f2db19902f1f017a33261707b12be8080d5a662bd01d997d4d5805cfcdf3127f447feb6ec6b971f563",
72
-        "providers\/Plivo\/vendor\/firebase\/php-jwt\/src\/ExpiredException.php": "7cf0ec0dd02717f5152abf5c01979526fbb89f04c01802915745097c8606e432b41a4de5bf92b7cd1543b37a939ce8e133b7622f29cc48798c321654dfb94a3a",
73
-        "providers\/Plivo\/vendor\/firebase\/php-jwt\/src\/JWK.php": "3f134e7503b44f882a92a699dc4cbb4d7415bb93526438e4395cbe877ab2da700d3ef7a8c037d7d2ffabb84e20165f93e338bb32c2bad9426e63708da4f842e3",
74
-        "providers\/Plivo\/vendor\/firebase\/php-jwt\/src\/JWT.php": "9e5e21477b0495c3cc6fdff79d9b6acc136c0187d732cfa4ea438d9802be4642c2fe0e76b288238fa29bb0a8e37e31d57546d548519436dc49de467cfa704ed1",
75
-        "providers\/Plivo\/vendor\/firebase\/php-jwt\/src\/SignatureInvalidException.php": "0c00a3a08bf4fc2eb675fe8ad3d8cb732a82a8f88d37dba5e510ec798a49342b8089098dfae1f1ef1906e62a4b8e465fb7b4c6d17c9c0d8e66ba33ab271e5c88",
76
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/CHANGELOG.md": "f99b50bf2d30b8e842d2db14a28068364b330b402db7bb1fe87fd4e1e3a9009edb05a519a4c35be68ba99c4c334680ff52ff0bebb84ab99de8814959d34e9c90",
77
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/LICENSE": "ed4199d68a412c0515450194549bac0c6a6d838b3950c036bff6c97457fade76fc914d11bf008321b3e2622ef0a3c14da0bee2f109529cfa5a5fdc11fc6452ae",
78
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/README.md": "dcb463420d7da1805c5cc020988f60c15fc5623a2493556ba4bba63d431c21f0584c1e65f27bf0a4c7962074aacf40d763981f878a10e12327cff9b89204ae57",
79
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/UPGRADING.md": "4f2540329c6e06bc0f05a574b0ce5d77ac3f7fa4032371665dce41a766cd28ee12a0b7803ca507faf005f6a3ec5107a60978b69a4fede8bc562333b736576f55",
80
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/composer.json": "8746b3c8b0fcf0ede926b6a60b4d34e7a3e0e9664aef67b34e7e238c25179d22ce599e8c4a580e9f3d73122a0c9b373b87526874c947878ab339e662b03c150d",
81
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/BodySummarizer.php": "649dbacf3be500e6171769c18b1eec1888bfe831dcef8464ebce4461d5fd337c60a200d3c89f9bd7c2714c0567e5e220b31ec2970e7a013f914123824ea324a8",
82
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/BodySummarizerInterface.php": "d0a1271ad03136dca5752c0dfaa7fa678c6fb03890be828780201cd9fbdc8169ff4fd7c17867cf82ef1672ecf0e9f871f682ade1a8ff37e7b84d24c572e1b962",
83
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Client.php": "8fc98c3490398476a81f660a0dda38306acedaab2f662f762881c11f98bab8b5194ea6c05477bfb2676848f54229087df8fac0e6aacec6499f2313e09b940ea4",
84
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/ClientInterface.php": "d1ab53fbb1b6695e6537050421b3a749a7b34b3184015da449a1c76987fd6944bcc1c4cca7247b98b338926af89fa477f9be4897e6316cefb2c1656520c3ea2d",
85
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/ClientTrait.php": "ec1e95b2f1c56e4443c6fcf695ede88e02f1129b7027287f968a0ef2f7debb7533ce2371a27b5ee07f78818786b0a6d1b3d2f8ce28f44f4a8f7e275bbd1b6727",
86
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Cookie\/CookieJar.php": "3fa0964d59cbba956bb47fe103f02e4707a2a6ebe5a60dd5c33f59402a090b6f0110c2795b52f961f6ddf338567382e1248f1e27bf2d0e2033a43efd15e2705c",
87
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Cookie\/CookieJarInterface.php": "a3c6b9138e285d6c6b7521dc7059a04e1c80bc0de7a925c93ecde6c95cb7fadab91ee05e9594d6b891872a557a1b98fc6717ca1d1d46e00992c9cdcdb934a71a",
88
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Cookie\/FileCookieJar.php": "35111b9229059f54b537baec960b8480d5e3caf2961ca3e7e45de3fa5ad5bd0b0a91c2c4231f6386a4966bf9d97aa308a7e444000dae9b21f8c58b6832dee68b",
89
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Cookie\/SessionCookieJar.php": "9cf11d2908913a7555e9e190e6a4ffb0f0e26ddb3d141faeb0e7bafaa6f0b3259119ce6febb6d01b5a7f5a3193f72a099f08ea45b5955bdc7120bfd4857879a6",
90
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Cookie\/SetCookie.php": "7d6c4c14c9d652c27da23923cb577fa999e24f81c1b82f13fa329da3eda3373ba7a832b72d793d924fda9d6a3a02cb39db97e49e17feab3ecc93f395e614d44b",
91
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/BadResponseException.php": "4b7a572e9796b8043d56dc6650709e59bde237b3bacab1206b807485cc850ec99dde86892696d73121c345f1c88a9d2e879dc91be2cd438defe2609e521011b4",
92
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/ClientException.php": "0011418b0cd07eff70f99645a008c30e9a6a90b9ec396e8cf70ffc281140054bf313eba40d97ed34b59e04e5fd6712330d34268353493d112b8029c1c42e5046",
93
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/ConnectException.php": "bca929720f3f8f4484899b18b40f5d4d40ebc4105b316679a9349b97200c74ad2ae6408e2362b4639bcc4a3150fe63ca1e08bc1b159c51744d76466c41203c83",
94
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/GuzzleException.php": "444ae2d2847cc99d9a3895e2d23f0abe59bf0eae279809f7a4983e34098ee0a0ad7408d251df821c4029621060aff1ea0dc890615535ea4368e5796151a767cb",
95
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/InvalidArgumentException.php": "2647ca6c297960b01b29435db7522ece3a997def6b3af71e26113abd43ca4493501c130e7767b845db0e723f9955164ce33664d49bd67a45bd29d270a66e0e3b",
96
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/RequestException.php": "b0b3163e4eb96ace90c03faf9406b89ae21c7cd5fcabe78035d5d9e1e7ba0ff72bcf31b877ce2d5cd38e940cf0ead52659c3637dfa3567745fb46a11cc9de31a",
97
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/ServerException.php": "9cab599fd913d8f0bb1b8f448932ae0b5c5b1cd7d83fc4e1e4c13fec29b0a849a5385a6c40183b8dc58404ed020227b9ea4483ac89d135c6c82e4c7985604044",
98
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/TooManyRedirectsException.php": "99c4e6f908a5dc03939ca083232cf48cecd742616e00839ae25ca173ec458e6da10be2690b98588b76e0f3c24ee7f35c09ed5c848f9348c639c414aecedf6c2d",
99
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/TransferException.php": "665600a8617328454b70a43fbb72c81ea196584dc22e10324b3c861974aa55ff5867b30b86a65123f1bd4fece75049a9f6c4bfeef5410a9f29913d350358178b",
100
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/CurlFactory.php": "1dd7a848ab73a8db9354fa2f0461a995320ccb677b29464812a484730a85f405d8b6c9b39783881b299328cb8f99e67b9d959b00672bf60a4559b136fdae8119",
101
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/CurlFactoryInterface.php": "0d063ee120e0ff6042a58d29b109bf6573494d427e20184a4d448ef31fe0cb0cedd60bb47c7289d5f6e1027413a28f9f57921823605d4f11086da5c9be8c0902",
102
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/CurlHandler.php": "ae0388a0146bd0cfff1c597570f58acec92876d3d01298e1988dabc717ffd76895b45359cafd7bbc62ca1fb5e7e96fdab70697a2cb469c8c5d0298aef12e44e9",
103
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/CurlMultiHandler.php": "d03d4a374657d671554d06e5622eef0d1b06d0a39a9167ec6f894ee28af31defe1d4306f937376cf5997c1421643e08e757880e45a1c9c10959c967022160f96",
104
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/EasyHandle.php": "7438c054921687fcc4bea6ef6b49aae15651a95cced2cf73ffe46bb15abdf924afdd4784e8d2121ca851934fafce69d3661f1a792e6f2352cc5f5c1803ace3de",
105
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/MockHandler.php": "0d8e2e43e0b8079f20de6b86c241afdc83bb5bcdc5a91ac47084ffdf2a3904a79e5db6fbafa4715785ded8fb90dd8fc418aa05bc0fa8c52220555720f81e827e",
106
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/Proxy.php": "9caf11da430da351eff6e9be0a1e8e029bce41283a6d8215e2215d6abbd3f021018564d1e6717f65f280703d5e4dab78a2b522042d63c5a9cfd019b0bb0aa4f9",
107
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/StreamHandler.php": "e45738ddf123fa57df229fccc94622b9a2ad5dd9bf6f65d24756239b587937bac9b7a37220e65c55f2abbd7159bc16ac785893d4aac5c192e6422af4fc4f1222",
108
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/HandlerStack.php": "900b9df966c3c1f3aadc45bd42a81e8ab153c74d0eb90cb3c8b2f9d46115353f45e5bcaf0eaba1281ab98dffb3d136a0c0fa0058fe73d906eebb741b273c150a",
109
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/MessageFormatter.php": "99460bb55080cbc7e08eb6f1b3c8abc71c38cd5d6e04422bdf8144ca554e7d7de29fc5d5dbf7aab5f7440c4ec9d779d684f8194f90139a1ece1bb086f14e3cc5",
110
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/MessageFormatterInterface.php": "609462659ab00682e7fdd1bb56aed5ad3cf54a2ee3b641623175b9dca0136b4e1cbd3cb0541526ed86d05174a18a9333ba52a9e50f4c05ece55cdc636815e385",
111
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Middleware.php": "42fea3a5bff7eb363a7af1f85a21a9322aee8d7e343295209815739f8bbd5dc372f14e3e8c5454f7650a3b9d802ca25fa069d64fa16b0f5d4d48c3d626ba3527",
112
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Pool.php": "a6d17779976754d7c16127680ae32f8e45ed54c3ef4a2a6364a1e4100ce732b8494b2848977ba6b2bf6fd296d7a54b30a2f021cba5a88ddd0d1e0f3a3712b9cd",
113
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/PrepareBodyMiddleware.php": "268182133f0e484b56fa23193d20def23166eeabcc2fd9626b17cbc20188d76549adaa4c768df695b787d31b2eb26a5316f0a3531ad3ed022aaddf0574fc2ac8",
114
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/RedirectMiddleware.php": "38bbd75b92a6764b0502cea113e222d5cce7abe53c7ea0c01e441fbbb6b0514f2f54388ff14d459ed611925eaf9b48c0aee1b1fb41892d07d1b260734a1d2afb",
115
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/RequestOptions.php": "239e524c17dadb296efbd8b9ba82b94ddfcd90c83377fe4bf2890dae5dbc62f58032205274575f14bb2e745112ee59bb559936b992d9a227dec00f5b2e32c03d",
116
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/RetryMiddleware.php": "01236bb2265c0761148ccdda7d3668c10f9539119bcdcc36f10d077ca32013ca0169938d6f4bd0703018f38fac53b2bd34e873a07d8e5287c26fb64b7284dfe8",
117
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/TransferStats.php": "4fe882f7f801ba55a3934e00d81aef09edd092eadef498f3bb424f7f32dc8d568940806a9d8e80b1b6c768cffd41ecf0814a0bb366195b2400f08a8e310a8c19",
118
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Utils.php": "c3e52199a0a1755f52b6902b78d008de10e33ff8b93242a709d7a12e8c05c1c2c09c2874439606f0f3ce6b353bbe3b8ac385a236307b428fbccc078e1959c7c1",
119
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/functions.php": "f45c62cbff0de0255f4f149ee3e93c52bdae44492d43c9314a48d8a793ef028f8a8f704a2b28c5b84491687c3b682e9f85c4ea61bf63de56c6cc6a4ba8081ae8",
120
-        "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/functions_include.php": "058a92f735b5848dc18be383478bd1659a0b578beba1dce5a1ef3b7a0b6b5f643e2f222dd72ed09ec72e8a5c5c9fae9757979f7c4016c5654bcce9d7dfd42d37",
121
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/.php_cs.dist": "4d42019074dff2a1a5bebfa51568de254e5128b88ad309bbed5e8348ef213035cf3a4da66ae6753354a0dcf6ccc0001bfafa2453028bffb3548f2ede26c30177",
122
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/CHANGELOG.md": "0c021cdbfea029de4a20511445e64d0d6c35400025f1361cc913754adce9b2dc16efeac12cbdd489ffcbb76e95f91108dcc557fb9dfdacc99e5bb98f20b55b43",
123
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/LICENSE": "9699a00cb2c5ebf932515e1232b83f79c944f8100881df096de09e25222fa01173bf24d9e083db7d9605d1e4f5dfa14c726aed52c0fc2499643714a9e64c4cc5",
124
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/Makefile": "a350f48cbb68a05cd07f787522193851f9cdc6b2643e34eb502fe261387d97e5ceb8499a22b20ff2fec5d7352ff239a952fa3b129ba3407fae871683d65e9bbe",
125
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/README.md": "1ea705deca28d726cc65d0f55db886545b9f5309ccc085bb482f627a0ddb5f8609d6635f65686e3e26b9a23cb8bf03b3e8d02a26d25eaf8195dc6c2cc93be0bf",
126
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/composer.json": "74a66451bfa422f886266ff300b4ca5f7b0ed62199293635671718caced457f6eab5b8c9467f24e999762f56368fb35742dc0adaa35a233d32c72783112a6c50",
127
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/phpstan-baseline.neon": "916bcb7d298578dfc4770a3c49ee558eef9a20dbff8e3d097506379c8680917b08a8f96f2b59d96b1b56b1ccf4a5478c868a2da504a1935956db70f51528494f",
128
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/phpstan.neon.dist": "ddfcf700a47b916ed1072c979f13d6d51327c9bc389c49ad264ba23279b01151b90aaeef0a81a13eafd40115d407ceaf471c20a61b47f1b4796f8adf3c1ad218",
129
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/psalm.xml": "52c09c8b7daf6d90db16a5ce50b7a8ce15c1ffa02265fd1d4b117cf717331475245bfd4f2dc45d3990d67333988a11081e13ebf783bca8854a1df9c1b0cc9cfa",
130
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/AggregateException.php": "97b6e46aa16ad26a2b714129b83d933cba02ec7afcda514ef67c5027cf5b9b93a5d7cbc72560307adf294179a4d7b86a6da9caa835bcf5be17e398501bb88fba",
131
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/CancellationException.php": "b958ade84fa4e6c7a7efed66dfb6a7f83b9743a9ac6581276eb99bcab667ebcdfea92a9bb114d086c5831d26abf7f6ec3e03254067e2b29abaec995e28cbce8d",
132
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/Coroutine.php": "d1c789e47536cf8c9db52acf791bc6de0d61790856a78f0cf6a9c98a1628d2c42cdf9e5e94e05fea802a099bd3ae3c65b790f2fb5a342bd130654c4cfb4fcf07",
133
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/Create.php": "a3651bfb1f458675c58397460c8534c2819404fc89422467f119de4cd80147177e462a9965bde6a75e74e4354c3c6935cebe1891e6a53a1bb26383f22e9dbccc",
134
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/Each.php": "e57ea03f69e1680b56676ca1057e8defe7eaefeffb456b636f3cb32295eb6be36073c7a9a621f656c40d5661c0fbfaa3a632961d82ec7f116ab7fb5aa9db196a",
135
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/EachPromise.php": "c7d79757cca80b7352ffd12a6743a515255e4a89764f65067035b16fe39c09b6dabb833aec3fad3cb741aefd778f620202caf79e98b86095c6b252f4e555bbcd",
136
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/FulfilledPromise.php": "952eac7f7cc150394dedb72ac97e624db8156ecd41c8afc382ed0cf8e4c2c6c94879b7ddf6ff76608c6a95ef30ee136f44fa03ab9f5ce4b7fa01bcd0c7e7574f",
137
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/Is.php": "894b3c475b5a828e442745507fae4b35bf394fc9fc93905258f9736a67112c321b1f3e353f8f3fb84e8778bff67bd9d27a6fd5ab6dab3218a30d82b8fd14ae0a",
138
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/Promise.php": "bbfba94124c36b87941e1548162708a5543f156d64a8f465f78397a02bdc34c764b60f73d5e77a3a2e48727f4cbd91f60b9c1cd47c0fe205994c4ffdadb99c5c",
139
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/PromiseInterface.php": "8d8d1d9e04d75ceb6d3e656794fa93170a3b1f9c2dd3b53ba6b4dd3e599f880599cab0b1ec15eaedc1b26d09d6c535dc9fe92802ea8ab1ed5927ee8cda7cb9b3",
140
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/PromisorInterface.php": "1058176a68078d02c288528673176648e38d2b8093e67b0984d73ebc710c0bda7019689303b1f064726cbbfc9382e733443e9d5443a77715ba40bb798ac79e04",
141
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/RejectedPromise.php": "53914a46ca238b8d079333f9c71180aed015a77bf765cd2793790dde21fa7fcf67dcedc5c797a1d7caa06d788bd9631628712861b1185f3cef9aa63260aff0cd",
142
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/RejectionException.php": "6dae5e0b0b47538e5c94a3d4890623e3ec41be8198a1d00ca84d77f32b9d074cae13e25ea90e2af614e802aa28271def466e5ab623c187df49425cdfc5bc05f3",
143
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/TaskQueue.php": "431a73762758dd08406a41587115a11e61f921cc01997ea71efd803b2e3882b9cb7f6d89694e06ecd2992f2bffa38ba55d631dba7fabfce3b84d68dd4913a02f",
144
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/TaskQueueInterface.php": "f0b2b36ffb75337c590f82d3d7d19a4caa4eecd6003c0bec7ef935604dfe35f4e960f49da7115b3b3cf65c61d04bdf258310ae1b4f4b6cff4eb09f52626adc11",
145
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/Utils.php": "9bb1eebf4d0f43bc47cda6f70f08b3fde962355075bb87d40ec75d41b552c262a79023a72e2e8d776b6d0db1ef1d412e398ae16d96476aa5c72afbdab9d5a9fc",
146
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/functions.php": "b756c2bce2557e9c6b8db2ebfb026354418c93f54169d1e9249478532bb02e1062c30e14060a3bae195098c74deb4f7580943aca944a162615c44139acfa7861",
147
-        "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/functions_include.php": "17063296fca8aa655e7d5267abcf04051cd58fab5a7ff02530e1becb5002306252d5ec55c82461cc51f62c881c51dd80da53ed9d90640b6d0dd56d5e8f819022",
148
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/CHANGELOG.md": "0540da857957565d77741b846932c739e0883751660d561b2a0990a7cec8188573c2d31400cf9f125d1b6eab482455d19f30a8363354341e3c54088a0c418e7a",
149
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/LICENSE": "5d25479f1c9c0b802e2944e029d7011f9b9d3f7b37f7c12eb77321ba448414f79b0b254c0846d2e5e1b8826bed85d7c377803a4ad5d5afb288f220c761822043",
150
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/README.md": "b9759cedfe2199b2477e95fc0770f35ed6a4a18c6e6b4b4e30a20f75945505dcc76834e20e61e3aed90fd790c677536bb43f593de8a68558a200000eca8d0bdc",
151
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/composer.json": "27ad0b2937068e201fd0312a7dcfba706a8a318ca4e09d80f29611803bfb28d48433ba5f2b452da8bd76fdfe2b9f073f81f2e2cd6fc3e4223b20637408f6c836",
152
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/AppendStream.php": "d94d352d6f640589e84fe2aae0bd20880c4d6e897a29a47d4dffe6aed4d852fd5df274db2e68124c7f15b84d6f4fc684873fd03d003db39caa61b024b053e396",
153
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/BufferStream.php": "eee7de67e107fb33e8f97949743726a30e8201fd874490fc93870a410b1e0e3a059b75dda972b3a844b8c739b9b768a73d65c61bf8030589d0d787aa26f70e8e",
154
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/CachingStream.php": "e9b1e3d5e2bfae610677b9d216643be7b2e8b97cf661bc5c67631f994df0dc88a9a9ac7bb9dd68fcfd2ed343cadbbae227a8a46baa3b732733497e24f1338be7",
155
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/DroppingStream.php": "63db37354a2eba98b768f0929ee9a4ffbce1647a79cc9aee5e994cb693e53cfdb9f7a0fc4c32b68b46c64b39438b1c53a30532f5f8fb442f07062a6b4861e39e",
156
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/FnStream.php": "bd25e2ca8ea196a5e876c5b9d01c6f2a27b206f7ba05d047cb46476c52191a594f1280c7435b6429e4ea411fe5fc01a2388e213df26d27c5ae5094a0d0f2d619",
157
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Header.php": "27014466522ffca93b4a3da6e96a5e8501f11691f7642a2e5091f3d0c1b146789ea41fd7fa1e3948f264926e7b764b557b1b564a95a7b5cd56c17c8ddfb6b7d1",
158
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/InflateStream.php": "e19b69eb2f1d2f8782f7285414095ea810f746d02a447badef5ec7185623235f17f5689682b185ba124e71a19b0dcf3d36b64894d183e25edf27f1d1e34c1c0f",
159
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/LazyOpenStream.php": "8c262a2c574767d61a9eb084d6848bef77d047601ec5688a90fbc012d5349d9b4ea188444fe509c8ffbcbf6ecdfd839a461505ed3746b6e1c5283860f7fd4a2d",
160
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/LimitStream.php": "81a43b1ec261207c1a52faac2c5099a429e43083bbe0c9099f447859d2ea12a45d30e7f0b5a994696084b3c59401bc28564685c432644caf6a9d8b9669404c91",
161
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Message.php": "4e9b857c226b57e2d2faea27643d6f213bba65bf158889a528fd684cf1acce6f480805d04da39a32fbd25be9fc51c4f1a3c1bbc9e92f3707fcf33a120b2aa256",
162
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/MessageTrait.php": "367bacfe383be2caeb0064fe80e5f6b138050dd4189bb65ff82d8f86d0b1b604090b61a2473d7e80c733c395cb893fa9eb2dad0a63a353c19da32e940a1de01a",
163
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/MimeType.php": "98467f19beca7d4239963d4d91a7896d44539c13a5c694c4aa8ec68f3b57031367d1cddff19fb51c389393cd1402a574c9afdc448766c8807228d726796d2e9c",
164
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/MultipartStream.php": "5bbb8f71ad1f2f421eac8c0d40c3a18372516e8ab8f2bb3f917871bec9aef0eafbef930902084aa3ca64a8ae930edb1f2befe1e6b49dec387ea239c5c475c099",
165
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/NoSeekStream.php": "f003ec01ce15f5dd56200396a84a2c94a1b134d320230983ef91efb1abc770827018894a1b8d1f3a68c2aa481e8f0bfbaec4c568d0b0fe251a61f76ee22efa38",
166
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/PumpStream.php": "15192b83cabf910107b30bde59197618e524aece85f9d396dcd8459174fe50a1cb82de51e5225b8e6ea64fbeec7b4d94f035bba2ed893efebb660105021fc98d",
167
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Query.php": "8ace1f141c08396103431803ed35e1bf247fdf7f7c7b727ca63e58a1cfdd7e353a6c266c8a7bdbb863e5d290414ea630bbe37f55f275cc5a5b946b794ce01740",
168
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Request.php": "e0582b7b304fddcd81a214bd8ecd4db301479eddec3084b18b822f5e22fbc9d1fe3f3d2f6ba52959619dfbd0e98db304b2400e67675fca41f470ca6126085da2",
169
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Response.php": "32524250d58fba5c152472ed37160a9aba92c586c9b2a6bc55f97134e490636189bc8708fd8ca4145478a5bb20ea51b5bc417fa8d61ab08fab3479a04c4506e2",
170
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Rfc7230.php": "beb2f85fd643c3cdb3c92b401c4df1385bc6fcddf7dfbfbed88396611438720a1b86ecb9b913472ca8edf1bd9782a3692b2138195fb366ac1b8a7f1b0b81d390",
171
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/ServerRequest.php": "f3fead87c83ce2f73b2890ec79cc620f319c59ebc41a041e4b70b38bb1e412c928fd7ff0f10d96fffed841cdc1ef2874d5ddb0e7cfbbad3ffa81ce7484365c05",
172
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Stream.php": "7d108ed410ba89cad35637f837d97f7ef53c43a4666d0502e3e7dc4aad06e7bc365f311961d2bb8768faf9d9c6d64d09e080aa9bc65638084a127e7a563acbbb",
173
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/StreamDecoratorTrait.php": "e1b90e1d97a4a1ed1eb1552bcaa9011f79733167b7e5e3f2af8cfdc54adf0d64a414ed630ec74418020fd8ecc7c75e43db6bbe0fdb9ec6d3ea928bd3bb3f4561",
174
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/StreamWrapper.php": "7ed1833a91a1f56b743172192b7ce4399928b261eddba6bdcdde958bbeedeadcaadff4fe5b3913dad0e4b2cd9346f47b43849cc65bbdb839c9d9e4b586638eef",
175
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/UploadedFile.php": "a66f1119bd7327a19315456f17ac2d3ecb40e564705d41047a91a02b431efcde1eab2750b2f354fd2f5c10c1ec1b5968e84e758d51210f011dafa8df5fb35c0c",
176
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Uri.php": "fc5c81c97687dcd34ebd18c6714479eb6b4d1c7d58963bf7f1f732eae98a04b094dd9c99d58f4bff265b2faf0629a456c391ab5b96534c927420f51a95dda637",
177
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/UriNormalizer.php": "8992ef486358f43df4a9567a6a232ad76883d9c7cacdc94707343e5465c857a4385739f66d0024136df94c59e60a5ccbf1850634a55f2cc1f56adddc717434e0",
178
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/UriResolver.php": "46e4c0ed24579ad9a0cf467141fda7dce6dd3a3d3281a1606261f322462d1b19bca413f3c5590b7ad42fda1fc57e60ba86d121b5af0c5b5a2ea21bbdf07f44fa",
179
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Utils.php": "be75312627f929b2ac94cd6d12972816a13660a40d25cf87f6fc7fb7af416316ba8988656147a16becfa8120ce2a484c84d9f399b43dea2cd3c7ed916f7d8302",
180
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/functions.php": "f31604b89969730b482cd03a13b1356ff9b91324eeaa9ec45a45f86be2bd52a8209cec55aa878d5875a3c82fadd86848d558789d0072e853505d644f0a2603ab",
181
-        "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/functions_include.php": "5b85d1438039f778c454f67bfd3ff2933d06b1aa4bbf9dc516e385bd36cd749f7001de6278c5a1b4e3c5a7d280876d4d35337f87a0dcc6e521ccc20a3ddad1bb",
182
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/AUTHORS.md": "bd202fc574c862a7c3d4a27653605b6fa377823744a793a7848ddaa7001166fd645d6047892d79c8488786d82fee785b87b19e9af1d04512503eb195bd300aad",
183
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/CHANGELOG.md": "ef87f930b797ba0b32dec670491e021b5c881f6986624c1906d8f910e8393b37e6d7f5eb9f860c1bb8447ce61a206bca80db4b2279c57bb064a28be3d83690fd",
184
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/Jenkinsfile": "98d95e7185d040e9aea6e75118ec17ac34e38e17f8ad5a38d869ea02c0c9de5dd79d208a78da23ccb87444df7b7de827b314469027ee7573cc51423521786320",
185
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/LICENSE.txt": "0974968907abaaf61b640ece98a502e3c677b7cf734ccc82cb522b3e166c50eaccb189b4d31b03bdfe8e61a97b3ce06917a7ff5c7c60887e2ae944f909fb6e72",
186
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/README.md": "ddaea1367057ed09023311b6ce37938985c188fbbcb6867c6c3ddfbdb984b954e42fd6450d1e5cfe10374ddc4448f9b96d6130d465983d634ddb3c0b01a276a4",
187
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/ci\/config.yml": "d50e43de2ba68261ae35625f8ce984903baffc3c6535d31a7fb3c5efddd08f71cf0ec3aaf22ee9e17e93852dd99284b653b343a053ba50a45cf6716033131e3f",
188
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/composer.json": "c6b4f35c928d33d62b48139a8be5d85868fdcd0716380865f8dbe0f5a708600ad7dffb3ba510a45bf4a8002f7e1fbefb1c835de7e3e2d9b7c1cbddf9fa2b565d",
189
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Examples\/JWT.php": "ee8052cfd45be4eac77df60902c518a14bf2df07ae7218322493a8e2d115280b87c65f9637ca766a63d82dce36c7c78e894984dc83031a9b7a8d5a6345d38214",
190
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Examples\/Phlo.php": "f9d6482c51987aaa3d7f0db59cd45030e17284262681866999309205161094d96a55a39dd2898d0b7980074d764e1bde6cb6ad1f50be8a40cc9d557431c1bf91",
191
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Examples\/SSML.php": "932a827eedcd81956c275529815a2f7542636b0cb887fcf182648e8f972006f6ba8ea4a763b3de48aac989f26a5e44752c7d3a62df256ee2b6a1c922de677e14",
192
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Authentication\/BasicAuth.php": "42c036c38225556834ad5cb916db0c4783c7127909053ef623e7f71aa51c9fc968b9523fe5dcdaebee769cecdb0c4c76215116cbf5959b268c8792fa96754531",
193
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/BaseClient.php": "029f2be5a3c7734b5030b4fa96e0d7c0c1252bb7b30b9f001a78abaa646d6d3821a127859e5d170ea5e3c7f5c86d06112f28152c5cb2315f94dbccd318f9e5e0",
194
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoAuthenticationException.php": "7ee7458999adea1ab1722358f669467cb35265eb616ef2eb16e6bc3d42a7f3c2fcb0b42655df8f4f21127bfecded765bcb479a6923dbf1a184e00f6e26321ab4",
195
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoNotFoundException.php": "bf54dd70534e988c27d5e7d17bf8edf9dc65191b77677d9ffbf95ae3bd019f1ba368065e82440e04f9a0d7045cd62b5915943273b5d8d72ba01676ebf2975edb",
196
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoRequestException.php": "6655a36e42e700283235b84889088e378bab6861ae98ea99c20bde017ed39b83dc743e5c166e8129b9910a434b119578b23523fdfd5e9e1dcf3d57c5cf9375ef",
197
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoResponseException.php": "4f18628f90b1c5142446f0e394d5071a91995baec240344a1afa47687ae463cdc3dd18a79008813077a3511c1b00dff7a8715d26990afcb6f9726598c96822f3",
198
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoRestException.php": "758babb40ea45fb50dafe5231605196214736f014860618af9ca7161157255cdf20c5b0bf534f6f6b30a4f9bf612b5ff5edd2f7adc45553ef12555354f82c15a",
199
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoServerException.php": "b2b8f6d1d03a720885ce5718b1c80bc75c7f483f72a1d2d2313b98a37e152ca78bb688f7923f025563517a52de7e915325cf86e463a2083c30ca2473446b91c6",
200
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoValidationException.php": "5faec3f351037d6affa710c10f733c57a7919cb04820f93ef0c19f75b2f2b2b8ae1a0d004c216673977539b713ca31475f233fdd21698a390319364d2b9a4ba3",
201
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoXMLException.php": "a66429863ac7caad7e0d77f7a1fc105fea0a45e7eecb753e64bfd5a76c89b5eb06e4228bd63a78134090774458a646e10a11417855d3e72b2a6fd75aa754c625",
202
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Http\/PlivoRequest.php": "3fa26ce55e1b201dbe78e4bf3615f8c38d9e6c4e96e5b3673f6cf7985bc4055b88f227677273189381bd29076ae5e8baba6c0cef4bd612f2ff8fbd2847b6c129",
203
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Http\/PlivoResponse.php": "3f9f1ce15ef75db2e028f198d1bb337c37f31fa6dc7e5b985ad589f6a4dd7d873e3dae968b80f5e1eb6056b4bd00e1a4df4d54242206861302f9d6263d177bbe",
204
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/HttpClients\/HttpClientsFactory.php": "a9fbd6c007260fc2169648c9c764ff7b5988af0874b21211f8e85e8a995897d597cbc0c9fce4ec5c8d60a901ea05c5a8cd70684c2302ea17bff528ac674ea578",
205
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/HttpClients\/PlivoGuzzleHttpClient.php": "dc661dc489b30bfa98e0d75f04147d164ad953e7dc51326a20fa94846fe30afff07ce92958c27a9bce9fd15371543852c0be4c24031cf382b54403a0901189ce",
206
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/HttpClients\/PlivoHttpClientInterface.php": "61a18efcb4383bea7598ad9167ffe49a73e295d2ed3229c015f9a5ea08b00362005df1388cf6846f1c331b123b187290a1651341c76ce2cd4233926c927b6e9c",
207
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/MessageClient.php": "f96e09d05b71a2e0b6675300132634f5664026bbb84472a1e7ca5f72b679390170ed5aa0d4e21a4dd1bc646cf0267f0f9240c931657f7cca9b2bdea501586d26",
208
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Account\/Account.php": "22bf526a376e6045fe9045ef4eaef52c769ceb8a7c3ef11902e66acdbb673fa521f70f446e6724155c8499cc700a6cf4f4d435ed06d81baab69f638cb15651ef",
209
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Account\/AccountInterface.php": "5093f51c3803de918f3a500f1754f47a3dbf990008804c07e543da253a22641b96ca2ae5faa7e6800cfa10a41f7d407e5d29e9907c0970a9183a8795be9f7543",
210
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Account\/Address\/Address.php": "7ba3e1e7e136d43989fa0449b29882d78fcea39cb764e54228c7a4a899d5ce4db2deae9d9ff9ed5cc53a8af72f98c55914c10be3dbb7b9a354b8a06e17cce829",
211
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Account\/Address\/AddressInterface.php": "36182073184f67cb024e0c020307d4d74c8b5c65e3ac7affcb76e189c91af9750c318404d8ba3a5a6e104d64459c59c80d7a944395796f0f5aaad18d43d93720",
212
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Application\/Application.php": "9431715557954e8ac1cc340f3f568a6eddd6e00a0ff0356154b2778b118f620d0afad3979e79eef0a583b313256fdd018516cc8128a441dc667b39668b6f506b",
213
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Application\/ApplicationCreateResponse.php": "cb1167e6057eb71e102d55ad2ac3cc2c7aa2a757b317cc97d8d08dc400548d4ac56379653583d53185ee8ab37c4dd189b66af011bc9a32baae55991922c41466",
214
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Application\/ApplicationInterface.php": "77af1063e341dacee15504837264b8140ffa3e8f537b9eb0b102e8f6d184deefab6a08ff7f771965c31d6c84333de9963b2e998bd0389bd0517479d5ee150d3f",
215
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Application\/ApplicationList.php": "0840ebcf3a0d9688cc68a82f11484339d8dadc9d1a50787ee11b3849a361a421f30417ad4322633c53633b4cf58ff7980de6ef87471fc88b16d090f127763450",
216
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Call\/Call.php": "8e0a3bd97abbb7b9d03e22a4eca6eac4989653c43facff064a374f6787698bcc91320352d105f66aa3f31cc0d70902c8cef0f9264062ec4bf4e5cba6d07549ec",
217
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Call\/CallCreateResponse.php": "a3a07958282fc5a6e7b99978427e2361e8828a63c06a940159a7fbb356ab9621a899e6e2a25c27d445fb92ac34b63d8e5a8b6f0782b7f20c7d9f4308306903ee",
218
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Call\/CallInterface.php": "9aa42eadb3b1c06c802d46f1a11b17acf59e0c78ae65b6c9039b4afd9fe53f171cd8023be738a359128afef545a6fddd43bc039d94b014d122e9714f9591ab71",
219
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Call\/CallList.php": "9883c38a74497c496cbf7c4a837051cb6bfa0ed0b9ca9298f8908e7195a000196f7c79b4846417c64af0aeddb6327e45ad4b36352a28e8300c977e21db0fbd0e",
220
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Call\/CallLive.php": "14fc226091078fd069998fe41625d086407e0c22455dde078284f9a3e8fb34fbcac0b75484c5350b437387dc203db7690d9fe1f02aeb09da2d5c57f7b2ffa651",
221
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Call\/CallQueued.php": "64552d83e5911b11202ae4a965bcd7c408643c446566c3d09aebb0bd02fac0dca41477988aae62e91bfb42913900f1eeae9d20693c6bc29651e2734b06cf18da",
222
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Call\/CallRecording.php": "d23438ea994b0ab936c3917d77ae9bb38bc9ca14dff4c5c120a0f583db46891af3bde1a8c3f55d15bacae99723e510184c14c60eb6d3d411d46aa90c5c8acfa8",
223
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/CallFeedback\/CallFeedbackCreateResponse.php": "cff0c47988bfee02787a2d73df6b3165749844c1a93b1fb91e87e80582bd28c8c7efe101fcd532bdab62886eadc6354924eea81278da5037ad9d3ee5d8dc8f29",
224
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/CallFeedback\/CallFeedbackInterface.php": "7860708568f488bd0832e626123f4bb5ab986fa5d54f305d4744503ceb4e919857b78a02b766e7241d324a77d86592f60f26d1ed78955f5550bd0fcc7bbabcab",
225
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Conference\/Conference.php": "8b97d6c9abee836cce410fa1216fdb5aa8a4df0c8543a75c2415bb31a5ee2d87531d5d162b218660a33cdc30539861cb09d85a780feab2d5321d0e8ce06194cc",
226
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Conference\/ConferenceInterface.php": "34f563cac4a75ca234e4517cb4678998461011440f30f9d81895adfdbb2e1960009114773ac30901dfbd2596d327554fd335057de66516b656f7a96446f4b06b",
227
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Conference\/ConferenceMember.php": "1a880200a2988394ed0436702f805ce60762be1774e1d156f38e45be39cc72203fd4f04411a521ceba8fa9647cb00f6d1bc6d94798b66f12175fc68d88c51dcb",
228
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Conference\/ConferenceRecording.php": "1c3239209726556971c2cccc812ce5bb5a3fc8c7a0e4f3ef520e037acde32d9659dea1dc5d3803e1f7cfd39e945a1680983bdeba8cf62459fc168f0df731adab",
229
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Endpoint\/Endpoint.php": "4c9a87fd6042a3eb486af5dc899d1e4c0948de5ebb1467cc85704030947e2588e79d23407ff662a21b097fb46a05925c3df29dd6e2a038555cf44844342cb206",
230
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Endpoint\/EndpointCreateReponse.php": "f77356f3ca29ef7163e47530004a5d79c1da73e922b17333a89512e39c7d3cc842b161d9dcbc745075f6a6c7ae27b7f7cf85f56a6d5bb796b87db4efbb8425ae",
231
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Endpoint\/EndpointInterface.php": "09914bc8e8eeca2812a4dc07469137011eec1dd77b99e3aefc8d5b8f4675b8f221bc54e37417f6c45b07896b84bed953f8c85831f9e7cc7b85b7293142b60fff",
232
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Lookup\/LookupInterface.php": "040b0a2c01ca3c0c02c2c8450b47e8d1847ab7158014ae161ce971e330712d14d389cd746a353707d2bd2667dc604e55c662af8eb15796cfc613f285e170ed15",
233
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Media\/Media.php": "72b83f02669ec7b942dd898a74c22e909cd9b058ea2e903e92ef4dd9e985305311d53c30a0c54a3f0c210433aeb7b8bd04a4b3a768c853aa73ee4dad9c621a56",
234
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Media\/MediaInterface.php": "1cda06754bd1ba503a8405561594f9d3cd5befee2cc6d9cee98542886c71601bd8744899e7ede346df6b90552f05a9eadeec4cb4d11fdab3269de88170cae961",
235
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Message\/Message.php": "54ae356246cc911258552001390f10f701929afa24801b2bc6cde72484c915e2e738a03d04aee90908003efb3b4b3cc8106f92d7ff87d2119e8a350f7aeab54e",
236
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Message\/MessageCreateResponse.php": "75495f459ecf577e2e0c2f8c075d569f36df80c5c828fd1d6b84a001de2c3d032add50b5ef08177d5c68014fccbc939c8ff89ce6c884ac0c1b64f4301d81cc5e",
237
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Message\/MessageInterface.php": "e96af121fd4a851e4c1f27297c602a5e6862e0ac54974aedb19248f017f2d98386ea9b495ef6cb775aacafa7b51b6117665c803356442786142c15e86066ef41",
238
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Message\/MessageList.php": "baacdb72ec116be9a14b8e7e55d6c40cfd8b04c5bd1b0d93d5c9919ccba2591105e03dee96effee29e95ab7b7e58e45569760ae825351c1891877dd96853254e",
239
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Number\/Number.php": "1bf8e1b1844ccced8d8068a80ae45b6904f59b0fa0e7d6a7c5b43adda906859ec11d709a501f560aac3f8315176e9260ba4796aa9cbbd637431ec94f0ec0c668",
240
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Number\/NumberInterface.php": "e633bf2e705735759f6e27f9e747e3e05e839484b57672e2da405b7e2d8615653fa828f8295a442d13f5b64645fd009ba6cd923f0c163f2070710c7df57a1a70",
241
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/ConferenceBridge\/ConferenceBridge.php": "3da97309ccefdb15596bab5180d386e2a78cf938823225820f5b206d8d8f366209dcf96bd139cd0364729c8b733612ae067d03e1e29aef472c4dc82527d3002f",
242
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/ConferenceBridge\/ConferenceBridgeMember.php": "9ee728dc1f37fc183fd4890ca5d213bb1f47899d2379a16009de7ae32b75b459444a1a329357faff349909ee89843ac5798c75699fb2b8d939501f61dc09b564",
243
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/MultiiPartyCall\/MultiPartyCall.php": "d13d863ee416714a697600882f33b88a8bc9de8d5603149fa199f787d7d904d55aaa6646cfdb3d71caa99e4e95d7e352199e8b54230d3c64cfb81924f1b603f9",
244
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/MultiiPartyCall\/MultiPartyCallMember.php": "6e8f1c6a1177d0c933352bc2d8bd54c989db7679f2feb893f430e9e634c446d033d01a82ea740185b1926734f285facdb3d99b18ffcefe83be723fc08b50fc12",
245
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/Node\/NodeClass.php": "b8a08dfe16a42c08ea66d141b3b4471caffd2bbf89fa4b360a1b16a7072ea29d538792c16b93f1e3f1a1a01d564acf1a40906c32482c4cef0ef42f1647e483d8",
246
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/Node\/NodeMember.php": "e13f76753f278f07e8778f1d0ad64c9ff401633423ab2476700ad0711ea5534f7caa871b5e10fbb26096feca64471205082f9ba45de607e7ce71eccda0e7db91",
247
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/Phlo.php": "da8e7b69e9290d876b6ebe6778c09ab68f47f13cb22438ac92d6eb880b7fe72ffcc68c681cbb9be074e36f3ce4afefc69680e7a3493d3046a04ca9ec432d7a99",
248
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/PhloRestClient.php": "5f3b9bb5e3f7dd96572f1dc71531caeb0b14b21ba7c291561c1ebb040c3ded22bfc0dbd9030843cfeda8b4f83e69d86ed9db2b3b7d0cc8b311ec64000f3b935c",
249
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/Phlorunner.php": "c1f3764aa4a4c14a33614bc7cdaa05043d268b24f88cb2312bec3596e5e7e5286e9d0429edb8583b640723784b28ebf69df691d5e4ec53b7d7912252832c3ed9",
250
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PhoneNumber\/PhoneNumber.php": "57bb602a9f511dd39c7143c50a9ca6537bd83f398eeb6f198feec689877a9a423d9cfb0645c4d20eaf30490ae6b6ebb91fbf1d00ce633a2007333ddd6273b032",
251
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PhoneNumber\/PhoneNumberBuyResponse.php": "6929f9a7447425d76afae60b91de8d6a5a42a1e7864871dc73a40199181d5af8be9f645185ce1e796e75440d138cd0f69ef86ef404879d74b58107ce32824b6b",
252
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PhoneNumber\/PhoneNumberInterface.php": "3720a8056618a019c64de2e4e05e99e0b30cf48de07117e75172b8ba02f2b2c60a1e0b12c3cc07b3f5ba8aeee2e747c3eed43b5bf589c29c7236b47b5ce75747",
253
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Powerpack\/Numberpool.php": "a774de315b1d34a61c9b9af9b21b8fd1f624b48bcdbc7ed1302ed25cc21093e05ce1533c0ce4788ad36ab28792878321a99b941cf9e1a8ec7fa2f2ab1d16f872",
254
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Powerpack\/Numbers.php": "f62f6534b223fa353f2363e38fb1069c3d10544a4cae2efeaff30019c0cfec7de2b4b9f551cfc16bf26fa1dfb916f6d916f9cd1d1357f8cf6f7cc84815812237",
255
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Powerpack\/Powerpack.php": "895da995fc1445bb6f7458c3904c918d8ba8e8db75e94e558f04ab8355058bf82d881d7c282fd8e03acf723c232f3081733a9ace2bef1da42c3e9f4de452d2cb",
256
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Powerpack\/PowerpackInterface.php": "e09a8e4e67ece27935a81730b7587bf29afe72ff9aac57b6c0efa6fdbc4b7cf4c91d60bdcc506a2c0b86f7a4cf7df70c38135e295504417d39024a4671b3cd33",
257
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Powerpack\/Shortcode.php": "afd1a0a277918a55fabfc2b46460ab6a8740ac68e1d7b9a0180d88229d7a93269305765fdc362c02cc2996ff7c3d8c95417bc90bb74e44f9c2cf12f023f45b08",
258
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Powerpack\/Tollfree.php": "0c63aaf33046375a8d7c0f9c7c092ca1041f553b1987ad5e2944630dd23f865785e06205b0711c215468630455d8c2264c0b141fee5cbdb4bf9430e6ef90527d",
259
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/Inbound.php": "285fd073a2fbf84c533af3c0e60b369689592882364413a1879691a025655bf4bdc40831d13d96c59ec7a8827233e92d478c14d1d648df885c75fbe3d054351b",
260
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/Local.php": "5140df58e671179a4edbfa82fcb7b7277e440706406200255ade35177e9a715c3340f5920c4a57c351b6e222f7bb1ef20b207d0830c487bd14b9fa713d3d8c4f",
261
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/Message.php": "ae4e8bbe3a668748ba57bfa571cabcd97932d6cb7a8a63ea04689863ccf75a63e0aa867fad60c39e263cc685521a8465b46f730014933dcdc941ebf152fc437b",
262
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/Outbound.php": "7656989e6b1da4e4887f8443304e422ad2aa01c9c05aea5b5245b4f3edc333935be4f573fc5105e13cf03ba6ed0ee0ea323cc76c833846bc5cfa01f3a0f33763",
263
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/OutboundNetwork.php": "900ae54c0c0aa0f85af4f02da252a34907999bcd311e9e39ef8d8e27a16fc6c8bbde5d5f6460af6b8e68cf584419ccd7fbc4de177cb827cabb5ae9b2c896494e",
264
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/PhoneNumbers.php": "cb51001dfd504ac52dfd39e2a0fcd01686de42e78464c76767f99fbc7884cc2d6e304cedd72e66dde42852f72cd833dc49dc1e92fe1487b2682648432e7979fa",
265
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/Pricing.php": "5d197bd5eef109ba3d877f6de48f8567f135466adf1d811d32908d8d4fa7c8961592733d6bdbaa4f646c3d25a31c8098768dff183d192617b2c1726e8f41c447",
266
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/PricingInterface.php": "dc940fc2f0338348b06fefb22caa65b98fbfd37063621fb4e4f1e23c5dfe21149e2e648c1a32b09012b34c5bd622fe28126bd33ba1255c6ae3c370dabce6ee97",
267
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/Tollfree.php": "ad733c0d904ecfd646e79a3b6bb3ade270f99df5e6353bd6c8695322a71238fae107a55d33167063dc2e4b1b905273bb0631f051d06cbfcf5d01c94e9252fbdb",
268
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/Voice.php": "ab645548152bfd840951e981c0d18aad23d613afefd4453af077a6055f902d6bea6a0bcc805288f130da6686d8419913e86422cae35b57c1087eea3371b7e799",
269
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Recording\/Recording.php": "def8da050e24afea59514b4fda360ecd1d80a49df2013b258e3d78304d6eb2ccbe21ff1ac50a851079234a1460d0f2750da8fb59c9ff184e8ba1f1becdfffe6c",
270
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Recording\/RecordingInterface.php": "1953832ff8be0a6801f306632f3ca3bc46f067d08662b8ca6d53e29d53507a48750bdd891d2d0164c029f675b8c4c1dfa6765c9abf328578838b428dcea22615",
271
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Resource.php": "b8a8f583217c43c3eceedcb8f047efa1569bfe5f440fcf4f252f1a8402f484e18abff63229521f89697c1f7df21a2ff919488fcd9df42b5aaf7a160a50f0c62a",
272
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/ResourceInterface.php": "85bde5b0479b85aefa79139d36192ac334e3deb3a07353b7b1b0cea1180a050a92dcb563ef4a968b6436f60ac990fc5c1322ba3ee6f4ffd41d2997d604653b6b",
273
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/ResourceList.php": "71fc010407c57d77f5b31105f6e645d04347d961c3c81eef6cacc7b8dd475d86bd228c5ea5dd5976ce34d025b0753083b5361a47cde5d5daf0507678762106fe",
274
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/ResponseDelete.php": "3acf13bc2797c0ed58c78abac46ae2822a67b9c9194b3c9864738516847618c0033fe12c5a62d9dcb7d110ffd4264c534fded370d04a2960a2da32059fecaa8e",
275
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/ResponseUpdate.php": "4db3ee43405d0a456dbc23801c2c0d71676c3f88ac7c4161395ad275e7fd0dc6b53aee99a882706da4f14fc6c35844d54143a7fa3b6597a5a25d59ed67e0e6bc",
276
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/SubAccount\/SubAccount.php": "b39e628ab06827320f3dcb47d3ea55d459af1a133430e8e51e8e6aed5216c31b54498c836cfd2a5c5f2d9cda4bcac03ac476bd8ae81c3ee2c7865ddfcd359dfb",
277
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/SubAccount\/SubAccountCreateResponse.php": "3b92a7ef8da848a7a5d7b79436ae557657e97141ecb2bad076e69d495d78f94f6e9c68464dd7e790d64dc563428e4567a1baf96df1f8bc97cfdcb946e60e94ce",
278
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/SubAccount\/SubAccountInterface.php": "a4cec509ce127faf30261cf75555a2905c6e551223b4b90949251f0822dc20d7b97efadbcb6bb189cc9302acffed8106ceab79628a7531c161f4f713d6a26c4e",
279
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/SubAccount\/SubAccountList.php": "228e0fc0fc27fb523c9d2d9e62de77a5deb3bb2a29c10d91d7c59b6cf36b3e12b8b1935a69fb0ceda72c4008b2a04436e6aa3f84740edf265d0f647eed7c52d4",
280
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/RestClient.php": "91f01799f98c6d65e1a0a8025668fb0c9f5fa4b77d44e86790b34599c2b9045cbce2cb3a5dcd93a1fa8523cb688d9f2b895d7d5f2377f64f2e33ce68e621dd82",
281
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Util\/ArrayOperations.php": "04a84eb09d1ba33c3414dfc74d1c4b31c3149dc8e3a038912be632673a92e693da8e531a987c5ce747aa11fe01bf65bc05ac91924ccbb8f157c15c62f8ce9694",
282
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Util\/jwt.php": "61ef00cfe10afee4047149729431595a9e21d44b25de3e8808014312a869110bc22898552fd9216cda6906c91de2b3ef9d723ff0d4e18020d1b7f5d1050fe810",
283
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Util\/signatureValidation.php": "2bf40afd282bd8711459cff1b366510ea253508349adca2f64ad101b6c4e3e20bf405194b9e421ea7cad5b738716624127969de5497e16e3647872e0b3bfc6a6",
284
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Util\/v3SignatureValidation.php": "d70083f5ecd20fc41035462a2a27e04a9367d9b7b13e6bad5579dde4556ff187b8ecdfa17b2c07a0fcf88cce0141baf7dccfaad85a17aa2fd1a7afe7998d1037",
285
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Version.php": "365ed59af02f30183af840aafe55b67b682919cbb3d662f860baf1defaede8a67fccc5a7f087209494239466f356fc83f612faa02f9f03a301f5ffc66b52bd09",
286
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Break.php": "89a669d486a72465efc2c6128deb6760dd86c9fb69cd8c0f57c209d10eb74067efb50bc6f0e68e2d1c9c2f39862ef3fa03a35c65b7395aea6ca963a013869658",
287
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Conference.php": "bf673327e263996b05a0b45e323168e3d44b27a65efb8a8acb0eccb0276360c1a0391f08edc34ac617aa079c6c2b1f45eba6142446a7ae2286e23f337819caef",
288
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Cont.php": "45ed9435166f1b72dc5ee98afaf3547ae646d16d41677ce5409a6005ccb9ff23743e4c528385a1e0a8f5570eb7ec9374433f609bb8cdcbdfe756842f1005c52f",
289
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/DTMF.php": "14c619e3f01d6dee2dbbe9b718c6c64458a97bf70ae333455aa45c9cce91e4bab693f5265de0099c9cef2334a5310bb85e3374c5f0cde9b93c3051cdf5b57a4f",
290
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Dial.php": "5370d1f1a1ca8420560fa204d295558ba9aeb626fb7149ee06e12acf7f4b7d079307f329f91594e138847a2b3dd9e3f3e9a9e6e774a3c1095c3201ab249e9c03",
291
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Element.php": "4913c3c78365a85eb5c90aa721b0e1cf535c00d5815f509e336ce635cf47a9d9aed1346ff0cbc875eabae65190be2875d0820312a6a5c90c6df3acfa23bc80c0",
292
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Emphasis.php": "d6fda7993f909d3a1a50441ef74003811252d68a33ec2da63d3551236a005952d3b6c7e2bcdf5d9c85d33bee2a9255dbc2b95988cbe0e115b42eeb667d58ca38",
293
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/GetDigits.php": "e41a4e05fd55fec82a24cb2a545db122000251abc0986715a4d5866dc64604ac340c59cf0a30a35ffeeaf17713eed730a7705f32aa20aa3b14ffea368cdddfe2",
294
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/GetInput.php": "cb11a5e0311d3b8938f7d94462d24c5d4b8a2ea4d733943253ffcf36aaa648cd3a4337d732799f382526e0e2b2059dd1489e9ac7fc5ae478eb1db07b3830a711",
295
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Hangup.php": "6a7ac35846ffaf61d8de286929bdce05974799b26b17f4d61e68b6f740cff49bc4a0b72899d1150ae03d72e4f8c4dc7cac491872e76be0aec6b1a665446a9226",
296
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Lang.php": "c16c3db519373df61712fb1748f91785d79ba0fcd7e85a32cff1d17ae89768cbc10b3c4cbceab380fa9762cc1b6948d8fa56054d78185f8c9c1d6c60a012f527",
297
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Message.php": "541a76d5dc1e25633d7bf67c83d1fa123820296b4755e7e48aca094040ba0c2acc6215eb29176551516941b8e8225e6084fbf89892893557e12f678cbe2abb86",
298
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Number.php": "82569de717d895eca9c4270a3fc48022e666e59e6d6c74dffe4982a8db1f6031d80c51863226c750cef5db111f0de940878baaafb352153bd0d053f716c43fe2",
299
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/P.php": "d8bc0f70c13af91549bf4c37ce4c95b6683590ac9c9a3006bf2a4dc02d85ea63a33d0d8fce4a6465f25e0f86b35994d98e7bf75c07e30737305a7f2707ceb444",
300
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Phoneme.php": "9bce52123dcc7451f21ecb2e155884479b7530715d78d175cd616da86198151481632af22cfc19f9c70a4cf0f29f3262f335982fc9988e4aa3a435cd74f14c59",
301
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Play.php": "9b25a9f3a6149ad856c4aa008c405192bf2804432d83d3a572cf066dbb151b8298272b0a9185bb26a5faa51c03d069aed172ddb135d4dff3fb99af9fe982ded5",
302
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/PlivoXML.php": "03c37815022f4b4e7ea917f69b5516c3bb5499e68b65ed1b50f7427d9827de1e84037745d25b420c1f81ab829f51ae752b126943005c82b06a668c8ff895e923",
303
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/PreAnswer.php": "f66f22bedaae6dce341d650d5ded5007d867361c570162a642e0a15f5fd6e90b49a4c8fac2d3a1cb5fea446c75e30834a1106a3acd1ac02a87b5a7df7c1d5af2",
304
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Prosody.php": "12c8b634b226bad4ec0a7dea7b8249959943bc5ab0e71f75fd42afbf6d1413834563c38430e9348bde2cdf1059f266a2ef59fb7a8f6187ecec135ee9d5dede4b",
305
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Record.php": "070470af5650220e0556baa6b109684e1abceb6e80af620ec750f0c691824249121e1c6aef6cc1c91bebb45b76ea9db24f9cadbdbab8857b367ba2521d1cd001",
306
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Redirect.php": "34e09e0b208c4dde1c4b53c451b09f23985c8f74737e73f4675053494cfc81b14920afd6620ff161877c4e1b7b6e7381cf3f824a2b06508d84299aa4e0e45690",
307
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Response.php": "8db3a9e823e3c11b8377829c783d93f0b7cf98afc6d837e514803b478a7887d6602bae6efac9dae6a2e7683d8409c23f78c463185754fd7916845aec23e42c58",
308
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/S.php": "d0dc3f3bcc818d107fd8e4be38718587edf610e3f840d7e6763ce8fef51a1e96de3b49076995802aac9edc7d8a976ef024a1d45ef634599a56d13c56a8ba73de",
309
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/SayAs.php": "46c8fff6a9dbb36df1bb14d0c4247569e00ce77b37730d7f8fe6fc4a404a632ae70e48c774f40c4ac0e19b10ecca7c09686c7d5a6fc7d5311edcba657177b6db",
310
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Speak.php": "d18aafc18ac404a85d18627ddc66d2810ba1061f8e0d3d3634d5f5258b239a139649a8cf479367dc026929010288a291aa1144aec2415a2de6083040b8a4a96f",
311
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Sub.php": "9d34d26e76074e65fc01a3a477ac176027b1ceb5dca2fff450111bd2cfc0027c7f7338777b494728ae2617a27075888ea699d4226b60049c4fec633d42cff8d5",
312
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/User.php": "2dab0ac6bb38d9216c1b39b81ce20f1a2af1d385c90ea13aa566176eeb288f8ce80e11048209abf8c38151207137cc86b754b7784cc478dcfa1f567fcf929520",
313
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/W.php": "798d6f10e6d07a54b29916216dbb2382f25bbf2f96e15906f842cd2ae4aee22b8f3e56535264b1da6d40835d5b9da6a9f4346303f7602c9562587b29fa419f3b",
314
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Wait.php": "99e6e66fb4d2a81f0419ac823be64ea8c81e6ffc8313934b41d6189519d053b54b5e95dbc7b869dc979b72b551b5654dcd6eef0540c3b01eb900716e97d52dd9",
315
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/BaseTestCase.php": "662140921fab3f1e7be65bef2d063673900eb3c41de8ddf68320de194e254ec3fbba3322790812c258698af81da35277cbdfc0d2fc957fd5f68956e7db2ceac2",
316
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/accountGetResponse.json": "1ee7d7e260e8678fa70fa47206ac7c4645e9d698da7017ab05fb56266710e34bce48b19d3c65541a084be28cfe918e81fd52073064071daba77355af2eddbbf2",
317
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/accountModifyResponse.json": "ef0e777d38b4605ab58d951f26e975566b61a26ebe5710b9c8c7588aae799c68cf76dc5860f44aaa666864f3fc1f74185b5eba888c1dfa8c2004fb8baf6d859a",
318
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/applicationCreateResponse.json": "19336630707d50a021e3dd3cbcd8a229f9f6123211e27fdba211494bc40e9b9fc5573ef328806bf00b937106e7c894ef96a98080f6003d91cdec67f50196849d",
319
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/applicationGetResponse.json": "26a3aee28fa9219455b0c7a54d47eaf1ee7e9fb526185d1598d5611246c1ad7b0cb1abb05b12d21189463955e25d2da906cf5b04f1bd4c3b826d44de47c0d56d",
320
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/applicationListResponse.json": "b363791ef3276030677b53f555a42deb02a9873cb5b21e17aee9176d425ed38c562da7fc162cf5771f0bd259b46d615ded3799f34f6fef590e2df97180ebd228",
321
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/applicationModifyResponse.json": "742b49b7f428a281b1189fd5f23811931f2d6c71fa271ead086b6acfac63bafed22b86f2e460fcea35d8bdd46786c5db83707f35c7a855efbb92e51ec01a4859",
322
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/break.xml": "6707a46a4316a9f23104a23e4ce9c79f8b4f969639c08f5196a9aa94ba3abd4a1972a29d6131e563a685732e8cb0a4fc90a76f2d0ff5b72637fba2f974abecd3",
323
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/callCreateResponse.json": "513446e1e7fb97b30b86dad2119bc9fe73e70f01f4976ac40e57e41e7d96a2faf978fc72fe2ff49e3326fdef8e17cb4da24bf665be81089aad1232716e42e114",
324
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/callGetResponse.json": "2958c05e7fe02f5f6f2f8834b34050599df05c6f5751fde2fb038853383683e78b2b33b9534bf8da38770173e08ea9c7015d7b2d4f270efddcaedffd77ce661a",
325
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/callListResponse.json": "b2b35a27aaff76dafc6f5a42b6ff515e56ea9d7c196670613b97c2b4c0b7f2dfc3ba7ca705b2618f3851e1db554268018c7c2bb658e94b66493576048c54ab49",
326
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/callUpdateResponse.json": "06be7ca7ccaf82f24f23e8c33382d372ba639662283023a9b6ef555fa24d273efd845ab27fd423dd4267d66a8df24604f96113aa3bb8f8dcfa49e713f3d71bbf",
327
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceDeleteAllResponse.json": "6722c7663c8877f4bd5d417638d5a0fde3db7cd2ba1880dc66a7ce9ad25a14de60b4942d84647cc21c0b12211227161349109162ef3eafc2a9607c2645d3c93a",
328
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceDeleteResponse.json": "9a8baf62bab7971a89490d637633a3d498d4442bb11ca29486d21a3dde432ca6c0cb36d236bbc94859efac83b2e56d33442a13a4395f4b026dfece2103ca790d",
329
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceGetResponse.json": "950fb7d6e6e120ce670da43937ab4ce9e7a7df5296848cb52261f5f854bd89d47f26d76f89929adc59bdadbc8d0e77de79f29edc5d6e6b4b73aff1a0c126bd43",
330
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceListResponse.json": "9f5635d9e0988b03c2bffa8457962cb6870a39d4354ec6c065b58949850b188d2829fcd3db1761ec42a4bed30ee3704b6c353d2b9372742cd6d8b00bff273dc3",
331
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberDeafCreateResponse.json": "b39ae8d7a1de7d5732afdc00da955a91850b855f6463b143b5837023dd8281b450fa79635a3fc729b5b198c6af5cb57f9c6797c8eb56daf72b7c7131196fb4da",
332
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberDeleteResponse.json": "ec18404f82674de8b7ca25eaf95074cefef51b13b038de14dc9ed5f2664c6e6c5c87d3f7a08eeab3926869e171ac26d1647ba1cca03253085a194cb0fbe16975",
333
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberKickCreateResponse.json": "9f924beac462c4ad9f42a705f7bfde5aafe5e73563b07e98ac9db42e95d3c657f5c4ba0d6ea64b01e2e061563fec41d53f8ae8fbd7f5e08857a903c948019e1c",
334
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberMuteCreateResponse.json": "c3f1c38b6c8295b28d531c446199454fd7422d00e3cf71fdd318a821edca4afba444f8cea38175c0853b34dcda5dcc2c6317a9f3103e16474fb36c43241a52de",
335
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberPlayCreateResponse.json": "ac345d15512ca5debe0a20092d8a4bba1f725a581799a632bbdccea771f1b6094b6df3362120a29c1d9109cd8ca8857447c3be08436fa94a5a4304725b75ef4d",
336
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberPlayDeleteResponse.json": "10b6ab89ba98b9d6d08dba8637971ca9260757c318a4842521c7d2bb2a1b967498453aee4cef6fd964cf2e614c25364f543412a0a88b877154b3faa9f18ab3ca",
337
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberSpeakCreateResponse.json": "b2b01526d4838a72c816ad9c6ca7f9cb473a89818d4444b48aefc269d0173fc9eeed1e2473667517280c18315d67a548f41937ab4b7d26f2edd4d0e13486aff7",
338
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberSpeakDeleteResponse.json": "d42658e98680911d21be32033be208b53071e3ee2c514a86809ef4d06cc138ca0a74d9b2e546c54b51c66f3aa891cf0ba3b4db9a6a07e7f06ed37bfb39ef3a6f",
339
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceRecordCreateResponse.json": "c9d8570ab20fea79181b1416cdc44b8e9f8b18b06ad446a0929ecbec53a6bb3d66ddc8609a2baff92d8ddf9bb68b802ac4eb3d62e958d2cdc1485711a6286ed8",
340
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/contSpeak.xml": "1115d194144f96d3b4ba895d45268e346e7e56bd308b4b7c58bf62712380908bb71d5250323bfa6d13b8d25e64a86580437f7ac1f2c63896965e3c13909c240d",
341
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/defaultSpeak.xml": "2449ff96f102465168a4551ddac6ff85bc680370b423d46ee10b345c128755560e0bf48c070081e8045839503450c0f8b443fe0b33b455410ad5dfd639a6adb0",
342
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/emphasisSpeak.xml": "1ae7422578c6921013c5dd65650f0c1efa50512824b429334cc150ee6872dd2a7981a125b07a8023e360d8a881a32333de24f1b595c95a339507dfb29732af83",
343
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/endpointCreateResponse.json": "e0cd43507839270c51117e48fdf3158e67662c1bdf9c8c964b57a13c15517ab7c83483855764b763f63bfee011bb893c20eca7e7a0b3b8872bbb1f26228ed720",
344
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/endpointGetResponse.json": "05359131cc3ed432c1b29f3766d019be556f58e5e7f7b502d866d0057c04917ad7011bea5afd7ca8f2814dc75c45a52930d48464f7fd740ae94b45d0a07d3627",
345
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/endpointListResponse.json": "d6488ec5e6277af9a34629d901a211e37c9a522107f84ea77f861c417345ddfa409d7de389ae69b719997600a0495289bcde64791ef07c257f75bdef4fa8006e",
346
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/endpointUpdateResponse.json": "3f20870d3ef78c57407bd42cd424775a7014473d891020bfc41fd78c9187acc3d7fc2a2d7a137eb5bf9e8741525db9aec853889b11d2d3ff508f7fb16a4bfc88",
347
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/langSpeak.xml": "1eb16f6028ee00a12e677560ec9b3ca4921deb2d6da15b3686c43f506e9a13ab0cf811d71e942e1f225989f3a486ee39b4949d17d8692ac0a50574845491cc8f",
348
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/liveCallDtmfCreateResponse.json": "f30ceb762f24445068ff4a688935a84cb64840310bd518806c1259ec26fd60da6a8be9f11c9c0882d08c857058944cf1c69c95035517716dba322a1a865435f2",
349
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/liveCallGetResponse.json": "339633aa5d9cd2aea4a86dc48dd8c63ea8c0c56d5cc0f4513bcd2d66df425ce4b74b246a8c39d6cb0dcde75a8c01d4ec8347e69342649ac27599a79a72fafd9e",
350
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/liveCallListGetResponse.json": "7e8efa8df76422d6a9bb0133c81d96b9ed932f7f529644a109b35e9f8f301b3a548e8e7f6a9213e301f25e914b98c3855160ca7e0d6f0283e947cd6fc95c5ed8",
351
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/liveCallPlayCreateResponse.json": "4cf2ddd4f3087fdcdf772219c5ed84ffe1dc027208540059bc532961b6c4cad382bce98dec481e0245c99e288c9523e8f33ae7c3c35316c8130f49f81db40604",
352
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/liveCallRecordCreateResponse.json": "02f2c4c88fc63e5585f6e5988d5f615488507a7d7eba442430753a60f0cc2763c38abf905042c9ae0f7d017dc50caf67f269267972b5a7fdd4fe7675572589a6",
353
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/liveCallSpeakCreateResponse.json": "ef69736cd0199704894c2fd938e4f84768b09a6b9d2f334ef0a83b1750db0bf0eab538471fead4397b49ffa8e86011da111e867d5d8b3532bf3f4250958d6146",
354
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/liveCallSpeakDeleteResponse.json": "63a9fda757cfbe1a338c42f19532609e8607f3c2c8a317ec8e5aa2a164b0e9f9a652129bbf7fbf9fe05c38a0f68138ba10b4d256f48dda1fa292c18f2b717d3b",
355
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/lookupGetResponse.json": "6b2dd461ce651012160ed88d092de0859ff1cc132c57091a1064b5745b83cd6e5144e8204b6810da7bb675eca802fff54fa298f03be6ef858c59058acd24e640",
356
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/mediaGetResponse.json": "251c9d7226411a160031776b1c7039d7e7f3d715ad7bb89131353611a2509a570656b8e29577e505102cf588ba50cab34b3b74351dd33e2a99333676d48b7aaf",
357
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/mediaListResponse.json": "1512baf046701056ae6b5ef06a1e6405cd62a27d4b82f5b38ed2b2ef6faddfd147b6d57074d04d77cc14325d50d7908c0446acd4a5a0355e9dd9316f80b0f448",
358
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/mediaResponse.json": "329e01ec90033528ca170704dc7a3de8f5d004a609fda5abaee4ad610b1559464a97b423ca27248f49fa3696f12ce6c1b3ef69ba198ae57877927ff78257231f",
359
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/messageGetResponse.json": "10494dc350e9a659083f44802a899a893e67fd82acdc506210c827642e27bb4ca1fca7c00a73a7aa20900ead392b9983ae719c6a9aaeeb0ff9f9b9e02539ca4b",
360
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/messageListResponse.json": "5751782fdb135ac45cec47687b7bcb10d4e2c4c8ae88461baca0eb6f0f81b8144aca9b610cc6ef7f3cffd4b5dc2ddac08247e74608166d147bafb1a9ecd4b834",
361
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/messageSendResponse.json": "ae5ef8b7e2a5db03fc5c04e96cef35b3f819f1670cce72e0e729b57de018bd6ffc254e00f20fa7c662eea100f78bb1824f0080275ac270f7e1229566683fc62a",
362
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/mmsmediaListResponse.json": "fa4d1e3885b6c84d72c9f9a4a414de7d1ae1d574db325cd773600c7a17f83fcbe2a84c0daa8fc690d5f5d95431b1ffe5097c17279593ccb4155d5f99b1a853c6",
363
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/numberCreateResponse.json": "e7acbc2aac3a716dd50e27de2e8937e27fe70da7dfcce17561f4d81a2de53e8cdfb5a695255e1ac65c8c49e4b894722e7ecc9297b9d040dadff97d1cb61ea414",
364
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/numberGetResponse.json": "261a85df87eb4ebd1d310575e8f33d94f74c30f5ba3aef1ed47654f7569ebe4310019c5dd317a8c6e2b015a1ac3f72455118e0878d688817580b18b747d6dda4",
365
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/numberListResponse.json": "134543e58c07917a79e0498e85466b9cbb1c97a0e3087473463419bc6c178bc278ca75e148f885eead7f6b1074063256fa61745c57a0dec4ac060c4b03afc499",
366
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/numberUpdateResponse.json": "e7acbc2aac3a716dd50e27de2e8937e27fe70da7dfcce17561f4d81a2de53e8cdfb5a695255e1ac65c8c49e4b894722e7ecc9297b9d040dadff97d1cb61ea414",
367
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/numberpoolListResponse.json": "961fe25a8fe8c35dee1b0608a24d741b6ab91f2104a9f2af2080279d6cbe4e631416d7b3d8e3772715e376a603cb740d652435a0f2d7971e64e00eb44e7cd518",
368
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/numberpoolResponse.json": "c725314dd96d000028683c175528d15657c046cb421add91a927472c235ae5c1ee1aab060aa0eec56b6c717138623684f827a2de50bdbec1017e7bff937b437f",
369
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/pSpeak.xml": "1e49af0752b825db21fc50126642fde3f39dd8b63cec3db00c3df92ca38935d58b8752ad14928278b98ef23421d0926d624b6aae948f9473398d25e2d087b963",
370
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/paramBreak.xml": "1202da39615a87758a5fd85096a4d98f6c2726d705ef0b1086cfc66cd0f456b15e3f79d9850e1bb8b99e9114e41b3ca19ee4fd269a42c002c205de005c72ceef",
371
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/phoneNumberCreateResponse.json": "a1dd38958ee69b5036aaa1c86cc730802dc2d7612eb1de9266f9a6651f6f067cf9a42d44c736bf85d1f40048f01f99fa05ccb3fb26baf3875e3bea98fbb9bbd8",
372
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/phoneNumberListResponse.json": "f2c263fdf122dfcf98289f6cd9276cd8c22fe4ff5bffca19b3509800d07909664e9ddfa3e145da04c06dfc6c5227a39868d17ca947e55b65a9cb18a6faadfe57",
373
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/phonemeSpeak.xml": "30620187252e4a92154e06e611a2cda1ca881a0d85b1c6c36e3c713734c0be9ce79bb9ad38a11e040cff437c5676c01638eecbacc5b50a20e0adb506565a9475",
374
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/powerpackDeleteResponse.json": "f170bba1b0b6bb42c88bc74353ea4db09b82f07f5a2166f693d0579e5b7d6beacb8cf11e39cff546345333b14752456212584e284c2c360cc673d009fd2aa018",
375
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/powerpackListResponse.json": "0cf4f36945bf4f73377a6688f99bb3efb0c35924ca9278bd777ecd0081c3f667d45de4a34f7101588b7a7b3b20179d18a393dcc468ed88df8eb53b5e2463d7c1",
376
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/powerpackResponse.json": "4318b75a2ac1642f6ee33fc62f18765a5142aa52e0353082a9d38cbc7660e40f24e1665a59c723ba90ba9a86edb4cd4a396bb9a0c00cebf6d5944e0ba84e7919",
377
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/pricingGetResponse.json": "25a616f338c147cb22228535abafa9c1439f663230d1fc5109af24f4f11a637c5d0cfdbfbf3b2762b87d0b4693f14223254e431f3b8ab1f518b32ea884e2d1fd",
378
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/prosodySpeak.xml": "0529a04b9ebbfc245e7d50bce1177e3eea9f0f6ede900e9fd3a447f86078ca86fe8c9911fad4645494cc784394194c5e6b63141a2a9125a1ecdde2cbe8bd7c86",
379
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/recordingGetResponse.json": "bdf9cd97b6c687685b9c37a0921bcba910dfc811abe416be7b17fefbf857c3ee1233e987570eb444d168edd660c26acb55377f60b8aa0a898f0c9af1743edc81",
380
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/recordingListResponse.json": "2d831eb418cd0de8a0d63da8a2ed133005a3e15e4e021c3451a737c45f42e5753ca5143204acf2f8bdf6ee91cf1ee8b04ee960f942ae0e62bfc3583ab44a1dbb",
381
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/sSpeak.xml": "b81f50357fb60ad968d8e949aed15c7544abed0a45c26c5bdcd4b166fa1d9bf74f57137fcfd378fec345e1fb2281ac38c30b2a3150cc6fcdc13581ea29379796",
382
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/sayAsSpeak.xml": "84e2d4a310c8d1fccc5be4be4cab026e1dde129ed2e18ab4fedcd50512cee91a52cf437606cc936c474cbfa508a105f36272edb6bcae29388f2a75bcb354de6b",
383
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/shortcodeListResponse.json": "449e0c165ad81254715b4521e5f4d39b0a6d1ecd583bf337e8b85ba40550a0942c04a8e33b69e5327a275fca4e42e31dd1719f100c8d6e459939a3696ede1a71",
384
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/shortcodeResponse.json": "867e2309b5c912c9dac5b06929a835b578b0dd3391c43f6e0d454adccf997060e1e5013051b394a94d44af3e5cfea67a88f4376088a376a031d6fde5fafa09be",
385
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/speak.xml": "a781afeb86ed31833e74d834de6d9834783264ec43678fe3e70a7f963e97a9dfd05dcb5ae75f51fdeec1d5d8d299d8c476454307a23efb830022a477500c02f2",
386
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/subSpeak.xml": "06ff8e0c15b36727265d9f80c736a1781438c04445e91bd563b73a1f9ed4b501458f7e3ec22607dcd96e9f95da6e6d874c39381ca061a768c2b664a1b4bfc504",
387
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/subaccountCreateResponse.json": "7fb28239b065aab21f14d158e51ab6bfff6b10de97ca558da02adb639fd15e99343ca54277d0e0b0dc6be11c01abe6517fcc2f0e862d5a3538342f86bea87994",
388
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/subaccountGetResponse.json": "929de7e767657a691c8bf34be8abe52990835f9787114256bca7a1fd6016b34798d36e2318ad3d4a2a8931986d8034e2310e4b4247fa38a84314658402aa3bc3",
389
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/subaccountListResponse.json": "c57bcf1f52d302550eacbe5492bbb1cc17bd399d03b6c83971bebd83fa8be975e97859063a2115edfed47f622adfb413d5c28d6cc180710211bce192d867052c",
390
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/subaccountModifyResponse.json": "a06022b797598bdabfd7029128d9ebc9934784edf77175292c17b60152e7464938f78ddb8ab2883e0da22fdf94e584d0fe8d766c40228bc0a564e6ce76c39365",
391
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/uploadmedia.json": "35f19877904dd5eacf97183a286db18153002e37159f6e007c9c70644843d73963e9293a5e64c1854665821e36592f5ca11289d2ece86fafb3ddc4b8b758dc4f",
392
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/wSpeak.xml": "05cdd9418d049dc33432e02bc305b10635daf3bda936c695c4136bc4bb8167ac63e6ae809202a566e5a1488d8543c06fd9c52f869b03a474bfc3db560769c00b",
393
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/AccountTest.php": "8a98fbb165ab60db8a7423252e78d9db1da922dc2e1de9ef5cde32488c04380ab01e8fe53f4f542c602b28e574966adf58385456388fb4aff543dc04467de668",
394
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/ApplicationTest.php": "e23381682056702928ea1c587bf8241f71743e4349cb30b621f2c843711c108c0811689c953ecd52515b2c780c50c134f959e4ef77ad2c0dd65dfccfa8c79c2c",
395
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/CallTest.php": "7aa7df68b91782de7a8ff67ce4bdce917de03ce4800da2d6c103f0d1297fc26c09effbbb7ead06d70566398b8679c54246213c4babefca43976c289b8bdb895c",
396
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/ConferenceTest.php": "3d1149c50cc760ec57de791d7a1eb46a5210c113fe91e1756dc642d2d94b333067c9c3c5ff9d0c90d9ad8981963394d332287b57b84c634c8e4008ec5cb2356c",
397
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/EndpointTest.php": "aae4c23a72674a9d4da6261986147a3b3a1c5e4da03d2efe7f4ec21336e03d352ddc0f7e47dab3c9b4063a170d37e0eebeba649ecd1159d85a3c5553789c51b1",
398
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/LookupTest.php": "c436483d9ad54681ed44ef7a6b44d4899d06b7b421be27d2a076aa4bbef23a5d160d5098c60d5c380a8e66ebf8245c917074edf6a7b682d056f9f60e082de032",
399
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/MediaTest.php": "a6ea3f17046c123698c0b8fc1e7cfca6665159166dd53b51d1b5a7700373527c7346a90e67a382f4df26ed3f92209790c3ca93c0c3d3b653d424e17a1fed9f17",
400
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/MessageTest.php": "9749cc39c4acb64b49150958745f19952ffeab648abf06ae839eccf8eb9a6c66bea62e7d8fa398dc48a79bdc97ee063df934ba827632faf88f4aca01e5432181",
401
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/NumberTest.php": "9123fe40158482d314279a729e4c5c0eecf3733884ea39df16de986e775e93e90b8d9c7ad35fbde8f3d4cde3e02b33c70ebe87cbb27039615de8213cc27aad47",
402
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/PhoneNumberTest.php": "4b52dd78392c66e1d1803a278ab98bb03e4bfe5275e28b043e4f672357125b4373acece1c2c5668081be021a683acd2796e6ba5ff2646baf3435dda1d6de7667",
403
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/PowerpackTest.php": "52a3c6967c93b1b996abb3fe7e40ebaec915e58e715c6943b0f5ebd945c8a59023184dd1339cd044d2f3ef1a0041a61559a41a3832bfc222332fd85bca8371c9",
404
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/PricingTest.php": "91a088d32f726c2eb49160363f7a77d351f3f65d43a9282cbea646310e2d01a33d22a2adff9ce5795f949bd205c0b6e77571f0a231265514704f42bdefbc51bf",
405
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/RecordingTest.php": "353008dcfc66ae09e915787634877d598930e60fff3f1e6eec0aa5590881f66d78ebd79aa1ba2b2a20409e4b9372eef9ab28406c9fd29f95ca6c773d8c83fa63",
406
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/SubAccountTest.php": "6dd803629402c6f7b8d923753477f6c03d6cfbd50aa59fcd63556527cdbc3d932557b318cf8c7a9f5a9d3ff8ff143ef15f31256e488fa8c35cd62bf80ae04d5a",
407
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/TestClient.php": "8917a380e2cc030228dbb37a7a3aaedd2cd624d8102eee1fc3469a9838f31f7ee734a40cd45e510d63bf4c1526da4bb3af8d45bd4ebd4382cc9fd5bc2ba178c1",
408
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/UtilTest.php": "6a66cd73b0cd403f64f8a4752381964bbac7507b4449e81c9aaa64d61db244128c604a8995327dd8e8ccc8a30cee7a3a57fc617b845ebe65a65ac38125ca7394",
409
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/BreakTest.php": "740c84bc38e7044f5138e3816b72c6a94bca3accb592733421578a6eee2080bc6721d85cefeb8b6f1db751e2056fbf722e0dae61d260b089dd803e72cd9cc0d7",
410
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/ContSpeakTest.php": "f3b641231907bf807c5c09b65a13409ea054b0116b9b36f5bbcc2bfa651592ae1f4707be5780c37c5b9f1516044a9f524f4ca829cd0b5387a6a32526ba11cc94",
411
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/EmphasisTest.php": "b76b6d0eee048b44965f87fa6f59614e64d885864ef3ff0aa2310746d76304fb5ac6cc6d0c714e7560e5472e018fd0183cf9a918d3e4ee5415723314d7d219e6",
412
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/LangTest.php": "1a4ef409ded7d9c7abd8c63994dd3e221b16bd1fcca8133ce43e04b300a28468cea68e430098393acafb78e537e37b0574644735cb84fd08e33dbd828e2fb071",
413
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/PTest.php": "9084715ad9065f1a926e8dfdabc5816b16a385dd5cd74f16f6fdfd1aef043b7d344d9cdac4b9dc43df85e8e63f329909553e20b86d995d9eb6d25d716fc5fd1b",
414
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/PhonemeTest.php": "f85a3119f95615c3d3e16c0a4c1d2aec7b2191629b60de276cedb769b23e11546fc27fff57e329c1ac6cb52868208d29f88d1412b452932b573d88cee9fbd68c",
415
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/ProsodyTest.php": "5aecbb6cb41b0269b0895e580bf87dae24703c3116dd39774c11d52406635f4167bf55ed0b950cb4d8af9138c03361161527c7f0e08867053034d8aea1fb1daa",
416
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/STest.php": "55343bd191ba9b88fdafcc409c1685224cd6673225c1ecdc006d4c3643d9e4f71fde0a07ead3f1bfda80bed486f09a7fdf42e16cf3d4fe66f592bb72397320bf",
417
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/SayAsTest.php": "005fb0efa4803847719d9e7d52438ada0026b3860d7143fa4deb96a80826ff0f8608b3dd9302617547dd36cdee5293ec25570dd6513cd81a921ff483379574ab",
418
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/SpeakTest.php": "cc92de5d0f5df6de17b121249074752bb191265335a6e50dcc4739fe525cc9d0014c187a7d15cd0c1226c56360277469ba10da72dc56dde01f478acc510a8dad",
419
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/SubTest.php": "5c113371cb363691313226362512772facc38c30afdc32e96976aa309d6ac33aa32bab7d4ba674cd566182641048434dc65cf1403f25ea4adfdf6c6793db2fc9",
420
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/WTest.php": "f7cb4983bde61290a90fac15c009ff1780b02fb81c8568d0e8a1f40fab97dc1ec2245cd477b5ec669c6f54e56bcf7351e38c09caac7255756174baf4070c9284",
421
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XmlTest.php": "58317dda536a0383749d695ee8cce6f73d6ab413984673d46b10d9299e5a70c6cc464051e986b75c849286787a8fb23ef15e8bdf6bbc9a27e1c0cadf46a1bcd3",
422
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/bootstrap.php": "fb1c83cc2a11ffef9903eaf721f4cbcda4767f70368be33a0980aec4e5b515fa8258750f6e19fca0eff6843d0294de9c35b8e95af0e62f51a94442be0099720d",
423
-        "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/phpunit.xml": "74191aa62aebbcf797167fc2bfb6bb304cb3d309287a73919caa1c43c188dcef47a1f1905e56143952e4b342ef183a84887dacd6976c18e58025582d5f672035",
424
-        "providers\/Plivo\/vendor\/psr\/http-client\/CHANGELOG.md": "82bb81ca074204aff5d95ac5d3edfa9c85569c8b9114f809e3e2f9525a6046a1276187ca42f638ed428311631791f60e6dace74cd60d77f1af0a41e9f76ab2ac",
425
-        "providers\/Plivo\/vendor\/psr\/http-client\/LICENSE": "3e0ee70fc857b6dda26ef2eafa55ef09384d82bb2f85b4289abcd94a60201c698eb477dcf03a73858b2cbb9efcf00affa199e848344b84dd4a4c135601e886ce",
426
-        "providers\/Plivo\/vendor\/psr\/http-client\/README.md": "a8fc38f5744eb4c1f14f5016b02108319b7cceea7fb3219f57f0604a2e92778fa9be6f1e340003b095f70c962aff0b49ccfb0264b26eecb8fa7782667e62cf3a",
427
-        "providers\/Plivo\/vendor\/psr\/http-client\/composer.json": "b767c510e3dc28fc5c8c0debf4e5627f4897940d41ced88cb0c85284c2e0765f49305997407e84d87154a4d9e14045e6c50fd86163d3d7452294af8b7bc36ccf",
428
-        "providers\/Plivo\/vendor\/psr\/http-client\/src\/ClientExceptionInterface.php": "33aededf573747615cbf7b8bc6aa10faea7762c903a0cc98bc43803043f9bad58460f09f7301814c22e95f2a6d0269388d8ca899ab76fcf0f2bd8d82aea5d9c3",
429
-        "providers\/Plivo\/vendor\/psr\/http-client\/src\/ClientInterface.php": "11b1cee24748c4ed1a41681b1b6e43e865e08150be14452de885daaca737f4029d65e8381632a23910789d3cf5e9f9d02f4999aad62e4e8c80a2fda9ac96a4ed",
430
-        "providers\/Plivo\/vendor\/psr\/http-client\/src\/NetworkExceptionInterface.php": "6d3d81d18a51f451e8a1b74a16b3ac8ce6c5642013a2d1375ce6718090de5369779f9d6f594675aeeb7bc3f55a11f1b9396036354c4e9ae0c90183ff369fd65e",
431
-        "providers\/Plivo\/vendor\/psr\/http-client\/src\/RequestExceptionInterface.php": "46391124b679cd54538ce5ae6b05d7fcfb6b9ef7680f33c8771f94b38075a366788293b757ccc674060d615783476e1151d0ab8a5f2a10e24578c9b46cc1433f",
432
-        "providers\/Plivo\/vendor\/psr\/http-message\/CHANGELOG.md": "5567e49c016bd259491fd13a96e5b88629fe67ccaa0d75f7aa7c54096edd663fc743930eeade981a041cf7524d9f65104718c129fa36a200397d30c0e5d2c954",
433
-        "providers\/Plivo\/vendor\/psr\/http-message\/LICENSE": "22ef0ac33682fbed60a5274a5b25991308decbb45c6ed45fb3222cc045bb9e552fa7310b1ab6f38329b63f53a02c25e7bc5e955ad23c5bb2366b417563cb71de",
434
-        "providers\/Plivo\/vendor\/psr\/http-message\/README.md": "d58ab57a3e35e51848c3c21313836c88eaca950eb5b716878ba950ad2389bdd84b24a5fd8e6b19ce3ff04b07d879b5206b0f26d5e3a63a5be19beac0e9ccc1de",
435
-        "providers\/Plivo\/vendor\/psr\/http-message\/composer.json": "4f074821b6fb7074c418bed0fb6232677a0cf6ae5ddf24694e14bd5aa7fb3610a645f2221fd024e7c4bfe3e95501421455dcfbbbb38468e9db442b8cde9471a7",
436
-        "providers\/Plivo\/vendor\/psr\/http-message\/src\/MessageInterface.php": "b79e96e691ad169d4d70420953ccb5933301ce7cedc17d4eaba859dbd56719008198fd201e3be1606ea5dbc78b559f1d86ba17b73ab7e843f0c2f0b49564147f",
437
-        "providers\/Plivo\/vendor\/psr\/http-message\/src\/RequestInterface.php": "f54aefad46987c6b4880d5f09f7e99909e6e2a99f9d305d1f73e4de58b43493179149912352869e50fc46e057f50c78ba7ed5df6280a7c0347f3d7c36afcbfe4",
438
-        "providers\/Plivo\/vendor\/psr\/http-message\/src\/ResponseInterface.php": "69d177fb504f47ca0181ab35e2155cacf16e77535d07bf4eb4d790e1ddbc7a133f3de21eff936a3e75acb704c936ee2f2b12b2cf3516464222c3d60ea9760488",
439
-        "providers\/Plivo\/vendor\/psr\/http-message\/src\/ServerRequestInterface.php": "ea36ff66e8bd962e468fb2bc832e70f7bbd81f92dc0e607cd69092b737609d565f3e254a2d54fb3588f5302315f62e53c6eefe9299ba4b6f1f53ba8feffa815c",
440
-        "providers\/Plivo\/vendor\/psr\/http-message\/src\/StreamInterface.php": "11ab8a9d07beea1f1633f8f6cabb2a463ff288555f2fb8a4cc0b99404d8580493018557a0f2674feef653be51f6fb8d9aa3ad8e6dede0391cadb7bb49f96f781",
441
-        "providers\/Plivo\/vendor\/psr\/http-message\/src\/UploadedFileInterface.php": "65da733a08d80c5490fec8e69c7b56a47efc522e720a2ddcc673bd74c0e21f5fad4d522ad47da4942d25d139b5392e0882de32b7fe5a5697b86f40fd96ff0f8e",
442
-        "providers\/Plivo\/vendor\/psr\/http-message\/src\/UriInterface.php": "0d46735005331a3489e3ef4c8229307320de44b0443ff74d238cf8f3962d83e99316da9435259d479b48477d33e8713dd3d1a1859264c22f2a53b43cd6adae2c",
443
-        "providers\/Plivo\/vendor\/ralouphie\/getallheaders\/LICENSE": "ba7ad111dab105773d8a75d20024b48c4222cba6f7836b7b608fddf34f367cd218302829a1926a675bfd22660f4562b0e9a679d15b41162412924ebcc1a4e557",
444
-        "providers\/Plivo\/vendor\/ralouphie\/getallheaders\/README.md": "48ce2def80836640ced369db92da9f9e943b319849cc89441023bc260edd6919c710d08c91fbdf04864c6e08bf89e60a397f5e814b3e9699b48df574f5799522",
445
-        "providers\/Plivo\/vendor\/ralouphie\/getallheaders\/composer.json": "495b111d0e0b4f4496ccaec984dc89c897f189a67d840c09b0cf17034629e1c896c37c4ddb1afdceb7d5a188dd0d90405ce34aad409d3b7722169628411d3ca4",
446
-        "providers\/Plivo\/vendor\/ralouphie\/getallheaders\/src\/getallheaders.php": "a61a5f91f21a68108c7e9c8eef22282e4b1b6f6f14ff997c5f47c83f39acd08ec60f4b9d25d306d67fdc68ec57c7f71a44a1f63ebf7c25b40ad61fa1cb4e58a6",
447
-        "providers\/Telnyx\/CHANGELOG.md": "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e",
448
-        "providers\/Telnyx\/LICENSE": "8756122099aea86ddf6f176a480c0454f2be6dd278e475bd6be7d7ab3d572162f1bd44c9f623e52e53514cb15336be6e84a5eafc8e2a347b481ab5799ebd6e17",
449
-        "providers\/Telnyx\/README.md": "321748e1de717ff62ccd3fb2c10fbed8ce92a66271f2047c83be8929f965c179cd163e429175b44893ae30addef3623f96659b98528a405a585f7afc7394e866",
450
-        "providers\/Telnyx\/VERSION": "7558cccb74c98362a480e1c0ae17e711de8e5d6cd10f508a31395105c0efb22cdea79aa6f9f6f890837d519acafc2cb3c429d3ab17a283e1992e5aca5053e25b",
451
-        "providers\/Telnyx\/build.php": "485d76b827a54d8455550e8a8f8d14862f9444381da251e66c2bb8ceaf2106a554c1cd339666b1260450749d0244d6b9ba0c6d0a2220ab2411aa4041fc83f8ad",
452
-        "providers\/Telnyx\/composer.json": "7ab90dcc0b5854786b213e5f2ee8c8030b21f65b2f8d0f74a3aa6d771ca1054ae5e1ba58ad6684dd1234e7eb7244be537cdb0a6888172cffcdaefcc7f5908dd5",
453
-        "providers\/Telnyx\/composer.lock": "1e4b665caeb711f94b1e7f0ce6388e91ada9973159c1230d4e60f0dcfd44ba9af2dd236e6acaa27564e91b4a89dde817d5a73cad8682aa9cb93b203f467c6be0",
454
-        "providers\/Telnyx\/data\/ca-certificates.crt": "66816e077ee99ceb9535a472e6bbf4f0e48ca838099c8a97c7baf3297fcada9a43016ea1ded63a455ee56a8f18501417a0f744fc17b215bb599cafd76b754518",
455
-        "providers\/Telnyx\/docker-compose.yml": "1fe4c651e406095f0ff1bfc196406d473184bf53cf80f7c67dc79f1aa94b26db74174e0e9bc47adc95eb2a5f6eb950255c4a5cf44ccb7029ba712df3be9e6384",
456
-        "providers\/Telnyx\/docker\/Dockerfile": "a63d1fabd8c19fef37b90922aa4bb21fbd1094635666cf2a3a4db47009888bfd3f1ad5c34c05184e2ccc8f581971f6dae91c1ff137730821422cd482c39e9390",
457
-        "providers\/Telnyx\/docker\/entrypoint.sh": "2bf3911c365a271fc52d17a0aac1687abf52e5286a5d52cd34367e18651dcfd6ef1f791b54105b7742f5d691564ddca3c05a9ba4ce8edfbc68fe919e0bdf6c1e",
458
-        "providers\/Telnyx\/init.php": "e590e355286b775423b39dd23b5aa0d3383d8a85ed2d1346802e0c487cb834154b4ba1b0ca41ae112ba81cf5afbcc9133db8747e08565c00fa3b0ea04fa7ccbd",
459
-        "providers\/Telnyx\/lib\/AlphanumericSenderID.php": "c6f7d381cd9901af59d67c66fbe6ace0729c77ac2b2962ce41351ed076cb39c9049aeeb72ba0e3933ebce4ab8a936b86a7e21d30a1c07b2b08cad9da2abcda1e",
460
-        "providers\/Telnyx\/lib\/ApiOperations\/All.php": "5caeaf5bede40fa19422387d224255ed534a866638b22a7a832111cada5496764bc0434cb1aa7365e1d4e0a8ad55545bb05a42a17ae5f2b361ed42c12166a229",
461
-        "providers\/Telnyx\/lib\/ApiOperations\/Create.php": "811f9227ecc5acb172e8e7120541227de0bc22cbf66a41490b743b3e49647a38889d5cfa5d64139b602572f0fcc0fbb96e3971c78801ed9acf7b50db2ab7499c",
462
-        "providers\/Telnyx\/lib\/ApiOperations\/Delete.php": "4c03010d81be8014694e366cf93244dd2f73dfb38fe8a1f3066b6ce179b999967de5a9d3e3140b3076d0dbbeccea329ac750ebb93915ced1e44891ab589f0c7f",
463
-        "providers\/Telnyx\/lib\/ApiOperations\/NestedResource.php": "390efb020ed7c101b32379716bc2111e83273e2a7092da61623f85295c67ad1f6ac2fda617ec91eb28d02ed52a86db9992ee044356f3d96aff2e3474b16da601",
464
-        "providers\/Telnyx\/lib\/ApiOperations\/Request.php": "5b947c7171a05a754fce9c5bcb81f93c1614db086fd4ceef9be1a57977f8bfa7311af0a60a2879d8cb9380c64ddbf7c991738e5b5a4e4b2feb5d88e25c822f3d",
465
-        "providers\/Telnyx\/lib\/ApiOperations\/Retrieve.php": "d2a5aed1aaab9421f2f2b41f69047a70bdea46082e118cd94e087f4082865313d7c67aa037fac194063c53b06d9dccbfa5e65582a9adbbcaaa2982396cbda01c",
466
-        "providers\/Telnyx\/lib\/ApiOperations\/Update.php": "a102e823a46dca1eea6c0bd67b4b7c63bdc0d074c97b42a830de18006782309d3c5f77103b32e82c778f670aade73d3c31f49da49682d9ac204560bd868cd526",
467
-        "providers\/Telnyx\/lib\/ApiRequestor.php": "617ebb71c97dbd896ad736a4e1235f784ea7b89dd73a980a2b259820e3dde0ae935fa532d1fc8e0d9e14a63f843e880e074319bab2f9c519c1ec19467f80bbd7",
468
-        "providers\/Telnyx\/lib\/ApiResource.php": "40b33a633cfba6c4efd4035bb668720a802c2b86538a36bae2f56b8cb1025b87f204732b9ed4f731cb9293de3d69e753e2e55a4f17980b75c2d91c572329c6a9",
469
-        "providers\/Telnyx\/lib\/ApiResponse.php": "0d292d053a85224f4ac839f54253decab0eec5ae9861ca95314e98cad0fec2d2f0a7e712a8ec433adb302b6702d69262c8866b20fd08d67b2d18571965bf6789",
470
-        "providers\/Telnyx\/lib\/AvailablePhoneNumber.php": "7c82ca4fa28264c4fdd910c71741270657e52cdbc760343339bbb7c1d5980d27b7af476f7e1bd431926d428dba685a6e34d250f9678ef0a4e3cd8c4b06289e55",
471
-        "providers\/Telnyx\/lib\/Collection.php": "8953b7490974401e598cfdba09be005dcc037ff74d7eed660d11afca7a45d62c47f6b6c4f31b3b3003f3d9401599283122034362618a9c3d487eb131d05cfa13",
472
-        "providers\/Telnyx\/lib\/Error\/Api.php": "5c496f65e000a74652c5e7e3c79303befb693e497d67dab4e13287ebe72722c9651fa04c4de4065ea969e140f7a2f74ccaee2ab728f05790ee26200558d0085c",
473
-        "providers\/Telnyx\/lib\/Error\/ApiConnection.php": "469821ef557d096a088d2997f762b4a39c82c49bcf22ca707bcbf611b20006106522150d6365835e0c7e23e3303bd407d78181fb7b5d86bd35095645e68da158",
474
-        "providers\/Telnyx\/lib\/Error\/Authentication.php": "e1c7a938a695fcd8602e5a972086989efd349a6d8d5e3abddbf6f548ba2e1f9bdabe708b5ea75474f7c3588ba7cca8a1dc60970a8be70a80962f90342e67c13c",
475
-        "providers\/Telnyx\/lib\/Error\/Base.php": "9d311a5445b2f3d9c4e25c42094734c3d6243fdc5025c7e5a609ce49d2b2a47f01ea2f163154917f3330e1a92d30a736319c4daf3ae18bb6ddc41d131afae0ff",
476
-        "providers\/Telnyx\/lib\/Error\/Idempotency.php": "cde2f56479baab53e74c6784878c7914e7393b655bfdbf7a36e0619fa9c521671c105c3d5002983b3759989a22eafa0bba7b4aedd4801d7d6b820842c0285e35",
477
-        "providers\/Telnyx\/lib\/Error\/InvalidRequest.php": "0c5748224174c20020155c9f0c734121d07c752460ef63648b08a2392bb6d8b6ff0a9eba13ed1cfb8988545f6dc8c70930de6e78da03c63da0e59bc5fa109a9f",
478
-        "providers\/Telnyx\/lib\/Error\/Permission.php": "3a03b08e77e6fd0897de16d69fb3769707f6fb46717b2a00f1282d7b3e33527f5ca5ea94b6df03c883ea177520140ab2dce4986e0ee0977cce8c375e8a5011fd",
479
-        "providers\/Telnyx\/lib\/Error\/RateLimit.php": "0ceb884f1078559f5bbfbba6153e6bacd6ebc49dac2d047da9e7c64d45c7cff0abc067711366aaec74a4f2736b7205c02ae9de8c214871a82ed1fc53faf4be73",
480
-        "providers\/Telnyx\/lib\/Error\/SignatureVerification.php": "8aec6ea46f62c2b6ecf845cadb726332f89a6c0dd92f4864ac71ffd25268b2af0468cfa83b32a24e91c735ae947498bdc6181efe09857c6bfa799cec721dadda",
481
-        "providers\/Telnyx\/lib\/HttpClient\/ClientInterface.php": "f47e88048bac320e8cabb1b61869f138f84a04858afc3b7aff4de858db9b3efc507d1607037bf07ec5fb1f1df4069b71bf8ec1d0edf953bd1eb8255e67651ae9",
482
-        "providers\/Telnyx\/lib\/HttpClient\/CurlClient.php": "fed4939d221213da7fa7865b4405e5c0b7dc092375e5acd890bfdf178baa6572ec7ac7ad57cb02caab5af24d2aa52763bae1b21679f3b94e6f7ba659cee7a438",
483
-        "providers\/Telnyx\/lib\/Message.php": "18acf4bf51ec27d330df16216924c65a45db59895b610a3c803ef1d09beb7d96d20753b4ec16be06ed40f2886ad46bb3d866f14a87021484ede5d33ac1a93c4a",
484
-        "providers\/Telnyx\/lib\/MessagingPhoneNumber.php": "2a2caa5e44efc5de92ef9b0f8ed0a68af1ab2c80932f4cd7fe79caa87ca1e146af3bd0e1d16d977738da2a3af1fb3cef77081c32a0dac50bbe8ef54a108efbc9",
485
-        "providers\/Telnyx\/lib\/MessagingProfile.php": "351d96a913427c045f534b6993c37fa6ce2ecbdd7a398502ae6447d631ff322ce146cd73dcd1161c999f6bc9ab9764221b4bd3567888dd14c110b98bdc4432b3",
486
-        "providers\/Telnyx\/lib\/NumberOrder.php": "52067d9999c150fbefcbba9969b308bb6118eabe25bd08f30cc4978cdebd68fce4479e53d71ce29632133e8c69bb4ce9276301f5a36ea95bd77d29fd057f5d46",
487
-        "providers\/Telnyx\/lib\/NumberReservation.php": "2b44bfa3fdcce2e21668004d458e9e6bcdb5e33cc37e9a0c980bbdcacec945dc4e06e489bf5b9d0194df00229a79e39bc2a62395d44e4072473441e258841baa",
488
-        "providers\/Telnyx\/lib\/Reporting\/ReportRun.php": "2a7b066db83e08b86e3da4c0b2d041c4d53ce0a1fc95ca3dab76ad2bbf549d74f9a97974be6bbbf0d7b592a814a00b514bb26ad13c7621b5c229f9bc40abac7c",
489
-        "providers\/Telnyx\/lib\/Reporting\/ReportType.php": "92ad055c626d39d9f878666310ffec1c425d4625af9e7803547d50f1684c166ea1dc67d79c35580ae08850bb6e570a81994014e82f4d4080377cfbc664c4fbc5",
490
-        "providers\/Telnyx\/lib\/RequestTelemetry.php": "cefdb55dce61e5f276bd49f6b49e57c78085338537e56cce6fea5a81cd1d2235f1eaa78be326cbd513117be88a046177afb628659088b66ce423799995c53709",
491
-        "providers\/Telnyx\/lib\/ShortCode.php": "4abc882d0dbc72becbff07212d17b8e1383b0efb43818a7eab983fd2a08c3f591a4f4ba2f185003fab0622a43329c969d2fcc80b23cb94410007a0879309ad49",
492
-        "providers\/Telnyx\/lib\/SingletonApiResource.php": "f11599b789dfaef76ef6cf10bade1b426d2e16749bd207c6d08ddd007fea470fdbf0492f9a59cf8bc9f8589aa4532cd6c3887629cf27060696c3f086b0a48673",
493
-        "providers\/Telnyx\/lib\/Telnyx.php": "4971ff61049149242b0cfdca4a15dce213c465ee697cb444eb47da8215eddf2737508164c59393bd7661cf40b1a525afa9fc0df0dae8a071a59f3646a5ec44b9",
494
-        "providers\/Telnyx\/lib\/TelnyxObject.php": "a1bb11b6bfecd69ba694dd34d6309707e916ef45edea1e81e160c572dc404aa4e16841f3be7a82b3965037efef24db7c7c9730fbb65d26e8a188d30fa9af01f6",
495
-        "providers\/Telnyx\/lib\/Util\/AutoPagingIterator.php": "d03ac3841bb553d847be9ea73ab9debd8c1f2c829b0d38ac4416a121ac535a5ece2ecd9943d89e720cb5abb1c907ca9b96df899a561c190ccd6843bde785114b",
496
-        "providers\/Telnyx\/lib\/Util\/CaseInsensitiveArray.php": "bcdf3fba35ae234bc63ba6cdb5429aaa5fd6baed85857991abb9eff854b23eb7a878184ed038636292ac470b67f91c6bf8d79c20a6214d31c872d22fe51833a5",
497
-        "providers\/Telnyx\/lib\/Util\/DefaultLogger.php": "50a69f9f6ad628e489a05fdad0df811c926c957c301adb0b4b906dcce9733a0598f6c2eb126865c54a0100131dc4230a834b1e98275237ce8e90bff2e96cd0fb",
498
-        "providers\/Telnyx\/lib\/Util\/LoggerInterface.php": "8d2dc2c59af5e625eaeef0b85b09f78a42e533b62fee84717d67a4c706fbacd94674f439d3ac60984c0a3947b7d2f5a8ccfb64e071c41d063b8298f57578f88c",
499
-        "providers\/Telnyx\/lib\/Util\/RandomGenerator.php": "292c880420b28390e3d734c6343acd48f322db0c474f80430402916de1dcbf8e988b3d2753a7c18e763e632f474284b213ccc8e8fe4e52f00569e72728dcccb4",
500
-        "providers\/Telnyx\/lib\/Util\/RequestOptions.php": "61a13e62a72e7fc4a1f4d2a707d03ca785af36dd8566e037efa4b1a07d91debe1bccc637bbae6ab9dd836b20a4133cdb7316d6c2628da0d13d2164d6613f1e3f",
501
-        "providers\/Telnyx\/lib\/Util\/Set.php": "1381d2144748a490fd27329fe231e9d3a9a8b428499d4005f9ff18a946c350d8dda1ea90285314a1a99f5d351b1b235ad37a74823c37d7345da8af528dbbba87",
502
-        "providers\/Telnyx\/lib\/Util\/Util.php": "d7c35dbf5a2832ced6059800a6730fbe75338252641edab902adfb134a179d96e162f05bca2902c6c2d99cf4827d5b89b0daac826162c7d460e17017ee405606",
503
-        "providers\/Telnyx\/phpunit.no_autoload.xml": "06ad2f4fe0a292902757629f5605509f32a0d1dca527550619c98a61519d83fc70f3c886b12f5e5734b1031186fd9c7fed6fba813cd816b0f07d36c2a6bf11e4",
504
-        "providers\/Telnyx\/phpunit.xml": "82ac037adc20f2aa76682878094e8bffbfe31782dc6a94e2987bac5546e3ffec90577d03715f4ce481cc977685eec9e4109a61b4b46bc19351c2cad555d7cadf",
505
-        "providers\/Telnyx\/tests\/TelnyxMock.php": "e8e93ca1114530cb7e9cad46eb20e32072934496d515a9391ce8093773450dd60f3288f9d3ba46533a0f650fe67b508d5e54bbfc6e1642443d1fc043b88eaaeb",
506
-        "providers\/Telnyx\/tests\/TestCase.php": "9945df738b56e344648cc00d3d4b94345c15d8749ce511b5095a87d5e52aed35d8e3c773276d9dde9d9fa04eada784a55e4876ebf70a198ba719c8e94c8c32d8",
507
-        "providers\/Telnyx\/tests\/api_resources\/AlphanumericSenderIDTest.php": "1db47c5c215f1dccbc0456035edb1619cb7575dfe2b152924a6e1abe4a021bf63be3b1d1cf1b86285c5425f5df46c8e396cd66b6ff6a27534e402e145e5fb194",
508
-        "providers\/Telnyx\/tests\/api_resources\/AvailablePhoneNumberTest.php": "823ab5138035a84a790d70c9bc5964e7aa163f195aeaa2fb50d2cfc7068f1a77440f09a134bec36a187cf57cca6c735b428b225239a263aa26cc5cecbecdf6d5",
509
-        "providers\/Telnyx\/tests\/api_resources\/CollectionTest.php": "af248a4d4c4504f5fb7148e8f5ddbce3a05cc859a761f57cffb8335be10b07ef6d4e808002601f92eff2968e86873fbbc3fad838420db0694f81b9cd95091452",
510
-        "providers\/Telnyx\/tests\/api_resources\/MessageTest.php": "a616a69339b599526dfd24a25d8e99eefc99c2341bb7d4f635d1b4984f41dc38a3eb6bca3e4242caccb974b141a490624669b5c2b2f5315b6cb07540d74fcad7",
511
-        "providers\/Telnyx\/tests\/api_resources\/MessagingPhoneNumberTest.php": "40409c270a6f9a683bc690f6e91051fe1ac4c8a6cb1b4e5536416d64fc3f8c81f327f33e562ee94cee1481e0ec2f13148b0dc3f76f3f20a49a9d80adfa5c1afa",
512
-        "providers\/Telnyx\/tests\/api_resources\/MessagingProfileTest.php": "1ca7abc2b47f221b491ebbe7def5569deada6eaf4184bd6e6327f7bf2da15669d1fff581e24c466621e8462e816c0a12d02e0aa1d91aa3746092f8a09a9131ae",
513
-        "providers\/Telnyx\/tests\/api_resources\/NumberOrderTest.php": "dd6e4382dcdb0cd60ded9d9db6262bbc7f523e8f5eb842e15655fe8ba4e24ad5192b8be40bbc762de2c62de3aeec31e1373063420a99e39bf02f5bf74915d5ab",
514
-        "providers\/Telnyx\/tests\/api_resources\/NumberReservationTest.php": "8b8386c0e044e120b6d60f97433c9ecf0ddc272f805034768300bf01bfbc731a3f6f964758e509d650013df03bca66eb1db13fa1a24315df76ea55fd86287fd6",
515
-        "providers\/Telnyx\/tests\/api_resources\/ShortCodeTest.php": "8aef092868b89adda6517905c7f05245b3c39affed4c7723e5a32cf17b8e39528e8925923aad4b2add5a0bbce9049a8f934141b87a790fcb002eaf77aa494258",
516
-        "providers\/Telnyx\/tests\/bootstrap.no_autoload.php": "cb002f7c8f77834b6414db6535f083bcd227ee6085363fa3cb0f66b55226680a45c8562fd8458249868465957b2aeae134b3379f8ee2ed22c96425475e9c0af1",
517
-        "providers\/Telnyx\/tests\/bootstrap.php": "50e143ed68aceb91d3e119d5a31521e76bfe9876bd780c90ac83afb7ca4f32be48ff81c33c134109eafe1d22f35e0957a9a834966b8853df99dc1df04795adf4",
518
-        "providers\/Telnyx\/tests\/data\/test.png": "6ad523f5b65487369d305613366b9f68dcdeee225291766e3b25faf45439ca069f614030c08ca54c714fdbf7a944fac489b1515a8bf9e0d3191e1bcbbfe6a9df",
519
-        "providers\/Telnyx\/tests\/openapi\/README.md": "0c54fffd5b7a5f393358864ff9e3bd3793075d6060cc1336603b2455d60f16d160ffd47b52bca6834acf0d9713855b386f69580099a3dcc131e8d5d617975ff2",
520
-        "providers\/Telnyx\/update_certs.php": "46dfc1129c3dff2211cdd8274fadd8629c450e94a7a1c8527373221b25a0664b6043d6b007351ac9afa4b40ba349a7fdbf4ad2e088cf0a8d864f7cbb81145fb9",
521
-        "providers\/Telnyx\/vendor\/autoload.php": "1d4735a3ebfd65901ce478f8bb98ac576ef9ba2706f17a1c6ab125979a882ec7ff463b577fed1c418f817c1a56e842fc25b6aeb8e7ce6dcdd554a25e03959c3a",
522
-        "providers\/Telnyx\/vendor\/composer\/ClassLoader.php": "866e8cbde808b4e7774c5d9e2bdda44e84ff9bc84268785aff1a75277bd7918dc26ceeb27732718c9ea93756777ec0d16c09c15f9c1179be3cbb410c7914d295",
523
-        "providers\/Telnyx\/vendor\/composer\/InstalledVersions.php": "86ebb1216b59b01b7cd1f3b2e66311cd6295b58fab91a9a82603f903c6d2f716d7697a82d625372538f809e9e45f7dbd257a00e2b95d23c3785e4eeb3a6ebb60",
524
-        "providers\/Telnyx\/vendor\/composer\/LICENSE": "f3bb64009f41a425df5a9bbab53490f0eb9b74fa8d6aaa2f57efb928edc4ffff330260666edeaa04a91fed708c3663371cf01b284f3a08d6698aaef7a23f355a",
525
-        "providers\/Telnyx\/vendor\/composer\/autoload_classmap.php": "a298b75d605ec9a330a5efe11769e79f02cf202f49d8b241afbd175c7fcfa0ac4db8e72a29aa1d839138e3b181fbfeca525181eb57e998a4a2c14ec9e457cf1a",
526
-        "providers\/Telnyx\/vendor\/composer\/autoload_files.php": "107b2d75757e7b39e2d279e373fd4291d57e91a7f442b0f880b51d07e7119beb9d41d1cdf916131bba717e8da953e2117ff83f1bd9ef850fc1d9056d0f02996f",
527
-        "providers\/Telnyx\/vendor\/composer\/autoload_namespaces.php": "30324cf2dc20c214c5b5c8fdc2099b67772149ddea1d1d51969c711be9a83d036e43746c600f958a6b49969b16a10ef93e9b1e3d5af9714721ead916b9aef344",
528
-        "providers\/Telnyx\/vendor\/composer\/autoload_psr4.php": "02804e683dc13b4eb2ad98284be2dff3eeb97f0ae9054c3a45641ce7e6144a3b5f34ae36eb764fd2faae39fe5dd4131b4dffd4649c6ba3220ef24aeab45efcb4",
529
-        "providers\/Telnyx\/vendor\/composer\/autoload_real.php": "469f95fde429006c3262cabe72cd49970b0cd6098b743d8e5a646af25679dfe539c98d3337b51a8faf7f30d9c64e1def8d131a93e8897f801830e7e1c4da5874",
530
-        "providers\/Telnyx\/vendor\/composer\/autoload_static.php": "4845f043e32744886f456f358ea87cdcfd641508151ba6c3b0169c9aa53fe111f05b78b82e204368da01da68d7007709c9140d08dce4e7dca3cc4c9f60397dcb",
531
-        "providers\/Telnyx\/vendor\/composer\/installed.json": "5ca47a408f164e118f7ccba81577933913002efce47331f2eeb13f3e24d78878521db08454026d270deaa6552095260d745f0a424c91eb7efd36f6a9a20adfba",
532
-        "providers\/Telnyx\/vendor\/composer\/installed.php": "38fb24f1f4e4aa0435926d601c7b78797c231eb0e3621e370b17078645f5d238a1d02da3a29cd14a9125f78f53964445f4326311f6e830cf8faa24e944215ce4",
533
-        "providers\/Telnyx\/vendor\/composer\/platform_check.php": "4d385b31994301facce94382fa007a56ee32268d2e1cdbe7c9f9cfa834ed4195d3cf8e8e7c9a800c97aafe2c9b46f3c1a93e632c7415e8a9e4a282c083cc6f9a",
534
-        "providers\/Telnyx\/vendor\/paragonie\/random_compat\/LICENSE": "0c0bf603f7e196edaf56d02acbb2e14df7f73a2da0617d62b5fc811f088c29865ecdbc7c6925a19bda63132cc651c56f1cdac79dfa02aaeb3fcca49033636ee0",
535
-        "providers\/Telnyx\/vendor\/paragonie\/random_compat\/build-phar.sh": "a5ecc580bc6e95a9c901ad1a0097fd47ab857dee79d0221ae463e27f27cc8b2227e1975ab2699b9d0782f0b0396ed9b3ac0106f53fe61315cd2954ae54beb333",
536
-        "providers\/Telnyx\/vendor\/paragonie\/random_compat\/composer.json": "c400438df2f41ace7bff40d284236bb06c6095ac03b58caef5b062e7ef317bac5a6bf551c94459ffc838acdae7df6cdfc615dfc3cbecd16be37ba67bd948415f",
537
-        "providers\/Telnyx\/vendor\/paragonie\/random_compat\/dist\/random_compat.phar.pubkey": "e8909663e5350be2fa9416e28c6b179c41e87feab8da0d6fa6a41c294c9b00e8cc40ae8bcd03997770056f70d946315fd530f72f42974f63195f14b3c675e3c9",
538
-        "providers\/Telnyx\/vendor\/paragonie\/random_compat\/dist\/random_compat.phar.pubkey.asc": "f07fb9c7b00f297e73127dddb1f3986fcebdb0760454765f6ce0977347919c0c74ea197ed310bcd86dca7ed227812bfa6d1595c44e40f10c085cbcbf602e163f",
539
-        "providers\/Telnyx\/vendor\/paragonie\/random_compat\/lib\/random.php": "fe4539e2b55b47dfff1e2256c91498e5a41a85e28e42d790fdbcc42102c16abb09b0d7a0e2268ee004c555e1001241a9925fab1eeaa16c11ae2188e1f01540b9",
540
-        "providers\/Telnyx\/vendor\/paragonie\/random_compat\/other\/build_phar.php": "370c622746a37b65aa6e36c2fb94486b4fb01f2db3f3c9539a7fde711d1abe3f9e9c30bc61f4200e6da9b47086c207b03cd7258d77dd2ea6b48126a618e2fa0e",
541
-        "providers\/Telnyx\/vendor\/paragonie\/random_compat\/psalm-autoload.php": "f05ea11c8e973ddffde4d60688b161701217ac8e5c9237cfb57babf7113482d5e19ea441f5092eb1448a21b95ceed75f994427d6febfe0de100c376ed17e91c3",
542
-        "providers\/Telnyx\/vendor\/paragonie\/random_compat\/psalm.xml": "88c631fb2f70a79d0e56a4484fb7ae8b6b3502ed2a9599757e7a3302c42b0adfc6f0c45c9916b88d7430f209d8934b6121221dd8b424dd913c49236db7ef01c4",
543
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/LICENSE": "db260eb10b8775cb408f675dcbe11bfb1a738d638f4215467df6c4bd03b8265dec7712fffa30dbcd38b5ef944266c3963343d033f497eaa6dc602f55fdd8729d",
544
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/README.md": "82f123f85b02a7e91c3ebece404b85ef5a0950e0ca79bb0841735a5a03b88d1a3efed4bc8229b3ee1db245471cf58b81923ac9800586ace3b794421f379f7bb3",
545
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/appveyor.yml": "ed6f025871e47d5afb1eda2e0705a2185670c447279cadd8c0fa796779fa2f1d7a5f17efaf6412c403e40bee345ac3224a45f9aa0e5143f06ea5e25ba8cb848a",
546
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/autoload-fast.php": "a40c6c77f211a2257d3339ad80ae7197ede8ba0a94c76b48052cfbcc8ce903959dbd8e3434e6660bfce2c5e935cb9f38568f96cf00819d03f4a1c46cd6b7b0b1",
547
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/autoload-pedantic.php": "c1a0e8a5b461135bc58ebf0a37d75e865d9e44ce666aba9a95d6416cc7d57a834aae6fb6ef4a9cb4176690a4e41cdd8638106a11b32a155f3a8ca3acebf7a504",
548
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/autoload-php7.php": "0ac98043c8df48e7bdd3a20c11688ad3702a06271687e1019c2a7288288532ea593e7e462635b806c0b18dacbb8f2bd6d9c700a61d2b1deb90eba0b49660b008",
549
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/autoload-phpunit.php": "d34cda9cd77a67d93817d5b9b1bb51a13521b2539f9a8d0189debb1938934df1d5fd51fd2a82c9d4775f5a8613708a1e78687fab86c3afdc356bc4b02045bc66",
550
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/autoload.php": "91c2a6366a27a76a0390c69dc4cf061c73cb03a22a3303aad673cd08e8cd659c7fa7e6796acdd9d2d271f015eb16b15663c5d21d8a538fe14f459519c9f9e8d1",
551
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/build-phar.sh": "5bc154a32c62797e85b82595da69ed11676d98deb9644b62a12d5ec169d3edfd4d3b24c67170143f12ca63d9bea06cd0803f68d5e63a7849ea9c4dc9483f7b4e",
552
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/composer-php52.json": "10cd40189c6ef385b9e21311b8b2bc8f7943273552227c8006a38889d743fde82c8c61286484d59bebfb83e645a87cf6d99f29409439a1057fd16a4ca7727417",
553
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/composer.json": "e9b03b450c47dc1a593e35493c7c80c373f958ac5ddbe89a163f15e7a30a8139ac0f9868466610899e3d5e5d573d517bf09acfc68d2b9420e3301b39e7736aad",
554
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/dist\/Makefile": "1cb0cca3e1413538bad70b8c8a22dd68d17bcb6450e0c4ee41fab9fab09c36bffb4816dd0f7ea2f40ca1b4cec6b030c5c0cc17955d2c83ec08759e748b04d965",
555
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/dist\/box.json": "47543b120abf7596f26b58f9911963e9bd0cbe2297b65d43f74dc52130e503ce09049a4be53146387b7fb42b7640f6577e3c1f4862540d4f8a0e668b0001e62c",
556
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/lib\/constants.php": "4e0597dadc39ae7b81e46ef5f3f045812a11753d9116215bf0d905e0bb3760bc44639988f1ec8f0ae8998f507e0c99eecbd19705f5399edfacb87172d7a577ba",
557
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/lib\/namespaced.php": "c550633d5dbd23c1bb2fe9a14b787e239bd5fa898932ddb8a1b1f8909a57393e01f12337fcc53f54b24bc48a97c3ed89de03da089ffbea71ef90d48c5091e200",
558
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/lib\/php72compat.php": "85b52455b2764ef4b80d60b8d99d5f65264b2a2e7d770b2ab05871a5aad213ad35f2cd755a8b5d19b5ddcea758c024175480f2dbc89ec75dc86ccdb453f5fc25",
559
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/lib\/php72compat_const.php": "177d6b1b8fb5286842400019be1465fa0438e06dfce2fbf5e93e93d0715c161ad07c0c31c17394cb0c6673a058f34544454cc0845893242dfb5a998655c93701",
560
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/lib\/ristretto255.php": "f2c36f65a9a556c43bf9f2fcad02f1c87c29d89bb5b3d81634112defbae7ac0c85e558fb3b5a5e74d95906a4b543e7a2cf16fd444ff28888ef09d73fb9e6b6f9",
561
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/lib\/sodium_compat.php": "75e3119fb1d400aba554506a562c64c1b1b82e66277383bf307406fd1f4c68499a32b82108529d5af99878890e3551dfd1fef1ab62ae86982c27dc975dd39155",
562
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/lib\/stream-xchacha20.php": "4cf0cb7bf023249c18f2261057f994faf8c4233022651285fdf8978fe9a71d7eae0511ea1f64faf2f3fcb1ae5b010112a5a4ebe8df9fea7ce908916cc2ec90af",
563
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Compat.php": "7a8389a0ca9cb8e544b7f345c60705e1cca41769105531211219142f15c83bd60b442dbe8bd62042a5fddf31040a19ba1f3f00ba6c2a44c3160089a2605099da",
564
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/BLAKE2b.php": "91aa0293c7c821d238f36fbb1f4327e67a718b53c13f0ea0f4d6e1d1675618bdadf183d842d4dea103017be863d40762a20c644a4f3619c7549991f11a19445b",
565
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/ChaCha20.php": "7e09160954fc59c77890f28e75f7ce8b75fdf08b9d5461c5e7dc1f49bc664bcb1b7ac74e3f5437657a20729c2db965d968060b27309a4a06a252d22b7f8dd4f6",
566
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/ChaCha20\/Ctx.php": "f19f61e54d42bf154182d203594613371f430d7c78f5b8229cb9bb94e19e42bb9a8e434639accff18497cd728ef391a1128d0145b8958f8d4350ee340340df39",
567
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/ChaCha20\/IetfCtx.php": "41ac6fb53ae553db13ef5c12d8c1c16d017267f130e8a00e9c2a8ad10d723aaee5ee08f2888f016babe4d712a0f1fa50012e4ebe6626b34973c26ad6728e36da",
568
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519.php": "5404d91b94a8e6c442c3eb30b763f1dd0c1234b845b967b7048f71d5a0b6e1ab287b44f43e06ae5bd6fce31f78154b8655353d7df86b6ac699a41200b9df33d7",
569
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519\/Fe.php": "937defa56e99d4f38a81b88c03c649deca5b0f41f5d0b8e340cadccb34ef0677563f18967bb9f63e9547137a2a1827f9e37c62005fe745aff3764e39adf86cee",
570
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519\/Ge\/Cached.php": "3db1263681f9414d237a8318c08ad07bbe3279b7310e21a40c22033f5d90eb5d7074dbde430eec7910a8d7e4286fa6c0131938c92045520f56fe6acc37af70af",
571
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519\/Ge\/P1p1.php": "d757efd8638aa0c1609d59c47f3b18608a0fc6e1e5bc3cb94f16fd3fa2d6125872a796f4837cd8b940ca6988db92d3c668bba684c721476ee5fdb6fb6d50670e",
572
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519\/Ge\/P2.php": "cd70c62efef16eb21967d5bb0489dadef845fb3cd4faf0b1bb7d080a8685164b2b0fde4d8865dec22037795eea6df605dc2151f20871c31d5e9e0084f0066219",
573
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519\/Ge\/P3.php": "56c14b848691af72c00f5dcc3d31281a300d0ea9b6ec273ff929cf30d2279cf34d51891729a5b095445fffa8a63b8c8147f4d1ea24935c86b0216b3c40aa4241",
574
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519\/Ge\/Precomp.php": "f6c53daf36931b4289248a231da52759e91e5c38af10b2cb89a1bd7e55d29e316dc77d144fb9e52ca1cbf50db84234aeebf13603c62d58d5b3ee58dc19cc18f0",
575
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519\/H.php": "c2e48f6273cabcdc40f20fd0f7ea55975fc9da5a419b1c9cb834b694c858533f9a0d3e3ce768b532ea6b69ff5d2df1ae4c246a15b7129916d4034ac497ca2be4",
576
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Ed25519.php": "eda61c7ee144449df655ea9a9142d0b26624644542012652598bdc51493f61938c13651b32b05e942d31d3cfbfb7899b8621f4ebd8a5909a1ed12704b2bcfbca",
577
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/HChaCha20.php": "b5005439c15ef7aed83b566e670053819f59c415d9c5f607550c756622d7161ca32fe65dad8f688e6a292f88192637260d859302064b416465c08bbf7f6dbe13",
578
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/HSalsa20.php": "c882b541376c8eea8ab3bb63d8b51dddb345cc45ade8d5d264dbaa96427f72f0201aea828e696808155da7a978c4a1fad09723d42ec393117693e48187cf2a4f",
579
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Poly1305.php": "c438e61d6b330be26cff863f8b5c42fa3284d6e8abdd1e43a2023c2695dec643d2641b2239a9b0fbea1a34e9e8011d5094b4eb024b111b6fa903a1c026328747",
580
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Poly1305\/State.php": "4558eb5b05c7664408a4e793c2b85a4c2593ab8a1118c3b89db712f337a12346e2e882a0c638c32af733f5589a310b4a528c9bc02c136692ae82f3ac7e6cddab",
581
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Salsa20.php": "2836d7eeeec597187c456ec790107a5dc478a1f79c1c1e4ede4314bb830f865f189e048e3dc55742703e2fb7bf31275f515cca57ab5bc47332961bbdcac7c490",
582
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/SipHash.php": "345fc6b9f37659ec9830c9b3bd1459257b81568dc73809c023c551dd825981b0da6b150b6b7cd57b00097ae9cd3b742d730ebfda2d2e459ebd7d5257fc967156",
583
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Util.php": "81aac8187fcd44a14ae856e34d7337c012ff3603c606e1b9ff5a95fd5cdeb962725b70672a57b600d344fb2f34aeea00ddc8f1d4d8f8888961fae9171f8262d1",
584
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/X25519.php": "d11fca34bc3d313e365ca47981a0efb880a3cc8be3e2cb00da7df69de8d52f2f1fc793c1654cce1385ea66aec40eb5339c5cbf120c127cb399b72fe84b7297c4",
585
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/XChaCha20.php": "de5d7f3dd4402fe3c99b66a92fa4f0766beec66928c8996b3754b2f7a8869b65035c6ebafcc8ba2fe9b309adf541e89eba9491554f1ba548af6139770aedabf8",
586
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Xsalsa20.php": "6abb7e9217d5463d373023d5aab49c41cd3e1026835985dd13256e68374ef63b90b7dd033f7fe14ea60229a98e5e64d0d0f23b7a382ecc9d8b41746bbe3fec11",
587
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Crypto.php": "257d3d05f1acc745b21f25652ddf0b09b5a68b2b75abaa9216bee10ea958f8ed1d3c964dda5326216366d9cca4a71e8678c23994fd07eca2582e3d8c8aa75500",
588
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/File.php": "d7cce5179670dc18544eace3bf8b8b9863e62fc9520526da2870e45d5d400004fdeeb3c0f44a90caf0742f89b633e7fe3f996bd5f89af4c7f52ea37f429e453b",
589
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/phpunit.xml.dist": "0f8b25b7effe47068dfafdc568c3298d7c5f2d4eb1abc040c8dcda1b0daea8523a1f82d8e00d6475ffde3cb566c18d17ccfd07db59c72bda11f40d555b692d32",
590
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/psalm-above-3.xml": "5bb5402c96cd45a0d88542bfaa12ee03c26c3242f42f1e33a2a32e5a16143e6b66e7dd4bca7cbe30f73ee9eea7e72862e356f1bc4c4daaaaf1ebcb248d63b230",
591
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/psalm-below-3.xml": "9ef67d2d8ee81c94d0ed80d592894be0c200045b295178f246865d12a54d963e97b4a8d75ab88595bbb73d74c75ab2275a54b9a33733bea2d15487c5894f515c",
592
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Compat.php": "1c233a4b931c13b00e243f699eed9e81fc683846e089a24ad90dd17f786bfdec9ab32509eb9666074c9fc2a168ea8d411144274e6c4d4413996c78bd3c536515",
593
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/BLAKE2b.php": "27fdd20dc655cc7f58454cfa97fb974e4d99f6da5b97d79e669d41b9c5bfd1be18fa34f0ef7a353731a3bebb11b56fcb68818cabb3d8ff026682e7b39106c6f5",
594
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Base64\/Common.php": "c8512fc6d570a3198107493c7b8d20f38539caec221adb14161d7efbd6ab7d1d0bef4cb5528fcd84cd9484f1a9e0fbeb45aaa2365012680b0106ea92f8873281",
595
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Base64\/Original.php": "4564f7cfef60c318abe626832bcd355cffbe04d020e04d18c5554fc1610c4a1b0ae8d1111681e2a458ae0b9d7ef3528bd62aef019fe3c1a3f9d28b5ae58da86f",
596
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Base64\/UrlSafe.php": "dcbd158a52f33b9c64c8046c8f091d9af95657a562ac694c9ac0beb3a1876d55a3f23cd42c1777d9cf2a55cdae38d88ec54628b2d5fccd6befc92d4d51eaca2a",
597
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/ChaCha20.php": "f0015a4f95fb6028c015c954992233d76ff0b07c7c60de6347e7b7ff1cf704e80de4ed5b3e236502fddd3c56071aa8012758d905031d6154f965c4898251329c",
598
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/ChaCha20\/Ctx.php": "aeb8c31a1bb46b8519f280f23d349fa93911bf766715c0964c0a901369d0f0599e87c6e13459734f582a04ce74d9ba9f3ed7553d4b7214855a815424a8a8610d",
599
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/ChaCha20\/IetfCtx.php": "d22a84b5bbe07297fa80c989e93681b27b3ee502a9b77b63e2b08eccdca03cb98c39834feec5fce3cb0e1915f2944b06e94fe555da123de982fedc61b30c1f91",
600
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519.php": "b25ba0383cbaa00339f5cbaff6b400a25f3bd4d244d2fe70a08b987ead0ebb04a7f51b9476baf01fea5967610911f809114e39d21d4e278a9be72b48ca39b09e",
601
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/Fe.php": "0fad7d424e7f3fbc0abd6a4f9113c83523aadc3f9d3423a94da0954f56d31705ca567ffad0972794bfbba00c4909c8638130b99a983cc52022d262d6b7d145bb",
602
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/Ge\/Cached.php": "58ed8181f08dd61076c0ae9ce176455d951de04b9b1b03260c593d009414e9757d9120ea9e94040ddc1e0867f8a6574dc55e3acf82f946100d03d4506c9f778b",
603
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/Ge\/P1p1.php": "63b5f5a6c7061826799c2e3285884ac2108adb19ea246475b98fb68a26aebd694eeba56191fe15fbc1a9ecb9b85c139bf9e8b65b4456b8fb42652fcf29097fad",
604
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/Ge\/P2.php": "4caf0b912ad4bd82f8c447fc25829177323ba7af6d2355a7709b8ef99a855b51158e5252a1739cf6e9ae72b780e415af0cf3d510bded3fbce3542c99cf057535",
605
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/Ge\/P3.php": "5bd84bc8087c48e62e9d29451c0165376ae8486ad9288556c81e4cb897822cdaf95a2df6093f16e2a336839d0a4ea7c1535361bf041d8be0fddeb1eb245eae55",
606
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/Ge\/Precomp.php": "a58cbf2c93a75948b4576395ba1ebcef5a35b6dfb4625690e872010a44edd92939ba146b145cf40bc2cb6e45da0e19f169a45b575d813a70428f171459ee2d8c",
607
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/H.php": "0ce669e4f370acdbf6cf27d5a525b0a3a3bb7c794b8a2ccc7b2f3a3670fbb048a8493e3e6306a5f148204f50a5458d47ffe4a2705520e15631b02d45d39b0676",
608
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/README.md": "3f50765b54a3cf172c9cdaf2541a54273b811df61330af83883de5309103d6309a0900ecbae056f60aa831e438543c16c809fe183cc15c6a2f2bf15f6f910cf7",
609
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Ed25519.php": "89eada60bdd8739af528cd74b771a2ac04e36aa3e588549c7e8a82d2267a4df5eb4ef13c806185ac65bcd33fcba0f49a03cdbc03f143ffaa576ba6f4ab5efaa7",
610
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/HChaCha20.php": "e221d5f3c4818256a895cc05a8e68ae2b3cced7eaf4e425f3c373d59b2cec31fa7b498e5e42af7e374e70c3a176f966da3cccc4be97b646182a8bef2817986cd",
611
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/HSalsa20.php": "05e5376ceaa53ddb24971a43ded855892cf37fe0f03647660f573334ca79e61edafdd511c418cdb3d42e62298462e729c69b4dae3eb802c4749774b43d659536",
612
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Poly1305.php": "1bc3f6e6323d44ab76eca14cce61e7043ee98d8f7c50f29a5e29704c35adee345faaac767af588e1c6566f5732c1ec40ea815c51711056737460c9143adef1e8",
613
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Poly1305\/State.php": "9a69f92ff7c3e384cd57c0d5fddf9111d57abc9849acebb329ffd1ac4f53e539e1548140f4a430f628cb378d7fc980494307df13e4d1837b0af377bd7811c6d5",
614
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Ristretto255.php": "c4fcc5c22d8ece4e704c847ca01ce6edba7682fb2b9b91d74d664a204cd5955128c3bf8089a855312244f28c4ef6953927832ed989a03edf6eaec5c26df1722e",
615
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Salsa20.php": "8c2ad19b46f527ef9c091cbab17f64d36610745ef32f778e3911e1aa2a142e88c0f6e005ced046a678d66982d2e9ca48677f082697af3999cb62fecee4d800bb",
616
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/SecretStream\/State.php": "629c6f96a7bba323ddb8eb422e7048839c188560932cb4306b9f11ba8a2b15afdfc037fc14ce8725ed3efc72c26700cf6cd2ca4a85870fa885aad6b6d57a4a0c",
617
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/SipHash.php": "6f24cd7d32eb80c943461199a0937b0acdf01560542c54ca916fae6843c3dc5fa65d751380434508aa50501f7dfb6c227e9330996956c4a8c8b32b6ae55bebba",
618
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Util.php": "fe12c7259ad5daa7eecd8e199c77f822e612333169878309cec5b5483a9bcc775261c344a31023c2741d53f37f05a0f6dc6289dc45c7d7b8ac7fedafd5458d57",
619
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/X25519.php": "ea1d665ec23534de7f18c4f48094de4463753baf8b9ba011e38b969873bbaaa32e6b90bbbd0597baed3687c28e37fe394c224a229d734671b7d7e03197d039f1",
620
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/XChaCha20.php": "56d827be22c68fe9a2cc01b9f5890846197c5831c3c0f129d9b8c522391b7d7391a217a2dc48a4bd78e81c3d2f3bd8187546d311f991148fdf43a8a67730c81e",
621
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/XSalsa20.php": "c0367d97622bfb654340a6a7948e8ca4ed399d106dd8b27169a9f5d9bc6532129548b4dabf9f12ffba654f490b8adfa07b0b76935bda15705560feb7c590a3bb",
622
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/BLAKE2b.php": "97cb339b44cc54299394b4fc27c8ab13d5a8d48aa4c8fce71733a27cea5d3226df4341bf9722fb4f4ba71c38f5491d677774245d75bd91a693269aaba0487036",
623
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/ChaCha20.php": "da693dd0be25c739b477673933d361ed4b2f83110ae98f7c6805af20789fb4379b4b7a4ae34aca588666cfbdf61c2dd5776f8a4b1ee0215dae64ea09c6479a10",
624
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/ChaCha20\/Ctx.php": "621194fbbe2eb42c04c9d94e45e3a0ebafdb4cd87195b924705f8c2a9e54c9dc52fa6dcb39967ea1dc4ceeb6f2d20659a1b0aced8035529376f6244ffaa96f07",
625
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/ChaCha20\/IetfCtx.php": "b4a0690f9af7ace9fb3f8c10ca78989573a1cd49d3309f9c0011501daa3c44f7b616868e417096076846b19502ddaaaacb7c85f9b5c8622c57e4882982e09a10",
626
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519.php": "fd10531c29a88f84f8b7de7c09a0e9e66472658827bcbdc55dcb1fba54f620b32dfe9359788e67abe4f6ffed3e4841e6b74939d7504188cfda243512a86c7eb4",
627
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/Fe.php": "e6e5ce11b327d42167d51d2fa462ca6a54bf180229261af9ac1189fab30941148136ddabfff606dcf656985cb9da9bee93902f1863a84a3e5d42bfccbb0111d3",
628
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/Ge\/Cached.php": "350f529a5a178921a2f40818a1668c3effdeac12b9b8aded2f57f1654343d0f7f535c780c5a271d9b7772969fff9381befcb85aaf676650c67b6e583d616c064",
629
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/Ge\/P1p1.php": "fc8344d196cfa17fb61ab576b0a73f0ecbdfdf03de53d669cbf56bf10cf13eabd8c8a83d3eab7d9f9436b4dbb8d0785f9929c190059e0695579811405f3c840a",
630
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/Ge\/P2.php": "6c4051bff3e25a7863fcfef3b9c1f028fa8b94d301e4de5dcb6654c629bc95f44978fdb697698375e3cfd1dfb9ae6a3c8dfcad0bd5138e51cd5d5315b5e5b788",
631
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/Ge\/P3.php": "d6ee2e6bd34cba83a2025bd79e2d8a829d39f148c65ceee5a382662ef25b1c684552e0486ca29215f52d5d1e140176bdf6e2c40febd55970db55675b76d448e2",
632
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/Ge\/Precomp.php": "397b94e8292ad4f09cc37f1b08a7f364e12d6acb74f125ff0148c5562631f632a2ecc44db517cbd5ea61865e70732e6223a0c736b831c751df859a7d2afc4ae6",
633
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/H.php": "7bd14df9e3afbf8bc2ba27d5faf6ba72f17eed218cb7e89f4a458f500f6d9a60c52eaf5f1fd656d7de492246b0b0ac3d5904da319c5d85b754c64ce4b1f1b433",
634
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/README.md": "3f50765b54a3cf172c9cdaf2541a54273b811df61330af83883de5309103d6309a0900ecbae056f60aa831e438543c16c809fe183cc15c6a2f2bf15f6f910cf7",
635
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Ed25519.php": "30b970fe798803452a504ac453c70b5a2b51cf3094639dc58195b3c8e44fc37089c58bec2337d7f79ca60c91c4951af5dfa89e9dfbe3ae327084a806a6b8db7f",
636
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/HChaCha20.php": "d4fdd553cde5a1ff277805bbba85128e3ea59e4fc32eaacbc8502414148933c760ef6da06fd967bc594f9d22523c62e45ebd7cc9411ad4b76e2d76c0fc2c00c5",
637
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/HSalsa20.php": "8bbde85156bb88b6f0f14cab67840cabf1e1c456f9459edc145e09907161bd6fbea93fd37f121678064de6922102e78789cbfa3c2eddfcb40b93178fa3fbab6e",
638
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Int32.php": "325772c5cadd6953316e83afe2a04804041292f25cb16e6027ea230e20aebcdd819c937977918161eeb9c43187fc105be2824949c9d6059e9c0a39e0cbc42219",
639
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Int64.php": "8fde2b57266d78e8b03d8c3f89a1fbca3329bb6d0ed4526b3c6dbf5a0e92ef9d8e9e3697cd23b7eb5f7524fba7474cc5a2e06f1ba6faa04f7cb8729c985a5794",
640
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Poly1305.php": "f0cc2f5cf32a37ad6c3dbaff1a8a155ff334995eab78ab42f2e5bd950390babaee0c1588e3f17d4e73cf970b8e3c34f536096d7da23182f526b0eed704e3ecc8",
641
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Poly1305\/State.php": "8656ebf7aa0c2c7e8cf01546a261bf5e9f6c374eb5f40f8133bcb33e35bda2f19f47471b2ae6af6224df7ab9bf3886cc43b88049e8ddbe54b8dd129b28491129",
642
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Salsa20.php": "bbb3dc0a30030d9c5f5ef1ef63e36f9a067d67891185b9620ebee17a67bee31a7abc420abb7b82f38e913b5de54d235859f0e8f5f718d8f02316f4fb03e24b2a",
643
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/SecretStream\/State.php": "69d505517dbbdd2e77cf5aed72673edffa2aa008e70325db88877ba5673ac3ac070bc4c19cf13707932b0b4d71ee0a9b007e06a0f822292ec278a60def7cf511",
644
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/SipHash.php": "8c3c2d2e4c656ee6f7af729856cc4c79918ae2e09a167d6d0cb92f7dc9240c0bdaa36e65a167f5b63961d9f9ac4df2c19e50c848e5a6da5855566deb5b9ab8b4",
645
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Util.php": "d6ff44eb1015687847600f8b7f6a80974f4de1cb80224ea7f733e908fd53ba2aa669b97d891fe89bf0bb8d358c15a2bbf0661a779e68a715cde0405455127eb4",
646
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/X25519.php": "9e2d803c100fc9a3749100dda30fabe25c6ec59382be64f9995b6505e1652d5b2762111f2243b69316abd942c88106fa5239adcae842971f22fedd8e3aedd954",
647
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/XChaCha20.php": "1d4ef660701da25af79c9d4af2f158e3f62afbc1e5c2aa062f64b970dd33378d5f67c9f0172991985ddd65a976759e09f4604ffdf6ae158bd8a98f4e97af851d",
648
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/XSalsa20.php": "ffcbccb7d8a1d0262c5e74cbc679022bbcf1acf9160599ce2b92f66e261996f0e93b419231fd41ca95852e09b7a892dd8e98101c3426d30cb294f869908ee21b",
649
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Crypto.php": "1af076765319483b5e0c2a3ed9d5a12133fd41b7172cd15073da3723200c41cdf077dbee04f1e4badc2b86ee5e23965dfd0e8f3af3f52b3b584ab2f775f64cf7",
650
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Crypto32.php": "9fd3ecc6e6faec645f2c5166ca551cbb4ff8430664bdb46c383da399048de42ab505a05c709b6ed0de245402a1abd701f21398252f059003a59fd55bffd6399b",
651
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/File.php": "4f2a6c996bd3fe4a07e4e1d49d2790e68798add08c4887efb3d7bdc7beb5ec2c1601b8e77a0b40e570211f7d3b4e5a5f97471f60df8b31434487495677052640",
652
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/PHP52\/SplFixedArray.php": "2adc50710dd4bc2cc1138b741cde09f225f727f2177d006ce8ca82691de0336dc51b6c30384938eef1693ae92628460f8984aaacf336815dea092de4ed1521b5",
653
-        "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/SodiumException.php": "705f6e9777db6be71970f7e218339e36d50023abf723446195cef782976d7431f815a90d1ed83e32ec527303057287f890215b4b0a9a8c992a13d111e8bfb947",
654
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/CHANGELOG.md": "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e",
655
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/LICENSE": "8756122099aea86ddf6f176a480c0454f2be6dd278e475bd6be7d7ab3d572162f1bd44c9f623e52e53514cb15336be6e84a5eafc8e2a347b481ab5799ebd6e17",
656
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/README.md": "b552bcb37ad765a0aba888fe43d2e2f41b5bee6c90e734c365797e74dd0b8c4df017ae74dab2458edb410630299efd7b649438db57acd53fefb1723e233416f3",
657
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/VERSION": "294108697ec66acf16af2f9518c5999605a8585058ad25dc9303029fd890e6835b2fcda23fff2ad60058f8f6a8a19c945d998e4e228453d4946e395b9aa2055d",
658
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/build.php": "485d76b827a54d8455550e8a8f8d14862f9444381da251e66c2bb8ceaf2106a554c1cd339666b1260450749d0244d6b9ba0c6d0a2220ab2411aa4041fc83f8ad",
659
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/composer.json": "e05f4af7ceef33d82ed5704be36e1b9839236d13073d0e23ef77d33ce7ec303cc2cfc2ddcd25318f1a5295bbe3b61a13bc2fe72f55c226e2f072e2a0b1959481",
660
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/composer.lock": "2b8c24986c6cbd290c0ce53ac4f773836751aebfd65a2350fd07b4cf45292ce2667a54494fa098da13a385ce7a9e10a2ed55d20f7c8dd6817f93f33a6cc710fd",
661
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/data\/ca-certificates.crt": "659e8d36bcb65a7fdd299ee008fc4ecd42be87d8ae7d7d15828567b9be44b4ed8a316978f2f7d3d5d7e96a4da0b30bb8bdcfae5202ef099691daa796318a869e",
662
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/docker-compose.yml": "1fe4c651e406095f0ff1bfc196406d473184bf53cf80f7c67dc79f1aa94b26db74174e0e9bc47adc95eb2a5f6eb950255c4a5cf44ccb7029ba712df3be9e6384",
663
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/docker\/Dockerfile": "a63d1fabd8c19fef37b90922aa4bb21fbd1094635666cf2a3a4db47009888bfd3f1ad5c34c05184e2ccc8f581971f6dae91c1ff137730821422cd482c39e9390",
664
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/docker\/entrypoint.sh": "2bf3911c365a271fc52d17a0aac1687abf52e5286a5d52cd34367e18651dcfd6ef1f791b54105b7742f5d691564ddca3c05a9ba4ce8edfbc68fe919e0bdf6c1e",
665
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/examples\/example_webhook.php": "336b92a647e49d8c994c8e6dc6b26670f0a58cb57d4679d0ba7177fa1f56a84a628e5385dd4c1c25a1395b1d8499e54d34eb2c20f9742a2a2a3d0cb20c36be08",
666
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/examples\/simple_webhook.php": "ed299912ca9a55170796df76b25c5c92462660b065ef7eabf24bf7f552e75fe44512fc3fa977fae2a9dd5e9be1ea28100a456de926fd7f24c32152f577f8e46b",
667
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/examples\/verify_sms_demo.php": "042dee741d4fe90d78edcd0614df6a371cee77d1a95d34623b4e558ead69378c693a33d044f450ea204efd7253e7eeee1e5a4119708dfddbafeea358bc5408b0",
668
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/init.php": "82a207681a76c9b00d1a35fcfe64753cf286d9d0122366f8c1f3009ecd6c548369d2b65d5b4e03f20faa9502b967a3bdae30865e5bf8598eba630b5f9555542f",
669
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Address.php": "a01e1efcaab0209fa7cf32ed85722ff793b9c0f750daf7d3bcd0499037dea764f2a61defa54b4bbaf602f8d0f5f477fd4198e35d6d8b47b82fd13c7a7e70ad59",
670
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/AlphanumericSenderID.php": "c6f7d381cd9901af59d67c66fbe6ace0729c77ac2b2962ce41351ed076cb39c9049aeeb72ba0e3933ebce4ab8a936b86a7e21d30a1c07b2b08cad9da2abcda1e",
671
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiOperations\/All.php": "5a6381d1492e2ebd1498fb4371b55c7e112ebf2c898e1861d7dfd2345db8c56df221795208a29b2a0e42295846fcf98f6a60fa8839df7e28fb66b9bde9226ce5",
672
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiOperations\/Create.php": "811f9227ecc5acb172e8e7120541227de0bc22cbf66a41490b743b3e49647a38889d5cfa5d64139b602572f0fcc0fbb96e3971c78801ed9acf7b50db2ab7499c",
673
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiOperations\/Delete.php": "e3cde9f67ab7281870c7399c4e76ff5807791b94b595567f56ee4ee494574e0f6f282a8d0c024c78c1709940198460f386ab8de6118a85de7d8a52feea0b0dd9",
674
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiOperations\/NestedResource.php": "209aecf9e6abb679b4f1ec2b59b1ce363a73970f6d389829b77802cb88b7bb368506e4d0aad42f090b715b4d4a580fdbe5c8479c02227102b4d147d615fbdb8e",
675
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiOperations\/Request.php": "afcba7de3fa312bc9e532e43bdcab8fcc5ca8b532c6f7bec08f94a8d7b2849467266f98af029bd688a136ac24ab2b7f438ca2fc666395c589d578e9d0156053b",
676
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiOperations\/Retrieve.php": "6f29bd2711e3c6b586c2bf6d9805b986a5f76fb0cd8c98c63259cd9873eeacd679f9718dd333110966ec3bb772e2ad06da7b1586bb590180770bf300aef63c8f",
677
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiOperations\/Update.php": "1d353ac81bc74cd57c75f01da21d6c59e053813930a0eb0fa054417bc87b6a140f64393bc04ac312b8c16803bb4c3eabae278839973f772e3202df32828480c0",
678
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiRequestor.php": "deeca798d9ba058eced71d846bd22cac360cbb25bd1271db25cd0ebdb29b1af9ee863b362849035e8a9f6ee62bd49b8415cec97e1fc01e674ad6942ac987b6e0",
679
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiResource.php": "f093051a36277165763e1ee66594056cc266fdb89caec9ab9223ae6af9add8ea4a20e6e3ea6fff4e9625fcbb95f430686f1f89db36f981d7d54034d79bf397a4",
680
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiResponse.php": "0d292d053a85224f4ac839f54253decab0eec5ae9861ca95314e98cad0fec2d2f0a7e712a8ec433adb302b6702d69262c8866b20fd08d67b2d18571965bf6789",
681
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/AvailablePhoneNumber.php": "7c82ca4fa28264c4fdd910c71741270657e52cdbc760343339bbb7c1d5980d27b7af476f7e1bd431926d428dba685a6e34d250f9678ef0a4e3cd8c4b06289e55",
682
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Balance.php": "333bbe5f278ca247d8287c8da5cf3b3f6a96c896a82e3c3b54d01277e3cdc82dd5bbda2a1253fb473a29c49d3030b73b24eb8231cc34f85b0a43bd853682e000",
683
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/BillingGroup.php": "60d9fed23d1520237a50a707986709f3b700d42d049e4070a48fbb50f257a98eab779f45a15939af3d5bce811014c01abbcb86fa1b9ccc5b89d55f44c4b1a308",
684
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Call.php": "eec97591c5e7af2b057dac6e6498cbb2c1fee0439b1b7f31c2d879a5a0fdb5a3eb5ba3bb7e3c5a9195d9019e9df82c99a491ec52f15bec59b496435c0787d43e",
685
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/CallControlApplication.php": "fee499465ecfdd2d5aee0479d3770a80219a5837bed934e0930413e6dde740be21bcd965216c782e0765ba18fd71714ac69a5ee887497845ccc1bd7797d6cac4",
686
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Collection.php": "ba4afd20a921ae7c838a74bd9efcc4e468fc12ecae86b2222f97c9405d376a77533f55924bd1d577429825e746ac59142f6d4576f4d446cb3757cb36b65894fd",
687
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Conference.php": "ef9da126fc06537687947c8eea71fc34a53a7d44607d60bcaea7d8c7f55e76a94a9d7e0057f9abf7efb1f4f270680cba042112a127c2c487fe3c617c5102be29",
688
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Connection.php": "c5f43a62ff80b2e91556dc63ad2f78cd83b4fcae4a7a28ede36388177591fbfc6c20b244f6fd4e540cd9401e34b04946bf422eedfce25316e61c89f15de97665",
689
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/CredentialConnection.php": "fe9d8b7b34a24f5b3b83d6a2597359fedce871db3a526124832d4bf4129e7515366ae16517b8dae259305ae69f95655aaa8b4710a9addc23fffee0e70b70b74c",
690
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ErrorObject.php": "cf83764f49da72bbc816c8741644e15b9a74481145c6c0c11c390221ee4c7ae485cfc09d77db24a48b0756b69c85570242bb2b903c39ca699e636a299ec4dd31",
691
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Event.php": "4e4ccaef81755432630c46881a958928c8b633ef1dea76d05f05711da17f68bf6e5b7b77395abf297b3ab128c065da7b4ed38d1be3a45306eb6d7a1080e72994",
692
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/ApiConnectionException.php": "b2a920958f3e1664a6ea5c5f32c73f9914b3f59d8a927c4e920d385ce87a6676475823729f203b09f5530da667f52e3dc3d4471fa498277270ee9360d0797b5f",
693
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/ApiErrorException.php": "b775efde92c04d1a53dd3f948f2efd92baf1f1dcb5092ed0863f37bb71fe03052562fa89349b1030f3d27a0dffa974ee47c9a3655b40a3941b05e721e7fe97c9",
694
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/AuthenticationException.php": "f8154528a04642cdd24f3de876b1a38d6f97e357d36badafd39e596ca739df7fb77f4259de1efde8bc300f126b20f6e242db4c1e3a25503565df579b62676ec7",
695
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/BadMethodCallException.php": "5e6df108c1df11bc1275948d96829f0ca6ff039126934ec57dbeee74913af00a64e6a9f2b58f42bf74aebeb94596c45cbcf66e5a4afa8924b238ca63d424f452",
696
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/ExceptionInterface.php": "77d5904b79a9a5b265ef121cd19d91b952f631ac7436e7896bb0786d9afc0b7ffe54c7ea901091baefa0154b91abfbb3f9f3a7fcfea4053f27cb44be2d7cb23f",
697
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/InvalidArgumentException.php": "f2872cf684dba5abd50bf876971e32364a23c9259c1e85a01575348614274453d00cc655b01c2dbf2c78c88f4a6143cb486c786dd1664204dc7676a64a9cac4c",
698
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/InvalidRequestException.php": "fa310ff5d5ea8f02f731089c27e6903d9b0e692a3faf272efd19ae4f1075a2a1219d167730b21cac6a30e705816c4230e2511fdda981fb47714f4d81606ffcdd",
699
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/PermissionException.php": "4cc209df863027760738530c5c01962702970a73ac7f11be232234413376dfd34db049f4e49305c8a15ee1f016b26f1c128312930e10cab174e80d6ba20cb12f",
700
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/RateLimitException.php": "c37157b02475d2a3940dc7d007b84cc3c86cab88b42e841a392e3ce4919e637c9b59bc7b33ad3ed8b4b32e74dddafd8e61a6f30d60029b8b1ecc82b8faad4833",
701
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/SignatureVerificationException.php": "3aaa44cc52efcc4caeaee624c070e8ec87b665decbdf00d8aef04ac857358028e4bc0495c4a86c504f3ccc6d753413c5ed685816e3b80851026bf2034514cb59",
702
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/UnexpectedValueException.php": "33504e45241779bae5e9c1d6ace82a75d545e6f7ae76f7d7f071fa4bbab13b2c23d11e59230da3c242b548ee7b5386bf4795e0d06d1719812348d1f9efb0c1cb",
703
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/UnknownApiErrorException.php": "cf5cc44f46c03d9d0de656e2ae61d7b077d123a4b6666a4b0f57fafa2033e072ceb5b14d6a47987bb14e0acd48ae00b39d4d6ac1849fadc879bcc43ed1acb44a",
704
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/FQDN.php": "b7d44de17cfcd207ac1fe6aada6c24871a98dadafc4cddebe28b135c6e507634608e1b6c7052a40cc750f6515fe19c2de29864d4b9551e7002fd800cc6cc05fa",
705
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/FQDNConnection.php": "527d18ad480447e4d79e567e7a91796ca31bb778f10011aa9fafafba6e769d387fdfbc306a6f1ba58e583bc7c37a9a66f1961494d3639dcdcd8912efcd0e6a55",
706
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Fax.php": "fd8af5f711fb5341e2b86a7fc66a49707bd31efabd2cd63a1d5153c24462f07341d6af618b7e82ff1faeb9bdc203f62b6dd5570d74754e052300d0d7edd0424b",
707
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/FaxApplication.php": "f489a9e161565a6e7f55a4d90fc05bdc8147a8947788a757a2b5464059ff2c49e61fa26b6d1f0b43fbf9ce8d0c08328e276442ab4d2d100e7ef34e9b2e0860c0",
708
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/HttpClient\/ClientInterface.php": "da6ee5de3e8aec8ac144511858cb3bec53bfd2aa0b5ff27eb43c7f72dcdbfb1646da223cbd861db7595db904007ff4c8d6a010122547a98bc1d2c07139328a80",
709
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/HttpClient\/CurlClient.php": "dfcbf2f40053699b94de74defc4a57461c2e07280976a377cf4ec3600e6279fa9cc434060b0291c7e10a634647e1a86e67cbaaadc49783eb532681ca25256a42",
710
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/IP.php": "624821d6dcc5d30a1a08368bacba88cc7ce8b768bb3315b3f8013606e303fa8940c13da8ece0c67a43329a0cfd86d8bd09682963eb54138f4253eb2f159c7560",
711
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/IPConnection.php": "01239dc2096fbe207ce1a5a58dad8d25795b9a8a81dbdd4290730009f2fafee76d74335aa951fb7b54e930e4e9530a0566daa9ef7e99ea60a50b8daf956f11dd",
712
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/InboundChannel.php": "c37478b08abc62ca491806db6e2814c4a28a11357fef873f6aff8867e179dc8d89817ee3db3fdaa84150111cbeb426ad0282dfd7550eb815dca100843f542178",
713
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Message.php": "18acf4bf51ec27d330df16216924c65a45db59895b610a3c803ef1d09beb7d96d20753b4ec16be06ed40f2886ad46bb3d866f14a87021484ede5d33ac1a93c4a",
714
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/MessagingHostedNumberOrder.php": "ecee6ab7a46ebf03b93870017aba4ce00c10ee36342a6d3ead209078aacf4ebcb798ae129535fb15af860355b52ea72ae6bcbf0e5261a9d66224e43560858227",
715
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/MessagingPhoneNumber.php": "2a2caa5e44efc5de92ef9b0f8ed0a68af1ab2c80932f4cd7fe79caa87ca1e146af3bd0e1d16d977738da2a3af1fb3cef77081c32a0dac50bbe8ef54a108efbc9",
716
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/MessagingProfile.php": "7a561dcea7b45a4ad4c3dbfc6baa766f011de2b2dee9a23e512689b374017b05f4fcc5c3510f19111a9d8484ed93a5e05d3dc01f35d75e356f475a894596dc49",
717
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/MobileOperatorNetwork.php": "d4436bfd9a628713889a37846829763909033339a086b6983eac792e9af42c0df2a8bcbd688c5c54a196d1fcb3d22aae7b45e9e18c015592d979e9a924c42ffd",
718
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/NumberLookup.php": "cac3b5f1ea0ca30f9121849a8aa52ed2e18b7776c4f1d552dca4c3536e0d4eb96af45267bb687319a9ec715972bc95a19c7dda54c33a2701e20cff9564dfcee5",
719
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/NumberOrder.php": "52067d9999c150fbefcbba9969b308bb6118eabe25bd08f30cc4978cdebd68fce4479e53d71ce29632133e8c69bb4ce9276301f5a36ea95bd77d29fd057f5d46",
720
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/NumberOrderDocument.php": "007830f9c03979a7811a4e0dd0c74c4b2b6d05e05b56b9d6ceb5a6e55167eb95b2546087ae17328715e01d486c0e58e396bc41816b44866391b98d48ca246d03",
721
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/NumberReservation.php": "988c853084f13e0d86445d6638517f84ef3d90c3f618c2c85c0bd8ab790012c3986a1a3eb3e00fef7759d04a6a1957bd9521bb8da6ade8c05fd2e02a8040f6a3",
722
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/OtaUpdate.php": "3c9579c6ac1ef6f31ff572fa3fb7562b3618182cb36eab3f406d8fbe6fc7b1d35a996e47923074428583ee3653aaff3792f9fdc47eabe1627f1a85722fd9dbf0",
723
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/OutboundVoiceProfile.php": "d0c5985f6f629904f4c95b892e329f280f7e0e13b8794d1950e216ef4c28ede7b94baa99f18803ff6f60b09d6178ad39fe5d3c182e984c2b4b57e9732991597e",
724
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/PhoneNumber.php": "8106765a769bf3f6190783917aa923f3f7690af5b7bf971e3dbe73ee5f227b27531a553cff9cc425ccfc7cf2ac52bcfc685f3d3b178875f8fa837a5de99a077c",
725
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/PhoneNumber\/Messaging.php": "d0aded1cbbd4c6108b0fc6e6773dbd03040af54c967f0a8aa9b2523db769317182889c882e6efe6fb0e187ac3f2919563aa6a937c77f4c1ff94e5bbc31f4d9d6",
726
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/PhoneNumber\/Voice.php": "e7e8184351cb186fee77019e88600dcb15da0435161d1878799433686e012167ab3347d7f02efb5cd511b5d02cd7b6547453f6ecaab623ed23fac7c91b0a7333",
727
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/PortingOrder.php": "ad9a683aab02c8817796e62131fa9cad6f3490d3afe231b5718b3b4f0689a535543362a88333ab808c36e9c41bfc8b7b6178be7fbd5b12f38b6d806053726997",
728
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/PortingPhoneNumber.php": "ff2e1e98371b6a7b0cc5265d1ab82f053d97711a72633a7d3911a4211dacf75c08083d6629aa4fc028643c0dc929d3ab56132f6f21808b875a9ce679e56fe055",
729
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Portout.php": "71de0eb22350f649e5023b2c4a374b3d10a4beb0f8066d67482c62f68a39219d9cda4bd95d91e1df2fc215479f45b1ab79bfc0ccc2d39267d2f268356ae83ec8",
730
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/RegulatoryRequirement.php": "0658d49bc2c20a9a16ac72ea01b5306eda422d81747529c3373333facb5ce1940252387aa498d2957dec62f0eeaa8aac3979ffd84ca72308e660a1a0708796d4",
731
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/RequestTelemetry.php": "cefdb55dce61e5f276bd49f6b49e57c78085338537e56cce6fea5a81cd1d2235f1eaa78be326cbd513117be88a046177afb628659088b66ce423799995c53709",
732
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ShortCode.php": "4abc882d0dbc72becbff07212d17b8e1383b0efb43818a7eab983fd2a08c3f591a4f4ba2f185003fab0622a43329c969d2fcc80b23cb94410007a0879309ad49",
733
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/SimCard.php": "46289711eda27b37931b0d9f7e9624c114ef9c1e997ea88055dfdf6fe6dfaf7f9169b9a67cbfe48100dc4df2b73ba4d27328b0ca3ff0af3655789535ec3c0b26",
734
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/TelephonyCredential.php": "497a3dde2d7fcf8bf57b502c71daa5e166010daae45e30e1db7ebacb3a37028fc70c7cdcf39a356dd32f845664e8e9723a366fa69610c8f9bd31fa59b3300624",
735
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Telnyx.php": "f5ecf9589eaf7db991051de8482d582b36edc387b8a7ca48c80a419c1a99e1393d7f099aa4ad3e87adb4706ab62c8714dc843c9a8ce77d6fe6ea5ab929d9a882",
736
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/TelnyxObject.php": "0f45c91559ef686a3eb4ce3777ab7d43ba288b380ffd1031cc3c562138410d3582c251e2d986e8a84a2c189257ed4307500e3fa0d662a48a30b28a9622ae8ad2",
737
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/AutoPagingIterator.php": "d03ac3841bb553d847be9ea73ab9debd8c1f2c829b0d38ac4416a121ac535a5ece2ecd9943d89e720cb5abb1c907ca9b96df899a561c190ccd6843bde785114b",
738
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/CaseInsensitiveArray.php": "d5bcc37aeab4fcbbe0b9f4a9057a5654f6080ed899ae54f8ef18bfc907f244071a6693386dd306caceb6bf338883a13c7972574ac5d700aa00e22ec363932cd6",
739
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/DefaultLogger.php": "50a69f9f6ad628e489a05fdad0df811c926c957c301adb0b4b906dcce9733a0598f6c2eb126865c54a0100131dc4230a834b1e98275237ce8e90bff2e96cd0fb",
740
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/LoggerInterface.php": "8d2dc2c59af5e625eaeef0b85b09f78a42e533b62fee84717d67a4c706fbacd94674f439d3ac60984c0a3947b7d2f5a8ccfb64e071c41d063b8298f57578f88c",
741
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/ObjectTypes.php": "99ce4f7d4d4d9d43e24f3124a7c21b9540267aa160c780efe69d6559843a12948f3790b179db66282b0adda384309a793636d71aeb97d9aab0a62dccfbe2b51b",
742
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/RandomGenerator.php": "292c880420b28390e3d734c6343acd48f322db0c474f80430402916de1dcbf8e988b3d2753a7c18e763e632f474284b213ccc8e8fe4e52f00569e72728dcccb4",
743
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/RequestOptions.php": "00b6d4890b5a38f42f13ffdca556bbf1377c05c8a79ad2d6d0b69b7e27deb70252c15088458da4bbd56e7832cc6b2828e261241661dc344727e2bfb170465de2",
744
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/Set.php": "9cfa1c1bc6c012e8a7a797ba8a7893382eeeb234da73f93594a159f78b9858c984dec1e42da5a6cdb240f00d27d250e3fd6a7842d40c23513661201a148a6c5e",
745
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/Util.php": "4556fc8b785486adfb60ea8001296ad0ae7b13d785f92d545324b557fc4aad85a69ec19dbca27dd868050d64670e4e2be2e3a4f50e4aaac609b0089c0e9e2749",
746
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Verification.php": "b63d4f9d717ba204dcedd1c3315db3300567fe09563faed0e4b8f1415171e43e0068fb06ebb2f42c808602248f623f5773414a1612539a873070f461398be650",
747
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/VerifyProfile.php": "fbdf0818dbe1fdcd6bf13720f21ab6552a3ee7930c80a9adc44c3863ebb3df990b18adc8beee6770f4fca9bcda0d514a689d051c129d871eca48f2c0eccd7649",
748
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/VerifyVerification.php": "f2883946ac990666dfa62e07dad649ae0c9de75d5682857cd22419fda8926d45d504ce4fbf38896a1cbf25323a604a818d3b89f05baf58d91cef497c54d981e7",
749
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Webhook.php": "b451d90496fcad105eb4f61d5716b93878405315742c09d7c4be96c6b9c0427e35c03c1a664ab2f30f1288566b45117f87b069a3ce96d64111ef6a1ef289ac9e",
750
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/WebhookSignature.php": "ad990cd80d771718468e39aab1b06809a0efb9bb47f5ea4d42a649dbe481f5929fcbd502da6140f1438920e96ce2e4af82d9cfd810b0ddd0eaea391599685c0d",
751
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/phpunit.no_autoload.xml": "06ad2f4fe0a292902757629f5605509f32a0d1dca527550619c98a61519d83fc70f3c886b12f5e5734b1031186fd9c7fed6fba813cd816b0f07d36c2a6bf11e4",
752
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/phpunit.xml": "82ac037adc20f2aa76682878094e8bffbfe31782dc6a94e2987bac5546e3ffec90577d03715f4ce481cc977685eec9e4109a61b4b46bc19351c2cad555d7cadf",
753
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/TelnyxMock.php": "e8e93ca1114530cb7e9cad46eb20e32072934496d515a9391ce8093773450dd60f3288f9d3ba46533a0f650fe67b508d5e54bbfc6e1642443d1fc043b88eaaeb",
754
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/TestCase.php": "9945df738b56e344648cc00d3d4b94345c15d8749ce511b5095a87d5e52aed35d8e3c773276d9dde9d9fa04eada784a55e4876ebf70a198ba719c8e94c8c32d8",
755
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/AddressTest.php": "dd980e7890ad3dc1d12858f2d241a461689a34892bd780a8db034e620c23d01587996042c2c12d82333b2072bfcca6585afb06213694b7415b0b13d3084b83f5",
756
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiOperations\/AllTest.php": "6031bc6fa9e899f06af9465468fb9e15bf5a9a7c1051fb52fbd383ea879842e72ba4b5347d07566182c632b5f66d5f2d4bdf73c1368a3581c6010330bff91ec9",
757
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiOperations\/CreateTest.php": "c94c7e854a40716aec0e257c4d7fa279c3e941d64a37e167d4885dae5a0e22a513c8f3b018c436eff90ee045432c5e34b96aeb7d879380e9386c2bc177b94f39",
758
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiOperations\/DeleteTest.php": "02ea2d3adfd1d83770f10dc42cc2c12c28079ca80933fbe02219ea79fe7eb6958d2b1d76cb7a0bfee9e308c01efb1eff61901e22d192e15e89ae67f7edcabe5e",
759
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiOperations\/RequestTest.php": "f6e158958616f0637f827b94cce168e873e0d3be09e4ec27165f984af3d89c0be4d5d5cd3ed66df5b6237bf183003a0de1c652f599827fd01a2ee7ad47d5fd61",
760
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiOperations\/RetrieveTest.php": "b26b8f61eb3cb893ce4ff9517817295fe9b727dd570b1cf79ace36e16902e0ab9f460d6b65342afa28c59236b59ec0ba0809e1cee673f69ea26489fdbf5f4f42",
761
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiOperations\/UpdateTest.php": "6aafed3640a1173822ac9a26c002168eeef552f9b681fab9ec4f191df4f988a920d8c290b2f875c02596ef613273ed003e4b5a6bb6e0bc2760f54ffff445cdd1",
762
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiRequestorTest.php": "5a1234c4a1e4107aaf970bf87f0fdb1420979dd575a548e589b046cd7feea4dc914f25bf15474fe5bcd9773c94184b610d06b309d48639964a78e6137078cb5a",
763
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiResourceTest.php": "05562966c7ecea541b0ae95f67a11d9e2b86e45439b436b319e252d5998e0eb7a6c9b677e233572fc616caee856d9764b56feed80fd07cc1bec0d861490753b4",
764
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiResponseTest.php": "6f8d458b49e34df5c0634276659fd441e4140fb4dade92b384230e4e2b897e0da6d0e82c373b1eca98770dc3396ffc8b924672ce2141426706c624d00ffc7af9",
765
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/AvailablePhoneNumberTest.php": "354326429958fdd199df78d11bbc582a0988018b8f907d93808cbd53243f50332482c0603bf4ff12db2a8977ffe7e663ea9d6e8cb5f485aece0d46ae8942833d",
766
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/BalanceTest.php": "8f866f88a8a59754e2fce7d5fe2a0bf50399fd21711cef171873a45308ff96f929b23163495c273e96c9894b7ea39ee5149c45e764fa0de3b51807a329c674c6",
767
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/BillingGroupTest.php": "4333c81ee3ac767fa600095d95f324286d289c7e105ab251f635d9a942e75c418bde60f96c5954ae29dc152ee5fe7679bc5a8b67452f5fa1f59a411dc4854c69",
768
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/CallControlApplicationTest.php": "2bb4f83cdf82457840352c5beaaed8963aba1dcb59711e310d5aaed0d35429730796b412f1aa4e85d5be5a2288ebdd12fc2be9ad75549506d1a613d604d20749",
769
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/CallTest.php": "50f830a3a3c28953ec53c244d22381910307513ba18b7199d5e7bffc5747863e4da975fa972114b2f8a81d0c24afb2f72df8315010febd8d606d086d79d82165",
770
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/CollectionTest.php": "9e742f72d8a223e64bf1a25362f9a28356c0b55037811510692880a359ee5e39266d9e76aa0832de39530e26798806929fb9ab9795a04651ff316f609e2211f8",
771
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ConferenceTest.php": "4e8ab0baaf21da65e3942b0d98caff11b7a30c24bae10ba546b82f7031d7a85b9d88087f9ac8172e69546eb7635bc1cf8f39b509017b82116e0e13b557bc1f7e",
772
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ConnectionTest.php": "429f80316a563f45783c87db6b6d3dd1564190b5c6a259f254e91ad8b71b2aa5e6ed40b9cf1a98632b7c89b66441e07f0285d434c78dd9729c032c7a4891d4ee",
773
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/CredentialConnectionTest.php": "a1c37f36e418debb034faa2b7df5095eee175ac8801baed517089622123dcc4af642448aecde7aa8b19cf67629de087e4995ec816d791b5007923ee614590c1c",
774
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ErrorObjectTest.php": "97344e9d24c204ae429b856d0b32299de4380ec52e9cfbdef6090add25355d268e3dd3ec35ae7c5e0893f5bb204624930d1a856932243180bb71b40e5a1dc08f",
775
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/EventTest.php": "5152c008cb3de14a47586eeaf3ef778629b2beef87fe154a2c40c337c3f918d664c0ea44d8339e22846fedc696fe6b98f0bb0b557d3f88a3ac62990445a55ec5",
776
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Exception\/ApiErrorExceptionTest.php": "7d54379e1ab9f7d6bddb721ea1c284a8d023674e24e99d115f388ae367250089e10b5962e2bd091e3ebbedd0cc83bb4f821eb0a986ae11487e341569ef7f5c6e",
777
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Exception\/InvalidRequestExceptionTest.php": "a7da1818af1dfb3eaade1e1a122a8a3224e03a557396e11528af75b13cfae07764f82a282a3161d514358b4c55312193c73b5a8900fd70463fe0a66b448cc9f8",
778
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Exception\/SignatureVerificationExceptionTest.php": "1bb0fd1563a5c91b78b02e4f66f3cf0288986f546a0805830e0d4ad1ac449549930558caf86c06cdc578279323c43e4739747961065d5ddfa198dbbcd9540599",
779
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/FQDNConnectionTest.php": "0af10bfb2398682865c4ee72cfb34425fe73b0fd20c86b51c61c4cf72f8c4d39a4ecfa21e4ae2e07a67fdf956057549f0c8c4f77e27e65dc1b75dae8b9b849c9",
780
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/FQDNTest.php": "625370468fb338819fb823fbd38656799a8750f5093eebf75c02cfb592969a8635a442ec2febfe07705a5d6feea362b7644c25c67ae653a245bdf55fc178a2ed",
781
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/FaxApplicationTest.php": "64a60460c62983cb0afc2c76880628e16270f14b0b761a8d62766cbe4c0fb33dfc7bd93ae0cb62de25a8f2b3e1994826fcbfe300ea37353f398c4cc8ed7dd62b",
782
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/FaxTest.php": "a920c8ac18021bedbbc4972109afb0cd0afc16e5d86df2fffa2f8e0bdf837e5684124f926f01daf0bae439473022899498441a770ad8cc52479da3d012f1ea1f",
783
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/HttpClient\/CurlClientTest.php": "cff15215b95a804e4ee233df60671c5c1e9270f621025f6ea7cd5a0bdbb55175caa6c43c62e176300bde05c9ee90d84efda0dcdf0d0b5dda4dab2a47d1a669b7",
784
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/IPConnectionTest.php": "6e034e287616ac89e5059d337c682e3fde010130f4403dc76fe4efa12742c40dac114ddc1aaf7ce9e553c597d9ac27170419c5e33fb1439c31c6b585953ff1a4",
785
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/IPTest.php": "7ff33e91d1c7b8bdbef1ca1f5e373150a05f709e524d5a62b000b5c8b8d697ce42306ea8df917305d9ef2a4ea19f797ca28e2f8d0d5f9e3e31c4ebe5eab55ee9",
786
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/InboundChannelTest.php": "c430f6df3eb5add5bda2342e4b4a3acd77b33d74758516782ee0a045d75e7387aaccf36017fdaef18d71cf8865a28faaa0cf07a4f31c9876858719d84d479657",
787
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/MessageTest.php": "08ae5ad7b98362fa7c1478254f851078ef7e9a223c74f3fc57619d2b9c255259edefefc400e261cceafce7072fa7457b8c1cb4dc8dda29b51e432f6d274a8c3a",
788
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/MessagingHostedNumberOrderTest.php": "f8f8ac7271fb01b07815e2a92d7a0974e4320de63942eadc12df307c9458a7cbda7ddae505a731c491e4aa6bcdda7bec04786890df80dd9acd422593f2a02c0e",
789
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/MessagingPhoneNumberTest.php": "7827d12be3191d1329168c6b277899b81df17aa18b775be538b9b29ec9a90868969c05cf61d53715c42105b92cc37977270c1a7b78bee3d13214d8ece51172f2",
790
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/MessagingProfileTest.php": "0949c56ac67ee6f87854959635dbd003391e497325305692784905987d114b399e4c648252f314bc1147e385daf4e60198cbfd6aa940a6cb24992b8cb5abc24e",
791
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/MobileOperatorNetworkTest.php": "6cdaa23aa8cd0a0e9cc43b6f17c86d9c1f7793f7eb30b774f4a8ae9754488e59e0c180823c31d062abaa356578a8718c65f367588c61015e5e36f9f98e7a5cbe",
792
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/NumberLookupTest.php": "e03a73e589abd73cf52a637dd7d273dd2477533b66bcb75685552b77b47f7b58116c4637477da7f9ccb36a408909d91d3f0d3079396aca9bee996b862f358499",
793
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/NumberOrderDocumentTest.php": "06f3e8f8e8dcf5d8c96f25a6f1888d59e9433654ff060701bcc5cb9f54b07357bb3606ac17af3e3913033fb639358df85c6d5c55bff114407168333d7d49cbec",
794
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/NumberOrderTest.php": "176ca2e94df05262e8a43f14e112fb62108ce886bd90a690e8b907881c696e35bd223f08a4960fb58ebebd20cd42bd4217ffa14132e53ddac260926c6d7e8842",
795
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/NumberReservationTest.php": "11742f7449c279908848fd493817731f3f1343895e16d3426a7a7f9fc3d4cc27e275a858e16d7efb8e9c18d32de1ffffc92929e8e3ba277157ab7304c3023c86",
796
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/OtaUpdateTest.php": "14830affab4936804afdd723714f2dc76c520fc2fd6e4d36d7bb255ef566836eafb6b29c18c5adb8785eed39f4bab030e3cd1aab1ef0293d9660b38a10fd6a45",
797
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/OutboundVoiceProfileTest.php": "e49828087e2114fb11569db7387a0acb7cce8bdb0cd655b280b567445ba2dbf16f8b66a88369876e7a2530fb282bf5a04be702719adf4ace871c2b6df8fa5edf",
798
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/PhoneNumber\/MessagingTest.php": "b3c5665f4661624f58f02b814ab1edbee5ceb8c26643bd356b486f049dbb498a44da0af43daf200890c79acad16d51c169d7aa1a2ad4befe074b0ac539ebe3c0",
799
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/PhoneNumber\/VoiceTest.php": "af08b444289d0194437c414916a8ec9285b98413d78e74d1c832b9b45583f9037832a538751628b5dc86b5a13c40c63e9dd360b719501762e8e868fcaa6fb215",
800
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/PhoneNumberTest.php": "7a07f41165e45e5fab268b0e01523c2f67f0ad146965c401856582c4b4a3f63e53324585b1785b41cbeb637d8e61e26e2bfdb57feaf6c6c04cc33be8e4864df8",
801
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/PortingOrderTest.php": "48d2ed4bb9354c772eef6484a0c9a195487c39f26bee3d143ddf64ae7da15e42e5f280a3e26eaa280940230fdee52ea09b7e5320823d4baefa73eec4490537ad",
802
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/PortingPhoneNumberTest.php": "476748b7e467c4f5a648c394eb19dbf297aebc2c16357c946dbc4f363241639dd1001985a7bb21166d5bc77bff1e31edce6e379dbda10f04406377dafcae1bd5",
803
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/PortoutTest.php": "cd262d5eae7c9ef9ba8c76856ef2d4f604484e6bf8646e9ad5231e89f5d45c8176a8ac33a757c53e4be8e2c98e6bb750c6041aefe8b2a589ac1e70a2db4493b2",
804
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/RegulatoryRequirementTest.php": "daa2836606e7c3f34fa122045e982e42f5da86b46f367ddcd7fe9b12e2a3fe5d472d4f38403d4b63aa0c58473d3b5901b8dd49b93a56fa3e76a0bdcf88ebade0",
805
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/RequestTelemetryTest.php": "61190b3601f7c2c72f55e9b1634cfaf11ca53231cf4b5f854ab14859b97f5dc0f07f6c95b8f7c3516ed253e13768b7d4ed9c1d15d0772fd1850eb894f5821152",
806
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ShortCodeTest.php": "f2e867e0b75d8334ccce51f7bdce842b350e7028319e8d388e0512b5e119585952a54ea79762010f12de8ffcd1c440638ba5300ddbe59adfdcefc712d8e079ac",
807
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/SimCardTest.php": "7000edb2f9b739bdbd44fceeee2e4a16c708efb22c7e38483569d5416f3c107bcecdc759e2e6108553193ba99acc542f5bf3bc353ee1428593a81b80d89ad7c8",
808
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/TelephonyCredentialTest.php": "1f65bad536cd49b2df684db54533b9799856b32464b80700bed5008c9379c414f756d075ab8e231d83f5bd9c1729dba064a5ab5c7e515ca5c32e85698e2036ad",
809
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/TelnyxObjectTest.php": "6214f2c38865c7a183f6a3fd64bc79e7f04963bd726fc124a87b65412075fd236e00cb5f5ed514a3ca2847faec77f4e7a14c59e8906478543daea9c4ddecb7b7",
810
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/TelnyxTelemetryTest.php": "ced938d8d20bdcd0d465155e1bd3ffbaec8ba96a6392c42dbec27a1d10a04da17b90fd3b91322c94b54fcd5a974528e6f10d081ca9b1915a8c8166e0727ceb31",
811
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/TelnyxTest.php": "d88d70053ebb64905acccf7e3cf651ea40c9155130e351d56135c96ada96263311faeabc83d4cef1e72387302ea4a11edf338c3744093d9828e056351eefe11a",
812
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Util\/CaseInsensitiveArrayTest.php": "671262198a48a16dc2ddb7ecf1c7fd309241db9c74c11072d86cbd2f56403973e4bb17ca5bc6c489bddf46cc391098dd6b666b134fded9430c211c2a3193fc58",
813
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Util\/DefaultLoggerTest.php": "39942a071430588bf6c089f5d0c97596b3b46b5b7a2b45d900cc41670dcf4bcf0d34e37895e494f0c89242e52d11d8a62f419650407c26ed91b43ea18c816e9e",
814
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Util\/ObjectTypesTest.php": "2d697994485e6c8f9084f9155a5a5b753261bcd2afcc9dfc5760daa5d4196b7c5baee49b264142a705ca7dd6c5d2cde227db3c1f860173aee6769299db95cd83",
815
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Util\/RequestOptionsTest.php": "86d628c4b19e4b7d057cac471219603643b6405e83745535b6c5f743fe84d5cf918a273f9e8e22c5eded36cc20ce49453e90c0ae05a9ed437059ddc287ccb5f7",
816
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Util\/SetTest.php": "c91cbf6d983f16e033eec154e56705b1d942243371df25d5cec7cb375a359faf29fec0c87fa5f3e4d7aad512d7e757361cf409e60d643fff7fa8fef72d9ff172",
817
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Util\/UtilTest.php": "10f13d306d3ac2211b67e759a6e1fbbbdcbc1cb791db4531ac799a8f84be67b3ab43cc85498b786b0630510324bf5039ac7ed39e2252f607f7937e802f9b578d",
818
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/VerificationTest.php": "8ea7985bfc5075c0e5d3a8b0b703af578479e481d769a0e8659d4b0996314aae15de36cc7022e087c0625c5976255aae323f9ac141e9e4fef3939a23fda6d260",
819
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/VerifyProfileTest.php": "c0986530c0ddd14e2227cbf9ceb0614aeec3c3b2dc37b5bce0de0d174ebd047f61fa28ba0787b4de1fd3efb5d77d5924e36ebf6fbba09711d0237f520365e8fc",
820
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/WebhookTest.php": "7e06c31d714348c6c9a6cf14c4a21a1f593287fe61e41630a6d766f15cf2595dccb1cd92981578cc205f6c89839a07c7c845efca2b44521d0aa36c0be9e444f7",
821
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/bootstrap.no_autoload.php": "cb002f7c8f77834b6414db6535f083bcd227ee6085363fa3cb0f66b55226680a45c8562fd8458249868465957b2aeae134b3379f8ee2ed22c96425475e9c0af1",
822
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/bootstrap.php": "50e143ed68aceb91d3e119d5a31521e76bfe9876bd780c90ac83afb7ca4f32be48ff81c33c134109eafe1d22f35e0957a9a834966b8853df99dc1df04795adf4",
823
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/data\/test.png": "6ad523f5b65487369d305613366b9f68dcdeee225291766e3b25faf45439ca069f614030c08ca54c714fdbf7a944fac489b1515a8bf9e0d3191e1bcbbfe6a9df",
824
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/openapi\/README.md": "0c54fffd5b7a5f393358864ff9e3bd3793075d6060cc1336603b2455d60f16d160ffd47b52bca6834acf0d9713855b386f69580099a3dcc131e8d5d617975ff2",
825
-        "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/update_certs.php": "6a7fd896832dbc4c039fc907c74f25fad01f26882809d1ed0bef2870ba7db5d5930311208e2864190209862a077e4397dabcc1760ef2ec7e29127868016fc0d8",
826
-        "providers\/Twilio\/readme.txt": "879f75eaefe03b56788a884a5cb031533b33a94acd816b9e3e51a9cf0db826de700062955fc45d9561bd4c69f71178e2976f702e801fc06c3c076494c55c8bcb",
827
-        "templates\/content\/index.php": "63d6e27dee39188b80cef2b095db84791e02af0526b80d41bd37845386714f9f82cc9dafaf97fa355b927ab9b74527199ec70604480e09feb10a2b076e313b5a",
828
-        "templates\/index.php": "72813b0a70aa144a8020b69eab2d732ddcc7873e798637193180ad590a91a09c32f9370d61589fdbdad364848168209cc74762fa71731f791662faa100e2b59a",
829
-        "templates\/navigation\/index.php": "cf128359e3ccdff573ebad6c1bf18f4761f39ecd808f7b51e3f76e86bdd8384b45c612d60ea3fbda89633d8d4a080c54490e2d8297af25d187ead447591ccaf3",
830
-        "templates\/settings.php": "46d29d381c570f885126fddc4ecdbb72404b7a4b5d8536bc518f121db8b9c4990bfc22d1390e1c67e3fd12c9ccd60408388a40885834b719be0e78301f076989"
831
-    },
832
-    "signature": "CPuGkKBaqXIsxj+jZM2qpNSafix3bmlQcfw\/TWeZeG\/aGK+uI9gq60n6xL8FdQl321ji8T1ZjGXgreDTnjbfy4NsJUqLQfEzAcIlkbyxOtx9kUUUCFaLXD6Dx9O45CeyyZ8UGZSWM3t2V6xHnfIL\/JgIY8+IqXUhwyHjHOsqT9BXnp2T8wgqKw6EAjHqGV+z8M6JbtKcJRVC0nae9nc9GqJntMLE8\/y9i3pKg0p8TYAJ3MlBPVNbyxFmrYD4375kXs1oWj0guKsBy\/nM5trYSD8FDjXFhDqdgd\/+Uc5X05Lh\/Xh\/lw19xuwdH23YVz52hWPz2MYKloCqqEF4u3C0Wel4+zZomxN57cIsZdzerBhDoiiOZ1Rs2fAcyRnPiiEmPcdujFYhnsD8Y51v\/+85Vrqx0WG9S31XAfP12Pzs5hXIOsvsxjB1vCMrHyH5K2HZKTf6alW0qOPbcY9B1mAFzepMG61hAQ6M9+AfS9JhRxSa1Hkjm3j5L4qUYjDb9j3Kj\/FowMqDrC4a3qFw7lc3UjOyWxEDyxXTPVy1Mwr2fJsCt9ndLgsVnqqLPVUTgeZXnM75FyHJWJtSsqRIcxm8VXVCqZddhkmAhZA9iByjUMINbHpm0wuH6swnpYt1gD2+Idt8LJbwvEO9yff7PloR11kYpl3FgeJ\/A9emANCrvbI=",
833
-    "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-----"
834
-}
835 0
\ No newline at end of file
836 1
deleted file mode 100644
... ...
@@ -1,1815 +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
-.providerSettings {
34
-   background-color: #F7F7F7;
35
-   padding: 14px;
36
-}
37
-
38
-.providerName {
39
-   font-size: 18px;
40
-   font-weight: bold;
41
-   margin-bottom: 20px;
42
-}
43
-
44
-#smsrelentless_vbar {
45
-   padding: 18px;
46
-   font-family: Calibri, Frutiger, "Myriad Pro", Myriad, sans-serif;
47
-   color: #6d6c6c;
48
-}
49
-
50
-.smsr_textbox {
51
-   display: block;
52
-   box-sizing: content-box;
53
-   width: 70%;
54
-   font-size: 14px !important;
55
-}
56
-
57
-.smsr_textboxspec {
58
-   box-sizing: content-box;
59
-   width: 70%;
60
-   font-size: 14px !important;
61
-}
62
-
63
-#copyToClipboardtel, #copyToClipboardnex, #copyToClipboardtwil, #copyToClipboardflow {
64
-   display: inline-block;
65
-   width: 18px;
66
-   height: 18px;
67
-   margin: 0px 0px -4px 5px;
68
-   cursor: pointer;
69
-}
70
-
71
-#copyToClipboardtel:hover, #copyToClipboardnex:hover, #copyToClipboardtwil:hover, #copyToClipboardflow:hover {
72
-   background-color: #E0E0E0;
73
-}
74
-
75
-#telapi_url, #nexapi_url, #twilapi_url, #twilapi_url_rec, #flowapi_url, #flowapi_url_rec {
76
-   display: inline-block;
77
-   box-sizing: content-box;
78
-   width: 70%;
79
-   font-size: 14px !important;
80
-}
81
-
82
-#generate_tel_rcpt, #generate_tel_delrcpt, #generate_nex_rcpt, #generate_nex_delrcpt, #generate_twil_rcpt, #generate_twil_delrcpt, #generate_flow_rcpt, #generate_flow_delrcpt {
83
-   display: block;
84
-   white-space: normal;
85
-   word-wrap: break-word;
86
-}
87
-
88
-#settings-dscr {
89
-   padding-top: 3px;
90
-}
91
-
92
-.setlabeltext {
93
-  font-size: 15px;
94
-}
95
-
96
-#smsr_save_msg {
97
-   display: inline;
98
-   color: #181918;
99
-   background-color: #a5e5b3;
100
-   font-weight: bold;
101
-}
102
-
103
-#get_notify {
104
-   display: block;
105
-   margin-bottom: 18px;
106
-}
107
-
108
-#get_notify:hover {
109
-   cursor: pointer;
110
-}
111
-
112
-#includesmsinemail {
113
-   display: block;
114
-   margin-bottom: 14px;
115
-}
116
-
117
-#includesmsinemail:hover {
118
-   cursor: pointer;
119
-}
120
-
121
-#currentbaldiv, #smsnumbersdiv {
122
-   display: block;
123
-   position: relative;
124
-   font-size: 17px;
125
-   font-weight: bold;
126
-   height: 30px;
127
-   margin: 0px 0px 14px 0px;
128
-   background-color: #4CA3D9;
129
-   border-radius: 20px;
130
-}
131
-
132
-.providername {
133
-  color: #FFFFFF;
134
-}
135
-
136
-.providername:hover {
137
-  color: #2c0cfc;
138
-}
139
-
140
-#currentbalance {
141
-  display: inline-block;
142
-  position: relative;
143
-  margin: 1px 0px 0px 100px;
144
-  color: #262626;
145
-  font-weight: 600;
146
-}
147
-
148
-#smsprovider {
149
-  display: inline;
150
-  position: absolute;
151
-  width: 90px;
152
-  height: 22px;
153
-  padding: 0px 0px 1px 0px;
154
-  -moz-box-sizing: border-box;
155
-  -webkit-box-sizing: border-box;
156
-  box-sizing: border-box;
157
-  background: #fcfcfc;
158
-  font-size: 15px;
159
-  font-weight: 500;
160
-  color: #565656;
161
-  text-align: center;
162
-  border-radius: 20px;
163
-}
164
-
165
-#currentsmsnmbrs {
166
-  display: inline-block;
167
-  position: absolute;
168
-  height: 22px;
169
-  width: 54%;
170
-  padding: 0.4px 0px 0px 4px;
171
-  margin: 2px 0px 0px 4px;
172
-  font-size: 14px;
173
-  font-weight: 500;
174
-  color: #565656;
175
-  -moz-box-sizing: border-box;
176
-  -webkit-box-sizing: border-box;
177
-  box-sizing: border-box;
178
-  background: #fcfcfc;
179
-  border-radius: 20px;
180
-}
181
-
182
-.cllridcls {
183
-  position: relative;
184
-  display: inline;
185
-  font-size: 17px;
186
-  color: #000000;
187
-}
188
-
189
-.tooltipbalanceid  {
190
-  position: relative;
191
-  display: inline-block;
192
-  float: right;
193
-  font-size: 15px;
194
-  color: #000000;
195
-  z-index: 9;
196
-}
197
-
198
-.tooltipsetid  {
199
-  position: relative;
200
-  display: inline-block;
201
-  float: right;
202
-  font-size: 15px;
203
-  color: #000000;
204
-  z-index: 8;
205
-}
206
-
207
-.tooltipbalanceid #infobalance {
208
-  display: block;
209
-  position: relative;
210
-  margin: 4px 14px 0px 0px;
211
-  color: #000000;
212
-  font-size: 21px;
213
-  font-weight: bold;
214
-  font-family: Times New Roman;
215
-  font-style: italic;
216
-  z-index: 6;
217
-}
218
-
219
-.tooltipbalanceid .balancetooltip {
220
-  display: block;
221
-  position: absolute;
222
-  visibility: hidden;
223
-  width: 264px;
224
-  background-color: #f4f4f4;
225
-  font-size: 15px;
226
-  font-weight: bold;
227
-  color: #595959;
228
-  text-align: left;
229
-  border-radius: 4px;
230
-  padding: 5px 5px 5px 8px;
231
-  margin: -4px 0px 0px -244px;
232
-  -webkit-box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
233
-  -moz-box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
234
-  box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
235
-  z-index: 6;
236
-}
237
-
238
-.tooltipbalanceid:hover .balancetooltip {
239
-   visibility: visible;
240
-}
241
-
242
-#infotipid {
243
-   display: block;
244
-   position: relative;
245
-   margin: 4px 10px 0px 0px;
246
-   color: #000000;
247
-   font-size: 21px;
248
-   font-weight: bold;
249
-   font-family: Times New Roman;
250
-   font-style: italic;
251
-   z-index: 5;
252
-}
253
-
254
-#setcalleridtp {
255
-   display: block;
256
-   position: absolute;
257
-   width: 274px;
258
-   overflow-y: scroll;
259
-   visibility: hidden;
260
-   border-radius: 3px;
261
-   margin: -6px 0px 0px -224px;
262
-   scrollbar-width: auto;
263
-   scrollbar-color: #a2a2a2 #ececec;
264
-   -webkit-box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
265
-   -moz-box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
266
-   box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
267
-   z-index: 10;
268
-}
269
-
270
-.calleridtooltip {
271
-   display: block;
272
-   position: relative;
273
-   width: auto;
274
-   height: auto;
275
-   background-color: #f4f4f4;
276
-   font-size: 15px;
277
-   font-weight: bold;
278
-   color: #595959;
279
-   text-align: left;
280
-   padding: 5px 12px 5px 10px;
281
-   z-index: 10;
282
-}
283
-
284
-.tooltipsetid:hover #setcalleridtp {
285
-   visibility: visible;
286
-}
287
-
288
-.pflabels {
289
-   font-size: 15px;
290
-   font-weight: bold;
291
-}
292
-
293
-.srheader {
294
-   display: block;
295
-   position: relative;
296
-   margin: 0px 0px 7px 0px;
297
-   font-size: 17px;
298
-   font-weight: bold;
299
-}
300
-
301
-.sendtomultrcvrs {
302
-   display: block;
303
-   position: relative;
304
-   margin: 0px 0px 7px 0px;
305
-   font-size: 17px;
306
-}
307
-
308
-.smsnbformat {
309
-   display: block;
310
-   position: relative;
311
-   margin: 0px;
312
-   font-size: 17px;
313
-   font-weight: bold;
314
-
315
-}
316
-
317
-.smsrelentless_box {
318
-   width: 400px;
319
-   display: block;
320
-}
321
-.indtext {
322
-   display: inline-block;
323
-   padding-left: 10px;
324
-}
325
-
326
-#settings-dscr {
327
-   padding-top: 3px;
328
-}
329
-
330
-#sms_upload_msg {
331
-   display: block;
332
-   color: #181918;
333
-   background-color: #a5e5b3;
334
-   font-weight: bold;
335
-}
336
-
337
-#sms_submit_msg {
338
-   display: none;
339
-   margin: 14px 0px 8px 0px;
340
-   padding: 3px 20px 0px 20px;
341
-   width: 100%;
342
-   color: #181918;
343
-   background-color: #a5e5b3;
344
-   font-size: 15px;
345
-   font-weight: bold;
346
-   text-align: center;
347
-   border-radius: 14px;
348
-}
349
-
350
-#pickedfilename {
351
-   font-size: 13px;
352
-}
353
-
354
-#smstodiv {
355
-   display: block;
356
-   position: relative;
357
-   height: 32px;
358
-}
359
-
360
-#smsto {
361
-   display: block;
362
-   width: 99%;
363
-   max-height: 32px;
364
-   padding: 0px 15px 0px 15px;
365
-   color: #565656;
366
-   font-size: 16px;
367
-   font-weight: bold;
368
-   border-radius: 20px;
369
-}
370
-
371
-#sendtomultiple {
372
-   display: inline-block;
373
-   position: relative;
374
-   margin: 10px 0px 12px 0px;
375
-   font-size: 16px;
376
-   font-weight: bold;
377
-}
378
-
379
-#entermessage {
380
-   display: block;
381
-   position: relative;
382
-   margin: 10px 0px 0px 0px;
383
-   font-size: 16px;
384
-   font-weight: bold;
385
-}
386
-
387
-#uploadfileforsms {
388
-   margin-left: 7px;
389
-   background-color: #ffffff;
390
-   border-radius: 3px !important;
391
-}
392
-
393
-.entertime {
394
-   display: inline;
395
-   font-size: 16px;
396
-   font-weight: bold;
397
-   margin-right: 7px;
398
-}
399
-
400
-#sendmediafl {
401
-   display: block;
402
-   position: relative;
403
-   margin: 0px 0px 20px 0px;
404
-   font-size: 16px;
405
-   font-weight: bold;
406
-}
407
-
408
-#tomultchckbx {
409
-   display: inline-block;
410
-   position: absolute;
411
-   margin: 3px 0px 0px 10px;
412
-}
413
-
414
-#mediafilechckbx {
415
-   display: inline-block;
416
-   position: absolute;
417
-   margin: -7px 0px 0px 10px;
418
-}
419
-
420
-#deleteoldchckbox {
421
-   display: inline-block;
422
-   position: absolute;
423
-   margin: 3.5px 0px 0px 10px;
424
-}
425
-
426
-#tomultchckbx:hover, #mediafilechckbx:hover, #deleteoldchckbox:hover {
427
-   cursor: pointer;
428
-}
429
-
430
-.maxmessagelength {
431
-   display: none;
432
-   position: relative;
433
-   margin: 2px 7px 4px 0px;
434
-   font-size: 15px;
435
-   color: #000000;
436
-   z-index: 6;
437
-}
438
-
439
-#maxlengthinfo {
440
-   display: block;
441
-   position: absolute;
442
-   width: 274px;
443
-   height: 200px;
444
-   overflow-y: scroll;
445
-   visibility: hidden;
446
-   border-radius: 3px;
447
-   margin: -11px 0px 0px -6px;
448
-   scrollbar-width: auto;
449
-   scrollbar-color: #a2a2a2 #ececec;
450
-   -webkit-box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
451
-   -moz-box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
452
-   box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
453
-   z-index: 10;
454
-}
455
-
456
-.maxlengthtooltip {
457
-   display: block;
458
-   position: relative;
459
-   width: auto;
460
-   height: auto;
461
-   background-color: #f4f4f4;
462
-   font-size: 15px;
463
-   font-weight: bold;
464
-   color: #595959;
465
-   text-align: left;
466
-   padding: 5px 12px 5px 10px;
467
-   z-index: 10;
468
-}
469
-
470
-.maxmessagelength:hover #maxlengthinfo {
471
-   visibility: visible;
472
-}
473
-
474
-.up-bttn-wrapper {
475
-  display: block;
476
-  position: relative;
477
-  overflow: hidden;
478
-  padding-top: 20px;
479
-  padding-bottom: 30px;
480
-}
481
-
482
-#smstext {
483
-  display: inline-block;
484
-  color: #000000;
485
-  width: 100%;
486
-  height: 130px;
487
-  text-align: left;
488
-  font-size: 16px;
489
-  border-radius: 6px;
490
-  resize: vertical;
491
-  white-space: pre-wrap;
492
-}
493
-
494
-#char_count {
495
-  display: none;
496
-  font-size: 15px;
497
-  font-weight: bold;
498
-}
499
-
500
-#mtextSize {
501
-  display: none;
502
-  margin-left: 10px;
503
-  font-size: 15px;
504
-  font-weight: bold;
505
-  color: #4CA3D9;
506
-}
507
-
508
-#submitsms {
509
-   display: block;
510
-   position: relative;
511
-   margin-top: 14px;
512
-   color: white;
513
-   font-weight: bold;
514
-   font-size: 15px;
515
-   background-color: #4CA3D9;
516
-   border-radius: 20px;
517
-}
518
-
519
-#submitsms:hover {
520
-   border-color: #5CAECC;
521
-}
522
-
523
-#submitsms:active {
524
-   background: #4B96B1;
525
-   border-color: #4B96B1;
526
-}
527
-
528
-#multiplerecivers {
529
-   display: none;
530
-   background: #e8f6ff;
531
-   border-radius: 6px;
532
-   padding: 5px;
533
-   margin: 0px 0px 20px 0px;
534
-}
535
-
536
-#multsetrows {
537
-  display: block;
538
-  padding: 5px;
539
-}
540
-
541
-#multsmsinterval {
542
-  display: block;
543
-  width: 100px;
544
-  height: 25px;
545
-  font-size: 14px;
546
-  font-weight: bold;
547
-  padding: 0px 0px 0px 10px;
548
-  border-radius: 20px;
549
-}
550
-
551
-#app {
552
-  position: relative;
553
-  display: flex;
554
-  min-height: 100%;
555
-  min-width: 100%;
556
-}
557
-
558
-#app-content {
559
-   position: relative;
560
-   z-index: 1000;
561
-   flex-basis: 100vw;
562
-   min-width: 0;
563
-   min-height: 100%;
564
-   margin: 0 !important;
565
-   overflow-y: scroll;
566
-}
567
-
568
-#viewerContainer {
569
-   display: block;
570
-   position: relative;
571
-   width: 100%;
572
-   height: 100%;
573
-}
574
-
575
-.pdfViewer #viewer {
576
-   display: block;
577
-   position: relative;
578
-   min-width: 100%;
579
-   min-height: 100%;
580
-}
581
-
582
-#smsdocpreview {
583
-   display: inline-block;
584
-   position: relative;
585
-   width: 100%;
586
-   height: 100%;
587
-   margin-top: -50px;
588
-}
589
-
590
-#outerContainer {
591
-   display: block;
592
-   position: relative;
593
-   width: 100%;
594
-   height: 100%;
595
-}
596
-
597
-#mainContainer {
598
-   display: block;
599
-   position: relative;
600
-   width: 100%;
601
-   height: 100%;
602
-}
603
-
604
-.texttooltip {
605
-  font-family: Times New Roman, Calibri, sans-serif;
606
-  font-style: italic;
607
-  color: #000000;
608
-  font-size: 21px;
609
-  font-weight: bold;
610
-  margin: 0px 0px 4px 4px;
611
-}
612
-
613
-.fortooltip {
614
-   position: relative;
615
-   display: inline-block;
616
-   margin: 0px;
617
-   font-size: 15px;
618
-   color: #000000;
619
-   z-index: 7;
620
-}
621
-
622
-.fortooltipsec {
623
-   position: relative;
624
-   display: inline-block;
625
-   font-size: 15px;
626
-   color: #000000;
627
-   padding: 2px 0px 4px 2px;
628
-   z-index: 3;
629
-}
630
-
631
-.fortooltiptert {
632
-   position: relative;
633
-   display: inline-block;
634
-   font-size: 15px;
635
-   color: #000000;
636
-   padding: 2px 0px 4px 2px;
637
-   z-index: 0;
638
-}
639
-
640
-.fortooltipfourth {
641
-   position: relative;
642
-   display: inline-block;
643
-   font-size: 15px;
644
-   color: #000000;
645
-   padding: 2px 0px 4px 2px;
646
-   z-index: 4;
647
-}
648
-
649
-#tonmbrformat {
650
-   display: block;
651
-   position: absolute;
652
-   width: 274px;
653
-   overflow-y: scroll;
654
-   visibility: hidden;
655
-   border-radius: 3px;
656
-   margin: -11px 0px 0px -6px;
657
-   scrollbar-width: auto;
658
-   scrollbar-color: #a2a2a2 #ececec;
659
-   -webkit-box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
660
-   -moz-box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
661
-   box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
662
-   z-index: 10;
663
-}
664
-
665
-.fortooltiptext {
666
-   display: block;
667
-   position: relative;
668
-   width: auto;
669
-   height: auto;
670
-   background-color: #f4f4f4;
671
-   font-size: 15px;
672
-   font-weight: bold;
673
-   color: #595959;
674
-   text-align: left;
675
-   padding: 5px 12px 5px 10px;
676
-   z-index: 10;
677
-}
678
-
679
-.fortooltip:hover #tonmbrformat {
680
-   visibility: visible;
681
-}
682
-
683
-#uploadfileinfo {
684
-   display: block;
685
-   position: absolute;
686
-   width: 274px;
687
-   overflow-y: scroll;
688
-   visibility: hidden;
689
-   border-radius: 3px;
690
-   margin: -11px 0px 0px -6px;
691
-   scrollbar-width: auto;
692
-   scrollbar-color: #a2a2a2 #ececec;
693
-   -webkit-box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
694
-   -moz-box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
695
-   box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
696
-   z-index: 10;
697
-}
698
-
699
-.fortooltiptextsec {
700
-   display: block;
701
-   position: relative;
702
-   width: auto;
703
-   height: auto;
704
-   background-color: #f4f4f4;
705
-   font-size: 15px;
706
-   font-weight: bold;
707
-   color: #595959;
708
-   text-align: left;
709
-   padding: 5px 12px 5px 10px;
710
-   z-index: 10;
711
-}
712
-
713
-.fortooltipsec:hover #uploadfileinfo {
714
-   visibility: visible;
715
-}
716
-
717
-#deleteoldinfo {
718
-   display: block;
719
-   position: absolute;
720
-   width: 274px;
721
-   height: 200px;
722
-   overflow-y: scroll;
723
-   visibility: hidden;
724
-   border-radius: 3px;
725
-   margin: -11px 0px 0px -6px;
726
-   scrollbar-width: auto;
727
-   scrollbar-color: #a2a2a2 #ececec;
728
-   -webkit-box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
729
-   -moz-box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
730
-   box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
731
-   z-index: 10;
732
-}
733
-
734
-.fortooltiptexttert {
735
-   display: block;
736
-   position: relative;
737
-   width: auto;
738
-   height: auto;
739
-   background-color: #f4f4f4;
740
-   font-size: 15px;
741
-   font-weight: bold;
742
-   color: #595959;
743
-   text-align: left;
744
-   padding: 5px 12px 5px 10px;
745
-   z-index: 10;
746
-}
747
-
748
-.fortooltiptert:hover #deleteoldinfo {
749
-   visibility: visible;
750
-}
751
-
752
-#uploadmmfileinfo {
753
-   display: block;
754
-   position: absolute;
755
-   width: 274px;
756
-   height: 350px;
757
-   overflow-y: scroll;
758
-   visibility: hidden;
759
-   border-radius: 3px;
760
-   margin: -11px 0px 0px -16px;
761
-   scrollbar-width: auto;
762
-   scrollbar-color: #a2a2a2 #ececec;
763
-   -webkit-box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
764
-   -moz-box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
765
-   box-shadow: 7px 9px 8px 0px rgba(212,212,212,1);
766
-   z-index: 10;
767
-}
768
-
769
-#tooltiptextfourth {
770
-   display: block;
771
-   position: relative;
772
-   width: auto;
773
-   height: auto;
774
-   background-color: #f4f4f4;
775
-   font-size: 15px;
776
-   font-weight: bold;
777
-   color: #595959;
778
-   text-align: left;
779
-   padding: 5px 12px 5px 10px;
780
-   z-index: 10;
781
-}
782
-
783
-.fortooltipfourth:hover #uploadmmfileinfo {
784
-   visibility: visible;
785
-}
786
-
787
-.fileupload {
788
-   display: none;
789
-}
790
-
791
-.uploadflbt {
792
-   width: 411px;
793
-}
794
-
795
-#infotipmms {
796
-   display: block;
797
-   position: relative;
798
-   margin: 0px;
799
-   color: #000000;
800
-   font-size: 21px;
801
-   font-weight: bold;
802
-   font-family: Times New Roman;
803
-   font-style: italic;
804
-   z-index: 5;
805
-}
806
-
807
-#mmsfoldersview {
808
-   display: none;
809
-   position: relative;
810
-   width: 100%;
811
-   height: 100%;
812
-   margin-top: -50px;
813
-   background-color: #f4f9ff;
814
-}
815
-
816
-#upmediafiles {
817
-   display: none;
818
-   background: #e8f6ff;
819
-   border-radius: 6px;
820
-   padding: 10px;
821
-   margin: 0px 0px 20px 0px;
822
-}
823
-
824
-.uploadflbt .icon-upload {
825
-   display: inline;
826
-}
827
-
828
-.pfprompt {
829
-   font-size: 16px;
830
-   font-weight: bold;
831
-}
832
-
833
-.fileuploadstl, .filesfromnc {
834
-  display: block;
835
-  font-size: 17px;
836
-  font-weight: bold;
837
-  color: #000000;
838
-}
839
-
840
-#uploadfileformms {
841
-   margin-left: 21px;
842
-   background-color: #ffffff;
843
-   border-radius: 3px !important;
844
-}
845
-
846
-#filestotsize {
847
-  display: none;
848
-  position: relative;
849
-  height: auto;
850
-  padding: 0px 0px 8px 0px;
851
-  font-size: 14.5px;
852
-  font-weight: bold;
853
-  color: #189558;
854
-}
855
-
856
-#filessizetext {
857
-  display: inline;
858
-  position: relative;
859
-  padding-left: 10px;
860
-}
861
-
862
-#fileuploadednm .indivflcls {
863
-  display: inline-block;
864
-  position: relative;
865
-  height:auto;
866
-  max-width: 90%;
867
-  overflow: visible;
868
-  white-space: normal;
869
-  word-break: break-all;
870
-  text-overflow: ellipsis;
871
-  font-size: 17px;
872
-  color: #0e6ba0;
873
-}
874
-
875
-#fileuploadednm .indivflcls:hover {
876
-  cursor: pointer;
877
-  text-decoration: underline;
878
-}
879
-
880
-#fileuploadednm .indupfldl {
881
-  position: relative;
882
-  display: inline-block;
883
-  float: right;
884
-  cursor: pointer;
885
-  width: 20px;
886
-  color: #0e6ba0;
887
-  text-align: center;
888
-  font-size: 17px;
889
-}
890
-
891
-#fileuploadednm .indupfldl:hover {
892
-  background-color: #e8f6ff;
893
-  cursor: pointer;
894
-}
895
-
896
-#filespickednc .indivflpckd {
897
-  display: inline-block;
898
-  position: relative;
899
-  height:auto;
900
-  max-width: 90%;
901
-  overflow: visible;
902
-  white-space: normal;
903
-  word-break: break-all;
904
-  text-overflow: ellipsis;
905
-  color: #0e6ba0;
906
-}
907
-
908
-.indivflpckd:hover {
909
-  cursor: pointer;
910
-  text-decoration: underline;
911
-}
912
-
913
-.indpckfldl {
914
-  position: relative;
915
-  display: inline-block;
916
-  float: right;
917
-  cursor: pointer;
918
-  width: 20px;
919
-  color: #0e6ba0;
920
-  text-align: center;
921
-}
922
-
923
-#filespickednc .indpckfldl:hover {
924
-  background-color: #e8f6ff;
925
-  cursor: pointer;
926
-}
927
-
928
-#pf_upload_msg, #pf_choose_msg {
929
-  display: block;
930
-  color: #181918;
931
-  background-color: #a5e5b3;
932
-  font-weight: bold;
933
-  text-align: center;
934
-  border-radius: 3px;
935
-}
936
-
937
-#choosefilen {
938
-  display: inline;
939
-  position: relative;
940
-  margin: 0px 0px 20px 16px;
941
-  padding-top: 15px;
942
-  background-image: url('../img/nextcloud_logo.svg');
943
-  background-repeat: no-repeat;
944
-  background-size: 110% 125%;
945
-  background-position: center center;
946
-  min-width: 66px;
947
-  min-height: 30px;
948
-  cursor:pointer;
949
-}
950
-
951
-#choosefilen:active {
952
-  background-image: url('../img/nextcloud_logo_bright.svg');
953
-  background-repeat: no-repeat;
954
-  background-size: 110% 125%;
955
-  background-position: center center;
956
-  min-width: 66px;
957
-  min-height: 30px;
958
-}
959
-
960
-#pickFromNext, #uploadFile {
961
-  display: inline-block;
962
-  position: relative;
963
-  font-size: 16px;
964
-  font-weight: bold;
965
-  color: #6d6c6c;
966
-}
967
-
968
-#filespickednc .indivflpckd {
969
-  display: inline-block;
970
-  position: relative;
971
-  height:auto;
972
-  max-width: 90%;
973
-  overflow: visible;
974
-  white-space: normal;
975
-  word-break: break-all;
976
-  text-overflow: ellipsis;
977
-  color: #0e6ba0;
978
-}
979
-
980
-#filespickednc .indpckfldl:hover {
981
-  background-color: #e8f6ff;
982
-  cursor: pointer;
983
-}
984
-
985
-.uploadflbt {
986
-  width: 411px;
987
-}
988
-
989
-.uploadflbt .icon-upload {
990
-  display: inline;
991
-}
992
-
993
-.uploadfiledv {
994
-  display: inline-block;
995
-  position: relative;
996
-  margin: 16px 0px 22px 0px;
997
-}
998
-
999
-#mmsfileuploadednm .indivflcls {
1000
-  display: inline-block;
1001
-  position: relative;
1002
-  height:auto;
1003
-  max-width: 90%;
1004
-  overflow: visible;
1005
-  white-space: normal;
1006
-  word-break: break-all;
1007
-  text-overflow: ellipsis;
1008
-  font-size: 17px;
1009
-  color: #0e6ba0;
1010
-}
1011
-
1012
-#mmsfileuploadednm .indivflcls:hover {
1013
-  cursor: pointer;
1014
-  text-decoration: underline;
1015
-}
1016
-
1017
-#mmsfileuploadednm .indupfldl {
1018
-  position: relative;
1019
-  display: inline-block;
1020
-  float: right;
1021
-  cursor: pointer;
1022
-  width: 20px;
1023
-  color: #0e6ba0;
1024
-  text-align: center;
1025
-  font-size: 17px;
1026
-}
1027
-
1028
-#mmsfileuploadednm .indupfldl:hover {
1029
-  background-color: #e8f6ff;
1030
-  cursor: pointer;
1031
-}
1032
-
1033
-#filessizetext {
1034
-  display: inline;
1035
-  position: relative;
1036
-  padding-left: 10px;
1037
-}
1038
-
1039
-.srheaderch {
1040
-  display: block;
1041
-  position: relative;
1042
-  margin: 0px 0px 15px 0px;
1043
-  font-size: 16px;
1044
-  font-weight: bold;
1045
-}
1046
-
1047
-.indgenflclsmms, .indgenpckfls {
1048
-  display: block;
1049
-  margin: 10px 6px 0px 6px;
1050
-}
1051
-
1052
-#pickfilesNext {
1053
-  display: block;
1054
-  margin: 20px 0px 0px 0px;
1055
-}
1056
-
1057
-#dirbuttons {
1058
-  margin-top: 26px;
1059
-}
1060
-
1061
-button, input, textarea, div[contenteditable="true"], div[contenteditable="false"] {
1062
-  min-height: 9px;
1063
-}
1064
-
1065
-select {
1066
-  width: 130px;
1067
-  min-height: 25px;
1068
-  box-sizing: border-box;
1069
-  padding-right: 0px !important;
1070
-}
1071
-
1072
-#choosefilen {
1073
-  display: inline;
1074
-  position: relative;
1075
-  margin: 4px 0px 20px 16px;
1076
-  background-image: url('../img/nextcloud_logo.svg');
1077
-  background-repeat: no-repeat;
1078
-  background-size: 110% 125%;
1079
-  background-position: center center;
1080
-  min-width: 66px;
1081
-  min-height: 30px;
1082
-  cursor:pointer;
1083
-}
1084
-
1085
-#choosefilen:active {
1086
-  background-image: url('../img/nextcloud_logo_bright.svg');
1087
-  background-repeat: no-repeat;
1088
-  background-size: 110% 125%;
1089
-  background-position: center center;
1090
-  min-width: 66px;
1091
-  min-height: 30px;
1092
-}
1093
-
1094
-#selectcalleridbttn {
1095
-  position: relative;
1096
-  padding-left: 0px;
1097
-  margin-top: 2.6px;
1098
-  margin-right: 4px;
1099
-  float: right;
1100
-  background-image: url('../img/refresh_logo.svg');
1101
-  background-repeat: no-repeat;
1102
-  background-size: 110% 110%;
1103
-  background-position: center center;
1104
-  min-width: 24px;
1105
-  min-height: 24px;
1106
-  cursor: pointer;
1107
-  background-color: #ffffff;
1108
-  border-radius: 20px;
1109
-}
1110
-
1111
-#pickid, #showsum {
1112
-  display: inline-block;
1113
-  position: relative;
1114
-  font-size: 17px;
1115
-  font-weight: bold;
1116
-  margin: 4px 0px 8px 14px;
1117
-  color: #FFFFFF;
1118
-}
1119
-
1120
-.smsrelentless_checkbox:hover {
1121
-  cursor: pointer;
1122
-}
1123
-
1124
-#smstables {
1125
-  display: block; 
1126
-  position: relative;
1127
-  min-width: 100%;
1128
-  min-height: 100%;
1129
-}
1130
-
1131
-#smsRGreyLogo {
1132
-  display: block;
1133
-  position: relative;
1134
-  background-image: url('../img/sms_relentless_grey.svg');
1135
-  background-repeat: no-repeat;
1136
-  background-position: center center;
1137
-  width: 100%;
1138
-  height: 675px;
1139
-}
1140
-
1141
-#recSmsTable {
1142
-  display: block;
1143
-  position: relative;
1144
-  top: 0px;
1145
-  width: 100%;
1146
-  height: auto;
1147
-  font-size: 14px;
1148
-  z-index: 50;
1149
-  background: #FFFFFF;
1150
-}
1151
-
1152
-#sentSmsTable {
1153
-  display: block;
1154
-  position: relative;
1155
-  top: 0px;
1156
-  width: 100%;
1157
-  height: auto;
1158
-  font-size: 14px;
1159
-  z-index: 50;
1160
-  background: #FFFFFF;
1161
-}
1162
-
1163
-.receivedrows, .receivedrowsbody, .sentrows, .sentrowsbody {
1164
-  border: 1px solid #F0F0F0;
1165
-  padding: 8px;
1166
-}
1167
-
1168
-#sentfiltersrow, #recfiltersrow {
1169
-  display: none;
1170
-  position: sticky;
1171
-  top: 27px;
1172
-  background: #FFFFFF;
1173
-  box-shadow: 0 6px 7px rgba(0, 0, 0, 0.1);
1174
-  z-index: 1000;
1175
-}
1176
-
1177
-#sentSmsTable th, #recSmsTable th {
1178
-  position: sticky;
1179
-  top: 27px;
1180
-  z-index: 999;
1181
-  border: 1px solid #F0F0F0;
1182
-  padding: 7px;
1183
-  background-color: #bfe5f2;
1184
-  font-size: 15px;
1185
-  font-weight: bold;
1186
-  text-align: center;
1187
-}
1188
-
1189
-#sentSmsTable td, #recSmsTable td {
1190
-  border: 1px solid #F0F0F0;
1191
-  padding: 5px;
1192
-  white-space: normal;
1193
-}
1194
-
1195
-.datecolsent {
1196
-  text-align: center;
1197
-}
1198
-
1199
-.sentdbidcolumn {
1200
-  text-align: center;
1201
-}
1202
-
1203
-.dbidcolumnrec {
1204
-  width: 50px;
1205
-  text-align: center;
1206
-}
1207
-
1208
-.messagecolumnsent {
1209
-  background: #fffff2;
1210
-  text-align: left;
1211
-  font-weight: bold;
1212
-  width: 250px;
1213
-  word-break: break-word;
1214
-}
1215
-
1216
-.messagecolumnrec {
1217
-  background: #fffff2;
1218
-  text-align: left;
1219
-  font-weight: bold;
1220
-  width: 526px;
1221
-  word-break: break-word;
1222
-}
1223
-
1224
-#selectAllChckbx:hover {
1225
-  cursor: pointer;
1226
-}
1227
-
1228
-.indivchckbx:hover {
1229
-  cursor: pointer;
1230
-}
1231
-
1232
-.selectsmsdv {
1233
-  width: 30px;
1234
-  padding: 5px 5px 5px 7px;
1235
-  text-align: center;
1236
-}
1237
-
1238
-#selectalldv {
1239
-  width: 30px;
1240
-  padding: 5px 5px 5px 7px;
1241
-}
1242
-
1243
-.indivfilter {
1244
-  height: 30px;
1245
-  font-weight: bold;
1246
-  padding: 0px;
1247
-}
1248
-
1249
-.selectalldvfilter {
1250
-  border: 1px solid #F0F0F0;
1251
-  padding: 3px;
1252
-  margin: 0px; 
1253
-}
1254
-
1255
-.filterbuttonsrec, .filterbuttonsent {
1256
-  display: block;
1257
-  position: relative;
1258
-  margin: 5px auto !important;
1259
-  border-radius: 3px !important;
1260
-  background-color: #ffffff !important;
1261
-  background-image: url('../img/filter_icon.svg');
1262
-  background-repeat: no-repeat;
1263
-  background-position: center center;
1264
-  cursor: pointer;
1265
-}
1266
-
1267
-#clearrecfilters, #clearsentfilters {
1268
-  display: inline-block;
1269
-  width: 22px;
1270
-  height: 22px;
1271
-  background-color: #ffffff;
1272
-  background-image: url('../img/clearfilters.svg');
1273
-  background-repeat: no-repeat;
1274
-  background-position: center center;
1275
-  margin: 0px 0px 8px 0px;
1276
-  border: none;
1277
-  cursor: pointer;
1278
-}
1279
-
1280
-#deleterecrows, #deletesentrows {
1281
-  display: inline-block;
1282
-  width: 16px;
1283
-  height: 20px;
1284
-  background-color: #ffffff;
1285
-  background-image: url('../img/garbage.svg');
1286
-  background-repeat: no-repeat;
1287
-  background-position: center center;
1288
-  margin: 0px 0px 4px 0px;
1289
-  border: none;
1290
-  cursor: pointer;
1291
-}
1292
-
1293
-#deleterecrows:active, #deletesentrows:active {
1294
-  background-image: url('../img/garbage_bright.svg');
1295
-}
1296
-
1297
-#toptablerec, #toptablesent {
1298
-  display: block;
1299
-  position: sticky;
1300
-  top: 0px;
1301
-  height: 27px;
1302
-  width: 100%;
1303
-  z-index: 1001;
1304
-}
1305
-
1306
-.topbuttonandpage {
1307
-   display: block;
1308
-   position: relative;
1309
-   width: 100%;
1310
-   height: 27px;
1311
-   border-radius: 0px 24px 0px 0px;
1312
-   background: #FFFFFF;
1313
-   z-index: 1001;
1314
-}
1315
-
1316
-#paginationrec, #paginationsent {
1317
-   display: block;
1318
-   position: relative;
1319
-   float: right;
1320
-   width: auto;
1321
-   margin: -25px 14px 0px 0px;
1322
-   font-size: 16px;
1323
-   font-weight: bold;
1324
-   color: #0082C9;
1325
-   z-index: 1002;
1326
-}
1327
-
1328
-.arrowDownCl {
1329
-    background-image: url('../img/arrowDown.svg');
1330
-    background-repeat: no-repeat;
1331
-    background-position: center center;
1332
-    z-index: 1010;
1333
-}
1334
-
1335
-.arrowUpCl {
1336
-    background-image: url('../img/arrowUp.svg');
1337
-    background-repeat: no-repeat;
1338
-    background-position: center center;
1339
-    z-index: 1010;   
1340
-}
1341
-
1342
-@media (max-width: 1020px) {
1343
-  #recarrow, #sentarrow {
1344
-    display: block;
1345
-    position: relative;
1346
-    float: left;
1347
-    margin: 3.8px 0px 0px 50px;
1348
-    width: 20px;
1349
-    height: 20px;
1350
-    border: none;
1351
-    cursor: pointer;
1352
-  }
1353
-}
1354
-
1355
-@media (min-width: 1021px) {
1356
-  #recarrow, #sentarrow {
1357
-    display: block;
1358
-    position: relative;
1359
-    float: left;
1360
-    margin: 3.8px 0px 0px 5px;
1361
-    width: 20px;
1362
-    height: 20px;
1363
-    border: none;
1364
-    cursor: pointer;
1365
-  }
1366
-}
1367
-
1368
-#totalrecmessages, #totalsentmessages {
1369
-  display: block;
1370
-  position: relative;
1371
-  padding: 10px 0px 0px 0px;
1372
-  font-size: 14px;
1373
-  font-weight: bold;
1374
-  color: #4cbc86;
1375
-}
1376
-
1377
-.pagenumbers, .pagenumbersbottom, .pagenumbersrec, .pagenumbersbottomrec {
1378
-  color: #0082C9;
1379
-}
1380
-
1381
-#dbidtextsent {
1382
-  display: block;
1383
-  margin: auto;
1384
-  width: 95%;
1385
-}
1386
-
1387
-#dbidtextrec {
1388
-  display: block;
1389
-  margin: auto;
1390
-  width: 95%;
1391
-}
1392
-
1393
-#useridtext {
1394
-  display: block;
1395
-  margin: auto;
1396
-  width: 95%;
1397
-}
1398
-
1399
-#useridtextrec {
1400
-  display: block;
1401
-  margin: auto;
1402
-  width: 95%;
1403
-}
1404
-
1405
-#messageidtext {
1406
-  display: block;
1407
-  margin: auto;
1408
-  width: 95%;
1409
-}
1410
-
1411
-#messageidtextrec {
1412
-  display: block;
1413
-  margin: auto;
1414
-  width: 95%;
1415
-}
1416
-
1417
-#datetext {
1418
-  display: block;
1419
-  margin: auto;
1420
-  width: 95px;
1421
-}
1422
-
1423
-#datetextrec {
1424
-  display: block;
1425
-  margin: auto;
1426
-  width: 95%;
1427
-}
1428
-
1429
-#fromtext {
1430
-  display: block;
1431
-  margin: auto;
1432
-  width: 95%;
1433
-}
1434
-
1435
-#fromtextrec {
1436
-  display: block;
1437
-  margin: auto;
1438
-  width: 95%;
1439
-}
1440
-
1441
-#totext {
1442
-  display: block;
1443
-  margin: auto;
1444
-  width: 95%;
1445
-}
1446
-
1447
-#totextrec {
1448
-  display: block;
1449
-  margin: auto;
1450
-  width: 95%;
1451
-}
1452
-
1453
-#networktext {
1454
-  display: block;
1455
-  margin: auto;
1456
-  width: 95%;
1457
-}
1458
-
1459
-#pricetext {
1460
-  display: block;
1461
-  margin: auto;
1462
-  width: 95%;
1463
-}
1464
-
1465
-#statustext {
1466
-  display: block;
1467
-  margin: auto;
1468
-  width: 95%;
1469
-}
1470
-
1471
-#deliveryrcpttext {
1472
-  display: block;
1473
-  margin: auto;
1474
-  width: 95%;
1475
-}
1476
-
1477
-#messagetext {
1478
-  display: block;
1479
-  margin: auto;
1480
-  width: 95%;
1481
-}
1482
-
1483
-#messagetextrec {
1484
-  display: block;
1485
-  margin: auto;
1486
-  width: 95%;
1487
-}
1488
-
1489
-#databaseidfilter {
1490
-  display: block;
1491
-  margin-left: auto;
1492
-  margin-right: auto;
1493
-}
1494
-
1495
-#sentstatuscolumn {
1496
-  max-width: 160px;
1497
-}
1498
-
1499
-.useridcolrec {
1500
-  width: 124px;
1501
-  background-color: #ffffff;
1502
-  text-align: center;
1503
-}
1504
-
1505
-.messageidcolsent {
1506
-  overflow: visible;
1507
-  word-break: break-all;
1508
-  text-align: center;
1509
-}
1510
-
1511
-.messageidcolrec {
1512
-  overflow: visible;
1513
-  word-break: break-all;
1514
-  width: 420px;
1515
-  text-align: center;
1516
-}
1517
-
1518
-.datecolrec {
1519
-  width: 160px;
1520
-  text-align: center;
1521
-}
1522
-
1523
-.fromcolumnrec {
1524
-  width: 140px;
1525
-  text-align: center;
1526
-  background-color: #f2fff5;
1527
-}
1528
-
1529
-.tocolrec {
1530
-  width: 140px;
1531
-  background-color: #f2fbff;
1532
-  text-align: center;
1533
-}
1534
-
1535
-.networkcolumnsent {
1536
-  max-width: 90px;
1537
-  background-color: #ffffff;
1538
-  word-break: break-word;
1539
-  text-align: center;
1540
-}
1541
-
1542
-.useridcolsent, .pricecolumnsent, .statuscolumnsent, .deliveryrcptcolsent {
1543
-  background-color: #ffffff;
1544
-  text-align: center;
1545
-}
1546
-
1547
-.tocolumnsent {
1548
-  background-color: #f2fbff;
1549
-  text-align: center;
1550
-}
1551
-
1552
-.fromcolumnsent {
1553
-  background-color: #f2fff5;
1554
-  text-align: center;
1555
-}
1556
-
1557
-.active {
1558
-  color: #c62b71;
1559
-}
1560
-
1561
-#deleteoldmssgs {
1562
-  display: inline-block;
1563
-  position: relative;
1564
-  margin: 10px 0px 10px 1px;
1565
-  font-size: 16px;
1566
-  font-weight: bold;
1567
-}
1568
-
1569
-#deleteoldsms {
1570
-  display: none;
1571
-  background: #e8f6ff;
1572
-  border-radius: 6px;
1573
-  padding: 5px;
1574
-}
1575
-
1576
-#delOldrecSMS, #delOldsentSMS {
1577
-  display: block;
1578
-  background-color: #0082C9;
1579
-  color: #ffffff;
1580
-  margin: 10px 0px 10px 5px;
1581
-  border-radius: 20px;  
1582
-}
1583
-
1584
-#delOldrecSMS:active, #delOldsentSMS:active {
1585
-  background: #00a2f9;
1586
-}
1587
-
1588
-#delsetrows {
1589
-  display: block;
1590
-  padding: 5px;
1591
-}
1592
-
1593
-.deletesmsolder {
1594
-  display: inline;
1595
-  font-size: 16px;
1596
-  font-weight: bold;
1597
-}
1598
-
1599
-#oldrecSmsInterval, #oldsentSmsInterval {
1600
-  display: inline;
1601
-  width: 60px;
1602
-  height: 25px;
1603
-  padding: 0px 0px 0px 10px;
1604
-  font-size: 14px;
1605
-  font-weight: bold;
1606
-  border-radius: 20px;
1607
-}
1608
-
1609
-#upArrow {
1610
-  background-image: url("../img/arrow-top.svg");
1611
-  background-repeat: no-repeat;
1612
-  background-color: transparent !important;
1613
-  opacity: 0.30;
1614
-  position: fixed;
1615
-  bottom: 40px;
1616
-  right: 4px;
1617
-  width: 50px;
1618
-  height: 50px;
1619
-  border: none;
1620
-  cursor: pointer;
1621
-  display: none;
1622
-  z-index: 1010;
1623
-}
1624
-
1625
-#upArrow:hover {
1626
-  opacity: 1;
1627
-}
1628
-
1629
-.opensmsfolder {
1630
-  display: block;
1631
-  position: relative;
1632
-  margin: 10px 0px 10px 0px !important;
1633
-  padding: 7px 0px 7px 0px;
1634
-  width: 100% !important;
1635
-  color: #FFFFFF !important;
1636
-  font-size: 15px !important;
1637
-  background-color: #CB99C5 !important;
1638
-}
1639
-
1640
-.opensmsfolder:hover {
1641
-  border: 2px;
1642
-  background-color: #c18bba !important;
1643
-}
1644
-
1645
-.opensmsfolder:active {
1646
-  background-color: #b777af !important;
1647
-  border: 2px;
1648
-  color: #FFFFFF !important;
1649
-  border-color: #b777af;
1650
-}
1651
-
1652
-.opensmsfolder:focus {
1653
-  background-color: #a3669b !important;
1654
-  border: 2px;
1655
-  border-color: #a3669b;
1656
-}
1657
-
1658
-/* Changes for dark themes */
1659
-[data-theme-dark] .srheader,
1660
-[data-theme-dark-highcontrast] .srheader {
1661
-  display: block;
1662
-  position: relative;
1663
-  margin: 0px 0px 7px 0px;
1664
-  color: #fafafa;
1665
-  font-size: 17px;
1666
-  font-weight: bold;
1667
-}
1668
-
1669
-[data-theme-dark] #sendtomultiple,
1670
-[data-theme-dark-highcontrast] #sendtomultiple {
1671
-  display: inline-block;
1672
-  position: relative;
1673
-  margin: 10px 0px 12px 0px;
1674
-  color: #fafafa;
1675
-  font-size: 16px;
1676
-  font-weight: bold;
1677
-}
1678
-
1679
-[data-theme-dark] #entermessage,
1680
-[data-theme-dark-highcontrast] #entermessage {
1681
-  display: block;
1682
-  position: relative;
1683
-  margin: 10px 0px 0px 0px;
1684
-  color: #fafafa;
1685
-  font-size: 16px;
1686
-  font-weight: bold;
1687
-}
1688
-
1689
-[data-theme-dark] #sendmediafl,
1690
-[data-theme-dark-highcontrast] #sendmediafl {
1691
-  display: block;
1692
-  position: relative;
1693
-  margin: 0px 0px 20px 0px;
1694
-  color: #fafafa;
1695
-  font-size: 16px;
1696
-  font-weight: bold;
1697
-}
1698
-
1699
-[data-theme-dark] #deleteoldmssgs,
1700
-[data-theme-dark-highcontrast] #deleteoldmssgs {
1701
-  display: inline-block;
1702
-  position: relative;
1703
-  margin: 10px 0px 10px 1px;
1704
-  color: #fafafa;
1705
-  font-size: 16px;
1706
-  font-weight: bold;
1707
-}
1708
-
1709
-[data-theme-dark] #smsto,
1710
-[data-theme-dark-highcontrast] #smsto {
1711
-  display: block;
1712
-  width: 99%;
1713
-  max-height: 32px;
1714
-  padding: 0px 15px 0px 15px;
1715
-  color: #fafafa;
1716
-  font-size: 16px;
1717
-  font-weight: bold;
1718
-  border-radius: 20px;
1719
-}
1720
-
1721
-[data-theme-dark] #smstext,
1722
-[data-theme-dark-highcontrast] #smstext {
1723
-  display: inline-block;
1724
-  color: #fafafa;
1725
-  width: 100%;
1726
-  height: 130px;
1727
-  text-align: left;
1728
-  font-size: 16px;
1729
-  border-radius: 6px;
1730
-  resize: vertical;
1731
-  white-space: pre-wrap;
1732
-}
1733
-
1734
-[data-theme-dark] .tooltipbalanceid #infobalance,
1735
-[data-theme-dark-highcontrast] .tooltipbalanceid #infobalance {
1736
-  display: block;
1737
-  position: relative;
1738
-  margin: 4px 14px 0px 0px;
1739
-  color: #fafafa;
1740
-  font-size: 21px;
1741
-  font-weight: bold;
1742
-  font-family: Times New Roman;
1743
-  font-style: italic;
1744
-  z-index: 6;
1745
-}
1746
-
1747
-[data-theme-dark] #infotipid,
1748
-[data-theme-dark-highcontrast] #infotipid {
1749
-  display: block;
1750
-  position: relative;
1751
-  margin: 4px 10px 0px 0px;
1752
-  color: #fafafa;
1753
-  font-size: 21px;
1754
-  font-weight: bold;
1755
-  font-family: Times New Roman;
1756
-  font-style: italic;
1757
-  z-index: 5;
1758
-}
1759
-
1760
-[data-theme-dark] .fortooltip .texttooltip, [data-theme-dark] .maxmessagelength .texttooltip,
1761
-[data-theme-dark-highcontrast] .fortooltip .texttooltip, [data-theme-dark-highcontrast] .maxmessagelength .texttooltip {
1762
-  font-family: Times New Roman, Calibri, sans-serif;
1763
-  font-style: italic;
1764
-  color: #fafafa;
1765
-  font-size: 21px;
1766
-  font-weight: bold;
1767
-  margin: 0px 0px 4px 4px;
1768
-}
1769
-
1770
-[data-theme-dark] #uploadfileforsms,
1771
-[data-theme-dark-highcontrast] #uploadfileforsms {
1772
-  margin-left: 7px;
1773
-  background-color: #434343;
1774
-  border-radius: 3px !important;
1775
-}
1776
-
1777
-[data-theme-dark] #uploadfileformms,
1778
-[data-theme-dark-highcontrast] #uploadfileformms {
1779
-  margin-left: 21px;
1780
-  background-color: #434343;
1781
-  border-radius: 3px !important;
1782
-}
1783
-
1784
-[data-theme-dark] .smsnbformat a,
1785
-[data-theme-dark-highcontrast] .smsnbformat a {
1786
-  color: #cedfff !important;
1787
-}
1788
-
1789
-[data-theme-dark] .smsnbformat font,
1790
-[data-theme-dark-highcontrast] .smsnbformat font {
1791
-  color: #f7547a !important;
1792
-}
1793
-
1794
-[data-theme-dark] .indivfiltersent, [data-theme-dark] .indivfilterrec,
1795
-[data-theme-dark-highcontrast] .indivfiltersent, [data-theme-dark-highcontrast] .indivfilterrec {
1796
-  color: #fafafa !important;
1797
-}
1798
-
1799
-[data-theme-dark] #recSmsTable, [data-theme-dark] #sentSmsTable,
1800
-[data-theme-dark-highcontrast] #recSmsTable, [data-theme-dark-highcontrast] #sentSmsTable {
1801
-  color: #272727 !important;
1802
-}
1803
-
1804
-[data-theme-dark] .providerSettings .setlabeltext,
1805
-[data-theme-dark-highcontrast] .providerSettings .setlabeltext {
1806
-  color: #272727;
1807
-}
1808
-
1809
-[data-theme-dark] .providerName,
1810
-[data-theme-dark-highcontrast] .providerName  {
1811
-   font-size: 18px;
1812
-   font-weight: bold;
1813
-   margin-bottom: 20px;
1814
-   color: #272727;
1815
-}
1816 0
deleted file mode 100644
... ...
@@ -1,27 +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
-   id="Layer_1"
10
-   x="0px"
11
-   y="0px"
12
-   width="20px"
13
-   height="20px"
14
-   viewBox="0 0 612 425.197"
15
-   enable-background="new 0 0 612 425.197"
16
-   xml:space="preserve"><metadata
17
-   id="metadata9"><rdf:RDF><cc:Work
18
-       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
19
-         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
20
-   id="defs7" />
21
-<path
22
-   fill-rule="evenodd"
23
-   clip-rule="evenodd"
24
-   fill="#838587"
25
-   d="m 310.451,364.8867 c -36.944,0.341 -99.058,-72.712 -133.335,-106.42 C 151.627,233.4007 64.218,160.1217 63.912,126.9317 63.489,81.029703 80.846,63.317703 126.669,62.894703 171.313,62.482703 257.521,185.9337 309.114,219.8537 367.092,180.1847 432.962,60.067703 502.205,59.429703 c 37.971,-0.35 50.062,31.119 50.355,62.992997 0.306,33.131 -83.83,106.124 -108.518,131.314 -36.758,37.506 -95.413,110.797 -133.591,111.15 z"
26
-   id="path2" />
27
-</svg>
28 0
deleted file mode 100644
... ...
@@ -1,8 +0,0 @@
1
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
2
-	 width="20px" height="20px" viewBox="0 0 612 425.197" enable-background="new 0 0 612 425.197" xml:space="preserve">
3
-<path fill-rule="evenodd" clip-rule="evenodd" fill="#838587" d="M310.451,59.428c-36.944-0.341-99.058,72.712-133.335,106.42
4
-	c-25.489,25.066-112.898,98.345-113.204,131.535c-0.423,45.902,16.934,63.614,62.757,64.037
5
-	c44.644,0.412,130.852-123.039,182.445-156.959c57.978,39.669,123.848,159.786,193.091,160.424
6
-	c37.971,0.35,50.062-31.119,50.355-62.993c0.306-33.131-83.83-106.124-108.518-131.314
7
-	C407.284,133.072,348.629,59.781,310.451,59.428z"/>
8
-</svg>
9 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,283 +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 flowsenderinit = $("#flow_sender_name").val();
186
-    //  var flowsenderproc = flowsenderinit.replace(/[^A-Za-z 0-9]/g, '');
187
-
188
-    var includesmsinemail = 0;
189
-
190
-    if ($("#includesmsinemail").is(':checked')) {
191
-        includesmsinemail = 1;
192
-    }
193
-
194
-    var datatosave = {
195
-                      userId: userid,
196
-                      telapiKey: $("#telapi_key").val(),
197
-                      telPubKey: $("#tel_pub_key").val(),
198
-                      telapiUrlRec: $("#telapi_url_rec").val(),
199
-                      telapiUrl: $("#telapi_url").val(),
200
-                      messagingProfileId: $("#messaging_profile_id").val(),
201
-                      nexapiKey: $("#nexapi_key").val(),
202
-                      nexapiSecret: $("#nexapi_secret").val(),
203
-                      nexapiUrlRec: $("#nexapi_url_rec").val(),
204
-                      nexapiUrl: $("#nexapi_url").val(),
205
-                      twilapiKey: $("#twilapi_key").val(),
206
-                      twilapiSecret: $("#twilapi_secret").val(),
207
-                      twilapiUrlRec: $("#twilapi_url_rec").val(),
208
-                      twilapiUrl: $("#twilapi_url").val(),
209
-                      flowapiKey: $("#flowapi_key").val(),
210
-                      flowapiSecret: $("#flowapi_secret").val(),
211
-                      flowapiUrlRec: $("#flowapi_url_rec").val(),
212
-                      flowapiUrl: $("#flowapi_url").val(),
213
-                      telSenderName: telsenderproc,
214
-                      nexSenderName: nexsenderproc,
215
-                      twilSenderName: twilsenderproc,
216
-                      //  flowSenderName: flowsenderproc,
217
-                      messagesperpage: messagesperpageproc,
218
-                      getNotify: getnotify,
219
-                      notificationEmail: notifyemail,
220
-                      getsmsinemail: includesmsinemail
221
-    };
222
-
223
-
224
-    $.ajax({
225
-       method: 'PUT',
226
-       url: baseUrl + '/' + userid,
227
-       contentType: 'application/json',
228
-       data: JSON.stringify(datatosave),
229
-       error: function(resp) {
230
-            alert('Error ! Please check your settings !');
231
-       }
232
-    });
233
-
234
-  });
235
-
236
-
237
-  var baseUrlget = OC.generateUrl('/apps/sms_relentless/user/getsettings');
238
-
239
-  $.ajax({
240
-     method: 'GET',
241
-     url: baseUrlget + '/' + userid,
242
-     contentType: 'application/json',
243
-     success: function(settingsfromdb) {
244
-         $("#telapi_key").val(settingsfromdb.telapi_key);
245
-         $("#tel_pub_key").val(settingsfromdb.tel_pub_key);
246
-         $("#telapi_url_rec").val(settingsfromdb.telapi_url_rec);
247
-         $("#telapi_url").val(settingsfromdb.telapi_url);
248
-         $("#messaging_profile_id").val(settingsfromdb.messaging_profile_id);
249
-         $("#nexapi_key").val(settingsfromdb.nexapi_key);
250
-         $("#nexapi_secret").val(settingsfromdb.nexapi_secret);
251
-         $("#nexapi_url_rec").val(settingsfromdb.nexapi_url_rec);
252
-         $("#nexapi_url").val(settingsfromdb.nexapi_url);
253
-         $("#twilapi_key").val(settingsfromdb.twilapi_key);
254
-         $("#twilapi_secret").val(settingsfromdb.twilapi_secret);
255
-         $("#twilapi_url_rec").val(settingsfromdb.twilapi_url_rec);
256
-         $("#twilapi_url").val(settingsfromdb.twilapi_url);
257
-         $("#flowapi_key").val(settingsfromdb.flowapi_key);
258
-         $("#flowapi_secret").val(settingsfromdb.flowapi_secret);
259
-         $("#flowapi_url_rec").val(settingsfromdb.flowapi_url_rec);
260
-         $("#flowapi_url").val(settingsfromdb.flowapi_url);
261
-         $("#tel_sender_name").val(settingsfromdb.tel_sender_name);
262
-         $("#nex_sender_name").val(settingsfromdb.nex_sender_name);
263
-         $("#twil_sender_name").val(settingsfromdb.twil_sender_name);
264
-         //  $("#flow_sender_name").val(settingsfromdb.flow_sender_name);
265
-         $("#messagesperpage").val(settingsfromdb.messagesperpage);
266
-
267
-         if (settingsfromdb.get_notify == 1) {
268
-             $("#get_notify").attr('checked', true);
269
-         } else {
270
-             $("#get_notify").attr('checked', false);
271
-         }
272
-
273
-         $("#notification_email").val(settingsfromdb.notification_email);
274
-
275
-         if (settingsfromdb.getsmsinemail == 1) {
276
-             $("#includesmsinemail").attr('checked', true);
277
-         } else {
278
-             $("#includesmsinemail").attr('checked', false);
279
-         }
280
-     }
281
-  });
282
-
283
-});
284 0
deleted file mode 100644
... ...
@@ -1,1104 +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
-
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
-          dataType:'text',
59
-          success: function(recdatafromdb) {
60
-
61
-                parseddata = $.parseJSON(recdatafromdb);
62
-
63
-                $('#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>");
64
-                $('#smstables').append("<table id='recSmsTable'></table>");
65
-
66
-                $('#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>");
67
-                $('#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.'>DB<br>ID</th><th>User ID</th><th>Message ID</th><th>Date</th><th>From</th><th>To</th><th>Received Message</th></tr>");
68
-
69
-                $('#recfiltersrow').hide();
70
-
71
-                for (var i = 0; i < parseddata.length; i++) {
72
-                     $("#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'>"+parseddata[i].from+"</td><td class='tocolrec'>"+parseddata[i].to+"</td><td class='messagecolumnrec'>"+parseddata[i].message+"</td></tr>");
73
-                }
74
-
75
-                $('#smstables').append("<div id='totalrecmessages'>Total displayed messages: " + parseddata.length + "</div>");
76
-
77
-                $('#smstables').removeClass('icon-loading');
78
-
79
-                $('#recarrow').removeClass('arrowUpCl');
80
-                $('#recarrow').addClass('arrowDownCl');
81
-
82
-                // Add pagination
83
-                var rowsShown = messagesperpage;
84
-                var rowsTotal = $("#recSmsTable tr").length;
85
-
86
-                var numPages = (rowsTotal - 2) / rowsShown;
87
-
88
-                for (i = 0; i < numPages; i++) {
89
-                     var pageNum = i + 1;
90
-                     $('#paginationrec').append('<a href="#" rel="' + i + '" class="pagenumbersrec">' + pageNum + '</a> ');
91
-                }
92
-
93
-                $('#paginationrec').children(":first").addClass('active');
94
-
95
-                $(".receivedrowsbody").hide();
96
-
97
-                $('#paginationrec a:first').addClass('active');
98
-
99
-                // Show table page when clicking a page number
100
-                $('.recpages a').bind('click', function() {
101
-
102
-                   $('#paginationrec').children().removeClass('active');
103
-
104
-                   $(this).addClass('active');
105
-
106
-                   var currentPageNo = $(this).text();
107
-
108
-                   $('#paginationrec a').each(function() {
109
-                       if ($(this).text() == currentPageNo) {
110
-                           $(this).addClass('active');
111
-                       }
112
-                   });
113
-
114
-                   // Sort table rows
115
-		   var rows = $('#recSmsTable tr').get();
116
-
117
-		   rows.sort(function(a, b) {
118
-
119
-		        var A = parseInt($('td.dbidcolumnrec', a).text());
120
-		        var B = parseInt($('td.dbidcolumnrec', b).text());
121
-
122
-		        if (A < B) {
123
-		            return -1;
124
-		        }
125
-
126
-		        if (A > B) {
127
-		            return 1;
128
-		        }
129
-
130
-		        return 0;
131
-		   });
132
-
133
-		   $.each(rows, function(index, row) {
134
-		      $('#recSmsTable').append(row);
135
-		   });
136
-
137
-                   var currPage = $(this).attr('rel');
138
-                   var startItem = currPage * rowsShown;
139
-                   var endItem = startItem + rowsShown;
140
-
141
-                   $(".receivedrowsbody").hide().slice(startItem, endItem).css('display', 'table-row');
142
-
143
-                   $('#totalrecmessages').remove();
144
-                   $('#smstables').append("<div id='totalrecmessages'>Total displayed messages: " + parseddata.length + "</div>");
145
-                });
146
-
147
-                $('#paginationrec').children(":last").trigger('click');
148
-
149
-                // Select all records
150
-                $('#selectAllChckbx').change(function() {
151
-                  if ($(this).is(':checked')) {
152
-                       $(".indivchckbx").prop("checked", true);
153
-                  } else {
154
-                       $(".indivchckbx").prop("checked", false);
155
-                  }
156
-                });
157
-
158
-                function reorderRecRows() {
159
-                   var currenttext = $(".filterbuttonsrec").closest('[class="filterbuttonsrec"]').find('[class="indivfilterrec"]').text();
160
-                   if (currenttext == '') {
161
-                       $('tr').sort(function (a, b) {
162
-                          return parseInt($('td.dbidcolumnrec', b).text()) < parseInt($('td.dbidcolumnrec', a).text());
163
-                       }).appendTo("#recSmsTable");
164
-                   }
165
-                }
166
-
167
-                // Filter rows
168
-                $("#databaseidfilter").on("click", function(event) {
169
-
170
-                      var databaseId = $("#dbidtextrec").val();
171
-                      var msgrowsNo = 0;
172
-
173
-                      $(".receivedrowsbody").each(function() {
174
-
175
-                          var checkrecEmpty1 = 0;
176
-                          $(".indivfilterrec").not("#dbidtextrec").each(function() {
177
-                              if ($(this).val() != '') {
178
-                                  checkrecEmpty1 = 1;
179
-                              }
180
-                          });
181
-
182
-                          if (checkrecEmpty1 == 0) {
183
-                              $(this).show();
184
-                          }
185
-
186
-                          if (databaseId != '') {
187
-                             if ($(this).find('[class="dbidcolumnrec"]').text() == databaseId) {
188
-                                $("#recSmsTable").append(this);
189
-                                if ($(this).is(":visible")) { msgrowsNo++; }
190
-                             } else {
191
-                                $(this).hide();
192
-                             }
193
-                          } else {
194
-                                $(this).show();
195
-                                msgrowsNo++;
196
-                          }
197
-                      });
198
-
199
-                      reorderRecRows();
200
-                      $('#totalrecmessages').remove();
201
-                      $('#smstables').append("<div id='totalrecmessages'>Total filtered messages: " + msgrowsNo + "</div>");
202
-                });
203
-
204
-
205
-                $("#useridfilter").on("click", function(event) {
206
-
207
-                      var useridtxt = $("#useridtextrec").val().toLowerCase();
208
-                      var msgrowsNo = 0;
209
-
210
-                      $(".receivedrowsbody").each(function() {
211
-
212
-                          var checkrecEmpty2 = 0;
213
-                          $(".indivfilterrec").not("#useridtextrec").each(function() {
214
-                              if ($(this).val() != '') {
215
-                                  checkrecEmpty2 = 1;
216
-                              }
217
-                          });
218
-
219
-                          if (checkrecEmpty2 == 0) {
220
-                              $(this).show();
221
-                          }
222
-
223
-                          if (useridtxt != '') {
224
-                             var useridfound = $(this).find('[class="useridcolrec"]').text().toLowerCase();
225
-                             if(useridfound.indexOf(useridtxt) != -1) {
226
-                                $("#recSmsTable").append(this);
227
-                                if ($(this).is(":visible")) { msgrowsNo++; }
228
-                             } else {
229
-                                $(this).hide();
230
-                             }
231
-                          } else {
232
-                                $(this).show();
233
-                                msgrowsNo++;
234
-                          }
235
-                      });
236
-
237
-                      reorderRecRows();
238
-                      $('#totalrecmessages').remove();
239
-                      $('#smstables').append("<div id='totalrecmessages'>Total filtered messages: " + msgrowsNo + "</div>");
240
-
241
-                });
242
-
243
-                $("#messageidfilter").on("click", function(event) {
244
-
245
-                      var messageidtxt = $("#messageidtextrec").val().toLowerCase();
246
-                      var msgrowsNo = 0;
247
-
248
-                      $(".receivedrowsbody").each(function() {
249
-
250
-                          var checkrecEmpty3 = 0;
251
-                          $(".indivfilterrec").not("#messageidtextrec").each(function() {
252
-                              if ($(this).val() != '') {
253
-                                  checkrecEmpty3 = 1;
254
-                              }
255
-                          });
256
-
257
-                          if (checkrecEmpty3 == 0) {
258
-                              $(this).show();
259
-                          }
260
-
261
-                          if (messageidtxt != '') {
262
-                             var foundtdmssgid = $(this).find('[class="messageidcolrec"]').text().toLowerCase();
263
-                             if (foundtdmssgid.indexOf(messageidtxt) != -1) {
264
-                                $("#recSmsTable").append(this);
265
-                                if ($(this).is(":visible")) { msgrowsNo++; }
266
-                             } else {
267
-                                $(this).hide();
268
-                             }
269
-                          } else {
270
-                                $(this).show();
271
-                                msgrowsNo++;
272
-                          }
273
-                      });
274
-
275
-                      reorderRecRows();
276
-                      $('#totalrecmessages').remove();
277
-                      $('#smstables').append("<div id='totalrecmessages'>Total filtered messages: " + msgrowsNo + "</div>");
278
-                });
279
-
280
-                $("#datefilter").on("click", function(event) {
281
-
282
-                      var datetxtvr = $("#datetextrec").val().toLowerCase();
283
-                      var msgrowsNo = 0;
284
-
285
-                      $(".receivedrowsbody").each(function() {
286
-
287
-                          var checkrecEmpty4 = 0;
288
-                          $(".indivfilterrec").not("#datetextrec").each(function() {
289
-                              if ($(this).val() != '') {
290
-                                  checkrecEmpty4 = 1;
291
-                              }
292
-                          });
293
-
294
-                          if (checkrecEmpty4 == 0) {
295
-                              $(this).show();
296
-                          }
297
-
298
-                          if (datetxtvr != '') {
299
-                              var founddate = $(this).find('[class="datecolrec"]').text().toLowerCase();
300
-                              if (founddate.indexOf(datetxtvr) != -1) {
301
-                                  $("#recSmsTable").append(this);
302
-                                  if ($(this).is(":visible")) { msgrowsNo++; }
303
-                              } else {
304
-                                  $(this).hide();
305
-                              }
306
-                          } else {
307
-                                  $(this).show();
308
-                                  msgrowsNo++;
309
-                          }
310
-                      });
311
-
312
-                      reorderRecRows();
313
-                      $('#totalrecmessages').remove();
314
-                      $('#smstables').append("<div id='totalrecmessages'>Total filtered messages: " + msgrowsNo + "</div>");
315
-                });
316
-
317
-                $("#fromfilter").on("click", function(event) {
318
-
319
-                      var fromtxtvr = $("#fromtextrec").val().toLowerCase();
320
-                      var msgrowsNo = 0;
321
-
322
-                      $(".receivedrowsbody").each(function() {
323
-
324
-                          var checkrecEmpty5 = 0;
325
-                          $(".indivfilterrec").not("#fromtextrec").each(function() {
326
-                              if ($(this).val() != '') {
327
-                                  checkrecEmpty5 = 1;
328
-                              }
329
-                          });
330
-
331
-                          if (checkrecEmpty5 == 0) {
332
-                              $(this).show();
333
-                          }
334
-
335
-                          if (fromtxtvr != '') {
336
-                             var foundfrom = $(this).find('[class="fromcolumnrec"]').text().toLowerCase();
337
-                             if (foundfrom.indexOf(fromtxtvr) != -1) {
338
-                                 $("#recSmsTable").append(this);
339
-                                 if ($(this).is(":visible")) { msgrowsNo++; }
340
-                             } else {
341
-                                 $(this).hide();
342
-                             }
343
-                          } else {
344
-                                 $(this).show();
345
-                                 msgrowsNo++;
346
-                          }
347
-                      });
348
-
349
-                      reorderRecRows();
350
-                      $('#totalrecmessages').remove();
351
-                      $('#smstables').append("<div id='totalrecmessages'>Total filtered messages: " + msgrowsNo + "</div>");
352
-                });
353
-
354
-                $("#tofilter").on("click", function(event) {
355
-
356
-                      var totxtvr = $("#totextrec").val().toLowerCase();
357
-                      var msgrowsNo = 0;
358
-
359
-                      $(".receivedrowsbody").each(function() {
360
-
361
-                          var checkrecEmpty6 = 0;
362
-                          $(".indivfilterrec").not("#totextrec").each(function() {
363
-                              if ($(this).val() != '') {
364
-                                  checkrecEmpty6 = 1;
365
-                              }
366
-                          });
367
-
368
-                          if (checkrecEmpty6 == 0) {
369
-                              $(this).show();
370
-                          }
371
-
372
-                          if (totxtvr != '') {
373
-                             var foundto = $(this).find('[class="tocolrec"]').text().toLowerCase();
374
-                             if (foundto.indexOf(totxtvr) != -1) {
375
-                                 $("#recSmsTable").append(this);
376
-                                 if ($(this).is(":visible")) { msgrowsNo++; }
377
-                             } else {
378
-                                 $(this).hide();
379
-                             }
380
-                          } else {
381
-                                 $(this).show();
382
-                                 msgrowsNo++;
383
-                          }
384
-                      });
385
-
386
-                      reorderRecRows();
387
-                      $('#totalrecmessages').remove();
388
-                      $('#smstables').append("<div id='totalrecmessages'>Total filtered messages: " + msgrowsNo + "</div>");
389
-                });
390
-
391
-                $("#messagefilter").on("click", function(event) {
392
-
393
-                      var messagetxtvr = $("#messagetextrec").val().toLowerCase();
394
-                      var msgrowsNo = 0;
395
-
396
-                      $(".receivedrowsbody").each(function() {
397
-
398
-                          var checkrecEmpty7 = 0;
399
-                          $(".indivfilterrec").not("#messagetextrec").each(function() {
400
-                              if ($(this).val() != '') {
401
-                                  checkrecEmpty7 = 1;
402
-                              }
403
-                          });
404
-
405
-                          if (checkrecEmpty7 == 0) {
406
-                              $(this).show();
407
-                          }
408
-
409
-                          if (messagetxtvr != '') {
410
-                             var foundmessage = $(this).find('[class="messagecolumnrec"]').text().toLowerCase();
411
-                             if (foundmessage.indexOf(messagetxtvr) != -1) {
412
-                                $("#recSmsTable").append(this);
413
-                                if ($(this).is(":visible")) { msgrowsNo++; }
414
-                             } else {
415
-                                $(this).hide();
416
-                             }
417
-                          } else {
418
-                                $(this).show();
419
-                                msgrowsNo++;
420
-                          }
421
-                      });
422
-
423
-                      reorderRecRows();
424
-                      $('#totalrecmessages').remove();
425
-                      $('#smstables').append("<div id='totalrecmessages'>Total filtered messages: " + msgrowsNo + "</div>");
426
-               });
427
-
428
-               // Clear all filters
429
-               $("#clearrecfilters").on("click", function(event) {
430
-                      $(".receivedrowsbody").each(function() {
431
-                          $(this).show();
432
-                      });
433
-                      $(".indivfilterrec").val("");
434
-                      $('#totalrecmessages').remove();
435
-                      $('#smstables').append("<div id='totalrecmessages'>Total displayed messages: " + parseddata.length + "</div>");
436
-               });
437
-
438
-               // Delete selected rows from the database
439
-               $("#deleterecrows").on("click", function() {
440
-                  var checkcheckbx = jQuery("#recSmsTable input[type=checkbox]:checked").length;
441
-                  if (checkcheckbx == 0) {
442
-                     alert("Please select the row(s) to permanently delete from the database !");
443
-                  } else {
444
-                          var checkboxIds = [];
445
-                          $(".receivedrowsbody").each(function() {
446
-                             var rowcheckbx = $(this).find('input[type="checkbox"]');
447
-                             if (rowcheckbx.is(":checked")) {
448
-                                 var dbrowid = $(this).find('[class="dbidcolumnrec"]').text();
449
-                                 checkboxIds.push(dbrowid);
450
-                             }
451
-                          });
452
-
453
-                          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'.")) {
454
-
455
-                              var deleterecRowsUrl = OC.generateUrl("/apps/sms_relentless/user/removerecrows");
456
-                              $('#smstables').addClass('icon-loading');
457
-
458
-                              $.ajax({
459
-                                   url: deleterecRowsUrl + '/' + userid,
460
-                                   method: "POST",
461
-                                   dataType:'text',
462
-                                   data: {recmessagedbIDs: checkboxIds},
463
-                                   success: function() {
464
-                                            alert("The row(s) have been deleted successfully !");
465
-                                            $('#smstables').removeClass('icon-loading');
466
-                                            $('#receivedsmstableshow').click();
467
-                                   },
468
-                                   error: function() {
469
-                                            alert("There was an error while deleting the selected row(s) !");
470
-                                            $('#smstables').removeClass('icon-loading');
471
-                                   }
472
-                              });
473
-                          }
474
-                  }
475
-               });
476
-
477
-
478
-               // Show/Hide filter row
479
-	       $('#recarrow').on('click', function() {
480
-	          if ($('#recfiltersrow').is(':visible')) {
481
-		      $('#recfiltersrow').hide();
482
-                      $('#recheaderrow').css('top', '0px');
483
-                      $(this).removeClass('arrowUpCl');
484
-                      $(this).addClass('arrowDownCl');
485
-		  } else {
486
-		      $('#recfiltersrow').show();
487
-                      $('#recheaderrow').css('top', '158px');
488
-                      $(this).removeClass('arrowDownCl');
489
-                      $(this).addClass('arrowUpCl');
490
-                  }
491
-               });
492
-
493
-               $("#app-content").animate({scrollTop:$("#recSmsTable").prop("scrollHeight")},200);
494
-          },
495
-          error: function(recdatafromdb) {
496
-                      alert("An error occurred. Please check your settings!");
497
-                      $('#smstables').removeClass('icon-loading');
498
-          }
499
-     });
500
-
501
-  });
502
-
503
-
504
-  // List sent messages
505
-  $("#sentsmstableshow").on("click", function(event) {
506
-
507
-     $('#smstables').empty();
508
-
509
-     var getSentUrl = OC.generateUrl("/apps/sms_relentless/user/getsenttable");
510
-     $('#smstables').addClass('icon-loading');
511
-
512
-     $.ajax({
513
-          url: getSentUrl + '/' + userid,
514
-          method: "GET",
515
-          dataType:'text',
516
-          success: function(sentdatafromdb) {
517
-
518
-                sentparseddata = $.parseJSON(sentdatafromdb);
519
-
520
-                $('#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>");
521
-                $('#smstables').append("<table id='sentSmsTable'></table>");
522
-                $('#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>");
523
-                $('#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.'>DB<br>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>");
524
-
525
-                $('#sentfiltersrow').hide();
526
-
527
-                for (var i = 0; i < sentparseddata.length; i++) {
528
-                     $('#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'>"+sentparseddata[i].from+"</td><td class='tocolumnsent'>"+sentparseddata[i].to+"</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'>"+sentparseddata[i].message+"</td></tr>");
529
-                }
530
-
531
-                $('#smstables').append("<div id='totalsentmessages'><span>Total displayed messages: " + sentparseddata.length + "</span></div>");
532
-
533
-                $('#smstables').removeClass('icon-loading');
534
-
535
-                $('#sentarrow').removeClass('arrowUpCl');
536
-                $('#sentarrow').addClass('arrowDownCl');
537
-
538
-                // Add pagination
539
-                var rowsShown = messagesperpage;
540
-                var rowsTotal = $("#sentSmsTable tr").length;
541
-                var numPages = (rowsTotal - 2) / rowsShown;
542
-
543
-                for (i = 0; i < numPages; i++) {
544
-                     var pageNum = i + 1;
545
-                     $('#paginationsent').append('<a href="#" rel="' + i + '" class="pagenumbers">' + pageNum + '</a> ');
546
-                }
547
-
548
-                $('#paginationsent').children(":first").addClass('active');
549
-
550
-                $(".sentrowsbody").hide();
551
-
552
-                $('#paginationsent a:first').addClass('active');
553
-
554
-                // Show table page when clicking on page number
555
-                $('.pages a').bind('click', function () {
556
-
557
-                      $('#paginationsent').children().removeClass('active');
558
-
559
-                      $(this).addClass('active');
560
-
561
-                      var currentsentPgNo = $(this).text();
562
-
563
-                      $('#paginationsent a').each(function() {
564
-                         if ($(this).text() == currentsentPgNo) {
565
-                             $(this).addClass('active');
566
-                         }
567
-                      });
568
-
569
-                      // Sort table rows
570
-		      var rows = $('#sentSmsTable tr').get();
571
-
572
-		      rows.sort(function(a, b) {
573
-
574
-		           var A = parseInt($('td.sentdbidcolumn', a).text());
575
-		           var B = parseInt($('td.sentdbidcolumn', b).text());
576
-
577
-		           if (A < B) {
578
-		               return -1;
579
-		           }
580
-
581
-		           if (A > B) {
582
-		               return 1;
583
-		           }
584
-
585
-		           return 0;
586
-		      });
587
-
588
-		      $.each(rows, function(index, row) {
589
-		         $('#sentSmsTable').append(row);
590
-		      });
591
-
592
-                      var currPage = $(this).attr('rel');
593
-                      var startItem = currPage * rowsShown;
594
-                      var endItem = startItem + rowsShown;
595
-
596
-                      $('.sentrowsbody').hide().slice(startItem, endItem).css('display', 'table-row');
597
-
598
-                      $('#totalsentmessages').remove();
599
-                      $('#smstables').append("<div id='totalsentmessages'>Total displayed messages: " + sentparseddata.length + "</div>");
600
-                });
601
-
602
-                $('#paginationsent').children(":last").trigger('click');
603
-
604
-                // Select all records
605
-                $('#selectAllChckbx').change(function() {
606
-                   if ($(this).is(':checked')) {
607
-                       $(".indivchckbx").prop("checked", true);
608
-                   } else {
609
-                       $(".indivchckbx").prop("checked", false);
610
-                   }
611
-                });
612
-
613
-                function reorderSentRows() {
614
-                    var currenttext = $(".filterbuttonsent").closest('[class="filterbuttonsent"]').find('[class="indivfiltersent"]').text();
615
-                    if (currenttext == '') {
616
-                        $('tr').sort(function (a, b) {
617
-                           return parseInt($('td.sentdbidcolumn', b).text()) < parseInt($('td.sentdbidcolumn', a).text());
618
-                        }).appendTo("#sentSmsTable");
619
-                    }
620
-                }
621
-
622
-                // Filter rows
623
-                $("#databaseidfilter").on("click", function(event) {
624
-
625
-                       var databaseId = $("#dbidtextsent").val();
626
-                       var msgrowsNo = 0;
627
-
628
-                       $(".sentrowsbody").each(function() {
629
-
630
-                          var checkEmpty = 0;
631
-                          $(".indivfiltersent").not("#dbidtextsent").each(function() {
632
-                              if ($(this).val() != '') {
633
-                                  checkEmpty = 1;
634
-                              }
635
-                          });
636
-
637
-                          if (checkEmpty == 0) {
638
-                              $(this).show();
639
-                          }
640
-
641
-                          if (databaseId != '') {
642
-                             if ($(this).find('[class="sentdbidcolumn"]').text() == databaseId) {
643
-                                 $("#sentSmsTable").append(this);
644
-                                 if ($(this).is(":visible")) { msgrowsNo++; }
645
-                             } else {
646
-                                 $(this).hide();
647
-                             }
648
-                          } else {
649
-                                 $(this).show();
650
-                                 msgrowsNo++;
651
-                          }
652
-                       });
653
-
654
-                       reorderSentRows();
655
-                       $('#totalsentmessages').remove();
656
-                       $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>");
657
-                });
658
-
659
-                $("#useridfilter").on("click", function(event) {
660
-
661
-                       var useridtxt = $("#useridtext").val().toLowerCase();
662
-                       var msgrowsNo = 0;
663
-
664
-                       $(".sentrowsbody").each(function() {
665
-
666
-                          var checkEmpty1 = 0;
667
-                          $(".indivfiltersent").not("#useridtext").each(function() {
668
-                              if ($(this).val() != '') {
669
-                                  checkEmpty1 = 1;
670
-                              }
671
-                          });
672
-
673
-                          if (checkEmpty1 == 0) {
674
-                              $(this).show();
675
-                          }
676
-
677
-                          if (useridtxt != '') {
678
-                              var founduserid = $(this).find('[class="useridcolsent"]').text().toLowerCase();
679
-                              if (founduserid.indexOf(useridtxt) != -1) {
680
-                                  $("#sentSmsTable").append(this);
681
-                                  if ($(this).is(":visible")) { msgrowsNo++; }
682
-                             } else {
683
-                                  $(this).hide();
684
-                             }
685
-                          } else {
686
-                                  $(this).show();
687
-                                  msgrowsNo++;
688
-                          }
689
-                       });
690
-
691
-                       reorderSentRows();
692
-                       $('#totalsentmessages').remove();
693
-                       $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>");
694
-                });
695
-
696
-                $("#messageidfilter").on("click", function(event) {
697
-
698
-                       var messageidtxt = $("#messageidtext").val().toLowerCase();
699
-                       var msgrowsNo = 0;
700
-
701
-                       $(".sentrowsbody").each(function() {
702
-
703
-                          var checkEmpty2 = 0;
704
-                          $(".indivfiltersent").not("#messageidtext").each(function() {
705
-                              if ($(this).val() != '') {
706
-                                  checkEmpty2 = 1;
707
-                              }
708
-                          });
709
-
710
-                          if (checkEmpty2 == 0) {
711
-                              $(this).show();
712
-                          }
713
-
714
-                          if (messageidtxt != '') {
715
-                              var foundtdmssgid = $(this).find('[class="messageidcolsent"]').text().toLowerCase();
716
-                              if (foundtdmssgid.indexOf(messageidtxt) != -1) {
717
-                                  $("#sentSmsTable").append(this);
718
-                                  if ($(this).is(":visible")) { msgrowsNo++; }
719
-                              } else {
720
-                                  $(this).hide();
721
-                              }
722
-                          } else {
723
-                                  $(this).show();
724
-                                  msgrowsNo++;
725
-                          }
726
-                       });
727
-
728
-                       reorderSentRows();
729
-                       $('#totalsentmessages').remove();
730
-                       $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>");
731
-                });
732
-
733
-                $("#datefilter").on("click", function(event) {
734
-
735
-                       var datetxtvr = $("#datetext").val().toLowerCase();
736
-                       var msgrowsNo = 0;
737
-
738
-                       $(".sentrowsbody").each(function() {
739
-
740
-                          var checkEmpty3 = 0;
741
-                          $(".indivfiltersent").not("#datetext").each(function() {
742
-                              if ($(this).val() != '') {
743
-                                  checkEmpty3 = 1;
744
-                              }
745
-                          });
746
-
747
-                          if (checkEmpty3 == 0) {
748
-                              $(this).show();
749
-                          }
750
-
751
-                          if (datetxtvr != '') {
752
-                             var founddate = $(this).find('[class="datecolsent"]').text().toLowerCase();
753
-                             if (founddate.indexOf(datetxtvr) != -1) {
754
-                                 $("#sentSmsTable").append(this);
755
-                                 if ($(this).is(":visible")) { msgrowsNo++; }
756
-                             } else {
757
-                                 $(this).hide();
758
-                             }
759
-                          } else {
760
-                                 $(this).show();
761
-                                 msgrowsNo++;
762
-                          }
763
-                       });
764
-
765
-                       reorderSentRows();
766
-                       $('#totalsentmessages').remove();
767
-                       $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>");
768
-                });
769
-
770
-                $("#fromfilter").on("click", function(event) {
771
-
772
-                       var fromtxtvr = $("#fromtext").val().toLowerCase();
773
-                       var msgrowsNo = 0;
774
-
775
-                       $(".sentrowsbody").each(function() {
776
-
777
-                          var checkEmpty4 = 0;
778
-                          $(".indivfiltersent").not("#fromtext").each(function() {
779
-                              if ($(this).val() != '') {
780
-                                  checkEmpty4 = 1;
781
-                              }
782
-                          });
783
-
784
-                          if (checkEmpty4 == 0) {
785
-                              $(this).show();
786
-                          }
787
-
788
-                          if (fromtxtvr != '') {
789
-                             var foundfrom = $(this).find('[class="fromcolumnsent"]').text().toLowerCase();
790
-                             if (foundfrom.indexOf(fromtxtvr) != -1) {
791
-                                 $("#sentSmsTable").append(this);
792
-                                 if ($(this).is(":visible")) { msgrowsNo++; }
793
-                             } else {
794
-                                 $(this).hide();
795
-                             }
796
-                          } else {
797
-                                 $(this).show();
798
-                                 msgrowsNo++;
799
-                          }
800
-                       });
801
-
802
-                       reorderSentRows();
803
-                       $('#totalsentmessages').remove();
804
-                       $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>");
805
-                });
806
-
807
-                $("#tofilter").on("click", function(event) {
808
-
809
-                      var totxtvr = $("#totext").val().toLowerCase();
810
-                      var msgrowsNo = 0;
811
-
812
-                      $(".sentrowsbody").each(function() {
813
-
814
-                          var checkEmpty5 = 0;
815
-                          $(".indivfiltersent").not("#totext").each(function() {
816
-                              if ($(this).val() != '') {
817
-                                  checkEmpty5 = 1;
818
-                              }
819
-                          });
820
-
821
-                          if (checkEmpty5 == 0) {
822
-                              $(this).show();
823
-                          }
824
-
825
-                          if (totxtvr != '') {
826
-                             var foundto = $(this).find('[class="tocolumnsent"]').text().toLowerCase();
827
-                             if (foundto.indexOf(totxtvr) != -1) {
828
-                                 $("#sentSmsTable").append(this);
829
-                                 if ($(this).is(":visible")) { msgrowsNo++; }
830
-                             } else {
831
-                                 $(this).hide();
832
-                             }
833
-                          } else {
834
-                                 $(this).show();
835
-                                 msgrowsNo++;
836
-                          }
837
-                      });
838
-
839
-                      reorderSentRows();
840
-                      $('#totalsentmessages').remove();
841
-                      $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>");
842
-                });
843
-
844
-                $("#networkfilter").on("click", function(event) {
845
-
846
-                      var networktxtvr = $("#networktext").val().toLowerCase();
847
-                      var msgrowsNo = 0;
848
-
849
-                      $(".sentrowsbody").each(function() {
850
-
851
-                          var checkEmpty6 = 0;
852
-                          $(".indivfiltersent").not("#networktext").each(function() {
853
-                              if ($(this).val() != '') {
854
-                                  checkEmpty6 = 1;
855
-                              }
856
-                          });
857
-
858
-                          if (checkEmpty6 == 0) {
859
-                              $(this).show();
860
-                          }
861
-
862
-                          if (networktxtvr != '') {
863
-                              var foundnetwork = $(this).find('[class="networkcolumnsent"]').text().toLowerCase();
864
-                              if (foundnetwork.indexOf(networktxtvr) != -1) {
865
-                                  $("#sentSmsTable").append(this);
866
-                                  if ($(this).is(":visible")) { msgrowsNo++; }
867
-                              } else {
868
-                                  $(this).hide();
869
-                              }
870
-                          } else {
871
-                                  $(this).show();
872
-                                  msgrowsNo++;
873
-                          }
874
-                      });
875
-
876
-                      reorderSentRows();
877
-                      $('#totalsentmessages').remove();
878
-                      $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>");
879
-                });
880
-
881
-                $("#pricefilter").on("click", function(event) {
882
-
883
-                      var pricetxtvr = $("#pricetext").val().toLowerCase();
884
-                      var msgrowsNo = 0;
885
-
886
-                      $(".sentrowsbody").each(function() {
887
-
888
-                          var checkEmpty7 = 0;
889
-                          $(".indivfiltersent").not("#pricetext").each(function() {
890
-                              if ($(this).val() != '') {
891
-                                  checkEmpty7 = 1;
892
-                              }
893
-                          });
894
-
895
-                          if (checkEmpty7 == 0) {
896
-                              $(this).show();
897
-                          }
898
-
899
-                          if (pricetxtvr != '') {
900
-                              var foundprice = $(this).find('[class="pricecolumnsent"]').text().toLowerCase();
901
-                              if (foundprice.indexOf(pricetxtvr) != -1) {
902
-                                  $("#sentSmsTable").append(this);
903
-                                  if ($(this).is(":visible")) { msgrowsNo++; }
904
-                              } else {
905
-                                  $(this).hide();
906
-                              }
907
-                          } else {
908
-                                  $(this).show();
909
-                                  msgrowsNo++;
910
-                          }
911
-                      });
912
-
913
-                      reorderSentRows();
914
-                      $('#totalsentmessages').remove();
915
-                      $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>");
916
-                });
917
-
918
-                $("#statusfilter").on("click", function(event) {
919
-
920
-                      var statustxtvr = $("#statustext").val().toLowerCase();
921
-                      var msgrowsNo = 0;
922
-
923
-                      $(".sentrowsbody").each(function() {
924
-
925
-                          var checkEmpty8 = 0;
926
-                          $(".indivfiltersent").not("#statustext").each(function() {
927
-                              if ($(this).val() != '') {
928
-                                  checkEmpty8 = 1;
929
-                              }
930
-                          });
931
-
932
-                          if (checkEmpty8 == 0) {
933
-                              $(this).show();
934
-                          }
935
-
936
-                          if (statustxtvr != '') {
937
-                              var foundstatus = $(this).find('[class="statuscolumnsent"]').text().toLowerCase();
938
-                              if (foundstatus.indexOf(statustxtvr) != -1) {
939
-                                  $("#sentSmsTable").append(this);
940
-                                  if ($(this).is(":visible")) { msgrowsNo++; }
941
-                              } else {
942
-                                  $(this).hide();
943
-                              }
944
-                          } else {
945
-                                  $(this).show();
946
-                                  msgrowsNo++;
947
-                          }
948
-                      });
949
-
950
-                      reorderSentRows();
951
-                      $('#totalsentmessages').remove();
952
-                      $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>");
953
-                });
954
-
955
-                $("#deliveryrecfilter").on("click", function(event) {
956
-
957
-                      var deliverytxtvr = $("#deliveryrcpttext").val().toLowerCase();
958
-                      var msgrowsNo = 0;
959
-
960
-                      $(".sentrowsbody").each(function() {
961
-
962
-                          var checkEmpty9 = 0;
963
-                          $(".indivfiltersent").not("#deliveryrcpttext").each(function() {
964
-                              if ($(this).val() != '') {
965
-                                  checkEmpty9 = 1;
966
-                              }
967
-                          });
968
-
969
-                          if (checkEmpty9 == 0) {
970
-                              $(this).show();
971
-                          }
972
-
973
-                          if (deliverytxtvr != '') {
974
-                              var founddeliveryrcpt = $(this).find('[class="deliveryrcptcolsent"]').text().toLowerCase();
975
-                              if (founddeliveryrcpt.indexOf(deliverytxtvr) != -1) {
976
-                                  $("#sentSmsTable").append(this);
977
-                                  if ($(this).is(":visible")) { msgrowsNo++; }
978
-                              } else {
979
-                                  $(this).hide();
980
-                              }
981
-                          } else {
982
-                                  $(this).show();
983
-                                  msgrowsNo++;
984
-                          }
985
-                      });
986
-
987
-                      reorderSentRows();
988
-                      $('#totalsentmessages').remove();
989
-                      $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>");
990
-                });
991
-
992
-                $("#messagefilter").on("click", function(event) {
993
-
994
-                      var messagetxtvr = $("#messagetext").val().toLowerCase();
995
-                      var msgrowsNo = 0;
996
-
997
-                      $(".sentrowsbody").each(function() {
998
-
999
-                          var checkEmpty10 = 0;
1000
-                          $(".indivfiltersent").not("#messagetext").each(function() {
1001
-                              if ($(this).val() != '') {
1002
-                                  checkEmpty10 = 1;
1003
-                              }
1004
-                          });
1005
-
1006
-                          if (checkEmpty10 == 0) {
1007
-                              $(this).show();
1008
-                          }
1009
-
1010
-                          if (messagetxtvr != '') {
1011
-                              var foundmessage = $(this).find('[class="messagecolumnsent"]').text().toLowerCase();
1012
-                              if (foundmessage.indexOf(messagetxtvr) != -1) {
1013
-                                  $("#sentSmsTable").append(this);
1014
-                                  if ($(this).is(":visible")) { msgrowsNo++; }
1015
-                              } else {
1016
-                                  $(this).hide();
1017
-                              }
1018
-                          } else {
1019
-                                  $(this).show();
1020
-                                  msgrowsNo++;
1021
-                          }
1022
-                      });
1023
-
1024
-                      reorderSentRows();
1025
-                      $('#totalsentmessages').remove();
1026
-                      $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>");
1027
-                });
1028
-
1029
-                // Clear all filters
1030
-                $("#clearsentfilters").on("click", function(event) {
1031
-                       $(".sentrowsbody").each(function() {
1032
-                          $(this).show();
1033
-                       });
1034
-                       $(".indivfiltersent").val("");
1035
-                       $('#totalsentmessages').remove();
1036
-                       $('#smstables').append("<div id='totalsentmessages'>Total displayed messages: " + sentparseddata.length + "</div>");
1037
-                });
1038
-
1039
-                // Delete selected rows from the database
1040
-                $("#deletesentrows").on("click", function() {
1041
-
1042
-                   var checkcheckbx = jQuery("#sentSmsTable input[type=checkbox]:checked").length;
1043
-                   if (checkcheckbx == 0) {
1044
-                       alert("Please select the row(s) to permanently delete from the database !");
1045
-                   } else {
1046
-                          var sentcheckboxIds = [];
1047
-                          $(".sentrowsbody").each(function() {
1048
-                             var sentrowcheckbx = $(this).find('input[type="checkbox"]');
1049
-                             if (sentrowcheckbx.is(":checked")) {
1050
-                                 var dbrowid = $(this).find('[class="sentdbidcolumn"]').text();
1051
-                                 sentcheckboxIds.push(dbrowid);
1052
-                             }
1053
-                          });
1054
-
1055
-                          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'.")) {
1056
-
1057
-                              var deletesentRowsUrl = OC.generateUrl("/apps/sms_relentless/user/removesentrows");
1058
-                              $('#smstables').addClass('icon-loading');
1059
-
1060
-                              $.ajax({
1061
-                                   url: deletesentRowsUrl + '/' + userid,
1062
-                                   method: "POST",
1063
-                                   dataType:'text',
1064
-                                   data: {sentmessagedbIDs: sentcheckboxIds},
1065
-                                   success: function() {
1066
-                                            alert("The row(s) have been deleted successfully !");
1067
-                                            $('#smstables').removeClass('icon-loading');
1068
-                                            $('#sentsmstableshow').click();
1069
-                                   },
1070
-                                   error: function() {
1071
-                                            alert("There was an error while deleting the selected row(s) !");
1072
-                                            $('#smstables').removeClass('icon-loading');
1073
-                                   }
1074
-                              });
1075
-                          }
1076
-                    }
1077
-                });
1078
-
1079
-                // Show/Hide filter row
1080
-	        $('#sentarrow').on('click', function() {
1081
-	           if ($('#sentfiltersrow').is(':visible')) {
1082
-		       $('#sentfiltersrow').hide();
1083
-                       $('#sentheaderrow').css('top', '0px');
1084
-                       $(this).removeClass('arrowUpCl');
1085
-                       $(this).addClass('arrowDownCl');
1086
-		   } else {
1087
-		       $('#sentfiltersrow').show();
1088
-                       $('#sentheaderrow').css('top', '158px');
1089
-                       $(this).removeClass('arrowDownCl');
1090
-                       $(this).addClass('arrowUpCl');
1091
-                   }
1092
-                });
1093
-
1094
-                $("#app-content").animate({scrollTop:$("#sentSmsTable").prop("scrollHeight")},200);
1095
-          },
1096
-          error: function(sentdatafromdb) {
1097
-                alert("An error occurred!");
1098
-                $('#smstables').removeClass('icon-loading');
1099
-          }
1100
-     });
1101
-
1102
-  });
1103
-
1104
-});
1105 0
deleted file mode 100644
... ...
@@ -1,723 +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
-
49
-class AuthorApiController extends ApiController {
50
-
51
-    private $service;
52
-    private $userId;
53
-    private $config;
54
-
55
-    public function __construct($appName, IRequest $request, SmsrelentlessService $service, $userId, IConfig $config) {
56
-        parent::__construct(
57
-            $appName,
58
-            $request,
59
-            'PUT, POST, GET, DELETE, PATCH',
60
-            'Authorization, Content-Type, Accept',
61
-            1728000);
62
-
63
-        $this->service = $service;
64
-        $this->userId = $userId;
65
-        $this->config = $config;
66
-    }
67
-
68
-
69
-    /**
70
-     * @NoAdminRequired
71
-     */
72
-    public function object_to_array($obj) {
73
-       if(is_object($obj)) $obj = (array)$this->dismount($obj);
74
-       if(is_array($obj)) {
75
-          $new = array();
76
-          foreach($obj as $key => $val) {
77
-              $new[$key] = $this->object_to_array($val);
78
-          }
79
-       }
80
-       else $new = $obj;
81
-       return $new;
82
-    }
83
-
84
-
85
-    /**
86
-     * @NoAdminRequired
87
-     */
88
-    public function dismount($object) {
89
-       $reflectionClass = new ReflectionClass(get_class($object));
90
-       $array = array();
91
-       foreach ($reflectionClass->getProperties() as $property) {
92
-          $property->setAccessible(true);
93
-          $array[$property->getName()] = $property->getValue($object);
94
-          $property->setAccessible(false);
95
-       }
96
-       return $array;
97
-    }
98
-
99
-
100
-    /**
101
-     * @NoAdminRequired
102
-     */
103
-    public function verifyHeader($receiveddata, $signature_header, $timestamp, $public_key = '', $tolerance = null ) {
104
-        // Typecast timestamp to int for comparisons
105
-        $timestamp = (int)$timestamp;
106
-
107
-        // Check if timestamp is within tolerance
108
-        if (($tolerance > 0) && (\abs(\time() - $timestamp) > $tolerance)) {
109
-             return false;
110
-        } else {
111
-
112
-            // Convert base64 string to bytes for sodium crypto functions
113
-            $public_key_bytes = base64_decode($public_key);
114
-            $signature_header_bytes = base64_decode($signature_header);
115
-
116
-            // Construct a message to test against the signature header using the timestamp and payload
117
-            $constructed_string = $timestamp . '|' . $receiveddata;
118
-
119
-            if (!\sodium_crypto_sign_verify_detached($signature_header_bytes, $constructed_string, $public_key_bytes)) {
120
-                return false;
121
-            } else {
122
-                return true;
123
-            }
124
-        }
125
-    }
126
-
127
-
128
-    /**
129
-     * @NoAdminRequired
130
-     * @NoCSRFRequired
131
-     * @PublicPage
132
-     */
133
-    public function recdeliveryreptel() {
134
-
135
-       $request = file_get_contents("php://input");
136
-       $recdata = json_decode($request, TRUE);
137
-
138
-       $delsmswebhookurl = $recdata["data"]["payload"]["webhook_url"];
139
-       $ncuserfortelnyxdel = $this->service->getuserbyteldelrwhurl($delsmswebhookurl);
140
-
141
-       if ($ncuserfortelnyxdel != '' && $ncuserfortelnyxdel != null && $ncuserfortelnyxdel != 'undefined') {
142
-
143
-	       $messageid = $recdata["data"]["payload"]["id"];
144
-
145
-	       $network = $recdata["data"]["payload"]["to"][0]["carrier"];
146
-	       $messageprice = $recdata["data"]["payload"]["cost"]["amount"];
147
-	       $deliverystatus = $recdata["data"]["payload"]["to"][0]["status"];
148
-
149
-	       $goterrorinit = $recdata["data"]["payload"]["errors"];
150
-
151
-	       if (!empty($goterrorinit)) {
152
-		   $retrievedtitle = $recdata["data"]["payload"]["errors"][0]["title"];
153
-		   $retrievedcode = $recdata["data"]["payload"]["errors"][0]["code"];
154
-		   $messagestatus = "(Error " . $retrievedcode . ") " . $retrievedtitle;
155
-	       } else {
156
-		   $messagestatus = "Success ! The message has been successfully accepted for delivery.";
157
-	       }
158
-
159
-	       return $this->service->updatedeliverystatustel($ncuserfortelnyxdel, $messageid, $network, $messageprice, $messagestatus, $deliverystatus); 
160
-
161
-       } else { return "access denied"; }
162
-
163
-    }
164
-
165
-
166
-    /**
167
-     * @NoAdminRequired
168
-     * @NoCSRFRequired
169
-     * @PublicPage
170
-     */
171
-    public function recdeliveryrepnex() {
172
-
173
-       $plivodrurl = $_SERVER['REQUEST_SCHEME'] . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
174
-
175
-       $ncuserforplivodel = $this->service->getuserbyplivodelrwhurl($plivodrurl);
176
-
177
-       if ($ncuserforplivodel != '' && $ncuserforplivodel != null && $ncuserforplivodel != 'undefined') {
178
-
179
-	       $networkcode = "";
180
-	       $mStatus = ""; 
181
-
182
-	       if (isset($_REQUEST["MessageUUID"])) { $messageid = $_REQUEST["MessageUUID"]; } else { $messageid = ''; }
183
-	       if (isset($_REQUEST["MCC"]) && isset($_REQUEST["MNC"])) { $networkcode = $_REQUEST["MCC"] . " " . $_REQUEST["MNC"]; } else { $networkcode = ''; }
184
-	       if (isset($_REQUEST["TotalAmount"])) { $messageprice = $_REQUEST["TotalAmount"]; } else { $messageprice = ''; }
185
-	       if (isset($_REQUEST["ErrorCode"]) && $_REQUEST["ErrorCode"] == "") {
186
-                   $mStatus = "Success ! The message has been successfully accepted for delivery.";
187
-               } elseif (isset($_REQUEST["ErrorCode"]) && $_REQUEST["ErrorCode"] != "") {
188
-                   $mStatus = "Error " . $_REQUEST["ErrorCode"]; 
189
-               } else { $mStatus = ''; }
190
-
191
-	       if (isset($_REQUEST["Status"])) { $deliverystatus = $_REQUEST["Status"]; }
192
-
193
-	       return $this->service->updatedeliverystatusnex($ncuserforplivodel, $messageid, $networkcode, $messageprice, $mStatus, $deliverystatus);
194
-
195
-       } else { return "access denied"; }
196
-
197
-    }
198
-
199
-
200
-    /**
201
-     * @NoAdminRequired
202
-     * @NoCSRFRequired
203
-     * @PublicPage
204
-     */
205
-    public function recdeliveryreptwil() {
206
-
207
-       $twildrurl = $_SERVER['REQUEST_SCHEME'] . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
208
-
209
-       $ncuserfortwildel = $this->service->getuserbytwildelrwhurl($twildrurl);
210
-
211
-       if ($ncuserfortwildel != '' && $ncuserfortwildel != null && $ncuserfortwildel != 'undefined') {
212
-
213
-           $messageid = $_REQUEST["SmsSid"];
214
-
215
-           if ($messageid != null) {
216
-
217
-               $credentialstw = $this->service->getapicredentials($ncuserfortwildel);
218
-               $sidtw = $credentialstw[15];
219
-               $tokentw = $credentialstw[16];
220
-               $msdetails = json_decode(file_get_contents("https://".$sidtw.":".$tokentw."@api.twilio.com/2010-04-01/Accounts/".$sidtw."/Messages/".$messageid.".json"));
221
-               $errorMessage = $msdetails->error_message;
222
-               $errorCode = $msdetails->error_code;
223
-               $deliverystatus = $msdetails->status;
224
-
225
-               if ($errorCode == null) { 
226
-                   $mStatus = 'Success ! The message has been successfully accepted for delivery.'; 
227
-               } else { $mStatus = 'Error ' . $errorCode . '. '. ($errorMessage != '') ? 'Message: '. $errorMessage : ''; }
228
-
229
-               $messagepricepre = $msdetails->price;
230
-               $messageprice = str_replace("-", "", $messagepricepre);
231
-               $networkcode = '';
232
-
233
-	       return $this->service->updatedeliverystatustwil($ncuserfortwildel, $messageid, $networkcode, $messageprice, $mStatus, $deliverystatus);
234
-
235
-           } else { exit(); }
236
-
237
-       } else { exit(); }
238
-
239
-    }
240
-
241
-
242
-    /**
243
-     * @NoAdminRequired
244
-     * @NoCSRFRequired
245
-     * @PublicPage
246
-     */
247
-    public function recdeliveryrepflow() {
248
-
249
-       $flowdrurl = $_SERVER['REQUEST_SCHEME'] . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
250
-
251
-       $ncuserforflowdel = $this->service->getuserbyflowdelrwhurl($flowdrurl);
252
-
253
-       if ($ncuserforflowdel != '' && $ncuserforflowdel != null && $ncuserforflowdel != 'undefined') {
254
-
255
-           $receivereq = file_get_contents('php://input');
256
-           $recmdec = json_decode($receivereq, true);
257
-           $recmsid = $recmdec['data']['id'];
258
-
259
-           $smsapicredfl = $this->service->getapicredentials($ncuserforflowdel);
260
-           $flowapikey = $smsapicredfl[20];
261
-           $flowapisecret = $smsapicredfl[21];
262
-
263
-           $getmsdetails = json_decode(file_get_contents("https://".$flowapikey.":".$flowapisecret."@api.flowroute.com/v2.1/messages/".$recmsid.""), true);
264
-           $messagepriceflinit = $getmsdetails['data']['attributes']['amount_display'];
265
-           $messagepricefl = str_replace("$", "", $messagepriceflinit);
266
-
267
-           $mdeliveryflinit = $getmsdetails['data']['attributes']['delivery_receipts'][0]['status'];
268
-
269
-           if ($mdeliveryflinit != 'message buffered') {
270
-               if ($mdeliveryflinit == 'Ok') {
271
-                   $messagedeliveryfl = "Issues";
272
-               } else { $messagedeliveryfl = $mdeliveryflinit; }
273
-           } else { $messagedeliveryfl = 'delivered'; }
274
-
275
-           $messagestatuscode = $getmsdetails['data']['attributes']['delivery_receipts'][0]['status_code'];
276
-           $messagestatusdescr = $getmsdetails['data']['attributes']['delivery_receipts'][0]['status_code_description'];
277
-
278
-           if ($messagestatuscode != '') { 
279
-               $messagestatusfl = (($messagestatusdescr != '') ? $messagestatusdescr . ". " : "") . "Status code: " . $messagestatuscode; 
280
-           } else { $messagestatusfl = "There were issues with message delivery."; }
281
-
282
-           $networkcodefl = '';
283
-
284
-           return $this->service->updatedeliverystatusflow($ncuserforflowdel, $recmsid, $networkcodefl, $messagepricefl,  $messagestatusfl, $messagedeliveryfl);
285
-
286
-       } else { return "access denied"; }
287
-
288
-    }
289
-
290
-
291
-    /**
292
-     * @NoAdminRequired
293
-     * @NoCSRFRequired
294
-     * @PublicPage
295
-     */
296
-    public function receivesmstel() {
297
-
298
-       $signature = $_SERVER['HTTP_TELNYX_SIGNATURE_ED25519'];
299
-       $timestamp = $_SERVER['HTTP_TELNYX_TIMESTAMP'];
300
-
301
-       $receivereq = file_get_contents('php://input');
302
-
303
-       $recmesdata = json_decode($receivereq, TRUE);
304
-
305
-       $recsmswebhookurl = $recmesdata["data"]["payload"]["webhook_url"];
306
-
307
-       $ncuserfortelnyx = $this->service->getuserbytelrecwhurl($recsmswebhookurl);
308
-
309
-       $credentials = $this->service->getapicredentials($ncuserfortelnyx);
310
-
311
-       $telpubkey = $credentials[1];
312
-
313
-       // Verify message signature
314
-       $signatureverify = $this->verifyHeader($receivereq, $signature, $timestamp, $telpubkey, $tolerance = 30);
315
-
316
-       if ($signatureverify) {
317
-
318
-          if ($ncuserfortelnyx != '' && $ncuserfortelnyx != null && $ncuserfortelnyx != 'undefined') {
319
-
320
-	       $messageid = $recmesdata["data"]["payload"]["id"];
321
-
322
-	       $messagedate = date("Y-m-d H:i:s");
323
-
324
-	       $messagefrom = $recmesdata["data"]["payload"]["from"]["phone_number"];
325
-
326
-	       $messageto = "Telnyx: " . $recmesdata["data"]["payload"]["to"][0]["phone_number"];
327
-
328
-               // Check if the message is a MMS
329
-               if ($recmesdata["data"]["payload"]['type'] == 'MMS') {
330
-
331
-                   $includedFiles = '';
332
-
333
-                   foreach ($recmesdata["data"]["payload"]['media'] as $telkey => $telvalue) {
334
-                        if (is_array($telvalue)) {
335
-                            foreach ($telvalue as $telkeysec => $telvaluesec) {
336
-                                if ($telkeysec == "url") {
337
-                                    $includedFiles .= $telvaluesec . "<br><br>";
338
-                                }
339
-                            }
340
-                        }
341
-                   }
342
-
343
-                   $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;
344
-                   $ismmstel = 1;
345
-               } else {
346
-                   $messagetexttel = $recmesdata["data"]["payload"]["text"];
347
-                   $ismmstel = 0;
348
-               }
349
-
350
-	       $recmessagearr = [$messageid, $messagedate, $messagefrom, $messageto, $messagetexttel];
351
-
352
-	       $this->service->insertrecsms($ncuserfortelnyx, $recmessagearr);
353
-
354
-	       // Send notifications
355
-	       $nameofhost = exec("hostname");
356
-
357
-	       $telsmsapicred = $this->service->getapicredentials($ncuserfortelnyx);
358
-	       $telnotify = $telsmsapicred[12];
359
-	       $emailaddress = $telsmsapicred[13];
360
-	       $includemessageinemail = $telsmsapicred[14];
361
-
362
-               if ($ismmstel == 0) { $smsormmstel = "SMS"; } else { $smsormmstel = "MMS"; }
363
-
364
-	       if ($telnotify != 0 ) {
365
-
366
-		   $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.'");
367
-
368
-	       }
369
-
370
-	       if ($emailaddress != '') {
371
-
372
-		   $gmtind = "UTC " . date('P');
373
-		   $smsdateinit = date("Y-m-d  H:i:s");
374
-		   $smsdate = $smsdateinit . " " . $gmtind;
375
-
376
-		   $subject = "New ". $smsormmstel ." message received";
377
-
378
-                   $messagetextnltel = str_replace("\n", "<br>", $messagetexttel);
379
-
380
-		   if ($includemessageinemail == 0) {
381
-		       $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>";
382
-		   } else {
383
-		       $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>";
384
-		   }
385
-
386
-                   $messagefin = chunk_split(base64_encode($message));
387
-
388
-		   $headers = "MIME-Version: 1.0" . "\r\n";
389
-		   $headers .= "Content-type: text/html; charset=UTF-8" . "\r\n";
390
-                   $headers .= "Content-Transfer-Encoding: base64" . "\r\n";
391
-
392
-		   // Set the email sender
393
-		   $headers .= "From: " . $emailaddress . "\r\n";
394
-		   $headers .= "Reply-To: " . $emailaddress . "\r\n";
395
-
396
-		   mail($emailaddress, $subject, $messagefin, $headers);
397
-	       }
398
-
399
-	       return http_response_code(200);
400
-
401
-          } else { return "access denied"; }
402
-
403
-       } else { return "access denied"; }
404
-    }
405
-
406
-
407
-    /**
408
-     * @NoAdminRequired
409
-     * @NoCSRFRequired
410
-     * @PublicPage
411
-     */
412
-    public function receivesmsnex() {
413
-
414
-       $plivosignature = $_SERVER['HTTP_X_PLIVO_SIGNATURE_V2'];
415
-       $plivononce = $_SERVER["HTTP_X_PLIVO_SIGNATURE_V2_NONCE"];
416
-
417
-       $plivorecurl = $_SERVER['REQUEST_SCHEME'] . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
418
-
419
-       $ncuserforplivo = $this->service->getuserbyplivorecwhurl($plivorecurl);
420
-
421
-       $smsapicred = $this->service->getapicredentials($ncuserforplivo);
422
-
423
-       $plivoauthtoken = $smsapicred[6];
424
-
425
-       $baseplivourlinit = explode("?", $plivorecurl);  
426
-       $baseplivoURI = $baseplivourlinit[0];
427
-
428
-       // Verify message signature
429
-       $SigValidation = new signatureValidation();
430
-       $signverify = $SigValidation->validateSignature($baseplivoURI, $plivononce, $plivosignature, $plivoauthtoken);
431
-
432
-       if ($signverify) {
433
-
434
-              if ($ncuserforplivo != '' && $ncuserforplivo != null && $ncuserforplivo != 'undefined') {
435
-
436
-	          $messageid = $_REQUEST["MessageUUID"];
437
-
438
-	          $messagedate = date("Y-m-d H:i:s");
439
-
440
-	          $messagefrom = "+" . $_REQUEST['From'];
441
-	          $messageto = "Plivo: +" . $_REQUEST['To'];
442
-
443
-                  // Check if the message is a MMS
444
-                  if ($_REQUEST['Type'] == 'mms') {
445
-
446
-                      $includedFiles = '';
447
-                      foreach ($_REQUEST as $plkey => $plvalue) {
448
-
449
-			   if (strpos($plkey, "Media") !== false && $plkey != "MediaCount") {
450
-                               $includedFiles .= $plvalue . "<br><br>";
451
-			   }
452
-                      }
453
-
454
-                      $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;
455
-                      $ismmspl = 1;
456
-                  } else {
457
-                      $messagetextpl = $_REQUEST['Text'];
458
-                      $ismmspl = 0;
459
-                  }
460
-
461
-	          $recmessagearr = [$messageid, $messagedate, $messagefrom, $messageto, $messagetextpl];
462
-
463
-                  $this->service->insertrecsms($ncuserforplivo, $recmessagearr);
464
-
465
-	          // Send notifications
466
-	          $nameofhost = exec("hostname");
467
-
468
-	          $nextnotify = $smsapicred[12];
469
-	          $emailaddress = $smsapicred[13];
470
-	          $includemessageinemail = $smsapicred[14];
471
-
472
-                  if ($ismmspl == 0) { $smsormmspl = "SMS"; } else { $smsormmspl = "MMS"; }
473
-
474
-	          if ($nextnotify != 0 ) {
475
-		      $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.'");
476
-	          }
477
-
478
-	          if ($emailaddress != '') {
479
-
480
-		      $gmtind = "UTC " . date('P');
481
-		      $smsdateinit = date("Y-m-d  H:i:s");
482
-		      $smsdate = $smsdateinit . " " . $gmtind;
483
-
484
-		      $subject = "New ". $smsormmspl ." message received";
485
-
486
-                      $messagetextnlpl = str_replace("\n", "<br>", $messagetextpl);
487
-
488
-		      if ($includemessageinemail == 0) {
489
-		          $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>";
490
-		      } else {
491
-		          $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>";
492
-		      }
493
-
494
-                      $messagefin = chunk_split(base64_encode($message));
495
-
496
-		      $headers = "MIME-Version: 1.0" . "\r\n";
497
-		      $headers .= "Content-type: text/html; charset=UTF-8" . "\r\n";
498
-                      $headers .= "Content-Transfer-Encoding: base64" . "\r\n";
499
-
500
-		      // Set the email sender
501
-		      $headers .= "From: " . $emailaddress . "\r\n";
502
-		      $headers .= "Reply-To: " . $emailaddress . "\r\n";
503
-
504
-		      mail($emailaddress, $subject, $messagefin, $headers);
505
-	          }
506
-
507
-	          return http_response_code(200);
508
-
509
-              } else { return "access denied"; }
510
-
511
-       } else { return "access denied"; }
512
-    }
513
-
514
-
515
-    /**
516
-     * @NoAdminRequired
517
-     * @NoCSRFRequired
518
-     * @PublicPage
519
-     */
520
-    public function receivesmstwil() {
521
-
522
-       $twilsig = $_SERVER['HTTP_X_TWILIO_SIGNATURE'];
523
-
524
-       $basepath = $this->config->getSystemValue('overwrite.cli.url');
525
-       $twilrecprm = $_GET["twilrecparam"];
526
-       $twilrecurl = $basepath . "/apps/sms_relentless/api/recsmstwil?twilrecparam=" . $twilrecprm;
527
-
528
-       $ncuserfortwil = $this->service->getuserbytwilrecwhurl($twilrecurl);
529
-
530
-       $smsapicred = $this->service->getapicredentials($ncuserfortwil);
531
-       $authTokenTw = $smsapicred[16];
532
-
533
-       $postVars = $_POST;
534
-       ksort($postVars);
535
-
536
-       $compurlpart = '';
537
-
538
-       foreach ($postVars as $twilkey => $twilvalue) {
539
-                $compurlpart .= $twilkey . $twilvalue;
540
-       }
541
-
542
-       $compURL1 = $basepath . "/apps/sms_relentless/api/recsmstwil?twilrecparam=" . $twilrecprm . $compurlpart;
543
-       $compURL2 = $basepath . "/apps/sms_relentless/api/recsmstwil?twilrecparam=" . $twilrecprm . "&twilrecparam=" . $twilrecprm . $compurlpart;
544
-       $computedsig1 = base64_encode(hash_hmac('sha1', $compURL1, $authTokenTw, true));
545
-       $computedsig2 = base64_encode(hash_hmac('sha1', $compURL2, $authTokenTw, true));
546
-
547
-       // Verify message signature
548
-       if (strcmp($computedsig1, $twilsig) == 0 || strcmp($computedsig2, $twilsig) == 0) {
549
-
550
-           if ($ncuserfortwil) {
551
-
552
-	       $messageid = $_POST['MessageSid'];
553
-
554
-	       $messagedate = date("Y-m-d H:i:s");
555
-
556
-	       $messagefrom = $_POST['From'];
557
-
558
-	       $messageto = "Twilio: " . $_POST['To'];
559
-
560
-               // Check if the new message is a MMS
561
-               if ($_POST['NumMedia'] != 0) {
562
-
563
-                   $includedFiles = '';
564
-                   foreach ($_POST as $twkey => $twvalue) {
565
-
566
-			if (strpos($twkey, "MediaUrl") !== false) {
567
-                            $includedFiles .= $twvalue . "<br><br>";
568
-			}
569
-                   }
570
-                   $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;
571
-                   $ismmstw = 1;
572
-               } else {
573
-                   $messagetexttw = $_POST['Body'];
574
-                   $ismmstw = 0;
575
-               }
576
-
577
-	       $recmessagearr = [$messageid, $messagedate, $messagefrom, $messageto, $messagetexttw];
578
-
579
-	       $this->service->insertrecsms($ncuserfortwil, $recmessagearr);
580
-
581
-	       // Send notifications
582
-	       $nameofhost = exec("hostname");
583
-
584
-	       $twilnotify = $smsapicred[12];
585
-	       $emailaddress = $smsapicred[13];
586
-	       $includemessageinemail = $smsapicred[14];
587
-
588
-               if ($ismmstw == 0) { $smsormmstw = "SMS"; } else { $smsormmstw = "MMS"; }
589
-
590
-	       if ($twilnotify != 0 ) {
591
-		   $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.'");
592
-	       }
593
-
594
-	       if ($emailaddress != '') {
595
-
596
-		   $gmtind = "UTC " . date('P');
597
-		   $smsdateinit = date("Y-m-d  H:i:s");
598
-		   $smsdate = $smsdateinit . " " . $gmtind;
599
-
600
-		   $subject = "New ". $smsormmstw ." message received";
601
-
602
-                   $messagetextnltw = str_replace("\n", "<br>", $messagetexttw);
603
-
604
-		   if ($includemessageinemail == 0) {
605
-		       $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>";
606
-		   } else {
607
-		       $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>";
608
-		   }
609
-
610
-                   $messagefin = chunk_split(base64_encode($message));
611
-
612
-		   $headers = "MIME-Version: 1.0" . "\r\n";
613
-		   $headers .= "Content-type: text/html; charset=UTF-8" . "\r\n";
614
-                   $headers .= "Content-Transfer-Encoding: base64" . "\r\n";
615
-
616
-		   // Set the email sender
617
-		   $headers .= "From: " . $emailaddress . "\r\n";
618
-		   $headers .= "Reply-To: " . $emailaddress . "\r\n";
619
-
620
-		   mail($emailaddress, $subject, $messagefin, $headers);
621
-	       }
622
-
623
-               exit();
624
-
625
-           } else { exit(); }
626
-
627
-       } else { exit(); }
628
-
629
-    }
630
-
631
-
632
-    /**
633
-     * @NoAdminRequired
634
-     * @NoCSRFRequired
635
-     * @PublicPage
636
-     */
637
-    public function receivesmsflow() {
638
-
639
-       $flowdrurl = $_SERVER['REQUEST_SCHEME'] . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
640
-
641
-       $receivesms = file_get_contents('php://input');
642
-       $recsmsarr = json_decode($receivesms, true);
643
-
644
-       $ncuserforflowrec = $this->service->getuserbyflowrecwhurl($flowdrurl);
645
-
646
-       if ($ncuserforflowrec != '' && $ncuserforflowrec != null && $ncuserforflowrec != 'undefined') {
647
-
648
-           $messageidfl = $recsmsarr['data']['id'];
649
-
650
-           $messagedatefl = date("Y-m-d H:i:s");
651
-
652
-           $messagefromflpre = $recsmsarr['data']['attributes']['from'];
653
-           if (substr($messagefromflpre, 0, 1) == '+') { $messagefromfl = $messagefromflpre; } else { $messagefromfl = '+' . $messagefromflpre; }
654
-
655
-           $messagetofl = "Flowroute: +" . $recsmsarr['data']['attributes']['to'];
656
-
657
-           // Check if the message is a MMS
658
-           if ($recsmsarr['data']['attributes']['is_mms'] == true) {
659
-
660
-               $includedFiles = '';
661
-               for ($k = 0; $k < count($recsmsarr['included']); $k++) {
662
-                    $includedFiles .= $recsmsarr['included'][$k]['attributes']['url'] . "<br><br>";
663
-               }
664
-               $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;
665
-               $ismmsfl = 1;
666
-           } else {
667
-               $messagetextfl = $recsmsarr['data']['attributes']['body'];
668
-               $ismmsfl = 0;
669
-           }
670
-
671
-           $recmessagearr = [$messageidfl, $messagedatefl, $messagefromfl, $messagetofl, $messagetextfl];
672
-
673
-           $this->service->insertrecsms($ncuserforflowrec, $recmessagearr);
674
-
675
-	   // Send notifications
676
-	   $nameofhost = exec("hostname");
677
-
678
-           $smsapicred = $this->service->getapicredentials($ncuserforflowrec);
679
-	   $flownotify = $smsapicred[12];
680
-	   $emailaddress = $smsapicred[13];
681
-	   $includemessageinemail = $smsapicred[14];
682
-
683
-           if ($ismmsfl == 0) { $smsormmsfl = "SMS"; } else { $smsormmsfl = "MMS"; }
684
-
685
-	   if ($flownotify != 0 ) {
686
-	       $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.'");
687
-	   }
688
-
689
-	   if ($emailaddress != '') {
690
-
691
-	       $gmtind = "UTC " . date('P');
692
-	       $smsdateinit = date("Y-m-d  H:i:s");
693
-	       $smsdate = $smsdateinit . " " . $gmtind;
694
-
695
-	       $subject = "New ". $smsormmsfl ." message received";
696
-
697
-               $messagetextnlfl = str_replace("\n", "<br>", $messagetextfl);
698
-
699
-	       if ($includemessageinemail == 0) {
700
-	           $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>";
701
-	       } else {
702
-	           $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>";
703
-	       }
704
-
705
-               $messagefin = chunk_split(base64_encode($message));
706
-
707
-	       $headers = "MIME-Version: 1.0" . "\r\n";
708
-	       $headers .= "Content-type: text/html; charset=UTF-8" . "\r\n";
709
-               $headers .= "Content-Transfer-Encoding: base64" . "\r\n";
710
-
711
-	       // Set the email sender
712
-	       $headers .= "From: " . $emailaddress . "\r\n";
713
-	       $headers .= "Reply-To: " . $emailaddress . "\r\n";
714
-
715
-	       mail($emailaddress, $subject, $messagefin, $headers);
716
-	   }
717
-
718
-           return http_response_code(200);
719
-
720
-       } else { return "access denied"; }
721
-
722
-    }
723
-}
724 0
deleted file mode 100644
... ...
@@ -1,1035 +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
-
52
-
53
-
54
-class SmsrelentlessController extends Controller {
55
-
56
-    private $service;
57
-    private $config;
58
-    private $userId;
59
-    private $folder;
60
-    private $filesystem;
61
-    private $view;
62
-    private $urlGenerator;
63
-    private $shareManager;
64
-
65
-    public function __construct($appName, IRequest $request, SmsrelentlessService $service, IConfig $config, $userId, Folder $folder, Filesystem $filesystem, View $view, IURLGenerator $urlGenerator, IManager $shareManager) {
66
-        parent::__construct($appName, $request);
67
-        $this->service = $service;
68
-        $this->config = $config;
69
-        $this->userId = $userId;
70
-        $this->folder = $folder;
71
-        $this->filesystem = $filesystem;
72
-        $this->view = $view;
73
-	$this->urlGenerator = $urlGenerator;
74
-	$this->shareManager = $shareManager;
75
-    }
76
-
77
-
78
-    /**
79
-     * @NoAdminRequired
80
-     */
81
-    public function object_to_array($obj) {
82
-        if(is_object($obj)) $obj = (array)$this->dismount($obj);
83
-        if(is_array($obj)) {
84
-           $new = array();
85
-           foreach($obj as $key => $val) {
86
-               $new[$key] = $this->object_to_array($val);
87
-           }
88
-        }
89
-        else $new = $obj;
90
-        return $new;
91
-    }
92
-
93
-
94
-    /**
95
-     * @NoAdminRequired
96
-     */
97
-    public function dismount($object) {
98
-        $reflectionClass = new ReflectionClass(get_class($object));
99
-        $array = array();
100
-        foreach ($reflectionClass->getProperties() as $property) {
101
-           $property->setAccessible(true);
102
-           $array[$property->getName()] = $property->getValue($object);
103
-           $property->setAccessible(false);
104
-        }
105
-        return $array;
106
-    }
107
-
108
-
109
-    /**
110
-     * @NoAdminRequired
111
-     */
112
-    public function getbalancetel($userId) {
113
-
114
-        $telsmsapicred = $this->service->getapicredentials($this->userId);
115
-
116
-        $telapikey = $telsmsapicred[0];
117
-        $ch = curl_init();
118
-        $headerstel = array("Content-Type: application/json", "Accept: application/json", "Authorization: Bearer ".$telapikey);
119
-
120
-        curl_setopt($ch, CURLOPT_URL, "https://api.telnyx.com/v2/balance");
121
-        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
122
-        curl_setopt($ch, CURLOPT_HTTPHEADER, $headerstel);
123
-        $responsetel = curl_exec($ch);
124
-        $recdatatel = json_decode($responsetel, TRUE);
125
-        $telbalresponse = $recdatatel['data']['balance'];
126
-        $currentbalancetel = round(floatval($telbalresponse), 3);
127
-        curl_close($ch);
128
-
129
-        return $currentbalancetel;
130
-    }
131
-
132
-
133
-    /**
134
-     * @NoAdminRequired
135
-     */
136
-    public function getbalancenex($userId) {
137
-
138
-        $smsapicred = $this->service->getapicredentials($this->userId);
139
-        $smsapikey = $smsapicred[5];
140
-        $smsapisecret = $smsapicred[6];
141
-
142
-        if ($smsapikey == '' || $smsapisecret == '') {
143
-            $currentbalancenex = "N/A";
144
-        } else {
145
-            $getmesdata = "https://".$smsapikey.":".$smsapisecret."@api.plivo.com/v1/Account/".$smsapikey."/";
146
-            $mesdata = file_get_contents($getmesdata);
147
-            $datainit = json_decode($mesdata);
148
-            $balancenex = $datainit->cash_credits;
149
-            $currentbalancenex = round(floatval($balancenex), 3);
150
-        }
151
-        return $currentbalancenex;
152
-    }
153
-
154
-
155
-    /**
156
-     * @NoAdminRequired
157
-     */
158
-    public function getbalancetwil($userId) {
159
-
160
-        $smsapicred = $this->service->getapicredentials($this->userId);
161
-        $smsapisid = $smsapicred[15];
162
-        $smsapitoken = $smsapicred[16];
163
-
164
-        if ($smsapisid == '' || $smsapitoken == '') {
165
-            $currentbalancetwil = "N/A";
166
-        } else {
167
-
168
-            $twilbalance = json_decode(file_get_contents("https://".$smsapisid.":".$smsapitoken."@api.twilio.com/2010-04-01/Accounts/".$smsapisid."/Balance.json"));
169
-            $balancetwil = $twilbalance->balance;
170
-
171
-            $currentbalancetwil = round(floatval($balancetwil), 3);
172
-        }
173
-        return $currentbalancetwil;
174
-    }
175
-
176
-
177
-    /**
178
-     * @NoAdminRequired
179
-     */
180
-    public function getbalanceflow($userId) {
181
-
182
-        $currentbalanceflow = 'n/a';
183
-
184
-        return $currentbalanceflow;
185
-    }
186
-
187
-
188
-    /**
189
-     * @NoAdminRequired
190
-     */
191
-    public function getsmsnumbers($userId) {
192
-
193
-        $smsapicred = $this->service->getapicredentials($this->userId);
194
-
195
-        $telnyxkey = $smsapicred[0];
196
-
197
-        $nexapikey = $smsapicred[5];
198
-        $nexapisecret = $smsapicred[6];
199
-
200
-        $twilapikey = $smsapicred[15];
201
-        $twilapisecret = $smsapicred[16];
202
-
203
-        $flowapikey = $smsapicred[20];
204
-        $flowapisecret = $smsapicred[21];
205
-
206
-        $telsendernameinit = $smsapicred[9];
207
-        $nexsendernameinit = $smsapicred[10];
208
-        $twilsendernameinit = $smsapicred[19];
209
-
210
-        $telsendername = "Tx: " . $telsendernameinit;
211
-        $nexsendername = "Pl: " . $nexsendernameinit;
212
-        $twilsendername = "Tw: " . $twilsendernameinit;
213
-
214
-        // Get Telnyx phone numbers
215
-        if ($telnyxkey != '') {
216
-
217
-           \Telnyx\Telnyx::setApiKey($telnyxkey);
218
-           $telnumbers = \Telnyx\MessagingPhoneNumber::All();
219
-
220
-           $telnumbersarr = $this->object_to_array($telnumbers);
221
-           $telnmbrs = [];
222
-
223
-           foreach ($telnumbersarr['_originalValues'] as $nmbkey => $nmbvalue) {
224
-              if (is_int($nmbkey)) {
225
-                 foreach ($nmbvalue as $nkey => $nvalue) {
226
-                    if ($nkey == 'phone_number') {
227
-                       $telnmbrs[] = "Tx: " . $nvalue;
228
-                    }
229
-                 }
230
-              }
231
-           }
232
-
233
-        } else { $telnmbrs = []; }
234
-
235
-        // Get Plivo phone numbers
236
-        if ($nexapikey != '' && $nexapisecret != '') {
237
-
238
-           $getacdata = "https://".$nexapikey.":".$nexapisecret."@api.plivo.com/v1/Account/".$nexapikey."/Number/";
239
-           $acdata = file_get_contents($getacdata);
240
-           $datainit = json_decode($acdata, true);
241
-
242
-           $findata = $this->object_to_array($datainit);
243
-
244
-           $nexcurrentnmbrs = [];
245
-
246
-           foreach ($findata['objects'] as $smskey => $smsvalue) {
247
-                   if (is_array($smsvalue)) {
248
-                         foreach ($smsvalue as $smskey2 => $smsvalue2) {
249
-                               if ($smskey2 == 'number') {
250
-                                   $nexcurrentnmbrs[] = "Pl: +" . $smsvalue2;
251
-                               }
252
-                         }
253
-                   }
254
-           }
255
-
256
-
257
-        } else { $nexcurrentnmbrs = []; }
258
-
259
-        // Get Twilio phone numbers
260
-        if ($twilapikey != '' && $twilapisecret != '') {
261
-
262
-            $twilnumbers = json_decode(file_get_contents("https://".$twilapikey.":".$twilapisecret."@api.twilio.com/2010-04-01/Accounts/".$twilapikey."/IncomingPhoneNumbers.json"), true);
263
-            $twilactivenmbrs = $twilnumbers['incoming_phone_numbers'];
264
-
265
-            $twilcurrentnmbrs = [];
266
-            foreach ($twilactivenmbrs as $twnbkey => $twnbvalue) {
267
-                 if (is_array($twnbvalue)) {
268
-                     foreach ($twnbvalue as $twfkey => $twfvalue) {
269
-                          if ($twfkey == 'phone_number') {
270
-                              $twilcurrentnmbrs[] = "Tw: " . $twfvalue;
271
-                          }
272
-                     }
273
-                 }
274
-            }
275
-
276
-        } else { $twilcurrentnmbrs = []; }
277
-
278
-        // Get Flowroute phone numbers
279
-        if ($flowapikey != '' && $flowapisecret != '') {
280
-
281
-            $flnbrsresult = json_decode(file_get_contents("https://".$flowapikey.":".$flowapisecret."@api.flowroute.com/v2/numbers"));
282
-            $flnbrsarr = $flnbrsresult->data;
283
-            $flowcurrentnmbrs = [];
284
-            foreach ($flnbrsarr as $flkey => $flitem) {
285
-                     $flowcurrentnmbrs[] = "Fl: +" . $flitem->id;
286
-            }
287
-
288
-        } else { $flowcurrentnmbrs = []; }
289
-
290
-
291
-        $telsenderarr = [0 => $telsendername];
292
-        $nexsenderarr = [0 => $nexsendername];
293
-        $twilsenderarr = [0 => $twilsendername];
294
-
295
-        $currentnmbrs = array_merge($telnmbrs, $nexcurrentnmbrs, $twilcurrentnmbrs, $flowcurrentnmbrs, $telsenderarr, $nexsenderarr, $twilsenderarr);
296
-
297
-        return $currentnmbrs;
298
-    }
299
-
300
-
301
-    /**
302
-     * @NoAdminRequired
303
-     */
304
-    public function cleantempdir($userId) {
305
-
306
-        // Create the temporary folder if it doesn't exist
307
-        if ($this->folder->nodeExists('SMS_Relentless/temp_files') == false) {
308
-            $this->folder->newFolder('SMS_Relentless/temp_files');
309
-        }
310
-        $datadir = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/';
311
-        $targetdir = $datadir . $this->userId . "/files/SMS_Relentless/temp_files";
312
-        $fileSystemIterator = new FilesystemIterator($targetdir);
313
-
314
-        $dirfiles = [];
315
-        foreach ($fileSystemIterator as $fileInfo){
316
-                 $dirfiles[] = $fileInfo->getFilename();
317
-        }
318
-
319
-        foreach ($dirfiles as $key => $indfile) {
320
-                 $thisuserroot = $this->view->getRoot();
321
-                 $tempfile = $thisuserroot . "/SMS_Relentless/temp_files/" . $indfile;
322
-                 $removetmpfile = $this->filesystem->unlink($tempfile);
323
-        }
324
-     }
325
-
326
-
327
-    /**
328
-     * @NoAdminRequired
329
-     */
330
-    public function uploadNumbersFile($userId, $uploadfileforsms) {
331
-
332
-        // Create the temporary folder if it doesn't exist
333
-        if ($this->folder->nodeExists('SMS_Relentless/temp_files') == false) {
334
-            $this->folder->newFolder('SMS_Relentless/temp_files');
335
-        }
336
-
337
-        // First delete any file that has been previously uploaded
338
-        $datadir = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/';
339
-        $targetdir = $datadir . $this->userId . "/files/SMS_Relentless/temp_files";
340
-        $fileSystemIterator = new FilesystemIterator($targetdir);
341
-
342
-        $dirfiles = [];
343
-        foreach ($fileSystemIterator as $fileInfo){
344
-                 $dirfiles[] = $fileInfo->getFilename();
345
-        }
346
-
347
-        foreach ($dirfiles as $key => $indfile) {
348
-                 $thisuserroot = $this->view->getRoot();
349
-                 $tempfile = $thisuserroot . "/SMS_Relentless/temp_files/" . $indfile;
350
-                 $removetmpfile = $this->filesystem->unlink($tempfile);
351
-        }
352
-
353
-        // Upload the new file
354
-        $fileContent = file_get_contents($_FILES['uploadfileforsms']['tmp_name']);
355
-        $fileName = $_FILES['uploadfileforsms']['name'];
356
-
357
-        $userroot = $this->view->getRoot();
358
-        $targetfile = $userroot . "/SMS_Relentless/temp_files/" . $fileName;
359
-
360
-        $target = $this->folder->newFile($targetfile);
361
-        $target->putContent($fileContent);
362
-
363
-        // Extract the phone numbers from the file
364
-        $numberarraysec = str_replace(array(";", "|", "\r\n", "\r", "\n", "\t"), ",", $fileContent);
365
-        $numberarraytert = preg_replace("/[^0-9,]/", "", $numberarraysec);
366
-        $numberarrayfourth = explode(",", $numberarraytert);
367
-        $numberarrayfifth = array_filter(array_map('trim', $numberarrayfourth));
368
-        $numberarray = array_unique($numberarrayfifth);
369
-
370
-        return $numberarray;
371
-    }
372
-
373
-
374
-    /**
375
-     * @NoAdminRequired
376
-     */
377
-    public function uploadfile($uploadfileformms) {
378
-
379
-           $fileContent = file_get_contents($_FILES['uploadfileformms']['tmp_name']);
380
-           $fileName = $_FILES['uploadfileformms']['name'];
381
-           $fileSizeinit = $_FILES['uploadfileformms']['size'];
382
-           $fileSize = $fileSizeinit / 1024;
383
-
384
-           if ($this->folder->nodeExists('SMS_Relentless/temp_files') == false) {
385
-               $this->folder->newFolder('SMS_Relentless/temp_files');
386
-           }
387
-
388
-           $userroot = $this->view->getRoot();
389
-           $targetfile = $userroot . "/SMS_Relentless/temp_files/" . $fileName;
390
-
391
-           $target = $this->folder->newFile($targetfile);
392
-           $target->putContent($fileContent);
393
-
394
-           // Get the cumulative files size of the uploaded files
395
-           $datadir = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/';
396
-           $targetdir = $datadir . $this->userId . "/files/SMS_Relentless/temp_files";
397
-
398
-           $fileSystemIterator = new FilesystemIterator($targetdir);
399
-
400
-           $dirfiles = [];
401
-           foreach ($fileSystemIterator as $fileInfo){
402
-                    $dirfiles[] = $fileInfo->getFilename();
403
-           }
404
-
405
-           $totalflsizeinit = 0;
406
-           foreach ($dirfiles as $key => $indfile) {
407
-                    $fileSizeinit = $this->filesystem->filesize($userroot . "/SMS_Relentless/temp_files/" . $indfile);
408
-                    $mbSize = round($fileSizeinit / 1024, 4);
409
-                    $totalflsizeinit += $mbSize;
410
-           }
411
-
412
-           $totalflsize = round($totalflsizeinit, 4);
413
-
414
-           return $totalflsize;
415
-    }
416
-
417
-
418
-    /**
419
-     * @NoAdminRequired
420
-     */
421
-    public function pickfile($path) {
422
-
423
-           if ($this->folder->nodeExists('SMS_Relentless/temp_files') == false) {
424
-               $this->folder->newFolder('SMS_Relentless/temp_files');
425
-           }
426
-
427
-           $datadir = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/';
428
-
429
-           $fltgt = $datadir . $this->userId . "/files" . $path;
430
-
431
-           $fileContent = file_get_contents($fltgt);
432
-
433
-           $pkfilesize = round(filesize($fltgt) / 1024, 4);
434
-
435
-           $patharr = explode("/", $path);
436
-
437
-           $revarr = array_reverse($patharr);
438
-
439
-           $relflpath = "/SMS_Relentless/temp_files/" . $revarr[0]; 
440
-
441
-           $target = $this->folder->newFile($relflpath);
442
-
443
-           $target->putContent($fileContent);
444
-
445
-           // Get the cumulative files size of the uploaded files
446
-           $targetdir = $datadir . $this->userId . "/files/SMS_Relentless/temp_files";
447
-
448
-           $fileSystemIterator = new FilesystemIterator($targetdir);
449
-
450
-           $dirfiles = [];
451
-           foreach ($fileSystemIterator as $fileInfo) {
452
-                    $dirfiles[] = $fileInfo->getFilename();
453
-           }
454
-
455
-           $totalflsizeinit = 0;
456
-
457
-           foreach ($dirfiles as $key => $indfile) {
458
-
459
-                    $fileSizeinit = $this->filesystem->filesize("/SMS_Relentless/temp_files/" . $indfile);
460
-                    $mbSize = round($fileSizeinit / 1024, 4);
461
-                    $totalflsizeinit += $mbSize;
462
-           }
463
-
464
-           $totalflsize = round($totalflsizeinit, 4);
465
-
466
-           $pickresult = [$totalflsize, $pkfilesize];
467
-
468
-           return $pickresult;
469
-    }
470
-
471
-
472
-    /**
473
-     * @NoAdminRequired
474
-     */
475
-    public function removeupfile($removedfilename) {
476
-
477
-           $tmpfl = "/" . $this->userId . "/files/SMS_Relentless/temp_files/" . $removedfilename;
478
-
479
-           $removefile = $this->view->unlink($tmpfl);
480
-
481
-           // Get the cumulative files size of the uploaded files
482
-           $datadir = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/';
483
-           $targetdir = $datadir . $this->userId . "/files/SMS_Relentless/temp_files";
484
-           $fileSystemIterator = new FilesystemIterator($targetdir);
485
-
486
-           $dirfiles = [];
487
-           foreach ($fileSystemIterator as $fileInfo){
488
-                    $dirfiles[] = $fileInfo->getFilename();
489
-           }
490
-
491
-           $totalflsizeinit = 0;
492
-
493
-           foreach ($dirfiles as $key => $indfile) {
494
-                    $fileSizeinit = $this->filesystem->filesize("/SMS_Relentless/temp_files/" . $indfile);
495
-                    $mbSize = round($fileSizeinit / 1024, 4);
496
-                    $totalflsizeinit += $mbSize;
497
-           }
498
-
499
-           $totalflsize = round($totalflsizeinit, 4);
500
-
501
-           return $totalflsize;
502
-    }
503
-
504
-
505
-    /**
506
-     * @NoAdminRequired
507
-     */
508
-    public function sendsmstel($userId, $receiversPhoneNbs, $fromsender, $waitinterval, $sentsmstext, $ismms, $mmsfiles) {
509
-         $telsmsapicred = $this->service->getapicredentials($this->userId);
510
-         $telnyxkey = $telsmsapicred[0];
511
-         $teldelrecurl = $telsmsapicred[3];
512
-         $messagingprofid = $telsmsapicred[4];
513
-
514
-         \Telnyx\Telnyx::setApiKey($telnyxkey);
515
-
516
-         $microinterval = $waitinterval * 1000;
517
-
518
-         foreach ($receiversPhoneNbs as $keytel => $tonumber) {
519
-
520
-             usleep($microinterval);
521
-
522
-             $messagedate = date("Y-m-d H:i:s");
523
-
524
-             if ($ismms == 0) {
525
-
526
-                 if (preg_match('/[A-Za-z]+/', $fromsender)) {
527
-                     $message = \Telnyx\Message::Create(["from" => $fromsender, "to" => $tonumber, "text" => $sentsmstext, "webhook_url" => $teldelrecurl, "messaging_profile_id" => $messagingprofid]);
528
-                 } else {
529
-                     $message = \Telnyx\Message::Create(["from" => $fromsender, "to" => $tonumber, "text" => $sentsmstext, "webhook_url" => $teldelrecurl]);
530
-                 }
531
-
532
-                 $messagetexttel = $sentsmstext;
533
-
534
-             } else {
535
-
536
-                 $mediaURLarr = [];
537
-                 $includedMediaFiles = '';
538
-
539
-                 for ($p = 0; $p < count($mmsfiles); $p++ ) {
540
-
541
-                      $userroot = $this->view->getRoot();
542
-                      $filetoshare = $userroot . "/SMS_Relentless/temp_files/".$mmsfiles[$p]."";
543
-
544
-                      $flsharetarget = $this->folder->newFile($filetoshare);
545
-
546
-	              $share = $this->shareManager->newShare();
547
-	              $share->setNode($flsharetarget);
548
-	              $share->setPermissions(Constants::PERMISSION_READ);
549
-	              $share->setShareType(\OC\Share\Constants::SHARE_TYPE_LINK);
550
-	              $share->setSharedBy($this->userId);
551
-                      $expirydate = DateTime::createFromFormat('Y-m-d H:i:s', $messagedate);
552
-                      $expirydate->add(new \DateInterval('P1D'));
553
-                      $share->setExpirationDate($expirydate);
554
-                      $shared = $this->shareManager->createShare($share);
555
-                      $shareToken = $shared->getToken();
556
-
557
-                      $mediaURLarr[] = "https://cloud.webpublicist.net/s/".$shareToken."/download/".$mmsfiles[$p]."";
558
-                      $includedMediaFiles .= "https://cloud.webpublicist.net/s/".$shareToken."/download/".$mmsfiles[$p] . "<br><br>";
559
-                 }
560
-
561
-                 if (preg_match('/[A-Za-z]+/', $fromsender)) {
562
-                     $message = \Telnyx\Message::Create(["from" => $fromsender, "to" => $tonumber, "text" => $sentsmstext, "webhook_url" => $teldelrecurl, "messaging_profile_id" => $messagingprofid, "subject" => "MMS", "media_urls" => $mediaURLarr]);
563
-                 } else {
564
-                     $message = \Telnyx\Message::Create(["from" => $fromsender, "to" => $tonumber, "text" => $sentsmstext, "webhook_url" => $teldelrecurl, "subject" => "MMS", "media_urls" => $mediaURLarr]);
565
-                 }
566
-
567
-                 $messagetexttel = $sentsmstext . "<br><br><br>--- File(s) included in MMS ---<br><br>" . $includedMediaFiles;
568
-             }
569
-
570
-             $messageid = $message['id'];
571
-             $messagefrom = "Telnyx: " . $fromsender;
572
-             $messageto = $tonumber;
573
-             $messagenetwork = null;
574
-             $messageprice = null;
575
-             $messagestatus = $message['to'][0]['status'];
576
-             $messagedelivery = null;
577
-
578
-             $sentmessagearr = [$messageid, $messagedate, $messagefrom, $messageto, $messagenetwork, $messageprice, $messagestatus, $messagedelivery, $messagetexttel];
579
-
580
-             $this->service->insertsentsms($this->userId, $sentmessagearr);
581
-
582
-         }
583
-    }
584
-
585
-
586
-    /**
587
-     * @NoAdminRequired
588
-     */
589
-    public function sendsmsnex($userId, $receiversPhoneNbs, $fromsender, $waitinterval, $sentsmstext, $ismms, $mmsfiles) {
590
-
591
-         $smsapicred = $this->service->getapicredentials($this->userId);
592
-
593
-         $smsapikey = $smsapicred[5];
594
-         $smsapisecret = $smsapicred[6];
595
-         $smsapideliveryrecurl = $smsapicred[8];
596
-
597
-         $microinterval = $waitinterval * 1000;
598
-
599
-         foreach ($receiversPhoneNbs as $keynex => $tonumber) {
600
-
601
-             usleep($microinterval);
602
-
603
-             $messagedatepl = date("Y-m-d H:i:s");
604
-
605
-             if ($ismms == 0) {
606
-
607
-                 $client = new RestClient($smsapikey, $smsapisecret);
608
-                 $response = $client->messages->create($fromsender,[$tonumber],$sentsmstext,["url" => $smsapideliveryrecurl]);
609
-                 $messagetextpl = $sentsmstext;
610
-	         $messageidinit = $response->getmessageUuid(0);
611
-                 $messageid = $messageidinit[0];
612
-
613
-                 if (property_exists($response, 'error')) { 
614
-                     $messagestatus = "Error: " . $response->error;
615
-                 } else { $messagestatus = 'The message has been accepted for delivery.'; }
616
-
617
-             } else {
618
-
619
-                 $mediaURLarr = [];
620
-                 $includedMediaFiles = '';
621
-
622
-                 for ($p = 0; $p < count($mmsfiles); $p++ ) {
623
-
624
-                      $userroot = $this->view->getRoot();
625
-                      $filetoshare = $userroot . "/SMS_Relentless/temp_files/".$mmsfiles[$p]."";
626
-
627
-                      $flsharetarget = $this->folder->newFile($filetoshare);
628
-
629
-	              $share = $this->shareManager->newShare();
630
-	              $share->setNode($flsharetarget);
631
-	              $share->setPermissions(Constants::PERMISSION_READ);
632
-	              $share->setShareType(\OC\Share\Constants::SHARE_TYPE_LINK);
633
-	              $share->setSharedBy($this->userId);
634
-                      $expirydate = DateTime::createFromFormat('Y-m-d H:i:s', $messagedatepl);
635
-                      $expirydate->add(new \DateInterval('P1D'));
636
-                      $share->setExpirationDate($expirydate);
637
-                      $shared = $this->shareManager->createShare($share);
638
-                      $shareToken = $shared->getToken();
639
-
640
-                      $mediaURLarr[] = "https://cloud.webpublicist.net/s/".$shareToken."/download/".$mmsfiles[$p]."";
641
-                      $includedMediaFiles .= "https://cloud.webpublicist.net/s/".$shareToken."/download/".$mmsfiles[$p] . "<br><br>";
642
-                 }
643
-
644
-		 $datatosendpl = ["src" => $fromsender, "dst" => $tonumber, "text" => $sentsmstext, "url" => $smsapideliveryrecurl, "type" => "mms", "media_urls" => $mediaURLarr];
645
-		 $postedparamspl = json_encode($datatosendpl);
646
-
647
-		 $chpl = curl_init();
648
-		 curl_setopt($chpl, CURLOPT_URL, 'https://'.$smsapikey.':'.$smsapisecret.'@api.plivo.com/v1/Account/'.$smsapikey.'/Message/');
649
-		 curl_setopt($chpl, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
650
-		 curl_setopt($chpl, CURLOPT_TIMEOUT, 300);
651
-		 curl_setopt($chpl, CURLOPT_RETURNTRANSFER, 1);
652
-		 curl_setopt($chpl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
653
-		 curl_setopt($chpl, CURLOPT_POST, 1);
654
-		 curl_setopt($chpl, CURLOPT_POSTFIELDS, $postedparamspl);
655
-		 $resultpl = curl_exec ($chpl);
656
-		 $statusCodepl = curl_getinfo($chpl, CURLINFO_HTTP_CODE);
657
-		 curl_close ($chpl);
658
-
659
-		 $decresultpl = json_decode($resultpl);
660
-
661
-                 if (property_exists($decresultpl, 'message_uuid')) {
662
-                     $messageidinit = $decresultpl->message_uuid;
663
-                     $messageid = $messageidinit[0];
664
-                 }
665
-
666
-	         if (in_array($statusCodepl, [200, 201, 202, 203, 204, 205, 206])) {
667
-
668
-                     if (property_exists($decresultpl, 'error')) {
669
-                         $messagestatus = "Error: " . $decresultpl->error;
670
-                     } else { $messagestatus = 'The message has been accepted for delivery.'; }
671
-
672
-                 } else { $messagestatus = 'An error occurred while trying to send the message.'; }
673
-
674
-                 $messagetextpl = $sentsmstext . "<br><br><br>--- File(s) included in MMS ---<br><br>" . $includedMediaFiles;
675
-             }
676
-
677
-             if (preg_match('/[A-Za-z]+/', $fromsender)) {
678
-                 $messagefrom = "Plivo: " . $fromsender;
679
-             } else { $messagefrom = "Plivo: +" . $fromsender; }
680
-
681
-             $messageto = $tonumber;
682
-             $messagenetwork = '';
683
-             $messageprice = '';
684
-
685
-             $messagedelivery = '';
686
-
687
-             $sentmessagearr = [$messageid, $messagedatepl, $messagefrom, $messageto, $messagenetwork, $messageprice, $messagestatus, $messagedelivery, $messagetextpl];
688
-
689
-             $this->service->insertsentsms($this->userId, $sentmessagearr);
690
-         }
691
-    }
692
-
693
-
694
-    /**
695
-     * @NoAdminRequired
696
-     */
697
-    public function sendsmstwil($userId, $receiversPhoneNbs, $fromsender, $waitinterval, $sentsmstext, $ismms, $mmsfiles) {
698
-
699
-         $smsapicred = $this->service->getapicredentials($this->userId);
700
-
701
-         $sid = $smsapicred[15];
702
-         $token = $smsapicred[16];
703
-         $smsapirecurltw = $smsapicred[18];
704
-
705
-         $microinterval = $waitinterval * 1000;
706
-
707
-         foreach ($receiversPhoneNbs as $keytwil => $tonumbertw) {
708
-
709
-             usleep($microinterval);
710
-
711
-             $messagedatetw = date("Y-m-d H:i:s");
712
-
713
-             if ($ismms == 0) {
714
-
715
-                  $datatoposttw = [["To" => $tonumbertw, "From" => $fromsender, "Body" => $sentsmstext, "StatusCallback" => $smsapirecurltw]];
716
-                  $sentsmstextfintw = $sentsmstext;
717
-
718
-             } else {
719
-
720
-                 $mediaURLs = [];
721
-
722
-                 for ($p = 0; $p < count($mmsfiles); $p++ ) {
723
-
724
-                      $userroot = $this->view->getRoot();
725
-                      $filetoshare = $userroot . "/SMS_Relentless/temp_files/".$mmsfiles[$p]."";
726
-
727
-                      $flsharetarget = $this->folder->newFile($filetoshare);
728
-
729
-	              $share = $this->shareManager->newShare();
730
-	              $share->setNode($flsharetarget);
731
-	              $share->setPermissions(Constants::PERMISSION_READ);
732
-	              $share->setShareType(\OC\Share\Constants::SHARE_TYPE_LINK);
733
-	              $share->setSharedBy($this->userId);
734
-                      $expirydate = DateTime::createFromFormat('Y-m-d H:i:s', $messagedatetw);
735
-                      $expirydate->add(new \DateInterval('P1D'));
736
-                      $share->setExpirationDate($expirydate);
737
-                      $shared = $this->shareManager->createShare($share);
738
-                      $shareToken = $shared->getToken();
739
-
740
-                      $mediaURLs[] = "https://cloud.webpublicist.net/s/".$shareToken."/download/".$mmsfiles[$p]."";
741
-                 }
742
-
743
-                 $datatoposttw = [["To" => $tonumbertw, "From" => $fromsender, "Body" => $sentsmstext, "StatusCallback" => $smsapirecurltw]];
744
-                 $includedMediaFiles = '';
745
-
746
-                 for ($m = 0; $m < count($mediaURLs); $m++) {
747
-                      array_push($datatoposttw, ["MediaUrl" => $mediaURLs[$m]]);
748
-                      $includedMediaFiles .= $mediaURLs[$m] . "<br><br>";
749
-                 }
750
-
751
-                 $sentsmstextfintw = $sentsmstext . "<br><br><br>--- File(s) included in MMS ---<br><br>" . $includedMediaFiles;
752
-             }
753
-
754
-             $postedsendingfl = implode('&', array_map('http_build_query', $datatoposttw));
755
-
756
-	     $chtw = curl_init();
757
-	     curl_setopt($chtw, CURLOPT_URL, 'https://api.twilio.com/2010-04-01/Accounts/'.$sid.'/Messages.json');
758
-	     curl_setopt($chtw, CURLOPT_TIMEOUT, 300);
759
-	     curl_setopt($chtw, CURLOPT_RETURNTRANSFER, 1);
760
-	     curl_setopt($chtw, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
761
-             curl_setopt($chtw, CURLOPT_USERPWD, "$sid:$token");
762
-	     curl_setopt($chtw, CURLOPT_POST, 1);
763
-             curl_setopt($chtw, CURLOPT_POSTFIELDS, $postedsendingfl);
764
-
765
-	     $resulttw = curl_exec ($chtw);
766
-	     $statusCodetw = curl_getinfo($chtw, CURLINFO_HTTP_CODE);
767
-	     curl_close ($chtw);
768
-
769
-             $decresulttw = json_decode($resulttw);
770
-
771
-             if ($resulttw) {
772
-                 $messageidtw = $decresulttw->sid;
773
-             } else { $messageidtw = ''; }
774
-
775
-	     if (in_array($statusCodetw, [200, 201, 202, 203, 204, 205, 206])) {
776
-                 $messagestatustw = 'The message has been accepted for delivery.';
777
-             } else {
778
-                 $messagestatustw = 'An error occurred while trying to send the message.';
779
-             }
780
-
781
-             if (preg_match('/[A-Za-z]+/', $fromsender)) {
782
-                 $messagefromtw = "Twilio: " . $fromsender;
783
-             } else { $messagefromtw = "Twilio: " . $fromsender; }
784
-
785
-             $messagenetworktw = '';
786
-             $messagepricetw = '';
787
-             $messagedeliverytw = '';
788
-
789
-
790
-             $sentmessagearr = [$messageidtw, $messagedatetw, $messagefromtw, $tonumbertw, $messagenetworktw, $messagepricetw, $messagestatustw, $messagedeliverytw, $sentsmstextfintw];
791
-
792
-             $this->service->insertsentsms($this->userId, $sentmessagearr);
793
-         }
794
-
795
-    }
796
-
797
-
798
-    /**
799
-     * @NoAdminRequired
800
-     */
801
-    public function sendsmsflow($userId, $receiversPhoneNbs, $fromsender, $waitinterval, $sentsmstext, $ismms, $mmsfiles) {
802
-
803
-         $smsapicredfl = $this->service->getapicredentials($this->userId);
804
-
805
-         $flowapikey = $smsapicredfl[20];
806
-         $flowapisecret = $smsapicredfl[21];
807
-         $flowdelrecurl = $smsapicredfl[23];
808
-         $sentsmstextproc = str_replace('"','\\"', $sentsmstext);
809
-
810
-         $microinterval = $waitinterval * 1000;
811
-
812
-         foreach ($receiversPhoneNbs as $keyflow => $tonumberfl) {
813
-
814
-             usleep($microinterval);
815
-
816
-             $messagedatefl = date("Y-m-d H:i:s");
817
-
818
-             if ($ismms == 0) {
819
-
820
-                 $messagetextfinfl = $sentsmstext;
821
-                 $postedparamsfl = json_encode(["to" => $tonumberfl, "from" => $fromsender, "body" => $sentsmstextproc, "dlr_callback" => $flowdelrecurl]);
822
-
823
-             } else {
824
-
825
-		 $mediaurlsarr = [];
826
-
827
-		 for ($p = 0; $p < count($mmsfiles); $p++ ) {
828
-
829
-		      $userroot = $this->view->getRoot();
830
-		      $filetoshare = $userroot . "/SMS_Relentless/temp_files/".$mmsfiles[$p]."";
831
-
832
-		      $flsharetarget = $this->folder->newFile($filetoshare);
833
-
834
-		      $share = $this->shareManager->newShare();
835
-		      $share->setNode($flsharetarget);
836
-		      $share->setPermissions(Constants::PERMISSION_READ);
837
-		      $share->setShareType(\OC\Share\Constants::SHARE_TYPE_LINK);
838
-		      $share->setSharedBy($this->userId);
839
-                      $expirydate = DateTime::createFromFormat('Y-m-d H:i:s', $messagedatefl);
840
-                      $expirydate->add(new \DateInterval('P1D'));
841
-                      $share->setExpirationDate($expirydate);
842
-		      $shared = $this->shareManager->createShare($share);
843
-		      $shareToken = $shared->getToken();
844
-
845
-		      $mediaurlsarr[] = "https://cloud.webpublicist.net/s/".$shareToken."/download/".$mmsfiles[$p]."";
846
-		 }
847
-
848
-		 $includedMediaFiles = '';
849
-
850
-		 for ($m = 0; $m < count($mediaurlsarr); $m++) {
851
-		      $includedMediaFiles .= $mediaurlsarr[$m] . "<br><br>";
852
-		 }
853
-
854
-                 $messagetextfinfl = $sentsmstext . "<br><br><br>--- File(s) included in MMS ---<br><br>" . $includedMediaFiles;
855
-
856
-                 $postedparamsfl = json_encode(["to" => $tonumberfl, "from" => $fromsender, "body" => $sentsmstextproc, "dlr_callback" => $flowdelrecurl, "media_urls" => $mediaurlsarr]);
857
-             }
858
-
859
-
860
-	     $chfl = curl_init();
861
-	     curl_setopt($chfl, CURLOPT_URL, 'https://'.$flowapikey.':'.$flowapisecret.'@api.flowroute.com/v2.1/messages');
862
-	     curl_setopt($chfl, CURLOPT_HTTPHEADER, array("Content-Type: application/vnd.api+json"));
863
-	     curl_setopt($chfl, CURLOPT_TIMEOUT, 300);
864
-	     curl_setopt($chfl, CURLOPT_RETURNTRANSFER, 1);
865
-	     curl_setopt($chfl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
866
-	     curl_setopt($chfl, CURLOPT_POST, 1);
867
-             curl_setopt($chfl, CURLOPT_POSTFIELDS, $postedparamsfl);
868
-	     $resultfl = curl_exec ($chfl);
869
-	     $statusCode = curl_getinfo($chfl, CURLINFO_HTTP_CODE);
870
-	     curl_close ($chfl);
871
-
872
-             $decresultfl = json_decode($resultfl);
873
-
874
-             if ($resultfl) {
875
-                 $messageidfl = $decresultfl->data->id;
876
-             } else { $messageidfl = ''; }
877
-
878
-	     if (in_array($statusCode, [200, 201, 202, 203, 204, 205, 206])) {
879
-                 $messagestatusfl = 'The message has been accepted for delivery.'; 
880
-             } else { 
881
-                 $messagestatusfl = 'An error occurred while trying to send the message.'; 
882
-             }
883
-
884
-             if (preg_match('/[A-Za-z]+/', $fromsender)) {
885
-                 $messagefromfl = "Flowroute: " . $fromsender;
886
-             } else { $messagefromfl = "Flowroute: " . $fromsender; }
887
-
888
-             $messagetofl = $tonumberfl;
889
-             $messagenetworkfl = '';
890
-             $messagepricefl = '';
891
-             $messagedeliveryfl = '';
892
-
893
-             $sentmessagearr = [$messageidfl, $messagedatefl, $messagefromfl, $messagetofl, $messagenetworkfl, $messagepricefl, $messagestatusfl, $messagedeliveryfl, $messagetextfinfl];
894
-
895
-             $this->service->insertsentsms($this->userId, $sentmessagearr);
896
-         }
897
-
898
-    }
899
-
900
-
901
-    /**
902
-     * @NoAdminRequired
903
-     */
904
-    public function saveoldrecrows($userId, $oldrecRows) {
905
-
906
-           // Create the folder for removed messages if it doesn't exist
907
-           if ($this->folder->nodeExists('SMS_Relentless/removed_received_messages') == false) {
908
-               $this->folder->newFolder('SMS_Relentless/removed_received_messages');
909
-           }
910
-           $savecheck = 0;
911
-
912
-           if (count($oldrecRows) > 1) {
913
-               $msfileContent = implode("", $oldrecRows);
914
-
915
-               $delrowsdate = date("Y-m-d_H-i-s");
916
-               $msfileName = "Received_Messages_Deleted_On_" . $delrowsdate . ".csv";
917
-
918
-               $userroot = $this->view->getRoot();
919
-               $targetfile = $userroot . "/SMS_Relentless/removed_received_messages/" . $msfileName;
920
-
921
-               $target = $this->folder->newFile($targetfile);
922
-               $target->putContent($msfileContent);
923
-
924
-               if ($this->filesystem->file_get_contents($targetfile) != '') {
925
-                   $savecheck = 1;
926
-               }
927
-           }
928
-
929
-           return $savecheck;
930
-    }
931
-
932
-
933
-    /**
934
-     * @NoAdminRequired
935
-     */
936
-    public function saveoldsentrows($userId, $oldsentRows) {
937
-
938
-           // Create the folder for removed messages if it doesn't exist
939
-           if ($this->folder->nodeExists('SMS_Relentless/removed_sent_messages') == false) {
940
-               $this->folder->newFolder('SMS_Relentless/removed_sent_messages');
941
-           }
942
-           $savesentcheck = 0;
943
-
944
-           if (count($oldsentRows) > 1) {
945
-               $sntfileContent = implode("", $oldsentRows);
946
-
947
-               $delsentrowsdate = date("Y-m-d_H-i-s");
948
-               $sntfileName = "Sent_Messages_Deleted_On_" . $delsentrowsdate . ".csv";
949
-
950
-               $userroot = $this->view->getRoot();
951
-               $snttargetfile = $userroot . "/SMS_Relentless/removed_sent_messages/" . $sntfileName;
952
-
953
-               $snttarget = $this->folder->newFile($snttargetfile);
954
-               $snttarget->putContent($sntfileContent);
955
-
956
-               if ($this->filesystem->file_get_contents($snttargetfile) != '') {
957
-                   $savesentcheck = 1;
958
-               }
959
-           }
960
-
961
-           return $savesentcheck;
962
-    }
963
-
964
-
965
-    /**
966
-     * @NoAdminRequired
967
-     */
968
-    public function getreceivedtable($userId) {
969
-           return $this->service->getreceivedtable($this->userId);
970
-    }
971
-
972
-    /**
973
-     * @NoAdminRequired
974
-     */
975
-    public function getreceivedtablefordel($userId) {
976
-           return $this->service->getreceivedtablefordel($this->userId);
977
-    }
978
-
979
-    /**
980
-     * @NoAdminRequired
981
-     */
982
-    public function removerecrows($userId, $recmessagedbIDs) {
983
-           return $this->service->removerecrows($this->userId, $recmessagedbIDs);
984
-    }
985
-
986
-    /**
987
-     * @NoAdminRequired
988
-     */
989
-    public function getsenttable($userId) {
990
-           return $this->service->getsenttable($this->userId);
991
-    }
992
-
993
-    /**
994
-     * @NoAdminRequired
995
-     */
996
-    public function getsenttablefordel($userId) {
997
-           return $this->service->getsenttablefordel($this->userId);
998
-    }
999
-
1000
-    /**
1001
-     * @NoAdminRequired
1002
-     */
1003
-    public function removesentrows($userId, $sentmessagedbIDs) {
1004
-           return $this->service->removesentrows($this->userId, $sentmessagedbIDs);
1005
-    }
1006
-
1007
-    /**
1008
-     * @NoAdminRequired
1009
-     */
1010
-    public function getmessagesperpage($userId) {
1011
-           return $this->service->getmessagesperpage($this->userId);
1012
-    }
1013
-
1014
-    /**
1015
-     * @NoAdminRequired
1016
-     */
1017
-    public function getdelrecsettings($userId) {
1018
-           return $this->service->getdelrecsettings($this->userId);
1019
-    }
1020
-
1021
-    /**
1022
-     * @NoAdminRequired
1023
-     */
1024
-    public function getsettings($userId) {
1025
-           return $this->service->getsettings($this->userId);
1026
-    }
1027
-
1028
-    /**
1029
-     * @NoAdminRequired
1030
-     */
1031
-    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) {
1032
-           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);
1033
-    }
1034
-
1035
-}
1036 0
deleted file mode 100644
... ...
@@ -1,712 +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\DB\QueryBuilder\IQueryBuilder;
29
-use OCP\IDBConnection;
30
-use OCP\Security\ICrypto;
31
-use OCP\AppFramework\ApiController;
32
-use OCP\AppFramework\Controller;
33
-use OCP\IRequest;
34
-use OCP\IGroupManager;
35
-
36
-
37
-class SmsrelentlessService {
38
-
39
-     private $connection;
40
-     private $crypto;
41
-     private $groupManager;
42
-
43
-     public function __construct(IDBConnection $connection, ICrypto $crypto, IGroupManager $groupManager) {
44
-
45
-                $this->connection = $connection;
46
-                $this->crypto = $crypto;
47
-                $this->groupManager = $groupManager;
48
-     }
49
-
50
-
51
-     /**
52
-      * @NoAdminRequired
53
-      *
54
-      */
55
-     public function insertrecsms($userId, $recmessagearr) {
56
-
57
-            $escapedmessagepre = $recmessagearr[4];
58
-            $escapedmessage = nl2br($escapedmessagepre);
59
-
60
-            $sql = $this->connection->prepare('
61
-				INSERT INTO `*PREFIX*sms_relent_received`
62
-					(`user_id`, `message_id`, `date`, `from`, `to`, `message`)
63
-				VALUES (?, ?, ?, ?, ?, ?)
64
-			');
65
-	    $sql->execute([$userId, $recmessagearr[0], $recmessagearr[1], $recmessagearr[2], $recmessagearr[3], $escapedmessage]);
66
-     }
67
-
68
-
69
-     /**
70
-      * @NoAdminRequired
71
-      *
72
-      */
73
-     public function insertsentsms($userId, $sentmessagearr) {
74
-
75
-            $textwithnl = nl2br($sentmessagearr[8]);
76
-            $sql = $this->connection->prepare('
77
-				INSERT INTO `*PREFIX*sms_relent_sent`
78
-					(`user_id`, `message_id`, `date`, `from`, `to`, `network`, `price`, `status`, `deliveryreceipt`, `message`)
79
-				VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
80
-			');
81
-	    $sql->execute([$userId, $sentmessagearr[0], $sentmessagearr[1], $sentmessagearr[2], $sentmessagearr[3], $sentmessagearr[4], $sentmessagearr[5], $sentmessagearr[6], 
82
-                           $sentmessagearr[7], $textwithnl]);
83
-     }
84
-
85
-
86
-     /**
87
-      * @NoAdminRequired
88
-      *
89
-      */
90
-     public function updatedeliverystatustel($ncuserfortelnyxdel, $messageid, $network, $messageprice, $messagestatus, $deliverystatus) {
91
-
92
-	    $sqlupdateds = $this->connection->prepare('
93
-			UPDATE `*PREFIX*sms_relent_sent`
94
-			SET `price` = ?, `status` = ?, `deliveryreceipt` = ?, `network` = ?
95
-                        WHERE `message_id` = ? AND `user_id` = ? ');
96
-	    $updateRes = $sqlupdateds->execute([$messageprice, $messagestatus, $deliverystatus, $network, $messageid, $ncuserfortelnyxdel]);
97
-	    $updateRes->closeCursor();
98
-     }
99
-
100
-
101
-     /**
102
-      * @NoAdminRequired
103
-      *
104
-      */
105
-     public function updatedeliverystatusnex($ncuserforplivodel, $messageid, $networkcode, $messageprice, $mStatus, $deliverystatus) {
106
-
107
-	    $sqlupdatedspl = $this->connection->prepare('
108
-			UPDATE `*PREFIX*sms_relent_sent`
109
-			SET `price` = ?, `deliveryreceipt` = ?, `status` = ?, `network` = ?
110
-                        WHERE `message_id` = ? AND `user_id` = ? ');
111
-	    $updateResdspl = $sqlupdatedspl->execute([$messageprice, $deliverystatus, $mStatus, $networkcode, $messageid, $ncuserforplivodel]);
112
-	    $updateResdspl->closeCursor();
113
-     }
114
-
115
-
116
-     /**
117
-      * @NoAdminRequired
118
-      *
119
-      */
120
-     public function updatedeliverystatustwil($ncuserfortwildel, $messageid, $networkcode, $messageprice, $mStatus, $deliverystatus) {
121
-
122
-	    $sqlupdatedstw = $this->connection->prepare('
123
-			UPDATE `*PREFIX*sms_relent_sent`
124
-			SET `price` = ?, `deliveryreceipt` = ?, `status` = ?, `network` = ?
125
-                        WHERE `message_id` = ? AND `user_id` = ? ');
126
-	    $updateResdstw = $sqlupdatedstw->execute([$messageprice, $deliverystatus, $mStatus, $networkcode, $messageid, $ncuserfortwildel]);
127
-	    $updateResdstw->closeCursor();
128
-     }
129
-
130
-
131
-     /**
132
-      * @NoAdminRequired
133
-      *
134
-      */
135
-     public function updatedeliverystatusflow($ncuserforflowdel, $messageid, $networkcode, $messageprice, $mStatus, $deliverystatus) {
136
-
137
-	    $sqlupdatedsfl = $this->connection->prepare('
138
-			UPDATE `*PREFIX*sms_relent_sent`
139
-			SET `price` = ?, `deliveryreceipt` = ?, `status` = ?, `network` = ?
140
-                        WHERE `message_id` = ? AND `user_id` = ? ');
141
-	    $updateResdsfl = $sqlupdatedsfl->execute([$messageprice, $deliverystatus, $mStatus, $networkcode, $messageid, $ncuserforflowdel]);
142
-	    $updateResdsfl->closeCursor();
143
-     }
144
-
145
-
146
-     /**
147
-      * @NoAdminRequired
148
-      */
149
-     public function getreceivedtable($userId) {
150
-
151
-	    $getrectable = $this->connection->prepare('
152
-			SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `message`
153
-			FROM  `*PREFIX*sms_relent_received`
154
-			WHERE `user_id` = ?');
155
-	    $result = $getrectable->execute([$userId]);
156
-
157
-            $recdatatable = [];
158
-            while ($rowfetched = $result->fetch()) {
159
-                   $recdatatable[] = $rowfetched;
160
-            }
161
-	    $result->closeCursor();
162
-
163
-            $recdatafromdb = $recdatatable;
164
-
165
-            return $recdatafromdb;
166
-     }
167
-
168
-
169
-     /**
170
-      * @NoAdminRequired
171
-      */
172
-     public function getreceivedtablefordel($userId) {
173
-
174
-        if ($this->groupManager->isAdmin($userId)) {
175
-
176
-            $getrecfordl = $this->connection->prepare('
177
-			SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `message`
178
-			FROM  `*PREFIX*sms_relent_received`
179
-			WHERE `user_id` = ?');
180
-	    $resultdl = $getrecfordl->execute([$userId]);
181
-
182
-            $recdatatable = [];
183
-            while ($rowfetched = $resultdl->fetch()) {
184
-                   $recdatatable[] = $rowfetched;
185
-            }
186
-            $resultdl->closeCursor();
187
-
188
-            $recdatafromdb = $recdatatable;
189
-
190
-            return $recdatafromdb;
191
-
192
-        } else { return "not permitted"; }
193
-     }
194
-
195
-
196
-     /**
197
-      * @NoAdminRequired
198
-      */
199
-     public function removerecrows($userId, $recmessagedbIDs) {
200
-
201
-        foreach ($recmessagedbIDs as $key => $rowtodel) {
202
-		 $query = $this->connection->prepare('
203
-		       DELETE FROM `*PREFIX*sms_relent_received`
204
-		       WHERE `id` = ?');
205
-		 $deleteResult = $query->execute([$rowtodel]);
206
-		 $deleteResult->closeCursor();
207
-        }
208
-
209
-	$sqlupdate = $this->connection->prepare('
210
-                  SET @resetrec = 0;
211
-		  UPDATE `*PREFIX*sms_relent_received`
212
-		  SET `id` = @resetrec := @resetrec + 1;
213
-                  ALTER TABLE `*PREFIX*sms_relent_received` auto_increment=1;');
214
-	$updateRes = $sqlupdate->execute();
215
-	$updateRes->closeCursor();
216
-     }
217
-
218
-
219
-     /**
220
-      * @NoAdminRequired
221
-      */
222
-     public function getsenttable($userId) {
223
-
224
-        $getsenttbl = $this->connection->prepare('
225
-		   SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `network`, `price`, `status`, `deliveryreceipt`, `message`
226
-		   FROM  `*PREFIX*sms_relent_sent`
227
-		   WHERE `user_id` = ?');
228
-        $resultsent = $getsenttbl->execute([$userId]);
229
-
230
-        $sentdatatable = [];
231
-        while ($rowfetched = $resultsent->fetch()){
232
-               $sentdatatable[] = $rowfetched;
233
-        }
234
-        $resultsent->closeCursor();
235
-
236
-        $sentdatafromdb = $sentdatatable;
237
-
238
-        return $sentdatafromdb;
239
-     }
240
-
241
-
242
-     /**
243
-      * @NoAdminRequired
244
-      */
245
-     public function getsenttablefordel($userId) {
246
-
247
-        if ($this->groupManager->isAdmin($userId)) {
248
-
249
-            $getsenttbldel = $this->connection->prepare('
250
-		          SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `network`, `price`, `status`, `deliveryreceipt`, `message`
251
-		          FROM  `*PREFIX*sms_relent_sent`
252
-		          WHERE `user_id` = ?');
253
-            $resultsentdl = $getsenttbldel->execute([$userId]);
254
-
255
-            $sentdatatable = [];
256
-            while ($rowfetched = $resultsentdl->fetch()){
257
-                   $sentdatatable[] = $rowfetched;
258
-            }
259
-            $resultsentdl->closeCursor();
260
-
261
-            $sentdatafromdb = $sentdatatable;
262
-
263
-            return $sentdatafromdb;
264
-
265
-        } else { return "not permitted"; }
266
-     }
267
-
268
-
269
-     /**
270
-      * @NoAdminRequired
271
-      */
272
-     public function removesentrows($userId, $sentmessagedbIDs) {
273
-
274
-        foreach ($sentmessagedbIDs as $key => $sentrowtodel) {
275
-		 $query = $this->connection->prepare('
276
-		       DELETE FROM `*PREFIX*sms_relent_sent`
277
-		       WHERE `id` = ?');
278
-		 $deleteResult = $query->execute([$sentrowtodel]);
279
-		 $deleteResult->closeCursor();
280
-        }
281
-
282
-	$sqlupdate = $this->connection->prepare('
283
-                  SET @resetsent = 0;
284
-		  UPDATE `*PREFIX*sms_relent_sent`
285
-		  SET `id` = @resetsent := @resetsent + 1;
286
-                  ALTER TABLE `*PREFIX*sms_relent_sent` auto_increment=1;');
287
-	$updateRes = $sqlupdate->execute();
288
-	$updateRes->closeCursor();
289
-     }
290
-
291
-
292
-     /**
293
-      * @NoAdminRequired
294
-      */
295
-     public function getmessagesperpage($userId) {
296
-
297
-        $sqlmpp = $this->connection->prepare('
298
-	       SELECT `user_id`, `messagesperpage` 
299
-               FROM `*PREFIX*sms_relent_settings`
300
-               WHERE `user_id` = ?');
301
-	$result = $sqlmpp->execute([$userId]);
302
-        $mesppdata = $result->fetch();
303
-        $result->closeCursor();
304
-        if ($mesppdata) {
305
-            $mesperpagedb = $mesppdata['messagesperpage'];
306
-            return $mesperpagedb;
307
-        }
308
-     }
309
-
310
-
311
-     /**
312
-      * @NoAdminRequired
313
-      */
314
-     public function getsettings($userId) {
315
-
316
-        $getsettings = $this->connection->prepare('
317
-                    SELECT `id`, `user_id`, `telapi_key`, `tel_pub_key`, `telapi_url_rec`, `telapi_url`, `messaging_profile_id`, `nexapi_key`, `nexapi_secret`, `nexapi_url_rec`,
318
-                           `nexapi_url`, `tel_sender_name`, `nex_sender_name`, `messagesperpage`, `get_notify`, `notification_email`, `getsmsinemail`, `twilapi_key`, `twilapi_secret`, 
319
-                           `twilapi_url_rec`, `twilapi_url`, `twil_sender_name`, `flowapi_key`, `flowapi_secret`, `flowapi_url_rec`, `flowapi_url`
320
-		    FROM  `*PREFIX*sms_relent_settings`
321
-		    WHERE `user_id` = ?');
322
-
323
-        $resultsettings = $getsettings->execute([$userId]);
324
-
325
-        $settingsfromdb = $resultsettings->fetch();
326
-
327
-        $resultsettings->closeCursor();
328
-
329
-        if ($settingsfromdb) {
330
-
331
-            if ($settingsfromdb['telapi_key'] != '') {
332
-
333
-                // Send a placeholder to the browser, instead of the real API key
334
-                $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";
335
-            }
336
-            if ($settingsfromdb['tel_pub_key'] != '') {
337
-                $settingsfromdb['tel_pub_key'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20";
338
-            }
339
-            if ($settingsfromdb['messaging_profile_id'] != '') {
340
-                $settingsfromdb['messaging_profile_id'] = "%20%20%20%20%20%20%20%20%20%20%20%20";
341
-            }
342
-            if ($settingsfromdb['nexapi_key'] != '') {
343
-                $settingsfromdb['nexapi_key'] = "%20%20%20%20%20%20%20%20%20";
344
-            }
345
-            if ($settingsfromdb['nexapi_secret'] != '') {
346
-                $settingsfromdb['nexapi_secret'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20";
347
-            }
348
-            if ($settingsfromdb['twilapi_key'] != '') {
349
-                $settingsfromdb['twilapi_key'] = "%20%20%20%20%20%20%20%20%20";
350
-            }
351
-            if ($settingsfromdb['twilapi_secret'] != '') {
352
-                $settingsfromdb['twilapi_secret'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20";
353
-            }
354
-            if ($settingsfromdb['flowapi_key'] != '') {
355
-                $settingsfromdb['flowapi_key'] = "%20%20%20%20%20%20%20%20%20";
356
-            }
357
-            if ($settingsfromdb['flowapi_secret'] != '') {
358
-                $settingsfromdb['flowapi_secret'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20";
359
-            }
360
-
361
-            return $settingsfromdb;
362
-        }
363
-
364
-     }
365
-
366
-
367
-     /**
368
-      * @NoAdminRequired
369
-      *
370
-      */
371
-     public function updatesettings($userId, $telapiKey, $telPubKey, $telapiUrlRec, $telapiUrl, $messagingProfileId, $nexapiKey, $nexapiSecret, $nexapiUrlRec, $nexapiUrl,
372
-                                    $telSenderName, $nexSenderName, $messagesperpage, $getNotify, $notificationEmail, $getsmsinemail, $twilapiKey, $twilapiSecret, 
373
-                                    $twilapiUrlRec, $twilapiUrl, $twilSenderName, $flowapiKey, $flowapiSecret, $flowapiUrlRec, $flowapiUrl) {
374
-
375
-        $upsettings = $this->connection->prepare('
376
-                   SELECT `id`, `user_id`, `telapi_key`, `tel_pub_key`, `telapi_url_rec`, `telapi_url`, `messaging_profile_id`, `nexapi_key`, `nexapi_secret`, `nexapi_url_rec`,
377
-                          `nexapi_url`, `tel_sender_name`, `nex_sender_name`, `messagesperpage`, `get_notify`, `notification_email`, `getsmsinemail`, `twilapi_key`, `twilapi_secret`,
378
-                          `twilapi_url_rec`, `twilapi_url`, `twil_sender_name`, `flowapi_key`, `flowapi_secret`, `flowapi_url_rec`, `flowapi_url`
379
-		   FROM  `*PREFIX*sms_relent_settings`
380
-		   WHERE `user_id` = ?');
381
-
382
-        $resultstng = $upsettings->execute([$userId]);
383
-
384
-        $rowup = $resultstng->fetch();
385
-
386
-        $resultstng->closeCursor();
387
-
388
-        if ($resultstng && !$rowup) {
389
-
390
-	    if ($telapiKey != '') {
391
-	        $telapikeystrenc = $this->crypto->encrypt($telapiKey);             
392
-	    } else { $telapikeystrenc = ''; }
393
-
394
-	    if ($telPubKey != '') {
395
-	        $telpubkeystrenc =  $this->crypto->encrypt($telPubKey);             
396
-	    } else { $telpubkeystrenc = ''; }
397
-
398
-	    if ($messagingProfileId != '') {
399
-	        $messagingprofenc = $this->crypto->encrypt($messagingProfileId);             
400
-	    } else { $messagingprofenc = ''; }
401
-
402
-	    if ($nexapiKey != '') {
403
-	        $nexapikeystrenc = $this->crypto->encrypt($nexapiKey);             
404
-	    } else { $nexapikeystrenc = ''; }
405
-
406
-	    if ($nexapiSecret != '') {
407
-	        $nexapisecretstrenc = $this->crypto->encrypt($nexapiSecret);             
408
-	    } else { $nexapisecretstrenc = ''; }
409
-
410
-	    if ($twilapiKey != '') {
411
-	        $twilapikeystrenc = $this->crypto->encrypt($twilapiKey);             
412
-	    } else { $twilapikeystrenc = ''; }
413
-
414
-	    if ($twilapiSecret != '') {
415
-	        $twilapisecretstrenc = $this->crypto->encrypt($twilapiSecret);             
416
-	    } else { $twilapisecretstrenc = ''; }
417
-
418
-	    if ($flowapiKey != '') {
419
-	        $flowapikeystrenc = $this->crypto->encrypt($flowapiKey);             
420
-	    } else { $flowapikeystrenc = ''; }
421
-
422
-	    if ($flowapiSecret != '') {
423
-	        $flowapisecretstrenc = $this->crypto->encrypt($flowapiSecret);             
424
-	    } else { $flowapisecretstrenc = ''; }
425
-
426
-	    $sql = $this->connection->prepare('
427
-				INSERT INTO `*PREFIX*sms_relent_settings`
428
-					(`user_id`, `telapi_key`, `tel_pub_key`, `telapi_url_rec`, `telapi_url`, `messaging_profile_id`, `nexapi_key`, `nexapi_secret`, `nexapi_url_rec`, 
429
-	                                 `nexapi_url`, `tel_sender_name`, `nex_sender_name`, `messagesperpage`, `get_notify`, `notification_email`, `getsmsinemail`, `twilapi_key`, 
430
-	                                 `twilapi_secret`, `twilapi_url_rec`, `twilapi_url`, `twil_sender_name`, `flowapi_key`, `flowapi_secret`, `flowapi_url_rec`, `flowapi_url`)
431
-				VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
432
-			');
433
-	    $sql->execute([$userId, $telapikeystrenc, $telpubkeystrenc, $telapiUrlRec, $telapiUrl, $messagingprofenc, $nexapikeystrenc, $nexapisecretstrenc, $nexapiUrlRec, $nexapiUrl, 
434
-	                   $telSenderName, $nexSenderName, $messagesperpage, $getNotify, $notificationEmail, $getsmsinemail, $twilapikeystrenc, $twilapisecretstrenc, $twilapiUrlRec, 
435
-	                   $twilapiUrl, $twilSenderName,   $flowapikeystrenc, $flowapisecretstrenc, $flowapiUrlRec, $flowapiUrl]);
436
-
437
-        } elseif ($resultstng && $rowup) {
438
-
439
-	    // Check if the value of the field is the placeholder or an empty string
440
-	    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") {
441
-	        $telapikeystrenc = $this->crypto->encrypt($telapiKey);                
442
-	    } 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") {
443
-	        $telapikeystrenc = $rowup['telapi_key'];
444
-	    } elseif ($telapiKey == '') {
445
-	        $telapikeystrenc = '';
446
-	    }
447
-
448
-	    if ($telPubKey != '' && $telPubKey != "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
449
-	        $telpubkeystrenc = $this->crypto->encrypt($telPubKey);                
450
-	    } elseif ($telPubKey == "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
451
-	        $telpubkeystrenc = $rowup['tel_pub_key'];
452
-	    } elseif ($telPubKey == '') {
453
-	        $telpubkeystrenc = '';
454
-	    }
455
-
456
-	    if ($messagingProfileId != '' && $messagingProfileId != "%20%20%20%20%20%20%20%20%20%20%20%20") {
457
-	        $messagingprofenc = $this->crypto->encrypt($messagingProfileId);                
458
-	    } elseif ($messagingProfileId == "%20%20%20%20%20%20%20%20%20%20%20%20") {
459
-	        $messagingprofenc = $rowup['messaging_profile_id'];
460
-	    } elseif ($messagingProfileId == '') {
461
-	        $messagingprofenc = '';
462
-	    }
463
-
464
-	    if ($nexapiKey != '' && $nexapiKey != "%20%20%20%20%20%20%20%20%20") {
465
-	        $nexapikeystrenc = $this->crypto->encrypt($nexapiKey);                
466
-	    } elseif ($nexapiKey == "%20%20%20%20%20%20%20%20%20") {
467
-	        $nexapikeystrenc = $rowup['nexapi_key'];
468
-	    } elseif ($nexapiKey == '') {
469
-	        $nexapikeystrenc = '';
470
-	    }
471
-
472
-	    if ($twilapiKey != '' && $twilapiKey != "%20%20%20%20%20%20%20%20%20") {
473
-	        $twilapikeystrenc = $this->crypto->encrypt($twilapiKey);                
474
-	    } elseif ($twilapiKey == "%20%20%20%20%20%20%20%20%20") {
475
-	        $twilapikeystrenc = $rowup['twilapi_key'];
476
-	    } elseif ($twilapiKey == '') {
477
-	        $twilapikeystrenc = '';
478
-	    }
479
-
480
-	    if ($flowapiKey != '' && $flowapiKey != "%20%20%20%20%20%20%20%20%20") {
481
-	        $flowapikeystrenc = $this->crypto->encrypt($flowapiKey);                
482
-	    } elseif ($flowapiKey == "%20%20%20%20%20%20%20%20%20") {
483
-	        $flowapikeystrenc = $rowup['flowapi_key'];
484
-	    } elseif ($flowapiKey == '') {
485
-	        $flowapikeystrenc = '';
486
-	    }
487
-
488
-	    if ($nexapiSecret != '' && $nexapiSecret != "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
489
-	        $nexapisecretstrenc = $this->crypto->encrypt($nexapiSecret);                
490
-	    } elseif ($nexapiSecret == "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
491
-	        $nexapisecretstrenc = $rowup['nexapi_secret'];
492
-	    } elseif ($nexapiSecret == '') {
493
-	        $nexapisecretstrenc = '';
494
-	    }
495
-
496
-	    if ($twilapiSecret != '' && $twilapiSecret != "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
497
-	        $twilapisecretstrenc = $this->crypto->encrypt($twilapiSecret);                
498
-	    } elseif ($twilapiSecret == "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
499
-	        $twilapisecretstrenc = $rowup['twilapi_secret'];
500
-	    } elseif ($twilapiSecret == '') {
501
-	        $twilapisecretstrenc = '';
502
-	    }
503
-
504
-	    if ($flowapiSecret != '' && $flowapiSecret != "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
505
-	        $flowapisecretstrenc = $this->crypto->encrypt($flowapiSecret);                
506
-	    } elseif ($flowapiSecret == "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
507
-	        $flowapisecretstrenc = $rowup['flowapi_secret'];
508
-	    } elseif ($flowapiSecret == '') {
509
-	        $flowapisecretstrenc = '';
510
-	    }
511
-
512
-	    $sqlupdatedb = $this->connection->prepare('
513
-			UPDATE `*PREFIX*sms_relent_settings`
514
-			SET `telapi_key` = ?, `tel_pub_key` = ?, `telapi_url_rec` = ?, `telapi_url` = ?, `messaging_profile_id` = ?, `nexapi_key` = ?, `nexapi_secret` = ?,
515
-	                    `nexapi_url_rec` = ?, `nexapi_url` = ?, `tel_sender_name` = ?, `nex_sender_name` = ?, `messagesperpage` = ?, `get_notify` = ?, `notification_email` = ?,
516
-	                    `getsmsinemail` = ?, `twilapi_key` = ?, `twilapi_secret` = ?, `twilapi_url_rec` = ?, `twilapi_url` = ?, `twil_sender_name` = ?, `flowapi_key` = ?, 
517
-	                    `flowapi_secret` = ?, `flowapi_url_rec` = ?, `flowapi_url` = ?
518
-	                WHERE `user_id` = ?');
519
-	    $updateRes = $sqlupdatedb->execute([$telapikeystrenc, $telpubkeystrenc, $telapiUrlRec, $telapiUrl, $messagingprofenc, $nexapikeystrenc, $nexapisecretstrenc, $nexapiUrlRec,
520
-	                                        $nexapiUrl, $telSenderName, $nexSenderName, $messagesperpage, $getNotify, $notificationEmail, $getsmsinemail, $twilapikeystrenc, 
521
-	                                        $twilapisecretstrenc, $twilapiUrlRec, $twilapiUrl, $twilSenderName, $flowapikeystrenc, $flowapisecretstrenc, $flowapiUrlRec, 
522
-	                                        $flowapiUrl, $userId]);
523
-	    $updateRes->closeCursor();
524
-	}
525
-
526
-     }
527
-
528
-
529
-    /**
530
-     * @NoAdminRequired
531
-     */
532
-    public function getapicredentials($userId) {
533
-
534
-        $sqlcr = $this->connection->prepare('
535
-              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`,
536
-                     `tel_sender_name`, `nex_sender_name`, `messagesperpage`, `get_notify`, `notification_email`, `getsmsinemail`, `twilapi_key`, `twilapi_secret`, `twilapi_url_rec`, 
537
-                     `twilapi_url`, `twil_sender_name`, `flowapi_key`, `flowapi_secret`, `flowapi_url_rec`, `flowapi_url` FROM `*PREFIX*sms_relent_settings`
538
-	      WHERE `user_id` = ?');
539
-	$resultcr = $sqlcr->execute([$userId]);
540
-        $settingsfrdb = $resultcr->fetch();
541
-        $resultcr->closeCursor();
542
-
543
-        if (($settingsfrdb['telapi_key'] != '') && ($settingsfrdb['telapi_key'] != 'undefined') && ($settingsfrdb['telapi_key'] != null)) { 
544
-             $telapikeystrdec = $this->crypto->decrypt($settingsfrdb['telapi_key']); 
545
-        } else { $telapikeystrdec = ''; }
546
-
547
-        if (($settingsfrdb['tel_pub_key'] != '') && ($settingsfrdb['tel_pub_key'] != 'undefined') && ($settingsfrdb['tel_pub_key'] != null)) {
548
-             $telpubkeystrdec = $this->crypto->decrypt($settingsfrdb['tel_pub_key']); 
549
-        } else { $telpubkeystrdec = ''; }
550
-
551
-        $telapiurlrec = $settingsfrdb['telapi_url_rec'];
552
-        $telapiurlstr = $settingsfrdb['telapi_url'];
553
-
554
-        if (($settingsfrdb['messaging_profile_id'] != '') && ($settingsfrdb['messaging_profile_id'] != 'undefined') && ($settingsfrdb['messaging_profile_id'] != null)) {
555
-             $messagingprofid = $this->crypto->decrypt($settingsfrdb['messaging_profile_id']); 
556
-        } else { $messagingprofid = ''; }
557
-
558
-        if (($settingsfrdb['nexapi_key'] != '') && ($settingsfrdb['nexapi_key'] != 'undefined') && ($settingsfrdb['nexapi_key'] != null)) { 
559
-             $nexapikeystr = $this->crypto->decrypt($settingsfrdb['nexapi_key']); 
560
-        } else { $nexapikeystr = ''; }
561
-
562
-        if (($settingsfrdb['nexapi_secret'] != '') && ($settingsfrdb['nexapi_secret'] != 'undefined') && ($settingsfrdb['nexapi_secret'] != null)) { 
563
-             $nexapisecretstr = $this->crypto->decrypt($settingsfrdb['nexapi_secret']); 
564
-        } else { $nexapisecretstr = ''; }
565
-
566
-        if (($settingsfrdb['twilapi_key'] != '') && ($settingsfrdb['twilapi_key'] != 'undefined') && ($settingsfrdb['twilapi_key'] != null)) { 
567
-             $twilapikeystr = $this->crypto->decrypt($settingsfrdb['twilapi_key']); 
568
-        } else { $twilapikeystr = ''; }
569
-
570
-        if (($settingsfrdb['twilapi_secret'] != '') && ($settingsfrdb['twilapi_secret'] != 'undefined') && ($settingsfrdb['twilapi_secret'] != null)) { 
571
-             $twilapisecretstr = $this->crypto->decrypt($settingsfrdb['twilapi_secret']); 
572
-        } else { $twilapisecretstr = ''; }
573
-
574
-        if (($settingsfrdb['flowapi_key'] != '') && ($settingsfrdb['flowapi_key'] != 'undefined') && ($settingsfrdb['flowapi_key'] != null)) { 
575
-             $flowapikeystr = $this->crypto->decrypt($settingsfrdb['flowapi_key']); 
576
-        } else { $flowapikeystr = ''; }
577
-
578
-        if (($settingsfrdb['flowapi_secret'] != '') && ($settingsfrdb['flowapi_secret'] != 'undefined') && ($settingsfrdb['flowapi_secret'] != null)) { 
579
-             $flowapisecretstr = $this->crypto->decrypt($settingsfrdb['flowapi_secret']); 
580
-        } else { $flowapisecretstr = ''; }
581
-
582
-        $nexapiurlrecsms = $settingsfrdb['nexapi_url_rec'];
583
-        $nexapiurldelrcpt = $settingsfrdb['nexapi_url'];
584
-        $twilapiurlrecsms = $settingsfrdb['twilapi_url_rec'];
585
-        $twilapiurldelrcpt = $settingsfrdb['twilapi_url'];
586
-        $flowapiurlrecsms = $settingsfrdb['flowapi_url_rec'];
587
-        $flowapiurldelrcpt = $settingsfrdb['flowapi_url'];
588
-        $gettelsendername = $settingsfrdb['tel_sender_name'];
589
-        $getnexsendername = $settingsfrdb['nex_sender_name'];
590
-        $gettwilsendername = $settingsfrdb['twil_sender_name'];
591
-        $getmessagesperpage = $settingsfrdb['messagesperpage'];
592
-        $getnotification = $settingsfrdb['get_notify'];
593
-        $notifyemail = $settingsfrdb['notification_email'];
594
-        $includesmsinemail = $settingsfrdb['getsmsinemail'];
595
-
596
-        return [$telapikeystrdec, $telpubkeystrdec, $telapiurlrec, $telapiurlstr, $messagingprofid, $nexapikeystr, $nexapisecretstr, $nexapiurlrecsms, $nexapiurldelrcpt,
597
-                $gettelsendername, $getnexsendername, $getmessagesperpage, $getnotification, $notifyemail, $includesmsinemail, $twilapikeystr, $twilapisecretstr, $twilapiurlrecsms, 
598
-                $twilapiurldelrcpt, $gettwilsendername,  $flowapikeystr, $flowapisecretstr, $flowapiurlrecsms, $flowapiurldelrcpt];
599
-    }
600
-
601
-    /**
602
-     * @NoAdminRequired
603
-     */
604
-    public function getuserbytelrecwhurl($recsmswebhookurl) {
605
-
606
-        $sqlrec = $this->connection->prepare('SELECT `user_id`, `telapi_url_rec` FROM `*PREFIX*sms_relent_settings` WHERE `telapi_url_rec` = ?');
607
-	$result = $sqlrec->execute([$recsmswebhookurl]);
608
-        $datafromdb = $result->fetch();
609
-        $result->closeCursor();
610
-        $ncusertelrec = $datafromdb['user_id'];
611
-
612
-        return $ncusertelrec;
613
-    }
614
-
615
-    /**
616
-     * @NoAdminRequired
617
-     */
618
-    public function getuserbyteldelrwhurl($delsmswebhookurl) {
619
-
620
-        $sqldel = $this->connection->prepare('SELECT `user_id`, `telapi_url` FROM `*PREFIX*sms_relent_settings` WHERE `telapi_url` = ?');
621
-	$ressqldel = $sqldel->execute([$delsmswebhookurl]);
622
-        $datafromdbdel = $ressqldel->fetch();
623
-        $ressqldel->closeCursor();
624
-        $ncuserteldel = $datafromdbdel['user_id'];
625
-
626
-        return $ncuserteldel;
627
-    }
628
-
629
-    /**
630
-     * @NoAdminRequired
631
-     */
632
-    public function getuserbyplivorecwhurl($plivorecurl) {
633
-
634
-        $sqlrecpl = $this->connection->prepare('SELECT `user_id`, `nexapi_url_rec` FROM `*PREFIX*sms_relent_settings` WHERE `nexapi_url_rec` = ?');
635
-	$plresrecsql = $sqlrecpl->execute([$plivorecurl]);
636
-        $pldatafromdb = $plresrecsql->fetch();
637
-        $plresrecsql->closeCursor();
638
-        $ncuserplrec = $pldatafromdb['user_id'];
639
-
640
-        return $ncuserplrec;
641
-    }
642
-
643
-    /**
644
-     * @NoAdminRequired
645
-     */
646
-    public function getuserbyplivodelrwhurl($plivodrurl) {
647
-
648
-        $sqldrpl = $this->connection->prepare('SELECT `user_id`, `nexapi_url` FROM `*PREFIX*sms_relent_settings` WHERE `nexapi_url` = ?');
649
-	$ressqldelrec = $sqldrpl->execute([$plivodrurl]);
650
-        $datafromdbdr = $ressqldelrec->fetch();
651
-        $ressqldelrec->closeCursor();
652
-        $ncuserplivodel = $datafromdbdr['user_id'];
653
-
654
-        return $ncuserplivodel;
655
-    }
656
-
657
-    /**
658
-     * @NoAdminRequired
659
-     */
660
-    public function getuserbytwilrecwhurl($twilrecurl) {
661
-
662
-        $sqlrectw = $this->connection->prepare('SELECT `user_id`, `twilapi_url_rec` FROM `*PREFIX*sms_relent_settings` WHERE `twilapi_url_rec` = ?');
663
-	$twresrecsql = $sqlrectw->execute([$twilrecurl]);
664
-        $twdatafromdb = $twresrecsql->fetch();
665
-        $twresrecsql->closeCursor();
666
-        $ncusertwrec = $twdatafromdb['user_id'];
667
-
668
-        return $ncusertwrec;
669
-    }
670
-
671
-    /**
672
-     * @NoAdminRequired
673
-     */
674
-    public function getuserbytwildelrwhurl($twildrurl) {
675
-
676
-        $sqldrtw = $this->connection->prepare('SELECT `user_id`, `twilapi_url` FROM `*PREFIX*sms_relent_settings` WHERE `twilapi_url` = ?');
677
-	$ressqldelrectw = $sqldrtw->execute([$twildrurl]);
678
-        $datafromdbdrtw = $ressqldelrectw->fetch();
679
-        $ressqldelrectw->closeCursor();
680
-        $ncusertwildel = $datafromdbdrtw['user_id'];
681
-
682
-        return $ncusertwildel;
683
-    }
684
-
685
-    /**
686
-     * @NoAdminRequired
687
-     */
688
-    public function getuserbyflowrecwhurl($flowrecurl) {
689
-
690
-        $sqlrecfl = $this->connection->prepare('SELECT `user_id`, `flowapi_url_rec` FROM `*PREFIX*sms_relent_settings` WHERE `flowapi_url_rec` = ?');
691
-	$flresrecsql = $sqlrecfl->execute([$flowrecurl]);
692
-        $fldatafromdb = $flresrecsql->fetch();
693
-        $flresrecsql->closeCursor();
694
-        $ncuserflrec = $fldatafromdb['user_id'];
695
-
696
-        return $ncuserflrec;
697
-    }
698
-
699
-    /**
700
-     * @NoAdminRequired
701
-     */
702
-    public function getuserbyflowdelrwhurl($flowdrurl) {
703
-
704
-        $sqldrfl = $this->connection->prepare('SELECT `user_id`, `flowapi_url` FROM `*PREFIX*sms_relent_settings` WHERE `flowapi_url` = ?');
705
-	$ressqldelrecfl = $sqldrfl->execute([$flowdrurl]);
706
-        $datafromdbdrfl = $ressqldelrecfl->fetch();
707
-        $ressqldelrecfl->closeCursor();
708
-        $ncuserflowdel = $datafromdbdrfl['user_id'];
709
-
710
-        return $ncuserflowdel;
711
-    }
712
-}
713 0
deleted file mode 100644
... ...
@@ -1,65 +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\Settings;
27
-
28
-use OCP\IConfig;
29
-use OCP\AppFramework\Http\TemplateResponse;
30
-use OCP\Settings\ISettings;
31
-
32
-
33
-class Personal implements ISettings {
34
-
35
-        /** @var IConfig */
36
-	private IConfig $config;
37
-
38
-	public function __construct(IConfig $config) {
39
-		$this->config = $config;
40
-	}
41
-
42
-
43
-        public function getForm(): TemplateResponse {
44
-		return new TemplateResponse('sms_relentless', 'settings');
45
-        }
46
-
47
-        /**
48
-         * @return string the section ID, e.g. 'sharing'
49
-         */
50
-        public function getSection(): string {
51
-                return 'sms_relentless';
52
-        }
53
-
54
-        /**
55
-         * @return int whether the form should be rather on the top or bottom of
56
-         * the admin section. The forms are arranged in ascending order of the
57
-         * priority values. It is required to return a value between 0 and 100.
58
-         *
59
-         * keep the server setting at the top, right after "server settings"
60
-         */
61
-        public function getPriority(): int {
62
-                return 11;
63
-        }
64
-}
65
-
66 0
deleted file mode 100644
... ...
@@ -1,86 +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\Settings;
27
-
28
-use OCP\IL10N;
29
-use OCP\IURLGenerator;
30
-use OCP\Settings\IIconSection;
31
-
32
-
33
-class PersonalSection implements IIconSection {
34
-        /** @var IL10N */
35
-        private $l;
36
-        /** @var IURLGenerator */
37
-        private $url;
38
-
39
-        /**
40
-         * @param IURLGenerator $url
41
-         * @param IL10N $l
42
-         */
43
-        public function __construct(IURLGenerator $url, IL10N $l) {
44
-                $this->url = $url;
45
-                $this->l = $l;
46
-        }
47
-
48
-        /**
49
-         * returns the ID of the section. It is supposed to be a lower case string,
50
-         * e.g. 'ldap'
51
-         *
52
-         * @returns string
53
-         */
54
-        public function getID() {
55
-                return 'sms_relentless';
56
-        }
57
-
58
-        /**
59
-         * returns the translated name as it should be displayed, e.g. 'LDAP / AD
60
-         * integration'. Use the L10N service to translate it.
61
-         *
62
-         * @return string
63
-         */
64
-        public function getName() {
65
-                return $this->l->t('SMS Relentless');
66
-        }
67
-
68
-        /**
69
-         * @return int whether the form should be rather on the top or bottom of
70
-         * the settings navigation. The sections are arranged in ascending order of
71
-         * the priority values. It is required to return a value between 0 and 99.
72
-         *
73
-         * E.g.: 70
74
-         */
75
-        public function getPriority() {
76
-                return 11;
77
-        }
78
-
79
-        /**
80
-         * {@inheritdoc}
81
-         */
82
-        public function getIcon() {
83
-                return $this->url->imagePath('sms_relentless', 'sms_relentless_dark.svg');
84
-        }
85
-}
86
-
87 0
deleted file mode 100644
... ...
@@ -1,44 +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
-style('sms_relentless', 'style');
29
-
30
-script('sms_relentless', 'receivesms');
31
-
32
-?>
33
-
34
-<div id="app">
35
-        <div id="app-navigation">
36
-                <?php print_unescaped($this->inc('navigation/index')); ?>
37
-        </div>
38
-        <div id="app-content">
39
-                <div id="app-content-wrapper">
40
-                        <?php print_unescaped($this->inc('content/index')); ?>
41
-                </div>
42
-        </div>
43
-</div>
44
-
45 0
deleted file mode 100644
... ...
@@ -1,261 +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_listing_by_country_or_region" 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_listing_by_country_or_region"
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
-   </div>
231
-
232
-
233
-   <div id="deleteoldmssgs">Remove old messages:</div><input type="checkbox" id="deleteoldchckbox" />
234
-
235
-   <div id="deleteoldsms">
236
-       <div class="fortooltiptert"><font class="texttooltip">i</font>
237
-          <div id="deleteoldinfo">
238
-             <span class="fortooltiptexttert">Since this application records all incoming and outgoing SMS messages, in time, its database can become very large, which
239
-                 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 
240
-                 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
241
-                 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
242
-                 stored in the 'SMS_Relentless/ removed_sent_messages' and 'SMS_Relentless/ removed_received_messages' directories. Being structured as 'csv',
243
-                 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,
244
-                 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 
245
-                 rows and clicking on the 'Permanently delete' upper-left corner icon).
246
-          </span>
247
-          </div>
248
-       </div>
249
-       <div id="delsetrows">
250
-          <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>
251
-          <input type="submit" id="delOldrecSMS" value="Delete received messages" />
252
-          <span id="sms_deleterecmsg"></span><br><br>
253
-
254
-          <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."/>
255
-          <span class="deletesmsolder"> days.</span>
256
-          <input type="submit" id="delOldsentSMS" value="Delete sent messages" />
257
-          <span id="sms_deletesentmsg"></span>
258
-       </div>
259
-   </div>
260
-
261
-</div>
262 0
deleted file mode 100644
... ...
@@ -1,234 +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
-                   <input type="hidden" id="user_id" name="user_id" />
225
-
226
-                   <input id="save_sms_settings" type="submit" value="<?php p($l->t('Save')) ?>" />
227
-
228
-                   <span id="smsr_save_msg"></span>
229
-
230
-               </form>
231
-           </div>
232
-        </div>
233
-</div>
234
-