1 | 1 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,112 @@ |
1 |
+======= CHANGELOG ======= |
|
2 |
+ |
|
3 |
+Versions: |
|
4 |
+ |
|
5 |
+== 1.0.0 - 2022-1-27 == |
|
6 |
+* Initial release. |
|
7 |
+ |
|
8 |
+== 1.0.1 - 2022-3-31 == |
|
9 |
+* Changed presentation text. |
|
10 |
+ |
|
11 |
+== 1.0.2 - 2022-4-13 == |
|
12 |
+* Changed application controller class, to respect custom path of 'datadirectory'. |
|
13 |
+* Fixed filters row arrow not showing up when using Apache. |
|
14 |
+* Added the 'Contributors.txt' file. |
|
15 |
+ |
|
16 |
+== 1.0.3 - 2022-4-15 == |
|
17 |
+* Changed the way the app gets the timezone. |
|
18 |
+ |
|
19 |
+== 1.0.4 - 2022-5-7 == |
|
20 |
+* Changed the data type of the 'message' column in the 'sms_relent_sent' and 'sms_relent_received' tables. |
|
21 |
+ |
|
22 |
+== 1.0.5 - 2022-5-9 == |
|
23 |
+* Changed string length for 'message' column in 'sms_relent_sent' and 'sms_relent_received' tables. |
|
24 |
+* Changed syntax of SQL queries and of encryption function. |
|
25 |
+* Changed structure of webhook URLs in case Nextcloud is served on a subdirectory. |
|
26 |
+ |
|
27 |
+== 1.0.6 - 2022-8-13 == |
|
28 |
+* Added support for Twilio. |
|
29 |
+* Added support for new lines in messages and email notifications. |
|
30 |
+* Solved column width issue in sent/received SMS tables. |
|
31 |
+* Minor explanatory text changes. |
|
32 |
+ |
|
33 |
+== 1.0.7 - 2022-8-16 == |
|
34 |
+* Solved bug related to receiving messages on Twilio number when it's not associated with any Messaging Service. |
|
35 |
+* Changed css properties for Network column. |
|
36 |
+ |
|
37 |
+== 1.0.8 - 2022-8-23 == |
|
38 |
+* Added support for Flowroute. |
|
39 |
+* Added automatic scrolling to bottom of received/sent messages table when clicking on 'Received/Sent SMS Messages' button. |
|
40 |
+* Added scroll bar to info pop-up notes. |
|
41 |
+ |
|
42 |
+== 1.0.9 - 2022-9-3 == |
|
43 |
+* Added support for MMS. |
|
44 |
+* Minor CSS improvements. |
|
45 |
+* Small changes to explanatory text. |
|
46 |
+ |
|
47 |
+== 1.1.0 - 2022-9-5 == |
|
48 |
+* Solved issue with previewing images picked from Nextcloud. |
|
49 |
+* Text changes to README.md. |
|
50 |
+ |
|
51 |
+== 1.1.1 - 2022-9-9 == |
|
52 |
+* Changed signature verification process for Twilio. |
|
53 |
+* Removed Alphanumeric Sender ID for Flowroute, since it's not supported. |
|
54 |
+* Minor text changes on presentation page and settings page. |
|
55 |
+ |
|
56 |
+== 1.1.2 - 2022-10-27 == |
|
57 |
+* Changed CSS settings to match the modifications introduced in Nextcloud 25. |
|
58 |
+ |
|
59 |
+== 1.1.3 - 2022-12-1 == |
|
60 |
+* Fixed SQL error that appeared in fresh installations. |
|
61 |
+* Added support for dark themes. |
|
62 |
+* Updated explanatory text for Telnyx on the Settings page. |
|
63 |
+ |
|
64 |
+== 1.1.4 - 2022-12-2 == |
|
65 |
+* Changed migration files to prevent installation errors. |
|
66 |
+* Modified 3 svg files converting text objects to paths. |
|
67 |
+ |
|
68 |
+== 1.1.5 - 2023-2-28 == |
|
69 |
+* Fixed issue related to Twilio message signing. |
|
70 |
+* Updated message pricing information in app description. |
|
71 |
+ |
|
72 |
+== 1.1.6 - 2023-5-8 == |
|
73 |
+* Implemented showing display names of message authors before their messages. |
|
74 |
+* Added checkbox to enable/disable prepending display names before messages. |
|
75 |
+* Custom display names can be now saved for external phone numbers. |
|
76 |
+* Restrictions for groups or users can be placed on phone numbers by admins. |
|
77 |
+* Admins can see just their own messages or all the messages in their message tables. |
|
78 |
+* Auto-replies with 'daily mode' and 'vacation mode' can be configured for any controlled phone number. |
|
79 |
+* Added a new message table that lists all the messages grouped by phone numbers. |
|
80 |
+* Added the ability to see all the messages sent/received to/from a phone number, by clicking on |
|
81 |
+ a button located below the number, in the 'Received SMS Messages' and 'Sent SMS Messages' tables |
|
82 |
+ |
|
83 |
+== 1.1.7 - 2023-5-9 == |
|
84 |
+* Fixed bug related to not being able to see messages in pop-up windows and on grouped messages table. |
|
85 |
+ |
|
86 |
+== 1.1.8 - 2023-5-9 == |
|
87 |
+* Fixed migration issue bug. |
|
88 |
+ |
|
89 |
+== 1.1.9 - 2023-5-9 == |
|
90 |
+* Made the app available to upgrade to for Nextcloud 26. |
|
91 |
+ |
|
92 |
+== 1.2.0 - 2023-5-20 == |
|
93 |
+* Fixed auto-reply bug. |
|
94 |
+* Moved the API keys and alphanumeric sender ID fields from the Personal settings page to the Admin |
|
95 |
+ settings page. |
|
96 |
+* Available phone numbers are loaded automatically when the app's icon is clicked. |
|
97 |
+* When only one phone number is available, it is selected automatically in the 'Set ID' field. |
|
98 |
+* Admins can share their API keys with other non-admins. |
|
99 |
+* Admins can see only their messages and the messages of the non-admins whith whom they share their API |
|
100 |
+ keys. Non-admins can see only their messages. |
|
101 |
+* Added pop-up window that shows the messages exchanged between 2 phone numbers and allows sending replies. |
|
102 |
+ |
|
103 |
+== 1.2.1 - 2023-5-23 == |
|
104 |
+* Allowed non-admin users to see incoming messages received on the phone numbers they are restricted to. |
|
105 |
+* Customized confirm pop-up windows. |
|
106 |
+ |
|
107 |
+== 1.2.2 - 2023-5-24 == |
|
108 |
+* Changed how non-admins view sent messages. |
|
109 |
+ |
|
110 |
+== 1.2.3 - 2023-5-24 == |
|
111 |
+* Fixed 'Load more messages' bug. |
|
112 |
+* Changed the way the display name is searched for and added to old messages, during app upgrade. |
0 | 113 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,90 @@ |
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 |
+* 👤 The Display Name of Nextcloud users can be prepended to their messages, so that the origin of the messages is much clearer. |
|
25 |
+ |
|
26 |
+* ⚠️ Admins can restrict the use of specific phone numbers to specific groups or users. |
|
27 |
+ |
|
28 |
+* ✉️ Auto-replies in 'daily mode' and 'vacation mode' can be configured for any controlled phone number. |
|
29 |
+ |
|
30 |
+* 🔏 SMS/MMS messages coming from Telnyx, Plivo and Twilio are checked for authenticity by verifying the SMS provider's signature. |
|
31 |
+ |
|
32 |
+* 📧 Users receive notifications in Nextcloud and (optionally) emails when new SMS/MMS messages arrive. |
|
33 |
+ |
|
34 |
+* 📄 Each sent message receives a delivery receipt displayed in the Sent SMS Messages table. |
|
35 |
+ |
|
36 |
+* 📱 It works with regular 'long code' (10-digit) phone numbers, but also with 'toll-free' numbers and 'short codes'. Users see a list with their current phone numbers and can set them as Sender IDs. Setting alphanumeric Sender IDs is also possible. |
|
37 |
+ |
|
38 |
+* 💵 It allows checking the current Telnyx/Plivo/Twilio balance by selecting the provider on the left panel. |
|
39 |
+ |
|
40 |
+* 💰 The only ongoing cost is about $1 per month (depending on the country) for an SMS/MMS enabled phone number located in a country chosen by the user. No contracts. |
|
41 |
+ |
|
42 |
+* 💸 Low prices per SMS: starting from $0.0060 per sent message and $0.0040 per received message (Telnyx), or $0.0070 per sent message and $0 per received message (Plivo), or $0.0099 per sent message and 0.0079 per received message (Twilio), or $0.0055 per sent message and 0.0040 per received message (Flowroute) in the USA. |
|
43 |
+ |
|
44 |
+We have no affiliation with Telnyx, Plivo, Twilio or Flowroute. |
|
45 |
+ |
|
46 |
+### Documentation |
|
47 |
+ |
|
48 |
+* [Admin documentation](https://www.doublebastion.com/install-nextcloud/#install-sms-relentless) |
|
49 |
+ |
|
50 |
+### Donations |
|
51 |
+ |
|
52 |
+* 🎁 [Donate](https://www.doublebastion.com/donations/) |
|
53 |
+ |
|
54 |
+ ]]></description> |
|
55 |
+ <version>1.2.3</version> |
|
56 |
+ <licence>AGPL</licence> |
|
57 |
+ <author mail="contact@doublebastion.com">Double Bastion LLC</author> |
|
58 |
+ <namespace>SMSRelentless</namespace> |
|
59 |
+ <documentation> |
|
60 |
+ <admin>https://www.doublebastion.com/install-nextcloud/#install-sms-relentless</admin> |
|
61 |
+ </documentation> |
|
62 |
+ <category>office</category> |
|
63 |
+ <category>organization</category> |
|
64 |
+ |
|
65 |
+ <website>https://www.doublebastion.com/sms-relentless/</website> |
|
66 |
+ <bugs>https://git.doublebastion.com/sms-relentless/issues/develop</bugs> |
|
67 |
+ <repository>https://git.doublebastion.com/sms-relentless/develop/</repository> |
|
68 |
+ |
|
69 |
+ <screenshot>https://git.doublebastion.com/sms-relentless/raw/develop/img/sms_relentless_screenshot.png</screenshot> |
|
70 |
+ |
|
71 |
+ <dependencies> |
|
72 |
+ <nextcloud min-version="25" max-version="26" /> |
|
73 |
+ </dependencies> |
|
74 |
+ |
|
75 |
+ <navigations> |
|
76 |
+ <navigation> |
|
77 |
+ <name>SMS Relentless</name> |
|
78 |
+ <route>sms_relentless.page.index</route> |
|
79 |
+ <order>102</order> |
|
80 |
+ <icon>../img/sms_relentless.svg</icon> |
|
81 |
+ </navigation> |
|
82 |
+ </navigations> |
|
83 |
+ |
|
84 |
+ <settings> |
|
85 |
+ <personal>OCA\SMSRelentless\Settings\Personal</personal> |
|
86 |
+ <personal-section>OCA\SMSRelentless\Settings\PersonalSection</personal-section> |
|
87 |
+ <admin>OCA\SMSRelentless\Settings\Admin</admin> |
|
88 |
+ <admin-section>OCA\SMSRelentless\Settings\AdminSection</admin-section> |
|
89 |
+ </settings> |
|
90 |
+</info> |
0 | 91 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,858 @@ |
1 |
+{ |
|
2 |
+ "hashes": { |
|
3 |
+ "CHANGELOG.txt": "df74107d5ce8d397c0cc4378089e6384021ecbb3d2b559f51ea354f32d0bc016ad5f7b64b724724b2aa828a4dc4913848ddd3c65bebdaef8e57330a5d1eabf3e", |
|
4 |
+ "COPYING.txt": "a0a86214ea153fb07ff35ceec0848dd1703eae22de036a825efc8394e50f65e3044832f3b49cf7e45a39edc470bdf738abc36a3a78ca7df3a6e73c14eaef94a8", |
|
5 |
+ "Contributors.txt": "8ab4ea9b8c38e4d115af6ca08e8e27592198b763982bd166b67f38ee0b9f2b7e093cd58ce0927ae38ee3bc015b129add2ffeb3967288c804da493241bc67ba9b", |
|
6 |
+ "README.md": "1303375a0e275dee4117b365e323d5b918a916d28460d202dd3990d1d07d1ca4c88136e0aa05d1222894a37339072f05a9d8c8cc32dd91ae85a703cfb48b9dc4", |
|
7 |
+ "appinfo\/info.xml": "b67a2b88dcbc823adc626803e964ceec32ff08630bffc13e2e90fdc818d6a37aa99193c6fa427e9f1e697dbc1d606be6acb588c591fa5454532358661b052a3c", |
|
8 |
+ "appinfo\/routes.php": "201af4a964d75ace65e4d46aff122afa72390d324b5cab798158985e13234f6f92f6c7320970dc55cd8f64735f07612e107acd8e2574960afb93fe308fa8b5fa", |
|
9 |
+ "css\/style.css": "c021733ef461a794669690194ddddb16e4a8d45fa5b860e3fccdfc0b6a71c243077535c0661d968461b18ba14e82c72179c5f3e9c14010537d09e2d71f6b9787", |
|
10 |
+ "img\/add.svg": "5711a740d20d8243b4fa9a52783689af96b3b01af6e422ec6a9f0aca16db068869a5a302e6960168d9c90e2dc0a69eed851d69e7f1bf33684304cf861f990604", |
|
11 |
+ "img\/arrow-top-small.svg": "3fba2fbf3a27f4d6b44d1c94da2260d025bbe682a3db18c21b9aa548f4878609770cdaa2e5c24e8b5cd97249647187b7499ab18bcd843ae7ee145def41561bbf", |
|
12 |
+ "img\/arrow-top.svg": "389b15b7bfa8c90a79cd80958d1150538ddd0aeed875eae3a498b9bee8da3e63752fbc6c073cf58405fc35633a9b786e34b3ca1f6d234af685277aa8d439e1a6", |
|
13 |
+ "img\/arrowDown.svg": "6fb30b189e848b26369238f7446eb1533327a4e99c70b699c10bb03088eeb7d47393f18d4f16bc03edb945f36cf13b96f05b763dba821c0b04b209cd81624103", |
|
14 |
+ "img\/arrowUp.svg": "4f6a413d836635fd7e2e4d5846ee257c9a13e80624468e444ec906febfcf07a1c84f48d29cce730f29729cc8fbbbd3dab490e2192e5beb2707a6a4b1036bfd76", |
|
15 |
+ "img\/check.svg": "aff77744fbd4e8eef8d91fd9e128e9e8be2830a93db9ba8d8a8277e78c8610d6ea5ec9678b3dfd2b8f2b4f8970dc40c4111e7af5011b0873bf461f5fbdeeaa88", |
|
16 |
+ "img\/clearfilters.svg": "f554eff67f4c1440eb3865ea98b00bcde1f27361ae5888dfa7db1ed95d074915aaba0f6aed3f70d6d7c4cb5ca592dbc3f3175f958708e54830f895e8b652b499", |
|
17 |
+ "img\/closewnd.svg": "38f6ba89d70905ab3d2c7d524fee42ce08f007622bb1256d04556cccdf40f549d39ab2fc455c878e6c318c03a8680d042c8e7d0dff9360a921e397e38567bf9a", |
|
18 |
+ "img\/dots.svg": "e4a46301c4b70f3820be8d6906ccec273a96edaaab44d7c133bb58f5499f2fc6381f2029c27d0393e3d31e1cf10bc55ee98f05347fa6af3533cc74290d9bb909", |
|
19 |
+ "img\/filter_icon.svg": "5258d0d0e3677c10a8ae5d8cc37318855e5a6d5071d5a61ee6d29aad7109292502d60571f2c5ae716295dd8f93a327c060ec7c65f2f9cbfee4b85086682a385e", |
|
20 |
+ "img\/garbage.svg": "b76cde0659b7f127a810406d2b734f03871e3a7c8bc53acb723c2a97fa6ca0801a26cfebd4ceaa28d2ad237a67a222e00aafaecaf7e749cc8e8f93ae35a4c4f3", |
|
21 |
+ "img\/garbage_bright.svg": "45bbad63a659b6add876294f8aebda1cf03790b0c253ba442f04fd9677c1a35795eb823dbb92bbf38066e8cdf89fb34671763dabbcdad4722aba3ffcaa21581b", |
|
22 |
+ "img\/group.svg": "fbc10073fb9f5ac1780ccad2c61586512a922359b48ff76194bc5be2711ba99efcf9ce42a694e4cf1209dc78cf2bd077e12f98590c1fe1123260a23419cd256f", |
|
23 |
+ "img\/incoming.svg": "c8f6e4c7e55c7fff5c74a87fe14e9f404fe5954a546949f148fd60cae7dd2e9165e883c34f1a3eb5500c12ae2bf281ab1607e04c4b75bd6322571ccf7e6ccc25", |
|
24 |
+ "img\/list.svg": "2364a4ad93d0e4c85345a293f4f6b0e4135cbfb8b7b5e1ecd81d08affd0e0441439f9cd9e60da77eaa53052ef20cec20b49263e387b500c1fb4a3607b081e73f", |
|
25 |
+ "img\/nextcloud_logo.svg": "4e0d3f0c371d668d83d443e5b1f69f0eedcc759092601d8fe8710dd97b16fd53aa3f9667bba7f305dc3aacfbc14e29b09b78da8b7bf6f41dcb83f5b16473991e", |
|
26 |
+ "img\/nextcloud_logo_bright.svg": "aeab941556e29f9537508171583bb3309372866122c150c887c21d6a567c5aa06d2653db67c7151b064d4e2fa25f1fc63df21c786ede02ca5f40f12e5c1bad26", |
|
27 |
+ "img\/outgoing.svg": "b5be7538df66570991b975b1fdca452144fdc27a14521dfb2ae4d0393d0f3b8abb6837458892e04adbdec0182ee3fd25ae33c6792457154dc2cab6e35bd6eb9e", |
|
28 |
+ "img\/question.svg": "c2bb43256a2b8c43997dd6b40a2db8c811e3a2a28a0ebc11c8e87d71c21b8cfea3367a39730e6675ca77c9ec6e9adb4bab65cee474c02276f905b4477e28b1bf", |
|
29 |
+ "img\/refresh_logo.svg": "a95a19645bbde5e2146a3ec669950bc6029bfc6104886552eaeb4746733657ecbe4f9199e676ee2e9852ef0c5adb612d93e300e3fa9713fc611e1f8e7c1d5183", |
|
30 |
+ "img\/reply.svg": "7e78973c9ef21f69c5138b036192a889350ba4333df42c3e343ab34ecc497574a601d5c6e2275846c9fd2adc525e209c006e9a957dff5d0c53fe1a69ee557e09", |
|
31 |
+ "img\/sms_relentless.svg": "010ad7cee20f3a256a24bee2482b6798f042a3992c7df5d56ba803cca93552c3cda2a68d1772e67143ce45207b89d397e34ba6909f6b8515134db64e2c5497eb", |
|
32 |
+ "img\/sms_relentless_dark.svg": "cbe97fe9fe636790ea0b415035cd78321ff53ec93ab1276d4ef609555592fa13d09b2037c20e06bbb9024fcfcc0ebb806c89572b08adcfe4ee9d06c6466b685a", |
|
33 |
+ "img\/sms_relentless_delete_old_messages.png": "077c74a6f138ed1c46ee9426c0c0573bbee12b71c85ae0cb3ebba1ea040b4f88099405d1074a49496050f092e47af03feac9afb85ed1a2480d74d9f07716d287", |
|
34 |
+ "img\/sms_relentless_filter_messages_by_date_and_keyword.png": "a014a100ec4be4e5d2e09b8d8afc85125fc3f5fdd4379c8338c209a08cfc65a547b1ebbebe6dcc81d05b68081a66982a31f85bf7f7b6c66f441e679743f65814", |
|
35 |
+ "img\/sms_relentless_grey.svg": "ffac810d151f22067a4ce4985b6c84ec6f6bbf7f1c0a8711ad4a374b838251d3681edfa8439e18c1fcb78160fcdfa20d4f08527a594c5080938aa611991acb2e", |
|
36 |
+ "img\/sms_relentless_logo.png": "bcc8bc7301aa9c4811ee875b5deb4ed21d9c7eca187970643962f0ae11a7483adc5257e26b307c41644dfef63ec82c4e61a221f133c62827e1d4418928c253c5", |
|
37 |
+ "img\/sms_relentless_mms_sending.png": "063dcd7d06eced6be8a33c00abd9605ec196c3962c526212990760ee5f157fac0f9778d50d84ff5593a01ea0cdc15d5e848dbe39af47d082909e671f45832bef", |
|
38 |
+ "img\/sms_relentless_received.png": "1161fbf9e9351510edf200ae89f36730af1c1410cda4186f631d15797e2e484e384898eae1dd97d2904a4d6272f551bb25071a01ecaae101acefb32f855e6f50", |
|
39 |
+ "img\/sms_relentless_screenshot.png": "5bddd3148637473bd5d0b551df701094c8983e1a7706d753697df1bcec27029b88ef92146c7bc9213914dcdfce65eeaf6eb49d9aa95ce4d6e7f6317f4d9324ab", |
|
40 |
+ "img\/sms_relentless_send_mass_sms.png": "f8043b8d2dd53058c28552ef96e637072337d1c751930f3418ba8ea7a394507246f35ed98f8123ff1e9e6598babbafdc5b893dbedc0624a2d9c5c1184c6ad60e", |
|
41 |
+ "img\/sms_relentless_send_sms.png": "0a028ba48f0b86d820dd2fc13327c9069665a327f461310847286bc6ae085fbb7337162b27125b2d42fd7136a30c9dc7f6866501912647899aa0cc7ae676f706", |
|
42 |
+ "img\/sms_relentless_sent.png": "7aef983c66793540b102f6879151449ad0da60751d89eae68ffeec7b20ac6e84a1d92388fb808d10dbf63f7bedb68c888dda509ea2ecd7715ca8f264e05a470f", |
|
43 |
+ "img\/user-grey.svg": "1128d96d0a4281591140149de57924e014a1d709ab97d351100c901569bbabc8c8834caf1a5932408b7918997547c323b8b9f4f410e1f03a4eeb89045bd95ff8", |
|
44 |
+ "img\/user.svg": "d69cf4ee448f7ba5d46fcee24895e8705c297f078d943ecee1ea242b470c5e89318a5eb077c81e9c2a656f903c4e869298cc2935cf05a4a5f79e295dbf86df60", |
|
45 |
+ "js\/adminsettings.js": "817e186eb3c18f49ebb0db58d39e6ce9ba266ccc5706c55e4e8244785371e6074a49474dc4967eaef892e32e058b36676bca613c8c1ba8db876f0379cd66585e", |
|
46 |
+ "js\/arrowup.js": "819fd1975011e2819502cbe5bd006204122d5e73560f6f7fabe9c9f14c7086206e54c8b51e3b005820a1e2d9d29c9254ce2c1c8687285efc8daf3d667e51e738", |
|
47 |
+ "js\/deleteoldsms.js": "119caf1bdcb36616939bebd024963bc32a19e5ca318630a5a36c72c41c480d72a81b385a2c9891f87ae7d42c25c30fe1b5bb122caca802c4eb31387850fb4363", |
|
48 |
+ "js\/sendsms.js": "5606b17557daddbfdbe505e5be133c06ee0143a84314d245e771daf0e95fa92e35c954321944f00ee9b81e1f29fd08cfab0de27514b42c819ff33860513a688a", |
|
49 |
+ "js\/settings.js": "4ca5e175ebe913ad1db8bdb0ea7d50c4c8f54aaf8788736a95540a803f4a3e666b504e5c37ab45aa8122e29b818be464d129b1cd3d3033346dbf380ba8a5cd96", |
|
50 |
+ "js\/showsmstables.js": "7d415ea8ce05507285621ffbdfe6d877b151cbf56d1d53fb5830b1ef0db185371522884bc1ad63f58aea3dbeece91bddfcd01978473491f415db3af5d015ce4a", |
|
51 |
+ "js\/tiff.js": "0c20e8d4f9f602ef497a26a50d8fd253abd55cf53afb0699638264550e931aba9b5b41c1ab0fdabee064046aab13b921c8d6988d76048f6c9795bed5aaac8aa7", |
|
52 |
+ "js\/tiff.min.js": "c35f67b587aab62db7a3de662779a7b3264d70f5f856142cae88eadd1b477e474977f2b8c5ab31c16be002cb7ca9b52282e6de533b6fd79a02e6d33815919cb4", |
|
53 |
+ "l10n\/en_GB.js": "30be5a195908c731891e456c699053a5b9675e5c21bcfbe6f2091f467dab6bf0dff3ea167b9f96e7c6b492d74709d5c732a5eabdbec30c129607b0990773609e", |
|
54 |
+ "l10n\/en_GB.json": "7f1567f247b9b4ad32dd836903f34ae02cb93c26b34e7eec509ddd1a6e320d64be2d907796017c379afd7a9fd75c9ed5bd00187e93da4100132beed5c16ca74b", |
|
55 |
+ "lib\/AppConfig.php": "c52269913ee80151397520bbebe4f0c725526910ce18f8717ba1c8016a5f4dcdc9a6f9350bc56c8a6b607ea342ee0cbe0f65afd9f03c31902190c008f41c9672", |
|
56 |
+ "lib\/AppInfo\/Application.php": "7e5ff3a817b1d46e8b05e2453c34450c5629c25b5c3955593b36a22e5ff0a6a67a197665d476f7904c3dc8712105687153954c22a12f597828247a56a80f509b", |
|
57 |
+ "lib\/Controller\/AuthorApiController.php": "d019b31f73493f7bec44a7e87d56255c79204b9d03376fc3492a7639b32eb7a9a5ec040fea82cd74f54f3ae0dba8389ee487f0f3a05a0c57a4380eab69595210", |
|
58 |
+ "lib\/Controller\/PageController.php": "07da5883ea41b3f7993a3e358a03a3db592a30fa81ea1ed0f26a234fcc3824a243316b76824fb9a24f40304ae945c48118dd4bed1f0d2f6993e479ab2c1dcab6", |
|
59 |
+ "lib\/Controller\/SmsrelentlessController.php": "ed7b3db597923fcf1a1cdd207a505612aa9c7bde2e95d2136231c529c6eb71554bbf323570b44c915e832846951d1ed4b5f713a8ef2baac88a3a34d5cbdaa2bf", |
|
60 |
+ "lib\/Migration\/Version100Date20211106192148.php": "96b9793edf72598c0330aed9f0c6c27ebf02287bd84b6b7a0285fc784bdf6442b560bc5dd2e55b464bb384a24831ae17d7ea144b0896d9b11cb82a27fbf602ff", |
|
61 |
+ "lib\/Migration\/Version106Date20220813144231.php": "33f1f2953e038350e37c670462cc79fa48ab3a72b595f5fce970fdcc6d7eefa3401722da4cc532c7114d0c8aab7fbf0281afb374a695d5c1c1b311c30f64c9b8", |
|
62 |
+ "lib\/Migration\/Version108Date20220823132408.php": "5d94388496cd88cec1dbbe67a2e9d6ae6fd5db7ed42d4bc737710d3c51ad4d8ad29d53a62739e05e2986e2d4c96374f4660a53dd7b7808d30e44e5c605105971", |
|
63 |
+ "lib\/Migration\/Version114Date20221202011625.php": "920ee001204afad537bf2b7dbdb7c78e95b4ad0c79f5f693bd56347a1df91045cd83348f99e2ad714df2a735cf1a1d85aeb385c675ef6e90eed26f18b0b7d344", |
|
64 |
+ "lib\/Migration\/Version116Date20230508212745.php": "556137e5580eb33beffbf6198447581b71de677c2a2561508c0d7f2f51e3ab7ca9feb0715b994a2753616838ad732e01e6cacbcfb521eaf559fb40200f0594fd", |
|
65 |
+ "lib\/Migration\/Version117Date20230509183517.php": "dd289fe9ed0947b1174390dbd921ee696b50af9bdb360585376a6d5334e390dbcae65833c13c332732309f8fbaf8d83d047df6accb8118c9e4fdde8370db7b18", |
|
66 |
+ "lib\/Migration\/Version118Date20230509194216.php": "165c805c76bedec7f48811fb4a83685287daa07660cf369b952ed2dbd9a6c0bf1bee2b78d3642478acc37ebd597f0df7d9eb7035c047acfc69146b664afdd286", |
|
67 |
+ "lib\/Migration\/Version120Date20230520072431.php": "322eda5d5112d5e52a466c91ba02c40f1e77231c627c155e00cf6a924fbe16b4d6cee69978b0b3789c5daa03dfdb3fbf0f33b42fd40811aa366c7a227db4c31e", |
|
68 |
+ "lib\/Migration\/Version121Date20230523201743.php": "d4f5e1520213a4f0a1d74c6faa1da8a4988dacf8d3f3c7aa8bb932744789a366e1758e2a9be14c7768ca7114ac0e7588ad53b7a9ad6bc1a45da5ef22806126b4", |
|
69 |
+ "lib\/Migration\/Version123Date20230524182156.php": "7bc033f8852ac9b79e15bea2e13421c603acfcc443304bd36cb0f015991a0816b90950e6b45a84ebe5e03e92c4604e3473dbc90bd72810166a6a20f97eec546c", |
|
70 |
+ "lib\/Service\/SmsrelentlessService.php": "0d5eebe447f8e748d009f85cf24505c58e71d5f3a7175cda321ef3f15b4d3503417c40f6629b14f387d034f2c6d84950105bdd8c2fbce4e48019665bf1ec64de", |
|
71 |
+ "lib\/Settings\/Admin.php": "e4e5f6e8fc5748b11c90b676326dc228fbc52fe1f77a07e7b7460c6dbf2a8013b5e0b0f9084aac3f941478ae6ae75c47be17df3d229d8a998363b9a1d289f405", |
|
72 |
+ "lib\/Settings\/AdminSection.php": "1c8fb26e8347d67c69af385b0aa33be2764135a4672b872b6c6d41bef3eac6733ca2796c393c8ff334ff56accd7ed4d4c38ca50baff2360d8d8be02b9f8a7c08", |
|
73 |
+ "lib\/Settings\/Personal.php": "db6fc80342c865841edcae7d2cce5e50d04473a9ac47e26c2daabce493bbb1bbb922bbe9eb7353d759965506dbf1b4c99ce8e9c93f5c43769e1064cba19f95dd", |
|
74 |
+ "lib\/Settings\/PersonalSection.php": "e65e1a8939e3818e7cd295ce86581a603b1e2fedb732ce51ed1fce62cb61ebae9b93742b1d923f08e14cdc6bd5cf2818d47917321e0aa1736932830c05a81682", |
|
75 |
+ "providers\/Flowroute\/readme.txt": "25f08fea0f30105e850dbf07bb7a9351e47883640dd87d26981cf50f02ab5af8ef59dbd1fbe5e4127c0e019e13ce036f9414401b9d3f3a924c4125c291e53446", |
|
76 |
+ "providers\/Plivo\/composer.json": "2d8def5ce9444d4bfe4ff32e008e6aeec924efd40e0cb61f3a72585fc4cf89e7b62970e796d56ebdd5d2f6378f39d3ad540ffdd02c31e2c4daae9b760482619e", |
|
77 |
+ "providers\/Plivo\/composer.lock": "d9a2b89de334156eaded5ca4cdaee9b53c05e5d78584faf000a141692225a1bf6a1dd9ea6259bee2158ca7669c4000b3c366703fcd1f55a835278aa9f653c7c1", |
|
78 |
+ "providers\/Plivo\/vendor\/autoload.php": "597387bcc320be22e8b0060c456fc745d8e3fbb06cd1cfbdf093b0ee52aa30cb7e4c31d6d8c38450f52387c0cd5f9d0483e3976611d96f391f5651b71d2095fc", |
|
79 |
+ "providers\/Plivo\/vendor\/composer\/ClassLoader.php": "2b6fa585122ace1ba816410acbd8372cb75329917aae6363dbad48e396cca581452616e1386a2e445a8fbb0e461b988279103f4f89adf704bce7726f761abf0e", |
|
80 |
+ "providers\/Plivo\/vendor\/composer\/InstalledVersions.php": "62b61a5303337c975905fa55addb6b1157034fecaa5fb3b5bad251ef7fa1b1ba840308f64fd2e1244d2098b7f87431e35939a153298530cdbd82f81b99cabaa2", |
|
81 |
+ "providers\/Plivo\/vendor\/composer\/LICENSE": "f3bb64009f41a425df5a9bbab53490f0eb9b74fa8d6aaa2f57efb928edc4ffff330260666edeaa04a91fed708c3663371cf01b284f3a08d6698aaef7a23f355a", |
|
82 |
+ "providers\/Plivo\/vendor\/composer\/autoload_classmap.php": "1844f7843fdaabef42d1d9e4c09f92f51a5ad45b26d44b34a2aa9202a183489239a0f5ee6502f302b169ccfa3a4bea7308771ca02d3bad96095b5b2194a65377", |
|
83 |
+ "providers\/Plivo\/vendor\/composer\/autoload_files.php": "c0eaa5b28b83539deb67f24a98ebff5ac0483f9117a72d5cbba02e26f1f18cd4c93ebc23786047ee61eeef11961c55ae6cd4d4096a16f18a19d2af49a47820bb", |
|
84 |
+ "providers\/Plivo\/vendor\/composer\/autoload_namespaces.php": "0ac6bde683c053d62b7024686ecced083ca1a326d5346a248b1a058ac74a5af71d515d311ce76df799a518027f734b80b9e7f6e8022a9556c0f24ce90240d822", |
|
85 |
+ "providers\/Plivo\/vendor\/composer\/autoload_psr4.php": "91bffab80b2ba961f206bf3008a7380f81b7cac7b09afe4bcd2d4787d8b4c839ffe2a67442e04010918631b1c76b66304e7d7bce76371e741b444f2ef527355f", |
|
86 |
+ "providers\/Plivo\/vendor\/composer\/autoload_real.php": "2ff5b7a817e3acbf585fe506b11345f6f3ab0f21c0ee96c67037f09de6130126d4c0e728ea22508192787a451322369197610726f96f32a12f91b7e48cee86a1", |
|
87 |
+ "providers\/Plivo\/vendor\/composer\/autoload_static.php": "4fdf5e58875a6dc6bab4aafefd254cf3504f78feecdeda5fb431a56f84b37d2cf8fab8e233ecaadc2667f1be492ded264423f3200e1095aa507172b0dad3f60b", |
|
88 |
+ "providers\/Plivo\/vendor\/composer\/installed.json": "0365a8c8cb376a0b3ca8cdf63147012435d2488c5ab585db3f9e0d926b588887992c1c8cfe07ac187f5f72afa9a3db936c6885d443db444147d7c87ff0f3084b", |
|
89 |
+ "providers\/Plivo\/vendor\/composer\/installed.php": "923c151f9cca2fe9489aa4cfe04053d20e1923dfb388cc6aea2486557d77284fe6d9d2a77a7acd94496237465f03b712166a2f2f5837ab13bbb7f0aed8d52552", |
|
90 |
+ "providers\/Plivo\/vendor\/composer\/platform_check.php": "49e79f2c7c1c32796dfef02f64feda4fc8fc5aa05197465fba579997d332cb9dfcad3511efbb34a32a2b2c8d8901be4ca39867026b2471fb17999ba840c3c340", |
|
91 |
+ "providers\/Plivo\/vendor\/firebase\/php-jwt\/LICENSE": "6f6cbdccc57476f5386f5336c1efa105b4116760a329ae2fedb30fabe1f34f7c1a3073e7f711e07284c8b57b3b8ab6dcb38ba8d71f6835ac024ad524ad658f94", |
|
92 |
+ "providers\/Plivo\/vendor\/firebase\/php-jwt\/README.md": "8f3226941b2d676aa31b66f5a38f6fa78a4073ec7ea6d6a3aaf0209072cbc8df2ebee65f64460e350f499f8448542443f9859db75f927fcbe70f1f59384e1a70", |
|
93 |
+ "providers\/Plivo\/vendor\/firebase\/php-jwt\/composer.json": "82e17e8f606504476175a3c5116bff37c3d58faf5fbd9590cc4047f787b6aae79a84c660bf2e8dca453b998926dec84e6d5bca5d81b6817e09d99c6774cd04e3", |
|
94 |
+ "providers\/Plivo\/vendor\/firebase\/php-jwt\/src\/BeforeValidException.php": "8aac5fb14b6d94bcf048a1cd4935af09c25183e74eaad8f2db19902f1f017a33261707b12be8080d5a662bd01d997d4d5805cfcdf3127f447feb6ec6b971f563", |
|
95 |
+ "providers\/Plivo\/vendor\/firebase\/php-jwt\/src\/ExpiredException.php": "7cf0ec0dd02717f5152abf5c01979526fbb89f04c01802915745097c8606e432b41a4de5bf92b7cd1543b37a939ce8e133b7622f29cc48798c321654dfb94a3a", |
|
96 |
+ "providers\/Plivo\/vendor\/firebase\/php-jwt\/src\/JWK.php": "3f134e7503b44f882a92a699dc4cbb4d7415bb93526438e4395cbe877ab2da700d3ef7a8c037d7d2ffabb84e20165f93e338bb32c2bad9426e63708da4f842e3", |
|
97 |
+ "providers\/Plivo\/vendor\/firebase\/php-jwt\/src\/JWT.php": "9e5e21477b0495c3cc6fdff79d9b6acc136c0187d732cfa4ea438d9802be4642c2fe0e76b288238fa29bb0a8e37e31d57546d548519436dc49de467cfa704ed1", |
|
98 |
+ "providers\/Plivo\/vendor\/firebase\/php-jwt\/src\/SignatureInvalidException.php": "0c00a3a08bf4fc2eb675fe8ad3d8cb732a82a8f88d37dba5e510ec798a49342b8089098dfae1f1ef1906e62a4b8e465fb7b4c6d17c9c0d8e66ba33ab271e5c88", |
|
99 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/CHANGELOG.md": "f99b50bf2d30b8e842d2db14a28068364b330b402db7bb1fe87fd4e1e3a9009edb05a519a4c35be68ba99c4c334680ff52ff0bebb84ab99de8814959d34e9c90", |
|
100 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/LICENSE": "ed4199d68a412c0515450194549bac0c6a6d838b3950c036bff6c97457fade76fc914d11bf008321b3e2622ef0a3c14da0bee2f109529cfa5a5fdc11fc6452ae", |
|
101 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/README.md": "dcb463420d7da1805c5cc020988f60c15fc5623a2493556ba4bba63d431c21f0584c1e65f27bf0a4c7962074aacf40d763981f878a10e12327cff9b89204ae57", |
|
102 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/UPGRADING.md": "4f2540329c6e06bc0f05a574b0ce5d77ac3f7fa4032371665dce41a766cd28ee12a0b7803ca507faf005f6a3ec5107a60978b69a4fede8bc562333b736576f55", |
|
103 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/composer.json": "8746b3c8b0fcf0ede926b6a60b4d34e7a3e0e9664aef67b34e7e238c25179d22ce599e8c4a580e9f3d73122a0c9b373b87526874c947878ab339e662b03c150d", |
|
104 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/BodySummarizer.php": "649dbacf3be500e6171769c18b1eec1888bfe831dcef8464ebce4461d5fd337c60a200d3c89f9bd7c2714c0567e5e220b31ec2970e7a013f914123824ea324a8", |
|
105 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/BodySummarizerInterface.php": "d0a1271ad03136dca5752c0dfaa7fa678c6fb03890be828780201cd9fbdc8169ff4fd7c17867cf82ef1672ecf0e9f871f682ade1a8ff37e7b84d24c572e1b962", |
|
106 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Client.php": "8fc98c3490398476a81f660a0dda38306acedaab2f662f762881c11f98bab8b5194ea6c05477bfb2676848f54229087df8fac0e6aacec6499f2313e09b940ea4", |
|
107 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/ClientInterface.php": "d1ab53fbb1b6695e6537050421b3a749a7b34b3184015da449a1c76987fd6944bcc1c4cca7247b98b338926af89fa477f9be4897e6316cefb2c1656520c3ea2d", |
|
108 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/ClientTrait.php": "ec1e95b2f1c56e4443c6fcf695ede88e02f1129b7027287f968a0ef2f7debb7533ce2371a27b5ee07f78818786b0a6d1b3d2f8ce28f44f4a8f7e275bbd1b6727", |
|
109 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Cookie\/CookieJar.php": "3fa0964d59cbba956bb47fe103f02e4707a2a6ebe5a60dd5c33f59402a090b6f0110c2795b52f961f6ddf338567382e1248f1e27bf2d0e2033a43efd15e2705c", |
|
110 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Cookie\/CookieJarInterface.php": "a3c6b9138e285d6c6b7521dc7059a04e1c80bc0de7a925c93ecde6c95cb7fadab91ee05e9594d6b891872a557a1b98fc6717ca1d1d46e00992c9cdcdb934a71a", |
|
111 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Cookie\/FileCookieJar.php": "35111b9229059f54b537baec960b8480d5e3caf2961ca3e7e45de3fa5ad5bd0b0a91c2c4231f6386a4966bf9d97aa308a7e444000dae9b21f8c58b6832dee68b", |
|
112 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Cookie\/SessionCookieJar.php": "9cf11d2908913a7555e9e190e6a4ffb0f0e26ddb3d141faeb0e7bafaa6f0b3259119ce6febb6d01b5a7f5a3193f72a099f08ea45b5955bdc7120bfd4857879a6", |
|
113 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Cookie\/SetCookie.php": "7d6c4c14c9d652c27da23923cb577fa999e24f81c1b82f13fa329da3eda3373ba7a832b72d793d924fda9d6a3a02cb39db97e49e17feab3ecc93f395e614d44b", |
|
114 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/BadResponseException.php": "4b7a572e9796b8043d56dc6650709e59bde237b3bacab1206b807485cc850ec99dde86892696d73121c345f1c88a9d2e879dc91be2cd438defe2609e521011b4", |
|
115 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/ClientException.php": "0011418b0cd07eff70f99645a008c30e9a6a90b9ec396e8cf70ffc281140054bf313eba40d97ed34b59e04e5fd6712330d34268353493d112b8029c1c42e5046", |
|
116 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/ConnectException.php": "bca929720f3f8f4484899b18b40f5d4d40ebc4105b316679a9349b97200c74ad2ae6408e2362b4639bcc4a3150fe63ca1e08bc1b159c51744d76466c41203c83", |
|
117 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/GuzzleException.php": "444ae2d2847cc99d9a3895e2d23f0abe59bf0eae279809f7a4983e34098ee0a0ad7408d251df821c4029621060aff1ea0dc890615535ea4368e5796151a767cb", |
|
118 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/InvalidArgumentException.php": "2647ca6c297960b01b29435db7522ece3a997def6b3af71e26113abd43ca4493501c130e7767b845db0e723f9955164ce33664d49bd67a45bd29d270a66e0e3b", |
|
119 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/RequestException.php": "b0b3163e4eb96ace90c03faf9406b89ae21c7cd5fcabe78035d5d9e1e7ba0ff72bcf31b877ce2d5cd38e940cf0ead52659c3637dfa3567745fb46a11cc9de31a", |
|
120 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/ServerException.php": "9cab599fd913d8f0bb1b8f448932ae0b5c5b1cd7d83fc4e1e4c13fec29b0a849a5385a6c40183b8dc58404ed020227b9ea4483ac89d135c6c82e4c7985604044", |
|
121 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/TooManyRedirectsException.php": "99c4e6f908a5dc03939ca083232cf48cecd742616e00839ae25ca173ec458e6da10be2690b98588b76e0f3c24ee7f35c09ed5c848f9348c639c414aecedf6c2d", |
|
122 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Exception\/TransferException.php": "665600a8617328454b70a43fbb72c81ea196584dc22e10324b3c861974aa55ff5867b30b86a65123f1bd4fece75049a9f6c4bfeef5410a9f29913d350358178b", |
|
123 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/CurlFactory.php": "1dd7a848ab73a8db9354fa2f0461a995320ccb677b29464812a484730a85f405d8b6c9b39783881b299328cb8f99e67b9d959b00672bf60a4559b136fdae8119", |
|
124 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/CurlFactoryInterface.php": "0d063ee120e0ff6042a58d29b109bf6573494d427e20184a4d448ef31fe0cb0cedd60bb47c7289d5f6e1027413a28f9f57921823605d4f11086da5c9be8c0902", |
|
125 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/CurlHandler.php": "ae0388a0146bd0cfff1c597570f58acec92876d3d01298e1988dabc717ffd76895b45359cafd7bbc62ca1fb5e7e96fdab70697a2cb469c8c5d0298aef12e44e9", |
|
126 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/CurlMultiHandler.php": "d03d4a374657d671554d06e5622eef0d1b06d0a39a9167ec6f894ee28af31defe1d4306f937376cf5997c1421643e08e757880e45a1c9c10959c967022160f96", |
|
127 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/EasyHandle.php": "7438c054921687fcc4bea6ef6b49aae15651a95cced2cf73ffe46bb15abdf924afdd4784e8d2121ca851934fafce69d3661f1a792e6f2352cc5f5c1803ace3de", |
|
128 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/MockHandler.php": "0d8e2e43e0b8079f20de6b86c241afdc83bb5bcdc5a91ac47084ffdf2a3904a79e5db6fbafa4715785ded8fb90dd8fc418aa05bc0fa8c52220555720f81e827e", |
|
129 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/Proxy.php": "9caf11da430da351eff6e9be0a1e8e029bce41283a6d8215e2215d6abbd3f021018564d1e6717f65f280703d5e4dab78a2b522042d63c5a9cfd019b0bb0aa4f9", |
|
130 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Handler\/StreamHandler.php": "e45738ddf123fa57df229fccc94622b9a2ad5dd9bf6f65d24756239b587937bac9b7a37220e65c55f2abbd7159bc16ac785893d4aac5c192e6422af4fc4f1222", |
|
131 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/HandlerStack.php": "900b9df966c3c1f3aadc45bd42a81e8ab153c74d0eb90cb3c8b2f9d46115353f45e5bcaf0eaba1281ab98dffb3d136a0c0fa0058fe73d906eebb741b273c150a", |
|
132 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/MessageFormatter.php": "99460bb55080cbc7e08eb6f1b3c8abc71c38cd5d6e04422bdf8144ca554e7d7de29fc5d5dbf7aab5f7440c4ec9d779d684f8194f90139a1ece1bb086f14e3cc5", |
|
133 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/MessageFormatterInterface.php": "609462659ab00682e7fdd1bb56aed5ad3cf54a2ee3b641623175b9dca0136b4e1cbd3cb0541526ed86d05174a18a9333ba52a9e50f4c05ece55cdc636815e385", |
|
134 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Middleware.php": "42fea3a5bff7eb363a7af1f85a21a9322aee8d7e343295209815739f8bbd5dc372f14e3e8c5454f7650a3b9d802ca25fa069d64fa16b0f5d4d48c3d626ba3527", |
|
135 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Pool.php": "a6d17779976754d7c16127680ae32f8e45ed54c3ef4a2a6364a1e4100ce732b8494b2848977ba6b2bf6fd296d7a54b30a2f021cba5a88ddd0d1e0f3a3712b9cd", |
|
136 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/PrepareBodyMiddleware.php": "268182133f0e484b56fa23193d20def23166eeabcc2fd9626b17cbc20188d76549adaa4c768df695b787d31b2eb26a5316f0a3531ad3ed022aaddf0574fc2ac8", |
|
137 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/RedirectMiddleware.php": "38bbd75b92a6764b0502cea113e222d5cce7abe53c7ea0c01e441fbbb6b0514f2f54388ff14d459ed611925eaf9b48c0aee1b1fb41892d07d1b260734a1d2afb", |
|
138 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/RequestOptions.php": "239e524c17dadb296efbd8b9ba82b94ddfcd90c83377fe4bf2890dae5dbc62f58032205274575f14bb2e745112ee59bb559936b992d9a227dec00f5b2e32c03d", |
|
139 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/RetryMiddleware.php": "01236bb2265c0761148ccdda7d3668c10f9539119bcdcc36f10d077ca32013ca0169938d6f4bd0703018f38fac53b2bd34e873a07d8e5287c26fb64b7284dfe8", |
|
140 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/TransferStats.php": "4fe882f7f801ba55a3934e00d81aef09edd092eadef498f3bb424f7f32dc8d568940806a9d8e80b1b6c768cffd41ecf0814a0bb366195b2400f08a8e310a8c19", |
|
141 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/Utils.php": "c3e52199a0a1755f52b6902b78d008de10e33ff8b93242a709d7a12e8c05c1c2c09c2874439606f0f3ce6b353bbe3b8ac385a236307b428fbccc078e1959c7c1", |
|
142 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/functions.php": "f45c62cbff0de0255f4f149ee3e93c52bdae44492d43c9314a48d8a793ef028f8a8f704a2b28c5b84491687c3b682e9f85c4ea61bf63de56c6cc6a4ba8081ae8", |
|
143 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/guzzle\/src\/functions_include.php": "058a92f735b5848dc18be383478bd1659a0b578beba1dce5a1ef3b7a0b6b5f643e2f222dd72ed09ec72e8a5c5c9fae9757979f7c4016c5654bcce9d7dfd42d37", |
|
144 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/.php_cs.dist": "4d42019074dff2a1a5bebfa51568de254e5128b88ad309bbed5e8348ef213035cf3a4da66ae6753354a0dcf6ccc0001bfafa2453028bffb3548f2ede26c30177", |
|
145 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/CHANGELOG.md": "0c021cdbfea029de4a20511445e64d0d6c35400025f1361cc913754adce9b2dc16efeac12cbdd489ffcbb76e95f91108dcc557fb9dfdacc99e5bb98f20b55b43", |
|
146 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/LICENSE": "9699a00cb2c5ebf932515e1232b83f79c944f8100881df096de09e25222fa01173bf24d9e083db7d9605d1e4f5dfa14c726aed52c0fc2499643714a9e64c4cc5", |
|
147 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/Makefile": "a350f48cbb68a05cd07f787522193851f9cdc6b2643e34eb502fe261387d97e5ceb8499a22b20ff2fec5d7352ff239a952fa3b129ba3407fae871683d65e9bbe", |
|
148 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/README.md": "1ea705deca28d726cc65d0f55db886545b9f5309ccc085bb482f627a0ddb5f8609d6635f65686e3e26b9a23cb8bf03b3e8d02a26d25eaf8195dc6c2cc93be0bf", |
|
149 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/composer.json": "74a66451bfa422f886266ff300b4ca5f7b0ed62199293635671718caced457f6eab5b8c9467f24e999762f56368fb35742dc0adaa35a233d32c72783112a6c50", |
|
150 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/phpstan-baseline.neon": "916bcb7d298578dfc4770a3c49ee558eef9a20dbff8e3d097506379c8680917b08a8f96f2b59d96b1b56b1ccf4a5478c868a2da504a1935956db70f51528494f", |
|
151 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/phpstan.neon.dist": "ddfcf700a47b916ed1072c979f13d6d51327c9bc389c49ad264ba23279b01151b90aaeef0a81a13eafd40115d407ceaf471c20a61b47f1b4796f8adf3c1ad218", |
|
152 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/psalm.xml": "52c09c8b7daf6d90db16a5ce50b7a8ce15c1ffa02265fd1d4b117cf717331475245bfd4f2dc45d3990d67333988a11081e13ebf783bca8854a1df9c1b0cc9cfa", |
|
153 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/AggregateException.php": "97b6e46aa16ad26a2b714129b83d933cba02ec7afcda514ef67c5027cf5b9b93a5d7cbc72560307adf294179a4d7b86a6da9caa835bcf5be17e398501bb88fba", |
|
154 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/CancellationException.php": "b958ade84fa4e6c7a7efed66dfb6a7f83b9743a9ac6581276eb99bcab667ebcdfea92a9bb114d086c5831d26abf7f6ec3e03254067e2b29abaec995e28cbce8d", |
|
155 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/Coroutine.php": "d1c789e47536cf8c9db52acf791bc6de0d61790856a78f0cf6a9c98a1628d2c42cdf9e5e94e05fea802a099bd3ae3c65b790f2fb5a342bd130654c4cfb4fcf07", |
|
156 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/Create.php": "a3651bfb1f458675c58397460c8534c2819404fc89422467f119de4cd80147177e462a9965bde6a75e74e4354c3c6935cebe1891e6a53a1bb26383f22e9dbccc", |
|
157 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/Each.php": "e57ea03f69e1680b56676ca1057e8defe7eaefeffb456b636f3cb32295eb6be36073c7a9a621f656c40d5661c0fbfaa3a632961d82ec7f116ab7fb5aa9db196a", |
|
158 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/EachPromise.php": "c7d79757cca80b7352ffd12a6743a515255e4a89764f65067035b16fe39c09b6dabb833aec3fad3cb741aefd778f620202caf79e98b86095c6b252f4e555bbcd", |
|
159 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/FulfilledPromise.php": "952eac7f7cc150394dedb72ac97e624db8156ecd41c8afc382ed0cf8e4c2c6c94879b7ddf6ff76608c6a95ef30ee136f44fa03ab9f5ce4b7fa01bcd0c7e7574f", |
|
160 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/Is.php": "894b3c475b5a828e442745507fae4b35bf394fc9fc93905258f9736a67112c321b1f3e353f8f3fb84e8778bff67bd9d27a6fd5ab6dab3218a30d82b8fd14ae0a", |
|
161 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/Promise.php": "bbfba94124c36b87941e1548162708a5543f156d64a8f465f78397a02bdc34c764b60f73d5e77a3a2e48727f4cbd91f60b9c1cd47c0fe205994c4ffdadb99c5c", |
|
162 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/PromiseInterface.php": "8d8d1d9e04d75ceb6d3e656794fa93170a3b1f9c2dd3b53ba6b4dd3e599f880599cab0b1ec15eaedc1b26d09d6c535dc9fe92802ea8ab1ed5927ee8cda7cb9b3", |
|
163 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/PromisorInterface.php": "1058176a68078d02c288528673176648e38d2b8093e67b0984d73ebc710c0bda7019689303b1f064726cbbfc9382e733443e9d5443a77715ba40bb798ac79e04", |
|
164 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/RejectedPromise.php": "53914a46ca238b8d079333f9c71180aed015a77bf765cd2793790dde21fa7fcf67dcedc5c797a1d7caa06d788bd9631628712861b1185f3cef9aa63260aff0cd", |
|
165 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/RejectionException.php": "6dae5e0b0b47538e5c94a3d4890623e3ec41be8198a1d00ca84d77f32b9d074cae13e25ea90e2af614e802aa28271def466e5ab623c187df49425cdfc5bc05f3", |
|
166 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/TaskQueue.php": "431a73762758dd08406a41587115a11e61f921cc01997ea71efd803b2e3882b9cb7f6d89694e06ecd2992f2bffa38ba55d631dba7fabfce3b84d68dd4913a02f", |
|
167 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/TaskQueueInterface.php": "f0b2b36ffb75337c590f82d3d7d19a4caa4eecd6003c0bec7ef935604dfe35f4e960f49da7115b3b3cf65c61d04bdf258310ae1b4f4b6cff4eb09f52626adc11", |
|
168 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/Utils.php": "9bb1eebf4d0f43bc47cda6f70f08b3fde962355075bb87d40ec75d41b552c262a79023a72e2e8d776b6d0db1ef1d412e398ae16d96476aa5c72afbdab9d5a9fc", |
|
169 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/functions.php": "b756c2bce2557e9c6b8db2ebfb026354418c93f54169d1e9249478532bb02e1062c30e14060a3bae195098c74deb4f7580943aca944a162615c44139acfa7861", |
|
170 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/promises\/src\/functions_include.php": "17063296fca8aa655e7d5267abcf04051cd58fab5a7ff02530e1becb5002306252d5ec55c82461cc51f62c881c51dd80da53ed9d90640b6d0dd56d5e8f819022", |
|
171 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/CHANGELOG.md": "0540da857957565d77741b846932c739e0883751660d561b2a0990a7cec8188573c2d31400cf9f125d1b6eab482455d19f30a8363354341e3c54088a0c418e7a", |
|
172 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/LICENSE": "5d25479f1c9c0b802e2944e029d7011f9b9d3f7b37f7c12eb77321ba448414f79b0b254c0846d2e5e1b8826bed85d7c377803a4ad5d5afb288f220c761822043", |
|
173 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/README.md": "b9759cedfe2199b2477e95fc0770f35ed6a4a18c6e6b4b4e30a20f75945505dcc76834e20e61e3aed90fd790c677536bb43f593de8a68558a200000eca8d0bdc", |
|
174 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/composer.json": "27ad0b2937068e201fd0312a7dcfba706a8a318ca4e09d80f29611803bfb28d48433ba5f2b452da8bd76fdfe2b9f073f81f2e2cd6fc3e4223b20637408f6c836", |
|
175 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/AppendStream.php": "d94d352d6f640589e84fe2aae0bd20880c4d6e897a29a47d4dffe6aed4d852fd5df274db2e68124c7f15b84d6f4fc684873fd03d003db39caa61b024b053e396", |
|
176 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/BufferStream.php": "eee7de67e107fb33e8f97949743726a30e8201fd874490fc93870a410b1e0e3a059b75dda972b3a844b8c739b9b768a73d65c61bf8030589d0d787aa26f70e8e", |
|
177 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/CachingStream.php": "e9b1e3d5e2bfae610677b9d216643be7b2e8b97cf661bc5c67631f994df0dc88a9a9ac7bb9dd68fcfd2ed343cadbbae227a8a46baa3b732733497e24f1338be7", |
|
178 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/DroppingStream.php": "63db37354a2eba98b768f0929ee9a4ffbce1647a79cc9aee5e994cb693e53cfdb9f7a0fc4c32b68b46c64b39438b1c53a30532f5f8fb442f07062a6b4861e39e", |
|
179 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/FnStream.php": "bd25e2ca8ea196a5e876c5b9d01c6f2a27b206f7ba05d047cb46476c52191a594f1280c7435b6429e4ea411fe5fc01a2388e213df26d27c5ae5094a0d0f2d619", |
|
180 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Header.php": "27014466522ffca93b4a3da6e96a5e8501f11691f7642a2e5091f3d0c1b146789ea41fd7fa1e3948f264926e7b764b557b1b564a95a7b5cd56c17c8ddfb6b7d1", |
|
181 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/InflateStream.php": "e19b69eb2f1d2f8782f7285414095ea810f746d02a447badef5ec7185623235f17f5689682b185ba124e71a19b0dcf3d36b64894d183e25edf27f1d1e34c1c0f", |
|
182 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/LazyOpenStream.php": "8c262a2c574767d61a9eb084d6848bef77d047601ec5688a90fbc012d5349d9b4ea188444fe509c8ffbcbf6ecdfd839a461505ed3746b6e1c5283860f7fd4a2d", |
|
183 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/LimitStream.php": "81a43b1ec261207c1a52faac2c5099a429e43083bbe0c9099f447859d2ea12a45d30e7f0b5a994696084b3c59401bc28564685c432644caf6a9d8b9669404c91", |
|
184 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Message.php": "4e9b857c226b57e2d2faea27643d6f213bba65bf158889a528fd684cf1acce6f480805d04da39a32fbd25be9fc51c4f1a3c1bbc9e92f3707fcf33a120b2aa256", |
|
185 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/MessageTrait.php": "367bacfe383be2caeb0064fe80e5f6b138050dd4189bb65ff82d8f86d0b1b604090b61a2473d7e80c733c395cb893fa9eb2dad0a63a353c19da32e940a1de01a", |
|
186 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/MimeType.php": "98467f19beca7d4239963d4d91a7896d44539c13a5c694c4aa8ec68f3b57031367d1cddff19fb51c389393cd1402a574c9afdc448766c8807228d726796d2e9c", |
|
187 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/MultipartStream.php": "5bbb8f71ad1f2f421eac8c0d40c3a18372516e8ab8f2bb3f917871bec9aef0eafbef930902084aa3ca64a8ae930edb1f2befe1e6b49dec387ea239c5c475c099", |
|
188 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/NoSeekStream.php": "f003ec01ce15f5dd56200396a84a2c94a1b134d320230983ef91efb1abc770827018894a1b8d1f3a68c2aa481e8f0bfbaec4c568d0b0fe251a61f76ee22efa38", |
|
189 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/PumpStream.php": "15192b83cabf910107b30bde59197618e524aece85f9d396dcd8459174fe50a1cb82de51e5225b8e6ea64fbeec7b4d94f035bba2ed893efebb660105021fc98d", |
|
190 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Query.php": "8ace1f141c08396103431803ed35e1bf247fdf7f7c7b727ca63e58a1cfdd7e353a6c266c8a7bdbb863e5d290414ea630bbe37f55f275cc5a5b946b794ce01740", |
|
191 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Request.php": "e0582b7b304fddcd81a214bd8ecd4db301479eddec3084b18b822f5e22fbc9d1fe3f3d2f6ba52959619dfbd0e98db304b2400e67675fca41f470ca6126085da2", |
|
192 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Response.php": "32524250d58fba5c152472ed37160a9aba92c586c9b2a6bc55f97134e490636189bc8708fd8ca4145478a5bb20ea51b5bc417fa8d61ab08fab3479a04c4506e2", |
|
193 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Rfc7230.php": "beb2f85fd643c3cdb3c92b401c4df1385bc6fcddf7dfbfbed88396611438720a1b86ecb9b913472ca8edf1bd9782a3692b2138195fb366ac1b8a7f1b0b81d390", |
|
194 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/ServerRequest.php": "f3fead87c83ce2f73b2890ec79cc620f319c59ebc41a041e4b70b38bb1e412c928fd7ff0f10d96fffed841cdc1ef2874d5ddb0e7cfbbad3ffa81ce7484365c05", |
|
195 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Stream.php": "7d108ed410ba89cad35637f837d97f7ef53c43a4666d0502e3e7dc4aad06e7bc365f311961d2bb8768faf9d9c6d64d09e080aa9bc65638084a127e7a563acbbb", |
|
196 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/StreamDecoratorTrait.php": "e1b90e1d97a4a1ed1eb1552bcaa9011f79733167b7e5e3f2af8cfdc54adf0d64a414ed630ec74418020fd8ecc7c75e43db6bbe0fdb9ec6d3ea928bd3bb3f4561", |
|
197 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/StreamWrapper.php": "7ed1833a91a1f56b743172192b7ce4399928b261eddba6bdcdde958bbeedeadcaadff4fe5b3913dad0e4b2cd9346f47b43849cc65bbdb839c9d9e4b586638eef", |
|
198 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/UploadedFile.php": "a66f1119bd7327a19315456f17ac2d3ecb40e564705d41047a91a02b431efcde1eab2750b2f354fd2f5c10c1ec1b5968e84e758d51210f011dafa8df5fb35c0c", |
|
199 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Uri.php": "fc5c81c97687dcd34ebd18c6714479eb6b4d1c7d58963bf7f1f732eae98a04b094dd9c99d58f4bff265b2faf0629a456c391ab5b96534c927420f51a95dda637", |
|
200 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/UriNormalizer.php": "8992ef486358f43df4a9567a6a232ad76883d9c7cacdc94707343e5465c857a4385739f66d0024136df94c59e60a5ccbf1850634a55f2cc1f56adddc717434e0", |
|
201 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/UriResolver.php": "46e4c0ed24579ad9a0cf467141fda7dce6dd3a3d3281a1606261f322462d1b19bca413f3c5590b7ad42fda1fc57e60ba86d121b5af0c5b5a2ea21bbdf07f44fa", |
|
202 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/Utils.php": "be75312627f929b2ac94cd6d12972816a13660a40d25cf87f6fc7fb7af416316ba8988656147a16becfa8120ce2a484c84d9f399b43dea2cd3c7ed916f7d8302", |
|
203 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/functions.php": "f31604b89969730b482cd03a13b1356ff9b91324eeaa9ec45a45f86be2bd52a8209cec55aa878d5875a3c82fadd86848d558789d0072e853505d644f0a2603ab", |
|
204 |
+ "providers\/Plivo\/vendor\/guzzlehttp\/psr7\/src\/functions_include.php": "5b85d1438039f778c454f67bfd3ff2933d06b1aa4bbf9dc516e385bd36cd749f7001de6278c5a1b4e3c5a7d280876d4d35337f87a0dcc6e521ccc20a3ddad1bb", |
|
205 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/AUTHORS.md": "bd202fc574c862a7c3d4a27653605b6fa377823744a793a7848ddaa7001166fd645d6047892d79c8488786d82fee785b87b19e9af1d04512503eb195bd300aad", |
|
206 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/CHANGELOG.md": "ef87f930b797ba0b32dec670491e021b5c881f6986624c1906d8f910e8393b37e6d7f5eb9f860c1bb8447ce61a206bca80db4b2279c57bb064a28be3d83690fd", |
|
207 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/Jenkinsfile": "98d95e7185d040e9aea6e75118ec17ac34e38e17f8ad5a38d869ea02c0c9de5dd79d208a78da23ccb87444df7b7de827b314469027ee7573cc51423521786320", |
|
208 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/LICENSE.txt": "0974968907abaaf61b640ece98a502e3c677b7cf734ccc82cb522b3e166c50eaccb189b4d31b03bdfe8e61a97b3ce06917a7ff5c7c60887e2ae944f909fb6e72", |
|
209 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/README.md": "ddaea1367057ed09023311b6ce37938985c188fbbcb6867c6c3ddfbdb984b954e42fd6450d1e5cfe10374ddc4448f9b96d6130d465983d634ddb3c0b01a276a4", |
|
210 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/ci\/config.yml": "d50e43de2ba68261ae35625f8ce984903baffc3c6535d31a7fb3c5efddd08f71cf0ec3aaf22ee9e17e93852dd99284b653b343a053ba50a45cf6716033131e3f", |
|
211 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/composer.json": "c6b4f35c928d33d62b48139a8be5d85868fdcd0716380865f8dbe0f5a708600ad7dffb3ba510a45bf4a8002f7e1fbefb1c835de7e3e2d9b7c1cbddf9fa2b565d", |
|
212 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Examples\/JWT.php": "ee8052cfd45be4eac77df60902c518a14bf2df07ae7218322493a8e2d115280b87c65f9637ca766a63d82dce36c7c78e894984dc83031a9b7a8d5a6345d38214", |
|
213 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Examples\/Phlo.php": "f9d6482c51987aaa3d7f0db59cd45030e17284262681866999309205161094d96a55a39dd2898d0b7980074d764e1bde6cb6ad1f50be8a40cc9d557431c1bf91", |
|
214 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Examples\/SSML.php": "932a827eedcd81956c275529815a2f7542636b0cb887fcf182648e8f972006f6ba8ea4a763b3de48aac989f26a5e44752c7d3a62df256ee2b6a1c922de677e14", |
|
215 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Authentication\/BasicAuth.php": "42c036c38225556834ad5cb916db0c4783c7127909053ef623e7f71aa51c9fc968b9523fe5dcdaebee769cecdb0c4c76215116cbf5959b268c8792fa96754531", |
|
216 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/BaseClient.php": "029f2be5a3c7734b5030b4fa96e0d7c0c1252bb7b30b9f001a78abaa646d6d3821a127859e5d170ea5e3c7f5c86d06112f28152c5cb2315f94dbccd318f9e5e0", |
|
217 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoAuthenticationException.php": "7ee7458999adea1ab1722358f669467cb35265eb616ef2eb16e6bc3d42a7f3c2fcb0b42655df8f4f21127bfecded765bcb479a6923dbf1a184e00f6e26321ab4", |
|
218 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoNotFoundException.php": "bf54dd70534e988c27d5e7d17bf8edf9dc65191b77677d9ffbf95ae3bd019f1ba368065e82440e04f9a0d7045cd62b5915943273b5d8d72ba01676ebf2975edb", |
|
219 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoRequestException.php": "6655a36e42e700283235b84889088e378bab6861ae98ea99c20bde017ed39b83dc743e5c166e8129b9910a434b119578b23523fdfd5e9e1dcf3d57c5cf9375ef", |
|
220 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoResponseException.php": "4f18628f90b1c5142446f0e394d5071a91995baec240344a1afa47687ae463cdc3dd18a79008813077a3511c1b00dff7a8715d26990afcb6f9726598c96822f3", |
|
221 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoRestException.php": "758babb40ea45fb50dafe5231605196214736f014860618af9ca7161157255cdf20c5b0bf534f6f6b30a4f9bf612b5ff5edd2f7adc45553ef12555354f82c15a", |
|
222 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoServerException.php": "b2b8f6d1d03a720885ce5718b1c80bc75c7f483f72a1d2d2313b98a37e152ca78bb688f7923f025563517a52de7e915325cf86e463a2083c30ca2473446b91c6", |
|
223 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoValidationException.php": "5faec3f351037d6affa710c10f733c57a7919cb04820f93ef0c19f75b2f2b2b8ae1a0d004c216673977539b713ca31475f233fdd21698a390319364d2b9a4ba3", |
|
224 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Exceptions\/PlivoXMLException.php": "a66429863ac7caad7e0d77f7a1fc105fea0a45e7eecb753e64bfd5a76c89b5eb06e4228bd63a78134090774458a646e10a11417855d3e72b2a6fd75aa754c625", |
|
225 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Http\/PlivoRequest.php": "3fa26ce55e1b201dbe78e4bf3615f8c38d9e6c4e96e5b3673f6cf7985bc4055b88f227677273189381bd29076ae5e8baba6c0cef4bd612f2ff8fbd2847b6c129", |
|
226 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Http\/PlivoResponse.php": "3f9f1ce15ef75db2e028f198d1bb337c37f31fa6dc7e5b985ad589f6a4dd7d873e3dae968b80f5e1eb6056b4bd00e1a4df4d54242206861302f9d6263d177bbe", |
|
227 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/HttpClients\/HttpClientsFactory.php": "a9fbd6c007260fc2169648c9c764ff7b5988af0874b21211f8e85e8a995897d597cbc0c9fce4ec5c8d60a901ea05c5a8cd70684c2302ea17bff528ac674ea578", |
|
228 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/HttpClients\/PlivoGuzzleHttpClient.php": "dc661dc489b30bfa98e0d75f04147d164ad953e7dc51326a20fa94846fe30afff07ce92958c27a9bce9fd15371543852c0be4c24031cf382b54403a0901189ce", |
|
229 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/HttpClients\/PlivoHttpClientInterface.php": "61a18efcb4383bea7598ad9167ffe49a73e295d2ed3229c015f9a5ea08b00362005df1388cf6846f1c331b123b187290a1651341c76ce2cd4233926c927b6e9c", |
|
230 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/MessageClient.php": "f96e09d05b71a2e0b6675300132634f5664026bbb84472a1e7ca5f72b679390170ed5aa0d4e21a4dd1bc646cf0267f0f9240c931657f7cca9b2bdea501586d26", |
|
231 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Account\/Account.php": "22bf526a376e6045fe9045ef4eaef52c769ceb8a7c3ef11902e66acdbb673fa521f70f446e6724155c8499cc700a6cf4f4d435ed06d81baab69f638cb15651ef", |
|
232 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Account\/AccountInterface.php": "5093f51c3803de918f3a500f1754f47a3dbf990008804c07e543da253a22641b96ca2ae5faa7e6800cfa10a41f7d407e5d29e9907c0970a9183a8795be9f7543", |
|
233 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Account\/Address\/Address.php": "7ba3e1e7e136d43989fa0449b29882d78fcea39cb764e54228c7a4a899d5ce4db2deae9d9ff9ed5cc53a8af72f98c55914c10be3dbb7b9a354b8a06e17cce829", |
|
234 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Account\/Address\/AddressInterface.php": "36182073184f67cb024e0c020307d4d74c8b5c65e3ac7affcb76e189c91af9750c318404d8ba3a5a6e104d64459c59c80d7a944395796f0f5aaad18d43d93720", |
|
235 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Application\/Application.php": "9431715557954e8ac1cc340f3f568a6eddd6e00a0ff0356154b2778b118f620d0afad3979e79eef0a583b313256fdd018516cc8128a441dc667b39668b6f506b", |
|
236 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Application\/ApplicationCreateResponse.php": "cb1167e6057eb71e102d55ad2ac3cc2c7aa2a757b317cc97d8d08dc400548d4ac56379653583d53185ee8ab37c4dd189b66af011bc9a32baae55991922c41466", |
|
237 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Application\/ApplicationInterface.php": "77af1063e341dacee15504837264b8140ffa3e8f537b9eb0b102e8f6d184deefab6a08ff7f771965c31d6c84333de9963b2e998bd0389bd0517479d5ee150d3f", |
|
238 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Application\/ApplicationList.php": "0840ebcf3a0d9688cc68a82f11484339d8dadc9d1a50787ee11b3849a361a421f30417ad4322633c53633b4cf58ff7980de6ef87471fc88b16d090f127763450", |
|
239 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Call\/Call.php": "8e0a3bd97abbb7b9d03e22a4eca6eac4989653c43facff064a374f6787698bcc91320352d105f66aa3f31cc0d70902c8cef0f9264062ec4bf4e5cba6d07549ec", |
|
240 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Call\/CallCreateResponse.php": "a3a07958282fc5a6e7b99978427e2361e8828a63c06a940159a7fbb356ab9621a899e6e2a25c27d445fb92ac34b63d8e5a8b6f0782b7f20c7d9f4308306903ee", |
|
241 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Call\/CallInterface.php": "9aa42eadb3b1c06c802d46f1a11b17acf59e0c78ae65b6c9039b4afd9fe53f171cd8023be738a359128afef545a6fddd43bc039d94b014d122e9714f9591ab71", |
|
242 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Call\/CallList.php": "9883c38a74497c496cbf7c4a837051cb6bfa0ed0b9ca9298f8908e7195a000196f7c79b4846417c64af0aeddb6327e45ad4b36352a28e8300c977e21db0fbd0e", |
|
243 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Call\/CallLive.php": "14fc226091078fd069998fe41625d086407e0c22455dde078284f9a3e8fb34fbcac0b75484c5350b437387dc203db7690d9fe1f02aeb09da2d5c57f7b2ffa651", |
|
244 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Call\/CallQueued.php": "64552d83e5911b11202ae4a965bcd7c408643c446566c3d09aebb0bd02fac0dca41477988aae62e91bfb42913900f1eeae9d20693c6bc29651e2734b06cf18da", |
|
245 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Call\/CallRecording.php": "d23438ea994b0ab936c3917d77ae9bb38bc9ca14dff4c5c120a0f583db46891af3bde1a8c3f55d15bacae99723e510184c14c60eb6d3d411d46aa90c5c8acfa8", |
|
246 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/CallFeedback\/CallFeedbackCreateResponse.php": "cff0c47988bfee02787a2d73df6b3165749844c1a93b1fb91e87e80582bd28c8c7efe101fcd532bdab62886eadc6354924eea81278da5037ad9d3ee5d8dc8f29", |
|
247 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/CallFeedback\/CallFeedbackInterface.php": "7860708568f488bd0832e626123f4bb5ab986fa5d54f305d4744503ceb4e919857b78a02b766e7241d324a77d86592f60f26d1ed78955f5550bd0fcc7bbabcab", |
|
248 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Conference\/Conference.php": "8b97d6c9abee836cce410fa1216fdb5aa8a4df0c8543a75c2415bb31a5ee2d87531d5d162b218660a33cdc30539861cb09d85a780feab2d5321d0e8ce06194cc", |
|
249 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Conference\/ConferenceInterface.php": "34f563cac4a75ca234e4517cb4678998461011440f30f9d81895adfdbb2e1960009114773ac30901dfbd2596d327554fd335057de66516b656f7a96446f4b06b", |
|
250 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Conference\/ConferenceMember.php": "1a880200a2988394ed0436702f805ce60762be1774e1d156f38e45be39cc72203fd4f04411a521ceba8fa9647cb00f6d1bc6d94798b66f12175fc68d88c51dcb", |
|
251 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Conference\/ConferenceRecording.php": "1c3239209726556971c2cccc812ce5bb5a3fc8c7a0e4f3ef520e037acde32d9659dea1dc5d3803e1f7cfd39e945a1680983bdeba8cf62459fc168f0df731adab", |
|
252 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Endpoint\/Endpoint.php": "4c9a87fd6042a3eb486af5dc899d1e4c0948de5ebb1467cc85704030947e2588e79d23407ff662a21b097fb46a05925c3df29dd6e2a038555cf44844342cb206", |
|
253 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Endpoint\/EndpointCreateReponse.php": "f77356f3ca29ef7163e47530004a5d79c1da73e922b17333a89512e39c7d3cc842b161d9dcbc745075f6a6c7ae27b7f7cf85f56a6d5bb796b87db4efbb8425ae", |
|
254 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Endpoint\/EndpointInterface.php": "09914bc8e8eeca2812a4dc07469137011eec1dd77b99e3aefc8d5b8f4675b8f221bc54e37417f6c45b07896b84bed953f8c85831f9e7cc7b85b7293142b60fff", |
|
255 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Lookup\/LookupInterface.php": "040b0a2c01ca3c0c02c2c8450b47e8d1847ab7158014ae161ce971e330712d14d389cd746a353707d2bd2667dc604e55c662af8eb15796cfc613f285e170ed15", |
|
256 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Media\/Media.php": "72b83f02669ec7b942dd898a74c22e909cd9b058ea2e903e92ef4dd9e985305311d53c30a0c54a3f0c210433aeb7b8bd04a4b3a768c853aa73ee4dad9c621a56", |
|
257 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Media\/MediaInterface.php": "1cda06754bd1ba503a8405561594f9d3cd5befee2cc6d9cee98542886c71601bd8744899e7ede346df6b90552f05a9eadeec4cb4d11fdab3269de88170cae961", |
|
258 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Message\/Message.php": "54ae356246cc911258552001390f10f701929afa24801b2bc6cde72484c915e2e738a03d04aee90908003efb3b4b3cc8106f92d7ff87d2119e8a350f7aeab54e", |
|
259 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Message\/MessageCreateResponse.php": "75495f459ecf577e2e0c2f8c075d569f36df80c5c828fd1d6b84a001de2c3d032add50b5ef08177d5c68014fccbc939c8ff89ce6c884ac0c1b64f4301d81cc5e", |
|
260 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Message\/MessageInterface.php": "e96af121fd4a851e4c1f27297c602a5e6862e0ac54974aedb19248f017f2d98386ea9b495ef6cb775aacafa7b51b6117665c803356442786142c15e86066ef41", |
|
261 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Message\/MessageList.php": "baacdb72ec116be9a14b8e7e55d6c40cfd8b04c5bd1b0d93d5c9919ccba2591105e03dee96effee29e95ab7b7e58e45569760ae825351c1891877dd96853254e", |
|
262 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Number\/Number.php": "1bf8e1b1844ccced8d8068a80ae45b6904f59b0fa0e7d6a7c5b43adda906859ec11d709a501f560aac3f8315176e9260ba4796aa9cbbd637431ec94f0ec0c668", |
|
263 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Number\/NumberInterface.php": "e633bf2e705735759f6e27f9e747e3e05e839484b57672e2da405b7e2d8615653fa828f8295a442d13f5b64645fd009ba6cd923f0c163f2070710c7df57a1a70", |
|
264 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/ConferenceBridge\/ConferenceBridge.php": "3da97309ccefdb15596bab5180d386e2a78cf938823225820f5b206d8d8f366209dcf96bd139cd0364729c8b733612ae067d03e1e29aef472c4dc82527d3002f", |
|
265 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/ConferenceBridge\/ConferenceBridgeMember.php": "9ee728dc1f37fc183fd4890ca5d213bb1f47899d2379a16009de7ae32b75b459444a1a329357faff349909ee89843ac5798c75699fb2b8d939501f61dc09b564", |
|
266 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/MultiiPartyCall\/MultiPartyCall.php": "d13d863ee416714a697600882f33b88a8bc9de8d5603149fa199f787d7d904d55aaa6646cfdb3d71caa99e4e95d7e352199e8b54230d3c64cfb81924f1b603f9", |
|
267 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/MultiiPartyCall\/MultiPartyCallMember.php": "6e8f1c6a1177d0c933352bc2d8bd54c989db7679f2feb893f430e9e634c446d033d01a82ea740185b1926734f285facdb3d99b18ffcefe83be723fc08b50fc12", |
|
268 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/Node\/NodeClass.php": "b8a08dfe16a42c08ea66d141b3b4471caffd2bbf89fa4b360a1b16a7072ea29d538792c16b93f1e3f1a1a01d564acf1a40906c32482c4cef0ef42f1647e483d8", |
|
269 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/Node\/NodeMember.php": "e13f76753f278f07e8778f1d0ad64c9ff401633423ab2476700ad0711ea5534f7caa871b5e10fbb26096feca64471205082f9ba45de607e7ce71eccda0e7db91", |
|
270 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/Phlo.php": "da8e7b69e9290d876b6ebe6778c09ab68f47f13cb22438ac92d6eb880b7fe72ffcc68c681cbb9be074e36f3ce4afefc69680e7a3493d3046a04ca9ec432d7a99", |
|
271 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/PhloRestClient.php": "5f3b9bb5e3f7dd96572f1dc71531caeb0b14b21ba7c291561c1ebb040c3ded22bfc0dbd9030843cfeda8b4f83e69d86ed9db2b3b7d0cc8b311ec64000f3b935c", |
|
272 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PHLO\/Phlorunner.php": "c1f3764aa4a4c14a33614bc7cdaa05043d268b24f88cb2312bec3596e5e7e5286e9d0429edb8583b640723784b28ebf69df691d5e4ec53b7d7912252832c3ed9", |
|
273 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PhoneNumber\/PhoneNumber.php": "57bb602a9f511dd39c7143c50a9ca6537bd83f398eeb6f198feec689877a9a423d9cfb0645c4d20eaf30490ae6b6ebb91fbf1d00ce633a2007333ddd6273b032", |
|
274 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PhoneNumber\/PhoneNumberBuyResponse.php": "6929f9a7447425d76afae60b91de8d6a5a42a1e7864871dc73a40199181d5af8be9f645185ce1e796e75440d138cd0f69ef86ef404879d74b58107ce32824b6b", |
|
275 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/PhoneNumber\/PhoneNumberInterface.php": "3720a8056618a019c64de2e4e05e99e0b30cf48de07117e75172b8ba02f2b2c60a1e0b12c3cc07b3f5ba8aeee2e747c3eed43b5bf589c29c7236b47b5ce75747", |
|
276 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Powerpack\/Numberpool.php": "a774de315b1d34a61c9b9af9b21b8fd1f624b48bcdbc7ed1302ed25cc21093e05ce1533c0ce4788ad36ab28792878321a99b941cf9e1a8ec7fa2f2ab1d16f872", |
|
277 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Powerpack\/Numbers.php": "f62f6534b223fa353f2363e38fb1069c3d10544a4cae2efeaff30019c0cfec7de2b4b9f551cfc16bf26fa1dfb916f6d916f9cd1d1357f8cf6f7cc84815812237", |
|
278 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Powerpack\/Powerpack.php": "895da995fc1445bb6f7458c3904c918d8ba8e8db75e94e558f04ab8355058bf82d881d7c282fd8e03acf723c232f3081733a9ace2bef1da42c3e9f4de452d2cb", |
|
279 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Powerpack\/PowerpackInterface.php": "e09a8e4e67ece27935a81730b7587bf29afe72ff9aac57b6c0efa6fdbc4b7cf4c91d60bdcc506a2c0b86f7a4cf7df70c38135e295504417d39024a4671b3cd33", |
|
280 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Powerpack\/Shortcode.php": "afd1a0a277918a55fabfc2b46460ab6a8740ac68e1d7b9a0180d88229d7a93269305765fdc362c02cc2996ff7c3d8c95417bc90bb74e44f9c2cf12f023f45b08", |
|
281 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Powerpack\/Tollfree.php": "0c63aaf33046375a8d7c0f9c7c092ca1041f553b1987ad5e2944630dd23f865785e06205b0711c215468630455d8c2264c0b141fee5cbdb4bf9430e6ef90527d", |
|
282 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/Inbound.php": "285fd073a2fbf84c533af3c0e60b369689592882364413a1879691a025655bf4bdc40831d13d96c59ec7a8827233e92d478c14d1d648df885c75fbe3d054351b", |
|
283 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/Local.php": "5140df58e671179a4edbfa82fcb7b7277e440706406200255ade35177e9a715c3340f5920c4a57c351b6e222f7bb1ef20b207d0830c487bd14b9fa713d3d8c4f", |
|
284 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/Message.php": "ae4e8bbe3a668748ba57bfa571cabcd97932d6cb7a8a63ea04689863ccf75a63e0aa867fad60c39e263cc685521a8465b46f730014933dcdc941ebf152fc437b", |
|
285 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/Outbound.php": "7656989e6b1da4e4887f8443304e422ad2aa01c9c05aea5b5245b4f3edc333935be4f573fc5105e13cf03ba6ed0ee0ea323cc76c833846bc5cfa01f3a0f33763", |
|
286 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/OutboundNetwork.php": "900ae54c0c0aa0f85af4f02da252a34907999bcd311e9e39ef8d8e27a16fc6c8bbde5d5f6460af6b8e68cf584419ccd7fbc4de177cb827cabb5ae9b2c896494e", |
|
287 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/PhoneNumbers.php": "cb51001dfd504ac52dfd39e2a0fcd01686de42e78464c76767f99fbc7884cc2d6e304cedd72e66dde42852f72cd833dc49dc1e92fe1487b2682648432e7979fa", |
|
288 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/Pricing.php": "5d197bd5eef109ba3d877f6de48f8567f135466adf1d811d32908d8d4fa7c8961592733d6bdbaa4f646c3d25a31c8098768dff183d192617b2c1726e8f41c447", |
|
289 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/PricingInterface.php": "dc940fc2f0338348b06fefb22caa65b98fbfd37063621fb4e4f1e23c5dfe21149e2e648c1a32b09012b34c5bd622fe28126bd33ba1255c6ae3c370dabce6ee97", |
|
290 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/Tollfree.php": "ad733c0d904ecfd646e79a3b6bb3ade270f99df5e6353bd6c8695322a71238fae107a55d33167063dc2e4b1b905273bb0631f051d06cbfcf5d01c94e9252fbdb", |
|
291 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Pricing\/Voice.php": "ab645548152bfd840951e981c0d18aad23d613afefd4453af077a6055f902d6bea6a0bcc805288f130da6686d8419913e86422cae35b57c1087eea3371b7e799", |
|
292 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Recording\/Recording.php": "def8da050e24afea59514b4fda360ecd1d80a49df2013b258e3d78304d6eb2ccbe21ff1ac50a851079234a1460d0f2750da8fb59c9ff184e8ba1f1becdfffe6c", |
|
293 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Recording\/RecordingInterface.php": "1953832ff8be0a6801f306632f3ca3bc46f067d08662b8ca6d53e29d53507a48750bdd891d2d0164c029f675b8c4c1dfa6765c9abf328578838b428dcea22615", |
|
294 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/Resource.php": "b8a8f583217c43c3eceedcb8f047efa1569bfe5f440fcf4f252f1a8402f484e18abff63229521f89697c1f7df21a2ff919488fcd9df42b5aaf7a160a50f0c62a", |
|
295 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/ResourceInterface.php": "85bde5b0479b85aefa79139d36192ac334e3deb3a07353b7b1b0cea1180a050a92dcb563ef4a968b6436f60ac990fc5c1322ba3ee6f4ffd41d2997d604653b6b", |
|
296 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/ResourceList.php": "71fc010407c57d77f5b31105f6e645d04347d961c3c81eef6cacc7b8dd475d86bd228c5ea5dd5976ce34d025b0753083b5361a47cde5d5daf0507678762106fe", |
|
297 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/ResponseDelete.php": "3acf13bc2797c0ed58c78abac46ae2822a67b9c9194b3c9864738516847618c0033fe12c5a62d9dcb7d110ffd4264c534fded370d04a2960a2da32059fecaa8e", |
|
298 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/ResponseUpdate.php": "4db3ee43405d0a456dbc23801c2c0d71676c3f88ac7c4161395ad275e7fd0dc6b53aee99a882706da4f14fc6c35844d54143a7fa3b6597a5a25d59ed67e0e6bc", |
|
299 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/SubAccount\/SubAccount.php": "b39e628ab06827320f3dcb47d3ea55d459af1a133430e8e51e8e6aed5216c31b54498c836cfd2a5c5f2d9cda4bcac03ac476bd8ae81c3ee2c7865ddfcd359dfb", |
|
300 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/SubAccount\/SubAccountCreateResponse.php": "3b92a7ef8da848a7a5d7b79436ae557657e97141ecb2bad076e69d495d78f94f6e9c68464dd7e790d64dc563428e4567a1baf96df1f8bc97cfdcb946e60e94ce", |
|
301 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/SubAccount\/SubAccountInterface.php": "a4cec509ce127faf30261cf75555a2905c6e551223b4b90949251f0822dc20d7b97efadbcb6bb189cc9302acffed8106ceab79628a7531c161f4f713d6a26c4e", |
|
302 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Resources\/SubAccount\/SubAccountList.php": "228e0fc0fc27fb523c9d2d9e62de77a5deb3bb2a29c10d91d7c59b6cf36b3e12b8b1935a69fb0ceda72c4008b2a04436e6aa3f84740edf265d0f647eed7c52d4", |
|
303 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/RestClient.php": "91f01799f98c6d65e1a0a8025668fb0c9f5fa4b77d44e86790b34599c2b9045cbce2cb3a5dcd93a1fa8523cb688d9f2b895d7d5f2377f64f2e33ce68e621dd82", |
|
304 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Util\/ArrayOperations.php": "04a84eb09d1ba33c3414dfc74d1c4b31c3149dc8e3a038912be632673a92e693da8e531a987c5ce747aa11fe01bf65bc05ac91924ccbb8f157c15c62f8ce9694", |
|
305 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Util\/jwt.php": "61ef00cfe10afee4047149729431595a9e21d44b25de3e8808014312a869110bc22898552fd9216cda6906c91de2b3ef9d723ff0d4e18020d1b7f5d1050fe810", |
|
306 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Util\/signatureValidation.php": "2bf40afd282bd8711459cff1b366510ea253508349adca2f64ad101b6c4e3e20bf405194b9e421ea7cad5b738716624127969de5497e16e3647872e0b3bfc6a6", |
|
307 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Util\/v3SignatureValidation.php": "d70083f5ecd20fc41035462a2a27e04a9367d9b7b13e6bad5579dde4556ff187b8ecdfa17b2c07a0fcf88cce0141baf7dccfaad85a17aa2fd1a7afe7998d1037", |
|
308 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/Version.php": "365ed59af02f30183af840aafe55b67b682919cbb3d662f860baf1defaede8a67fccc5a7f087209494239466f356fc83f612faa02f9f03a301f5ffc66b52bd09", |
|
309 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Break.php": "89a669d486a72465efc2c6128deb6760dd86c9fb69cd8c0f57c209d10eb74067efb50bc6f0e68e2d1c9c2f39862ef3fa03a35c65b7395aea6ca963a013869658", |
|
310 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Conference.php": "bf673327e263996b05a0b45e323168e3d44b27a65efb8a8acb0eccb0276360c1a0391f08edc34ac617aa079c6c2b1f45eba6142446a7ae2286e23f337819caef", |
|
311 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Cont.php": "45ed9435166f1b72dc5ee98afaf3547ae646d16d41677ce5409a6005ccb9ff23743e4c528385a1e0a8f5570eb7ec9374433f609bb8cdcbdfe756842f1005c52f", |
|
312 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/DTMF.php": "14c619e3f01d6dee2dbbe9b718c6c64458a97bf70ae333455aa45c9cce91e4bab693f5265de0099c9cef2334a5310bb85e3374c5f0cde9b93c3051cdf5b57a4f", |
|
313 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Dial.php": "5370d1f1a1ca8420560fa204d295558ba9aeb626fb7149ee06e12acf7f4b7d079307f329f91594e138847a2b3dd9e3f3e9a9e6e774a3c1095c3201ab249e9c03", |
|
314 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Element.php": "4913c3c78365a85eb5c90aa721b0e1cf535c00d5815f509e336ce635cf47a9d9aed1346ff0cbc875eabae65190be2875d0820312a6a5c90c6df3acfa23bc80c0", |
|
315 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Emphasis.php": "d6fda7993f909d3a1a50441ef74003811252d68a33ec2da63d3551236a005952d3b6c7e2bcdf5d9c85d33bee2a9255dbc2b95988cbe0e115b42eeb667d58ca38", |
|
316 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/GetDigits.php": "e41a4e05fd55fec82a24cb2a545db122000251abc0986715a4d5866dc64604ac340c59cf0a30a35ffeeaf17713eed730a7705f32aa20aa3b14ffea368cdddfe2", |
|
317 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/GetInput.php": "cb11a5e0311d3b8938f7d94462d24c5d4b8a2ea4d733943253ffcf36aaa648cd3a4337d732799f382526e0e2b2059dd1489e9ac7fc5ae478eb1db07b3830a711", |
|
318 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Hangup.php": "6a7ac35846ffaf61d8de286929bdce05974799b26b17f4d61e68b6f740cff49bc4a0b72899d1150ae03d72e4f8c4dc7cac491872e76be0aec6b1a665446a9226", |
|
319 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Lang.php": "c16c3db519373df61712fb1748f91785d79ba0fcd7e85a32cff1d17ae89768cbc10b3c4cbceab380fa9762cc1b6948d8fa56054d78185f8c9c1d6c60a012f527", |
|
320 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Message.php": "541a76d5dc1e25633d7bf67c83d1fa123820296b4755e7e48aca094040ba0c2acc6215eb29176551516941b8e8225e6084fbf89892893557e12f678cbe2abb86", |
|
321 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Number.php": "82569de717d895eca9c4270a3fc48022e666e59e6d6c74dffe4982a8db1f6031d80c51863226c750cef5db111f0de940878baaafb352153bd0d053f716c43fe2", |
|
322 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/P.php": "d8bc0f70c13af91549bf4c37ce4c95b6683590ac9c9a3006bf2a4dc02d85ea63a33d0d8fce4a6465f25e0f86b35994d98e7bf75c07e30737305a7f2707ceb444", |
|
323 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Phoneme.php": "9bce52123dcc7451f21ecb2e155884479b7530715d78d175cd616da86198151481632af22cfc19f9c70a4cf0f29f3262f335982fc9988e4aa3a435cd74f14c59", |
|
324 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Play.php": "9b25a9f3a6149ad856c4aa008c405192bf2804432d83d3a572cf066dbb151b8298272b0a9185bb26a5faa51c03d069aed172ddb135d4dff3fb99af9fe982ded5", |
|
325 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/PlivoXML.php": "03c37815022f4b4e7ea917f69b5516c3bb5499e68b65ed1b50f7427d9827de1e84037745d25b420c1f81ab829f51ae752b126943005c82b06a668c8ff895e923", |
|
326 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/PreAnswer.php": "f66f22bedaae6dce341d650d5ded5007d867361c570162a642e0a15f5fd6e90b49a4c8fac2d3a1cb5fea446c75e30834a1106a3acd1ac02a87b5a7df7c1d5af2", |
|
327 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Prosody.php": "12c8b634b226bad4ec0a7dea7b8249959943bc5ab0e71f75fd42afbf6d1413834563c38430e9348bde2cdf1059f266a2ef59fb7a8f6187ecec135ee9d5dede4b", |
|
328 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Record.php": "070470af5650220e0556baa6b109684e1abceb6e80af620ec750f0c691824249121e1c6aef6cc1c91bebb45b76ea9db24f9cadbdbab8857b367ba2521d1cd001", |
|
329 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Redirect.php": "34e09e0b208c4dde1c4b53c451b09f23985c8f74737e73f4675053494cfc81b14920afd6620ff161877c4e1b7b6e7381cf3f824a2b06508d84299aa4e0e45690", |
|
330 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Response.php": "8db3a9e823e3c11b8377829c783d93f0b7cf98afc6d837e514803b478a7887d6602bae6efac9dae6a2e7683d8409c23f78c463185754fd7916845aec23e42c58", |
|
331 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/S.php": "d0dc3f3bcc818d107fd8e4be38718587edf610e3f840d7e6763ce8fef51a1e96de3b49076995802aac9edc7d8a976ef024a1d45ef634599a56d13c56a8ba73de", |
|
332 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/SayAs.php": "46c8fff6a9dbb36df1bb14d0c4247569e00ce77b37730d7f8fe6fc4a404a632ae70e48c774f40c4ac0e19b10ecca7c09686c7d5a6fc7d5311edcba657177b6db", |
|
333 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Speak.php": "d18aafc18ac404a85d18627ddc66d2810ba1061f8e0d3d3634d5f5258b239a139649a8cf479367dc026929010288a291aa1144aec2415a2de6083040b8a4a96f", |
|
334 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Sub.php": "9d34d26e76074e65fc01a3a477ac176027b1ceb5dca2fff450111bd2cfc0027c7f7338777b494728ae2617a27075888ea699d4226b60049c4fec633d42cff8d5", |
|
335 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/User.php": "2dab0ac6bb38d9216c1b39b81ce20f1a2af1d385c90ea13aa566176eeb288f8ce80e11048209abf8c38151207137cc86b754b7784cc478dcfa1f567fcf929520", |
|
336 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/W.php": "798d6f10e6d07a54b29916216dbb2382f25bbf2f96e15906f842cd2ae4aee22b8f3e56535264b1da6d40835d5b9da6a9f4346303f7602c9562587b29fa419f3b", |
|
337 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/src\/Plivo\/XML\/Wait.php": "99e6e66fb4d2a81f0419ac823be64ea8c81e6ffc8313934b41d6189519d053b54b5e95dbc7b869dc979b72b551b5654dcd6eef0540c3b01eb900716e97d52dd9", |
|
338 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/BaseTestCase.php": "662140921fab3f1e7be65bef2d063673900eb3c41de8ddf68320de194e254ec3fbba3322790812c258698af81da35277cbdfc0d2fc957fd5f68956e7db2ceac2", |
|
339 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/accountGetResponse.json": "1ee7d7e260e8678fa70fa47206ac7c4645e9d698da7017ab05fb56266710e34bce48b19d3c65541a084be28cfe918e81fd52073064071daba77355af2eddbbf2", |
|
340 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/accountModifyResponse.json": "ef0e777d38b4605ab58d951f26e975566b61a26ebe5710b9c8c7588aae799c68cf76dc5860f44aaa666864f3fc1f74185b5eba888c1dfa8c2004fb8baf6d859a", |
|
341 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/applicationCreateResponse.json": "19336630707d50a021e3dd3cbcd8a229f9f6123211e27fdba211494bc40e9b9fc5573ef328806bf00b937106e7c894ef96a98080f6003d91cdec67f50196849d", |
|
342 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/applicationGetResponse.json": "26a3aee28fa9219455b0c7a54d47eaf1ee7e9fb526185d1598d5611246c1ad7b0cb1abb05b12d21189463955e25d2da906cf5b04f1bd4c3b826d44de47c0d56d", |
|
343 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/applicationListResponse.json": "b363791ef3276030677b53f555a42deb02a9873cb5b21e17aee9176d425ed38c562da7fc162cf5771f0bd259b46d615ded3799f34f6fef590e2df97180ebd228", |
|
344 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/applicationModifyResponse.json": "742b49b7f428a281b1189fd5f23811931f2d6c71fa271ead086b6acfac63bafed22b86f2e460fcea35d8bdd46786c5db83707f35c7a855efbb92e51ec01a4859", |
|
345 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/break.xml": "6707a46a4316a9f23104a23e4ce9c79f8b4f969639c08f5196a9aa94ba3abd4a1972a29d6131e563a685732e8cb0a4fc90a76f2d0ff5b72637fba2f974abecd3", |
|
346 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/callCreateResponse.json": "513446e1e7fb97b30b86dad2119bc9fe73e70f01f4976ac40e57e41e7d96a2faf978fc72fe2ff49e3326fdef8e17cb4da24bf665be81089aad1232716e42e114", |
|
347 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/callGetResponse.json": "2958c05e7fe02f5f6f2f8834b34050599df05c6f5751fde2fb038853383683e78b2b33b9534bf8da38770173e08ea9c7015d7b2d4f270efddcaedffd77ce661a", |
|
348 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/callListResponse.json": "b2b35a27aaff76dafc6f5a42b6ff515e56ea9d7c196670613b97c2b4c0b7f2dfc3ba7ca705b2618f3851e1db554268018c7c2bb658e94b66493576048c54ab49", |
|
349 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/callUpdateResponse.json": "06be7ca7ccaf82f24f23e8c33382d372ba639662283023a9b6ef555fa24d273efd845ab27fd423dd4267d66a8df24604f96113aa3bb8f8dcfa49e713f3d71bbf", |
|
350 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceDeleteAllResponse.json": "6722c7663c8877f4bd5d417638d5a0fde3db7cd2ba1880dc66a7ce9ad25a14de60b4942d84647cc21c0b12211227161349109162ef3eafc2a9607c2645d3c93a", |
|
351 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceDeleteResponse.json": "9a8baf62bab7971a89490d637633a3d498d4442bb11ca29486d21a3dde432ca6c0cb36d236bbc94859efac83b2e56d33442a13a4395f4b026dfece2103ca790d", |
|
352 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceGetResponse.json": "950fb7d6e6e120ce670da43937ab4ce9e7a7df5296848cb52261f5f854bd89d47f26d76f89929adc59bdadbc8d0e77de79f29edc5d6e6b4b73aff1a0c126bd43", |
|
353 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceListResponse.json": "9f5635d9e0988b03c2bffa8457962cb6870a39d4354ec6c065b58949850b188d2829fcd3db1761ec42a4bed30ee3704b6c353d2b9372742cd6d8b00bff273dc3", |
|
354 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberDeafCreateResponse.json": "b39ae8d7a1de7d5732afdc00da955a91850b855f6463b143b5837023dd8281b450fa79635a3fc729b5b198c6af5cb57f9c6797c8eb56daf72b7c7131196fb4da", |
|
355 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberDeleteResponse.json": "ec18404f82674de8b7ca25eaf95074cefef51b13b038de14dc9ed5f2664c6e6c5c87d3f7a08eeab3926869e171ac26d1647ba1cca03253085a194cb0fbe16975", |
|
356 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberKickCreateResponse.json": "9f924beac462c4ad9f42a705f7bfde5aafe5e73563b07e98ac9db42e95d3c657f5c4ba0d6ea64b01e2e061563fec41d53f8ae8fbd7f5e08857a903c948019e1c", |
|
357 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberMuteCreateResponse.json": "c3f1c38b6c8295b28d531c446199454fd7422d00e3cf71fdd318a821edca4afba444f8cea38175c0853b34dcda5dcc2c6317a9f3103e16474fb36c43241a52de", |
|
358 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberPlayCreateResponse.json": "ac345d15512ca5debe0a20092d8a4bba1f725a581799a632bbdccea771f1b6094b6df3362120a29c1d9109cd8ca8857447c3be08436fa94a5a4304725b75ef4d", |
|
359 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberPlayDeleteResponse.json": "10b6ab89ba98b9d6d08dba8637971ca9260757c318a4842521c7d2bb2a1b967498453aee4cef6fd964cf2e614c25364f543412a0a88b877154b3faa9f18ab3ca", |
|
360 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberSpeakCreateResponse.json": "b2b01526d4838a72c816ad9c6ca7f9cb473a89818d4444b48aefc269d0173fc9eeed1e2473667517280c18315d67a548f41937ab4b7d26f2edd4d0e13486aff7", |
|
361 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceMemberSpeakDeleteResponse.json": "d42658e98680911d21be32033be208b53071e3ee2c514a86809ef4d06cc138ca0a74d9b2e546c54b51c66f3aa891cf0ba3b4db9a6a07e7f06ed37bfb39ef3a6f", |
|
362 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/conferenceRecordCreateResponse.json": "c9d8570ab20fea79181b1416cdc44b8e9f8b18b06ad446a0929ecbec53a6bb3d66ddc8609a2baff92d8ddf9bb68b802ac4eb3d62e958d2cdc1485711a6286ed8", |
|
363 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/contSpeak.xml": "1115d194144f96d3b4ba895d45268e346e7e56bd308b4b7c58bf62712380908bb71d5250323bfa6d13b8d25e64a86580437f7ac1f2c63896965e3c13909c240d", |
|
364 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/defaultSpeak.xml": "2449ff96f102465168a4551ddac6ff85bc680370b423d46ee10b345c128755560e0bf48c070081e8045839503450c0f8b443fe0b33b455410ad5dfd639a6adb0", |
|
365 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/emphasisSpeak.xml": "1ae7422578c6921013c5dd65650f0c1efa50512824b429334cc150ee6872dd2a7981a125b07a8023e360d8a881a32333de24f1b595c95a339507dfb29732af83", |
|
366 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/endpointCreateResponse.json": "e0cd43507839270c51117e48fdf3158e67662c1bdf9c8c964b57a13c15517ab7c83483855764b763f63bfee011bb893c20eca7e7a0b3b8872bbb1f26228ed720", |
|
367 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/endpointGetResponse.json": "05359131cc3ed432c1b29f3766d019be556f58e5e7f7b502d866d0057c04917ad7011bea5afd7ca8f2814dc75c45a52930d48464f7fd740ae94b45d0a07d3627", |
|
368 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/endpointListResponse.json": "d6488ec5e6277af9a34629d901a211e37c9a522107f84ea77f861c417345ddfa409d7de389ae69b719997600a0495289bcde64791ef07c257f75bdef4fa8006e", |
|
369 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/endpointUpdateResponse.json": "3f20870d3ef78c57407bd42cd424775a7014473d891020bfc41fd78c9187acc3d7fc2a2d7a137eb5bf9e8741525db9aec853889b11d2d3ff508f7fb16a4bfc88", |
|
370 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/langSpeak.xml": "1eb16f6028ee00a12e677560ec9b3ca4921deb2d6da15b3686c43f506e9a13ab0cf811d71e942e1f225989f3a486ee39b4949d17d8692ac0a50574845491cc8f", |
|
371 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/liveCallDtmfCreateResponse.json": "f30ceb762f24445068ff4a688935a84cb64840310bd518806c1259ec26fd60da6a8be9f11c9c0882d08c857058944cf1c69c95035517716dba322a1a865435f2", |
|
372 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/liveCallGetResponse.json": "339633aa5d9cd2aea4a86dc48dd8c63ea8c0c56d5cc0f4513bcd2d66df425ce4b74b246a8c39d6cb0dcde75a8c01d4ec8347e69342649ac27599a79a72fafd9e", |
|
373 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/liveCallListGetResponse.json": "7e8efa8df76422d6a9bb0133c81d96b9ed932f7f529644a109b35e9f8f301b3a548e8e7f6a9213e301f25e914b98c3855160ca7e0d6f0283e947cd6fc95c5ed8", |
|
374 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/liveCallPlayCreateResponse.json": "4cf2ddd4f3087fdcdf772219c5ed84ffe1dc027208540059bc532961b6c4cad382bce98dec481e0245c99e288c9523e8f33ae7c3c35316c8130f49f81db40604", |
|
375 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/liveCallRecordCreateResponse.json": "02f2c4c88fc63e5585f6e5988d5f615488507a7d7eba442430753a60f0cc2763c38abf905042c9ae0f7d017dc50caf67f269267972b5a7fdd4fe7675572589a6", |
|
376 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/liveCallSpeakCreateResponse.json": "ef69736cd0199704894c2fd938e4f84768b09a6b9d2f334ef0a83b1750db0bf0eab538471fead4397b49ffa8e86011da111e867d5d8b3532bf3f4250958d6146", |
|
377 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/liveCallSpeakDeleteResponse.json": "63a9fda757cfbe1a338c42f19532609e8607f3c2c8a317ec8e5aa2a164b0e9f9a652129bbf7fbf9fe05c38a0f68138ba10b4d256f48dda1fa292c18f2b717d3b", |
|
378 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/lookupGetResponse.json": "6b2dd461ce651012160ed88d092de0859ff1cc132c57091a1064b5745b83cd6e5144e8204b6810da7bb675eca802fff54fa298f03be6ef858c59058acd24e640", |
|
379 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/mediaGetResponse.json": "251c9d7226411a160031776b1c7039d7e7f3d715ad7bb89131353611a2509a570656b8e29577e505102cf588ba50cab34b3b74351dd33e2a99333676d48b7aaf", |
|
380 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/mediaListResponse.json": "1512baf046701056ae6b5ef06a1e6405cd62a27d4b82f5b38ed2b2ef6faddfd147b6d57074d04d77cc14325d50d7908c0446acd4a5a0355e9dd9316f80b0f448", |
|
381 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/mediaResponse.json": "329e01ec90033528ca170704dc7a3de8f5d004a609fda5abaee4ad610b1559464a97b423ca27248f49fa3696f12ce6c1b3ef69ba198ae57877927ff78257231f", |
|
382 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/messageGetResponse.json": "10494dc350e9a659083f44802a899a893e67fd82acdc506210c827642e27bb4ca1fca7c00a73a7aa20900ead392b9983ae719c6a9aaeeb0ff9f9b9e02539ca4b", |
|
383 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/messageListResponse.json": "5751782fdb135ac45cec47687b7bcb10d4e2c4c8ae88461baca0eb6f0f81b8144aca9b610cc6ef7f3cffd4b5dc2ddac08247e74608166d147bafb1a9ecd4b834", |
|
384 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/messageSendResponse.json": "ae5ef8b7e2a5db03fc5c04e96cef35b3f819f1670cce72e0e729b57de018bd6ffc254e00f20fa7c662eea100f78bb1824f0080275ac270f7e1229566683fc62a", |
|
385 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/mmsmediaListResponse.json": "fa4d1e3885b6c84d72c9f9a4a414de7d1ae1d574db325cd773600c7a17f83fcbe2a84c0daa8fc690d5f5d95431b1ffe5097c17279593ccb4155d5f99b1a853c6", |
|
386 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/numberCreateResponse.json": "e7acbc2aac3a716dd50e27de2e8937e27fe70da7dfcce17561f4d81a2de53e8cdfb5a695255e1ac65c8c49e4b894722e7ecc9297b9d040dadff97d1cb61ea414", |
|
387 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/numberGetResponse.json": "261a85df87eb4ebd1d310575e8f33d94f74c30f5ba3aef1ed47654f7569ebe4310019c5dd317a8c6e2b015a1ac3f72455118e0878d688817580b18b747d6dda4", |
|
388 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/numberListResponse.json": "134543e58c07917a79e0498e85466b9cbb1c97a0e3087473463419bc6c178bc278ca75e148f885eead7f6b1074063256fa61745c57a0dec4ac060c4b03afc499", |
|
389 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/numberUpdateResponse.json": "e7acbc2aac3a716dd50e27de2e8937e27fe70da7dfcce17561f4d81a2de53e8cdfb5a695255e1ac65c8c49e4b894722e7ecc9297b9d040dadff97d1cb61ea414", |
|
390 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/numberpoolListResponse.json": "961fe25a8fe8c35dee1b0608a24d741b6ab91f2104a9f2af2080279d6cbe4e631416d7b3d8e3772715e376a603cb740d652435a0f2d7971e64e00eb44e7cd518", |
|
391 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/numberpoolResponse.json": "c725314dd96d000028683c175528d15657c046cb421add91a927472c235ae5c1ee1aab060aa0eec56b6c717138623684f827a2de50bdbec1017e7bff937b437f", |
|
392 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/pSpeak.xml": "1e49af0752b825db21fc50126642fde3f39dd8b63cec3db00c3df92ca38935d58b8752ad14928278b98ef23421d0926d624b6aae948f9473398d25e2d087b963", |
|
393 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/paramBreak.xml": "1202da39615a87758a5fd85096a4d98f6c2726d705ef0b1086cfc66cd0f456b15e3f79d9850e1bb8b99e9114e41b3ca19ee4fd269a42c002c205de005c72ceef", |
|
394 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/phoneNumberCreateResponse.json": "a1dd38958ee69b5036aaa1c86cc730802dc2d7612eb1de9266f9a6651f6f067cf9a42d44c736bf85d1f40048f01f99fa05ccb3fb26baf3875e3bea98fbb9bbd8", |
|
395 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/phoneNumberListResponse.json": "f2c263fdf122dfcf98289f6cd9276cd8c22fe4ff5bffca19b3509800d07909664e9ddfa3e145da04c06dfc6c5227a39868d17ca947e55b65a9cb18a6faadfe57", |
|
396 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/phonemeSpeak.xml": "30620187252e4a92154e06e611a2cda1ca881a0d85b1c6c36e3c713734c0be9ce79bb9ad38a11e040cff437c5676c01638eecbacc5b50a20e0adb506565a9475", |
|
397 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/powerpackDeleteResponse.json": "f170bba1b0b6bb42c88bc74353ea4db09b82f07f5a2166f693d0579e5b7d6beacb8cf11e39cff546345333b14752456212584e284c2c360cc673d009fd2aa018", |
|
398 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/powerpackListResponse.json": "0cf4f36945bf4f73377a6688f99bb3efb0c35924ca9278bd777ecd0081c3f667d45de4a34f7101588b7a7b3b20179d18a393dcc468ed88df8eb53b5e2463d7c1", |
|
399 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/powerpackResponse.json": "4318b75a2ac1642f6ee33fc62f18765a5142aa52e0353082a9d38cbc7660e40f24e1665a59c723ba90ba9a86edb4cd4a396bb9a0c00cebf6d5944e0ba84e7919", |
|
400 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/pricingGetResponse.json": "25a616f338c147cb22228535abafa9c1439f663230d1fc5109af24f4f11a637c5d0cfdbfbf3b2762b87d0b4693f14223254e431f3b8ab1f518b32ea884e2d1fd", |
|
401 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/prosodySpeak.xml": "0529a04b9ebbfc245e7d50bce1177e3eea9f0f6ede900e9fd3a447f86078ca86fe8c9911fad4645494cc784394194c5e6b63141a2a9125a1ecdde2cbe8bd7c86", |
|
402 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/recordingGetResponse.json": "bdf9cd97b6c687685b9c37a0921bcba910dfc811abe416be7b17fefbf857c3ee1233e987570eb444d168edd660c26acb55377f60b8aa0a898f0c9af1743edc81", |
|
403 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/recordingListResponse.json": "2d831eb418cd0de8a0d63da8a2ed133005a3e15e4e021c3451a737c45f42e5753ca5143204acf2f8bdf6ee91cf1ee8b04ee960f942ae0e62bfc3583ab44a1dbb", |
|
404 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/sSpeak.xml": "b81f50357fb60ad968d8e949aed15c7544abed0a45c26c5bdcd4b166fa1d9bf74f57137fcfd378fec345e1fb2281ac38c30b2a3150cc6fcdc13581ea29379796", |
|
405 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/sayAsSpeak.xml": "84e2d4a310c8d1fccc5be4be4cab026e1dde129ed2e18ab4fedcd50512cee91a52cf437606cc936c474cbfa508a105f36272edb6bcae29388f2a75bcb354de6b", |
|
406 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/shortcodeListResponse.json": "449e0c165ad81254715b4521e5f4d39b0a6d1ecd583bf337e8b85ba40550a0942c04a8e33b69e5327a275fca4e42e31dd1719f100c8d6e459939a3696ede1a71", |
|
407 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/shortcodeResponse.json": "867e2309b5c912c9dac5b06929a835b578b0dd3391c43f6e0d454adccf997060e1e5013051b394a94d44af3e5cfea67a88f4376088a376a031d6fde5fafa09be", |
|
408 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/speak.xml": "a781afeb86ed31833e74d834de6d9834783264ec43678fe3e70a7f963e97a9dfd05dcb5ae75f51fdeec1d5d8d299d8c476454307a23efb830022a477500c02f2", |
|
409 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/subSpeak.xml": "06ff8e0c15b36727265d9f80c736a1781438c04445e91bd563b73a1f9ed4b501458f7e3ec22607dcd96e9f95da6e6d874c39381ca061a768c2b664a1b4bfc504", |
|
410 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/subaccountCreateResponse.json": "7fb28239b065aab21f14d158e51ab6bfff6b10de97ca558da02adb639fd15e99343ca54277d0e0b0dc6be11c01abe6517fcc2f0e862d5a3538342f86bea87994", |
|
411 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/subaccountGetResponse.json": "929de7e767657a691c8bf34be8abe52990835f9787114256bca7a1fd6016b34798d36e2318ad3d4a2a8931986d8034e2310e4b4247fa38a84314658402aa3bc3", |
|
412 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/subaccountListResponse.json": "c57bcf1f52d302550eacbe5492bbb1cc17bd399d03b6c83971bebd83fa8be975e97859063a2115edfed47f622adfb413d5c28d6cc180710211bce192d867052c", |
|
413 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/subaccountModifyResponse.json": "a06022b797598bdabfd7029128d9ebc9934784edf77175292c17b60152e7464938f78ddb8ab2883e0da22fdf94e584d0fe8d766c40228bc0a564e6ce76c39365", |
|
414 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/uploadmedia.json": "35f19877904dd5eacf97183a286db18153002e37159f6e007c9c70644843d73963e9293a5e64c1854665821e36592f5ca11289d2ece86fafb3ddc4b8b758dc4f", |
|
415 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Mocks\/wSpeak.xml": "05cdd9418d049dc33432e02bc305b10635daf3bda936c695c4136bc4bb8167ac63e6ae809202a566e5a1488d8543c06fd9c52f869b03a474bfc3db560769c00b", |
|
416 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/AccountTest.php": "8a98fbb165ab60db8a7423252e78d9db1da922dc2e1de9ef5cde32488c04380ab01e8fe53f4f542c602b28e574966adf58385456388fb4aff543dc04467de668", |
|
417 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/ApplicationTest.php": "e23381682056702928ea1c587bf8241f71743e4349cb30b621f2c843711c108c0811689c953ecd52515b2c780c50c134f959e4ef77ad2c0dd65dfccfa8c79c2c", |
|
418 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/CallTest.php": "7aa7df68b91782de7a8ff67ce4bdce917de03ce4800da2d6c103f0d1297fc26c09effbbb7ead06d70566398b8679c54246213c4babefca43976c289b8bdb895c", |
|
419 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/ConferenceTest.php": "3d1149c50cc760ec57de791d7a1eb46a5210c113fe91e1756dc642d2d94b333067c9c3c5ff9d0c90d9ad8981963394d332287b57b84c634c8e4008ec5cb2356c", |
|
420 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/EndpointTest.php": "aae4c23a72674a9d4da6261986147a3b3a1c5e4da03d2efe7f4ec21336e03d352ddc0f7e47dab3c9b4063a170d37e0eebeba649ecd1159d85a3c5553789c51b1", |
|
421 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/LookupTest.php": "c436483d9ad54681ed44ef7a6b44d4899d06b7b421be27d2a076aa4bbef23a5d160d5098c60d5c380a8e66ebf8245c917074edf6a7b682d056f9f60e082de032", |
|
422 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/MediaTest.php": "a6ea3f17046c123698c0b8fc1e7cfca6665159166dd53b51d1b5a7700373527c7346a90e67a382f4df26ed3f92209790c3ca93c0c3d3b653d424e17a1fed9f17", |
|
423 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/MessageTest.php": "9749cc39c4acb64b49150958745f19952ffeab648abf06ae839eccf8eb9a6c66bea62e7d8fa398dc48a79bdc97ee063df934ba827632faf88f4aca01e5432181", |
|
424 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/NumberTest.php": "9123fe40158482d314279a729e4c5c0eecf3733884ea39df16de986e775e93e90b8d9c7ad35fbde8f3d4cde3e02b33c70ebe87cbb27039615de8213cc27aad47", |
|
425 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/PhoneNumberTest.php": "4b52dd78392c66e1d1803a278ab98bb03e4bfe5275e28b043e4f672357125b4373acece1c2c5668081be021a683acd2796e6ba5ff2646baf3435dda1d6de7667", |
|
426 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/PowerpackTest.php": "52a3c6967c93b1b996abb3fe7e40ebaec915e58e715c6943b0f5ebd945c8a59023184dd1339cd044d2f3ef1a0041a61559a41a3832bfc222332fd85bca8371c9", |
|
427 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/PricingTest.php": "91a088d32f726c2eb49160363f7a77d351f3f65d43a9282cbea646310e2d01a33d22a2adff9ce5795f949bd205c0b6e77571f0a231265514704f42bdefbc51bf", |
|
428 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/RecordingTest.php": "353008dcfc66ae09e915787634877d598930e60fff3f1e6eec0aa5590881f66d78ebd79aa1ba2b2a20409e4b9372eef9ab28406c9fd29f95ca6c773d8c83fa63", |
|
429 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/Resources\/SubAccountTest.php": "6dd803629402c6f7b8d923753477f6c03d6cfbd50aa59fcd63556527cdbc3d932557b318cf8c7a9f5a9d3ff8ff143ef15f31256e488fa8c35cd62bf80ae04d5a", |
|
430 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/TestClient.php": "8917a380e2cc030228dbb37a7a3aaedd2cd624d8102eee1fc3469a9838f31f7ee734a40cd45e510d63bf4c1526da4bb3af8d45bd4ebd4382cc9fd5bc2ba178c1", |
|
431 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/UtilTest.php": "6a66cd73b0cd403f64f8a4752381964bbac7507b4449e81c9aaa64d61db244128c604a8995327dd8e8ccc8a30cee7a3a57fc617b845ebe65a65ac38125ca7394", |
|
432 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/BreakTest.php": "740c84bc38e7044f5138e3816b72c6a94bca3accb592733421578a6eee2080bc6721d85cefeb8b6f1db751e2056fbf722e0dae61d260b089dd803e72cd9cc0d7", |
|
433 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/ContSpeakTest.php": "f3b641231907bf807c5c09b65a13409ea054b0116b9b36f5bbcc2bfa651592ae1f4707be5780c37c5b9f1516044a9f524f4ca829cd0b5387a6a32526ba11cc94", |
|
434 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/EmphasisTest.php": "b76b6d0eee048b44965f87fa6f59614e64d885864ef3ff0aa2310746d76304fb5ac6cc6d0c714e7560e5472e018fd0183cf9a918d3e4ee5415723314d7d219e6", |
|
435 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/LangTest.php": "1a4ef409ded7d9c7abd8c63994dd3e221b16bd1fcca8133ce43e04b300a28468cea68e430098393acafb78e537e37b0574644735cb84fd08e33dbd828e2fb071", |
|
436 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/PTest.php": "9084715ad9065f1a926e8dfdabc5816b16a385dd5cd74f16f6fdfd1aef043b7d344d9cdac4b9dc43df85e8e63f329909553e20b86d995d9eb6d25d716fc5fd1b", |
|
437 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/PhonemeTest.php": "f85a3119f95615c3d3e16c0a4c1d2aec7b2191629b60de276cedb769b23e11546fc27fff57e329c1ac6cb52868208d29f88d1412b452932b573d88cee9fbd68c", |
|
438 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/ProsodyTest.php": "5aecbb6cb41b0269b0895e580bf87dae24703c3116dd39774c11d52406635f4167bf55ed0b950cb4d8af9138c03361161527c7f0e08867053034d8aea1fb1daa", |
|
439 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/STest.php": "55343bd191ba9b88fdafcc409c1685224cd6673225c1ecdc006d4c3643d9e4f71fde0a07ead3f1bfda80bed486f09a7fdf42e16cf3d4fe66f592bb72397320bf", |
|
440 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/SayAsTest.php": "005fb0efa4803847719d9e7d52438ada0026b3860d7143fa4deb96a80826ff0f8608b3dd9302617547dd36cdee5293ec25570dd6513cd81a921ff483379574ab", |
|
441 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/SpeakTest.php": "cc92de5d0f5df6de17b121249074752bb191265335a6e50dcc4739fe525cc9d0014c187a7d15cd0c1226c56360277469ba10da72dc56dde01f478acc510a8dad", |
|
442 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/SubTest.php": "5c113371cb363691313226362512772facc38c30afdc32e96976aa309d6ac33aa32bab7d4ba674cd566182641048434dc65cf1403f25ea4adfdf6c6793db2fc9", |
|
443 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XML\/WTest.php": "f7cb4983bde61290a90fac15c009ff1780b02fb81c8568d0e8a1f40fab97dc1ec2245cd477b5ec669c6f54e56bcf7351e38c09caac7255756174baf4070c9284", |
|
444 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/XmlTest.php": "58317dda536a0383749d695ee8cce6f73d6ab413984673d46b10d9299e5a70c6cc464051e986b75c849286787a8fb23ef15e8bdf6bbc9a27e1c0cadf46a1bcd3", |
|
445 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/bootstrap.php": "fb1c83cc2a11ffef9903eaf721f4cbcda4767f70368be33a0980aec4e5b515fa8258750f6e19fca0eff6843d0294de9c35b8e95af0e62f51a94442be0099720d", |
|
446 |
+ "providers\/Plivo\/vendor\/plivo\/plivo-php\/tests\/phpunit.xml": "74191aa62aebbcf797167fc2bfb6bb304cb3d309287a73919caa1c43c188dcef47a1f1905e56143952e4b342ef183a84887dacd6976c18e58025582d5f672035", |
|
447 |
+ "providers\/Plivo\/vendor\/psr\/http-client\/CHANGELOG.md": "82bb81ca074204aff5d95ac5d3edfa9c85569c8b9114f809e3e2f9525a6046a1276187ca42f638ed428311631791f60e6dace74cd60d77f1af0a41e9f76ab2ac", |
|
448 |
+ "providers\/Plivo\/vendor\/psr\/http-client\/LICENSE": "3e0ee70fc857b6dda26ef2eafa55ef09384d82bb2f85b4289abcd94a60201c698eb477dcf03a73858b2cbb9efcf00affa199e848344b84dd4a4c135601e886ce", |
|
449 |
+ "providers\/Plivo\/vendor\/psr\/http-client\/README.md": "a8fc38f5744eb4c1f14f5016b02108319b7cceea7fb3219f57f0604a2e92778fa9be6f1e340003b095f70c962aff0b49ccfb0264b26eecb8fa7782667e62cf3a", |
|
450 |
+ "providers\/Plivo\/vendor\/psr\/http-client\/composer.json": "b767c510e3dc28fc5c8c0debf4e5627f4897940d41ced88cb0c85284c2e0765f49305997407e84d87154a4d9e14045e6c50fd86163d3d7452294af8b7bc36ccf", |
|
451 |
+ "providers\/Plivo\/vendor\/psr\/http-client\/src\/ClientExceptionInterface.php": "33aededf573747615cbf7b8bc6aa10faea7762c903a0cc98bc43803043f9bad58460f09f7301814c22e95f2a6d0269388d8ca899ab76fcf0f2bd8d82aea5d9c3", |
|
452 |
+ "providers\/Plivo\/vendor\/psr\/http-client\/src\/ClientInterface.php": "11b1cee24748c4ed1a41681b1b6e43e865e08150be14452de885daaca737f4029d65e8381632a23910789d3cf5e9f9d02f4999aad62e4e8c80a2fda9ac96a4ed", |
|
453 |
+ "providers\/Plivo\/vendor\/psr\/http-client\/src\/NetworkExceptionInterface.php": "6d3d81d18a51f451e8a1b74a16b3ac8ce6c5642013a2d1375ce6718090de5369779f9d6f594675aeeb7bc3f55a11f1b9396036354c4e9ae0c90183ff369fd65e", |
|
454 |
+ "providers\/Plivo\/vendor\/psr\/http-client\/src\/RequestExceptionInterface.php": "46391124b679cd54538ce5ae6b05d7fcfb6b9ef7680f33c8771f94b38075a366788293b757ccc674060d615783476e1151d0ab8a5f2a10e24578c9b46cc1433f", |
|
455 |
+ "providers\/Plivo\/vendor\/psr\/http-message\/CHANGELOG.md": "5567e49c016bd259491fd13a96e5b88629fe67ccaa0d75f7aa7c54096edd663fc743930eeade981a041cf7524d9f65104718c129fa36a200397d30c0e5d2c954", |
|
456 |
+ "providers\/Plivo\/vendor\/psr\/http-message\/LICENSE": "22ef0ac33682fbed60a5274a5b25991308decbb45c6ed45fb3222cc045bb9e552fa7310b1ab6f38329b63f53a02c25e7bc5e955ad23c5bb2366b417563cb71de", |
|
457 |
+ "providers\/Plivo\/vendor\/psr\/http-message\/README.md": "d58ab57a3e35e51848c3c21313836c88eaca950eb5b716878ba950ad2389bdd84b24a5fd8e6b19ce3ff04b07d879b5206b0f26d5e3a63a5be19beac0e9ccc1de", |
|
458 |
+ "providers\/Plivo\/vendor\/psr\/http-message\/composer.json": "4f074821b6fb7074c418bed0fb6232677a0cf6ae5ddf24694e14bd5aa7fb3610a645f2221fd024e7c4bfe3e95501421455dcfbbbb38468e9db442b8cde9471a7", |
|
459 |
+ "providers\/Plivo\/vendor\/psr\/http-message\/src\/MessageInterface.php": "b79e96e691ad169d4d70420953ccb5933301ce7cedc17d4eaba859dbd56719008198fd201e3be1606ea5dbc78b559f1d86ba17b73ab7e843f0c2f0b49564147f", |
|
460 |
+ "providers\/Plivo\/vendor\/psr\/http-message\/src\/RequestInterface.php": "f54aefad46987c6b4880d5f09f7e99909e6e2a99f9d305d1f73e4de58b43493179149912352869e50fc46e057f50c78ba7ed5df6280a7c0347f3d7c36afcbfe4", |
|
461 |
+ "providers\/Plivo\/vendor\/psr\/http-message\/src\/ResponseInterface.php": "69d177fb504f47ca0181ab35e2155cacf16e77535d07bf4eb4d790e1ddbc7a133f3de21eff936a3e75acb704c936ee2f2b12b2cf3516464222c3d60ea9760488", |
|
462 |
+ "providers\/Plivo\/vendor\/psr\/http-message\/src\/ServerRequestInterface.php": "ea36ff66e8bd962e468fb2bc832e70f7bbd81f92dc0e607cd69092b737609d565f3e254a2d54fb3588f5302315f62e53c6eefe9299ba4b6f1f53ba8feffa815c", |
|
463 |
+ "providers\/Plivo\/vendor\/psr\/http-message\/src\/StreamInterface.php": "11ab8a9d07beea1f1633f8f6cabb2a463ff288555f2fb8a4cc0b99404d8580493018557a0f2674feef653be51f6fb8d9aa3ad8e6dede0391cadb7bb49f96f781", |
|
464 |
+ "providers\/Plivo\/vendor\/psr\/http-message\/src\/UploadedFileInterface.php": "65da733a08d80c5490fec8e69c7b56a47efc522e720a2ddcc673bd74c0e21f5fad4d522ad47da4942d25d139b5392e0882de32b7fe5a5697b86f40fd96ff0f8e", |
|
465 |
+ "providers\/Plivo\/vendor\/psr\/http-message\/src\/UriInterface.php": "0d46735005331a3489e3ef4c8229307320de44b0443ff74d238cf8f3962d83e99316da9435259d479b48477d33e8713dd3d1a1859264c22f2a53b43cd6adae2c", |
|
466 |
+ "providers\/Plivo\/vendor\/ralouphie\/getallheaders\/LICENSE": "ba7ad111dab105773d8a75d20024b48c4222cba6f7836b7b608fddf34f367cd218302829a1926a675bfd22660f4562b0e9a679d15b41162412924ebcc1a4e557", |
|
467 |
+ "providers\/Plivo\/vendor\/ralouphie\/getallheaders\/README.md": "48ce2def80836640ced369db92da9f9e943b319849cc89441023bc260edd6919c710d08c91fbdf04864c6e08bf89e60a397f5e814b3e9699b48df574f5799522", |
|
468 |
+ "providers\/Plivo\/vendor\/ralouphie\/getallheaders\/composer.json": "495b111d0e0b4f4496ccaec984dc89c897f189a67d840c09b0cf17034629e1c896c37c4ddb1afdceb7d5a188dd0d90405ce34aad409d3b7722169628411d3ca4", |
|
469 |
+ "providers\/Plivo\/vendor\/ralouphie\/getallheaders\/src\/getallheaders.php": "a61a5f91f21a68108c7e9c8eef22282e4b1b6f6f14ff997c5f47c83f39acd08ec60f4b9d25d306d67fdc68ec57c7f71a44a1f63ebf7c25b40ad61fa1cb4e58a6", |
|
470 |
+ "providers\/Telnyx\/CHANGELOG.md": "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e", |
|
471 |
+ "providers\/Telnyx\/LICENSE": "8756122099aea86ddf6f176a480c0454f2be6dd278e475bd6be7d7ab3d572162f1bd44c9f623e52e53514cb15336be6e84a5eafc8e2a347b481ab5799ebd6e17", |
|
472 |
+ "providers\/Telnyx\/README.md": "321748e1de717ff62ccd3fb2c10fbed8ce92a66271f2047c83be8929f965c179cd163e429175b44893ae30addef3623f96659b98528a405a585f7afc7394e866", |
|
473 |
+ "providers\/Telnyx\/VERSION": "7558cccb74c98362a480e1c0ae17e711de8e5d6cd10f508a31395105c0efb22cdea79aa6f9f6f890837d519acafc2cb3c429d3ab17a283e1992e5aca5053e25b", |
|
474 |
+ "providers\/Telnyx\/build.php": "485d76b827a54d8455550e8a8f8d14862f9444381da251e66c2bb8ceaf2106a554c1cd339666b1260450749d0244d6b9ba0c6d0a2220ab2411aa4041fc83f8ad", |
|
475 |
+ "providers\/Telnyx\/composer.json": "7ab90dcc0b5854786b213e5f2ee8c8030b21f65b2f8d0f74a3aa6d771ca1054ae5e1ba58ad6684dd1234e7eb7244be537cdb0a6888172cffcdaefcc7f5908dd5", |
|
476 |
+ "providers\/Telnyx\/composer.lock": "1e4b665caeb711f94b1e7f0ce6388e91ada9973159c1230d4e60f0dcfd44ba9af2dd236e6acaa27564e91b4a89dde817d5a73cad8682aa9cb93b203f467c6be0", |
|
477 |
+ "providers\/Telnyx\/data\/ca-certificates.crt": "66816e077ee99ceb9535a472e6bbf4f0e48ca838099c8a97c7baf3297fcada9a43016ea1ded63a455ee56a8f18501417a0f744fc17b215bb599cafd76b754518", |
|
478 |
+ "providers\/Telnyx\/docker-compose.yml": "1fe4c651e406095f0ff1bfc196406d473184bf53cf80f7c67dc79f1aa94b26db74174e0e9bc47adc95eb2a5f6eb950255c4a5cf44ccb7029ba712df3be9e6384", |
|
479 |
+ "providers\/Telnyx\/docker\/Dockerfile": "a63d1fabd8c19fef37b90922aa4bb21fbd1094635666cf2a3a4db47009888bfd3f1ad5c34c05184e2ccc8f581971f6dae91c1ff137730821422cd482c39e9390", |
|
480 |
+ "providers\/Telnyx\/docker\/entrypoint.sh": "2bf3911c365a271fc52d17a0aac1687abf52e5286a5d52cd34367e18651dcfd6ef1f791b54105b7742f5d691564ddca3c05a9ba4ce8edfbc68fe919e0bdf6c1e", |
|
481 |
+ "providers\/Telnyx\/init.php": "e590e355286b775423b39dd23b5aa0d3383d8a85ed2d1346802e0c487cb834154b4ba1b0ca41ae112ba81cf5afbcc9133db8747e08565c00fa3b0ea04fa7ccbd", |
|
482 |
+ "providers\/Telnyx\/lib\/AlphanumericSenderID.php": "c6f7d381cd9901af59d67c66fbe6ace0729c77ac2b2962ce41351ed076cb39c9049aeeb72ba0e3933ebce4ab8a936b86a7e21d30a1c07b2b08cad9da2abcda1e", |
|
483 |
+ "providers\/Telnyx\/lib\/ApiOperations\/All.php": "5caeaf5bede40fa19422387d224255ed534a866638b22a7a832111cada5496764bc0434cb1aa7365e1d4e0a8ad55545bb05a42a17ae5f2b361ed42c12166a229", |
|
484 |
+ "providers\/Telnyx\/lib\/ApiOperations\/Create.php": "811f9227ecc5acb172e8e7120541227de0bc22cbf66a41490b743b3e49647a38889d5cfa5d64139b602572f0fcc0fbb96e3971c78801ed9acf7b50db2ab7499c", |
|
485 |
+ "providers\/Telnyx\/lib\/ApiOperations\/Delete.php": "4c03010d81be8014694e366cf93244dd2f73dfb38fe8a1f3066b6ce179b999967de5a9d3e3140b3076d0dbbeccea329ac750ebb93915ced1e44891ab589f0c7f", |
|
486 |
+ "providers\/Telnyx\/lib\/ApiOperations\/NestedResource.php": "390efb020ed7c101b32379716bc2111e83273e2a7092da61623f85295c67ad1f6ac2fda617ec91eb28d02ed52a86db9992ee044356f3d96aff2e3474b16da601", |
|
487 |
+ "providers\/Telnyx\/lib\/ApiOperations\/Request.php": "5b947c7171a05a754fce9c5bcb81f93c1614db086fd4ceef9be1a57977f8bfa7311af0a60a2879d8cb9380c64ddbf7c991738e5b5a4e4b2feb5d88e25c822f3d", |
|
488 |
+ "providers\/Telnyx\/lib\/ApiOperations\/Retrieve.php": "d2a5aed1aaab9421f2f2b41f69047a70bdea46082e118cd94e087f4082865313d7c67aa037fac194063c53b06d9dccbfa5e65582a9adbbcaaa2982396cbda01c", |
|
489 |
+ "providers\/Telnyx\/lib\/ApiOperations\/Update.php": "a102e823a46dca1eea6c0bd67b4b7c63bdc0d074c97b42a830de18006782309d3c5f77103b32e82c778f670aade73d3c31f49da49682d9ac204560bd868cd526", |
|
490 |
+ "providers\/Telnyx\/lib\/ApiRequestor.php": "617ebb71c97dbd896ad736a4e1235f784ea7b89dd73a980a2b259820e3dde0ae935fa532d1fc8e0d9e14a63f843e880e074319bab2f9c519c1ec19467f80bbd7", |
|
491 |
+ "providers\/Telnyx\/lib\/ApiResource.php": "40b33a633cfba6c4efd4035bb668720a802c2b86538a36bae2f56b8cb1025b87f204732b9ed4f731cb9293de3d69e753e2e55a4f17980b75c2d91c572329c6a9", |
|
492 |
+ "providers\/Telnyx\/lib\/ApiResponse.php": "0d292d053a85224f4ac839f54253decab0eec5ae9861ca95314e98cad0fec2d2f0a7e712a8ec433adb302b6702d69262c8866b20fd08d67b2d18571965bf6789", |
|
493 |
+ "providers\/Telnyx\/lib\/AvailablePhoneNumber.php": "7c82ca4fa28264c4fdd910c71741270657e52cdbc760343339bbb7c1d5980d27b7af476f7e1bd431926d428dba685a6e34d250f9678ef0a4e3cd8c4b06289e55", |
|
494 |
+ "providers\/Telnyx\/lib\/Collection.php": "8953b7490974401e598cfdba09be005dcc037ff74d7eed660d11afca7a45d62c47f6b6c4f31b3b3003f3d9401599283122034362618a9c3d487eb131d05cfa13", |
|
495 |
+ "providers\/Telnyx\/lib\/Error\/Api.php": "5c496f65e000a74652c5e7e3c79303befb693e497d67dab4e13287ebe72722c9651fa04c4de4065ea969e140f7a2f74ccaee2ab728f05790ee26200558d0085c", |
|
496 |
+ "providers\/Telnyx\/lib\/Error\/ApiConnection.php": "469821ef557d096a088d2997f762b4a39c82c49bcf22ca707bcbf611b20006106522150d6365835e0c7e23e3303bd407d78181fb7b5d86bd35095645e68da158", |
|
497 |
+ "providers\/Telnyx\/lib\/Error\/Authentication.php": "e1c7a938a695fcd8602e5a972086989efd349a6d8d5e3abddbf6f548ba2e1f9bdabe708b5ea75474f7c3588ba7cca8a1dc60970a8be70a80962f90342e67c13c", |
|
498 |
+ "providers\/Telnyx\/lib\/Error\/Base.php": "9d311a5445b2f3d9c4e25c42094734c3d6243fdc5025c7e5a609ce49d2b2a47f01ea2f163154917f3330e1a92d30a736319c4daf3ae18bb6ddc41d131afae0ff", |
|
499 |
+ "providers\/Telnyx\/lib\/Error\/Idempotency.php": "cde2f56479baab53e74c6784878c7914e7393b655bfdbf7a36e0619fa9c521671c105c3d5002983b3759989a22eafa0bba7b4aedd4801d7d6b820842c0285e35", |
|
500 |
+ "providers\/Telnyx\/lib\/Error\/InvalidRequest.php": "0c5748224174c20020155c9f0c734121d07c752460ef63648b08a2392bb6d8b6ff0a9eba13ed1cfb8988545f6dc8c70930de6e78da03c63da0e59bc5fa109a9f", |
|
501 |
+ "providers\/Telnyx\/lib\/Error\/Permission.php": "3a03b08e77e6fd0897de16d69fb3769707f6fb46717b2a00f1282d7b3e33527f5ca5ea94b6df03c883ea177520140ab2dce4986e0ee0977cce8c375e8a5011fd", |
|
502 |
+ "providers\/Telnyx\/lib\/Error\/RateLimit.php": "0ceb884f1078559f5bbfbba6153e6bacd6ebc49dac2d047da9e7c64d45c7cff0abc067711366aaec74a4f2736b7205c02ae9de8c214871a82ed1fc53faf4be73", |
|
503 |
+ "providers\/Telnyx\/lib\/Error\/SignatureVerification.php": "8aec6ea46f62c2b6ecf845cadb726332f89a6c0dd92f4864ac71ffd25268b2af0468cfa83b32a24e91c735ae947498bdc6181efe09857c6bfa799cec721dadda", |
|
504 |
+ "providers\/Telnyx\/lib\/HttpClient\/ClientInterface.php": "f47e88048bac320e8cabb1b61869f138f84a04858afc3b7aff4de858db9b3efc507d1607037bf07ec5fb1f1df4069b71bf8ec1d0edf953bd1eb8255e67651ae9", |
|
505 |
+ "providers\/Telnyx\/lib\/HttpClient\/CurlClient.php": "fed4939d221213da7fa7865b4405e5c0b7dc092375e5acd890bfdf178baa6572ec7ac7ad57cb02caab5af24d2aa52763bae1b21679f3b94e6f7ba659cee7a438", |
|
506 |
+ "providers\/Telnyx\/lib\/Message.php": "18acf4bf51ec27d330df16216924c65a45db59895b610a3c803ef1d09beb7d96d20753b4ec16be06ed40f2886ad46bb3d866f14a87021484ede5d33ac1a93c4a", |
|
507 |
+ "providers\/Telnyx\/lib\/MessagingPhoneNumber.php": "2a2caa5e44efc5de92ef9b0f8ed0a68af1ab2c80932f4cd7fe79caa87ca1e146af3bd0e1d16d977738da2a3af1fb3cef77081c32a0dac50bbe8ef54a108efbc9", |
|
508 |
+ "providers\/Telnyx\/lib\/MessagingProfile.php": "351d96a913427c045f534b6993c37fa6ce2ecbdd7a398502ae6447d631ff322ce146cd73dcd1161c999f6bc9ab9764221b4bd3567888dd14c110b98bdc4432b3", |
|
509 |
+ "providers\/Telnyx\/lib\/NumberOrder.php": "52067d9999c150fbefcbba9969b308bb6118eabe25bd08f30cc4978cdebd68fce4479e53d71ce29632133e8c69bb4ce9276301f5a36ea95bd77d29fd057f5d46", |
|
510 |
+ "providers\/Telnyx\/lib\/NumberReservation.php": "2b44bfa3fdcce2e21668004d458e9e6bcdb5e33cc37e9a0c980bbdcacec945dc4e06e489bf5b9d0194df00229a79e39bc2a62395d44e4072473441e258841baa", |
|
511 |
+ "providers\/Telnyx\/lib\/Reporting\/ReportRun.php": "2a7b066db83e08b86e3da4c0b2d041c4d53ce0a1fc95ca3dab76ad2bbf549d74f9a97974be6bbbf0d7b592a814a00b514bb26ad13c7621b5c229f9bc40abac7c", |
|
512 |
+ "providers\/Telnyx\/lib\/Reporting\/ReportType.php": "92ad055c626d39d9f878666310ffec1c425d4625af9e7803547d50f1684c166ea1dc67d79c35580ae08850bb6e570a81994014e82f4d4080377cfbc664c4fbc5", |
|
513 |
+ "providers\/Telnyx\/lib\/RequestTelemetry.php": "cefdb55dce61e5f276bd49f6b49e57c78085338537e56cce6fea5a81cd1d2235f1eaa78be326cbd513117be88a046177afb628659088b66ce423799995c53709", |
|
514 |
+ "providers\/Telnyx\/lib\/ShortCode.php": "4abc882d0dbc72becbff07212d17b8e1383b0efb43818a7eab983fd2a08c3f591a4f4ba2f185003fab0622a43329c969d2fcc80b23cb94410007a0879309ad49", |
|
515 |
+ "providers\/Telnyx\/lib\/SingletonApiResource.php": "f11599b789dfaef76ef6cf10bade1b426d2e16749bd207c6d08ddd007fea470fdbf0492f9a59cf8bc9f8589aa4532cd6c3887629cf27060696c3f086b0a48673", |
|
516 |
+ "providers\/Telnyx\/lib\/Telnyx.php": "4971ff61049149242b0cfdca4a15dce213c465ee697cb444eb47da8215eddf2737508164c59393bd7661cf40b1a525afa9fc0df0dae8a071a59f3646a5ec44b9", |
|
517 |
+ "providers\/Telnyx\/lib\/TelnyxObject.php": "a1bb11b6bfecd69ba694dd34d6309707e916ef45edea1e81e160c572dc404aa4e16841f3be7a82b3965037efef24db7c7c9730fbb65d26e8a188d30fa9af01f6", |
|
518 |
+ "providers\/Telnyx\/lib\/Util\/AutoPagingIterator.php": "d03ac3841bb553d847be9ea73ab9debd8c1f2c829b0d38ac4416a121ac535a5ece2ecd9943d89e720cb5abb1c907ca9b96df899a561c190ccd6843bde785114b", |
|
519 |
+ "providers\/Telnyx\/lib\/Util\/CaseInsensitiveArray.php": "bcdf3fba35ae234bc63ba6cdb5429aaa5fd6baed85857991abb9eff854b23eb7a878184ed038636292ac470b67f91c6bf8d79c20a6214d31c872d22fe51833a5", |
|
520 |
+ "providers\/Telnyx\/lib\/Util\/DefaultLogger.php": "50a69f9f6ad628e489a05fdad0df811c926c957c301adb0b4b906dcce9733a0598f6c2eb126865c54a0100131dc4230a834b1e98275237ce8e90bff2e96cd0fb", |
|
521 |
+ "providers\/Telnyx\/lib\/Util\/LoggerInterface.php": "8d2dc2c59af5e625eaeef0b85b09f78a42e533b62fee84717d67a4c706fbacd94674f439d3ac60984c0a3947b7d2f5a8ccfb64e071c41d063b8298f57578f88c", |
|
522 |
+ "providers\/Telnyx\/lib\/Util\/RandomGenerator.php": "292c880420b28390e3d734c6343acd48f322db0c474f80430402916de1dcbf8e988b3d2753a7c18e763e632f474284b213ccc8e8fe4e52f00569e72728dcccb4", |
|
523 |
+ "providers\/Telnyx\/lib\/Util\/RequestOptions.php": "61a13e62a72e7fc4a1f4d2a707d03ca785af36dd8566e037efa4b1a07d91debe1bccc637bbae6ab9dd836b20a4133cdb7316d6c2628da0d13d2164d6613f1e3f", |
|
524 |
+ "providers\/Telnyx\/lib\/Util\/Set.php": "1381d2144748a490fd27329fe231e9d3a9a8b428499d4005f9ff18a946c350d8dda1ea90285314a1a99f5d351b1b235ad37a74823c37d7345da8af528dbbba87", |
|
525 |
+ "providers\/Telnyx\/lib\/Util\/Util.php": "d7c35dbf5a2832ced6059800a6730fbe75338252641edab902adfb134a179d96e162f05bca2902c6c2d99cf4827d5b89b0daac826162c7d460e17017ee405606", |
|
526 |
+ "providers\/Telnyx\/phpunit.no_autoload.xml": "06ad2f4fe0a292902757629f5605509f32a0d1dca527550619c98a61519d83fc70f3c886b12f5e5734b1031186fd9c7fed6fba813cd816b0f07d36c2a6bf11e4", |
|
527 |
+ "providers\/Telnyx\/phpunit.xml": "82ac037adc20f2aa76682878094e8bffbfe31782dc6a94e2987bac5546e3ffec90577d03715f4ce481cc977685eec9e4109a61b4b46bc19351c2cad555d7cadf", |
|
528 |
+ "providers\/Telnyx\/tests\/TelnyxMock.php": "e8e93ca1114530cb7e9cad46eb20e32072934496d515a9391ce8093773450dd60f3288f9d3ba46533a0f650fe67b508d5e54bbfc6e1642443d1fc043b88eaaeb", |
|
529 |
+ "providers\/Telnyx\/tests\/TestCase.php": "9945df738b56e344648cc00d3d4b94345c15d8749ce511b5095a87d5e52aed35d8e3c773276d9dde9d9fa04eada784a55e4876ebf70a198ba719c8e94c8c32d8", |
|
530 |
+ "providers\/Telnyx\/tests\/api_resources\/AlphanumericSenderIDTest.php": "1db47c5c215f1dccbc0456035edb1619cb7575dfe2b152924a6e1abe4a021bf63be3b1d1cf1b86285c5425f5df46c8e396cd66b6ff6a27534e402e145e5fb194", |
|
531 |
+ "providers\/Telnyx\/tests\/api_resources\/AvailablePhoneNumberTest.php": "823ab5138035a84a790d70c9bc5964e7aa163f195aeaa2fb50d2cfc7068f1a77440f09a134bec36a187cf57cca6c735b428b225239a263aa26cc5cecbecdf6d5", |
|
532 |
+ "providers\/Telnyx\/tests\/api_resources\/CollectionTest.php": "af248a4d4c4504f5fb7148e8f5ddbce3a05cc859a761f57cffb8335be10b07ef6d4e808002601f92eff2968e86873fbbc3fad838420db0694f81b9cd95091452", |
|
533 |
+ "providers\/Telnyx\/tests\/api_resources\/MessageTest.php": "a616a69339b599526dfd24a25d8e99eefc99c2341bb7d4f635d1b4984f41dc38a3eb6bca3e4242caccb974b141a490624669b5c2b2f5315b6cb07540d74fcad7", |
|
534 |
+ "providers\/Telnyx\/tests\/api_resources\/MessagingPhoneNumberTest.php": "40409c270a6f9a683bc690f6e91051fe1ac4c8a6cb1b4e5536416d64fc3f8c81f327f33e562ee94cee1481e0ec2f13148b0dc3f76f3f20a49a9d80adfa5c1afa", |
|
535 |
+ "providers\/Telnyx\/tests\/api_resources\/MessagingProfileTest.php": "1ca7abc2b47f221b491ebbe7def5569deada6eaf4184bd6e6327f7bf2da15669d1fff581e24c466621e8462e816c0a12d02e0aa1d91aa3746092f8a09a9131ae", |
|
536 |
+ "providers\/Telnyx\/tests\/api_resources\/NumberOrderTest.php": "dd6e4382dcdb0cd60ded9d9db6262bbc7f523e8f5eb842e15655fe8ba4e24ad5192b8be40bbc762de2c62de3aeec31e1373063420a99e39bf02f5bf74915d5ab", |
|
537 |
+ "providers\/Telnyx\/tests\/api_resources\/NumberReservationTest.php": "8b8386c0e044e120b6d60f97433c9ecf0ddc272f805034768300bf01bfbc731a3f6f964758e509d650013df03bca66eb1db13fa1a24315df76ea55fd86287fd6", |
|
538 |
+ "providers\/Telnyx\/tests\/api_resources\/ShortCodeTest.php": "8aef092868b89adda6517905c7f05245b3c39affed4c7723e5a32cf17b8e39528e8925923aad4b2add5a0bbce9049a8f934141b87a790fcb002eaf77aa494258", |
|
539 |
+ "providers\/Telnyx\/tests\/bootstrap.no_autoload.php": "cb002f7c8f77834b6414db6535f083bcd227ee6085363fa3cb0f66b55226680a45c8562fd8458249868465957b2aeae134b3379f8ee2ed22c96425475e9c0af1", |
|
540 |
+ "providers\/Telnyx\/tests\/bootstrap.php": "50e143ed68aceb91d3e119d5a31521e76bfe9876bd780c90ac83afb7ca4f32be48ff81c33c134109eafe1d22f35e0957a9a834966b8853df99dc1df04795adf4", |
|
541 |
+ "providers\/Telnyx\/tests\/data\/test.png": "6ad523f5b65487369d305613366b9f68dcdeee225291766e3b25faf45439ca069f614030c08ca54c714fdbf7a944fac489b1515a8bf9e0d3191e1bcbbfe6a9df", |
|
542 |
+ "providers\/Telnyx\/tests\/openapi\/README.md": "0c54fffd5b7a5f393358864ff9e3bd3793075d6060cc1336603b2455d60f16d160ffd47b52bca6834acf0d9713855b386f69580099a3dcc131e8d5d617975ff2", |
|
543 |
+ "providers\/Telnyx\/update_certs.php": "46dfc1129c3dff2211cdd8274fadd8629c450e94a7a1c8527373221b25a0664b6043d6b007351ac9afa4b40ba349a7fdbf4ad2e088cf0a8d864f7cbb81145fb9", |
|
544 |
+ "providers\/Telnyx\/vendor\/autoload.php": "1d4735a3ebfd65901ce478f8bb98ac576ef9ba2706f17a1c6ab125979a882ec7ff463b577fed1c418f817c1a56e842fc25b6aeb8e7ce6dcdd554a25e03959c3a", |
|
545 |
+ "providers\/Telnyx\/vendor\/composer\/ClassLoader.php": "866e8cbde808b4e7774c5d9e2bdda44e84ff9bc84268785aff1a75277bd7918dc26ceeb27732718c9ea93756777ec0d16c09c15f9c1179be3cbb410c7914d295", |
|
546 |
+ "providers\/Telnyx\/vendor\/composer\/InstalledVersions.php": "86ebb1216b59b01b7cd1f3b2e66311cd6295b58fab91a9a82603f903c6d2f716d7697a82d625372538f809e9e45f7dbd257a00e2b95d23c3785e4eeb3a6ebb60", |
|
547 |
+ "providers\/Telnyx\/vendor\/composer\/LICENSE": "f3bb64009f41a425df5a9bbab53490f0eb9b74fa8d6aaa2f57efb928edc4ffff330260666edeaa04a91fed708c3663371cf01b284f3a08d6698aaef7a23f355a", |
|
548 |
+ "providers\/Telnyx\/vendor\/composer\/autoload_classmap.php": "a298b75d605ec9a330a5efe11769e79f02cf202f49d8b241afbd175c7fcfa0ac4db8e72a29aa1d839138e3b181fbfeca525181eb57e998a4a2c14ec9e457cf1a", |
|
549 |
+ "providers\/Telnyx\/vendor\/composer\/autoload_files.php": "107b2d75757e7b39e2d279e373fd4291d57e91a7f442b0f880b51d07e7119beb9d41d1cdf916131bba717e8da953e2117ff83f1bd9ef850fc1d9056d0f02996f", |
|
550 |
+ "providers\/Telnyx\/vendor\/composer\/autoload_namespaces.php": "30324cf2dc20c214c5b5c8fdc2099b67772149ddea1d1d51969c711be9a83d036e43746c600f958a6b49969b16a10ef93e9b1e3d5af9714721ead916b9aef344", |
|
551 |
+ "providers\/Telnyx\/vendor\/composer\/autoload_psr4.php": "02804e683dc13b4eb2ad98284be2dff3eeb97f0ae9054c3a45641ce7e6144a3b5f34ae36eb764fd2faae39fe5dd4131b4dffd4649c6ba3220ef24aeab45efcb4", |
|
552 |
+ "providers\/Telnyx\/vendor\/composer\/autoload_real.php": "469f95fde429006c3262cabe72cd49970b0cd6098b743d8e5a646af25679dfe539c98d3337b51a8faf7f30d9c64e1def8d131a93e8897f801830e7e1c4da5874", |
|
553 |
+ "providers\/Telnyx\/vendor\/composer\/autoload_static.php": "4845f043e32744886f456f358ea87cdcfd641508151ba6c3b0169c9aa53fe111f05b78b82e204368da01da68d7007709c9140d08dce4e7dca3cc4c9f60397dcb", |
|
554 |
+ "providers\/Telnyx\/vendor\/composer\/installed.json": "5ca47a408f164e118f7ccba81577933913002efce47331f2eeb13f3e24d78878521db08454026d270deaa6552095260d745f0a424c91eb7efd36f6a9a20adfba", |
|
555 |
+ "providers\/Telnyx\/vendor\/composer\/installed.php": "38fb24f1f4e4aa0435926d601c7b78797c231eb0e3621e370b17078645f5d238a1d02da3a29cd14a9125f78f53964445f4326311f6e830cf8faa24e944215ce4", |
|
556 |
+ "providers\/Telnyx\/vendor\/composer\/platform_check.php": "4d385b31994301facce94382fa007a56ee32268d2e1cdbe7c9f9cfa834ed4195d3cf8e8e7c9a800c97aafe2c9b46f3c1a93e632c7415e8a9e4a282c083cc6f9a", |
|
557 |
+ "providers\/Telnyx\/vendor\/paragonie\/random_compat\/LICENSE": "0c0bf603f7e196edaf56d02acbb2e14df7f73a2da0617d62b5fc811f088c29865ecdbc7c6925a19bda63132cc651c56f1cdac79dfa02aaeb3fcca49033636ee0", |
|
558 |
+ "providers\/Telnyx\/vendor\/paragonie\/random_compat\/build-phar.sh": "a5ecc580bc6e95a9c901ad1a0097fd47ab857dee79d0221ae463e27f27cc8b2227e1975ab2699b9d0782f0b0396ed9b3ac0106f53fe61315cd2954ae54beb333", |
|
559 |
+ "providers\/Telnyx\/vendor\/paragonie\/random_compat\/composer.json": "c400438df2f41ace7bff40d284236bb06c6095ac03b58caef5b062e7ef317bac5a6bf551c94459ffc838acdae7df6cdfc615dfc3cbecd16be37ba67bd948415f", |
|
560 |
+ "providers\/Telnyx\/vendor\/paragonie\/random_compat\/dist\/random_compat.phar.pubkey": "e8909663e5350be2fa9416e28c6b179c41e87feab8da0d6fa6a41c294c9b00e8cc40ae8bcd03997770056f70d946315fd530f72f42974f63195f14b3c675e3c9", |
|
561 |
+ "providers\/Telnyx\/vendor\/paragonie\/random_compat\/dist\/random_compat.phar.pubkey.asc": "f07fb9c7b00f297e73127dddb1f3986fcebdb0760454765f6ce0977347919c0c74ea197ed310bcd86dca7ed227812bfa6d1595c44e40f10c085cbcbf602e163f", |
|
562 |
+ "providers\/Telnyx\/vendor\/paragonie\/random_compat\/lib\/random.php": "fe4539e2b55b47dfff1e2256c91498e5a41a85e28e42d790fdbcc42102c16abb09b0d7a0e2268ee004c555e1001241a9925fab1eeaa16c11ae2188e1f01540b9", |
|
563 |
+ "providers\/Telnyx\/vendor\/paragonie\/random_compat\/other\/build_phar.php": "370c622746a37b65aa6e36c2fb94486b4fb01f2db3f3c9539a7fde711d1abe3f9e9c30bc61f4200e6da9b47086c207b03cd7258d77dd2ea6b48126a618e2fa0e", |
|
564 |
+ "providers\/Telnyx\/vendor\/paragonie\/random_compat\/psalm-autoload.php": "f05ea11c8e973ddffde4d60688b161701217ac8e5c9237cfb57babf7113482d5e19ea441f5092eb1448a21b95ceed75f994427d6febfe0de100c376ed17e91c3", |
|
565 |
+ "providers\/Telnyx\/vendor\/paragonie\/random_compat\/psalm.xml": "88c631fb2f70a79d0e56a4484fb7ae8b6b3502ed2a9599757e7a3302c42b0adfc6f0c45c9916b88d7430f209d8934b6121221dd8b424dd913c49236db7ef01c4", |
|
566 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/LICENSE": "db260eb10b8775cb408f675dcbe11bfb1a738d638f4215467df6c4bd03b8265dec7712fffa30dbcd38b5ef944266c3963343d033f497eaa6dc602f55fdd8729d", |
|
567 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/README.md": "82f123f85b02a7e91c3ebece404b85ef5a0950e0ca79bb0841735a5a03b88d1a3efed4bc8229b3ee1db245471cf58b81923ac9800586ace3b794421f379f7bb3", |
|
568 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/appveyor.yml": "ed6f025871e47d5afb1eda2e0705a2185670c447279cadd8c0fa796779fa2f1d7a5f17efaf6412c403e40bee345ac3224a45f9aa0e5143f06ea5e25ba8cb848a", |
|
569 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/autoload-fast.php": "a40c6c77f211a2257d3339ad80ae7197ede8ba0a94c76b48052cfbcc8ce903959dbd8e3434e6660bfce2c5e935cb9f38568f96cf00819d03f4a1c46cd6b7b0b1", |
|
570 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/autoload-pedantic.php": "c1a0e8a5b461135bc58ebf0a37d75e865d9e44ce666aba9a95d6416cc7d57a834aae6fb6ef4a9cb4176690a4e41cdd8638106a11b32a155f3a8ca3acebf7a504", |
|
571 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/autoload-php7.php": "0ac98043c8df48e7bdd3a20c11688ad3702a06271687e1019c2a7288288532ea593e7e462635b806c0b18dacbb8f2bd6d9c700a61d2b1deb90eba0b49660b008", |
|
572 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/autoload-phpunit.php": "d34cda9cd77a67d93817d5b9b1bb51a13521b2539f9a8d0189debb1938934df1d5fd51fd2a82c9d4775f5a8613708a1e78687fab86c3afdc356bc4b02045bc66", |
|
573 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/autoload.php": "91c2a6366a27a76a0390c69dc4cf061c73cb03a22a3303aad673cd08e8cd659c7fa7e6796acdd9d2d271f015eb16b15663c5d21d8a538fe14f459519c9f9e8d1", |
|
574 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/build-phar.sh": "5bc154a32c62797e85b82595da69ed11676d98deb9644b62a12d5ec169d3edfd4d3b24c67170143f12ca63d9bea06cd0803f68d5e63a7849ea9c4dc9483f7b4e", |
|
575 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/composer-php52.json": "10cd40189c6ef385b9e21311b8b2bc8f7943273552227c8006a38889d743fde82c8c61286484d59bebfb83e645a87cf6d99f29409439a1057fd16a4ca7727417", |
|
576 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/composer.json": "e9b03b450c47dc1a593e35493c7c80c373f958ac5ddbe89a163f15e7a30a8139ac0f9868466610899e3d5e5d573d517bf09acfc68d2b9420e3301b39e7736aad", |
|
577 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/dist\/Makefile": "1cb0cca3e1413538bad70b8c8a22dd68d17bcb6450e0c4ee41fab9fab09c36bffb4816dd0f7ea2f40ca1b4cec6b030c5c0cc17955d2c83ec08759e748b04d965", |
|
578 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/dist\/box.json": "47543b120abf7596f26b58f9911963e9bd0cbe2297b65d43f74dc52130e503ce09049a4be53146387b7fb42b7640f6577e3c1f4862540d4f8a0e668b0001e62c", |
|
579 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/lib\/constants.php": "4e0597dadc39ae7b81e46ef5f3f045812a11753d9116215bf0d905e0bb3760bc44639988f1ec8f0ae8998f507e0c99eecbd19705f5399edfacb87172d7a577ba", |
|
580 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/lib\/namespaced.php": "c550633d5dbd23c1bb2fe9a14b787e239bd5fa898932ddb8a1b1f8909a57393e01f12337fcc53f54b24bc48a97c3ed89de03da089ffbea71ef90d48c5091e200", |
|
581 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/lib\/php72compat.php": "85b52455b2764ef4b80d60b8d99d5f65264b2a2e7d770b2ab05871a5aad213ad35f2cd755a8b5d19b5ddcea758c024175480f2dbc89ec75dc86ccdb453f5fc25", |
|
582 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/lib\/php72compat_const.php": "177d6b1b8fb5286842400019be1465fa0438e06dfce2fbf5e93e93d0715c161ad07c0c31c17394cb0c6673a058f34544454cc0845893242dfb5a998655c93701", |
|
583 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/lib\/ristretto255.php": "f2c36f65a9a556c43bf9f2fcad02f1c87c29d89bb5b3d81634112defbae7ac0c85e558fb3b5a5e74d95906a4b543e7a2cf16fd444ff28888ef09d73fb9e6b6f9", |
|
584 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/lib\/sodium_compat.php": "75e3119fb1d400aba554506a562c64c1b1b82e66277383bf307406fd1f4c68499a32b82108529d5af99878890e3551dfd1fef1ab62ae86982c27dc975dd39155", |
|
585 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/lib\/stream-xchacha20.php": "4cf0cb7bf023249c18f2261057f994faf8c4233022651285fdf8978fe9a71d7eae0511ea1f64faf2f3fcb1ae5b010112a5a4ebe8df9fea7ce908916cc2ec90af", |
|
586 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Compat.php": "7a8389a0ca9cb8e544b7f345c60705e1cca41769105531211219142f15c83bd60b442dbe8bd62042a5fddf31040a19ba1f3f00ba6c2a44c3160089a2605099da", |
|
587 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/BLAKE2b.php": "91aa0293c7c821d238f36fbb1f4327e67a718b53c13f0ea0f4d6e1d1675618bdadf183d842d4dea103017be863d40762a20c644a4f3619c7549991f11a19445b", |
|
588 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/ChaCha20.php": "7e09160954fc59c77890f28e75f7ce8b75fdf08b9d5461c5e7dc1f49bc664bcb1b7ac74e3f5437657a20729c2db965d968060b27309a4a06a252d22b7f8dd4f6", |
|
589 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/ChaCha20\/Ctx.php": "f19f61e54d42bf154182d203594613371f430d7c78f5b8229cb9bb94e19e42bb9a8e434639accff18497cd728ef391a1128d0145b8958f8d4350ee340340df39", |
|
590 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/ChaCha20\/IetfCtx.php": "41ac6fb53ae553db13ef5c12d8c1c16d017267f130e8a00e9c2a8ad10d723aaee5ee08f2888f016babe4d712a0f1fa50012e4ebe6626b34973c26ad6728e36da", |
|
591 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519.php": "5404d91b94a8e6c442c3eb30b763f1dd0c1234b845b967b7048f71d5a0b6e1ab287b44f43e06ae5bd6fce31f78154b8655353d7df86b6ac699a41200b9df33d7", |
|
592 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519\/Fe.php": "937defa56e99d4f38a81b88c03c649deca5b0f41f5d0b8e340cadccb34ef0677563f18967bb9f63e9547137a2a1827f9e37c62005fe745aff3764e39adf86cee", |
|
593 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519\/Ge\/Cached.php": "3db1263681f9414d237a8318c08ad07bbe3279b7310e21a40c22033f5d90eb5d7074dbde430eec7910a8d7e4286fa6c0131938c92045520f56fe6acc37af70af", |
|
594 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519\/Ge\/P1p1.php": "d757efd8638aa0c1609d59c47f3b18608a0fc6e1e5bc3cb94f16fd3fa2d6125872a796f4837cd8b940ca6988db92d3c668bba684c721476ee5fdb6fb6d50670e", |
|
595 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519\/Ge\/P2.php": "cd70c62efef16eb21967d5bb0489dadef845fb3cd4faf0b1bb7d080a8685164b2b0fde4d8865dec22037795eea6df605dc2151f20871c31d5e9e0084f0066219", |
|
596 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519\/Ge\/P3.php": "56c14b848691af72c00f5dcc3d31281a300d0ea9b6ec273ff929cf30d2279cf34d51891729a5b095445fffa8a63b8c8147f4d1ea24935c86b0216b3c40aa4241", |
|
597 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519\/Ge\/Precomp.php": "f6c53daf36931b4289248a231da52759e91e5c38af10b2cb89a1bd7e55d29e316dc77d144fb9e52ca1cbf50db84234aeebf13603c62d58d5b3ee58dc19cc18f0", |
|
598 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Curve25519\/H.php": "c2e48f6273cabcdc40f20fd0f7ea55975fc9da5a419b1c9cb834b694c858533f9a0d3e3ce768b532ea6b69ff5d2df1ae4c246a15b7129916d4034ac497ca2be4", |
|
599 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Ed25519.php": "eda61c7ee144449df655ea9a9142d0b26624644542012652598bdc51493f61938c13651b32b05e942d31d3cfbfb7899b8621f4ebd8a5909a1ed12704b2bcfbca", |
|
600 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/HChaCha20.php": "b5005439c15ef7aed83b566e670053819f59c415d9c5f607550c756622d7161ca32fe65dad8f688e6a292f88192637260d859302064b416465c08bbf7f6dbe13", |
|
601 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/HSalsa20.php": "c882b541376c8eea8ab3bb63d8b51dddb345cc45ade8d5d264dbaa96427f72f0201aea828e696808155da7a978c4a1fad09723d42ec393117693e48187cf2a4f", |
|
602 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Poly1305.php": "c438e61d6b330be26cff863f8b5c42fa3284d6e8abdd1e43a2023c2695dec643d2641b2239a9b0fbea1a34e9e8011d5094b4eb024b111b6fa903a1c026328747", |
|
603 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Poly1305\/State.php": "4558eb5b05c7664408a4e793c2b85a4c2593ab8a1118c3b89db712f337a12346e2e882a0c638c32af733f5589a310b4a528c9bc02c136692ae82f3ac7e6cddab", |
|
604 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Salsa20.php": "2836d7eeeec597187c456ec790107a5dc478a1f79c1c1e4ede4314bb830f865f189e048e3dc55742703e2fb7bf31275f515cca57ab5bc47332961bbdcac7c490", |
|
605 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/SipHash.php": "345fc6b9f37659ec9830c9b3bd1459257b81568dc73809c023c551dd825981b0da6b150b6b7cd57b00097ae9cd3b742d730ebfda2d2e459ebd7d5257fc967156", |
|
606 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Util.php": "81aac8187fcd44a14ae856e34d7337c012ff3603c606e1b9ff5a95fd5cdeb962725b70672a57b600d344fb2f34aeea00ddc8f1d4d8f8888961fae9171f8262d1", |
|
607 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/X25519.php": "d11fca34bc3d313e365ca47981a0efb880a3cc8be3e2cb00da7df69de8d52f2f1fc793c1654cce1385ea66aec40eb5339c5cbf120c127cb399b72fe84b7297c4", |
|
608 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/XChaCha20.php": "de5d7f3dd4402fe3c99b66a92fa4f0766beec66928c8996b3754b2f7a8869b65035c6ebafcc8ba2fe9b309adf541e89eba9491554f1ba548af6139770aedabf8", |
|
609 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Core\/Xsalsa20.php": "6abb7e9217d5463d373023d5aab49c41cd3e1026835985dd13256e68374ef63b90b7dd033f7fe14ea60229a98e5e64d0d0f23b7a382ecc9d8b41746bbe3fec11", |
|
610 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/Crypto.php": "257d3d05f1acc745b21f25652ddf0b09b5a68b2b75abaa9216bee10ea958f8ed1d3c964dda5326216366d9cca4a71e8678c23994fd07eca2582e3d8c8aa75500", |
|
611 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/namespaced\/File.php": "d7cce5179670dc18544eace3bf8b8b9863e62fc9520526da2870e45d5d400004fdeeb3c0f44a90caf0742f89b633e7fe3f996bd5f89af4c7f52ea37f429e453b", |
|
612 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/phpunit.xml.dist": "0f8b25b7effe47068dfafdc568c3298d7c5f2d4eb1abc040c8dcda1b0daea8523a1f82d8e00d6475ffde3cb566c18d17ccfd07db59c72bda11f40d555b692d32", |
|
613 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/psalm-above-3.xml": "5bb5402c96cd45a0d88542bfaa12ee03c26c3242f42f1e33a2a32e5a16143e6b66e7dd4bca7cbe30f73ee9eea7e72862e356f1bc4c4daaaaf1ebcb248d63b230", |
|
614 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/psalm-below-3.xml": "9ef67d2d8ee81c94d0ed80d592894be0c200045b295178f246865d12a54d963e97b4a8d75ab88595bbb73d74c75ab2275a54b9a33733bea2d15487c5894f515c", |
|
615 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Compat.php": "1c233a4b931c13b00e243f699eed9e81fc683846e089a24ad90dd17f786bfdec9ab32509eb9666074c9fc2a168ea8d411144274e6c4d4413996c78bd3c536515", |
|
616 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/BLAKE2b.php": "27fdd20dc655cc7f58454cfa97fb974e4d99f6da5b97d79e669d41b9c5bfd1be18fa34f0ef7a353731a3bebb11b56fcb68818cabb3d8ff026682e7b39106c6f5", |
|
617 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Base64\/Common.php": "c8512fc6d570a3198107493c7b8d20f38539caec221adb14161d7efbd6ab7d1d0bef4cb5528fcd84cd9484f1a9e0fbeb45aaa2365012680b0106ea92f8873281", |
|
618 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Base64\/Original.php": "4564f7cfef60c318abe626832bcd355cffbe04d020e04d18c5554fc1610c4a1b0ae8d1111681e2a458ae0b9d7ef3528bd62aef019fe3c1a3f9d28b5ae58da86f", |
|
619 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Base64\/UrlSafe.php": "dcbd158a52f33b9c64c8046c8f091d9af95657a562ac694c9ac0beb3a1876d55a3f23cd42c1777d9cf2a55cdae38d88ec54628b2d5fccd6befc92d4d51eaca2a", |
|
620 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/ChaCha20.php": "f0015a4f95fb6028c015c954992233d76ff0b07c7c60de6347e7b7ff1cf704e80de4ed5b3e236502fddd3c56071aa8012758d905031d6154f965c4898251329c", |
|
621 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/ChaCha20\/Ctx.php": "aeb8c31a1bb46b8519f280f23d349fa93911bf766715c0964c0a901369d0f0599e87c6e13459734f582a04ce74d9ba9f3ed7553d4b7214855a815424a8a8610d", |
|
622 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/ChaCha20\/IetfCtx.php": "d22a84b5bbe07297fa80c989e93681b27b3ee502a9b77b63e2b08eccdca03cb98c39834feec5fce3cb0e1915f2944b06e94fe555da123de982fedc61b30c1f91", |
|
623 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519.php": "b25ba0383cbaa00339f5cbaff6b400a25f3bd4d244d2fe70a08b987ead0ebb04a7f51b9476baf01fea5967610911f809114e39d21d4e278a9be72b48ca39b09e", |
|
624 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/Fe.php": "0fad7d424e7f3fbc0abd6a4f9113c83523aadc3f9d3423a94da0954f56d31705ca567ffad0972794bfbba00c4909c8638130b99a983cc52022d262d6b7d145bb", |
|
625 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/Ge\/Cached.php": "58ed8181f08dd61076c0ae9ce176455d951de04b9b1b03260c593d009414e9757d9120ea9e94040ddc1e0867f8a6574dc55e3acf82f946100d03d4506c9f778b", |
|
626 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/Ge\/P1p1.php": "63b5f5a6c7061826799c2e3285884ac2108adb19ea246475b98fb68a26aebd694eeba56191fe15fbc1a9ecb9b85c139bf9e8b65b4456b8fb42652fcf29097fad", |
|
627 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/Ge\/P2.php": "4caf0b912ad4bd82f8c447fc25829177323ba7af6d2355a7709b8ef99a855b51158e5252a1739cf6e9ae72b780e415af0cf3d510bded3fbce3542c99cf057535", |
|
628 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/Ge\/P3.php": "5bd84bc8087c48e62e9d29451c0165376ae8486ad9288556c81e4cb897822cdaf95a2df6093f16e2a336839d0a4ea7c1535361bf041d8be0fddeb1eb245eae55", |
|
629 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/Ge\/Precomp.php": "a58cbf2c93a75948b4576395ba1ebcef5a35b6dfb4625690e872010a44edd92939ba146b145cf40bc2cb6e45da0e19f169a45b575d813a70428f171459ee2d8c", |
|
630 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/H.php": "0ce669e4f370acdbf6cf27d5a525b0a3a3bb7c794b8a2ccc7b2f3a3670fbb048a8493e3e6306a5f148204f50a5458d47ffe4a2705520e15631b02d45d39b0676", |
|
631 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Curve25519\/README.md": "3f50765b54a3cf172c9cdaf2541a54273b811df61330af83883de5309103d6309a0900ecbae056f60aa831e438543c16c809fe183cc15c6a2f2bf15f6f910cf7", |
|
632 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Ed25519.php": "89eada60bdd8739af528cd74b771a2ac04e36aa3e588549c7e8a82d2267a4df5eb4ef13c806185ac65bcd33fcba0f49a03cdbc03f143ffaa576ba6f4ab5efaa7", |
|
633 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/HChaCha20.php": "e221d5f3c4818256a895cc05a8e68ae2b3cced7eaf4e425f3c373d59b2cec31fa7b498e5e42af7e374e70c3a176f966da3cccc4be97b646182a8bef2817986cd", |
|
634 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/HSalsa20.php": "05e5376ceaa53ddb24971a43ded855892cf37fe0f03647660f573334ca79e61edafdd511c418cdb3d42e62298462e729c69b4dae3eb802c4749774b43d659536", |
|
635 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Poly1305.php": "1bc3f6e6323d44ab76eca14cce61e7043ee98d8f7c50f29a5e29704c35adee345faaac767af588e1c6566f5732c1ec40ea815c51711056737460c9143adef1e8", |
|
636 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Poly1305\/State.php": "9a69f92ff7c3e384cd57c0d5fddf9111d57abc9849acebb329ffd1ac4f53e539e1548140f4a430f628cb378d7fc980494307df13e4d1837b0af377bd7811c6d5", |
|
637 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Ristretto255.php": "c4fcc5c22d8ece4e704c847ca01ce6edba7682fb2b9b91d74d664a204cd5955128c3bf8089a855312244f28c4ef6953927832ed989a03edf6eaec5c26df1722e", |
|
638 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Salsa20.php": "8c2ad19b46f527ef9c091cbab17f64d36610745ef32f778e3911e1aa2a142e88c0f6e005ced046a678d66982d2e9ca48677f082697af3999cb62fecee4d800bb", |
|
639 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/SecretStream\/State.php": "629c6f96a7bba323ddb8eb422e7048839c188560932cb4306b9f11ba8a2b15afdfc037fc14ce8725ed3efc72c26700cf6cd2ca4a85870fa885aad6b6d57a4a0c", |
|
640 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/SipHash.php": "6f24cd7d32eb80c943461199a0937b0acdf01560542c54ca916fae6843c3dc5fa65d751380434508aa50501f7dfb6c227e9330996956c4a8c8b32b6ae55bebba", |
|
641 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/Util.php": "fe12c7259ad5daa7eecd8e199c77f822e612333169878309cec5b5483a9bcc775261c344a31023c2741d53f37f05a0f6dc6289dc45c7d7b8ac7fedafd5458d57", |
|
642 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/X25519.php": "ea1d665ec23534de7f18c4f48094de4463753baf8b9ba011e38b969873bbaaa32e6b90bbbd0597baed3687c28e37fe394c224a229d734671b7d7e03197d039f1", |
|
643 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/XChaCha20.php": "56d827be22c68fe9a2cc01b9f5890846197c5831c3c0f129d9b8c522391b7d7391a217a2dc48a4bd78e81c3d2f3bd8187546d311f991148fdf43a8a67730c81e", |
|
644 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core\/XSalsa20.php": "c0367d97622bfb654340a6a7948e8ca4ed399d106dd8b27169a9f5d9bc6532129548b4dabf9f12ffba654f490b8adfa07b0b76935bda15705560feb7c590a3bb", |
|
645 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/BLAKE2b.php": "97cb339b44cc54299394b4fc27c8ab13d5a8d48aa4c8fce71733a27cea5d3226df4341bf9722fb4f4ba71c38f5491d677774245d75bd91a693269aaba0487036", |
|
646 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/ChaCha20.php": "da693dd0be25c739b477673933d361ed4b2f83110ae98f7c6805af20789fb4379b4b7a4ae34aca588666cfbdf61c2dd5776f8a4b1ee0215dae64ea09c6479a10", |
|
647 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/ChaCha20\/Ctx.php": "621194fbbe2eb42c04c9d94e45e3a0ebafdb4cd87195b924705f8c2a9e54c9dc52fa6dcb39967ea1dc4ceeb6f2d20659a1b0aced8035529376f6244ffaa96f07", |
|
648 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/ChaCha20\/IetfCtx.php": "b4a0690f9af7ace9fb3f8c10ca78989573a1cd49d3309f9c0011501daa3c44f7b616868e417096076846b19502ddaaaacb7c85f9b5c8622c57e4882982e09a10", |
|
649 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519.php": "fd10531c29a88f84f8b7de7c09a0e9e66472658827bcbdc55dcb1fba54f620b32dfe9359788e67abe4f6ffed3e4841e6b74939d7504188cfda243512a86c7eb4", |
|
650 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/Fe.php": "e6e5ce11b327d42167d51d2fa462ca6a54bf180229261af9ac1189fab30941148136ddabfff606dcf656985cb9da9bee93902f1863a84a3e5d42bfccbb0111d3", |
|
651 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/Ge\/Cached.php": "350f529a5a178921a2f40818a1668c3effdeac12b9b8aded2f57f1654343d0f7f535c780c5a271d9b7772969fff9381befcb85aaf676650c67b6e583d616c064", |
|
652 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/Ge\/P1p1.php": "fc8344d196cfa17fb61ab576b0a73f0ecbdfdf03de53d669cbf56bf10cf13eabd8c8a83d3eab7d9f9436b4dbb8d0785f9929c190059e0695579811405f3c840a", |
|
653 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/Ge\/P2.php": "6c4051bff3e25a7863fcfef3b9c1f028fa8b94d301e4de5dcb6654c629bc95f44978fdb697698375e3cfd1dfb9ae6a3c8dfcad0bd5138e51cd5d5315b5e5b788", |
|
654 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/Ge\/P3.php": "d6ee2e6bd34cba83a2025bd79e2d8a829d39f148c65ceee5a382662ef25b1c684552e0486ca29215f52d5d1e140176bdf6e2c40febd55970db55675b76d448e2", |
|
655 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/Ge\/Precomp.php": "397b94e8292ad4f09cc37f1b08a7f364e12d6acb74f125ff0148c5562631f632a2ecc44db517cbd5ea61865e70732e6223a0c736b831c751df859a7d2afc4ae6", |
|
656 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/H.php": "7bd14df9e3afbf8bc2ba27d5faf6ba72f17eed218cb7e89f4a458f500f6d9a60c52eaf5f1fd656d7de492246b0b0ac3d5904da319c5d85b754c64ce4b1f1b433", |
|
657 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Curve25519\/README.md": "3f50765b54a3cf172c9cdaf2541a54273b811df61330af83883de5309103d6309a0900ecbae056f60aa831e438543c16c809fe183cc15c6a2f2bf15f6f910cf7", |
|
658 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Ed25519.php": "30b970fe798803452a504ac453c70b5a2b51cf3094639dc58195b3c8e44fc37089c58bec2337d7f79ca60c91c4951af5dfa89e9dfbe3ae327084a806a6b8db7f", |
|
659 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/HChaCha20.php": "d4fdd553cde5a1ff277805bbba85128e3ea59e4fc32eaacbc8502414148933c760ef6da06fd967bc594f9d22523c62e45ebd7cc9411ad4b76e2d76c0fc2c00c5", |
|
660 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/HSalsa20.php": "8bbde85156bb88b6f0f14cab67840cabf1e1c456f9459edc145e09907161bd6fbea93fd37f121678064de6922102e78789cbfa3c2eddfcb40b93178fa3fbab6e", |
|
661 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Int32.php": "325772c5cadd6953316e83afe2a04804041292f25cb16e6027ea230e20aebcdd819c937977918161eeb9c43187fc105be2824949c9d6059e9c0a39e0cbc42219", |
|
662 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Int64.php": "8fde2b57266d78e8b03d8c3f89a1fbca3329bb6d0ed4526b3c6dbf5a0e92ef9d8e9e3697cd23b7eb5f7524fba7474cc5a2e06f1ba6faa04f7cb8729c985a5794", |
|
663 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Poly1305.php": "f0cc2f5cf32a37ad6c3dbaff1a8a155ff334995eab78ab42f2e5bd950390babaee0c1588e3f17d4e73cf970b8e3c34f536096d7da23182f526b0eed704e3ecc8", |
|
664 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Poly1305\/State.php": "8656ebf7aa0c2c7e8cf01546a261bf5e9f6c374eb5f40f8133bcb33e35bda2f19f47471b2ae6af6224df7ab9bf3886cc43b88049e8ddbe54b8dd129b28491129", |
|
665 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Salsa20.php": "bbb3dc0a30030d9c5f5ef1ef63e36f9a067d67891185b9620ebee17a67bee31a7abc420abb7b82f38e913b5de54d235859f0e8f5f718d8f02316f4fb03e24b2a", |
|
666 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/SecretStream\/State.php": "69d505517dbbdd2e77cf5aed72673edffa2aa008e70325db88877ba5673ac3ac070bc4c19cf13707932b0b4d71ee0a9b007e06a0f822292ec278a60def7cf511", |
|
667 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/SipHash.php": "8c3c2d2e4c656ee6f7af729856cc4c79918ae2e09a167d6d0cb92f7dc9240c0bdaa36e65a167f5b63961d9f9ac4df2c19e50c848e5a6da5855566deb5b9ab8b4", |
|
668 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/Util.php": "d6ff44eb1015687847600f8b7f6a80974f4de1cb80224ea7f733e908fd53ba2aa669b97d891fe89bf0bb8d358c15a2bbf0661a779e68a715cde0405455127eb4", |
|
669 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/X25519.php": "9e2d803c100fc9a3749100dda30fabe25c6ec59382be64f9995b6505e1652d5b2762111f2243b69316abd942c88106fa5239adcae842971f22fedd8e3aedd954", |
|
670 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/XChaCha20.php": "1d4ef660701da25af79c9d4af2f158e3f62afbc1e5c2aa062f64b970dd33378d5f67c9f0172991985ddd65a976759e09f4604ffdf6ae158bd8a98f4e97af851d", |
|
671 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Core32\/XSalsa20.php": "ffcbccb7d8a1d0262c5e74cbc679022bbcf1acf9160599ce2b92f66e261996f0e93b419231fd41ca95852e09b7a892dd8e98101c3426d30cb294f869908ee21b", |
|
672 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Crypto.php": "1af076765319483b5e0c2a3ed9d5a12133fd41b7172cd15073da3723200c41cdf077dbee04f1e4badc2b86ee5e23965dfd0e8f3af3f52b3b584ab2f775f64cf7", |
|
673 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/Crypto32.php": "9fd3ecc6e6faec645f2c5166ca551cbb4ff8430664bdb46c383da399048de42ab505a05c709b6ed0de245402a1abd701f21398252f059003a59fd55bffd6399b", |
|
674 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/File.php": "4f2a6c996bd3fe4a07e4e1d49d2790e68798add08c4887efb3d7bdc7beb5ec2c1601b8e77a0b40e570211f7d3b4e5a5f97471f60df8b31434487495677052640", |
|
675 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/PHP52\/SplFixedArray.php": "2adc50710dd4bc2cc1138b741cde09f225f727f2177d006ce8ca82691de0336dc51b6c30384938eef1693ae92628460f8984aaacf336815dea092de4ed1521b5", |
|
676 |
+ "providers\/Telnyx\/vendor\/paragonie\/sodium_compat\/src\/SodiumException.php": "705f6e9777db6be71970f7e218339e36d50023abf723446195cef782976d7431f815a90d1ed83e32ec527303057287f890215b4b0a9a8c992a13d111e8bfb947", |
|
677 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/CHANGELOG.md": "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e", |
|
678 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/LICENSE": "8756122099aea86ddf6f176a480c0454f2be6dd278e475bd6be7d7ab3d572162f1bd44c9f623e52e53514cb15336be6e84a5eafc8e2a347b481ab5799ebd6e17", |
|
679 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/README.md": "b552bcb37ad765a0aba888fe43d2e2f41b5bee6c90e734c365797e74dd0b8c4df017ae74dab2458edb410630299efd7b649438db57acd53fefb1723e233416f3", |
|
680 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/VERSION": "294108697ec66acf16af2f9518c5999605a8585058ad25dc9303029fd890e6835b2fcda23fff2ad60058f8f6a8a19c945d998e4e228453d4946e395b9aa2055d", |
|
681 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/build.php": "485d76b827a54d8455550e8a8f8d14862f9444381da251e66c2bb8ceaf2106a554c1cd339666b1260450749d0244d6b9ba0c6d0a2220ab2411aa4041fc83f8ad", |
|
682 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/composer.json": "e05f4af7ceef33d82ed5704be36e1b9839236d13073d0e23ef77d33ce7ec303cc2cfc2ddcd25318f1a5295bbe3b61a13bc2fe72f55c226e2f072e2a0b1959481", |
|
683 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/composer.lock": "2b8c24986c6cbd290c0ce53ac4f773836751aebfd65a2350fd07b4cf45292ce2667a54494fa098da13a385ce7a9e10a2ed55d20f7c8dd6817f93f33a6cc710fd", |
|
684 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/data\/ca-certificates.crt": "659e8d36bcb65a7fdd299ee008fc4ecd42be87d8ae7d7d15828567b9be44b4ed8a316978f2f7d3d5d7e96a4da0b30bb8bdcfae5202ef099691daa796318a869e", |
|
685 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/docker-compose.yml": "1fe4c651e406095f0ff1bfc196406d473184bf53cf80f7c67dc79f1aa94b26db74174e0e9bc47adc95eb2a5f6eb950255c4a5cf44ccb7029ba712df3be9e6384", |
|
686 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/docker\/Dockerfile": "a63d1fabd8c19fef37b90922aa4bb21fbd1094635666cf2a3a4db47009888bfd3f1ad5c34c05184e2ccc8f581971f6dae91c1ff137730821422cd482c39e9390", |
|
687 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/docker\/entrypoint.sh": "2bf3911c365a271fc52d17a0aac1687abf52e5286a5d52cd34367e18651dcfd6ef1f791b54105b7742f5d691564ddca3c05a9ba4ce8edfbc68fe919e0bdf6c1e", |
|
688 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/examples\/example_webhook.php": "336b92a647e49d8c994c8e6dc6b26670f0a58cb57d4679d0ba7177fa1f56a84a628e5385dd4c1c25a1395b1d8499e54d34eb2c20f9742a2a2a3d0cb20c36be08", |
|
689 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/examples\/simple_webhook.php": "ed299912ca9a55170796df76b25c5c92462660b065ef7eabf24bf7f552e75fe44512fc3fa977fae2a9dd5e9be1ea28100a456de926fd7f24c32152f577f8e46b", |
|
690 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/examples\/verify_sms_demo.php": "042dee741d4fe90d78edcd0614df6a371cee77d1a95d34623b4e558ead69378c693a33d044f450ea204efd7253e7eeee1e5a4119708dfddbafeea358bc5408b0", |
|
691 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/init.php": "82a207681a76c9b00d1a35fcfe64753cf286d9d0122366f8c1f3009ecd6c548369d2b65d5b4e03f20faa9502b967a3bdae30865e5bf8598eba630b5f9555542f", |
|
692 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Address.php": "a01e1efcaab0209fa7cf32ed85722ff793b9c0f750daf7d3bcd0499037dea764f2a61defa54b4bbaf602f8d0f5f477fd4198e35d6d8b47b82fd13c7a7e70ad59", |
|
693 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/AlphanumericSenderID.php": "c6f7d381cd9901af59d67c66fbe6ace0729c77ac2b2962ce41351ed076cb39c9049aeeb72ba0e3933ebce4ab8a936b86a7e21d30a1c07b2b08cad9da2abcda1e", |
|
694 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiOperations\/All.php": "5a6381d1492e2ebd1498fb4371b55c7e112ebf2c898e1861d7dfd2345db8c56df221795208a29b2a0e42295846fcf98f6a60fa8839df7e28fb66b9bde9226ce5", |
|
695 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiOperations\/Create.php": "811f9227ecc5acb172e8e7120541227de0bc22cbf66a41490b743b3e49647a38889d5cfa5d64139b602572f0fcc0fbb96e3971c78801ed9acf7b50db2ab7499c", |
|
696 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiOperations\/Delete.php": "e3cde9f67ab7281870c7399c4e76ff5807791b94b595567f56ee4ee494574e0f6f282a8d0c024c78c1709940198460f386ab8de6118a85de7d8a52feea0b0dd9", |
|
697 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiOperations\/NestedResource.php": "209aecf9e6abb679b4f1ec2b59b1ce363a73970f6d389829b77802cb88b7bb368506e4d0aad42f090b715b4d4a580fdbe5c8479c02227102b4d147d615fbdb8e", |
|
698 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiOperations\/Request.php": "afcba7de3fa312bc9e532e43bdcab8fcc5ca8b532c6f7bec08f94a8d7b2849467266f98af029bd688a136ac24ab2b7f438ca2fc666395c589d578e9d0156053b", |
|
699 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiOperations\/Retrieve.php": "6f29bd2711e3c6b586c2bf6d9805b986a5f76fb0cd8c98c63259cd9873eeacd679f9718dd333110966ec3bb772e2ad06da7b1586bb590180770bf300aef63c8f", |
|
700 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiOperations\/Update.php": "1d353ac81bc74cd57c75f01da21d6c59e053813930a0eb0fa054417bc87b6a140f64393bc04ac312b8c16803bb4c3eabae278839973f772e3202df32828480c0", |
|
701 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiRequestor.php": "deeca798d9ba058eced71d846bd22cac360cbb25bd1271db25cd0ebdb29b1af9ee863b362849035e8a9f6ee62bd49b8415cec97e1fc01e674ad6942ac987b6e0", |
|
702 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiResource.php": "f093051a36277165763e1ee66594056cc266fdb89caec9ab9223ae6af9add8ea4a20e6e3ea6fff4e9625fcbb95f430686f1f89db36f981d7d54034d79bf397a4", |
|
703 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ApiResponse.php": "0d292d053a85224f4ac839f54253decab0eec5ae9861ca95314e98cad0fec2d2f0a7e712a8ec433adb302b6702d69262c8866b20fd08d67b2d18571965bf6789", |
|
704 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/AvailablePhoneNumber.php": "7c82ca4fa28264c4fdd910c71741270657e52cdbc760343339bbb7c1d5980d27b7af476f7e1bd431926d428dba685a6e34d250f9678ef0a4e3cd8c4b06289e55", |
|
705 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Balance.php": "333bbe5f278ca247d8287c8da5cf3b3f6a96c896a82e3c3b54d01277e3cdc82dd5bbda2a1253fb473a29c49d3030b73b24eb8231cc34f85b0a43bd853682e000", |
|
706 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/BillingGroup.php": "60d9fed23d1520237a50a707986709f3b700d42d049e4070a48fbb50f257a98eab779f45a15939af3d5bce811014c01abbcb86fa1b9ccc5b89d55f44c4b1a308", |
|
707 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Call.php": "eec97591c5e7af2b057dac6e6498cbb2c1fee0439b1b7f31c2d879a5a0fdb5a3eb5ba3bb7e3c5a9195d9019e9df82c99a491ec52f15bec59b496435c0787d43e", |
|
708 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/CallControlApplication.php": "fee499465ecfdd2d5aee0479d3770a80219a5837bed934e0930413e6dde740be21bcd965216c782e0765ba18fd71714ac69a5ee887497845ccc1bd7797d6cac4", |
|
709 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Collection.php": "ba4afd20a921ae7c838a74bd9efcc4e468fc12ecae86b2222f97c9405d376a77533f55924bd1d577429825e746ac59142f6d4576f4d446cb3757cb36b65894fd", |
|
710 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Conference.php": "ef9da126fc06537687947c8eea71fc34a53a7d44607d60bcaea7d8c7f55e76a94a9d7e0057f9abf7efb1f4f270680cba042112a127c2c487fe3c617c5102be29", |
|
711 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Connection.php": "c5f43a62ff80b2e91556dc63ad2f78cd83b4fcae4a7a28ede36388177591fbfc6c20b244f6fd4e540cd9401e34b04946bf422eedfce25316e61c89f15de97665", |
|
712 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/CredentialConnection.php": "fe9d8b7b34a24f5b3b83d6a2597359fedce871db3a526124832d4bf4129e7515366ae16517b8dae259305ae69f95655aaa8b4710a9addc23fffee0e70b70b74c", |
|
713 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ErrorObject.php": "cf83764f49da72bbc816c8741644e15b9a74481145c6c0c11c390221ee4c7ae485cfc09d77db24a48b0756b69c85570242bb2b903c39ca699e636a299ec4dd31", |
|
714 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Event.php": "4e4ccaef81755432630c46881a958928c8b633ef1dea76d05f05711da17f68bf6e5b7b77395abf297b3ab128c065da7b4ed38d1be3a45306eb6d7a1080e72994", |
|
715 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/ApiConnectionException.php": "b2a920958f3e1664a6ea5c5f32c73f9914b3f59d8a927c4e920d385ce87a6676475823729f203b09f5530da667f52e3dc3d4471fa498277270ee9360d0797b5f", |
|
716 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/ApiErrorException.php": "b775efde92c04d1a53dd3f948f2efd92baf1f1dcb5092ed0863f37bb71fe03052562fa89349b1030f3d27a0dffa974ee47c9a3655b40a3941b05e721e7fe97c9", |
|
717 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/AuthenticationException.php": "f8154528a04642cdd24f3de876b1a38d6f97e357d36badafd39e596ca739df7fb77f4259de1efde8bc300f126b20f6e242db4c1e3a25503565df579b62676ec7", |
|
718 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/BadMethodCallException.php": "5e6df108c1df11bc1275948d96829f0ca6ff039126934ec57dbeee74913af00a64e6a9f2b58f42bf74aebeb94596c45cbcf66e5a4afa8924b238ca63d424f452", |
|
719 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/ExceptionInterface.php": "77d5904b79a9a5b265ef121cd19d91b952f631ac7436e7896bb0786d9afc0b7ffe54c7ea901091baefa0154b91abfbb3f9f3a7fcfea4053f27cb44be2d7cb23f", |
|
720 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/InvalidArgumentException.php": "f2872cf684dba5abd50bf876971e32364a23c9259c1e85a01575348614274453d00cc655b01c2dbf2c78c88f4a6143cb486c786dd1664204dc7676a64a9cac4c", |
|
721 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/InvalidRequestException.php": "fa310ff5d5ea8f02f731089c27e6903d9b0e692a3faf272efd19ae4f1075a2a1219d167730b21cac6a30e705816c4230e2511fdda981fb47714f4d81606ffcdd", |
|
722 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/PermissionException.php": "4cc209df863027760738530c5c01962702970a73ac7f11be232234413376dfd34db049f4e49305c8a15ee1f016b26f1c128312930e10cab174e80d6ba20cb12f", |
|
723 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/RateLimitException.php": "c37157b02475d2a3940dc7d007b84cc3c86cab88b42e841a392e3ce4919e637c9b59bc7b33ad3ed8b4b32e74dddafd8e61a6f30d60029b8b1ecc82b8faad4833", |
|
724 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/SignatureVerificationException.php": "3aaa44cc52efcc4caeaee624c070e8ec87b665decbdf00d8aef04ac857358028e4bc0495c4a86c504f3ccc6d753413c5ed685816e3b80851026bf2034514cb59", |
|
725 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/UnexpectedValueException.php": "33504e45241779bae5e9c1d6ace82a75d545e6f7ae76f7d7f071fa4bbab13b2c23d11e59230da3c242b548ee7b5386bf4795e0d06d1719812348d1f9efb0c1cb", |
|
726 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Exception\/UnknownApiErrorException.php": "cf5cc44f46c03d9d0de656e2ae61d7b077d123a4b6666a4b0f57fafa2033e072ceb5b14d6a47987bb14e0acd48ae00b39d4d6ac1849fadc879bcc43ed1acb44a", |
|
727 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/FQDN.php": "b7d44de17cfcd207ac1fe6aada6c24871a98dadafc4cddebe28b135c6e507634608e1b6c7052a40cc750f6515fe19c2de29864d4b9551e7002fd800cc6cc05fa", |
|
728 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/FQDNConnection.php": "527d18ad480447e4d79e567e7a91796ca31bb778f10011aa9fafafba6e769d387fdfbc306a6f1ba58e583bc7c37a9a66f1961494d3639dcdcd8912efcd0e6a55", |
|
729 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Fax.php": "fd8af5f711fb5341e2b86a7fc66a49707bd31efabd2cd63a1d5153c24462f07341d6af618b7e82ff1faeb9bdc203f62b6dd5570d74754e052300d0d7edd0424b", |
|
730 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/FaxApplication.php": "f489a9e161565a6e7f55a4d90fc05bdc8147a8947788a757a2b5464059ff2c49e61fa26b6d1f0b43fbf9ce8d0c08328e276442ab4d2d100e7ef34e9b2e0860c0", |
|
731 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/HttpClient\/ClientInterface.php": "da6ee5de3e8aec8ac144511858cb3bec53bfd2aa0b5ff27eb43c7f72dcdbfb1646da223cbd861db7595db904007ff4c8d6a010122547a98bc1d2c07139328a80", |
|
732 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/HttpClient\/CurlClient.php": "dfcbf2f40053699b94de74defc4a57461c2e07280976a377cf4ec3600e6279fa9cc434060b0291c7e10a634647e1a86e67cbaaadc49783eb532681ca25256a42", |
|
733 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/IP.php": "624821d6dcc5d30a1a08368bacba88cc7ce8b768bb3315b3f8013606e303fa8940c13da8ece0c67a43329a0cfd86d8bd09682963eb54138f4253eb2f159c7560", |
|
734 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/IPConnection.php": "01239dc2096fbe207ce1a5a58dad8d25795b9a8a81dbdd4290730009f2fafee76d74335aa951fb7b54e930e4e9530a0566daa9ef7e99ea60a50b8daf956f11dd", |
|
735 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/InboundChannel.php": "c37478b08abc62ca491806db6e2814c4a28a11357fef873f6aff8867e179dc8d89817ee3db3fdaa84150111cbeb426ad0282dfd7550eb815dca100843f542178", |
|
736 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Message.php": "18acf4bf51ec27d330df16216924c65a45db59895b610a3c803ef1d09beb7d96d20753b4ec16be06ed40f2886ad46bb3d866f14a87021484ede5d33ac1a93c4a", |
|
737 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/MessagingHostedNumberOrder.php": "ecee6ab7a46ebf03b93870017aba4ce00c10ee36342a6d3ead209078aacf4ebcb798ae129535fb15af860355b52ea72ae6bcbf0e5261a9d66224e43560858227", |
|
738 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/MessagingPhoneNumber.php": "2a2caa5e44efc5de92ef9b0f8ed0a68af1ab2c80932f4cd7fe79caa87ca1e146af3bd0e1d16d977738da2a3af1fb3cef77081c32a0dac50bbe8ef54a108efbc9", |
|
739 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/MessagingProfile.php": "7a561dcea7b45a4ad4c3dbfc6baa766f011de2b2dee9a23e512689b374017b05f4fcc5c3510f19111a9d8484ed93a5e05d3dc01f35d75e356f475a894596dc49", |
|
740 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/MobileOperatorNetwork.php": "d4436bfd9a628713889a37846829763909033339a086b6983eac792e9af42c0df2a8bcbd688c5c54a196d1fcb3d22aae7b45e9e18c015592d979e9a924c42ffd", |
|
741 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/NumberLookup.php": "cac3b5f1ea0ca30f9121849a8aa52ed2e18b7776c4f1d552dca4c3536e0d4eb96af45267bb687319a9ec715972bc95a19c7dda54c33a2701e20cff9564dfcee5", |
|
742 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/NumberOrder.php": "52067d9999c150fbefcbba9969b308bb6118eabe25bd08f30cc4978cdebd68fce4479e53d71ce29632133e8c69bb4ce9276301f5a36ea95bd77d29fd057f5d46", |
|
743 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/NumberOrderDocument.php": "007830f9c03979a7811a4e0dd0c74c4b2b6d05e05b56b9d6ceb5a6e55167eb95b2546087ae17328715e01d486c0e58e396bc41816b44866391b98d48ca246d03", |
|
744 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/NumberReservation.php": "988c853084f13e0d86445d6638517f84ef3d90c3f618c2c85c0bd8ab790012c3986a1a3eb3e00fef7759d04a6a1957bd9521bb8da6ade8c05fd2e02a8040f6a3", |
|
745 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/OtaUpdate.php": "3c9579c6ac1ef6f31ff572fa3fb7562b3618182cb36eab3f406d8fbe6fc7b1d35a996e47923074428583ee3653aaff3792f9fdc47eabe1627f1a85722fd9dbf0", |
|
746 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/OutboundVoiceProfile.php": "d0c5985f6f629904f4c95b892e329f280f7e0e13b8794d1950e216ef4c28ede7b94baa99f18803ff6f60b09d6178ad39fe5d3c182e984c2b4b57e9732991597e", |
|
747 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/PhoneNumber.php": "8106765a769bf3f6190783917aa923f3f7690af5b7bf971e3dbe73ee5f227b27531a553cff9cc425ccfc7cf2ac52bcfc685f3d3b178875f8fa837a5de99a077c", |
|
748 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/PhoneNumber\/Messaging.php": "d0aded1cbbd4c6108b0fc6e6773dbd03040af54c967f0a8aa9b2523db769317182889c882e6efe6fb0e187ac3f2919563aa6a937c77f4c1ff94e5bbc31f4d9d6", |
|
749 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/PhoneNumber\/Voice.php": "e7e8184351cb186fee77019e88600dcb15da0435161d1878799433686e012167ab3347d7f02efb5cd511b5d02cd7b6547453f6ecaab623ed23fac7c91b0a7333", |
|
750 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/PortingOrder.php": "ad9a683aab02c8817796e62131fa9cad6f3490d3afe231b5718b3b4f0689a535543362a88333ab808c36e9c41bfc8b7b6178be7fbd5b12f38b6d806053726997", |
|
751 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/PortingPhoneNumber.php": "ff2e1e98371b6a7b0cc5265d1ab82f053d97711a72633a7d3911a4211dacf75c08083d6629aa4fc028643c0dc929d3ab56132f6f21808b875a9ce679e56fe055", |
|
752 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Portout.php": "71de0eb22350f649e5023b2c4a374b3d10a4beb0f8066d67482c62f68a39219d9cda4bd95d91e1df2fc215479f45b1ab79bfc0ccc2d39267d2f268356ae83ec8", |
|
753 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/RegulatoryRequirement.php": "0658d49bc2c20a9a16ac72ea01b5306eda422d81747529c3373333facb5ce1940252387aa498d2957dec62f0eeaa8aac3979ffd84ca72308e660a1a0708796d4", |
|
754 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/RequestTelemetry.php": "cefdb55dce61e5f276bd49f6b49e57c78085338537e56cce6fea5a81cd1d2235f1eaa78be326cbd513117be88a046177afb628659088b66ce423799995c53709", |
|
755 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/ShortCode.php": "4abc882d0dbc72becbff07212d17b8e1383b0efb43818a7eab983fd2a08c3f591a4f4ba2f185003fab0622a43329c969d2fcc80b23cb94410007a0879309ad49", |
|
756 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/SimCard.php": "46289711eda27b37931b0d9f7e9624c114ef9c1e997ea88055dfdf6fe6dfaf7f9169b9a67cbfe48100dc4df2b73ba4d27328b0ca3ff0af3655789535ec3c0b26", |
|
757 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/TelephonyCredential.php": "497a3dde2d7fcf8bf57b502c71daa5e166010daae45e30e1db7ebacb3a37028fc70c7cdcf39a356dd32f845664e8e9723a366fa69610c8f9bd31fa59b3300624", |
|
758 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Telnyx.php": "f5ecf9589eaf7db991051de8482d582b36edc387b8a7ca48c80a419c1a99e1393d7f099aa4ad3e87adb4706ab62c8714dc843c9a8ce77d6fe6ea5ab929d9a882", |
|
759 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/TelnyxObject.php": "0f45c91559ef686a3eb4ce3777ab7d43ba288b380ffd1031cc3c562138410d3582c251e2d986e8a84a2c189257ed4307500e3fa0d662a48a30b28a9622ae8ad2", |
|
760 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/AutoPagingIterator.php": "d03ac3841bb553d847be9ea73ab9debd8c1f2c829b0d38ac4416a121ac535a5ece2ecd9943d89e720cb5abb1c907ca9b96df899a561c190ccd6843bde785114b", |
|
761 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/CaseInsensitiveArray.php": "d5bcc37aeab4fcbbe0b9f4a9057a5654f6080ed899ae54f8ef18bfc907f244071a6693386dd306caceb6bf338883a13c7972574ac5d700aa00e22ec363932cd6", |
|
762 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/DefaultLogger.php": "50a69f9f6ad628e489a05fdad0df811c926c957c301adb0b4b906dcce9733a0598f6c2eb126865c54a0100131dc4230a834b1e98275237ce8e90bff2e96cd0fb", |
|
763 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/LoggerInterface.php": "8d2dc2c59af5e625eaeef0b85b09f78a42e533b62fee84717d67a4c706fbacd94674f439d3ac60984c0a3947b7d2f5a8ccfb64e071c41d063b8298f57578f88c", |
|
764 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/ObjectTypes.php": "99ce4f7d4d4d9d43e24f3124a7c21b9540267aa160c780efe69d6559843a12948f3790b179db66282b0adda384309a793636d71aeb97d9aab0a62dccfbe2b51b", |
|
765 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/RandomGenerator.php": "292c880420b28390e3d734c6343acd48f322db0c474f80430402916de1dcbf8e988b3d2753a7c18e763e632f474284b213ccc8e8fe4e52f00569e72728dcccb4", |
|
766 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/RequestOptions.php": "00b6d4890b5a38f42f13ffdca556bbf1377c05c8a79ad2d6d0b69b7e27deb70252c15088458da4bbd56e7832cc6b2828e261241661dc344727e2bfb170465de2", |
|
767 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/Set.php": "9cfa1c1bc6c012e8a7a797ba8a7893382eeeb234da73f93594a159f78b9858c984dec1e42da5a6cdb240f00d27d250e3fd6a7842d40c23513661201a148a6c5e", |
|
768 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Util\/Util.php": "4556fc8b785486adfb60ea8001296ad0ae7b13d785f92d545324b557fc4aad85a69ec19dbca27dd868050d64670e4e2be2e3a4f50e4aaac609b0089c0e9e2749", |
|
769 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Verification.php": "b63d4f9d717ba204dcedd1c3315db3300567fe09563faed0e4b8f1415171e43e0068fb06ebb2f42c808602248f623f5773414a1612539a873070f461398be650", |
|
770 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/VerifyProfile.php": "fbdf0818dbe1fdcd6bf13720f21ab6552a3ee7930c80a9adc44c3863ebb3df990b18adc8beee6770f4fca9bcda0d514a689d051c129d871eca48f2c0eccd7649", |
|
771 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/VerifyVerification.php": "f2883946ac990666dfa62e07dad649ae0c9de75d5682857cd22419fda8926d45d504ce4fbf38896a1cbf25323a604a818d3b89f05baf58d91cef497c54d981e7", |
|
772 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/Webhook.php": "b451d90496fcad105eb4f61d5716b93878405315742c09d7c4be96c6b9c0427e35c03c1a664ab2f30f1288566b45117f87b069a3ce96d64111ef6a1ef289ac9e", |
|
773 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/lib\/WebhookSignature.php": "ad990cd80d771718468e39aab1b06809a0efb9bb47f5ea4d42a649dbe481f5929fcbd502da6140f1438920e96ce2e4af82d9cfd810b0ddd0eaea391599685c0d", |
|
774 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/phpunit.no_autoload.xml": "06ad2f4fe0a292902757629f5605509f32a0d1dca527550619c98a61519d83fc70f3c886b12f5e5734b1031186fd9c7fed6fba813cd816b0f07d36c2a6bf11e4", |
|
775 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/phpunit.xml": "82ac037adc20f2aa76682878094e8bffbfe31782dc6a94e2987bac5546e3ffec90577d03715f4ce481cc977685eec9e4109a61b4b46bc19351c2cad555d7cadf", |
|
776 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/TelnyxMock.php": "e8e93ca1114530cb7e9cad46eb20e32072934496d515a9391ce8093773450dd60f3288f9d3ba46533a0f650fe67b508d5e54bbfc6e1642443d1fc043b88eaaeb", |
|
777 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/TestCase.php": "9945df738b56e344648cc00d3d4b94345c15d8749ce511b5095a87d5e52aed35d8e3c773276d9dde9d9fa04eada784a55e4876ebf70a198ba719c8e94c8c32d8", |
|
778 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/AddressTest.php": "dd980e7890ad3dc1d12858f2d241a461689a34892bd780a8db034e620c23d01587996042c2c12d82333b2072bfcca6585afb06213694b7415b0b13d3084b83f5", |
|
779 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiOperations\/AllTest.php": "6031bc6fa9e899f06af9465468fb9e15bf5a9a7c1051fb52fbd383ea879842e72ba4b5347d07566182c632b5f66d5f2d4bdf73c1368a3581c6010330bff91ec9", |
|
780 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiOperations\/CreateTest.php": "c94c7e854a40716aec0e257c4d7fa279c3e941d64a37e167d4885dae5a0e22a513c8f3b018c436eff90ee045432c5e34b96aeb7d879380e9386c2bc177b94f39", |
|
781 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiOperations\/DeleteTest.php": "02ea2d3adfd1d83770f10dc42cc2c12c28079ca80933fbe02219ea79fe7eb6958d2b1d76cb7a0bfee9e308c01efb1eff61901e22d192e15e89ae67f7edcabe5e", |
|
782 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiOperations\/RequestTest.php": "f6e158958616f0637f827b94cce168e873e0d3be09e4ec27165f984af3d89c0be4d5d5cd3ed66df5b6237bf183003a0de1c652f599827fd01a2ee7ad47d5fd61", |
|
783 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiOperations\/RetrieveTest.php": "b26b8f61eb3cb893ce4ff9517817295fe9b727dd570b1cf79ace36e16902e0ab9f460d6b65342afa28c59236b59ec0ba0809e1cee673f69ea26489fdbf5f4f42", |
|
784 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiOperations\/UpdateTest.php": "6aafed3640a1173822ac9a26c002168eeef552f9b681fab9ec4f191df4f988a920d8c290b2f875c02596ef613273ed003e4b5a6bb6e0bc2760f54ffff445cdd1", |
|
785 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiRequestorTest.php": "5a1234c4a1e4107aaf970bf87f0fdb1420979dd575a548e589b046cd7feea4dc914f25bf15474fe5bcd9773c94184b610d06b309d48639964a78e6137078cb5a", |
|
786 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiResourceTest.php": "05562966c7ecea541b0ae95f67a11d9e2b86e45439b436b319e252d5998e0eb7a6c9b677e233572fc616caee856d9764b56feed80fd07cc1bec0d861490753b4", |
|
787 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ApiResponseTest.php": "6f8d458b49e34df5c0634276659fd441e4140fb4dade92b384230e4e2b897e0da6d0e82c373b1eca98770dc3396ffc8b924672ce2141426706c624d00ffc7af9", |
|
788 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/AvailablePhoneNumberTest.php": "354326429958fdd199df78d11bbc582a0988018b8f907d93808cbd53243f50332482c0603bf4ff12db2a8977ffe7e663ea9d6e8cb5f485aece0d46ae8942833d", |
|
789 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/BalanceTest.php": "8f866f88a8a59754e2fce7d5fe2a0bf50399fd21711cef171873a45308ff96f929b23163495c273e96c9894b7ea39ee5149c45e764fa0de3b51807a329c674c6", |
|
790 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/BillingGroupTest.php": "4333c81ee3ac767fa600095d95f324286d289c7e105ab251f635d9a942e75c418bde60f96c5954ae29dc152ee5fe7679bc5a8b67452f5fa1f59a411dc4854c69", |
|
791 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/CallControlApplicationTest.php": "2bb4f83cdf82457840352c5beaaed8963aba1dcb59711e310d5aaed0d35429730796b412f1aa4e85d5be5a2288ebdd12fc2be9ad75549506d1a613d604d20749", |
|
792 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/CallTest.php": "50f830a3a3c28953ec53c244d22381910307513ba18b7199d5e7bffc5747863e4da975fa972114b2f8a81d0c24afb2f72df8315010febd8d606d086d79d82165", |
|
793 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/CollectionTest.php": "9e742f72d8a223e64bf1a25362f9a28356c0b55037811510692880a359ee5e39266d9e76aa0832de39530e26798806929fb9ab9795a04651ff316f609e2211f8", |
|
794 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ConferenceTest.php": "4e8ab0baaf21da65e3942b0d98caff11b7a30c24bae10ba546b82f7031d7a85b9d88087f9ac8172e69546eb7635bc1cf8f39b509017b82116e0e13b557bc1f7e", |
|
795 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ConnectionTest.php": "429f80316a563f45783c87db6b6d3dd1564190b5c6a259f254e91ad8b71b2aa5e6ed40b9cf1a98632b7c89b66441e07f0285d434c78dd9729c032c7a4891d4ee", |
|
796 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/CredentialConnectionTest.php": "a1c37f36e418debb034faa2b7df5095eee175ac8801baed517089622123dcc4af642448aecde7aa8b19cf67629de087e4995ec816d791b5007923ee614590c1c", |
|
797 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ErrorObjectTest.php": "97344e9d24c204ae429b856d0b32299de4380ec52e9cfbdef6090add25355d268e3dd3ec35ae7c5e0893f5bb204624930d1a856932243180bb71b40e5a1dc08f", |
|
798 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/EventTest.php": "5152c008cb3de14a47586eeaf3ef778629b2beef87fe154a2c40c337c3f918d664c0ea44d8339e22846fedc696fe6b98f0bb0b557d3f88a3ac62990445a55ec5", |
|
799 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Exception\/ApiErrorExceptionTest.php": "7d54379e1ab9f7d6bddb721ea1c284a8d023674e24e99d115f388ae367250089e10b5962e2bd091e3ebbedd0cc83bb4f821eb0a986ae11487e341569ef7f5c6e", |
|
800 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Exception\/InvalidRequestExceptionTest.php": "a7da1818af1dfb3eaade1e1a122a8a3224e03a557396e11528af75b13cfae07764f82a282a3161d514358b4c55312193c73b5a8900fd70463fe0a66b448cc9f8", |
|
801 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Exception\/SignatureVerificationExceptionTest.php": "1bb0fd1563a5c91b78b02e4f66f3cf0288986f546a0805830e0d4ad1ac449549930558caf86c06cdc578279323c43e4739747961065d5ddfa198dbbcd9540599", |
|
802 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/FQDNConnectionTest.php": "0af10bfb2398682865c4ee72cfb34425fe73b0fd20c86b51c61c4cf72f8c4d39a4ecfa21e4ae2e07a67fdf956057549f0c8c4f77e27e65dc1b75dae8b9b849c9", |
|
803 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/FQDNTest.php": "625370468fb338819fb823fbd38656799a8750f5093eebf75c02cfb592969a8635a442ec2febfe07705a5d6feea362b7644c25c67ae653a245bdf55fc178a2ed", |
|
804 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/FaxApplicationTest.php": "64a60460c62983cb0afc2c76880628e16270f14b0b761a8d62766cbe4c0fb33dfc7bd93ae0cb62de25a8f2b3e1994826fcbfe300ea37353f398c4cc8ed7dd62b", |
|
805 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/FaxTest.php": "a920c8ac18021bedbbc4972109afb0cd0afc16e5d86df2fffa2f8e0bdf837e5684124f926f01daf0bae439473022899498441a770ad8cc52479da3d012f1ea1f", |
|
806 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/HttpClient\/CurlClientTest.php": "cff15215b95a804e4ee233df60671c5c1e9270f621025f6ea7cd5a0bdbb55175caa6c43c62e176300bde05c9ee90d84efda0dcdf0d0b5dda4dab2a47d1a669b7", |
|
807 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/IPConnectionTest.php": "6e034e287616ac89e5059d337c682e3fde010130f4403dc76fe4efa12742c40dac114ddc1aaf7ce9e553c597d9ac27170419c5e33fb1439c31c6b585953ff1a4", |
|
808 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/IPTest.php": "7ff33e91d1c7b8bdbef1ca1f5e373150a05f709e524d5a62b000b5c8b8d697ce42306ea8df917305d9ef2a4ea19f797ca28e2f8d0d5f9e3e31c4ebe5eab55ee9", |
|
809 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/InboundChannelTest.php": "c430f6df3eb5add5bda2342e4b4a3acd77b33d74758516782ee0a045d75e7387aaccf36017fdaef18d71cf8865a28faaa0cf07a4f31c9876858719d84d479657", |
|
810 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/MessageTest.php": "08ae5ad7b98362fa7c1478254f851078ef7e9a223c74f3fc57619d2b9c255259edefefc400e261cceafce7072fa7457b8c1cb4dc8dda29b51e432f6d274a8c3a", |
|
811 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/MessagingHostedNumberOrderTest.php": "f8f8ac7271fb01b07815e2a92d7a0974e4320de63942eadc12df307c9458a7cbda7ddae505a731c491e4aa6bcdda7bec04786890df80dd9acd422593f2a02c0e", |
|
812 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/MessagingPhoneNumberTest.php": "7827d12be3191d1329168c6b277899b81df17aa18b775be538b9b29ec9a90868969c05cf61d53715c42105b92cc37977270c1a7b78bee3d13214d8ece51172f2", |
|
813 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/MessagingProfileTest.php": "0949c56ac67ee6f87854959635dbd003391e497325305692784905987d114b399e4c648252f314bc1147e385daf4e60198cbfd6aa940a6cb24992b8cb5abc24e", |
|
814 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/MobileOperatorNetworkTest.php": "6cdaa23aa8cd0a0e9cc43b6f17c86d9c1f7793f7eb30b774f4a8ae9754488e59e0c180823c31d062abaa356578a8718c65f367588c61015e5e36f9f98e7a5cbe", |
|
815 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/NumberLookupTest.php": "e03a73e589abd73cf52a637dd7d273dd2477533b66bcb75685552b77b47f7b58116c4637477da7f9ccb36a408909d91d3f0d3079396aca9bee996b862f358499", |
|
816 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/NumberOrderDocumentTest.php": "06f3e8f8e8dcf5d8c96f25a6f1888d59e9433654ff060701bcc5cb9f54b07357bb3606ac17af3e3913033fb639358df85c6d5c55bff114407168333d7d49cbec", |
|
817 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/NumberOrderTest.php": "176ca2e94df05262e8a43f14e112fb62108ce886bd90a690e8b907881c696e35bd223f08a4960fb58ebebd20cd42bd4217ffa14132e53ddac260926c6d7e8842", |
|
818 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/NumberReservationTest.php": "11742f7449c279908848fd493817731f3f1343895e16d3426a7a7f9fc3d4cc27e275a858e16d7efb8e9c18d32de1ffffc92929e8e3ba277157ab7304c3023c86", |
|
819 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/OtaUpdateTest.php": "14830affab4936804afdd723714f2dc76c520fc2fd6e4d36d7bb255ef566836eafb6b29c18c5adb8785eed39f4bab030e3cd1aab1ef0293d9660b38a10fd6a45", |
|
820 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/OutboundVoiceProfileTest.php": "e49828087e2114fb11569db7387a0acb7cce8bdb0cd655b280b567445ba2dbf16f8b66a88369876e7a2530fb282bf5a04be702719adf4ace871c2b6df8fa5edf", |
|
821 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/PhoneNumber\/MessagingTest.php": "b3c5665f4661624f58f02b814ab1edbee5ceb8c26643bd356b486f049dbb498a44da0af43daf200890c79acad16d51c169d7aa1a2ad4befe074b0ac539ebe3c0", |
|
822 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/PhoneNumber\/VoiceTest.php": "af08b444289d0194437c414916a8ec9285b98413d78e74d1c832b9b45583f9037832a538751628b5dc86b5a13c40c63e9dd360b719501762e8e868fcaa6fb215", |
|
823 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/PhoneNumberTest.php": "7a07f41165e45e5fab268b0e01523c2f67f0ad146965c401856582c4b4a3f63e53324585b1785b41cbeb637d8e61e26e2bfdb57feaf6c6c04cc33be8e4864df8", |
|
824 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/PortingOrderTest.php": "48d2ed4bb9354c772eef6484a0c9a195487c39f26bee3d143ddf64ae7da15e42e5f280a3e26eaa280940230fdee52ea09b7e5320823d4baefa73eec4490537ad", |
|
825 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/PortingPhoneNumberTest.php": "476748b7e467c4f5a648c394eb19dbf297aebc2c16357c946dbc4f363241639dd1001985a7bb21166d5bc77bff1e31edce6e379dbda10f04406377dafcae1bd5", |
|
826 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/PortoutTest.php": "cd262d5eae7c9ef9ba8c76856ef2d4f604484e6bf8646e9ad5231e89f5d45c8176a8ac33a757c53e4be8e2c98e6bb750c6041aefe8b2a589ac1e70a2db4493b2", |
|
827 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/RegulatoryRequirementTest.php": "daa2836606e7c3f34fa122045e982e42f5da86b46f367ddcd7fe9b12e2a3fe5d472d4f38403d4b63aa0c58473d3b5901b8dd49b93a56fa3e76a0bdcf88ebade0", |
|
828 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/RequestTelemetryTest.php": "61190b3601f7c2c72f55e9b1634cfaf11ca53231cf4b5f854ab14859b97f5dc0f07f6c95b8f7c3516ed253e13768b7d4ed9c1d15d0772fd1850eb894f5821152", |
|
829 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/ShortCodeTest.php": "f2e867e0b75d8334ccce51f7bdce842b350e7028319e8d388e0512b5e119585952a54ea79762010f12de8ffcd1c440638ba5300ddbe59adfdcefc712d8e079ac", |
|
830 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/SimCardTest.php": "7000edb2f9b739bdbd44fceeee2e4a16c708efb22c7e38483569d5416f3c107bcecdc759e2e6108553193ba99acc542f5bf3bc353ee1428593a81b80d89ad7c8", |
|
831 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/TelephonyCredentialTest.php": "1f65bad536cd49b2df684db54533b9799856b32464b80700bed5008c9379c414f756d075ab8e231d83f5bd9c1729dba064a5ab5c7e515ca5c32e85698e2036ad", |
|
832 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/TelnyxObjectTest.php": "6214f2c38865c7a183f6a3fd64bc79e7f04963bd726fc124a87b65412075fd236e00cb5f5ed514a3ca2847faec77f4e7a14c59e8906478543daea9c4ddecb7b7", |
|
833 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/TelnyxTelemetryTest.php": "ced938d8d20bdcd0d465155e1bd3ffbaec8ba96a6392c42dbec27a1d10a04da17b90fd3b91322c94b54fcd5a974528e6f10d081ca9b1915a8c8166e0727ceb31", |
|
834 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/TelnyxTest.php": "d88d70053ebb64905acccf7e3cf651ea40c9155130e351d56135c96ada96263311faeabc83d4cef1e72387302ea4a11edf338c3744093d9828e056351eefe11a", |
|
835 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Util\/CaseInsensitiveArrayTest.php": "671262198a48a16dc2ddb7ecf1c7fd309241db9c74c11072d86cbd2f56403973e4bb17ca5bc6c489bddf46cc391098dd6b666b134fded9430c211c2a3193fc58", |
|
836 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Util\/DefaultLoggerTest.php": "39942a071430588bf6c089f5d0c97596b3b46b5b7a2b45d900cc41670dcf4bcf0d34e37895e494f0c89242e52d11d8a62f419650407c26ed91b43ea18c816e9e", |
|
837 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Util\/ObjectTypesTest.php": "2d697994485e6c8f9084f9155a5a5b753261bcd2afcc9dfc5760daa5d4196b7c5baee49b264142a705ca7dd6c5d2cde227db3c1f860173aee6769299db95cd83", |
|
838 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Util\/RequestOptionsTest.php": "86d628c4b19e4b7d057cac471219603643b6405e83745535b6c5f743fe84d5cf918a273f9e8e22c5eded36cc20ce49453e90c0ae05a9ed437059ddc287ccb5f7", |
|
839 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Util\/SetTest.php": "c91cbf6d983f16e033eec154e56705b1d942243371df25d5cec7cb375a359faf29fec0c87fa5f3e4d7aad512d7e757361cf409e60d643fff7fa8fef72d9ff172", |
|
840 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/Util\/UtilTest.php": "10f13d306d3ac2211b67e759a6e1fbbbdcbc1cb791db4531ac799a8f84be67b3ab43cc85498b786b0630510324bf5039ac7ed39e2252f607f7937e802f9b578d", |
|
841 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/VerificationTest.php": "8ea7985bfc5075c0e5d3a8b0b703af578479e481d769a0e8659d4b0996314aae15de36cc7022e087c0625c5976255aae323f9ac141e9e4fef3939a23fda6d260", |
|
842 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/VerifyProfileTest.php": "c0986530c0ddd14e2227cbf9ceb0614aeec3c3b2dc37b5bce0de0d174ebd047f61fa28ba0787b4de1fd3efb5d77d5924e36ebf6fbba09711d0237f520365e8fc", |
|
843 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/api_resources\/WebhookTest.php": "7e06c31d714348c6c9a6cf14c4a21a1f593287fe61e41630a6d766f15cf2595dccb1cd92981578cc205f6c89839a07c7c845efca2b44521d0aa36c0be9e444f7", |
|
844 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/bootstrap.no_autoload.php": "cb002f7c8f77834b6414db6535f083bcd227ee6085363fa3cb0f66b55226680a45c8562fd8458249868465957b2aeae134b3379f8ee2ed22c96425475e9c0af1", |
|
845 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/bootstrap.php": "50e143ed68aceb91d3e119d5a31521e76bfe9876bd780c90ac83afb7ca4f32be48ff81c33c134109eafe1d22f35e0957a9a834966b8853df99dc1df04795adf4", |
|
846 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/data\/test.png": "6ad523f5b65487369d305613366b9f68dcdeee225291766e3b25faf45439ca069f614030c08ca54c714fdbf7a944fac489b1515a8bf9e0d3191e1bcbbfe6a9df", |
|
847 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/tests\/openapi\/README.md": "0c54fffd5b7a5f393358864ff9e3bd3793075d6060cc1336603b2455d60f16d160ffd47b52bca6834acf0d9713855b386f69580099a3dcc131e8d5d617975ff2", |
|
848 |
+ "providers\/Telnyx\/vendor\/telnyx\/telnyx-php\/update_certs.php": "6a7fd896832dbc4c039fc907c74f25fad01f26882809d1ed0bef2870ba7db5d5930311208e2864190209862a077e4397dabcc1760ef2ec7e29127868016fc0d8", |
|
849 |
+ "providers\/Twilio\/readme.txt": "879f75eaefe03b56788a884a5cb031533b33a94acd816b9e3e51a9cf0db826de700062955fc45d9561bd4c69f71178e2976f702e801fc06c3c076494c55c8bcb", |
|
850 |
+ "templates\/content\/index.php": "63d6e27dee39188b80cef2b095db84791e02af0526b80d41bd37845386714f9f82cc9dafaf97fa355b927ab9b74527199ec70604480e09feb10a2b076e313b5a", |
|
851 |
+ "templates\/index.php": "15ea019ef66fa303773941fa9ca673e472e9521b3f9fdb9052870e6f0596ca3939b247c8924ec0d67e0f3fee6e612e2c447a1297cf23cb5b6144e58a6197d65e", |
|
852 |
+ "templates\/navigation\/index.php": "2b7b13c516cd0199d5a01a5c85ce3d93f347495d50201238648ed8a516f0f6ac4680f73b7776e11968f231379db4bb5960d79cf2d053df354ae072fb7a08e54e", |
|
853 |
+ "templates\/settings\/admin.php": "8cacf367ddf1010227a355af99aad3589418b1cfc861c395b3ebdb71a9b1adafd061e10ea3cd5383e044437c5bddead6728fbb02b27248492c930e901edde1af", |
|
854 |
+ "templates\/settings\/personal.php": "28012052db35429ce5ca5ad2e6192e5bbebadb6069dfab2b7df7e4fde3f34411d40c8f3406d030c384b2629a76ea3a6e96d7571474b7040fda9f655d7f10b95d" |
|
855 |
+ }, |
|
856 |
+ "signature": "lixrXyMfrF+YGUnACyLlBDquK4fGiogddqhkWqvMvZR4yqDFfnVfEToqFI1vcfbro8\/kmxzixheiizBZ5O100SvO2GjJdH\/1q8lGJ3y9qNfLU+l9xWGmh4cJBuW7LNFxAWeQ\/kv3Q+rrMB3Qpf+G5CDyNgVkJDdJZndazrVGCwC44BWQKeU32x0Erf3azE2neb7R6OkIlrzryjszN7TkYO1KqHQIGgkBtUpK0hTRGXzToZS6\/jEPu6UJsfuveIlVpI6ASWRF+YU3PvBklKL57KuYamLKXlxaFaDoGPj4k0cJaYRmC\/9WqW2dO55EUy+iN9KK4M00SyLqomalOwWAiiAqFEC+QcUI2w390HYDI+8nO7hRNeyCxUOcxEY15PfJDUwOth2ErxCxvDytwy3IxazjKyAXdh2L74Q74DJ3rXi+mzBYpVBzY2addKNEa20UYuxy05DCKXl0bgioVW9how+eHINvr951lyIzSOKCcQDpSiMMyIe9l3R7XhccQBHKTnrERgK6ws0cvD20xVPwhdZe6N6Qshn87xsLew6aucLjHungihTY0xpGQebee\/0GkAews216u5hn2e7vU26Hl0+2\/RTaQJrmpn7R+wz8o8\/5h5oTkxtGa\/oTLNwWRcrBDKYN0Ur20Pvas\/1VuiNIG35uACPGWHAuYJpw\/vOkgS0=", |
|
857 |
+ "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-----" |
|
858 |
+} |
|
0 | 859 |
\ No newline at end of file |
1 | 860 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,4598 @@ |
1 |
+/** |
|
2 |
+ * @copyright 2021 Double Bastion LLC <www.doublebastion.com> |
|
3 |
+ * |
|
4 |
+ * @author Double Bastion LLC |
|
5 |
+ * |
|
6 |
+ * @license GNU AGPL version 3 or any later version |
|
7 |
+ * |
|
8 |
+ * This program is free software; you can redistribute it and/or |
|
9 |
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE |
|
10 |
+ * License as published by the Free Software Foundation; either |
|
11 |
+ * version 3 of the License, or any later version. |
|
12 |
+ * |
|
13 |
+ * This program is distributed in the hope that it will be useful, |
|
14 |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
15 |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
16 |
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details. |
|
17 |
+ * |
|
18 |
+ * You should have received a copy of the GNU Affero General Public |
|
19 |
+ * License along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
20 |
+ * |
|
21 |
+ */ |
|
22 |
+ |
|
23 |
+$(document).ready(function() { |
|
24 |
+ |
|
25 |
+ var userid = "<?php p($userId); ?>"; |
|
26 |
+ var parseddata = null; |
|
27 |
+ var sentparseddata = null; |
|
28 |
+ var groupedparsed = null; |
|
29 |
+ // Set the default number of messages per page |
|
30 |
+ var messagesperpage = 100; |
|
31 |
+ |
|
32 |
+ // Get the number of messages per page from the database |
|
33 |
+ var getNoPerPageUrl = OC.generateUrl("/apps/sms_relentless/user/getmessagesperpage"); |
|
34 |
+ |
|
35 |
+ $.ajax({ |
|
36 |
+ url: getNoPerPageUrl + '/' + userid, |
|
37 |
+ method: 'GET', |
|
38 |
+ success: function(mesperpagedb) { |
|
39 |
+ messagesperpage = parseInt(mesperpagedb); |
|
40 |
+ |
|
41 |
+ }, |
|
42 |
+ error: function(mesperpagedb) { |
|
43 |
+ showAlert("Error while getting the number of messages per page. You can check the Nextcloud log to find more details about this issue!"); |
|
44 |
+ } |
|
45 |
+ }); |
|
46 |
+ |
|
47 |
+ |
|
48 |
+ // List received messages |
|
49 |
+ $("#receivedsmstableshow").on("click", function(event) { |
|
50 |
+ |
|
51 |
+ $('#smstables').empty(); |
|
52 |
+ var getReceivedUrl = OC.generateUrl("/apps/sms_relentless/user/getreceivedtable"); |
|
53 |
+ |
|
54 |
+ $('#smstables').addClass('icon-loading'); |
|
55 |
+ |
|
56 |
+ $.ajax({ |
|
57 |
+ url: getReceivedUrl + '/' + userid, |
|
58 |
+ method: 'GET', |
|
59 |
+ contentType: 'application/json', |
|
60 |
+ success: function(datafdb) { |
|
61 |
+ |
|
62 |
+ var parseddata = datafdb.datarows; |
|
63 |
+ |
|
64 |
+ $('#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>"); |
|
65 |
+ $('#smstables').append("<table id='recSmsTable'></table>"); |
|
66 |
+ |
|
67 |
+ $('#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’s 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’s 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>"); |
|
68 |
+ $('#recSmsTable').append("<tr class='receivedrows' id='recheaderrow'><th id='selectalldv' class='selectsmsdv'><input type='checkbox' id='selectAllChckbx' class ='indivchckbx' title='Select all rows.' /></th><th title='The database ID of each message.'>ID</th><th>User ID</th><th>Message ID</th><th>Date</th><th>From</th><th>To</th><th>Received Message</th></tr>"); |
|
69 |
+ |
|
70 |
+ $('#recfiltersrow').hide(); |
|
71 |
+ |
|
72 |
+ if (datafdb.showdispnm == 1) { |
|
73 |
+ |
|
74 |
+ for (var i = 0; i < parseddata.length; i++) { |
|
75 |
+ |
|
76 |
+ if (parseddata[i].author_displayname) { |
|
77 |
+ var procrcmessage = "<span class='messageAuthorName'>"+ parseddata[i].author_displayname + ":</span>" + parseddata[i].message +"<div id='showMsgConv-"+ i +"' class='lstMsgConv'><img class='lstMsgConvImg' src='/apps/sms_relentless/img/reply.svg' title='Show all the messages exchanged between the current 2 phone numbers.'></div>"; |
|
78 |
+ } else { |
|
79 |
+ var procrcmessage = parseddata[i].message +"<div id='showMsgConv-"+ i +"' class='lstMsgConv'><img class='lstMsgConvImg' src='/apps/sms_relentless/img/reply.svg' title='Show all the messages exchanged between the current 2 phone numbers.'></div>"; |
|
80 |
+ } |
|
81 |
+ |
|
82 |
+ if (parseddata[i].internal_sender == 0) { |
|
83 |
+ var procrecFrom = "<div id='frmNmbr-"+ i +"'><div id='addDispName-"+ i +"' style='display:block;margin-right:5px;'><img class='addNameToPhNb' src='/apps/sms_relentless/img/user-grey.svg' title='Associate a Display Name with this phone number'></div>"+ parseddata[i].from +"<div id='showMsgFrom-"+ i +"' class='listToFromMsgs'><img class='lstMsgToFromImg' src='/apps/sms_relentless/img/list.svg' title='Show all the messages sent/received to/from this phone number, that I am allowed to see.'></div></div>"; |
|
84 |
+ } else { |
|
85 |
+ var procrecFrom = "<div id='frmNmbr-"+ i +"'>"+ parseddata[i].from +"<div id='showMsgFrom-"+ i +"' class='listToFromMsgs'><img class='lstMsgToFromImg' src = '/apps/sms_relentless/img/list.svg' title='Show all the messages sent/received to/from this phone number, that I am allowed to see.'></div></div>"; |
|
86 |
+ } |
|
87 |
+ |
|
88 |
+ var procrecTo = "<div id='toNmbr-"+ i +"'>"+ parseddata[i].to +"<div id='showMsgTo-"+ i +"' class='listToFromMsgs'><img class='lstMsgToFromImg' src = '/apps/sms_relentless/img/list.svg' title='Show all the messages sent/received to/from this phone number, that I am allowed to see.'></div></div>"; |
|
89 |
+ |
|
90 |
+ $("#recSmsTable").append("<tr id='singlerow_"+ i +"' class='receivedrowsbody'><td class='selectsmsdv'><input type='checkbox' id='selectspec_"+ i +"' class='indivchckbx' /></td><td class='dbidcolumnrec'>"+ parseddata[i].id +"</td><td class='useridcolrec'>"+ parseddata[i].user_id +"</td><td class='messageidcolrec'>"+ parseddata[i].message_id +"</td><td class='datecolrec'>"+ parseddata[i].date +"</td><td class='fromcolumnrec'>"+ procrecFrom +"</td><td class='tocolrec'>"+ procrecTo +"</td><td class='messagecolumnrec'>"+ procrcmessage +"</td></tr>"); |
|
91 |
+ } |
|
92 |
+ |
|
93 |
+ } else { |
|
94 |
+ |
|
95 |
+ for (var i = 0; i < parseddata.length; i++) { |
|
96 |
+ |
|
97 |
+ var procrcmessage = parseddata[i].message +"<div id='showMsgConv-"+ i +"' class='lstMsgConv'><img class='lstMsgConvImg' src='/apps/sms_relentless/img/reply.svg' title='Show all the messages exchanged between the current 2 phone numbers.'></div>"; |
|
98 |
+ |
|
99 |
+ if (parseddata[i].internal_sender == 0) { |
|
100 |
+ var procrecFrom = "<div id='frmNmbr-"+ i +"'><div id='addDispName-"+ i +"' style='display:block;margin-right:5px;'><img class='addNameToPhNb' src='/apps/sms_relentless/img/user-grey.svg' title='Associate a Display Name with this phone number'></div>"+ parseddata[i].from +"<div id='showMsgFrom-"+ i +"' class='listToFromMsgs'><img class='lstMsgToFromImg' src='/apps/sms_relentless/img/list.svg' title='Show all the messages sent/received to/from this phone number, that I am allowed to see.'></div></div>"; |
|
101 |
+ } else { |
|
102 |
+ var procrecFrom = "<div id='frmNmbr-"+ i +"'>"+ parseddata[i].from +"<div id='showMsgFrom-"+ i +"' class='listToFromMsgs'><img class='lstMsgToFromImg' src = '/apps/sms_relentless/img/list.svg' title='Show all the messages sent/received to/from this phone number, that I am allowed to see.'></div></div>"; |
|
103 |
+ } |
|
104 |
+ |
|
105 |
+ var procrecTo = "<div id='toNmbr-"+ i +"'>"+ parseddata[i].to +"<div id='showMsgTo-"+ i +"' class='listToFromMsgs'><img class='lstMsgToFromImg' src = '/apps/sms_relentless/img/list.svg' title='Show all the messages sent/received to/from this phone number, that I am allowed to see.'></div></div>"; |
|
106 |
+ |
|
107 |
+ $("#recSmsTable").append("<tr id='singlerow_"+ i +"' class='receivedrowsbody'><td class='selectsmsdv'><input type='checkbox' id='selectspec_"+ i +"' class='indivchckbx' /></td><td class='dbidcolumnrec'>"+ parseddata[i].id +"</td><td class='useridcolrec'>"+ parseddata[i].user_id +"</td><td class='messageidcolrec'>"+ parseddata[i].message_id +"</td><td class='datecolrec'>"+ parseddata[i].date +"</td><td class='fromcolumnrec'>"+ procrecFrom +"</td><td class='tocolrec'>"+ procrecTo +"</td><td class='messagecolumnrec'>"+ procrcmessage +"</td></tr>"); |
|
108 |
+ } |
|
109 |
+ } |
|
110 |
+ |
|
111 |
+ $('#smstables').append("<div id='totalrecmessages'>Total displayed messages: " + parseddata.length + "</div>"); |
|
112 |
+ |
|
113 |
+ $('#smstables').removeClass('icon-loading'); |
|
114 |
+ $('#recarrow').removeClass('arrowUpCl'); |
|
115 |
+ $('#recarrow').addClass('arrowDownCl'); |
|
116 |
+ |
|
117 |
+ |
|
118 |
+ // Show the pop-up window that lists all the messages exchanged between the current 2 phone numbers |
|
119 |
+ function showRecMsgPerConv(phNumberFrom, phNumberTo) { |
|
120 |
+ |
|
121 |
+ let allfrmtomsg = "<div id='listAllMsgsConv'>"; |
|
122 |
+ allfrmtomsg += "<div id='draglstMsgmWindow'><img src='/apps/sms_relentless/img/dots.svg'></div>"; |
|
123 |
+ allfrmtomsg += "<a id='closeFrmMsgWindow' title='Close this window'></a>"; |
|
124 |
+ allfrmtomsg += "<div class='showByNmbrTitle'>Messages exchanged between <span style='color:#04957b'>"+ phNumberFrom +"</span> and <span style='color:#04957b'>"+ phNumberTo +"</span></div>"; |
|
125 |
+ allfrmtomsg += "<div id='frmMsgLstWrap'>"; |
|
126 |
+ allfrmtomsg += "<table id='frmMsgLstTbl'>"; |
|
127 |
+ allfrmtomsg += "<tr class='groupedrowsbody'><td><div id='grpdbynamelst' class='groupedLstNamespn'></div></td><td><div id='loadMoreMsgs' title='Click to load older messages.'>Load more messages</div><div id='loadMoreMsgsusr' title='Click to load older messages.'>Load more messages</div><div id='msgListRowCell' class='groupedLstMsgspn'></div><div id='arrowupWrap'><div id='upArrowSmall' title='Scroll to the top'></div></div></td></tr>"; |
|
128 |
+ allfrmtomsg += "</table></div>"; |
|
129 |
+ allfrmtomsg += "<div id='sendMsgReply'><table id='sendMsgConv'><tr><td><div id='fromPhoneNmbrConv'>From: <select id='selectFromNbConv'></select></div><div id='toPhoneNmbrConv'>To: <span id='toNmbrConv' style='color:#04957b'>"+ phNumberFrom +"</span></div></td></tr>"; |
|
130 |
+ allfrmtomsg += "<tr><td><textarea id='sendMsgConvText' placeholder='Enter a message here, then press Send SMS'></textarea></td></tr></table>"; |
|
131 |
+ allfrmtomsg += "<div id='sendMsgConvBtn'>Send SMS</div></div>"; |
|
132 |
+ allfrmtomsg += "<div style='display:block;width:100%;height:14px;'><img id='expandWindowRpl' src='/apps/sms_relentless/img/arrowDown.svg' title='Expand to send a reply'></div>"; |
|
133 |
+ allfrmtomsg += "<div id='draglstMsgmWindowsc'><img src='/apps/sms_relentless/img/dots.svg' style='padding:4px;vertical-align:top;'></div>"; |
|
134 |
+ allfrmtomsg += "</div>"; |
|
135 |
+ |
|
136 |
+ $("#content").append("<div id='recTblOverlay'></div>"); |
|
137 |
+ $("#content").append(allfrmtomsg); |
|
138 |
+ |
|
139 |
+ let topDist = parseInt((window.innerHeight / 2).toFixed(2) - 340) +"px"; |
|
140 |
+ let leftDist = parseInt((window.innerWidth / 2).toFixed(2) - 300) +"px"; |
|
141 |
+ $("#listAllMsgsConv").css({ "top" : topDist, "left" : leftDist }); |
|
142 |
+ |
|
143 |
+ $("#closeFrmMsgWindow").click(function() { $("#listAllMsgsConv").remove(); $("#recTblOverlay").remove(); }); |
|
144 |
+ $("#recTblOverlay").click(function() { $("#listAllMsgsConv").remove(); $("#recTblOverlay").remove(); }); |
|
145 |
+ |
|
146 |
+ // Expand the window when clicking on the arrow, to be able to send a reply message |
|
147 |
+ $("#expandWindowRpl").click(function() { |
|
148 |
+ |
|
149 |
+ if ($(this).attr('src') == '/apps/sms_relentless/img/arrowDown.svg') { |
|
150 |
+ $("#sendMsgReply").css("display", "block"); |
|
151 |
+ $("#listAllMsgsConv").css("height", "618px"); |
|
152 |
+ $(this).attr('src', '/apps/sms_relentless/img/arrowUp.svg'); |
|
153 |
+ $(this).attr('title', 'Collapse'); |
|
154 |
+ } else { |
|
155 |
+ $("#sendMsgReply").css("display", "none"); |
|
156 |
+ $("#listAllMsgsConv").css("height", "490px"); |
|
157 |
+ $(this).attr('src', '/apps/sms_relentless/img/arrowDown.svg'); |
|
158 |
+ $(this).attr('title', 'Expand to send a reply'); |
|
159 |
+ } |
|
160 |
+ }); |
|
161 |
+ |
|
162 |
+ // Send a message from the 'conversation' window |
|
163 |
+ $("#sendMsgConvBtn").click(function() { |
|
164 |
+ |
|
165 |
+ $("#sendMsgConv,#sendMsgConvBtn").addClass('icon-loading'); |
|
166 |
+ var msgToSend = $("#sendMsgConvText").val(); |
|
167 |
+ var selectedid = $("#selectFromNbConv").val(); |
|
168 |
+ var toNumber = $("#toNmbrConv").text(); |
|
169 |
+ var receiversNumbers = [toNumber]; |
|
170 |
+ |
|
171 |
+ if (selectedid != '') { |
|
172 |
+ |
|
173 |
+ var sendersplit = selectedid.split(":"); |
|
174 |
+ var providercap = sendersplit[0]; |
|
175 |
+ var provsec = sendersplit[1]; |
|
176 |
+ |
|
177 |
+ if (/[a-zA-Z]/.test(provsec)) { |
|
178 |
+ var alphanumcheck = true; |
|
179 |
+ } else { var alphanumcheck = false; } |
|
180 |
+ |
|
181 |
+ if (providercap == 'Tx' && alphanumcheck == false) { |
|
182 |
+ var senderproc = selectedid.replace(/[^0-9]/g, ""); |
|
183 |
+ var selectedsender = "+" + senderproc; |
|
184 |
+ var providerUsed = "telnyx"; |
|
185 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstel"); |
|
186 |
+ } else if (providercap == 'Pl' && alphanumcheck == false) { |
|
187 |
+ var selectedsender = selectedid.replace(/[^0-9]/g, ""); |
|
188 |
+ var providerUsed = "plivo"; |
|
189 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsnex"); |
|
190 |
+ } else if (providercap == 'Tw' && alphanumcheck == false) { |
|
191 |
+ var senderproc = selectedid.replace(/[^0-9]/g, ""); |
|
192 |
+ var selectedsender = "+" + senderproc; |
|
193 |
+ var providerUsed = "twilio"; |
|
194 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstwil"); |
|
195 |
+ } else if (providercap == 'Fl' && alphanumcheck == false) { |
|
196 |
+ var senderproc = selectedid.replace(/[^0-9]/g, ""); |
|
197 |
+ var selectedsender = "+" + senderproc; |
|
198 |
+ var providerUsed = "flowroute"; |
|
199 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsflow"); |
|
200 |
+ } else if (providercap == 'Tx' && alphanumcheck == true) { |
|
201 |
+ var selectedsender = provsec; |
|
202 |
+ var providerUsed = "telnyx"; |
|
203 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstel"); |
|
204 |
+ } else if (providercap == 'Pl' && alphanumcheck == true) { |
|
205 |
+ var selectedsender = provsec; |
|
206 |
+ var providerUsed = "plivo"; |
|
207 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsnex"); |
|
208 |
+ } else if (providercap == 'Tw' && alphanumcheck == true) { |
|
209 |
+ var selectedsender = provsec; |
|
210 |
+ var providerUsed = "twilio"; |
|
211 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstwil"); |
|
212 |
+ } else if (providercap == 'Fl' && alphanumcheck == true) { |
|
213 |
+ var selectedsender = provsec; |
|
214 |
+ var providerUsed = "flowroute"; |
|
215 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsflow"); |
|
216 |
+ } |
|
217 |
+ |
|
218 |
+ var uploadedtomms = []; |
|
219 |
+ |
|
220 |
+ if (msgToSend != '') { |
|
221 |
+ |
|
222 |
+ $.ajax({ |
|
223 |
+ url: relbaseUrl + '/' + userid, |
|
224 |
+ type: "POST", |
|
225 |
+ data: { |
|
226 |
+ receiversPhoneNbs: receiversNumbers, |
|
227 |
+ fromsender: selectedsender, |
|
228 |
+ waitinterval: 1000, |
|
229 |
+ sentsmstext: msgToSend, |
|
230 |
+ ismms: 0, |
|
231 |
+ mmsfiles: uploadedtomms |
|
232 |
+ }, |
|
233 |
+ success: function(displayname) { |
|
234 |
+ |
|
235 |
+ var tzdate = new Date(); |
|
236 |
+ var presDatest = new Date(tzdate.getTime() - (tzdate.getTimezoneOffset() * 60000)).toJSON(); |
|
237 |
+ var presDatedb = presDatest.split(".")[0]; |
|
238 |
+ var presDatesc = presDatedb.split("T"); |
|
239 |
+ var presDate = presDatesc[0] +" "+ presDatesc[1]; |
|
240 |
+ var sentMessageStatus = ''; |
|
241 |
+ |
|
242 |
+ if (displayname) { |
|
243 |
+ var msgToSendproc = "<span class='msgAuthorNameGrp'>"+ displayname + ":</span>" + msgToSend; |
|
244 |
+ } else { var msgToSendproc = ''; } |
|
245 |
+ |
|
246 |
+ $("#msgListRowCell").append("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ selectedsender +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ receiversNumbers[0] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ msgToSendproc +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ presDate +"</div><div class='sentMssgStatus'>"+ sentMessageStatus +"</div></div>"); |
|
247 |
+ |
|
248 |
+ // Scroll down to the bottom of the window |
|
249 |
+ $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); |
|
250 |
+ |
|
251 |
+ $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); |
|
252 |
+ }, |
|
253 |
+ error: function() { |
|
254 |
+ showAlert("Error while sending the message. You can check your Nextcloud log to find out more about this issue."); |
|
255 |
+ $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); |
|
256 |
+ } |
|
257 |
+ }); |
|
258 |
+ } else { |
|
259 |
+ showAlert("Please enter a message in the text box!"); |
|
260 |
+ $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); |
|
261 |
+ } |
|
262 |
+ } else { |
|
263 |
+ showAlert("Please choose a Sender ID from the 'From' drop-down list!"); |
|
264 |
+ $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); |
|
265 |
+ } |
|
266 |
+ |
|
267 |
+ }); |
|
268 |
+ |
|
269 |
+ |
|
270 |
+ // Make the window draggable |
|
271 |
+ function makeMgrWndDraggable(e) { |
|
272 |
+ |
|
273 |
+ window.pmdragging = {}; |
|
274 |
+ pmdragging.pageX0 = e.pageX; |
|
275 |
+ pmdragging.pageY0 = e.pageY; |
|
276 |
+ pmdragging.elem = $("#listAllMsgsConv"); |
|
277 |
+ pmdragging.offset0 = $("#listAllMsgsConv").offset(); |
|
278 |
+ |
|
279 |
+ function handle_dragging(e) { |
|
280 |
+ let left = pmdragging.offset0.left + (e.pageX - pmdragging.pageX0); |
|
281 |
+ let top = pmdragging.offset0.top + (e.pageY - pmdragging.pageY0); |
|
282 |
+ $(pmdragging.elem).offset({top: top, left: left}); |
|
283 |
+ } |
|
284 |
+ |
|
285 |
+ function handle_mouseup(e) { |
|
286 |
+ $('body').off('mousemove', handle_dragging).off('mouseup', handle_mouseup); |
|
287 |
+ } |
|
288 |
+ |
|
289 |
+ $('body').on('mouseup', handle_mouseup).on('mousemove', handle_dragging); |
|
290 |
+ } |
|
291 |
+ $("#draglstMsgmWindow").mousedown(makeMgrWndDraggable); |
|
292 |
+ $("#draglstMsgmWindowsc").mousedown(makeMgrWndDraggable); |
|
293 |
+ |
|
294 |
+ |
|
295 |
+ // Append the available phone numbers to the From drop-down list |
|
296 |
+ var availPhoneNmbrs = []; |
|
297 |
+ $("#currentsmsnmbrs .optselectsmsnb").each(function() { |
|
298 |
+ var crtphnmbr = $(this).attr("value"); |
|
299 |
+ if (crtphnmbr != "") { availPhoneNmbrs.push(crtphnmbr); } |
|
300 |
+ }); |
|
301 |
+ |
|
302 |
+ if (availPhoneNmbrs.length > 0) { |
|
303 |
+ var avphopt = ""; |
|
304 |
+ for (let d = 0; d < availPhoneNmbrs.length; d++) { |
|
305 |
+ if (availPhoneNmbrs[d].indexOf(phNumberTo) === -1) { |
|
306 |
+ avphopt += "<option value='"+ availPhoneNmbrs[d] +"'>"+ availPhoneNmbrs[d] +"</option>"; |
|
307 |
+ } else { |
|
308 |
+ avphopt += "<option value='"+ availPhoneNmbrs[d] +"' selected>"+ availPhoneNmbrs[d] +"</option>"; |
|
309 |
+ } |
|
310 |
+ } |
|
311 |
+ $("#selectFromNbConv").append(avphopt); |
|
312 |
+ |
|
313 |
+ } else { $("#selectFromNbConv").append("<option value='' selected>No IDs</option>"); } |
|
314 |
+ |
|
315 |
+ |
|
316 |
+ // Get the sent/received messages for the current phone number, from the database |
|
317 |
+ let getGrpConvUrl = OC.generateUrl("/apps/sms_relentless/user/getgroupedforreply"); |
|
318 |
+ |
|
319 |
+ $('#listAllMsgsConv').addClass('icon-loading'); |
|
320 |
+ let totalPhNmbrs = 0; |
|
321 |
+ |
|
322 |
+ $.ajax({ |
|
323 |
+ method: 'POST', |
|
324 |
+ url: getGrpConvUrl + '/' + userid, |
|
325 |
+ contentType: 'application/json', |
|
326 |
+ data: JSON.stringify({ phoneNmbrFrom: phNumberFrom, phoneNmbrTo: phNumberTo }), |
|
327 |
+ success: function(groupedperconv) { |
|
328 |
+ |
|
329 |
+ $('#listAllMsgsConv').removeClass('icon-loading'); |
|
330 |
+ |
|
331 |
+ let fromtoNmbrsData = []; |
|
332 |
+ |
|
333 |
+ for (let i = 0; i < groupedperconv.length; i++) { |
|
334 |
+ |
|
335 |
+ if (groupedperconv[i].author_displayname) { |
|
336 |
+ var authordnm = groupedperconv[i].author_displayname; |
|
337 |
+ } else { |
|
338 |
+ var authordnm = ''; |
|
339 |
+ } |
|
340 |
+ |
|
341 |
+ var sentfromnmbrarr = groupedperconv[i].from.split("+"); |
|
342 |
+ if (sentfromnmbrarr[1]) { |
|
343 |
+ var groupednbfrom = "+"+ sentfromnmbrarr[1]; |
|
344 |
+ } else { |
|
345 |
+ var groupednbfrom = sentfromnmbrarr[0]; |
|
346 |
+ } |
|
347 |
+ |
|
348 |
+ var modmessagerec = ''; |
|
349 |
+ if (groupedperconv[i].author_displayname) { |
|
350 |
+ modmessagerec = "<span class='msgAuthorNameGrp'>"+ groupedperconv[i].author_displayname + ":</span>" + groupedperconv[i].message; |
|
351 |
+ } else { |
|
352 |
+ modmessagerec = groupedperconv[i].message; |
|
353 |
+ } |
|
354 |
+ |
|
355 |
+ if (groupedperconv[i].to.indexOf(": ") > -1) { |
|
356 |
+ var groupednmbrtopre = groupedperconv[i].to.split(": "); |
|
357 |
+ var groupednmbrto = groupednmbrtopre[1]; |
|
358 |
+ } else { |
|
359 |
+ var groupednmbrto = groupedperconv[i].to; |
|
360 |
+ } |
|
361 |
+ |
|
362 |
+ fromtoNmbrsData.push({ |
|
363 |
+ 'author_displayname': authordnm, |
|
364 |
+ 'from': groupednbfrom, |
|
365 |
+ 'to': groupednmbrto, |
|
366 |
+ 'message': modmessagerec, |
|
367 |
+ 'date': groupedperconv[i].date, |
|
368 |
+ 'status': groupedperconv[i].deliveryreceipt, |
|
369 |
+ 'table': groupedperconv[i].table |
|
370 |
+ }); |
|
371 |
+ } |
|
372 |
+ |
|
373 |
+ |
|
374 |
+ // Remove the duplicates |
|
375 |
+ let noDupMsgData = []; |
|
376 |
+ $.each(fromtoNmbrsData, function(i, e) { |
|
377 |
+ let matchingData = $.grep(noDupMsgData, function(item) { |
|
378 |
+ return item.from == e.from && item.to == e.to && item.message == e.message && item.table == 'received' && e.table == 'sent'; |
|
379 |
+ }); |
|
380 |
+ if (matchingData.length === 0) { |
|
381 |
+ noDupMsgData.push(e); |
|
382 |
+ } |
|
383 |
+ }); |
|
384 |
+ |
|
385 |
+ let messagesPerNmbr = {}; |
|
386 |
+ let msgsNamesPerNmbr = {}; |
|
387 |
+ let msgsNmbrsNames = {}; |
|
388 |
+ |
|
389 |
+ let displayNamesarr = []; |
|
390 |
+ let convData = []; |
|
391 |
+ |
|
392 |
+ for (let n = 0; n < noDupMsgData.length; n++) { |
|
393 |
+ |
|
394 |
+ if (noDupMsgData[n]['from'] == phNumberFrom && noDupMsgData[n]['table'] == 'sent') { |
|
395 |
+ |
|
396 |
+ convData.push({ |
|
397 |
+ 'author_displayname': noDupMsgData[n]['author_displayname'], |
|
398 |
+ 'message': noDupMsgData[n]['message'], |
|
399 |
+ 'from': noDupMsgData[n]['from'], |
|
400 |
+ 'to': noDupMsgData[n]['to'], |
|
401 |
+ 'date': noDupMsgData[n]['date'], |
|
402 |
+ 'direction': 'sent_from', |
|
403 |
+ 'status': noDupMsgData[n]['status'], |
|
404 |
+ 'table': noDupMsgData[n]['table'] |
|
405 |
+ }); |
|
406 |
+ |
|
407 |
+ } else if (noDupMsgData[n]['to'] == phNumberFrom && noDupMsgData[n]['table'] == 'sent') { |
|
408 |
+ |
|
409 |
+ convData.push({ |
|
410 |
+ 'author_displayname': noDupMsgData[n]['author_displayname'], |
|
411 |
+ 'message': noDupMsgData[n]['message'], |
|
412 |
+ 'from': noDupMsgData[n]['from'], |
|
413 |
+ 'to': noDupMsgData[n]['to'], |
|
414 |
+ 'date': noDupMsgData[n]['date'], |
|
415 |
+ 'direction': 'sent_to', |
|
416 |
+ 'status': noDupMsgData[n]['status'], |
|
417 |
+ 'table': noDupMsgData[n]['table'] |
|
418 |
+ }); |
|
419 |
+ |
|
420 |
+ |
|
421 |
+ } else if (noDupMsgData[n]['from'] == phNumberFrom && noDupMsgData[n]['table'] == 'received') { |
|
422 |
+ |
|
423 |
+ convData.push({ |
|
424 |
+ 'author_displayname': noDupMsgData[n]['author_displayname'], |
|
425 |
+ 'message': noDupMsgData[n]['message'], |
|
426 |
+ 'from': noDupMsgData[n]['from'], |
|
427 |
+ 'to': noDupMsgData[n]['to'], |
|
428 |
+ 'date': noDupMsgData[n]['date'], |
|
429 |
+ 'direction': 'received_from', |
|
430 |
+ 'status': noDupMsgData[n]['status'], |
|
431 |
+ 'table': noDupMsgData[n]['table'] |
|
432 |
+ }); |
|
433 |
+ |
|
434 |
+ } else if (noDupMsgData[n]['to'] == phNumberFrom && noDupMsgData[n]['table'] == 'received') { |
|
435 |
+ |
|
436 |
+ convData.push({ |
|
437 |
+ 'author_displayname': noDupMsgData[n]['author_displayname'], |
|
438 |
+ 'message': noDupMsgData[n]['message'], |
|
439 |
+ 'from': noDupMsgData[n]['from'], |
|
440 |
+ 'to': noDupMsgData[n]['to'], |
|
441 |
+ 'date': noDupMsgData[n]['date'], |
|
442 |
+ 'direction': 'received_on', |
|
443 |
+ 'status': noDupMsgData[n]['status'], |
|
444 |
+ 'table': noDupMsgData[n]['table'] |
|
445 |
+ }); |
|
446 |
+ } |
|
447 |
+ } |
|
448 |
+ |
|
449 |
+ // Sort messages by date |
|
450 |
+ convData.sort(function(a, b) { |
|
451 |
+ let c = new Date(a.date); |
|
452 |
+ let d = new Date(b.date); |
|
453 |
+ return c-d; |
|
454 |
+ }); |
|
455 |
+ convData.reverse(); |
|
456 |
+ |
|
457 |
+ // Collect the display names of the users that sent messages from the current number |
|
458 |
+ let selectedNames = []; |
|
459 |
+ let displayNames = ''; |
|
460 |
+ for (let v = 0; v < convData.length; v++) { |
|
461 |
+ if (selectedNames.indexOf(convData[v]['author_displayname']) == -1) { |
|
462 |
+ selectedNames.push(convData[v]['author_displayname']); |
|
463 |
+ displayNames += "<div id='diplNm_"+ phNumberFrom +"_"+ v +"' class='dispNameList' name='"+ convData[v]['author_displayname'] +"'>"+ convData[v]['author_displayname'] +"</div>"; |
|
464 |
+ } |
|
465 |
+ } |
|
466 |
+ displayNames += "<div id='diplNmAllMsg' class='dispNameListAll' title='Show all the messages for this number.'>"+ phNumberFrom +"</div>"; |
|
467 |
+ |
|
468 |
+ // Store the display names for the current number, to be able to see them later |
|
469 |
+ let ctPhNumber = phNumberFrom; |
|
470 |
+ msgsNamesPerNmbr[ctPhNumber] = displayNames; |
|
471 |
+ |
|
472 |
+ // Store the messages sent by each user, to be able to see them later when clicking on the user's name |
|
473 |
+ for (let h = 0; h < selectedNames.length; h++) { |
|
474 |
+ |
|
475 |
+ let rowMessageArrpn = []; |
|
476 |
+ for (let b = 0; b < convData.length; b++) { |
|
477 |
+ |
|
478 |
+ if (selectedNames[h] == convData[b]['author_displayname']) { |
|
479 |
+ |
|
480 |
+ if (convData[b]['direction'] == 'sent_from') { |
|
481 |
+ if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1) { |
|
482 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
483 |
+ } else { |
|
484 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
485 |
+ } |
|
486 |
+ rowMessageArrpn.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
487 |
+ } else if (convData[b]['direction'] == 'sent_to') { |
|
488 |
+ if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1) { |
|
489 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
490 |
+ } else { |
|
491 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
492 |
+ } |
|
493 |
+ rowMessageArrpn.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
494 |
+ } else if (convData[b]['direction'] == 'received_from') { |
|
495 |
+ rowMessageArrpn.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div></div>"); |
|
496 |
+ } else if (convData[b]['direction'] == 'received_on') { |
|
497 |
+ rowMessageArrpn.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div></div>"); |
|
498 |
+ } |
|
499 |
+ } |
|
500 |
+ } |
|
501 |
+ let crtNmber = phNumberFrom; |
|
502 |
+ let crtName = selectedNames[h]; |
|
503 |
+ msgsNmbrsNames[crtNmber] = msgsNmbrsNames[crtNmber] || {}; |
|
504 |
+ msgsNmbrsNames[crtNmber][crtName] = rowMessageArrpn; |
|
505 |
+ } |
|
506 |
+ |
|
507 |
+ // The number of messages to be loaded by default |
|
508 |
+ let nmbTblDefault = 50; |
|
509 |
+ |
|
510 |
+ // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button |
|
511 |
+ if (convData.length > nmbTblDefault) { |
|
512 |
+ $("#loadMoreMsgs").css("display", "block"); |
|
513 |
+ var nmbToBeLoaded = nmbTblDefault; |
|
514 |
+ } else { var nmbToBeLoaded = convData.length; } |
|
515 |
+ |
|
516 |
+ let rowMessageArr = []; |
|
517 |
+ for (var m = nmbToBeLoaded - 1; m >= 0; m--) { |
|
518 |
+ |
|
519 |
+ if (convData[m]['direction'] == 'sent_from') { |
|
520 |
+ |
|
521 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
522 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
523 |
+ } else { |
|
524 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
525 |
+ } |
|
526 |
+ rowMessageArr.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
527 |
+ |
|
528 |
+ } else if (convData[m]['direction'] == 'sent_to') { |
|
529 |
+ |
|
530 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
531 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
532 |
+ } else { |
|
533 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
534 |
+ } |
|
535 |
+ rowMessageArr.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
536 |
+ |
|
537 |
+ } else if (convData[m]['direction'] == 'received_from') { |
|
538 |
+ |
|
539 |
+ rowMessageArr.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
540 |
+ |
|
541 |
+ } else if (convData[m]['direction'] == 'received_on') { |
|
542 |
+ |
|
543 |
+ rowMessageArr.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
544 |
+ } |
|
545 |
+ } |
|
546 |
+ |
|
547 |
+ let convDataPerNmbr = rowMessageArr.join(""); |
|
548 |
+ |
|
549 |
+ $("#grpdbynamelst").append(displayNames); |
|
550 |
+ $("#msgListRowCell").append(convDataPerNmbr); |
|
551 |
+ |
|
552 |
+ // Store the messages for the current number, to be able to see them later, when clicking on the number |
|
553 |
+ let rowMessageArrcpt = []; |
|
554 |
+ for (let m = 0; m < convData.length; m++) { |
|
555 |
+ |
|
556 |
+ if (convData[m]['direction'] == 'sent_from') { |
|
557 |
+ |
|
558 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
559 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
560 |
+ } else { |
|
561 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
562 |
+ } |
|
563 |
+ rowMessageArrcpt.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
564 |
+ |
|
565 |
+ } else if (convData[m]['direction'] == 'sent_to') { |
|
566 |
+ |
|
567 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
568 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
569 |
+ } else { |
|
570 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
571 |
+ } |
|
572 |
+ rowMessageArrcpt.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
573 |
+ |
|
574 |
+ } else if (convData[m]['direction'] == 'received_from') { |
|
575 |
+ |
|
576 |
+ rowMessageArrcpt.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
577 |
+ |
|
578 |
+ } else if (convData[m]['direction'] == 'received_on') { |
|
579 |
+ |
|
580 |
+ rowMessageArrcpt.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
581 |
+ } |
|
582 |
+ } |
|
583 |
+ |
|
584 |
+ messagesPerNmbr[phNumberFrom] = rowMessageArrcpt; |
|
585 |
+ |
|
586 |
+ // Scroll down to the bottom of the window |
|
587 |
+ $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); |
|
588 |
+ |
|
589 |
+ // Load more messages |
|
590 |
+ let clickNmb = 0; |
|
591 |
+ $("#loadMoreMsgs").click(function() { |
|
592 |
+ |
|
593 |
+ clickNmb++; |
|
594 |
+ |
|
595 |
+ var crefnb = (clickNmb + 1) * nmbToBeLoaded; |
|
596 |
+ |
|
597 |
+ if (crefnb > convData.length) { |
|
598 |
+ var nmbmsg = convData.length - 1; |
|
599 |
+ $("#loadMoreMsgs").css("display", "none"); |
|
600 |
+ } else { |
|
601 |
+ var nmbmsg = crefnb - 1; |
|
602 |
+ } |
|
603 |
+ |
|
604 |
+ var rowMessageArrAdd = []; |
|
605 |
+ |
|
606 |
+ for (let m = nmbmsg; m >= clickNmb * nmbToBeLoaded; m--) { |
|
607 |
+ |
|
608 |
+ if (convData[m]['direction'] == 'sent_from') { |
|
609 |
+ |
|
610 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
611 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
612 |
+ } else { |
|
613 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
614 |
+ } |
|
615 |
+ rowMessageArrAdd.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
616 |
+ |
|
617 |
+ } else if (convData[m]['direction'] == 'sent_to') { |
|
618 |
+ |
|
619 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
620 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
621 |
+ } else { |
|
622 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
623 |
+ } |
|
624 |
+ rowMessageArrAdd.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
625 |
+ |
|
626 |
+ } else if (convData[m]['direction'] == 'received_from') { |
|
627 |
+ |
|
628 |
+ rowMessageArrAdd.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
629 |
+ |
|
630 |
+ } else if (convData[m]['direction'] == 'received_on') { |
|
631 |
+ |
|
632 |
+ rowMessageArrAdd.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
633 |
+ } |
|
634 |
+ } |
|
635 |
+ |
|
636 |
+ let convDataPerNmbrad = rowMessageArrAdd.join(""); |
|
637 |
+ |
|
638 |
+ let scrlheight = $("#msgListRowCell").height(); |
|
639 |
+ $("#msgListRowCell").prepend(convDataPerNmbrad); |
|
640 |
+ |
|
641 |
+ $("#frmMsgLstWrap").scrollTop($("#msgListRowCell").height() - scrlheight); |
|
642 |
+ }); |
|
643 |
+ |
|
644 |
+ |
|
645 |
+ // Show the messages sent by each user whose name is clicked |
|
646 |
+ $('[id*="diplNm_"]').click(function() { |
|
647 |
+ |
|
648 |
+ let crntNmbr = $(this).attr("id").split("_")[1]; |
|
649 |
+ let crntDisName = $(this).attr("name"); |
|
650 |
+ $("#loadMoreMsgs").css("display", "none"); |
|
651 |
+ |
|
652 |
+ let convDataprn = []; |
|
653 |
+ $.each(msgsNmbrsNames[crntNmbr][crntDisName], function(index, item) { |
|
654 |
+ convDataprn.push(item); |
|
655 |
+ }); |
|
656 |
+ |
|
657 |
+ // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button |
|
658 |
+ if (convDataprn.length > nmbTblDefault) { |
|
659 |
+ $("#loadMoreMsgsusr").css("display", "block"); |
|
660 |
+ let nmbToBeLoaded = nmbTblDefault; |
|
661 |
+ } else { |
|
662 |
+ $("#loadMoreMsgsusr").css("display", "none"); |
|
663 |
+ let nmbToBeLoaded = convDataprn.length; |
|
664 |
+ } |
|
665 |
+ |
|
666 |
+ let rowMessageArrprnst = []; |
|
667 |
+ |
|
668 |
+ for (let n = nmbToBeLoaded - 1; n >= 0; n--) { |
|
669 |
+ rowMessageArrprnst.push(convDataprn[n]); |
|
670 |
+ } |
|
671 |
+ |
|
672 |
+ let convDataPerNmbrprnst = rowMessageArrprnst.join(""); |
|
673 |
+ |
|
674 |
+ $("#msgListRowCell").empty(); |
|
675 |
+ $("#msgListRowCell").append(convDataPerNmbrprnst); |
|
676 |
+ |
|
677 |
+ // Scroll down to the bottom of the window |
|
678 |
+ $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); |
|
679 |
+ |
|
680 |
+ // Load more messages |
|
681 |
+ let clckNb = 0; |
|
682 |
+ $("#loadMoreMsgsusr").unbind("click"); |
|
683 |
+ $("#loadMoreMsgsusr").click(function() { |
|
684 |
+ |
|
685 |
+ clckNb++; |
|
686 |
+ var crefnb = (clckNb + 1) * nmbToBeLoaded; |
|
687 |
+ |
|
688 |
+ $("#loadMoreMsgs").css("display", "none"); |
|
689 |
+ |
|
690 |
+ if (crefnb > convDataprn.length) { |
|
691 |
+ var nmbmsg = convDataprn.length - 1; |
|
692 |
+ $("#loadMoreMsgsusr").css("display", "none"); |
|
693 |
+ } else { |
|
694 |
+ var nmbmsg = crefnb - 1; |
|
695 |
+ $("#loadMoreMsgsusr").css("display", "block"); |
|
696 |
+ } |
|
697 |
+ |
|
698 |
+ var rowMessageArrAddst = []; |
|
699 |
+ |
|
700 |
+ for (var q = nmbmsg; q >= clckNb * nmbToBeLoaded; q--) { |
|
701 |
+ |
|
702 |
+ rowMessageArrAddst.push(convDataprn[q]); |
|
703 |
+ } |
|
704 |
+ |
|
705 |
+ var convDataPerNmbradst = rowMessageArrAddst.join(""); |
|
706 |
+ |
|
707 |
+ var scrlheight = $("#msgListRowCell").height(); |
|
708 |
+ $("#msgListRowCell").prepend(convDataPerNmbradst); |
|
709 |
+ |
|
710 |
+ $("#frmMsgLstWrap").scrollTop($("#msgListRowCell").height() - scrlheight); |
|
711 |
+ }); |
|
712 |
+ |
|
713 |
+ |
|
714 |
+ $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); |
|
715 |
+ $("#diplNmAllMsg").css("color", "#04957b"); |
|
716 |
+ $(this).css("color", "#1b8efe"); |
|
717 |
+ }); |
|
718 |
+ |
|
719 |
+ |
|
720 |
+ // Show again all the messages sent/received to/from the clicked number |
|
721 |
+ $("#diplNmAllMsg").click(function() { |
|
722 |
+ |
|
723 |
+ $("#loadMoreMsgsusr").css("display", "none"); |
|
724 |
+ |
|
725 |
+ let convDataprn = []; |
|
726 |
+ $.each(messagesPerNmbr[phNumberFrom], function(index, item) { |
|
727 |
+ convDataprn.push(item); |
|
728 |
+ }); |
|
729 |
+ |
|
730 |
+ // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button |
|
731 |
+ if (convDataprn.length > nmbTblDefault) { |
|
732 |
+ $("#loadMoreMsgs").css("display", "block"); |
|
733 |
+ let nmbToBeLoaded = nmbTblDefault; |
|
734 |
+ } else { |
|
735 |
+ $("#loadMoreMsgs").css("display", "none"); |
|
736 |
+ let nmbToBeLoaded = convDataprn.length; |
|
737 |
+ } |
|
738 |
+ |
|
739 |
+ |
|
740 |
+ let rowMessageArrprnst = []; |
|
741 |
+ |
|
742 |
+ for (let n = nmbToBeLoaded - 1; n >= 0; n--) { |
|
743 |
+ rowMessageArrprnst.push(convDataprn[n]); |
|
744 |
+ } |
|
745 |
+ |
|
746 |
+ let convDataPerNmbrprnst = rowMessageArrprnst.join(""); |
|
747 |
+ |
|
748 |
+ $("#msgListRowCell").empty(); |
|
749 |
+ $("#msgListRowCell").append(convDataPerNmbrprnst); |
|
750 |
+ |
|
751 |
+ // Scroll down to the bottom of the window |
|
752 |
+ $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); |
|
753 |
+ |
|
754 |
+ |
|
755 |
+ // Load more messages |
|
756 |
+ let clckNb = 0; |
|
757 |
+ $("#loadMoreMsgsusr").unbind("click"); |
|
758 |
+ $("#loadMoreMsgsusr").click(function() { |
|
759 |
+ |
|
760 |
+ clckNb++; |
|
761 |
+ var crefnb = (clckNb + 1) * nmbToBeLoaded; |
|
762 |
+ |
|
763 |
+ $("#loadMoreMsgs").css("display", "none"); |
|
764 |
+ |
|
765 |
+ if (crefnb > convDataprn.length) { |
|
766 |
+ var nmbmsg = convDataprn.length - 1; |
|
767 |
+ $("#loadMoreMsgsusr").css("display", "none"); |
|
768 |
+ } else { |
|
769 |
+ var nmbmsg = crefnb - 1; |
|
770 |
+ $("#loadMoreMsgsusr").css("display", "block"); |
|
771 |
+ } |
|
772 |
+ |
|
773 |
+ var rowMessageArrAddst = []; |
|
774 |
+ |
|
775 |
+ for (var q = nmbmsg; q >= clckNb * nmbToBeLoaded; q--) { |
|
776 |
+ |
|
777 |
+ rowMessageArrAddst.push(convDataprn[q]); |
|
778 |
+ } |
|
779 |
+ |
|
780 |
+ var convDataPerNmbradst = rowMessageArrAddst.join(""); |
|
781 |
+ |
|
782 |
+ var scrlheight = $("#msgListRowCell").height(); |
|
783 |
+ $("#msgListRowCell").prepend(convDataPerNmbradst); |
|
784 |
+ |
|
785 |
+ $("#frmMsgLstWrap").scrollTop($("#msgListRowCell").height() - scrlheight); |
|
786 |
+ }); |
|
787 |
+ |
|
788 |
+ |
|
789 |
+ $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); |
|
790 |
+ $("#diplNmAllMsg").css("color", "#04957b"); |
|
791 |
+ $(this).css("color", "#04c6a4"); |
|
792 |
+ |
|
793 |
+ }); |
|
794 |
+ |
|
795 |
+ |
|
796 |
+ // Show the scroll-up arrow |
|
797 |
+ $("#frmMsgLstWrap").scroll(function() { |
|
798 |
+ if ($(this).scrollTop() > 900) { |
|
799 |
+ $('#upArrowSmall').fadeIn(); |
|
800 |
+ } else { |
|
801 |
+ $('#upArrowSmall').fadeOut(); |
|
802 |
+ } |
|
803 |
+ }); |
|
804 |
+ |
|
805 |
+ $("#upArrowSmall").click(function() { |
|
806 |
+ $("#frmMsgLstWrap").animate({scrollTop : 0},400); |
|
807 |
+ }); |
|
808 |
+ |
|
809 |
+ }, |
|
810 |
+ error: function() { |
|
811 |
+ showAlert("Error while attempting to get message data from the database!"); |
|
812 |
+ $('#listAllMsgsConv').removeClass('icon-loading'); |
|
813 |
+ } |
|
814 |
+ }); |
|
815 |
+ |
|
816 |
+ } |
|
817 |
+ |
|
818 |
+ $('[id^="showMsgConv-"]').click(function() { |
|
819 |
+ |
|
820 |
+ let ctrwnmbr = $(this).attr("id").replace("showMsgConv-", ""); |
|
821 |
+ let phNumberFrom = $("#frmNmbr-"+ ctrwnmbr).text(); |
|
822 |
+ let phNumberTo = $("#toNmbr-"+ ctrwnmbr).text().split(": ")[1]; |
|
823 |
+ |
|
824 |
+ showRecMsgPerConv(phNumberFrom, phNumberTo); |
|
825 |
+ }); |
|
826 |
+ |
|
827 |
+ |
|
828 |
+ |
|
829 |
+ // Show the pop-up window that lists all the messages sent/received to/from a phone number |
|
830 |
+ function showMsgPerNmbr(clckPhNumber) { |
|
831 |
+ |
|
832 |
+ var allfrmtomsg = "<div id='listAllMsgsFromTo'>"; |
|
833 |
+ allfrmtomsg += "<div id='draglstMsgmWindow'><img src='/apps/sms_relentless/img/dots.svg'></div>"; |
|
834 |
+ allfrmtomsg += "<a id='closeFrmMsgWindow' title='Close this window'></a>"; |
|
835 |
+ allfrmtomsg += "<div class='showByNmbrTitle'>Messages sent/received to/from <span style='color:#04957b'>"+ clckPhNumber +"</span></div>"; |
|
836 |
+ allfrmtomsg += "<div id='frmMsgLstWrap'>"; |
|
837 |
+ allfrmtomsg += "<table id='frmMsgLstTbl'>"; |
|
838 |
+ allfrmtomsg += "<tr class='groupedrowsbody'><td><div id='grpdbynamelst' class='groupedLstNamespn'></div></td><td><div id='loadMoreMsgs' title='Click to load older messages.'>Load more messages</div><div id='loadMoreMsgsusr' title='Click to load older messages.'>Load more messages</div><div id='msgListRowCell' class='groupedLstMsgspn'></div><div id='arrowupWrap'><div id='upArrowSmall' title='Scroll to the top'></div></div></td></tr>"; |
|
839 |
+ allfrmtomsg += "</table></div>"; |
|
840 |
+ allfrmtomsg += "<div id='sendMsgReply'><table id='sendMsgConv'><tr><td><div id='fromPhoneNmbrConv'>From: <select id='selectFromNbConv'></select></div><div id='toPhoneNmbrConv'>To: <span id='toNmbrConv' style='color:#04957b'>"+ clckPhNumber +"</span></div></td></tr>"; |
|
841 |
+ allfrmtomsg += "<tr><td><textarea id='sendMsgConvText' placeholder='Enter a message here, then press Send SMS'></textarea></td></tr></table>"; |
|
842 |
+ allfrmtomsg += "<div id='sendMsgConvBtn'>Send SMS</div></div>"; |
|
843 |
+ allfrmtomsg += "<div style='display:block;width:100%;height:14px;'><img id='expandWindowRpl' src='/apps/sms_relentless/img/arrowDown.svg' title='Expand to send a message'></div>"; |
|
844 |
+ allfrmtomsg += "<div id='draglstMsgmWindowsc'><img src='/apps/sms_relentless/img/dots.svg' style='padding:4px;vertical-align:top;'></div>"; |
|
845 |
+ allfrmtomsg += "</div>"; |
|
846 |
+ |
|
847 |
+ $("#content").append("<div id='recTblOverlay'></div>"); |
|
848 |
+ $("#content").append(allfrmtomsg); |
|
849 |
+ |
|
850 |
+ var topDist = parseInt((window.innerHeight / 2).toFixed(2) - 340) +"px"; |
|
851 |
+ var leftDist = parseInt((window.innerWidth / 2).toFixed(2) - 300) +"px"; |
|
852 |
+ $("#listAllMsgsFromTo").css({ "top" : topDist, "left" : leftDist }); |
|
853 |
+ |
|
854 |
+ $("#closeFrmMsgWindow").click(function() { $("#listAllMsgsFromTo").remove(); $("#recTblOverlay").remove(); }); |
|
855 |
+ $("#recTblOverlay").click(function() { $("#listAllMsgsFromTo").remove(); $("#recTblOverlay").remove(); }); |
|
856 |
+ |
|
857 |
+ |
|
858 |
+ // Expand the window when clicking on the arrow, to be able to send a reply message |
|
859 |
+ $("#expandWindowRpl").click(function() { |
|
860 |
+ |
|
861 |
+ if ($(this).attr('src') == '/apps/sms_relentless/img/arrowDown.svg') { |
|
862 |
+ $("#sendMsgReply").css("display", "block"); |
|
863 |
+ $("#listAllMsgsFromTo").css("height", "618px"); |
|
864 |
+ $(this).attr('src', '/apps/sms_relentless/img/arrowUp.svg'); |
|
865 |
+ $(this).attr('title', 'Collapse'); |
|
866 |
+ } else { |
|
867 |
+ $("#sendMsgReply").css("display", "none"); |
|
868 |
+ $("#listAllMsgsFromTo").css("height", "490px"); |
|
869 |
+ $(this).attr('src', '/apps/sms_relentless/img/arrowDown.svg'); |
|
870 |
+ $(this).attr('title', 'Expand to send a reply'); |
|
871 |
+ } |
|
872 |
+ }); |
|
873 |
+ |
|
874 |
+ // Send a message from the 'conversation' window |
|
875 |
+ $("#sendMsgConvBtn").click(function() { |
|
876 |
+ |
|
877 |
+ $("#sendMsgConv,#sendMsgConvBtn").addClass('icon-loading'); |
|
878 |
+ var msgToSend = $("#sendMsgConvText").val(); |
|
879 |
+ var selectedid = $("#selectFromNbConv").val(); |
|
880 |
+ var toNumber = $("#toNmbrConv").text(); |
|
881 |
+ var receiversNumbers = [toNumber]; |
|
882 |
+ |
|
883 |
+ if (selectedid != '') { |
|
884 |
+ |
|
885 |
+ var sendersplit = selectedid.split(":"); |
|
886 |
+ var providercap = sendersplit[0]; |
|
887 |
+ var provsec = sendersplit[1]; |
|
888 |
+ |
|
889 |
+ if (/[a-zA-Z]/.test(provsec)) { |
|
890 |
+ var alphanumcheck = true; |
|
891 |
+ } else { var alphanumcheck = false; } |
|
892 |
+ |
|
893 |
+ if (providercap == 'Tx' && alphanumcheck == false) { |
|
894 |
+ var senderproc = selectedid.replace(/[^0-9]/g, ""); |
|
895 |
+ var selectedsender = "+" + senderproc; |
|
896 |
+ var providerUsed = "telnyx"; |
|
897 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstel"); |
|
898 |
+ } else if (providercap == 'Pl' && alphanumcheck == false) { |
|
899 |
+ var selectedsender = selectedid.replace(/[^0-9]/g, ""); |
|
900 |
+ var providerUsed = "plivo"; |
|
901 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsnex"); |
|
902 |
+ } else if (providercap == 'Tw' && alphanumcheck == false) { |
|
903 |
+ var senderproc = selectedid.replace(/[^0-9]/g, ""); |
|
904 |
+ var selectedsender = "+" + senderproc; |
|
905 |
+ var providerUsed = "twilio"; |
|
906 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstwil"); |
|
907 |
+ } else if (providercap == 'Fl' && alphanumcheck == false) { |
|
908 |
+ var senderproc = selectedid.replace(/[^0-9]/g, ""); |
|
909 |
+ var selectedsender = "+" + senderproc; |
|
910 |
+ var providerUsed = "flowroute"; |
|
911 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsflow"); |
|
912 |
+ } else if (providercap == 'Tx' && alphanumcheck == true) { |
|
913 |
+ var selectedsender = provsec; |
|
914 |
+ var providerUsed = "telnyx"; |
|
915 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstel"); |
|
916 |
+ } else if (providercap == 'Pl' && alphanumcheck == true) { |
|
917 |
+ var selectedsender = provsec; |
|
918 |
+ var providerUsed = "plivo"; |
|
919 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsnex"); |
|
920 |
+ } else if (providercap == 'Tw' && alphanumcheck == true) { |
|
921 |
+ var selectedsender = provsec; |
|
922 |
+ var providerUsed = "twilio"; |
|
923 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstwil"); |
|
924 |
+ } else if (providercap == 'Fl' && alphanumcheck == true) { |
|
925 |
+ var selectedsender = provsec; |
|
926 |
+ var providerUsed = "flowroute"; |
|
927 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsflow"); |
|
928 |
+ } |
|
929 |
+ |
|
930 |
+ var uploadedtomms = []; |
|
931 |
+ |
|
932 |
+ if (msgToSend != '') { |
|
933 |
+ |
|
934 |
+ $.ajax({ |
|
935 |
+ url: relbaseUrl + '/' + userid, |
|
936 |
+ type: "POST", |
|
937 |
+ data: { |
|
938 |
+ receiversPhoneNbs: receiversNumbers, |
|
939 |
+ fromsender: selectedsender, |
|
940 |
+ waitinterval: 1000, |
|
941 |
+ sentsmstext: msgToSend, |
|
942 |
+ ismms: 0, |
|
943 |
+ mmsfiles: uploadedtomms |
|
944 |
+ }, |
|
945 |
+ success: function(displayname) { |
|
946 |
+ |
|
947 |
+ var tzdate = new Date(); |
|
948 |
+ var presDatest = new Date(tzdate.getTime() - (tzdate.getTimezoneOffset() * 60000)).toJSON(); |
|
949 |
+ var presDatedb = presDatest.split(".")[0]; |
|
950 |
+ var presDatesc = presDatedb.split("T"); |
|
951 |
+ var presDate = presDatesc[0] +" "+ presDatesc[1]; |
|
952 |
+ var sentMessageStatus = ''; |
|
953 |
+ |
|
954 |
+ if (displayname) { |
|
955 |
+ var msgToSendproc = "<span class='msgAuthorNameGrp'>"+ displayname + ":</span>" + msgToSend; |
|
956 |
+ } else { var msgToSendproc = ''; } |
|
957 |
+ |
|
958 |
+ $("#msgListRowCell").append("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ selectedsender +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ receiversNumbers[0] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ msgToSendproc +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ presDate +"</div><div class='sentMssgStatus'>"+ sentMessageStatus +"</div></div>"); |
|
959 |
+ |
|
960 |
+ // Scroll down to the bottom of the window |
|
961 |
+ $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); |
|
962 |
+ |
|
963 |
+ $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); |
|
964 |
+ }, |
|
965 |
+ error: function() { |
|
966 |
+ showAlert("Error while sending the message. You can check your Nextcloud log to find out more about this issue."); |
|
967 |
+ $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); |
|
968 |
+ } |
|
969 |
+ }); |
|
970 |
+ } else { |
|
971 |
+ showAlert("Please enter a message in the text box!"); |
|
972 |
+ $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); |
|
973 |
+ } |
|
974 |
+ } else { |
|
975 |
+ showAlert("Please choose a Sender ID from the 'From' drop-down list!"); |
|
976 |
+ $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); |
|
977 |
+ } |
|
978 |
+ |
|
979 |
+ }); |
|
980 |
+ |
|
981 |
+ |
|
982 |
+ |
|
983 |
+ // Make the window draggable |
|
984 |
+ function makeMgrWndDraggable(e) { |
|
985 |
+ |
|
986 |
+ window.pmdragging = {}; |
|
987 |
+ pmdragging.pageX0 = e.pageX; |
|
988 |
+ pmdragging.pageY0 = e.pageY; |
|
989 |
+ pmdragging.elem = $("#listAllMsgsFromTo"); |
|
990 |
+ pmdragging.offset0 = $("#listAllMsgsFromTo").offset(); |
|
991 |
+ |
|
992 |
+ function handle_dragging(e) { |
|
993 |
+ var left = pmdragging.offset0.left + (e.pageX - pmdragging.pageX0); |
|
994 |
+ var top = pmdragging.offset0.top + (e.pageY - pmdragging.pageY0); |
|
995 |
+ $(pmdragging.elem).offset({top: top, left: left}); |
|
996 |
+ } |
|
997 |
+ |
|
998 |
+ function handle_mouseup(e) { |
|
999 |
+ $('body').off('mousemove', handle_dragging).off('mouseup', handle_mouseup); |
|
1000 |
+ } |
|
1001 |
+ |
|
1002 |
+ $('body').on('mouseup', handle_mouseup).on('mousemove', handle_dragging); |
|
1003 |
+ } |
|
1004 |
+ $("#draglstMsgmWindow").mousedown(makeMgrWndDraggable); |
|
1005 |
+ $("#draglstMsgmWindowsc").mousedown(makeMgrWndDraggable); |
|
1006 |
+ |
|
1007 |
+ |
|
1008 |
+ // Append the available phone numbers to the From drop-down list |
|
1009 |
+ var availPhoneNmbrs = []; |
|
1010 |
+ $("#currentsmsnmbrs .optselectsmsnb").each(function() { |
|
1011 |
+ var crtphnmbr = $(this).attr("value"); |
|
1012 |
+ if (crtphnmbr != "") { availPhoneNmbrs.push(crtphnmbr); } |
|
1013 |
+ }); |
|
1014 |
+ |
|
1015 |
+ if (availPhoneNmbrs.length > 0) { |
|
1016 |
+ var avphopt = ""; |
|
1017 |
+ for (let d = 0; d < availPhoneNmbrs.length; d++) { |
|
1018 |
+ avphopt += "<option value='"+ availPhoneNmbrs[d] +"'>"+ availPhoneNmbrs[d] +"</option>"; |
|
1019 |
+ } |
|
1020 |
+ $("#selectFromNbConv").append(avphopt); |
|
1021 |
+ |
|
1022 |
+ } else { $("#selectFromNbConv").append("<option value='' selected>No IDs</option>"); } |
|
1023 |
+ |
|
1024 |
+ |
|
1025 |
+ // Get the sent/received messages for the current phone number, from the database |
|
1026 |
+ var getGroupedPnUrl = OC.generateUrl("/apps/sms_relentless/user/getgroupedpernumber"); |
|
1027 |
+ |
|
1028 |
+ $('#listAllMsgsFromTo').addClass('icon-loading'); |
|
1029 |
+ var totalPhNmbrs = 0; |
|
1030 |
+ |
|
1031 |
+ $.ajax({ |
|
1032 |
+ method: 'POST', |
|
1033 |
+ url: getGroupedPnUrl + '/' + userid, |
|
1034 |
+ contentType: 'application/json', |
|
1035 |
+ data: JSON.stringify({ phoneNumber: clckPhNumber }), |
|
1036 |
+ success: function(groupedpernb) { |
|
1037 |
+ |
|
1038 |
+ $('#listAllMsgsFromTo').removeClass('icon-loading'); |
|
1039 |
+ |
|
1040 |
+ var fromtoNmbrsData = []; |
|
1041 |
+ |
|
1042 |
+ for (var i = 0; i < groupedpernb.length; i++) { |
|
1043 |
+ |
|
1044 |
+ if (groupedpernb[i].author_displayname) { |
|
1045 |
+ var authordnm = groupedpernb[i].author_displayname; |
|
1046 |
+ } else { |
|
1047 |
+ var authordnm = ''; |
|
1048 |
+ } |
|
1049 |
+ |
|
1050 |
+ var sentfromnmbrarr = groupedpernb[i].from.split("+"); |
|
1051 |
+ if (sentfromnmbrarr[1]) { |
|
1052 |
+ var groupednbfrom = "+"+ sentfromnmbrarr[1]; |
|
1053 |
+ } else { |
|
1054 |
+ var groupednbfrom = sentfromnmbrarr[0]; |
|
1055 |
+ } |
|
1056 |
+ |
|
1057 |
+ var modmessagerec = ''; |
|
1058 |
+ if (groupedpernb[i].author_displayname) { |
|
1059 |
+ modmessagerec = "<span class='msgAuthorNameGrp'>"+ groupedpernb[i].author_displayname + ":</span>" + groupedpernb[i].message; |
|
1060 |
+ } else { |
|
1061 |
+ modmessagerec = groupedpernb[i].message; |
|
1062 |
+ } |
|
1063 |
+ |
|
1064 |
+ if (groupedpernb[i].to.indexOf(": ") > -1) { |
|
1065 |
+ var groupednmbrtopre = groupedpernb[i].to.split(": "); |
|
1066 |
+ var groupednmbrto = groupednmbrtopre[1]; |
|
1067 |
+ } else { |
|
1068 |
+ var groupednmbrto = groupedpernb[i].to; |
|
1069 |
+ } |
|
1070 |
+ |
|
1071 |
+ fromtoNmbrsData.push({ |
|
1072 |
+ 'author_displayname': authordnm, |
|
1073 |
+ 'from': groupednbfrom, |
|
1074 |
+ 'to': groupednmbrto, |
|
1075 |
+ 'message': modmessagerec, |
|
1076 |
+ 'date': groupedpernb[i].date, |
|
1077 |
+ 'status': groupedpernb[i].deliveryreceipt, |
|
1078 |
+ 'table': groupedpernb[i].table |
|
1079 |
+ }); |
|
1080 |
+ } |
|
1081 |
+ |
|
1082 |
+ |
|
1083 |
+ // Remove the duplicates |
|
1084 |
+ var noDupMsgData = []; |
|
1085 |
+ $.each(fromtoNmbrsData, function(i, e) { |
|
1086 |
+ var matchingData = $.grep(noDupMsgData, function(item) { |
|
1087 |
+ return item.from == e.from && item.to == e.to && item.message == e.message && item.table == 'received' && e.table == 'sent'; |
|
1088 |
+ }); |
|
1089 |
+ if (matchingData.length === 0) { |
|
1090 |
+ noDupMsgData.push(e); |
|
1091 |
+ } |
|
1092 |
+ }); |
|
1093 |
+ |
|
1094 |
+ var messagesPerNmbr = {}; |
|
1095 |
+ var msgsNamesPerNmbr = {}; |
|
1096 |
+ var msgsNmbrsNames = {}; |
|
1097 |
+ |
|
1098 |
+ var displayNamesarr = []; |
|
1099 |
+ var convData = []; |
|
1100 |
+ |
|
1101 |
+ for (var n = 0; n < noDupMsgData.length; n++) { |
|
1102 |
+ |
|
1103 |
+ if (noDupMsgData[n]['from'] == clckPhNumber && noDupMsgData[n]['table'] == 'sent') { |
|
1104 |
+ |
|
1105 |
+ convData.push({ |
|
1106 |
+ 'author_displayname': noDupMsgData[n]['author_displayname'], |
|
1107 |
+ 'message': noDupMsgData[n]['message'], |
|
1108 |
+ 'from': noDupMsgData[n]['from'], |
|
1109 |
+ 'to': noDupMsgData[n]['to'], |
|
1110 |
+ 'date': noDupMsgData[n]['date'], |
|
1111 |
+ 'direction': 'sent_from', |
|
1112 |
+ 'status': noDupMsgData[n]['status'], |
|
1113 |
+ 'table': noDupMsgData[n]['table'] |
|
1114 |
+ }); |
|
1115 |
+ |
|
1116 |
+ } else if (noDupMsgData[n]['to'] == clckPhNumber && noDupMsgData[n]['table'] == 'sent') { |
|
1117 |
+ |
|
1118 |
+ convData.push({ |
|
1119 |
+ 'author_displayname': noDupMsgData[n]['author_displayname'], |
|
1120 |
+ 'message': noDupMsgData[n]['message'], |
|
1121 |
+ 'from': noDupMsgData[n]['from'], |
|
1122 |
+ 'to': noDupMsgData[n]['to'], |
|
1123 |
+ 'date': noDupMsgData[n]['date'], |
|
1124 |
+ 'direction': 'sent_to', |
|
1125 |
+ 'status': noDupMsgData[n]['status'], |
|
1126 |
+ 'table': noDupMsgData[n]['table'] |
|
1127 |
+ }); |
|
1128 |
+ |
|
1129 |
+ |
|
1130 |
+ } else if (noDupMsgData[n]['from'] == clckPhNumber && noDupMsgData[n]['table'] == 'received') { |
|
1131 |
+ |
|
1132 |
+ convData.push({ |
|
1133 |
+ 'author_displayname': noDupMsgData[n]['author_displayname'], |
|
1134 |
+ 'message': noDupMsgData[n]['message'], |
|
1135 |
+ 'from': noDupMsgData[n]['from'], |
|
1136 |
+ 'to': noDupMsgData[n]['to'], |
|
1137 |
+ 'date': noDupMsgData[n]['date'], |
|
1138 |
+ 'direction': 'received_from', |
|
1139 |
+ 'status': noDupMsgData[n]['status'], |
|
1140 |
+ 'table': noDupMsgData[n]['table'] |
|
1141 |
+ }); |
|
1142 |
+ |
|
1143 |
+ } else if (noDupMsgData[n]['to'] == clckPhNumber && noDupMsgData[n]['table'] == 'received') { |
|
1144 |
+ |
|
1145 |
+ convData.push({ |
|
1146 |
+ 'author_displayname': noDupMsgData[n]['author_displayname'], |
|
1147 |
+ 'message': noDupMsgData[n]['message'], |
|
1148 |
+ 'from': noDupMsgData[n]['from'], |
|
1149 |
+ 'to': noDupMsgData[n]['to'], |
|
1150 |
+ 'date': noDupMsgData[n]['date'], |
|
1151 |
+ 'direction': 'received_on', |
|
1152 |
+ 'status': noDupMsgData[n]['status'], |
|
1153 |
+ 'table': noDupMsgData[n]['table'] |
|
1154 |
+ }); |
|
1155 |
+ } |
|
1156 |
+ } |
|
1157 |
+ |
|
1158 |
+ // Sort messages by date |
|
1159 |
+ convData.sort(function(a, b) { |
|
1160 |
+ var c = new Date(a.date); |
|
1161 |
+ var d = new Date(b.date); |
|
1162 |
+ return c-d; |
|
1163 |
+ }); |
|
1164 |
+ convData.reverse(); |
|
1165 |
+ |
|
1166 |
+ // Collect the display names of the users that sent messages from the current number |
|
1167 |
+ var selectedNames = []; |
|
1168 |
+ var displayNames = ''; |
|
1169 |
+ for (var v = 0; v < convData.length; v++) { |
|
1170 |
+ if (selectedNames.indexOf(convData[v]['author_displayname']) == -1) { |
|
1171 |
+ selectedNames.push(convData[v]['author_displayname']); |
|
1172 |
+ displayNames += "<div id='diplNm_"+ clckPhNumber +"_"+ v +"' class='dispNameList' name='"+ convData[v]['author_displayname'] +"'>"+ convData[v]['author_displayname'] +"</div>"; |
|
1173 |
+ } |
|
1174 |
+ } |
|
1175 |
+ displayNames += "<div id='diplNmAllMsg' class='dispNameListAll' title='Show all the messages for this number.'>"+ clckPhNumber +"</div>"; |
|
1176 |
+ |
|
1177 |
+ // Store the display names for the current number, to be able to see them later |
|
1178 |
+ var ctPhNumber = clckPhNumber; |
|
1179 |
+ msgsNamesPerNmbr[ctPhNumber] = displayNames; |
|
1180 |
+ |
|
1181 |
+ // Store the messages sent by each user, to be able to see them later when clicking on the user's name |
|
1182 |
+ for (var h = 0; h < selectedNames.length; h++) { |
|
1183 |
+ |
|
1184 |
+ var rowMessageArrpn = []; |
|
1185 |
+ for (var b = 0; b < convData.length; b++) { |
|
1186 |
+ |
|
1187 |
+ if (selectedNames[h] == convData[b]['author_displayname']) { |
|
1188 |
+ |
|
1189 |
+ if (convData[b]['direction'] == 'sent_from') { |
|
1190 |
+ if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1) { |
|
1191 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
1192 |
+ } else { |
|
1193 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
1194 |
+ } |
|
1195 |
+ rowMessageArrpn.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
1196 |
+ } else if (convData[b]['direction'] == 'sent_to') { |
|
1197 |
+ if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1) { |
|
1198 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
1199 |
+ } else { |
|
1200 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
1201 |
+ } |
|
1202 |
+ rowMessageArrpn.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
1203 |
+ } else if (convData[b]['direction'] == 'received_from') { |
|
1204 |
+ rowMessageArrpn.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div></div>"); |
|
1205 |
+ } else if (convData[b]['direction'] == 'received_on') { |
|
1206 |
+ rowMessageArrpn.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div></div>"); |
|
1207 |
+ } |
|
1208 |
+ } |
|
1209 |
+ } |
|
1210 |
+ var crtNmber = clckPhNumber; |
|
1211 |
+ var crtName = selectedNames[h]; |
|
1212 |
+ msgsNmbrsNames[crtNmber] = msgsNmbrsNames[crtNmber] || {}; |
|
1213 |
+ msgsNmbrsNames[crtNmber][crtName] = rowMessageArrpn; |
|
1214 |
+ } |
|
1215 |
+ |
|
1216 |
+ // The number of messages to be loaded by default |
|
1217 |
+ var nmbTblDefault = 50; |
|
1218 |
+ |
|
1219 |
+ // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button |
|
1220 |
+ if (convData.length > nmbTblDefault) { |
|
1221 |
+ $("#loadMoreMsgs").css("display", "block"); |
|
1222 |
+ var nmbToBeLoaded = nmbTblDefault; |
|
1223 |
+ } else { var nmbToBeLoaded = convData.length; } |
|
1224 |
+ |
|
1225 |
+ var rowMessageArr = []; |
|
1226 |
+ for (var m = nmbToBeLoaded - 1; m >= 0; m--) { |
|
1227 |
+ |
|
1228 |
+ if (convData[m]['direction'] == 'sent_from') { |
|
1229 |
+ |
|
1230 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
1231 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
1232 |
+ } else { |
|
1233 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
1234 |
+ } |
|
1235 |
+ rowMessageArr.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
1236 |
+ |
|
1237 |
+ } else if (convData[m]['direction'] == 'sent_to') { |
|
1238 |
+ |
|
1239 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
1240 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
1241 |
+ } else { |
|
1242 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
1243 |
+ } |
|
1244 |
+ rowMessageArr.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
1245 |
+ |
|
1246 |
+ } else if (convData[m]['direction'] == 'received_from') { |
|
1247 |
+ |
|
1248 |
+ rowMessageArr.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
1249 |
+ |
|
1250 |
+ } else if (convData[m]['direction'] == 'received_on') { |
|
1251 |
+ |
|
1252 |
+ rowMessageArr.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
1253 |
+ } |
|
1254 |
+ } |
|
1255 |
+ |
|
1256 |
+ var convDataPerNmbr = rowMessageArr.join(""); |
|
1257 |
+ |
|
1258 |
+ $("#grpdbynamelst").append(displayNames); |
|
1259 |
+ $("#msgListRowCell").append(convDataPerNmbr); |
|
1260 |
+ |
|
1261 |
+ // Store the messages for the current number, to be able to see them later, when clicking on the number |
|
1262 |
+ var rowMessageArrcpt = []; |
|
1263 |
+ for (var m = 0; m < convData.length; m++) { |
|
1264 |
+ |
|
1265 |
+ if (convData[m]['direction'] == 'sent_from') { |
|
1266 |
+ |
|
1267 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
1268 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
1269 |
+ } else { |
|
1270 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
1271 |
+ } |
|
1272 |
+ rowMessageArrcpt.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
1273 |
+ |
|
1274 |
+ } else if (convData[m]['direction'] == 'sent_to') { |
|
1275 |
+ |
|
1276 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
1277 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
1278 |
+ } else { |
|
1279 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
1280 |
+ } |
|
1281 |
+ rowMessageArrcpt.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
1282 |
+ |
|
1283 |
+ } else if (convData[m]['direction'] == 'received_from') { |
|
1284 |
+ |
|
1285 |
+ rowMessageArrcpt.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
1286 |
+ |
|
1287 |
+ } else if (convData[m]['direction'] == 'received_on') { |
|
1288 |
+ |
|
1289 |
+ rowMessageArrcpt.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
1290 |
+ } |
|
1291 |
+ } |
|
1292 |
+ |
|
1293 |
+ messagesPerNmbr[clckPhNumber] = rowMessageArrcpt; |
|
1294 |
+ |
|
1295 |
+ // Scroll down to the bottom of the window |
|
1296 |
+ $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); |
|
1297 |
+ |
|
1298 |
+ // Load more messages |
|
1299 |
+ var clickNmb = 0; |
|
1300 |
+ $("#loadMoreMsgs").click(function() { |
|
1301 |
+ |
|
1302 |
+ clickNmb++; |
|
1303 |
+ |
|
1304 |
+ var crefnb = (clickNmb + 1) * nmbToBeLoaded; |
|
1305 |
+ |
|
1306 |
+ if (crefnb > convData.length) { |
|
1307 |
+ var nmbmsg = convData.length - 1; |
|
1308 |
+ $("#loadMoreMsgs").css("display", "none"); |
|
1309 |
+ } else { |
|
1310 |
+ var nmbmsg = crefnb - 1; |
|
1311 |
+ } |
|
1312 |
+ |
|
1313 |
+ var rowMessageArrAdd = []; |
|
1314 |
+ |
|
1315 |
+ for (var m = nmbmsg; m >= clickNmb * nmbToBeLoaded; m--) { |
|
1316 |
+ |
|
1317 |
+ if (convData[m]['direction'] == 'sent_from') { |
|
1318 |
+ |
|
1319 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
1320 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
1321 |
+ } else { |
|
1322 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
1323 |
+ } |
|
1324 |
+ rowMessageArrAdd.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
1325 |
+ |
|
1326 |
+ } else if (convData[m]['direction'] == 'sent_to') { |
|
1327 |
+ |
|
1328 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
1329 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
1330 |
+ } else { |
|
1331 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
1332 |
+ } |
|
1333 |
+ rowMessageArrAdd.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
1334 |
+ |
|
1335 |
+ } else if (convData[m]['direction'] == 'received_from') { |
|
1336 |
+ |
|
1337 |
+ rowMessageArrAdd.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
1338 |
+ |
|
1339 |
+ } else if (convData[m]['direction'] == 'received_on') { |
|
1340 |
+ |
|
1341 |
+ rowMessageArrAdd.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
1342 |
+ } |
|
1343 |
+ } |
|
1344 |
+ |
|
1345 |
+ var convDataPerNmbrad = rowMessageArrAdd.join(""); |
|
1346 |
+ |
|
1347 |
+ var scrlheight = $("#msgListRowCell").height(); |
|
1348 |
+ $("#msgListRowCell").prepend(convDataPerNmbrad); |
|
1349 |
+ |
|
1350 |
+ $("#frmMsgLstWrap").scrollTop($("#msgListRowCell").height() - scrlheight); |
|
1351 |
+ }); |
|
1352 |
+ |
|
1353 |
+ |
|
1354 |
+ // Show the messages sent by each user whose name is clicked |
|
1355 |
+ $('[id*="diplNm_"]').click(function() { |
|
1356 |
+ |
|
1357 |
+ var crntNmbr = $(this).attr("id").split("_")[1]; |
|
1358 |
+ var crntDisName = $(this).attr("name"); |
|
1359 |
+ $("#loadMoreMsgs").css("display", "none"); |
|
1360 |
+ |
|
1361 |
+ var convDataprn = []; |
|
1362 |
+ $.each(msgsNmbrsNames[crntNmbr][crntDisName], function(index, item) { |
|
1363 |
+ convDataprn.push(item); |
|
1364 |
+ }); |
|
1365 |
+ |
|
1366 |
+ // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button |
|
1367 |
+ if (convDataprn.length > nmbTblDefault) { |
|
1368 |
+ $("#loadMoreMsgsusr").css("display", "block"); |
|
1369 |
+ var nmbToBeLoaded = nmbTblDefault; |
|
1370 |
+ } else { |
|
1371 |
+ $("#loadMoreMsgsusr").css("display", "none"); |
|
1372 |
+ var nmbToBeLoaded = convDataprn.length; |
|
1373 |
+ } |
|
1374 |
+ |
|
1375 |
+ var rowMessageArrprnst = []; |
|
1376 |
+ |
|
1377 |
+ for (var n = nmbToBeLoaded - 1; n >= 0; n--) { |
|
1378 |
+ rowMessageArrprnst.push(convDataprn[n]); |
|
1379 |
+ } |
|
1380 |
+ |
|
1381 |
+ var convDataPerNmbrprnst = rowMessageArrprnst.join(""); |
|
1382 |
+ |
|
1383 |
+ $("#msgListRowCell").empty(); |
|
1384 |
+ $("#msgListRowCell").append(convDataPerNmbrprnst); |
|
1385 |
+ |
|
1386 |
+ // Scroll down to the bottom of the window |
|
1387 |
+ $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); |
|
1388 |
+ |
|
1389 |
+ // Load more messages |
|
1390 |
+ var clckNb = 0; |
|
1391 |
+ $("#loadMoreMsgsusr").unbind("click"); |
|
1392 |
+ $("#loadMoreMsgsusr").click(function() { |
|
1393 |
+ |
|
1394 |
+ clckNb++; |
|
1395 |
+ var crefnb = (clckNb + 1) * nmbToBeLoaded; |
|
1396 |
+ |
|
1397 |
+ $("#loadMoreMsgs").css("display", "none"); |
|
1398 |
+ |
|
1399 |
+ if (crefnb > convDataprn.length) { |
|
1400 |
+ var nmbmsg = convDataprn.length - 1; |
|
1401 |
+ $("#loadMoreMsgsusr").css("display", "none"); |
|
1402 |
+ } else { |
|
1403 |
+ var nmbmsg = crefnb - 1; |
|
1404 |
+ $("#loadMoreMsgsusr").css("display", "block"); |
|
1405 |
+ } |
|
1406 |
+ |
|
1407 |
+ var rowMessageArrAddst = []; |
|
1408 |
+ |
|
1409 |
+ for (var q = nmbmsg; q >= clckNb * nmbToBeLoaded; q--) { |
|
1410 |
+ |
|
1411 |
+ rowMessageArrAddst.push(convDataprn[q]); |
|
1412 |
+ } |
|
1413 |
+ |
|
1414 |
+ var convDataPerNmbradst = rowMessageArrAddst.join(""); |
|
1415 |
+ |
|
1416 |
+ var scrlheight = $("#msgListRowCell").height(); |
|
1417 |
+ $("#msgListRowCell").prepend(convDataPerNmbradst); |
|
1418 |
+ |
|
1419 |
+ $("#frmMsgLstWrap").scrollTop($("#msgListRowCell").height() - scrlheight); |
|
1420 |
+ }); |
|
1421 |
+ |
|
1422 |
+ |
|
1423 |
+ $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); |
|
1424 |
+ $("#diplNmAllMsg").css("color", "#04957b"); |
|
1425 |
+ $(this).css("color", "#1b8efe"); |
|
1426 |
+ }); |
|
1427 |
+ |
|
1428 |
+ |
|
1429 |
+ // Show again all the messages sent/received to/from the clicked number |
|
1430 |
+ $("#diplNmAllMsg").click(function() { |
|
1431 |
+ |
|
1432 |
+ $("#loadMoreMsgsusr").css("display", "none"); |
|
1433 |
+ |
|
1434 |
+ var convDataprn = []; |
|
1435 |
+ $.each(messagesPerNmbr[clckPhNumber], function(index, item) { |
|
1436 |
+ convDataprn.push(item); |
|
1437 |
+ }); |
|
1438 |
+ |
|
1439 |
+ // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button |
|
1440 |
+ if (convDataprn.length > nmbTblDefault) { |
|
1441 |
+ $("#loadMoreMsgs").css("display", "block"); |
|
1442 |
+ var nmbToBeLoaded = nmbTblDefault; |
|
1443 |
+ } else { |
|
1444 |
+ $("#loadMoreMsgs").css("display", "none"); |
|
1445 |
+ var nmbToBeLoaded = convDataprn.length; |
|
1446 |
+ } |
|
1447 |
+ |
|
1448 |
+ |
|
1449 |
+ var rowMessageArrprnst = []; |
|
1450 |
+ |
|
1451 |
+ for (var n = nmbToBeLoaded - 1; n >= 0; n--) { |
|
1452 |
+ rowMessageArrprnst.push(convDataprn[n]); |
|
1453 |
+ } |
|
1454 |
+ |
|
1455 |
+ var convDataPerNmbrprnst = rowMessageArrprnst.join(""); |
|
1456 |
+ |
|
1457 |
+ $("#msgListRowCell").empty(); |
|
1458 |
+ $("#msgListRowCell").append(convDataPerNmbrprnst); |
|
1459 |
+ |
|
1460 |
+ // Scroll down to the bottom of the window |
|
1461 |
+ $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); |
|
1462 |
+ |
|
1463 |
+ |
|
1464 |
+ // Load more messages |
|
1465 |
+ var clckNb = 0; |
|
1466 |
+ $("#loadMoreMsgsusr").unbind("click"); |
|
1467 |
+ $("#loadMoreMsgsusr").click(function() { |
|
1468 |
+ |
|
1469 |
+ clckNb++; |
|
1470 |
+ var crefnb = (clckNb + 1) * nmbToBeLoaded; |
|
1471 |
+ |
|
1472 |
+ $("#loadMoreMsgs").css("display", "none"); |
|
1473 |
+ |
|
1474 |
+ if (crefnb > convDataprn.length) { |
|
1475 |
+ var nmbmsg = convDataprn.length - 1; |
|
1476 |
+ $("#loadMoreMsgsusr").css("display", "none"); |
|
1477 |
+ } else { |
|
1478 |
+ var nmbmsg = crefnb - 1; |
|
1479 |
+ $("#loadMoreMsgsusr").css("display", "block"); |
|
1480 |
+ } |
|
1481 |
+ |
|
1482 |
+ var rowMessageArrAddst = []; |
|
1483 |
+ |
|
1484 |
+ for (var q = nmbmsg; q >= clckNb * nmbToBeLoaded; q--) { |
|
1485 |
+ |
|
1486 |
+ rowMessageArrAddst.push(convDataprn[q]); |
|
1487 |
+ } |
|
1488 |
+ |
|
1489 |
+ var convDataPerNmbradst = rowMessageArrAddst.join(""); |
|
1490 |
+ |
|
1491 |
+ var scrlheight = $("#msgListRowCell").height(); |
|
1492 |
+ $("#msgListRowCell").prepend(convDataPerNmbradst); |
|
1493 |
+ |
|
1494 |
+ $("#frmMsgLstWrap").scrollTop($("#msgListRowCell").height() - scrlheight); |
|
1495 |
+ }); |
|
1496 |
+ |
|
1497 |
+ |
|
1498 |
+ $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); |
|
1499 |
+ $("#diplNmAllMsg").css("color", "#04957b"); |
|
1500 |
+ $(this).css("color", "#04c6a4"); |
|
1501 |
+ |
|
1502 |
+ }); |
|
1503 |
+ |
|
1504 |
+ |
|
1505 |
+ // Show the scroll-up arrow |
|
1506 |
+ $("#frmMsgLstWrap").scroll(function() { |
|
1507 |
+ if ($(this).scrollTop() > 900) { |
|
1508 |
+ $('#upArrowSmall').fadeIn(); |
|
1509 |
+ } else { |
|
1510 |
+ $('#upArrowSmall').fadeOut(); |
|
1511 |
+ } |
|
1512 |
+ }); |
|
1513 |
+ |
|
1514 |
+ $("#upArrowSmall").click(function() { |
|
1515 |
+ $("#frmMsgLstWrap").animate({scrollTop : 0},400); |
|
1516 |
+ }); |
|
1517 |
+ |
|
1518 |
+ }, |
|
1519 |
+ error: function() { |
|
1520 |
+ showAlert("Error while attempting to get message data from the database!"); |
|
1521 |
+ $('#listAllMsgsFromTo').removeClass('icon-loading'); |
|
1522 |
+ } |
|
1523 |
+ }); |
|
1524 |
+ } |
|
1525 |
+ |
|
1526 |
+ $('[id^="showMsgFrom-"]').click(function() { |
|
1527 |
+ |
|
1528 |
+ var ctrwnb = $(this).attr("id").replace("showMsgFrom-", ""); |
|
1529 |
+ var clckPhNumber = $("#frmNmbr-"+ ctrwnb).text(); |
|
1530 |
+ |
|
1531 |
+ showMsgPerNmbr(clckPhNumber); |
|
1532 |
+ }) |
|
1533 |
+ |
|
1534 |
+ $('[id^="showMsgTo-"]').click(function() { |
|
1535 |
+ var ctrwnbTo = $(this).attr("id").replace("showMsgTo-", ""); |
|
1536 |
+ if ($("#toNmbr-"+ ctrwnbTo).text().indexOf(":") > -1) { |
|
1537 |
+ var clckPhNbTo = $("#toNmbr-"+ ctrwnbTo).text().split(": ")[1]; |
|
1538 |
+ } else { var clckPhNbTo = $("#toNmbr-"+ ctrwnbTo).text(); }; |
|
1539 |
+ |
|
1540 |
+ showMsgPerNmbr(clckPhNbTo); |
|
1541 |
+ }) |
|
1542 |
+ |
|
1543 |
+ // Show the pop-up window for adding a Display Name to the 'From' numbers of unknown senders |
|
1544 |
+ $('[id^="addDispName-"]').click(function() { |
|
1545 |
+ |
|
1546 |
+ var crrownb = $(this).attr("id").replace("addDispName-", ""); |
|
1547 |
+ var slctPhoneNb = $("#frmNmbr-"+ crrownb).text(); |
|
1548 |
+ |
|
1549 |
+ var addDNameWindow = "<div id='disNameWindow'>"; |
|
1550 |
+ addDNameWindow += "<div id='dragDispNmWindow'><img src='/apps/sms_relentless/img/dots.svg'></div>"; |
|
1551 |
+ addDNameWindow += "<a id='closeDisNmWindow' title='Close this window'></a>"; |
|
1552 |
+ addDNameWindow += "<div style='display:block;text-align:left;font-size:16px;margin:14px 22px 0px 22px;color:#353535;'>If this is an external phone number (the number of a person that doesn't have a Nextcloud account), you can save a Display Name for this number, so that all the messages coming from it will be preceded by the specified Display Name:</div>"; |
|
1553 |
+ addDNameWindow += "<div style='display:block;text-align:center;color:#49B382;font-size:16px;font-weight:500;margin:6px 0px 10px 0px;'>"+ slctPhoneNb +"</div>"; |
|
1554 |
+ addDNameWindow += "<input type='text' id='saveDispNmText' placeholder='Eg: John Smith' style='display:block;width:80%;height:30px;margin:10px auto;padding:0px 12px;border-radius: 20px;'>"; |
|
1555 |
+ addDNameWindow += "<input type='submit' id='saveDispName' value='Save'>"; |
|
1556 |
+ addDNameWindow += "</div>"; |
|
1557 |
+ |
|
1558 |
+ $("#content").append("<div id='recTblOverlay'></div>"); |
|
1559 |
+ $("#content").append(addDNameWindow); |
|
1560 |
+ |
|
1561 |
+ var topNmDist = parseInt((window.innerHeight / 2).toFixed(2) - 180) +"px"; |
|
1562 |
+ var leftNmDist = parseInt((window.innerWidth / 2).toFixed(2) - 150) +"px"; |
|
1563 |
+ $("#disNameWindow").css({ "top" : topNmDist, "left" : leftNmDist }); |
|
1564 |
+ |
|
1565 |
+ $("#closeDisNmWindow").click(function() { $("#disNameWindow").remove(); $("#recTblOverlay").remove(); }); |
|
1566 |
+ $("#recTblOverlay").click(function() { $("#disNameWindow").remove(); $("#recTblOverlay").remove(); }); |
|
1567 |
+ |
|
1568 |
+ |
|
1569 |
+ // Make the window draggable |
|
1570 |
+ function makeMgrWndDraggable(e) { |
|
1571 |
+ |
|
1572 |
+ window.pmdragging = {}; |
|
1573 |
+ pmdragging.pageX0 = e.pageX; |
|
1574 |
+ pmdragging.pageY0 = e.pageY; |
|
1575 |
+ pmdragging.elem = $("#disNameWindow"); |
|
1576 |
+ pmdragging.offset0 = $("#disNameWindow").offset(); |
|
1577 |
+ |
|
1578 |
+ function handle_dragging(e) { |
|
1579 |
+ var left = pmdragging.offset0.left + (e.pageX - pmdragging.pageX0); |
|
1580 |
+ var top = pmdragging.offset0.top + (e.pageY - pmdragging.pageY0); |
|
1581 |
+ $(pmdragging.elem).offset({top: top, left: left}); |
|
1582 |
+ } |
|
1583 |
+ |
|
1584 |
+ function handle_mouseup(e) { |
|
1585 |
+ $('body').off('mousemove', handle_dragging).off('mouseup', handle_mouseup); |
|
1586 |
+ } |
|
1587 |
+ |
|
1588 |
+ $('body').on('mouseup', handle_mouseup).on('mousemove', handle_dragging); |
|
1589 |
+ } |
|
1590 |
+ $("#dragDispNmWindow").mousedown(makeMgrWndDraggable); |
|
1591 |
+ |
|
1592 |
+ // Save the Display Name |
|
1593 |
+ $("#saveDispName").click(function() { |
|
1594 |
+ |
|
1595 |
+ var dispNmText = $("#saveDispNmText").val(); |
|
1596 |
+ |
|
1597 |
+ if (/^[a-zA-Z0-9\s\-\/\.\)\(\']+$/.test(dispNmText) && dispNmText.length < 256) { |
|
1598 |
+ |
|
1599 |
+ var saveDispNameUrl = OC.generateUrl("/apps/sms_relentless/user/savedisplayname"); |
|
1600 |
+ |
|
1601 |
+ $.ajax({ |
|
1602 |
+ url: saveDispNameUrl + '/' + userid, |
|
1603 |
+ method: 'POST', |
|
1604 |
+ dataType:'text', |
|
1605 |
+ data: { |
|
1606 |
+ authorDisplayname: dispNmText, |
|
1607 |
+ from: slctPhoneNb |
|
1608 |
+ }, |
|
1609 |
+ success: function(respupdname) { |
|
1610 |
+ showAlert(respupdname); |
|
1611 |
+ $("#disNameWindow").remove(); |
|
1612 |
+ $("#recTblOverlay").remove(); |
|
1613 |
+ }, |
|
1614 |
+ error: function() { |
|
1615 |
+ showAlert("Error while attempting to save the new Display Name to the database."); |
|
1616 |
+ $("#disNameWindow").remove(); |
|
1617 |
+ $("#recTblOverlay").remove(); |
|
1618 |
+ } |
|
1619 |
+ }); |
|
1620 |
+ |
|
1621 |
+ } else { |
|
1622 |
+ showAlert("The Display Name should contain only letters, numbers, spaces, hyphens (-), slashes (/), periods (.), round brackets ()() and single quotation marks ('), it should not be empty and should have less than 256 characters."); |
|
1623 |
+ } |
|
1624 |
+ }); |
|
1625 |
+ |
|
1626 |
+ }); |
|
1627 |
+ |
|
1628 |
+ |
|
1629 |
+ // Add pagination |
|
1630 |
+ var rowsShown = messagesperpage; |
|
1631 |
+ var rowsTotal = $("#recSmsTable tr").length; |
|
1632 |
+ |
|
1633 |
+ var numPages = (rowsTotal - 2) / rowsShown; |
|
1634 |
+ |
|
1635 |
+ for (i = 0; i < numPages; i++) { |
|
1636 |
+ var pageNum = i + 1; |
|
1637 |
+ $('#paginationrec').append('<a href="#" rel="' + i + '" class="pagenumbersrec">' + pageNum + '</a> '); |
|
1638 |
+ } |
|
1639 |
+ |
|
1640 |
+ $('#paginationrec').children(":first").addClass('active'); |
|
1641 |
+ |
|
1642 |
+ $('#paginationrec a:first').addClass('active'); |
|
1643 |
+ |
|
1644 |
+ // Show table page when clicking a page number |
|
1645 |
+ $('.recpages a').bind('click', function() { |
|
1646 |
+ |
|
1647 |
+ $('#paginationrec').children().removeClass('active'); |
|
1648 |
+ |
|
1649 |
+ $(this).addClass('active'); |
|
1650 |
+ |
|
1651 |
+ var currentPageNo = $(this).text(); |
|
1652 |
+ |
|
1653 |
+ $('#paginationrec a').each(function() { |
|
1654 |
+ if ($(this).text() == currentPageNo) { |
|
1655 |
+ $(this).addClass('active'); |
|
1656 |
+ } |
|
1657 |
+ }); |
|
1658 |
+ |
|
1659 |
+ // Sort table rows |
|
1660 |
+ var rows = $('#recSmsTable tr').get(); |
|
1661 |
+ |
|
1662 |
+ rows.sort(function(a, b) { |
|
1663 |
+ |
|
1664 |
+ var A = parseInt($('td.dbidcolumnrec', a).text()); |
|
1665 |
+ var B = parseInt($('td.dbidcolumnrec', b).text()); |
|
1666 |
+ |
|
1667 |
+ if (A < B) { |
|
1668 |
+ return -1; |
|
1669 |
+ } |
|
1670 |
+ |
|
1671 |
+ if (A > B) { |
|
1672 |
+ return 1; |
|
1673 |
+ } |
|
1674 |
+ |
|
1675 |
+ return 0; |
|
1676 |
+ }); |
|
1677 |
+ |
|
1678 |
+ $.each(rows, function(index, row) { |
|
1679 |
+ $('#recSmsTable').append(row); |
|
1680 |
+ }); |
|
1681 |
+ |
|
1682 |
+ var currPage = $(this).attr('rel'); |
|
1683 |
+ var startItem = currPage * rowsShown; |
|
1684 |
+ var endItem = startItem + rowsShown; |
|
1685 |
+ |
|
1686 |
+ $(".receivedrowsbody").hide().slice(startItem, endItem).css('display', 'table-row'); |
|
1687 |
+ |
|
1688 |
+ $('#totalrecmessages').remove(); |
|
1689 |
+ $('#smstables').append("<div id='totalrecmessages'>Total displayed messages: " + parseddata.length + "</div>"); |
|
1690 |
+ }); |
|
1691 |
+ |
|
1692 |
+ $('#paginationrec').children(":last").trigger('click'); |
|
1693 |
+ |
|
1694 |
+ // Select all records |
|
1695 |
+ $('#selectAllChckbx').change(function() { |
|
1696 |
+ if ($(this).is(':checked')) { |
|
1697 |
+ $(".indivchckbx").prop("checked", true); |
|
1698 |
+ } else { |
|
1699 |
+ $(".indivchckbx").prop("checked", false); |
|
1700 |
+ } |
|
1701 |
+ }); |
|
1702 |
+ |
|
1703 |
+ function reorderRecRows() { |
|
1704 |
+ var currenttext = $(".filterbuttonsrec").closest('[class="filterbuttonsrec"]').find('[class="indivfilterrec"]').text(); |
|
1705 |
+ if (currenttext == '') { |
|
1706 |
+ $('tr').sort(function (a, b) { |
|
1707 |
+ return parseInt($('td.dbidcolumnrec', b).text()) < parseInt($('td.dbidcolumnrec', a).text()); |
|
1708 |
+ }).appendTo("#recSmsTable"); |
|
1709 |
+ } |
|
1710 |
+ } |
|
1711 |
+ |
|
1712 |
+ // Filter rows |
|
1713 |
+ $("#databaseidfilter").on("click", function(event) { |
|
1714 |
+ |
|
1715 |
+ var databaseId = $("#dbidtextrec").val(); |
|
1716 |
+ var msgrowsNo = 0; |
|
1717 |
+ |
|
1718 |
+ $(".receivedrowsbody").each(function() { |
|
1719 |
+ |
|
1720 |
+ var checkrecEmpty1 = 0; |
|
1721 |
+ $(".indivfilterrec").not("#dbidtextrec").each(function() { |
|
1722 |
+ if ($(this).val() != '') { |
|
1723 |
+ checkrecEmpty1 = 1; |
|
1724 |
+ } |
|
1725 |
+ }); |
|
1726 |
+ |
|
1727 |
+ if (checkrecEmpty1 == 0) { |
|
1728 |
+ $(this).show(); |
|
1729 |
+ } |
|
1730 |
+ |
|
1731 |
+ if (databaseId != '') { |
|
1732 |
+ if ($(this).find('[class="dbidcolumnrec"]').text() == databaseId) { |
|
1733 |
+ $("#recSmsTable").append(this); |
|
1734 |
+ if ($(this).is(":visible")) { msgrowsNo++; } |
|
1735 |
+ } else { |
|
1736 |
+ $(this).hide(); |
|
1737 |
+ } |
|
1738 |
+ } else { |
|
1739 |
+ $(this).show(); |
|
1740 |
+ msgrowsNo++; |
|
1741 |
+ } |
|
1742 |
+ }); |
|
1743 |
+ |
|
1744 |
+ reorderRecRows(); |
|
1745 |
+ $('#totalrecmessages').remove(); |
|
1746 |
+ $('#smstables').append("<div id='totalrecmessages'>Total filtered messages: " + msgrowsNo + "</div>"); |
|
1747 |
+ }); |
|
1748 |
+ |
|
1749 |
+ |
|
1750 |
+ $("#useridfilter").on("click", function(event) { |
|
1751 |
+ |
|
1752 |
+ var useridtxt = $("#useridtextrec").val().toLowerCase(); |
|
1753 |
+ var msgrowsNo = 0; |
|
1754 |
+ |
|
1755 |
+ $(".receivedrowsbody").each(function() { |
|
1756 |
+ |
|
1757 |
+ var checkrecEmpty2 = 0; |
|
1758 |
+ $(".indivfilterrec").not("#useridtextrec").each(function() { |
|
1759 |
+ if ($(this).val() != '') { |
|
1760 |
+ checkrecEmpty2 = 1; |
|
1761 |
+ } |
|
1762 |
+ }); |
|
1763 |
+ |
|
1764 |
+ if (checkrecEmpty2 == 0) { |
|
1765 |
+ $(this).show(); |
|
1766 |
+ } |
|
1767 |
+ |
|
1768 |
+ if (useridtxt != '') { |
|
1769 |
+ var useridfound = $(this).find('[class="useridcolrec"]').text().toLowerCase(); |
|
1770 |
+ if(useridfound.indexOf(useridtxt) != -1) { |
|
1771 |
+ $("#recSmsTable").append(this); |
|
1772 |
+ if ($(this).is(":visible")) { msgrowsNo++; } |
|
1773 |
+ } else { |
|
1774 |
+ $(this).hide(); |
|
1775 |
+ } |
|
1776 |
+ } else { |
|
1777 |
+ $(this).show(); |
|
1778 |
+ msgrowsNo++; |
|
1779 |
+ } |
|
1780 |
+ }); |
|
1781 |
+ |
|
1782 |
+ reorderRecRows(); |
|
1783 |
+ $('#totalrecmessages').remove(); |
|
1784 |
+ $('#smstables').append("<div id='totalrecmessages'>Total filtered messages: " + msgrowsNo + "</div>"); |
|
1785 |
+ |
|
1786 |
+ }); |
|
1787 |
+ |
|
1788 |
+ $("#messageidfilter").on("click", function(event) { |
|
1789 |
+ |
|
1790 |
+ var messageidtxt = $("#messageidtextrec").val().toLowerCase(); |
|
1791 |
+ var msgrowsNo = 0; |
|
1792 |
+ |
|
1793 |
+ $(".receivedrowsbody").each(function() { |
|
1794 |
+ |
|
1795 |
+ var checkrecEmpty3 = 0; |
|
1796 |
+ $(".indivfilterrec").not("#messageidtextrec").each(function() { |
|
1797 |
+ if ($(this).val() != '') { |
|
1798 |
+ checkrecEmpty3 = 1; |
|
1799 |
+ } |
|
1800 |
+ }); |
|
1801 |
+ |
|
1802 |
+ if (checkrecEmpty3 == 0) { |
|
1803 |
+ $(this).show(); |
|
1804 |
+ } |
|
1805 |
+ |
|
1806 |
+ if (messageidtxt != '') { |
|
1807 |
+ var foundtdmssgid = $(this).find('[class="messageidcolrec"]').text().toLowerCase(); |
|
1808 |
+ if (foundtdmssgid.indexOf(messageidtxt) != -1) { |
|
1809 |
+ $("#recSmsTable").append(this); |
|
1810 |
+ if ($(this).is(":visible")) { msgrowsNo++; } |
|
1811 |
+ } else { |
|
1812 |
+ $(this).hide(); |
|
1813 |
+ } |
|
1814 |
+ } else { |
|
1815 |
+ $(this).show(); |
|
1816 |
+ msgrowsNo++; |
|
1817 |
+ } |
|
1818 |
+ }); |
|
1819 |
+ |
|
1820 |
+ reorderRecRows(); |
|
1821 |
+ $('#totalrecmessages').remove(); |
|
1822 |
+ $('#smstables').append("<div id='totalrecmessages'>Total filtered messages: " + msgrowsNo + "</div>"); |
|
1823 |
+ }); |
|
1824 |
+ |
|
1825 |
+ $("#datefilter").on("click", function(event) { |
|
1826 |
+ |
|
1827 |
+ var datetxtvr = $("#datetextrec").val().toLowerCase(); |
|
1828 |
+ var msgrowsNo = 0; |
|
1829 |
+ |
|
1830 |
+ $(".receivedrowsbody").each(function() { |
|
1831 |
+ |
|
1832 |
+ var checkrecEmpty4 = 0; |
|
1833 |
+ $(".indivfilterrec").not("#datetextrec").each(function() { |
|
1834 |
+ if ($(this).val() != '') { |
|
1835 |
+ checkrecEmpty4 = 1; |
|
1836 |
+ } |
|
1837 |
+ }); |
|
1838 |
+ |
|
1839 |
+ if (checkrecEmpty4 == 0) { |
|
1840 |
+ $(this).show(); |
|
1841 |
+ } |
|
1842 |
+ |
|
1843 |
+ if (datetxtvr != '') { |
|
1844 |
+ var founddate = $(this).find('[class="datecolrec"]').text().toLowerCase(); |
|
1845 |
+ if (founddate.indexOf(datetxtvr) != -1) { |
|
1846 |
+ $("#recSmsTable").append(this); |
|
1847 |
+ if ($(this).is(":visible")) { msgrowsNo++; } |
|
1848 |
+ } else { |
|
1849 |
+ $(this).hide(); |
|
1850 |
+ } |
|
1851 |
+ } else { |
|
1852 |
+ $(this).show(); |
|
1853 |
+ msgrowsNo++; |
|
1854 |
+ } |
|
1855 |
+ }); |
|
1856 |
+ |
|
1857 |
+ reorderRecRows(); |
|
1858 |
+ $('#totalrecmessages').remove(); |
|
1859 |
+ $('#smstables').append("<div id='totalrecmessages'>Total filtered messages: " + msgrowsNo + "</div>"); |
|
1860 |
+ }); |
|
1861 |
+ |
|
1862 |
+ $("#fromfilter").on("click", function(event) { |
|
1863 |
+ |
|
1864 |
+ var fromtxtvr = $("#fromtextrec").val().toLowerCase(); |
|
1865 |
+ var msgrowsNo = 0; |
|
1866 |
+ |
|
1867 |
+ $(".receivedrowsbody").each(function() { |
|
1868 |
+ |
|
1869 |
+ var checkrecEmpty5 = 0; |
|
1870 |
+ $(".indivfilterrec").not("#fromtextrec").each(function() { |
|
1871 |
+ if ($(this).val() != '') { |
|
1872 |
+ checkrecEmpty5 = 1; |
|
1873 |
+ } |
|
1874 |
+ }); |
|
1875 |
+ |
|
1876 |
+ if (checkrecEmpty5 == 0) { |
|
1877 |
+ $(this).show(); |
|
1878 |
+ } |
|
1879 |
+ |
|
1880 |
+ if (fromtxtvr != '') { |
|
1881 |
+ var foundfrom = $(this).find('[class="fromcolumnrec"]').text().toLowerCase(); |
|
1882 |
+ if (foundfrom.indexOf(fromtxtvr) != -1) { |
|
1883 |
+ $("#recSmsTable").append(this); |
|
1884 |
+ if ($(this).is(":visible")) { msgrowsNo++; } |
|
1885 |
+ } else { |
|
1886 |
+ $(this).hide(); |
|
1887 |
+ } |
|
1888 |
+ } else { |
|
1889 |
+ $(this).show(); |
|
1890 |
+ msgrowsNo++; |
|
1891 |
+ } |
|
1892 |
+ }); |
|
1893 |
+ |
|
1894 |
+ reorderRecRows(); |
|
1895 |
+ $('#totalrecmessages').remove(); |
|
1896 |
+ $('#smstables').append("<div id='totalrecmessages'>Total filtered messages: " + msgrowsNo + "</div>"); |
|
1897 |
+ }); |
|
1898 |
+ |
|
1899 |
+ $("#tofilter").on("click", function(event) { |
|
1900 |
+ |
|
1901 |
+ var totxtvr = $("#totextrec").val().toLowerCase(); |
|
1902 |
+ var msgrowsNo = 0; |
|
1903 |
+ |
|
1904 |
+ $(".receivedrowsbody").each(function() { |
|
1905 |
+ |
|
1906 |
+ var checkrecEmpty6 = 0; |
|
1907 |
+ $(".indivfilterrec").not("#totextrec").each(function() { |
|
1908 |
+ if ($(this).val() != '') { |
|
1909 |
+ checkrecEmpty6 = 1; |
|
1910 |
+ } |
|
1911 |
+ }); |
|
1912 |
+ |
|
1913 |
+ if (checkrecEmpty6 == 0) { |
|
1914 |
+ $(this).show(); |
|
1915 |
+ } |
|
1916 |
+ |
|
1917 |
+ if (totxtvr != '') { |
|
1918 |
+ var foundto = $(this).find('[class="tocolrec"]').text().toLowerCase(); |
|
1919 |
+ if (foundto.indexOf(totxtvr) != -1) { |
|
1920 |
+ $("#recSmsTable").append(this); |
|
1921 |
+ if ($(this).is(":visible")) { msgrowsNo++; } |
|
1922 |
+ } else { |
|
1923 |
+ $(this).hide(); |
|
1924 |
+ } |
|
1925 |
+ } else { |
|
1926 |
+ $(this).show(); |
|
1927 |
+ msgrowsNo++; |
|
1928 |
+ } |
|
1929 |
+ }); |
|
1930 |
+ |
|
1931 |
+ reorderRecRows(); |
|
1932 |
+ $('#totalrecmessages').remove(); |
|
1933 |
+ $('#smstables').append("<div id='totalrecmessages'>Total filtered messages: " + msgrowsNo + "</div>"); |
|
1934 |
+ }); |
|
1935 |
+ |
|
1936 |
+ $("#messagefilter").on("click", function(event) { |
|
1937 |
+ |
|
1938 |
+ var messagetxtvr = $("#messagetextrec").val().toLowerCase(); |
|
1939 |
+ var msgrowsNo = 0; |
|
1940 |
+ |
|
1941 |
+ $(".receivedrowsbody").each(function() { |
|
1942 |
+ |
|
1943 |
+ var checkrecEmpty7 = 0; |
|
1944 |
+ $(".indivfilterrec").not("#messagetextrec").each(function() { |
|
1945 |
+ if ($(this).val() != '') { |
|
1946 |
+ checkrecEmpty7 = 1; |
|
1947 |
+ } |
|
1948 |
+ }); |
|
1949 |
+ |
|
1950 |
+ if (checkrecEmpty7 == 0) { |
|
1951 |
+ $(this).show(); |
|
1952 |
+ } |
|
1953 |
+ |
|
1954 |
+ if (messagetxtvr != '') { |
|
1955 |
+ var foundmessage = $(this).find('[class="messagecolumnrec"]').text().toLowerCase(); |
|
1956 |
+ if (foundmessage.indexOf(messagetxtvr) != -1) { |
|
1957 |
+ $("#recSmsTable").append(this); |
|
1958 |
+ if ($(this).is(":visible")) { msgrowsNo++; } |
|
1959 |
+ } else { |
|
1960 |
+ $(this).hide(); |
|
1961 |
+ } |
|
1962 |
+ } else { |
|
1963 |
+ $(this).show(); |
|
1964 |
+ msgrowsNo++; |
|
1965 |
+ } |
|
1966 |
+ }); |
|
1967 |
+ |
|
1968 |
+ reorderRecRows(); |
|
1969 |
+ $('#totalrecmessages').remove(); |
|
1970 |
+ $('#smstables').append("<div id='totalrecmessages'>Total filtered messages: " + msgrowsNo + "</div>"); |
|
1971 |
+ }); |
|
1972 |
+ |
|
1973 |
+ // Clear all filters |
|
1974 |
+ $("#clearrecfilters").on("click", function(event) { |
|
1975 |
+ $(".receivedrowsbody").each(function() { |
|
1976 |
+ $(this).show(); |
|
1977 |
+ }); |
|
1978 |
+ $(".indivfilterrec").val(""); |
|
1979 |
+ $('#totalrecmessages').remove(); |
|
1980 |
+ $('#smstables').append("<div id='totalrecmessages'>Total displayed messages: " + parseddata.length + "</div>"); |
|
1981 |
+ }); |
|
1982 |
+ |
|
1983 |
+ // Delete selected rows from the database |
|
1984 |
+ $("#deleterecrows").on("click", function() { |
|
1985 |
+ var checkcheckbx = jQuery("#recSmsTable input[type=checkbox]:checked").length; |
|
1986 |
+ if (checkcheckbx == 0) { |
|
1987 |
+ showAlert("Please select the row(s) to permanently delete from the database !"); |
|
1988 |
+ } else { |
|
1989 |
+ var checkboxIds = []; |
|
1990 |
+ $(".receivedrowsbody").each(function() { |
|
1991 |
+ var rowcheckbx = $(this).find('input[type="checkbox"]'); |
|
1992 |
+ if (rowcheckbx.is(":checked")) { |
|
1993 |
+ var dbrowid = $(this).find('[class="dbidcolumnrec"]').text(); |
|
1994 |
+ checkboxIds.push(dbrowid); |
|
1995 |
+ } |
|
1996 |
+ }); |
|
1997 |
+ |
|
1998 |
+ confirmAlert("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'."); |
|
1999 |
+ |
|
2000 |
+ $("#confirmCancel").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); }); |
|
2001 |
+ |
|
2002 |
+ $("#confirmOk").click(function() { |
|
2003 |
+ |
|
2004 |
+ $("#alertMsgOverlay").remove(); |
|
2005 |
+ $("#alertConfMessage").remove(); |
|
2006 |
+ |
|
2007 |
+ var deleterecRowsUrl = OC.generateUrl("/apps/sms_relentless/user/removerecrows"); |
|
2008 |
+ $('#smstables').addClass('icon-loading'); |
|
2009 |
+ |
|
2010 |
+ $.ajax({ |
|
2011 |
+ url: deleterecRowsUrl + '/' + userid, |
|
2012 |
+ method: "POST", |
|
2013 |
+ dataType:'text', |
|
2014 |
+ data: {recmessagedbIDs: checkboxIds}, |
|
2015 |
+ success: function() { |
|
2016 |
+ showAlert("The row(s) have been deleted successfully !"); |
|
2017 |
+ $('#smstables').removeClass('icon-loading'); |
|
2018 |
+ $('#receivedsmstableshow').click(); |
|
2019 |
+ }, |
|
2020 |
+ error: function() { |
|
2021 |
+ showAlert("There was an error while deleting the selected row(s) !"); |
|
2022 |
+ $('#smstables').removeClass('icon-loading'); |
|
2023 |
+ } |
|
2024 |
+ }); |
|
2025 |
+ }); |
|
2026 |
+ |
|
2027 |
+ } |
|
2028 |
+ }); |
|
2029 |
+ |
|
2030 |
+ |
|
2031 |
+ // Show/Hide filter row |
|
2032 |
+ $('#recarrow').on('click', function() { |
|
2033 |
+ if ($('#recfiltersrow').is(':visible')) { |
|
2034 |
+ $('#recfiltersrow').hide(); |
|
2035 |
+ $('#recheaderrow').css('top', '0px'); |
|
2036 |
+ $(this).removeClass('arrowUpCl'); |
|
2037 |
+ $(this).addClass('arrowDownCl'); |
|
2038 |
+ } else { |
|
2039 |
+ $('#recfiltersrow').show(); |
|
2040 |
+ $('#recheaderrow').css('top', '158px'); |
|
2041 |
+ $(this).removeClass('arrowDownCl'); |
|
2042 |
+ $(this).addClass('arrowUpCl'); |
|
2043 |
+ } |
|
2044 |
+ }); |
|
2045 |
+ |
|
2046 |
+ $("#app-content").animate({scrollTop:$("#recSmsTable").prop("scrollHeight")},200); |
|
2047 |
+ }, |
|
2048 |
+ error: function(recdatafromdb) { |
|
2049 |
+ showAlert("Error. You can check the Nextcloud log to find more details about this issue."); |
|
2050 |
+ $('#smstables').removeClass('icon-loading'); |
|
2051 |
+ } |
|
2052 |
+ }); |
|
2053 |
+ |
|
2054 |
+ }); |
|
2055 |
+ |
|
2056 |
+ |
|
2057 |
+ // List sent messages |
|
2058 |
+ $("#sentsmstableshow").on("click", function(event) { |
|
2059 |
+ |
|
2060 |
+ $('#smstables').empty(); |
|
2061 |
+ |
|
2062 |
+ var getSentUrl = OC.generateUrl("/apps/sms_relentless/user/getsenttable"); |
|
2063 |
+ $('#smstables').addClass('icon-loading'); |
|
2064 |
+ |
|
2065 |
+ $.ajax({ |
|
2066 |
+ url: getSentUrl + '/' + userid, |
|
2067 |
+ method: "GET", |
|
2068 |
+ contentType: 'application/json', |
|
2069 |
+ success: function(sentdatafdb) { |
|
2070 |
+ |
|
2071 |
+ var sentparseddata = sentdatafdb.datarows; |
|
2072 |
+ |
|
2073 |
+ $('#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>"); |
|
2074 |
+ $('#smstables').append("<table id='sentSmsTable'></table>"); |
|
2075 |
+ $('#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’s 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’s 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>"); |
|
2076 |
+ $('#sentSmsTable').append("<tr class='sentrows' id='sentheaderrow'><th id='selectalldv' class='selectsmsdv'><input type='checkbox' id='selectAllChckbx' class ='indivchckbx' title='Select all rows.' /></th><th title='The database ID of each message.'>ID</th><th>User ID</th><th>Message ID</th><th>Date</th><th>From</th><th>To</th><th title='When a 5 or 6 digits code appears in this column, the first 3 digits specify the mobile country code and the last 2 or 3 digits specify the mobile network code of the receiver. You can look up the mobile country code and then the mobile network code on https://en.wikipedia.org/wiki/Mobile_country_code#National_operators'>Network</th><th title=\"The currency is the currency configured in the client account, on the SMS provider's website.\">Price</th><th id='sentstatuscolumn' title=\"This column generally shows the status received from the recipient's carrier, or any errors generated when attempting to send the message.\">Status</th><th title='Not all delivery receipts guarantee that the target received the message. Some delivery receipts represent successful completion of just one step in the delivery process, such as transmitting the message to another telephony operator.'>Delivery<br>Receit</th><th>Sent Message</th></tr>"); |
|
2077 |
+ |
|
2078 |
+ $('#sentfiltersrow').hide(); |
|
2079 |
+ |
|
2080 |
+ if (sentdatafdb.showdispnm == 1) { |
|
2081 |
+ |
|
2082 |
+ for (var i = 0; i < sentparseddata.length; i++) { |
|
2083 |
+ |
|
2084 |
+ if (sentparseddata[i].author_displayname) { |
|
2085 |
+ var procmessage = "<span class='messageAuthorName'>"+ sentparseddata[i].author_displayname + ":</span>" + sentparseddata[i].message +"<div id='showMsgConv-"+ i +"' class='lstMsgConv'><img class='lstMsgConvImg' src='/apps/sms_relentless/img/reply.svg' title='Show all the messages exchanged between the current 2 phone numbers.'></div>"; |
|
2086 |
+ } else { |
|
2087 |
+ var procmessage = sentparseddata[i].message +"<div id='showMsgConv-"+ i +"' class='lstMsgConv'><img class='lstMsgConvImg' src='/apps/sms_relentless/img/reply.svg' title='Show all the messages exchanged between the current 2 phone numbers.'></div>"; |
|
2088 |
+ } |
|
2089 |
+ |
|
2090 |
+ var procsentFrom = "<div id='frmNmbr-"+ i +"'>"+ sentparseddata[i].from +"<div id='showMsgFrom-"+ i +"' class='listToFromMsgs'><img class='lstMsgToFromImg' src='/apps/sms_relentless/img/list.svg' title='Show all the messages sent/received to/from this phone number, that I am allowed to see.'></div></div>"; |
|
2091 |
+ |
|
2092 |
+ var procsentTo = "<div id='toNmbr-"+ i +"'>"+ sentparseddata[i].to +"<div id='showMsgTo-"+ i +"' class='listToFromMsgs'><img class='lstMsgToFromImg' src='/apps/sms_relentless/img/list.svg' title='Show all the messages sent/received to/from this phone number, that I am allowed to see.'></div></div>"; |
|
2093 |
+ |
|
2094 |
+ $('#sentSmsTable').append("<tr id='singlerow_"+ i +"' class='sentrowsbody'><td class='selectsmsdv'><input type='checkbox' id='selectspec_"+ i +"' class='indivchckbx' /></td><td class='sentdbidcolumn'>"+ sentparseddata[i].id +"</td><td class='useridcolsent'>"+ sentparseddata[i].user_id +"</td><td class='messageidcolsent'>"+ sentparseddata[i].message_id +"</td><td class='datecolsent'>"+ sentparseddata[i].date +"</td><td class='fromcolumnsent'>"+ procsentFrom +"</td><td class='tocolumnsent'>"+ procsentTo +"</td><td class='networkcolumnsent'>"+ sentparseddata[i].network +"</td><td class='pricecolumnsent'>"+ sentparseddata[i].price +"</td><td class='statuscolumnsent'>"+ sentparseddata[i].status +"</td><td class='deliveryrcptcolsent'>"+ sentparseddata[i].deliveryreceipt +"</td><td class='messagecolumnsent'>"+ procmessage +"</td></tr>"); |
|
2095 |
+ } |
|
2096 |
+ |
|
2097 |
+ } else { |
|
2098 |
+ |
|
2099 |
+ for (var i = 0; i < sentparseddata.length; i++) { |
|
2100 |
+ |
|
2101 |
+ var procmessage = sentparseddata[i].message +"<div id='showMsgConv-"+ i +"' class='lstMsgConv'><img class='lstMsgConvImg' src='/apps/sms_relentless/img/reply.svg' title='Show all the messages exchanged between the current 2 phone numbers.'></div>"; |
|
2102 |
+ |
|
2103 |
+ var procsentFrom = "<div id='frmNmbr-"+ i +"'>"+ sentparseddata[i].from +"<div id='showMsgFrom-"+ i +"' class='listToFromMsgs'><img class='lstMsgToFromImg' src='/apps/sms_relentless/img/list.svg' title='Show all the messages sent/received to/from this phone number, that I am allowed to see.'></div></div>"; |
|
2104 |
+ |
|
2105 |
+ var procsentTo = "<div id='toNmbr-"+ i +"'>"+ sentparseddata[i].to +"<div id='showMsgTo-"+ i +"' class='listToFromMsgs'><img class='lstMsgToFromImg' src='/apps/sms_relentless/img/list.svg' title='Show all the messages sent/received to/from this phone number, that I am allowed to see.'></div></div>"; |
|
2106 |
+ |
|
2107 |
+ $('#sentSmsTable').append("<tr id='singlerow_"+ i +"' class='sentrowsbody'><td class='selectsmsdv'><input type='checkbox' id='selectspec_"+ i +"' class='indivchckbx' /></td><td class='sentdbidcolumn'>"+ sentparseddata[i].id +"</td><td class='useridcolsent'>"+ sentparseddata[i].user_id +"</td><td class='messageidcolsent'>"+ sentparseddata[i].message_id +"</td><td class='datecolsent'>"+ sentparseddata[i].date +"</td><td class='fromcolumnsent'>"+ procsentFrom +"</td><td class='tocolumnsent'>"+ procsentTo +"</td><td class='networkcolumnsent'>"+ sentparseddata[i].network +"</td><td class='pricecolumnsent'>"+ sentparseddata[i].price +"</td><td class='statuscolumnsent'>"+ sentparseddata[i].status +"</td><td class='deliveryrcptcolsent'>"+ sentparseddata[i].deliveryreceipt +"</td><td class='messagecolumnsent'>"+ procmessage +"</td></tr>"); |
|
2108 |
+ } |
|
2109 |
+ } |
|
2110 |
+ |
|
2111 |
+ $('#smstables').append("<div id='totalsentmessages'><span>Total displayed messages: " + sentparseddata.length + "</span></div>"); |
|
2112 |
+ |
|
2113 |
+ $('#smstables').removeClass('icon-loading'); |
|
2114 |
+ |
|
2115 |
+ $('#sentarrow').removeClass('arrowUpCl'); |
|
2116 |
+ $('#sentarrow').addClass('arrowDownCl'); |
|
2117 |
+ |
|
2118 |
+ |
|
2119 |
+ // Show the pop-up window that lists all the messages exchanged between the current 2 phone numbers |
|
2120 |
+ function showSentMsgPerConv(phNumberFrom, phNumberTo) { |
|
2121 |
+ |
|
2122 |
+ let allfrmtomsg = "<div id='listAllMsgsConv'>"; |
|
2123 |
+ allfrmtomsg += "<div id='draglstMsgmWindow'><img src='/apps/sms_relentless/img/dots.svg'></div>"; |
|
2124 |
+ allfrmtomsg += "<a id='closeFrmMsgWindow' title='Close this window'></a>"; |
|
2125 |
+ allfrmtomsg += "<div class='showByNmbrTitle'>Messages exchanged between <span style='color:#04957b'>"+ phNumberFrom +"</span> and <span style='color:#04957b'>"+ phNumberTo +"</span></div>"; |
|
2126 |
+ allfrmtomsg += "<div id='frmMsgLstWrap'>"; |
|
2127 |
+ allfrmtomsg += "<table id='frmMsgLstTbl'>"; |
|
2128 |
+ allfrmtomsg += "<tr class='groupedrowsbody'><td><div id='grpdbynamelst' class='groupedLstNamespn'></div></td><td><div id='loadMoreMsgs' title='Click to load older messages.'>Load more messages</div><div id='loadMoreMsgsusr' title='Click to load older messages.'>Load more messages</div><div id='msgListRowCell' class='groupedLstMsgspn'></div><div id='arrowupWrap'><div id='upArrowSmall' title='Scroll to the top'></div></div></td></tr>"; |
|
2129 |
+ allfrmtomsg += "</table></div>"; |
|
2130 |
+ allfrmtomsg += "<div id='sendMsgReply'><table id='sendMsgConv'><tr><td><div id='fromPhoneNmbrConv'>From: <select id='selectFromNbConv'></select></div><div id='toPhoneNmbrConv'>To: <span id='toNmbrConv' style='color:#04957b'>"+ phNumberTo +"</span></div></td></tr>"; |
|
2131 |
+ allfrmtomsg += "<tr><td><textarea id='sendMsgConvText' placeholder='Enter a message here, then press Send SMS'></textarea></td></tr></table>"; |
|
2132 |
+ allfrmtomsg += "<div id='sendMsgConvBtn'>Send SMS</div></div>"; |
|
2133 |
+ allfrmtomsg += "<div style='display:block;width:100%;height:14px;'><img id='expandWindowRpl' src='/apps/sms_relentless/img/arrowDown.svg' title='Expand to send a reply'></div>"; |
|
2134 |
+ allfrmtomsg += "<div id='draglstMsgmWindowsc'><img src='/apps/sms_relentless/img/dots.svg' style='padding:4px;vertical-align:top;'></div>"; |
|
2135 |
+ allfrmtomsg += "</div>"; |
|
2136 |
+ |
|
2137 |
+ $("#content").append("<div id='recTblOverlay'></div>"); |
|
2138 |
+ $("#content").append(allfrmtomsg); |
|
2139 |
+ |
|
2140 |
+ let topDist = parseInt((window.innerHeight / 2).toFixed(2) - 340) +"px"; |
|
2141 |
+ let leftDist = parseInt((window.innerWidth / 2).toFixed(2) - 300) +"px"; |
|
2142 |
+ $("#listAllMsgsConv").css({ "top" : topDist, "left" : leftDist }); |
|
2143 |
+ |
|
2144 |
+ $("#closeFrmMsgWindow").click(function() { $("#listAllMsgsConv").remove(); $("#recTblOverlay").remove(); }); |
|
2145 |
+ $("#recTblOverlay").click(function() { $("#listAllMsgsConv").remove(); $("#recTblOverlay").remove(); }); |
|
2146 |
+ |
|
2147 |
+ // Expand the window when clicking on the arrow, to be able to send a reply message |
|
2148 |
+ $("#expandWindowRpl").click(function() { |
|
2149 |
+ |
|
2150 |
+ if ($(this).attr('src') == '/apps/sms_relentless/img/arrowDown.svg') { |
|
2151 |
+ $("#sendMsgReply").css("display", "block"); |
|
2152 |
+ $("#listAllMsgsConv").css("height", "618px"); |
|
2153 |
+ $(this).attr('src', '/apps/sms_relentless/img/arrowUp.svg'); |
|
2154 |
+ $(this).attr('title', 'Collapse'); |
|
2155 |
+ } else { |
|
2156 |
+ $("#sendMsgReply").css("display", "none"); |
|
2157 |
+ $("#listAllMsgsConv").css("height", "490px"); |
|
2158 |
+ $(this).attr('src', '/apps/sms_relentless/img/arrowDown.svg'); |
|
2159 |
+ $(this).attr('title', 'Expand to send a reply'); |
|
2160 |
+ } |
|
2161 |
+ }); |
|
2162 |
+ |
|
2163 |
+ // Send a message from the 'conversation' window |
|
2164 |
+ $("#sendMsgConvBtn").click(function() { |
|
2165 |
+ |
|
2166 |
+ $("#sendMsgConv,#sendMsgConvBtn").addClass('icon-loading'); |
|
2167 |
+ var msgToSend = $("#sendMsgConvText").val(); |
|
2168 |
+ var selectedid = $("#selectFromNbConv").val(); |
|
2169 |
+ var toNumber = $("#toNmbrConv").text(); |
|
2170 |
+ var receiversNumbers = [toNumber]; |
|
2171 |
+ |
|
2172 |
+ if (selectedid != '') { |
|
2173 |
+ |
|
2174 |
+ var sendersplit = selectedid.split(":"); |
|
2175 |
+ var providercap = sendersplit[0]; |
|
2176 |
+ var provsec = sendersplit[1]; |
|
2177 |
+ |
|
2178 |
+ if (/[a-zA-Z]/.test(provsec)) { |
|
2179 |
+ var alphanumcheck = true; |
|
2180 |
+ } else { var alphanumcheck = false; } |
|
2181 |
+ |
|
2182 |
+ if (providercap == 'Tx' && alphanumcheck == false) { |
|
2183 |
+ var senderproc = selectedid.replace(/[^0-9]/g, ""); |
|
2184 |
+ var selectedsender = "+" + senderproc; |
|
2185 |
+ var providerUsed = "telnyx"; |
|
2186 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstel"); |
|
2187 |
+ } else if (providercap == 'Pl' && alphanumcheck == false) { |
|
2188 |
+ var selectedsender = selectedid.replace(/[^0-9]/g, ""); |
|
2189 |
+ var providerUsed = "plivo"; |
|
2190 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsnex"); |
|
2191 |
+ } else if (providercap == 'Tw' && alphanumcheck == false) { |
|
2192 |
+ var senderproc = selectedid.replace(/[^0-9]/g, ""); |
|
2193 |
+ var selectedsender = "+" + senderproc; |
|
2194 |
+ var providerUsed = "twilio"; |
|
2195 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstwil"); |
|
2196 |
+ } else if (providercap == 'Fl' && alphanumcheck == false) { |
|
2197 |
+ var senderproc = selectedid.replace(/[^0-9]/g, ""); |
|
2198 |
+ var selectedsender = "+" + senderproc; |
|
2199 |
+ var providerUsed = "flowroute"; |
|
2200 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsflow"); |
|
2201 |
+ } else if (providercap == 'Tx' && alphanumcheck == true) { |
|
2202 |
+ var selectedsender = provsec; |
|
2203 |
+ var providerUsed = "telnyx"; |
|
2204 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstel"); |
|
2205 |
+ } else if (providercap == 'Pl' && alphanumcheck == true) { |
|
2206 |
+ var selectedsender = provsec; |
|
2207 |
+ var providerUsed = "plivo"; |
|
2208 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsnex"); |
|
2209 |
+ } else if (providercap == 'Tw' && alphanumcheck == true) { |
|
2210 |
+ var selectedsender = provsec; |
|
2211 |
+ var providerUsed = "twilio"; |
|
2212 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstwil"); |
|
2213 |
+ } else if (providercap == 'Fl' && alphanumcheck == true) { |
|
2214 |
+ var selectedsender = provsec; |
|
2215 |
+ var providerUsed = "flowroute"; |
|
2216 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsflow"); |
|
2217 |
+ } |
|
2218 |
+ |
|
2219 |
+ var uploadedtomms = []; |
|
2220 |
+ |
|
2221 |
+ if (msgToSend != '') { |
|
2222 |
+ |
|
2223 |
+ $.ajax({ |
|
2224 |
+ url: relbaseUrl + '/' + userid, |
|
2225 |
+ type: "POST", |
|
2226 |
+ data: { |
|
2227 |
+ receiversPhoneNbs: receiversNumbers, |
|
2228 |
+ fromsender: selectedsender, |
|
2229 |
+ waitinterval: 1000, |
|
2230 |
+ sentsmstext: msgToSend, |
|
2231 |
+ ismms: 0, |
|
2232 |
+ mmsfiles: uploadedtomms |
|
2233 |
+ }, |
|
2234 |
+ success: function(displayname) { |
|
2235 |
+ |
|
2236 |
+ var tzdate = new Date(); |
|
2237 |
+ var presDatest = new Date(tzdate.getTime() - (tzdate.getTimezoneOffset() * 60000)).toJSON(); |
|
2238 |
+ var presDatedb = presDatest.split(".")[0]; |
|
2239 |
+ var presDatesc = presDatedb.split("T"); |
|
2240 |
+ var presDate = presDatesc[0] +" "+ presDatesc[1]; |
|
2241 |
+ var sentMessageStatus = ''; |
|
2242 |
+ |
|
2243 |
+ if (displayname) { |
|
2244 |
+ var msgToSendproc = "<span class='msgAuthorNameGrp'>"+ displayname + ":</span>" + msgToSend; |
|
2245 |
+ } else { var msgToSendproc = ''; } |
|
2246 |
+ |
|
2247 |
+ $("#msgListRowCell").append("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ selectedsender +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ receiversNumbers[0] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ msgToSendproc +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ presDate +"</div><div class='sentMssgStatus'>"+ sentMessageStatus +"</div></div>"); |
|
2248 |
+ |
|
2249 |
+ // Scroll down to the bottom of the window |
|
2250 |
+ $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); |
|
2251 |
+ |
|
2252 |
+ $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); |
|
2253 |
+ }, |
|
2254 |
+ error: function() { |
|
2255 |
+ showAlert("Error while sending the message. You can check your Nextcloud log to find out more about this issue."); |
|
2256 |
+ $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); |
|
2257 |
+ } |
|
2258 |
+ }); |
|
2259 |
+ } else { |
|
2260 |
+ showAlert("Please enter a message in the text box!"); |
|
2261 |
+ $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); |
|
2262 |
+ } |
|
2263 |
+ } else { |
|
2264 |
+ showAlert("Please choose a Sender ID from the 'From' drop-down list!"); |
|
2265 |
+ $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); |
|
2266 |
+ } |
|
2267 |
+ |
|
2268 |
+ }); |
|
2269 |
+ |
|
2270 |
+ |
|
2271 |
+ // Make the window draggable |
|
2272 |
+ function makeMgrWndDraggable(e) { |
|
2273 |
+ |
|
2274 |
+ window.pmdragging = {}; |
|
2275 |
+ pmdragging.pageX0 = e.pageX; |
|
2276 |
+ pmdragging.pageY0 = e.pageY; |
|
2277 |
+ pmdragging.elem = $("#listAllMsgsConv"); |
|
2278 |
+ pmdragging.offset0 = $("#listAllMsgsConv").offset(); |
|
2279 |
+ |
|
2280 |
+ function handle_dragging(e) { |
|
2281 |
+ let left = pmdragging.offset0.left + (e.pageX - pmdragging.pageX0); |
|
2282 |
+ let top = pmdragging.offset0.top + (e.pageY - pmdragging.pageY0); |
|
2283 |
+ $(pmdragging.elem).offset({top: top, left: left}); |
|
2284 |
+ } |
|
2285 |
+ |
|
2286 |
+ function handle_mouseup(e) { |
|
2287 |
+ $('body').off('mousemove', handle_dragging).off('mouseup', handle_mouseup); |
|
2288 |
+ } |
|
2289 |
+ |
|
2290 |
+ $('body').on('mouseup', handle_mouseup).on('mousemove', handle_dragging); |
|
2291 |
+ } |
|
2292 |
+ $("#draglstMsgmWindow").mousedown(makeMgrWndDraggable); |
|
2293 |
+ $("#draglstMsgmWindowsc").mousedown(makeMgrWndDraggable); |
|
2294 |
+ |
|
2295 |
+ |
|
2296 |
+ // Append the available phone numbers to the From drop-down list |
|
2297 |
+ var availPhoneNmbrs = []; |
|
2298 |
+ $("#currentsmsnmbrs .optselectsmsnb").each(function() { |
|
2299 |
+ var crtphnmbr = $(this).attr("value"); |
|
2300 |
+ if (crtphnmbr != "") { availPhoneNmbrs.push(crtphnmbr); } |
|
2301 |
+ }); |
|
2302 |
+ |
|
2303 |
+ if (availPhoneNmbrs.length > 0) { |
|
2304 |
+ var avphopt = ""; |
|
2305 |
+ for (let d = 0; d < availPhoneNmbrs.length; d++) { |
|
2306 |
+ if (availPhoneNmbrs[d].indexOf(phNumberFrom) === -1) { |
|
2307 |
+ avphopt += "<option value='"+ availPhoneNmbrs[d] +"'>"+ availPhoneNmbrs[d] +"</option>"; |
|
2308 |
+ } else { |
|
2309 |
+ avphopt += "<option value='"+ availPhoneNmbrs[d] +"' selected>"+ availPhoneNmbrs[d] +"</option>"; |
|
2310 |
+ } |
|
2311 |
+ } |
|
2312 |
+ $("#selectFromNbConv").append(avphopt); |
|
2313 |
+ |
|
2314 |
+ } else { $("#selectFromNbConv").append("<option value='' selected>No IDs</option>"); } |
|
2315 |
+ |
|
2316 |
+ |
|
2317 |
+ // Get the sent/received messages for the current phone number, from the database |
|
2318 |
+ let getGrpConvUrl = OC.generateUrl("/apps/sms_relentless/user/getgroupedforreply"); |
|
2319 |
+ |
|
2320 |
+ $('#listAllMsgsConv').addClass('icon-loading'); |
|
2321 |
+ let totalPhNmbrs = 0; |
|
2322 |
+ |
|
2323 |
+ $.ajax({ |
|
2324 |
+ method: 'POST', |
|
2325 |
+ url: getGrpConvUrl + '/' + userid, |
|
2326 |
+ contentType: 'application/json', |
|
2327 |
+ data: JSON.stringify({ phoneNmbrFrom: phNumberFrom, phoneNmbrTo: phNumberTo }), |
|
2328 |
+ success: function(groupedperconv) { |
|
2329 |
+ |
|
2330 |
+ $('#listAllMsgsConv').removeClass('icon-loading'); |
|
2331 |
+ |
|
2332 |
+ let fromtoNmbrsData = []; |
|
2333 |
+ |
|
2334 |
+ for (let i = 0; i < groupedperconv.length; i++) { |
|
2335 |
+ |
|
2336 |
+ if (groupedperconv[i].author_displayname) { |
|
2337 |
+ var authordnm = groupedperconv[i].author_displayname; |
|
2338 |
+ } else { |
|
2339 |
+ var authordnm = ''; |
|
2340 |
+ } |
|
2341 |
+ |
|
2342 |
+ var sentfromnmbrarr = groupedperconv[i].from.split("+"); |
|
2343 |
+ if (sentfromnmbrarr[1]) { |
|
2344 |
+ var groupednbfrom = "+"+ sentfromnmbrarr[1]; |
|
2345 |
+ } else { |
|
2346 |
+ var groupednbfrom = sentfromnmbrarr[0]; |
|
2347 |
+ } |
|
2348 |
+ |
|
2349 |
+ var modmessagerec = ''; |
|
2350 |
+ if (groupedperconv[i].author_displayname) { |
|
2351 |
+ modmessagerec = "<span class='msgAuthorNameGrp'>"+ groupedperconv[i].author_displayname + ":</span>" + groupedperconv[i].message; |
|
2352 |
+ } else { |
|
2353 |
+ modmessagerec = groupedperconv[i].message; |
|
2354 |
+ } |
|
2355 |
+ |
|
2356 |
+ if (groupedperconv[i].to.indexOf(": ") > -1) { |
|
2357 |
+ var groupednmbrtopre = groupedperconv[i].to.split(": "); |
|
2358 |
+ var groupednmbrto = groupednmbrtopre[1]; |
|
2359 |
+ } else { |
|
2360 |
+ var groupednmbrto = groupedperconv[i].to; |
|
2361 |
+ } |
|
2362 |
+ |
|
2363 |
+ fromtoNmbrsData.push({ |
|
2364 |
+ 'author_displayname': authordnm, |
|
2365 |
+ 'from': groupednbfrom, |
|
2366 |
+ 'to': groupednmbrto, |
|
2367 |
+ 'message': modmessagerec, |
|
2368 |
+ 'date': groupedperconv[i].date, |
|
2369 |
+ 'status': groupedperconv[i].deliveryreceipt, |
|
2370 |
+ 'table': groupedperconv[i].table |
|
2371 |
+ }); |
|
2372 |
+ } |
|
2373 |
+ |
|
2374 |
+ |
|
2375 |
+ // Remove the duplicates |
|
2376 |
+ let noDupMsgData = []; |
|
2377 |
+ $.each(fromtoNmbrsData, function(i, e) { |
|
2378 |
+ let matchingData = $.grep(noDupMsgData, function(item) { |
|
2379 |
+ return item.from == e.from && item.to == e.to && item.message == e.message && item.table == 'received' && e.table == 'sent'; |
|
2380 |
+ }); |
|
2381 |
+ if (matchingData.length === 0) { |
|
2382 |
+ noDupMsgData.push(e); |
|
2383 |
+ } |
|
2384 |
+ }); |
|
2385 |
+ |
|
2386 |
+ let messagesPerNmbr = {}; |
|
2387 |
+ let msgsNamesPerNmbr = {}; |
|
2388 |
+ let msgsNmbrsNames = {}; |
|
2389 |
+ |
|
2390 |
+ let displayNamesarr = []; |
|
2391 |
+ let convData = []; |
|
2392 |
+ |
|
2393 |
+ for (let n = 0; n < noDupMsgData.length; n++) { |
|
2394 |
+ |
|
2395 |
+ if (noDupMsgData[n]['from'] == phNumberTo && noDupMsgData[n]['table'] == 'sent') { |
|
2396 |
+ |
|
2397 |
+ convData.push({ |
|
2398 |
+ 'author_displayname': noDupMsgData[n]['author_displayname'], |
|
2399 |
+ 'message': noDupMsgData[n]['message'], |
|
2400 |
+ 'from': noDupMsgData[n]['from'], |
|
2401 |
+ 'to': noDupMsgData[n]['to'], |
|
2402 |
+ 'date': noDupMsgData[n]['date'], |
|
2403 |
+ 'direction': 'sent_from', |
|
2404 |
+ 'status': noDupMsgData[n]['status'], |
|
2405 |
+ 'table': noDupMsgData[n]['table'] |
|
2406 |
+ }); |
|
2407 |
+ |
|
2408 |
+ } else if (noDupMsgData[n]['to'] == phNumberTo && noDupMsgData[n]['table'] == 'sent') { |
|
2409 |
+ |
|
2410 |
+ convData.push({ |
|
2411 |
+ 'author_displayname': noDupMsgData[n]['author_displayname'], |
|
2412 |
+ 'message': noDupMsgData[n]['message'], |
|
2413 |
+ 'from': noDupMsgData[n]['from'], |
|
2414 |
+ 'to': noDupMsgData[n]['to'], |
|
2415 |
+ 'date': noDupMsgData[n]['date'], |
|
2416 |
+ 'direction': 'sent_to', |
|
2417 |
+ 'status': noDupMsgData[n]['status'], |
|
2418 |
+ 'table': noDupMsgData[n]['table'] |
|
2419 |
+ }); |
|
2420 |
+ |
|
2421 |
+ |
|
2422 |
+ } else if (noDupMsgData[n]['from'] == phNumberTo && noDupMsgData[n]['table'] == 'received') { |
|
2423 |
+ |
|
2424 |
+ convData.push({ |
|
2425 |
+ 'author_displayname': noDupMsgData[n]['author_displayname'], |
|
2426 |
+ 'message': noDupMsgData[n]['message'], |
|
2427 |
+ 'from': noDupMsgData[n]['from'], |
|
2428 |
+ 'to': noDupMsgData[n]['to'], |
|
2429 |
+ 'date': noDupMsgData[n]['date'], |
|
2430 |
+ 'direction': 'received_from', |
|
2431 |
+ 'status': noDupMsgData[n]['status'], |
|
2432 |
+ 'table': noDupMsgData[n]['table'] |
|
2433 |
+ }); |
|
2434 |
+ |
|
2435 |
+ } else if (noDupMsgData[n]['to'] == phNumberTo && noDupMsgData[n]['table'] == 'received') { |
|
2436 |
+ |
|
2437 |
+ convData.push({ |
|
2438 |
+ 'author_displayname': noDupMsgData[n]['author_displayname'], |
|
2439 |
+ 'message': noDupMsgData[n]['message'], |
|
2440 |
+ 'from': noDupMsgData[n]['from'], |
|
2441 |
+ 'to': noDupMsgData[n]['to'], |
|
2442 |
+ 'date': noDupMsgData[n]['date'], |
|
2443 |
+ 'direction': 'received_on', |
|
2444 |
+ 'status': noDupMsgData[n]['status'], |
|
2445 |
+ 'table': noDupMsgData[n]['table'] |
|
2446 |
+ }); |
|
2447 |
+ } |
|
2448 |
+ } |
|
2449 |
+ |
|
2450 |
+ // Sort messages by date |
|
2451 |
+ convData.sort(function(a, b) { |
|
2452 |
+ let c = new Date(a.date); |
|
2453 |
+ let d = new Date(b.date); |
|
2454 |
+ return c-d; |
|
2455 |
+ }); |
|
2456 |
+ convData.reverse(); |
|
2457 |
+ |
|
2458 |
+ // Collect the display names of the users that sent messages from the current number |
|
2459 |
+ let selectedNames = []; |
|
2460 |
+ let displayNames = ''; |
|
2461 |
+ for (let v = 0; v < convData.length; v++) { |
|
2462 |
+ if (selectedNames.indexOf(convData[v]['author_displayname']) == -1) { |
|
2463 |
+ selectedNames.push(convData[v]['author_displayname']); |
|
2464 |
+ displayNames += "<div id='diplNm_"+ phNumberTo +"_"+ v +"' class='dispNameList' name='"+ convData[v]['author_displayname'] +"'>"+ convData[v]['author_displayname'] +"</div>"; |
|
2465 |
+ } |
|
2466 |
+ } |
|
2467 |
+ displayNames += "<div id='diplNmAllMsg' class='dispNameListAll' title='Show all the messages for this number.'>"+ phNumberTo +"</div>"; |
|
2468 |
+ |
|
2469 |
+ // Store the display names for the current number, to be able to see them later |
|
2470 |
+ let ctPhNumber = phNumberTo; |
|
2471 |
+ msgsNamesPerNmbr[ctPhNumber] = displayNames; |
|
2472 |
+ |
|
2473 |
+ // Store the messages sent by each user, to be able to see them later when clicking on the user's name |
|
2474 |
+ for (let h = 0; h < selectedNames.length; h++) { |
|
2475 |
+ |
|
2476 |
+ let rowMessageArrpn = []; |
|
2477 |
+ for (let b = 0; b < convData.length; b++) { |
|
2478 |
+ |
|
2479 |
+ if (selectedNames[h] == convData[b]['author_displayname']) { |
|
2480 |
+ |
|
2481 |
+ if (convData[b]['direction'] == 'sent_from') { |
|
2482 |
+ if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1) { |
|
2483 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
2484 |
+ } else { |
|
2485 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
2486 |
+ } |
|
2487 |
+ rowMessageArrpn.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
2488 |
+ } else if (convData[b]['direction'] == 'sent_to') { |
|
2489 |
+ if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1) { |
|
2490 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
2491 |
+ } else { |
|
2492 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
2493 |
+ } |
|
2494 |
+ rowMessageArrpn.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
2495 |
+ } else if (convData[b]['direction'] == 'received_from') { |
|
2496 |
+ rowMessageArrpn.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div></div>"); |
|
2497 |
+ } else if (convData[b]['direction'] == 'received_on') { |
|
2498 |
+ rowMessageArrpn.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div></div>"); |
|
2499 |
+ } |
|
2500 |
+ } |
|
2501 |
+ } |
|
2502 |
+ let crtNmber = phNumberTo; |
|
2503 |
+ let crtName = selectedNames[h]; |
|
2504 |
+ msgsNmbrsNames[crtNmber] = msgsNmbrsNames[crtNmber] || {}; |
|
2505 |
+ msgsNmbrsNames[crtNmber][crtName] = rowMessageArrpn; |
|
2506 |
+ } |
|
2507 |
+ |
|
2508 |
+ // The number of messages to be loaded by default |
|
2509 |
+ let nmbTblDefault = 50; |
|
2510 |
+ |
|
2511 |
+ // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button |
|
2512 |
+ if (convData.length > nmbTblDefault) { |
|
2513 |
+ $("#loadMoreMsgs").css("display", "block"); |
|
2514 |
+ var nmbToBeLoaded = nmbTblDefault; |
|
2515 |
+ } else { var nmbToBeLoaded = convData.length; } |
|
2516 |
+ |
|
2517 |
+ let rowMessageArr = []; |
|
2518 |
+ for (var m = nmbToBeLoaded - 1; m >= 0; m--) { |
|
2519 |
+ |
|
2520 |
+ if (convData[m]['direction'] == 'sent_from') { |
|
2521 |
+ |
|
2522 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
2523 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
2524 |
+ } else { |
|
2525 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
2526 |
+ } |
|
2527 |
+ rowMessageArr.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
2528 |
+ |
|
2529 |
+ } else if (convData[m]['direction'] == 'sent_to') { |
|
2530 |
+ |
|
2531 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
2532 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
2533 |
+ } else { |
|
2534 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
2535 |
+ } |
|
2536 |
+ rowMessageArr.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
2537 |
+ |
|
2538 |
+ } else if (convData[m]['direction'] == 'received_from') { |
|
2539 |
+ |
|
2540 |
+ rowMessageArr.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
2541 |
+ |
|
2542 |
+ } else if (convData[m]['direction'] == 'received_on') { |
|
2543 |
+ |
|
2544 |
+ rowMessageArr.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
2545 |
+ } |
|
2546 |
+ } |
|
2547 |
+ |
|
2548 |
+ let convDataPerNmbr = rowMessageArr.join(""); |
|
2549 |
+ |
|
2550 |
+ $("#grpdbynamelst").append(displayNames); |
|
2551 |
+ $("#msgListRowCell").append(convDataPerNmbr); |
|
2552 |
+ |
|
2553 |
+ // Store the messages for the current number, to be able to see them later, when clicking on the number |
|
2554 |
+ let rowMessageArrcpt = []; |
|
2555 |
+ for (let m = 0; m < convData.length; m++) { |
|
2556 |
+ |
|
2557 |
+ if (convData[m]['direction'] == 'sent_from') { |
|
2558 |
+ |
|
2559 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
2560 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
2561 |
+ } else { |
|
2562 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
2563 |
+ } |
|
2564 |
+ rowMessageArrcpt.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
2565 |
+ |
|
2566 |
+ } else if (convData[m]['direction'] == 'sent_to') { |
|
2567 |
+ |
|
2568 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
2569 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
2570 |
+ } else { |
|
2571 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
2572 |
+ } |
|
2573 |
+ rowMessageArrcpt.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
2574 |
+ |
|
2575 |
+ } else if (convData[m]['direction'] == 'received_from') { |
|
2576 |
+ |
|
2577 |
+ rowMessageArrcpt.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
2578 |
+ |
|
2579 |
+ } else if (convData[m]['direction'] == 'received_on') { |
|
2580 |
+ |
|
2581 |
+ rowMessageArrcpt.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
2582 |
+ } |
|
2583 |
+ } |
|
2584 |
+ |
|
2585 |
+ messagesPerNmbr[phNumberTo] = rowMessageArrcpt; |
|
2586 |
+ |
|
2587 |
+ // Scroll down to the bottom of the window |
|
2588 |
+ $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); |
|
2589 |
+ |
|
2590 |
+ // Load more messages |
|
2591 |
+ let clickNmb = 0; |
|
2592 |
+ $("#loadMoreMsgs").click(function() { |
|
2593 |
+ |
|
2594 |
+ clickNmb++; |
|
2595 |
+ |
|
2596 |
+ var crefnb = (clickNmb + 1) * nmbToBeLoaded; |
|
2597 |
+ |
|
2598 |
+ if (crefnb > convData.length) { |
|
2599 |
+ var nmbmsg = convData.length - 1; |
|
2600 |
+ $("#loadMoreMsgs").css("display", "none"); |
|
2601 |
+ } else { |
|
2602 |
+ var nmbmsg = crefnb - 1; |
|
2603 |
+ } |
|
2604 |
+ |
|
2605 |
+ var rowMessageArrAdd = []; |
|
2606 |
+ |
|
2607 |
+ for (let m = nmbmsg; m >= clickNmb * nmbToBeLoaded; m--) { |
|
2608 |
+ |
|
2609 |
+ if (convData[m]['direction'] == 'sent_from') { |
|
2610 |
+ |
|
2611 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
2612 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
2613 |
+ } else { |
|
2614 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
2615 |
+ } |
|
2616 |
+ rowMessageArrAdd.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
2617 |
+ |
|
2618 |
+ } else if (convData[m]['direction'] == 'sent_to') { |
|
2619 |
+ |
|
2620 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
2621 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
2622 |
+ } else { |
|
2623 |
+ let sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
2624 |
+ } |
|
2625 |
+ rowMessageArrAdd.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
2626 |
+ |
|
2627 |
+ } else if (convData[m]['direction'] == 'received_from') { |
|
2628 |
+ |
|
2629 |
+ rowMessageArrAdd.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
2630 |
+ |
|
2631 |
+ } else if (convData[m]['direction'] == 'received_on') { |
|
2632 |
+ |
|
2633 |
+ rowMessageArrAdd.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
2634 |
+ } |
|
2635 |
+ } |
|
2636 |
+ |
|
2637 |
+ let convDataPerNmbrad = rowMessageArrAdd.join(""); |
|
2638 |
+ |
|
2639 |
+ let scrlheight = $("#msgListRowCell").height(); |
|
2640 |
+ $("#msgListRowCell").prepend(convDataPerNmbrad); |
|
2641 |
+ |
|
2642 |
+ $("#frmMsgLstWrap").scrollTop($("#msgListRowCell").height() - scrlheight); |
|
2643 |
+ }); |
|
2644 |
+ |
|
2645 |
+ |
|
2646 |
+ // Show the messages sent by each user whose name is clicked |
|
2647 |
+ $('[id*="diplNm_"]').click(function() { |
|
2648 |
+ |
|
2649 |
+ let crntNmbr = $(this).attr("id").split("_")[1]; |
|
2650 |
+ let crntDisName = $(this).attr("name"); |
|
2651 |
+ $("#loadMoreMsgs").css("display", "none"); |
|
2652 |
+ |
|
2653 |
+ let convDataprn = []; |
|
2654 |
+ $.each(msgsNmbrsNames[crntNmbr][crntDisName], function(index, item) { |
|
2655 |
+ convDataprn.push(item); |
|
2656 |
+ }); |
|
2657 |
+ |
|
2658 |
+ // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button |
|
2659 |
+ if (convDataprn.length > nmbTblDefault) { |
|
2660 |
+ $("#loadMoreMsgsusr").css("display", "block"); |
|
2661 |
+ let nmbToBeLoaded = nmbTblDefault; |
|
2662 |
+ } else { |
|
2663 |
+ $("#loadMoreMsgsusr").css("display", "none"); |
|
2664 |
+ let nmbToBeLoaded = convDataprn.length; |
|
2665 |
+ } |
|
2666 |
+ |
|
2667 |
+ let rowMessageArrprnst = []; |
|
2668 |
+ |
|
2669 |
+ for (let n = nmbToBeLoaded - 1; n >= 0; n--) { |
|
2670 |
+ rowMessageArrprnst.push(convDataprn[n]); |
|
2671 |
+ } |
|
2672 |
+ |
|
2673 |
+ let convDataPerNmbrprnst = rowMessageArrprnst.join(""); |
|
2674 |
+ |
|
2675 |
+ $("#msgListRowCell").empty(); |
|
2676 |
+ $("#msgListRowCell").append(convDataPerNmbrprnst); |
|
2677 |
+ |
|
2678 |
+ // Scroll down to the bottom of the window |
|
2679 |
+ $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); |
|
2680 |
+ |
|
2681 |
+ // Load more messages |
|
2682 |
+ let clckNb = 0; |
|
2683 |
+ $("#loadMoreMsgsusr").unbind("click"); |
|
2684 |
+ $("#loadMoreMsgsusr").click(function() { |
|
2685 |
+ |
|
2686 |
+ clckNb++; |
|
2687 |
+ var crefnb = (clckNb + 1) * nmbToBeLoaded; |
|
2688 |
+ |
|
2689 |
+ $("#loadMoreMsgs").css("display", "none"); |
|
2690 |
+ |
|
2691 |
+ if (crefnb > convDataprn.length) { |
|
2692 |
+ var nmbmsg = convDataprn.length - 1; |
|
2693 |
+ $("#loadMoreMsgsusr").css("display", "none"); |
|
2694 |
+ } else { |
|
2695 |
+ var nmbmsg = crefnb - 1; |
|
2696 |
+ $("#loadMoreMsgsusr").css("display", "block"); |
|
2697 |
+ } |
|
2698 |
+ |
|
2699 |
+ var rowMessageArrAddst = []; |
|
2700 |
+ |
|
2701 |
+ for (var q = nmbmsg; q >= clckNb * nmbToBeLoaded; q--) { |
|
2702 |
+ |
|
2703 |
+ rowMessageArrAddst.push(convDataprn[q]); |
|
2704 |
+ } |
|
2705 |
+ |
|
2706 |
+ var convDataPerNmbradst = rowMessageArrAddst.join(""); |
|
2707 |
+ |
|
2708 |
+ var scrlheight = $("#msgListRowCell").height(); |
|
2709 |
+ $("#msgListRowCell").prepend(convDataPerNmbradst); |
|
2710 |
+ |
|
2711 |
+ $("#frmMsgLstWrap").scrollTop($("#msgListRowCell").height() - scrlheight); |
|
2712 |
+ }); |
|
2713 |
+ |
|
2714 |
+ |
|
2715 |
+ $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); |
|
2716 |
+ $("#diplNmAllMsg").css("color", "#04957b"); |
|
2717 |
+ $(this).css("color", "#1b8efe"); |
|
2718 |
+ }); |
|
2719 |
+ |
|
2720 |
+ |
|
2721 |
+ // Show again all the messages sent/received to/from the clicked number |
|
2722 |
+ $("#diplNmAllMsg").click(function() { |
|
2723 |
+ |
|
2724 |
+ $("#loadMoreMsgsusr").css("display", "none"); |
|
2725 |
+ |
|
2726 |
+ let convDataprn = []; |
|
2727 |
+ $.each(messagesPerNmbr[phNumberTo], function(index, item) { |
|
2728 |
+ convDataprn.push(item); |
|
2729 |
+ }); |
|
2730 |
+ |
|
2731 |
+ // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button |
|
2732 |
+ if (convDataprn.length > nmbTblDefault) { |
|
2733 |
+ $("#loadMoreMsgs").css("display", "block"); |
|
2734 |
+ let nmbToBeLoaded = nmbTblDefault; |
|
2735 |
+ } else { |
|
2736 |
+ $("#loadMoreMsgs").css("display", "none"); |
|
2737 |
+ let nmbToBeLoaded = convDataprn.length; |
|
2738 |
+ } |
|
2739 |
+ |
|
2740 |
+ |
|
2741 |
+ let rowMessageArrprnst = []; |
|
2742 |
+ |
|
2743 |
+ for (let n = nmbToBeLoaded - 1; n >= 0; n--) { |
|
2744 |
+ rowMessageArrprnst.push(convDataprn[n]); |
|
2745 |
+ } |
|
2746 |
+ |
|
2747 |
+ let convDataPerNmbrprnst = rowMessageArrprnst.join(""); |
|
2748 |
+ |
|
2749 |
+ $("#msgListRowCell").empty(); |
|
2750 |
+ $("#msgListRowCell").append(convDataPerNmbrprnst); |
|
2751 |
+ |
|
2752 |
+ // Scroll down to the bottom of the window |
|
2753 |
+ $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); |
|
2754 |
+ |
|
2755 |
+ |
|
2756 |
+ // Load more messages |
|
2757 |
+ let clckNb = 0; |
|
2758 |
+ $("#loadMoreMsgsusr").unbind("click"); |
|
2759 |
+ $("#loadMoreMsgsusr").click(function() { |
|
2760 |
+ |
|
2761 |
+ clckNb++; |
|
2762 |
+ var crefnb = (clckNb + 1) * nmbToBeLoaded; |
|
2763 |
+ |
|
2764 |
+ $("#loadMoreMsgs").css("display", "none"); |
|
2765 |
+ |
|
2766 |
+ if (crefnb > convDataprn.length) { |
|
2767 |
+ var nmbmsg = convDataprn.length - 1; |
|
2768 |
+ $("#loadMoreMsgsusr").css("display", "none"); |
|
2769 |
+ } else { |
|
2770 |
+ var nmbmsg = crefnb - 1; |
|
2771 |
+ $("#loadMoreMsgsusr").css("display", "block"); |
|
2772 |
+ } |
|
2773 |
+ |
|
2774 |
+ var rowMessageArrAddst = []; |
|
2775 |
+ |
|
2776 |
+ for (var q = nmbmsg; q >= clckNb * nmbToBeLoaded; q--) { |
|
2777 |
+ |
|
2778 |
+ rowMessageArrAddst.push(convDataprn[q]); |
|
2779 |
+ } |
|
2780 |
+ |
|
2781 |
+ var convDataPerNmbradst = rowMessageArrAddst.join(""); |
|
2782 |
+ |
|
2783 |
+ var scrlheight = $("#msgListRowCell").height(); |
|
2784 |
+ $("#msgListRowCell").prepend(convDataPerNmbradst); |
|
2785 |
+ |
|
2786 |
+ $("#frmMsgLstWrap").scrollTop($("#msgListRowCell").height() - scrlheight); |
|
2787 |
+ }); |
|
2788 |
+ |
|
2789 |
+ |
|
2790 |
+ $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); |
|
2791 |
+ $("#diplNmAllMsg").css("color", "#04957b"); |
|
2792 |
+ $(this).css("color", "#04c6a4"); |
|
2793 |
+ |
|
2794 |
+ }); |
|
2795 |
+ |
|
2796 |
+ |
|
2797 |
+ // Show the scroll-up arrow |
|
2798 |
+ $("#frmMsgLstWrap").scroll(function() { |
|
2799 |
+ if ($(this).scrollTop() > 900) { |
|
2800 |
+ $('#upArrowSmall').fadeIn(); |
|
2801 |
+ } else { |
|
2802 |
+ $('#upArrowSmall').fadeOut(); |
|
2803 |
+ } |
|
2804 |
+ }); |
|
2805 |
+ |
|
2806 |
+ $("#upArrowSmall").click(function() { |
|
2807 |
+ $("#frmMsgLstWrap").animate({scrollTop : 0},400); |
|
2808 |
+ }); |
|
2809 |
+ |
|
2810 |
+ }, |
|
2811 |
+ error: function() { |
|
2812 |
+ showAlert("Error while attempting to get message data from the database!"); |
|
2813 |
+ $('#listAllMsgsConv').removeClass('icon-loading'); |
|
2814 |
+ } |
|
2815 |
+ }); |
|
2816 |
+ |
|
2817 |
+ } |
|
2818 |
+ |
|
2819 |
+ $('[id^="showMsgConv-"]').click(function() { |
|
2820 |
+ |
|
2821 |
+ let ctrwnmbr = $(this).attr("id").replace("showMsgConv-", ""); |
|
2822 |
+ let phNumberFrom = $("#frmNmbr-"+ ctrwnmbr).text().split(": ")[1]; |
|
2823 |
+ let phNumberTo = $("#toNmbr-"+ ctrwnmbr).text(); |
|
2824 |
+ |
|
2825 |
+ showSentMsgPerConv(phNumberFrom, phNumberTo); |
|
2826 |
+ }); |
|
2827 |
+ |
|
2828 |
+ |
|
2829 |
+ // Show the pop-up window that lists all the messages sent/received to/from a phone number |
|
2830 |
+ function showMsgPerNmbr(clckPhNumber) { |
|
2831 |
+ |
|
2832 |
+ var allfrmtomsg = "<div id='listAllMsgsFromTo'>"; |
|
2833 |
+ allfrmtomsg += "<div id='draglstMsgmWindow'><img src='/apps/sms_relentless/img/dots.svg'></div>"; |
|
2834 |
+ allfrmtomsg += "<a id='closeFrmMsgWindow' title='Close this window'></a>"; |
|
2835 |
+ allfrmtomsg += "<div class='showByNmbrTitle'>Messages sent/received to/from <span style='color:#04957b'>"+ clckPhNumber +"</span></div>"; |
|
2836 |
+ allfrmtomsg += "<div id='frmMsgLstWrap'>"; |
|
2837 |
+ allfrmtomsg += "<table id='frmMsgLstTbl'>"; |
|
2838 |
+ allfrmtomsg += "<tr class='groupedrowsbody'><td><div id='grpdbynamelst' class='groupedLstNamespn'></div></td><td><div id='loadMoreMsgs' title='Click to load older messages.'>Load more messages</div><div id='loadMoreMsgsusr' title='Click to load older messages.'>Load more messages</div><div id='msgListRowCell' class='groupedLstMsgspn'></div><div id='arrowupWrap'><div id='upArrowSmall' title='Scroll to the top'></div></div></td></tr>"; |
|
2839 |
+ allfrmtomsg += "</table></div>"; |
|
2840 |
+ allfrmtomsg += "<div id='sendMsgReply'><table id='sendMsgConv'><tr><td><div id='fromPhoneNmbrConv'>From: <select id='selectFromNbConv'></select></div><div id='toPhoneNmbrConv'>To: <span id='toNmbrConv' style='color:#04957b'>"+ clckPhNumber +"</span></div></td></tr>"; |
|
2841 |
+ allfrmtomsg += "<tr><td><textarea id='sendMsgConvText' placeholder='Enter a message here, then press Send SMS'></textarea></td></tr></table>"; |
|
2842 |
+ allfrmtomsg += "<div id='sendMsgConvBtn'>Send SMS</div></div>"; |
|
2843 |
+ allfrmtomsg += "<div style='display:block;width:100%;height:14px;'><img id='expandWindowRpl' src='/apps/sms_relentless/img/arrowDown.svg' title='Expand to send a message'></div>"; |
|
2844 |
+ allfrmtomsg += "<div id='draglstMsgmWindowsc'><img src='/apps/sms_relentless/img/dots.svg' style='padding:4px;vertical-align:top;'></div>"; |
|
2845 |
+ allfrmtomsg += "</div>"; |
|
2846 |
+ |
|
2847 |
+ $("#content").append("<div id='recTblOverlay'></div>"); |
|
2848 |
+ $("#content").append(allfrmtomsg); |
|
2849 |
+ |
|
2850 |
+ var topDist = parseInt((window.innerHeight / 2).toFixed(2) - 340) +"px"; |
|
2851 |
+ var leftDist = parseInt((window.innerWidth / 2).toFixed(2) - 300) +"px"; |
|
2852 |
+ $("#listAllMsgsFromTo").css({ "top" : topDist, "left" : leftDist }); |
|
2853 |
+ |
|
2854 |
+ $("#closeFrmMsgWindow").click(function() { $("#listAllMsgsFromTo").remove(); $("#recTblOverlay").remove(); }); |
|
2855 |
+ $("#recTblOverlay").click(function() { $("#listAllMsgsFromTo").remove(); $("#recTblOverlay").remove(); }); |
|
2856 |
+ |
|
2857 |
+ |
|
2858 |
+ // Expand the window when clicking on the arrow, to be able to send a reply message |
|
2859 |
+ $("#expandWindowRpl").click(function() { |
|
2860 |
+ |
|
2861 |
+ if ($(this).attr('src') == '/apps/sms_relentless/img/arrowDown.svg') { |
|
2862 |
+ $("#sendMsgReply").css("display", "block"); |
|
2863 |
+ $("#listAllMsgsFromTo").css("height", "618px"); |
|
2864 |
+ $(this).attr('src', '/apps/sms_relentless/img/arrowUp.svg'); |
|
2865 |
+ $(this).attr('title', 'Collapse'); |
|
2866 |
+ } else { |
|
2867 |
+ $("#sendMsgReply").css("display", "none"); |
|
2868 |
+ $("#listAllMsgsFromTo").css("height", "490px"); |
|
2869 |
+ $(this).attr('src', '/apps/sms_relentless/img/arrowDown.svg'); |
|
2870 |
+ $(this).attr('title', 'Expand to send a reply'); |
|
2871 |
+ } |
|
2872 |
+ }); |
|
2873 |
+ |
|
2874 |
+ // Send a message from the 'conversation' window |
|
2875 |
+ $("#sendMsgConvBtn").click(function() { |
|
2876 |
+ |
|
2877 |
+ $("#sendMsgConv,#sendMsgConvBtn").addClass('icon-loading'); |
|
2878 |
+ var msgToSend = $("#sendMsgConvText").val(); |
|
2879 |
+ var selectedid = $("#selectFromNbConv").val(); |
|
2880 |
+ var toNumber = $("#toNmbrConv").text(); |
|
2881 |
+ var receiversNumbers = [toNumber]; |
|
2882 |
+ |
|
2883 |
+ if (selectedid != '') { |
|
2884 |
+ |
|
2885 |
+ var sendersplit = selectedid.split(":"); |
|
2886 |
+ var providercap = sendersplit[0]; |
|
2887 |
+ var provsec = sendersplit[1]; |
|
2888 |
+ |
|
2889 |
+ if (/[a-zA-Z]/.test(provsec)) { |
|
2890 |
+ var alphanumcheck = true; |
|
2891 |
+ } else { var alphanumcheck = false; } |
|
2892 |
+ |
|
2893 |
+ if (providercap == 'Tx' && alphanumcheck == false) { |
|
2894 |
+ var senderproc = selectedid.replace(/[^0-9]/g, ""); |
|
2895 |
+ var selectedsender = "+" + senderproc; |
|
2896 |
+ var providerUsed = "telnyx"; |
|
2897 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstel"); |
|
2898 |
+ } else if (providercap == 'Pl' && alphanumcheck == false) { |
|
2899 |
+ var selectedsender = selectedid.replace(/[^0-9]/g, ""); |
|
2900 |
+ var providerUsed = "plivo"; |
|
2901 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsnex"); |
|
2902 |
+ } else if (providercap == 'Tw' && alphanumcheck == false) { |
|
2903 |
+ var senderproc = selectedid.replace(/[^0-9]/g, ""); |
|
2904 |
+ var selectedsender = "+" + senderproc; |
|
2905 |
+ var providerUsed = "twilio"; |
|
2906 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstwil"); |
|
2907 |
+ } else if (providercap == 'Fl' && alphanumcheck == false) { |
|
2908 |
+ var senderproc = selectedid.replace(/[^0-9]/g, ""); |
|
2909 |
+ var selectedsender = "+" + senderproc; |
|
2910 |
+ var providerUsed = "flowroute"; |
|
2911 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsflow"); |
|
2912 |
+ } else if (providercap == 'Tx' && alphanumcheck == true) { |
|
2913 |
+ var selectedsender = provsec; |
|
2914 |
+ var providerUsed = "telnyx"; |
|
2915 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstel"); |
|
2916 |
+ } else if (providercap == 'Pl' && alphanumcheck == true) { |
|
2917 |
+ var selectedsender = provsec; |
|
2918 |
+ var providerUsed = "plivo"; |
|
2919 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsnex"); |
|
2920 |
+ } else if (providercap == 'Tw' && alphanumcheck == true) { |
|
2921 |
+ var selectedsender = provsec; |
|
2922 |
+ var providerUsed = "twilio"; |
|
2923 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmstwil"); |
|
2924 |
+ } else if (providercap == 'Fl' && alphanumcheck == true) { |
|
2925 |
+ var selectedsender = provsec; |
|
2926 |
+ var providerUsed = "flowroute"; |
|
2927 |
+ var relbaseUrl = OC.generateUrl("/apps/sms_relentless/user/sendsmsflow"); |
|
2928 |
+ } |
|
2929 |
+ |
|
2930 |
+ var uploadedtomms = []; |
|
2931 |
+ |
|
2932 |
+ if (msgToSend != '') { |
|
2933 |
+ |
|
2934 |
+ $.ajax({ |
|
2935 |
+ url: relbaseUrl + '/' + userid, |
|
2936 |
+ type: "POST", |
|
2937 |
+ data: { |
|
2938 |
+ receiversPhoneNbs: receiversNumbers, |
|
2939 |
+ fromsender: selectedsender, |
|
2940 |
+ waitinterval: 1000, |
|
2941 |
+ sentsmstext: msgToSend, |
|
2942 |
+ ismms: 0, |
|
2943 |
+ mmsfiles: uploadedtomms |
|
2944 |
+ }, |
|
2945 |
+ success: function(displayname) { |
|
2946 |
+ |
|
2947 |
+ var tzdate = new Date(); |
|
2948 |
+ var presDatest = new Date(tzdate.getTime() - (tzdate.getTimezoneOffset() * 60000)).toJSON(); |
|
2949 |
+ var presDatedb = presDatest.split(".")[0]; |
|
2950 |
+ var presDatesc = presDatedb.split("T"); |
|
2951 |
+ var presDate = presDatesc[0] +" "+ presDatesc[1]; |
|
2952 |
+ var sentMessageStatus = ''; |
|
2953 |
+ |
|
2954 |
+ if (displayname) { |
|
2955 |
+ var msgToSendproc = "<span class='msgAuthorNameGrp'>"+ displayname + ":</span>" + msgToSend; |
|
2956 |
+ } else { var msgToSendproc = ''; } |
|
2957 |
+ |
|
2958 |
+ $("#msgListRowCell").append("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ selectedsender +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ receiversNumbers[0] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ msgToSendproc +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ presDate +"</div><div class='sentMssgStatus'>"+ sentMessageStatus +"</div></div>"); |
|
2959 |
+ |
|
2960 |
+ // Scroll down to the bottom of the window |
|
2961 |
+ $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); |
|
2962 |
+ |
|
2963 |
+ $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); |
|
2964 |
+ }, |
|
2965 |
+ error: function() { |
|
2966 |
+ showAlert("Error while sending the message. You can check your Nextcloud log to find out more about this issue."); |
|
2967 |
+ $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); |
|
2968 |
+ } |
|
2969 |
+ }); |
|
2970 |
+ } else { |
|
2971 |
+ showAlert("Please enter a message in the text box!"); |
|
2972 |
+ $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); |
|
2973 |
+ } |
|
2974 |
+ } else { |
|
2975 |
+ showAlert("Please choose a Sender ID from the 'From' drop-down list!"); |
|
2976 |
+ $("#sendMsgConv,#sendMsgConvBtn").removeClass('icon-loading'); |
|
2977 |
+ } |
|
2978 |
+ |
|
2979 |
+ }); |
|
2980 |
+ |
|
2981 |
+ |
|
2982 |
+ // Make the window draggable |
|
2983 |
+ function makeMgrWndDraggable(e) { |
|
2984 |
+ |
|
2985 |
+ window.pmdragging = {}; |
|
2986 |
+ pmdragging.pageX0 = e.pageX; |
|
2987 |
+ pmdragging.pageY0 = e.pageY; |
|
2988 |
+ pmdragging.elem = $("#listAllMsgsFromTo"); |
|
2989 |
+ pmdragging.offset0 = $("#listAllMsgsFromTo").offset(); |
|
2990 |
+ |
|
2991 |
+ function handle_dragging(e) { |
|
2992 |
+ var left = pmdragging.offset0.left + (e.pageX - pmdragging.pageX0); |
|
2993 |
+ var top = pmdragging.offset0.top + (e.pageY - pmdragging.pageY0); |
|
2994 |
+ $(pmdragging.elem).offset({top: top, left: left}); |
|
2995 |
+ } |
|
2996 |
+ |
|
2997 |
+ function handle_mouseup(e) { |
|
2998 |
+ $('body').off('mousemove', handle_dragging).off('mouseup', handle_mouseup); |
|
2999 |
+ } |
|
3000 |
+ |
|
3001 |
+ $('body').on('mouseup', handle_mouseup).on('mousemove', handle_dragging); |
|
3002 |
+ } |
|
3003 |
+ $("#draglstMsgmWindow").mousedown(makeMgrWndDraggable); |
|
3004 |
+ $("#draglstMsgmWindowsc").mousedown(makeMgrWndDraggable); |
|
3005 |
+ |
|
3006 |
+ |
|
3007 |
+ // Append the available phone numbers to the From drop-down list |
|
3008 |
+ var availPhoneNmbrs = []; |
|
3009 |
+ $("#currentsmsnmbrs .optselectsmsnb").each(function() { |
|
3010 |
+ var crtphnmbr = $(this).attr("value"); |
|
3011 |
+ if (crtphnmbr != "") { availPhoneNmbrs.push(crtphnmbr); } |
|
3012 |
+ }); |
|
3013 |
+ |
|
3014 |
+ if (availPhoneNmbrs.length > 0) { |
|
3015 |
+ var avphopt = ""; |
|
3016 |
+ for (let d = 0; d < availPhoneNmbrs.length; d++) { |
|
3017 |
+ avphopt += "<option value='"+ availPhoneNmbrs[d] +"'>"+ availPhoneNmbrs[d] +"</option>"; |
|
3018 |
+ } |
|
3019 |
+ $("#selectFromNbConv").append(avphopt); |
|
3020 |
+ |
|
3021 |
+ } else { $("#selectFromNbConv").append("<option value='' selected>No IDs</option>"); } |
|
3022 |
+ |
|
3023 |
+ |
|
3024 |
+ // Get the sent/received messages for the current phone number, from the database |
|
3025 |
+ var getGroupedPnUrl = OC.generateUrl("/apps/sms_relentless/user/getgroupedpernumber"); |
|
3026 |
+ |
|
3027 |
+ $('#listAllMsgsFromTo').addClass('icon-loading'); |
|
3028 |
+ var totalPhNmbrs = 0; |
|
3029 |
+ |
|
3030 |
+ $.ajax({ |
|
3031 |
+ method: 'POST', |
|
3032 |
+ url: getGroupedPnUrl + '/' + userid, |
|
3033 |
+ contentType: 'application/json', |
|
3034 |
+ data: JSON.stringify({ phoneNumber: clckPhNumber }), |
|
3035 |
+ success: function(groupedpernb) { |
|
3036 |
+ |
|
3037 |
+ $('#listAllMsgsFromTo').removeClass('icon-loading'); |
|
3038 |
+ |
|
3039 |
+ var fromtoNmbrsData = []; |
|
3040 |
+ |
|
3041 |
+ for (var i = 0; i < groupedpernb.length; i++) { |
|
3042 |
+ |
|
3043 |
+ if (groupedpernb[i].author_displayname) { |
|
3044 |
+ var authordnm = groupedpernb[i].author_displayname; |
|
3045 |
+ } else { |
|
3046 |
+ var authordnm = ''; |
|
3047 |
+ } |
|
3048 |
+ |
|
3049 |
+ var sentfromnmbrarr = groupedpernb[i].from.split("+"); |
|
3050 |
+ if (sentfromnmbrarr[1]) { |
|
3051 |
+ var groupednbfrom = "+"+ sentfromnmbrarr[1]; |
|
3052 |
+ } else { |
|
3053 |
+ var groupednbfrom = sentfromnmbrarr[0]; |
|
3054 |
+ } |
|
3055 |
+ |
|
3056 |
+ var modmessagesent = ''; |
|
3057 |
+ if (groupedpernb[i].author_displayname) { |
|
3058 |
+ modmessagesent = "<span class='msgAuthorNameGrp'>"+ groupedpernb[i].author_displayname + ":</span>" + groupedpernb[i].message; |
|
3059 |
+ } else { |
|
3060 |
+ modmessagesent = groupedpernb[i].message; |
|
3061 |
+ } |
|
3062 |
+ |
|
3063 |
+ if (groupedpernb[i].to.indexOf(": ") > -1) { |
|
3064 |
+ var groupednmbrtopre = groupedpernb[i].to.split(": "); |
|
3065 |
+ var groupednmbrto = groupednmbrtopre[1]; |
|
3066 |
+ } else { |
|
3067 |
+ var groupednmbrto = groupedpernb[i].to; |
|
3068 |
+ } |
|
3069 |
+ |
|
3070 |
+ fromtoNmbrsData.push({ |
|
3071 |
+ 'author_displayname': authordnm, |
|
3072 |
+ 'from': groupednbfrom, |
|
3073 |
+ 'to': groupednmbrto, |
|
3074 |
+ 'message': modmessagesent, |
|
3075 |
+ 'date': groupedpernb[i].date, |
|
3076 |
+ 'status': groupedpernb[i].deliveryreceipt, |
|
3077 |
+ 'table': groupedpernb[i].table |
|
3078 |
+ }); |
|
3079 |
+ } |
|
3080 |
+ |
|
3081 |
+ |
|
3082 |
+ // Remove the duplicates |
|
3083 |
+ var noDupMsgData = []; |
|
3084 |
+ $.each(fromtoNmbrsData, function(i, e) { |
|
3085 |
+ var matchingData = $.grep(noDupMsgData, function(item) { |
|
3086 |
+ return item.from == e.from && item.to == e.to && item.message == e.message && item.table == 'received' && e.table == 'sent'; |
|
3087 |
+ }); |
|
3088 |
+ if (matchingData.length === 0) { |
|
3089 |
+ noDupMsgData.push(e); |
|
3090 |
+ } |
|
3091 |
+ }); |
|
3092 |
+ |
|
3093 |
+ var messagesPerNmbr = {}; |
|
3094 |
+ var msgsNamesPerNmbr = {}; |
|
3095 |
+ var msgsNmbrsNames = {}; |
|
3096 |
+ |
|
3097 |
+ var displayNamesarr = []; |
|
3098 |
+ var convData = []; |
|
3099 |
+ |
|
3100 |
+ for (var n = 0; n < noDupMsgData.length; n++) { |
|
3101 |
+ |
|
3102 |
+ if (noDupMsgData[n]['from'] == clckPhNumber && noDupMsgData[n]['table'] == 'sent') { |
|
3103 |
+ |
|
3104 |
+ convData.push({ |
|
3105 |
+ 'author_displayname': noDupMsgData[n]['author_displayname'], |
|
3106 |
+ 'message': noDupMsgData[n]['message'], |
|
3107 |
+ 'from': noDupMsgData[n]['from'], |
|
3108 |
+ 'to': noDupMsgData[n]['to'], |
|
3109 |
+ 'date': noDupMsgData[n]['date'], |
|
3110 |
+ 'direction': 'sent_from', |
|
3111 |
+ 'status': noDupMsgData[n]['status'], |
|
3112 |
+ 'table': noDupMsgData[n]['table'] |
|
3113 |
+ }); |
|
3114 |
+ |
|
3115 |
+ } else if (noDupMsgData[n]['to'] == clckPhNumber && noDupMsgData[n]['table'] == 'sent') { |
|
3116 |
+ |
|
3117 |
+ convData.push({ |
|
3118 |
+ 'author_displayname': noDupMsgData[n]['author_displayname'], |
|
3119 |
+ 'message': noDupMsgData[n]['message'], |
|
3120 |
+ 'from': noDupMsgData[n]['from'], |
|
3121 |
+ 'to': noDupMsgData[n]['to'], |
|
3122 |
+ 'date': noDupMsgData[n]['date'], |
|
3123 |
+ 'direction': 'sent_to', |
|
3124 |
+ 'status': noDupMsgData[n]['status'], |
|
3125 |
+ 'table': noDupMsgData[n]['table'] |
|
3126 |
+ }); |
|
3127 |
+ |
|
3128 |
+ |
|
3129 |
+ } else if (noDupMsgData[n]['from'] == clckPhNumber && noDupMsgData[n]['table'] == 'received') { |
|
3130 |
+ |
|
3131 |
+ convData.push({ |
|
3132 |
+ 'author_displayname': noDupMsgData[n]['author_displayname'], |
|
3133 |
+ 'message': noDupMsgData[n]['message'], |
|
3134 |
+ 'from': noDupMsgData[n]['from'], |
|
3135 |
+ 'to': noDupMsgData[n]['to'], |
|
3136 |
+ 'date': noDupMsgData[n]['date'], |
|
3137 |
+ 'direction': 'received_from', |
|
3138 |
+ 'status': noDupMsgData[n]['status'], |
|
3139 |
+ 'table': noDupMsgData[n]['table'] |
|
3140 |
+ }); |
|
3141 |
+ |
|
3142 |
+ } else if (noDupMsgData[n]['to'] == clckPhNumber && noDupMsgData[n]['table'] == 'received') { |
|
3143 |
+ |
|
3144 |
+ convData.push({ |
|
3145 |
+ 'author_displayname': noDupMsgData[n]['author_displayname'], |
|
3146 |
+ 'message': noDupMsgData[n]['message'], |
|
3147 |
+ 'from': noDupMsgData[n]['from'], |
|
3148 |
+ 'to': noDupMsgData[n]['to'], |
|
3149 |
+ 'date': noDupMsgData[n]['date'], |
|
3150 |
+ 'direction': 'received_on', |
|
3151 |
+ 'status': noDupMsgData[n]['status'], |
|
3152 |
+ 'table': noDupMsgData[n]['table'] |
|
3153 |
+ }); |
|
3154 |
+ } |
|
3155 |
+ } |
|
3156 |
+ |
|
3157 |
+ // Sort messages by date |
|
3158 |
+ convData.sort(function(a, b) { |
|
3159 |
+ var c = new Date(a.date); |
|
3160 |
+ var d = new Date(b.date); |
|
3161 |
+ return c-d; |
|
3162 |
+ }); |
|
3163 |
+ convData.reverse(); |
|
3164 |
+ |
|
3165 |
+ // Collect the display names of the users that sent messages from the current number |
|
3166 |
+ var selectedNames = []; |
|
3167 |
+ var displayNames = ''; |
|
3168 |
+ for (var v = 0; v < convData.length; v++) { |
|
3169 |
+ if (selectedNames.indexOf(convData[v]['author_displayname']) == -1) { |
|
3170 |
+ selectedNames.push(convData[v]['author_displayname']); |
|
3171 |
+ displayNames += "<div id='diplNm_"+ clckPhNumber +"_"+ v +"' class='dispNameList' name='"+ convData[v]['author_displayname'] +"'>"+ convData[v]['author_displayname'] +"</div>"; |
|
3172 |
+ } |
|
3173 |
+ } |
|
3174 |
+ displayNames += "<div id='diplNmAllMsg' class='dispNameListAll' title='Show all the messages for this number.'>"+ clckPhNumber +"</div>"; |
|
3175 |
+ |
|
3176 |
+ // Store the display names for the current number, to be able to see them later |
|
3177 |
+ var ctPhNumber = clckPhNumber; |
|
3178 |
+ msgsNamesPerNmbr[ctPhNumber] = displayNames; |
|
3179 |
+ |
|
3180 |
+ // Store the messages sent by each user, to be able to see them later when clicking on the user's name |
|
3181 |
+ for (var h = 0; h < selectedNames.length; h++) { |
|
3182 |
+ |
|
3183 |
+ var rowMessageArrpn = []; |
|
3184 |
+ for (var b = 0; b < convData.length; b++) { |
|
3185 |
+ |
|
3186 |
+ if (selectedNames[h] == convData[b]['author_displayname']) { |
|
3187 |
+ |
|
3188 |
+ if (convData[b]['direction'] == 'sent_from') { |
|
3189 |
+ if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1) { |
|
3190 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
3191 |
+ } else { |
|
3192 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
3193 |
+ } |
|
3194 |
+ rowMessageArrpn.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
3195 |
+ } else if (convData[b]['direction'] == 'sent_to') { |
|
3196 |
+ if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1) { |
|
3197 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
3198 |
+ } else { |
|
3199 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
3200 |
+ } |
|
3201 |
+ rowMessageArrpn.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
3202 |
+ } else if (convData[b]['direction'] == 'received_from') { |
|
3203 |
+ rowMessageArrpn.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div></div>"); |
|
3204 |
+ } else if (convData[b]['direction'] == 'received_on') { |
|
3205 |
+ rowMessageArrpn.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div></div>"); |
|
3206 |
+ } |
|
3207 |
+ } |
|
3208 |
+ } |
|
3209 |
+ var crtNmber = clckPhNumber; |
|
3210 |
+ var crtName = selectedNames[h]; |
|
3211 |
+ msgsNmbrsNames[crtNmber] = msgsNmbrsNames[crtNmber] || {}; |
|
3212 |
+ msgsNmbrsNames[crtNmber][crtName] = rowMessageArrpn; |
|
3213 |
+ } |
|
3214 |
+ |
|
3215 |
+ // The number of messages to be loaded by default |
|
3216 |
+ var nmbTblDefault = 50; |
|
3217 |
+ |
|
3218 |
+ // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button |
|
3219 |
+ if (convData.length > nmbTblDefault) { |
|
3220 |
+ $("#loadMoreMsgs").css("display", "block"); |
|
3221 |
+ var nmbToBeLoaded = nmbTblDefault; |
|
3222 |
+ } else { var nmbToBeLoaded = convData.length; } |
|
3223 |
+ |
|
3224 |
+ var rowMessageArr = []; |
|
3225 |
+ for (var m = nmbToBeLoaded - 1; m >= 0; m--) { |
|
3226 |
+ |
|
3227 |
+ if (convData[m]['direction'] == 'sent_from') { |
|
3228 |
+ |
|
3229 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
3230 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
3231 |
+ } else { |
|
3232 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
3233 |
+ } |
|
3234 |
+ rowMessageArr.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
3235 |
+ |
|
3236 |
+ } else if (convData[m]['direction'] == 'sent_to') { |
|
3237 |
+ |
|
3238 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
3239 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
3240 |
+ } else { |
|
3241 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
3242 |
+ } |
|
3243 |
+ rowMessageArr.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
3244 |
+ |
|
3245 |
+ } else if (convData[m]['direction'] == 'received_from') { |
|
3246 |
+ |
|
3247 |
+ rowMessageArr.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
3248 |
+ |
|
3249 |
+ } else if (convData[m]['direction'] == 'received_on') { |
|
3250 |
+ |
|
3251 |
+ rowMessageArr.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
3252 |
+ } |
|
3253 |
+ } |
|
3254 |
+ |
|
3255 |
+ var convDataPerNmbr = rowMessageArr.join(""); |
|
3256 |
+ |
|
3257 |
+ $("#grpdbynamelst").append(displayNames); |
|
3258 |
+ $("#msgListRowCell").append(convDataPerNmbr); |
|
3259 |
+ |
|
3260 |
+ // Store the messages for the current number, to be able to see them later, when clicking on the number |
|
3261 |
+ var rowMessageArrcpt = []; |
|
3262 |
+ for (var m = 0; m < convData.length; m++) { |
|
3263 |
+ |
|
3264 |
+ if (convData[m]['direction'] == 'sent_from') { |
|
3265 |
+ |
|
3266 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
3267 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
3268 |
+ } else { |
|
3269 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
3270 |
+ } |
|
3271 |
+ rowMessageArrcpt.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
3272 |
+ |
|
3273 |
+ } else if (convData[m]['direction'] == 'sent_to') { |
|
3274 |
+ |
|
3275 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
3276 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
3277 |
+ } else { |
|
3278 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
3279 |
+ } |
|
3280 |
+ rowMessageArrcpt.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
3281 |
+ |
|
3282 |
+ } else if (convData[m]['direction'] == 'received_from') { |
|
3283 |
+ |
|
3284 |
+ rowMessageArrcpt.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
3285 |
+ |
|
3286 |
+ } else if (convData[m]['direction'] == 'received_on') { |
|
3287 |
+ |
|
3288 |
+ rowMessageArrcpt.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
3289 |
+ } |
|
3290 |
+ } |
|
3291 |
+ |
|
3292 |
+ messagesPerNmbr[clckPhNumber] = rowMessageArrcpt; |
|
3293 |
+ |
|
3294 |
+ // Scroll down to the bottom of the window |
|
3295 |
+ $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); |
|
3296 |
+ |
|
3297 |
+ // Load more messages |
|
3298 |
+ var clickNmb = 0; |
|
3299 |
+ $("#loadMoreMsgs").click(function() { |
|
3300 |
+ |
|
3301 |
+ clickNmb++; |
|
3302 |
+ |
|
3303 |
+ var crefnb = (clickNmb + 1) * nmbToBeLoaded; |
|
3304 |
+ |
|
3305 |
+ if (crefnb > convData.length) { |
|
3306 |
+ var nmbmsg = convData.length - 1; |
|
3307 |
+ $("#loadMoreMsgs").css("display", "none"); |
|
3308 |
+ } else { |
|
3309 |
+ var nmbmsg = crefnb - 1; |
|
3310 |
+ } |
|
3311 |
+ |
|
3312 |
+ var rowMessageArrAdd = []; |
|
3313 |
+ |
|
3314 |
+ for (var m = nmbmsg; m >= clickNmb * nmbToBeLoaded; m--) { |
|
3315 |
+ |
|
3316 |
+ if (convData[m]['direction'] == 'sent_from') { |
|
3317 |
+ |
|
3318 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
3319 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
3320 |
+ } else { |
|
3321 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
3322 |
+ } |
|
3323 |
+ rowMessageArrAdd.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
3324 |
+ |
|
3325 |
+ } else if (convData[m]['direction'] == 'sent_to') { |
|
3326 |
+ |
|
3327 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
3328 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
3329 |
+ } else { |
|
3330 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
3331 |
+ } |
|
3332 |
+ rowMessageArrAdd.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
3333 |
+ |
|
3334 |
+ } else if (convData[m]['direction'] == 'received_from') { |
|
3335 |
+ |
|
3336 |
+ rowMessageArrAdd.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
3337 |
+ |
|
3338 |
+ } else if (convData[m]['direction'] == 'received_on') { |
|
3339 |
+ |
|
3340 |
+ rowMessageArrAdd.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
3341 |
+ } |
|
3342 |
+ } |
|
3343 |
+ |
|
3344 |
+ var convDataPerNmbrad = rowMessageArrAdd.join(""); |
|
3345 |
+ |
|
3346 |
+ var scrlheight = $("#msgListRowCell").height(); |
|
3347 |
+ $("#msgListRowCell").prepend(convDataPerNmbrad); |
|
3348 |
+ |
|
3349 |
+ $("#frmMsgLstWrap").scrollTop($("#msgListRowCell").height() - scrlheight); |
|
3350 |
+ }); |
|
3351 |
+ |
|
3352 |
+ |
|
3353 |
+ // Show the messages sent by each user whose name is clicked |
|
3354 |
+ $('[id*="diplNm_"]').click(function() { |
|
3355 |
+ |
|
3356 |
+ var crntNmbr = $(this).attr("id").split("_")[1]; |
|
3357 |
+ var crntDisName = $(this).attr("name"); |
|
3358 |
+ $("#loadMoreMsgs").css("display", "none"); |
|
3359 |
+ |
|
3360 |
+ var convDataprn = []; |
|
3361 |
+ $.each(msgsNmbrsNames[crntNmbr][crntDisName], function(index, item) { |
|
3362 |
+ convDataprn.push(item); |
|
3363 |
+ }); |
|
3364 |
+ |
|
3365 |
+ // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button |
|
3366 |
+ if (convDataprn.length > nmbTblDefault) { |
|
3367 |
+ $("#loadMoreMsgsusr").css("display", "block"); |
|
3368 |
+ var nmbToBeLoaded = nmbTblDefault; |
|
3369 |
+ } else { |
|
3370 |
+ $("#loadMoreMsgsusr").css("display", "none"); |
|
3371 |
+ var nmbToBeLoaded = convDataprn.length; |
|
3372 |
+ } |
|
3373 |
+ |
|
3374 |
+ |
|
3375 |
+ var rowMessageArrprnst = []; |
|
3376 |
+ |
|
3377 |
+ for (var n = nmbToBeLoaded - 1; n >= 0; n--) { |
|
3378 |
+ rowMessageArrprnst.push(convDataprn[n]); |
|
3379 |
+ } |
|
3380 |
+ |
|
3381 |
+ var convDataPerNmbrprnst = rowMessageArrprnst.join(""); |
|
3382 |
+ |
|
3383 |
+ $("#msgListRowCell").empty(); |
|
3384 |
+ $("#msgListRowCell").append(convDataPerNmbrprnst); |
|
3385 |
+ |
|
3386 |
+ // Scroll down to the bottom of the window |
|
3387 |
+ $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); |
|
3388 |
+ |
|
3389 |
+ // Load more messages |
|
3390 |
+ var clckNb = 0; |
|
3391 |
+ $("#loadMoreMsgsusr").unbind("click"); |
|
3392 |
+ $("#loadMoreMsgsusr").click(function() { |
|
3393 |
+ |
|
3394 |
+ clckNb++; |
|
3395 |
+ var crefnb = (clckNb + 1) * nmbToBeLoaded; |
|
3396 |
+ |
|
3397 |
+ $("#loadMoreMsgs").css("display", "none"); |
|
3398 |
+ |
|
3399 |
+ if (crefnb > convDataprn.length) { |
|
3400 |
+ var nmbmsg = convDataprn.length - 1; |
|
3401 |
+ $("#loadMoreMsgsusr").css("display", "none"); |
|
3402 |
+ } else { |
|
3403 |
+ var nmbmsg = crefnb - 1; |
|
3404 |
+ $("#loadMoreMsgsusr").css("display", "block"); |
|
3405 |
+ } |
|
3406 |
+ |
|
3407 |
+ var rowMessageArrAddst = []; |
|
3408 |
+ |
|
3409 |
+ for (var q = nmbmsg; q >= clckNb * nmbToBeLoaded; q--) { |
|
3410 |
+ |
|
3411 |
+ rowMessageArrAddst.push(convDataprn[q]); |
|
3412 |
+ } |
|
3413 |
+ |
|
3414 |
+ var convDataPerNmbradst = rowMessageArrAddst.join(""); |
|
3415 |
+ |
|
3416 |
+ var scrlheight = $("#msgListRowCell").height(); |
|
3417 |
+ $("#msgListRowCell").prepend(convDataPerNmbradst); |
|
3418 |
+ |
|
3419 |
+ $("#frmMsgLstWrap").scrollTop($("#msgListRowCell").height() - scrlheight); |
|
3420 |
+ }); |
|
3421 |
+ |
|
3422 |
+ |
|
3423 |
+ $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); |
|
3424 |
+ $("#diplNmAllMsg").css("color", "#04957b"); |
|
3425 |
+ $(this).css("color", "#1b8efe"); |
|
3426 |
+ }); |
|
3427 |
+ |
|
3428 |
+ |
|
3429 |
+ // Show again all the messages sent/received to/from the clicked number |
|
3430 |
+ $("#diplNmAllMsg").click(function() { |
|
3431 |
+ |
|
3432 |
+ $("#loadMoreMsgsusr").css("display", "none"); |
|
3433 |
+ |
|
3434 |
+ var convDataprn = []; |
|
3435 |
+ $.each(messagesPerNmbr[clckPhNumber], function(index, item) { |
|
3436 |
+ convDataprn.push(item); |
|
3437 |
+ }); |
|
3438 |
+ |
|
3439 |
+ // If the total number of messages is greater than the default number of messages to display, show the 'Load more messages' button |
|
3440 |
+ if (convDataprn.length > nmbTblDefault) { |
|
3441 |
+ $("#loadMoreMsgs").css("display", "block"); |
|
3442 |
+ var nmbToBeLoaded = nmbTblDefault; |
|
3443 |
+ } else { |
|
3444 |
+ $("#loadMoreMsgs").css("display", "none"); |
|
3445 |
+ var nmbToBeLoaded = convDataprn.length; |
|
3446 |
+ } |
|
3447 |
+ |
|
3448 |
+ |
|
3449 |
+ var rowMessageArrprnst = []; |
|
3450 |
+ |
|
3451 |
+ for (var n = nmbToBeLoaded - 1; n >= 0; n--) { |
|
3452 |
+ rowMessageArrprnst.push(convDataprn[n]); |
|
3453 |
+ } |
|
3454 |
+ |
|
3455 |
+ var convDataPerNmbrprnst = rowMessageArrprnst.join(""); |
|
3456 |
+ |
|
3457 |
+ $("#msgListRowCell").empty(); |
|
3458 |
+ $("#msgListRowCell").append(convDataPerNmbrprnst); |
|
3459 |
+ |
|
3460 |
+ // Scroll down to the bottom of the window |
|
3461 |
+ $("#frmMsgLstWrap").animate({scrollTop:$("#frmMsgLstTbl").prop("scrollHeight")},200); |
|
3462 |
+ |
|
3463 |
+ |
|
3464 |
+ // Load more messages |
|
3465 |
+ var clckNb = 0; |
|
3466 |
+ $("#loadMoreMsgsusr").unbind("click"); |
|
3467 |
+ $("#loadMoreMsgsusr").click(function() { |
|
3468 |
+ |
|
3469 |
+ clckNb++; |
|
3470 |
+ var crefnb = (clckNb + 1) * nmbToBeLoaded; |
|
3471 |
+ |
|
3472 |
+ $("#loadMoreMsgs").css("display", "none"); |
|
3473 |
+ |
|
3474 |
+ if (crefnb > convDataprn.length) { |
|
3475 |
+ var nmbmsg = convDataprn.length - 1; |
|
3476 |
+ $("#loadMoreMsgsusr").css("display", "none"); |
|
3477 |
+ } else { |
|
3478 |
+ var nmbmsg = crefnb - 1; |
|
3479 |
+ $("#loadMoreMsgsusr").css("display", "block"); |
|
3480 |
+ } |
|
3481 |
+ |
|
3482 |
+ var rowMessageArrAddst = []; |
|
3483 |
+ |
|
3484 |
+ for (var q = nmbmsg; q >= clckNb * nmbToBeLoaded; q--) { |
|
3485 |
+ |
|
3486 |
+ rowMessageArrAddst.push(convDataprn[q]); |
|
3487 |
+ } |
|
3488 |
+ |
|
3489 |
+ var convDataPerNmbradst = rowMessageArrAddst.join(""); |
|
3490 |
+ |
|
3491 |
+ var scrlheight = $("#msgListRowCell").height(); |
|
3492 |
+ $("#msgListRowCell").prepend(convDataPerNmbradst); |
|
3493 |
+ |
|
3494 |
+ $("#frmMsgLstWrap").scrollTop($("#msgListRowCell").height() - scrlheight); |
|
3495 |
+ }); |
|
3496 |
+ |
|
3497 |
+ |
|
3498 |
+ $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); |
|
3499 |
+ $("#diplNmAllMsg").css("color", "#04957b"); |
|
3500 |
+ $(this).css("color", "#04c6a4"); |
|
3501 |
+ |
|
3502 |
+ }); |
|
3503 |
+ |
|
3504 |
+ |
|
3505 |
+ // Show the scroll-up arrow |
|
3506 |
+ $("#frmMsgLstWrap").scroll(function() { |
|
3507 |
+ if ($(this).scrollTop() > 900) { |
|
3508 |
+ $('#upArrowSmall').fadeIn(); |
|
3509 |
+ } else { |
|
3510 |
+ $('#upArrowSmall').fadeOut(); |
|
3511 |
+ } |
|
3512 |
+ }); |
|
3513 |
+ |
|
3514 |
+ $("#upArrowSmall").click(function() { |
|
3515 |
+ $("#frmMsgLstWrap").animate({scrollTop : 0},400); |
|
3516 |
+ }); |
|
3517 |
+ |
|
3518 |
+ }, |
|
3519 |
+ error: function() { |
|
3520 |
+ showAlert("Error while attempting to get message data from the database!"); |
|
3521 |
+ $('#listAllMsgsFromTo').removeClass('icon-loading'); |
|
3522 |
+ } |
|
3523 |
+ }); |
|
3524 |
+ } |
|
3525 |
+ |
|
3526 |
+ |
|
3527 |
+ $('[id^="showMsgFrom-"]').click(function() { |
|
3528 |
+ |
|
3529 |
+ var ctrwnb = $(this).attr("id").replace("showMsgFrom-", ""); |
|
3530 |
+ if ($("#frmNmbr-"+ ctrwnb).text().indexOf(":") > -1) { |
|
3531 |
+ var clckPhNumber = $("#frmNmbr-"+ ctrwnb).text().split(": ")[1]; |
|
3532 |
+ } else { var clckPhNumber = $("#frmNmbr-"+ ctrwnb).text(); } |
|
3533 |
+ |
|
3534 |
+ showMsgPerNmbr(clckPhNumber); |
|
3535 |
+ }) |
|
3536 |
+ |
|
3537 |
+ $('[id^="showMsgTo-"]').click(function() { |
|
3538 |
+ var ctrwnbTo = $(this).attr("id").replace("showMsgTo-", ""); |
|
3539 |
+ var clckPhNbTo = $("#toNmbr-"+ ctrwnbTo).text(); |
|
3540 |
+ |
|
3541 |
+ showMsgPerNmbr(clckPhNbTo); |
|
3542 |
+ }) |
|
3543 |
+ |
|
3544 |
+ |
|
3545 |
+ // Add pagination |
|
3546 |
+ var rowsShown = messagesperpage; |
|
3547 |
+ var rowsTotal = $("#sentSmsTable tr").length; |
|
3548 |
+ var numPages = (rowsTotal - 2) / rowsShown; |
|
3549 |
+ |
|
3550 |
+ for (i = 0; i < numPages; i++) { |
|
3551 |
+ var pageNum = i + 1; |
|
3552 |
+ $('#paginationsent').append('<a href="#" rel="' + i + '" class="pagenumbers">' + pageNum + '</a> '); |
|
3553 |
+ } |
|
3554 |
+ |
|
3555 |
+ $('#paginationsent').children(":first").addClass('active'); |
|
3556 |
+ |
|
3557 |
+ $('#paginationsent a:first').addClass('active'); |
|
3558 |
+ |
|
3559 |
+ // Show table page when clicking on page number |
|
3560 |
+ $('.pages a').bind('click', function () { |
|
3561 |
+ |
|
3562 |
+ $('#paginationsent').children().removeClass('active'); |
|
3563 |
+ |
|
3564 |
+ $(this).addClass('active'); |
|
3565 |
+ |
|
3566 |
+ var currentsentPgNo = $(this).text(); |
|
3567 |
+ |
|
3568 |
+ $('#paginationsent a').each(function() { |
|
3569 |
+ if ($(this).text() == currentsentPgNo) { |
|
3570 |
+ $(this).addClass('active'); |
|
3571 |
+ } |
|
3572 |
+ }); |
|
3573 |
+ |
|
3574 |
+ // Sort table rows |
|
3575 |
+ var rows = $('#sentSmsTable tr').get(); |
|
3576 |
+ |
|
3577 |
+ rows.sort(function(a, b) { |
|
3578 |
+ |
|
3579 |
+ var A = parseInt($('td.sentdbidcolumn', a).text()); |
|
3580 |
+ var B = parseInt($('td.sentdbidcolumn', b).text()); |
|
3581 |
+ |
|
3582 |
+ if (A < B) { |
|
3583 |
+ return -1; |
|
3584 |
+ } |
|
3585 |
+ |
|
3586 |
+ if (A > B) { |
|
3587 |
+ return 1; |
|
3588 |
+ } |
|
3589 |
+ |
|
3590 |
+ return 0; |
|
3591 |
+ }); |
|
3592 |
+ |
|
3593 |
+ $.each(rows, function(index, row) { |
|
3594 |
+ $('#sentSmsTable').append(row); |
|
3595 |
+ }); |
|
3596 |
+ |
|
3597 |
+ var currPage = $(this).attr('rel'); |
|
3598 |
+ var startItem = currPage * rowsShown; |
|
3599 |
+ var endItem = startItem + rowsShown; |
|
3600 |
+ |
|
3601 |
+ $('.sentrowsbody').hide().slice(startItem, endItem).css('display', 'table-row'); |
|
3602 |
+ |
|
3603 |
+ $('#totalsentmessages').remove(); |
|
3604 |
+ $('#smstables').append("<div id='totalsentmessages'>Total displayed messages: " + sentparseddata.length + "</div>"); |
|
3605 |
+ }); |
|
3606 |
+ |
|
3607 |
+ $('#paginationsent').children(":last").trigger('click'); |
|
3608 |
+ |
|
3609 |
+ // Select all records |
|
3610 |
+ $('#selectAllChckbx').change(function() { |
|
3611 |
+ if ($(this).is(':checked')) { |
|
3612 |
+ $(".indivchckbx").prop("checked", true); |
|
3613 |
+ } else { |
|
3614 |
+ $(".indivchckbx").prop("checked", false); |
|
3615 |
+ } |
|
3616 |
+ }); |
|
3617 |
+ |
|
3618 |
+ function reorderSentRows() { |
|
3619 |
+ var currenttext = $(".filterbuttonsent").closest('[class="filterbuttonsent"]').find('[class="indivfiltersent"]').text(); |
|
3620 |
+ if (currenttext == '') { |
|
3621 |
+ $('tr').sort(function (a, b) { |
|
3622 |
+ return parseInt($('td.sentdbidcolumn', b).text()) < parseInt($('td.sentdbidcolumn', a).text()); |
|
3623 |
+ }).appendTo("#sentSmsTable"); |
|
3624 |
+ } |
|
3625 |
+ } |
|
3626 |
+ |
|
3627 |
+ // Filter rows |
|
3628 |
+ $("#databaseidfilter").on("click", function(event) { |
|
3629 |
+ |
|
3630 |
+ var databaseId = $("#dbidtextsent").val(); |
|
3631 |
+ var msgrowsNo = 0; |
|
3632 |
+ |
|
3633 |
+ $(".sentrowsbody").each(function() { |
|
3634 |
+ |
|
3635 |
+ var checkEmpty = 0; |
|
3636 |
+ $(".indivfiltersent").not("#dbidtextsent").each(function() { |
|
3637 |
+ if ($(this).val() != '') { |
|
3638 |
+ checkEmpty = 1; |
|
3639 |
+ } |
|
3640 |
+ }); |
|
3641 |
+ |
|
3642 |
+ if (checkEmpty == 0) { |
|
3643 |
+ $(this).show(); |
|
3644 |
+ } |
|
3645 |
+ |
|
3646 |
+ if (databaseId != '') { |
|
3647 |
+ if ($(this).find('[class="sentdbidcolumn"]').text() == databaseId) { |
|
3648 |
+ $("#sentSmsTable").append(this); |
|
3649 |
+ if ($(this).is(":visible")) { msgrowsNo++; } |
|
3650 |
+ } else { |
|
3651 |
+ $(this).hide(); |
|
3652 |
+ } |
|
3653 |
+ } else { |
|
3654 |
+ $(this).show(); |
|
3655 |
+ msgrowsNo++; |
|
3656 |
+ } |
|
3657 |
+ }); |
|
3658 |
+ |
|
3659 |
+ reorderSentRows(); |
|
3660 |
+ $('#totalsentmessages').remove(); |
|
3661 |
+ $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>"); |
|
3662 |
+ }); |
|
3663 |
+ |
|
3664 |
+ $("#useridfilter").on("click", function(event) { |
|
3665 |
+ |
|
3666 |
+ var useridtxt = $("#useridtext").val().toLowerCase(); |
|
3667 |
+ var msgrowsNo = 0; |
|
3668 |
+ |
|
3669 |
+ $(".sentrowsbody").each(function() { |
|
3670 |
+ |
|
3671 |
+ var checkEmpty1 = 0; |
|
3672 |
+ $(".indivfiltersent").not("#useridtext").each(function() { |
|
3673 |
+ if ($(this).val() != '') { |
|
3674 |
+ checkEmpty1 = 1; |
|
3675 |
+ } |
|
3676 |
+ }); |
|
3677 |
+ |
|
3678 |
+ if (checkEmpty1 == 0) { |
|
3679 |
+ $(this).show(); |
|
3680 |
+ } |
|
3681 |
+ |
|
3682 |
+ if (useridtxt != '') { |
|
3683 |
+ var founduserid = $(this).find('[class="useridcolsent"]').text().toLowerCase(); |
|
3684 |
+ if (founduserid.indexOf(useridtxt) != -1) { |
|
3685 |
+ $("#sentSmsTable").append(this); |
|
3686 |
+ if ($(this).is(":visible")) { msgrowsNo++; } |
|
3687 |
+ } else { |
|
3688 |
+ $(this).hide(); |
|
3689 |
+ } |
|
3690 |
+ } else { |
|
3691 |
+ $(this).show(); |
|
3692 |
+ msgrowsNo++; |
|
3693 |
+ } |
|
3694 |
+ }); |
|
3695 |
+ |
|
3696 |
+ reorderSentRows(); |
|
3697 |
+ $('#totalsentmessages').remove(); |
|
3698 |
+ $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>"); |
|
3699 |
+ }); |
|
3700 |
+ |
|
3701 |
+ $("#messageidfilter").on("click", function(event) { |
|
3702 |
+ |
|
3703 |
+ var messageidtxt = $("#messageidtext").val().toLowerCase(); |
|
3704 |
+ var msgrowsNo = 0; |
|
3705 |
+ |
|
3706 |
+ $(".sentrowsbody").each(function() { |
|
3707 |
+ |
|
3708 |
+ var checkEmpty2 = 0; |
|
3709 |
+ $(".indivfiltersent").not("#messageidtext").each(function() { |
|
3710 |
+ if ($(this).val() != '') { |
|
3711 |
+ checkEmpty2 = 1; |
|
3712 |
+ } |
|
3713 |
+ }); |
|
3714 |
+ |
|
3715 |
+ if (checkEmpty2 == 0) { |
|
3716 |
+ $(this).show(); |
|
3717 |
+ } |
|
3718 |
+ |
|
3719 |
+ if (messageidtxt != '') { |
|
3720 |
+ var foundtdmssgid = $(this).find('[class="messageidcolsent"]').text().toLowerCase(); |
|
3721 |
+ if (foundtdmssgid.indexOf(messageidtxt) != -1) { |
|
3722 |
+ $("#sentSmsTable").append(this); |
|
3723 |
+ if ($(this).is(":visible")) { msgrowsNo++; } |
|
3724 |
+ } else { |
|
3725 |
+ $(this).hide(); |
|
3726 |
+ } |
|
3727 |
+ } else { |
|
3728 |
+ $(this).show(); |
|
3729 |
+ msgrowsNo++; |
|
3730 |
+ } |
|
3731 |
+ }); |
|
3732 |
+ |
|
3733 |
+ reorderSentRows(); |
|
3734 |
+ $('#totalsentmessages').remove(); |
|
3735 |
+ $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>"); |
|
3736 |
+ }); |
|
3737 |
+ |
|
3738 |
+ $("#datefilter").on("click", function(event) { |
|
3739 |
+ |
|
3740 |
+ var datetxtvr = $("#datetext").val().toLowerCase(); |
|
3741 |
+ var msgrowsNo = 0; |
|
3742 |
+ |
|
3743 |
+ $(".sentrowsbody").each(function() { |
|
3744 |
+ |
|
3745 |
+ var checkEmpty3 = 0; |
|
3746 |
+ $(".indivfiltersent").not("#datetext").each(function() { |
|
3747 |
+ if ($(this).val() != '') { |
|
3748 |
+ checkEmpty3 = 1; |
|
3749 |
+ } |
|
3750 |
+ }); |
|
3751 |
+ |
|
3752 |
+ if (checkEmpty3 == 0) { |
|
3753 |
+ $(this).show(); |
|
3754 |
+ } |
|
3755 |
+ |
|
3756 |
+ if (datetxtvr != '') { |
|
3757 |
+ var founddate = $(this).find('[class="datecolsent"]').text().toLowerCase(); |
|
3758 |
+ if (founddate.indexOf(datetxtvr) != -1) { |
|
3759 |
+ $("#sentSmsTable").append(this); |
|
3760 |
+ if ($(this).is(":visible")) { msgrowsNo++; } |
|
3761 |
+ } else { |
|
3762 |
+ $(this).hide(); |
|
3763 |
+ } |
|
3764 |
+ } else { |
|
3765 |
+ $(this).show(); |
|
3766 |
+ msgrowsNo++; |
|
3767 |
+ } |
|
3768 |
+ }); |
|
3769 |
+ |
|
3770 |
+ reorderSentRows(); |
|
3771 |
+ $('#totalsentmessages').remove(); |
|
3772 |
+ $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>"); |
|
3773 |
+ }); |
|
3774 |
+ |
|
3775 |
+ $("#fromfilter").on("click", function(event) { |
|
3776 |
+ |
|
3777 |
+ var fromtxtvr = $("#fromtext").val().toLowerCase(); |
|
3778 |
+ var msgrowsNo = 0; |
|
3779 |
+ |
|
3780 |
+ $(".sentrowsbody").each(function() { |
|
3781 |
+ |
|
3782 |
+ var checkEmpty4 = 0; |
|
3783 |
+ $(".indivfiltersent").not("#fromtext").each(function() { |
|
3784 |
+ if ($(this).val() != '') { |
|
3785 |
+ checkEmpty4 = 1; |
|
3786 |
+ } |
|
3787 |
+ }); |
|
3788 |
+ |
|
3789 |
+ if (checkEmpty4 == 0) { |
|
3790 |
+ $(this).show(); |
|
3791 |
+ } |
|
3792 |
+ |
|
3793 |
+ if (fromtxtvr != '') { |
|
3794 |
+ var foundfrom = $(this).find('[class="fromcolumnsent"]').text().toLowerCase(); |
|
3795 |
+ if (foundfrom.indexOf(fromtxtvr) != -1) { |
|
3796 |
+ $("#sentSmsTable").append(this); |
|
3797 |
+ if ($(this).is(":visible")) { msgrowsNo++; } |
|
3798 |
+ } else { |
|
3799 |
+ $(this).hide(); |
|
3800 |
+ } |
|
3801 |
+ } else { |
|
3802 |
+ $(this).show(); |
|
3803 |
+ msgrowsNo++; |
|
3804 |
+ } |
|
3805 |
+ }); |
|
3806 |
+ |
|
3807 |
+ reorderSentRows(); |
|
3808 |
+ $('#totalsentmessages').remove(); |
|
3809 |
+ $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>"); |
|
3810 |
+ }); |
|
3811 |
+ |
|
3812 |
+ $("#tofilter").on("click", function(event) { |
|
3813 |
+ |
|
3814 |
+ var totxtvr = $("#totext").val().toLowerCase(); |
|
3815 |
+ var msgrowsNo = 0; |
|
3816 |
+ |
|
3817 |
+ $(".sentrowsbody").each(function() { |
|
3818 |
+ |
|
3819 |
+ var checkEmpty5 = 0; |
|
3820 |
+ $(".indivfiltersent").not("#totext").each(function() { |
|
3821 |
+ if ($(this).val() != '') { |
|
3822 |
+ checkEmpty5 = 1; |
|
3823 |
+ } |
|
3824 |
+ }); |
|
3825 |
+ |
|
3826 |
+ if (checkEmpty5 == 0) { |
|
3827 |
+ $(this).show(); |
|
3828 |
+ } |
|
3829 |
+ |
|
3830 |
+ if (totxtvr != '') { |
|
3831 |
+ var foundto = $(this).find('[class="tocolumnsent"]').text().toLowerCase(); |
|
3832 |
+ if (foundto.indexOf(totxtvr) != -1) { |
|
3833 |
+ $("#sentSmsTable").append(this); |
|
3834 |
+ if ($(this).is(":visible")) { msgrowsNo++; } |
|
3835 |
+ } else { |
|
3836 |
+ $(this).hide(); |
|
3837 |
+ } |
|
3838 |
+ } else { |
|
3839 |
+ $(this).show(); |
|
3840 |
+ msgrowsNo++; |
|
3841 |
+ } |
|
3842 |
+ }); |
|
3843 |
+ |
|
3844 |
+ reorderSentRows(); |
|
3845 |
+ $('#totalsentmessages').remove(); |
|
3846 |
+ $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>"); |
|
3847 |
+ }); |
|
3848 |
+ |
|
3849 |
+ $("#networkfilter").on("click", function(event) { |
|
3850 |
+ |
|
3851 |
+ var networktxtvr = $("#networktext").val().toLowerCase(); |
|
3852 |
+ var msgrowsNo = 0; |
|
3853 |
+ |
|
3854 |
+ $(".sentrowsbody").each(function() { |
|
3855 |
+ |
|
3856 |
+ var checkEmpty6 = 0; |
|
3857 |
+ $(".indivfiltersent").not("#networktext").each(function() { |
|
3858 |
+ if ($(this).val() != '') { |
|
3859 |
+ checkEmpty6 = 1; |
|
3860 |
+ } |
|
3861 |
+ }); |
|
3862 |
+ |
|
3863 |
+ if (checkEmpty6 == 0) { |
|
3864 |
+ $(this).show(); |
|
3865 |
+ } |
|
3866 |
+ |
|
3867 |
+ if (networktxtvr != '') { |
|
3868 |
+ var foundnetwork = $(this).find('[class="networkcolumnsent"]').text().toLowerCase(); |
|
3869 |
+ if (foundnetwork.indexOf(networktxtvr) != -1) { |
|
3870 |
+ $("#sentSmsTable").append(this); |
|
3871 |
+ if ($(this).is(":visible")) { msgrowsNo++; } |
|
3872 |
+ } else { |
|
3873 |
+ $(this).hide(); |
|
3874 |
+ } |
|
3875 |
+ } else { |
|
3876 |
+ $(this).show(); |
|
3877 |
+ msgrowsNo++; |
|
3878 |
+ } |
|
3879 |
+ }); |
|
3880 |
+ |
|
3881 |
+ reorderSentRows(); |
|
3882 |
+ $('#totalsentmessages').remove(); |
|
3883 |
+ $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>"); |
|
3884 |
+ }); |
|
3885 |
+ |
|
3886 |
+ $("#pricefilter").on("click", function(event) { |
|
3887 |
+ |
|
3888 |
+ var pricetxtvr = $("#pricetext").val().toLowerCase(); |
|
3889 |
+ var msgrowsNo = 0; |
|
3890 |
+ |
|
3891 |
+ $(".sentrowsbody").each(function() { |
|
3892 |
+ |
|
3893 |
+ var checkEmpty7 = 0; |
|
3894 |
+ $(".indivfiltersent").not("#pricetext").each(function() { |
|
3895 |
+ if ($(this).val() != '') { |
|
3896 |
+ checkEmpty7 = 1; |
|
3897 |
+ } |
|
3898 |
+ }); |
|
3899 |
+ |
|
3900 |
+ if (checkEmpty7 == 0) { |
|
3901 |
+ $(this).show(); |
|
3902 |
+ } |
|
3903 |
+ |
|
3904 |
+ if (pricetxtvr != '') { |
|
3905 |
+ var foundprice = $(this).find('[class="pricecolumnsent"]').text().toLowerCase(); |
|
3906 |
+ if (foundprice.indexOf(pricetxtvr) != -1) { |
|
3907 |
+ $("#sentSmsTable").append(this); |
|
3908 |
+ if ($(this).is(":visible")) { msgrowsNo++; } |
|
3909 |
+ } else { |
|
3910 |
+ $(this).hide(); |
|
3911 |
+ } |
|
3912 |
+ } else { |
|
3913 |
+ $(this).show(); |
|
3914 |
+ msgrowsNo++; |
|
3915 |
+ } |
|
3916 |
+ }); |
|
3917 |
+ |
|
3918 |
+ reorderSentRows(); |
|
3919 |
+ $('#totalsentmessages').remove(); |
|
3920 |
+ $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>"); |
|
3921 |
+ }); |
|
3922 |
+ |
|
3923 |
+ $("#statusfilter").on("click", function(event) { |
|
3924 |
+ |
|
3925 |
+ var statustxtvr = $("#statustext").val().toLowerCase(); |
|
3926 |
+ var msgrowsNo = 0; |
|
3927 |
+ |
|
3928 |
+ $(".sentrowsbody").each(function() { |
|
3929 |
+ |
|
3930 |
+ var checkEmpty8 = 0; |
|
3931 |
+ $(".indivfiltersent").not("#statustext").each(function() { |
|
3932 |
+ if ($(this).val() != '') { |
|
3933 |
+ checkEmpty8 = 1; |
|
3934 |
+ } |
|
3935 |
+ }); |
|
3936 |
+ |
|
3937 |
+ if (checkEmpty8 == 0) { |
|
3938 |
+ $(this).show(); |
|
3939 |
+ } |
|
3940 |
+ |
|
3941 |
+ if (statustxtvr != '') { |
|
3942 |
+ var foundstatus = $(this).find('[class="statuscolumnsent"]').text().toLowerCase(); |
|
3943 |
+ if (foundstatus.indexOf(statustxtvr) != -1) { |
|
3944 |
+ $("#sentSmsTable").append(this); |
|
3945 |
+ if ($(this).is(":visible")) { msgrowsNo++; } |
|
3946 |
+ } else { |
|
3947 |
+ $(this).hide(); |
|
3948 |
+ } |
|
3949 |
+ } else { |
|
3950 |
+ $(this).show(); |
|
3951 |
+ msgrowsNo++; |
|
3952 |
+ } |
|
3953 |
+ }); |
|
3954 |
+ |
|
3955 |
+ reorderSentRows(); |
|
3956 |
+ $('#totalsentmessages').remove(); |
|
3957 |
+ $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>"); |
|
3958 |
+ }); |
|
3959 |
+ |
|
3960 |
+ $("#deliveryrecfilter").on("click", function(event) { |
|
3961 |
+ |
|
3962 |
+ var deliverytxtvr = $("#deliveryrcpttext").val().toLowerCase(); |
|
3963 |
+ var msgrowsNo = 0; |
|
3964 |
+ |
|
3965 |
+ $(".sentrowsbody").each(function() { |
|
3966 |
+ |
|
3967 |
+ var checkEmpty9 = 0; |
|
3968 |
+ $(".indivfiltersent").not("#deliveryrcpttext").each(function() { |
|
3969 |
+ if ($(this).val() != '') { |
|
3970 |
+ checkEmpty9 = 1; |
|
3971 |
+ } |
|
3972 |
+ }); |
|
3973 |
+ |
|
3974 |
+ if (checkEmpty9 == 0) { |
|
3975 |
+ $(this).show(); |
|
3976 |
+ } |
|
3977 |
+ |
|
3978 |
+ if (deliverytxtvr != '') { |
|
3979 |
+ var founddeliveryrcpt = $(this).find('[class="deliveryrcptcolsent"]').text().toLowerCase(); |
|
3980 |
+ if (founddeliveryrcpt.indexOf(deliverytxtvr) != -1) { |
|
3981 |
+ $("#sentSmsTable").append(this); |
|
3982 |
+ if ($(this).is(":visible")) { msgrowsNo++; } |
|
3983 |
+ } else { |
|
3984 |
+ $(this).hide(); |
|
3985 |
+ } |
|
3986 |
+ } else { |
|
3987 |
+ $(this).show(); |
|
3988 |
+ msgrowsNo++; |
|
3989 |
+ } |
|
3990 |
+ }); |
|
3991 |
+ |
|
3992 |
+ reorderSentRows(); |
|
3993 |
+ $('#totalsentmessages').remove(); |
|
3994 |
+ $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>"); |
|
3995 |
+ }); |
|
3996 |
+ |
|
3997 |
+ $("#messagefilter").on("click", function(event) { |
|
3998 |
+ |
|
3999 |
+ var messagetxtvr = $("#messagetext").val().toLowerCase(); |
|
4000 |
+ var msgrowsNo = 0; |
|
4001 |
+ |
|
4002 |
+ $(".sentrowsbody").each(function() { |
|
4003 |
+ |
|
4004 |
+ var checkEmpty10 = 0; |
|
4005 |
+ $(".indivfiltersent").not("#messagetext").each(function() { |
|
4006 |
+ if ($(this).val() != '') { |
|
4007 |
+ checkEmpty10 = 1; |
|
4008 |
+ } |
|
4009 |
+ }); |
|
4010 |
+ |
|
4011 |
+ if (checkEmpty10 == 0) { |
|
4012 |
+ $(this).show(); |
|
4013 |
+ } |
|
4014 |
+ |
|
4015 |
+ if (messagetxtvr != '') { |
|
4016 |
+ var foundmessage = $(this).find('[class="messagecolumnsent"]').text().toLowerCase(); |
|
4017 |
+ if (foundmessage.indexOf(messagetxtvr) != -1) { |
|
4018 |
+ $("#sentSmsTable").append(this); |
|
4019 |
+ if ($(this).is(":visible")) { msgrowsNo++; } |
|
4020 |
+ } else { |
|
4021 |
+ $(this).hide(); |
|
4022 |
+ } |
|
4023 |
+ } else { |
|
4024 |
+ $(this).show(); |
|
4025 |
+ msgrowsNo++; |
|
4026 |
+ } |
|
4027 |
+ }); |
|
4028 |
+ |
|
4029 |
+ reorderSentRows(); |
|
4030 |
+ $('#totalsentmessages').remove(); |
|
4031 |
+ $('#smstables').append("<div id='totalsentmessages'>Total filtered messages: " + msgrowsNo + "</div>"); |
|
4032 |
+ }); |
|
4033 |
+ |
|
4034 |
+ // Clear all filters |
|
4035 |
+ $("#clearsentfilters").on("click", function(event) { |
|
4036 |
+ $(".sentrowsbody").each(function() { |
|
4037 |
+ $(this).show(); |
|
4038 |
+ }); |
|
4039 |
+ $(".indivfiltersent").val(""); |
|
4040 |
+ $('#totalsentmessages').remove(); |
|
4041 |
+ $('#smstables').append("<div id='totalsentmessages'>Total displayed messages: " + sentparseddata.length + "</div>"); |
|
4042 |
+ }); |
|
4043 |
+ |
|
4044 |
+ // Delete selected rows from the database |
|
4045 |
+ $("#deletesentrows").on("click", function() { |
|
4046 |
+ |
|
4047 |
+ var checkcheckbx = jQuery("#sentSmsTable input[type=checkbox]:checked").length; |
|
4048 |
+ if (checkcheckbx == 0) { |
|
4049 |
+ showAlert("Please select the row(s) to permanently delete from the database !"); |
|
4050 |
+ } else { |
|
4051 |
+ var sentcheckboxIds = []; |
|
4052 |
+ $(".sentrowsbody").each(function() { |
|
4053 |
+ var sentrowcheckbx = $(this).find('input[type="checkbox"]'); |
|
4054 |
+ if (sentrowcheckbx.is(":checked")) { |
|
4055 |
+ var dbrowid = $(this).find('[class="sentdbidcolumn"]').text(); |
|
4056 |
+ sentcheckboxIds.push(dbrowid); |
|
4057 |
+ } |
|
4058 |
+ }); |
|
4059 |
+ |
|
4060 |
+ confirmAlert("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'."); |
|
4061 |
+ |
|
4062 |
+ $("#confirmCancel").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); }); |
|
4063 |
+ |
|
4064 |
+ $("#confirmOk").click(function() { |
|
4065 |
+ |
|
4066 |
+ $("#alertMsgOverlay").remove(); |
|
4067 |
+ $("#alertConfMessage").remove(); |
|
4068 |
+ |
|
4069 |
+ var deletesentRowsUrl = OC.generateUrl("/apps/sms_relentless/user/removesentrows"); |
|
4070 |
+ $('#smstables').addClass('icon-loading'); |
|
4071 |
+ |
|
4072 |
+ $.ajax({ |
|
4073 |
+ url: deletesentRowsUrl + '/' + userid, |
|
4074 |
+ method: "POST", |
|
4075 |
+ dataType:'text', |
|
4076 |
+ data: {sentmessagedbIDs: sentcheckboxIds}, |
|
4077 |
+ success: function() { |
|
4078 |
+ showAlert("The row(s) have been deleted successfully !"); |
|
4079 |
+ $('#smstables').removeClass('icon-loading'); |
|
4080 |
+ $('#sentsmstableshow').click(); |
|
4081 |
+ }, |
|
4082 |
+ error: function() { |
|
4083 |
+ showAlert("There was an error while deleting the selected row(s) !"); |
|
4084 |
+ $('#smstables').removeClass('icon-loading'); |
|
4085 |
+ } |
|
4086 |
+ }); |
|
4087 |
+ }); |
|
4088 |
+ } |
|
4089 |
+ }); |
|
4090 |
+ |
|
4091 |
+ // Show/Hide filter row |
|
4092 |
+ $('#sentarrow').on('click', function() { |
|
4093 |
+ if ($('#sentfiltersrow').is(':visible')) { |
|
4094 |
+ $('#sentfiltersrow').hide(); |
|
4095 |
+ $('#sentheaderrow').css('top', '0px'); |
|
4096 |
+ $(this).removeClass('arrowUpCl'); |
|
4097 |
+ $(this).addClass('arrowDownCl'); |
|
4098 |
+ } else { |
|
4099 |
+ $('#sentfiltersrow').show(); |
|
4100 |
+ $('#sentheaderrow').css('top', '158px'); |
|
4101 |
+ $(this).removeClass('arrowDownCl'); |
|
4102 |
+ $(this).addClass('arrowUpCl'); |
|
4103 |
+ } |
|
4104 |
+ }); |
|
4105 |
+ |
|
4106 |
+ $("#app-content").animate({scrollTop:$("#sentSmsTable").prop("scrollHeight")},200); |
|
4107 |
+ }, |
|
4108 |
+ error: function(sentdatafromdb) { |
|
4109 |
+ showAlert("Error! You can check the Nextcloud log to find more details about this issue."); |
|
4110 |
+ $('#smstables').removeClass('icon-loading'); |
|
4111 |
+ } |
|
4112 |
+ }); |
|
4113 |
+ |
|
4114 |
+ }); |
|
4115 |
+ |
|
4116 |
+ // List grouped messages |
|
4117 |
+ $("#groupedtableshow").on("click", function(event) { |
|
4118 |
+ |
|
4119 |
+ $('#smstables').empty(); |
|
4120 |
+ var getGroupedUrl = OC.generateUrl("/apps/sms_relentless/user/getgroupedtable"); |
|
4121 |
+ |
|
4122 |
+ $('#smstables').addClass('icon-loading'); |
|
4123 |
+ var totalPhNmbrs = 0; |
|
4124 |
+ |
|
4125 |
+ $.ajax({ |
|
4126 |
+ method: 'GET', |
|
4127 |
+ url: getGroupedUrl + '/' + userid, |
|
4128 |
+ contentType: 'application/json', |
|
4129 |
+ success: function(groupedparsed) { |
|
4130 |
+ |
|
4131 |
+ $('#smstables').append("<div id='toptablegrp'><div class='topbuttonandpage'><span id='recarrow' title='Show/Hide filters'></span></div><div id='paginationgrp' class='grppages'>Pages </div></div>"); |
|
4132 |
+ $('#smstables').append("<table id='groupedSmsTable'></table>"); |
|
4133 |
+ |
|
4134 |
+ $('#groupedSmsTable').append("<tr id='grpfiltersrow'><td colspan='2'><div id='filterByNumber'></div></td><td><button id='cleargrpfilter' title='Clear the filter'></button></td></tr>"); |
|
4135 |
+ $('#groupedSmsTable').append("<tr class='groupedmsgrows' id='grpheaderrow'><th>Phone Number</th><th>Senders / Receivers</th><th>Messages</th></tr>"); |
|
4136 |
+ |
|
4137 |
+ $('#grpfiltersrow').hide(); |
|
4138 |
+ |
|
4139 |
+ var fromtoNmbrsData = []; |
|
4140 |
+ var fromtoNumberArr = []; |
|
4141 |
+ |
|
4142 |
+ for (var i = 0; i < groupedparsed.length; i++) { |
|
4143 |
+ |
|
4144 |
+ if (groupedparsed[i].author_displayname) { |
|
4145 |
+ var authordnm = groupedparsed[i].author_displayname; |
|
4146 |
+ } else { |
|
4147 |
+ var authordnm = ''; |
|
4148 |
+ } |
|
4149 |
+ |
|
4150 |
+ var sentfromnmbrarr = groupedparsed[i].from.split("+"); |
|
4151 |
+ if (sentfromnmbrarr[1]) { |
|
4152 |
+ var groupednbfrom = "+"+ sentfromnmbrarr[1]; |
|
4153 |
+ } else { |
|
4154 |
+ var groupednbfrom = sentfromnmbrarr[0]; |
|
4155 |
+ } |
|
4156 |
+ |
|
4157 |
+ var modmessage = ''; |
|
4158 |
+ if (groupedparsed[i].author_displayname) { |
|
4159 |
+ modmessage = "<span class='msgAuthorNameGrp'>"+ groupedparsed[i].author_displayname + ":</span>" + groupedparsed[i].message; |
|
4160 |
+ } else { |
|
4161 |
+ modmessage = groupedparsed[i].message; |
|
4162 |
+ } |
|
4163 |
+ |
|
4164 |
+ if (groupedparsed[i].to.indexOf(": ") > -1) { |
|
4165 |
+ var groupednmbrtopre = groupedparsed[i].to.split(": "); |
|
4166 |
+ var groupednmbrto = groupednmbrtopre[1]; |
|
4167 |
+ } else { |
|
4168 |
+ var groupednmbrto = groupedparsed[i].to; |
|
4169 |
+ } |
|
4170 |
+ |
|
4171 |
+ fromtoNmbrsData.push({ |
|
4172 |
+ 'author_displayname': authordnm, |
|
4173 |
+ 'from': groupednbfrom, |
|
4174 |
+ 'to': groupednmbrto, |
|
4175 |
+ 'message': modmessage, |
|
4176 |
+ 'date': groupedparsed[i].date, |
|
4177 |
+ 'status': groupedparsed[i].deliveryreceipt, |
|
4178 |
+ 'table': groupedparsed[i].table |
|
4179 |
+ }); |
|
4180 |
+ |
|
4181 |
+ if (fromtoNumberArr.indexOf(groupednbfrom) == -1) { fromtoNumberArr.push(groupednbfrom); } |
|
4182 |
+ if (fromtoNumberArr.indexOf(groupednmbrto) == -1) { fromtoNumberArr.push(groupednmbrto); } |
|
4183 |
+ } |
|
4184 |
+ |
|
4185 |
+ totalPhNmbrs = fromtoNumberArr.length; |
|
4186 |
+ |
|
4187 |
+ // Remove the duplicates |
|
4188 |
+ var noDupMsgData = []; |
|
4189 |
+ $.each(fromtoNmbrsData, function(i, e) { |
|
4190 |
+ var matchingData = $.grep(noDupMsgData, function(item) { |
|
4191 |
+ return item.from == e.from && item.to == e.to && item.message == e.message && item.table == 'received' && e.table == 'sent' |
|
4192 |
+ }); |
|
4193 |
+ if (matchingData.length === 0) { |
|
4194 |
+ noDupMsgData.push(e); |
|
4195 |
+ } |
|
4196 |
+ }); |
|
4197 |
+ |
|
4198 |
+ var messagesPerNmbr = {}; |
|
4199 |
+ var msgsNamesPerNmbr = {}; |
|
4200 |
+ var msgsNmbrsNames = {}; |
|
4201 |
+ |
|
4202 |
+ for (var k = 0; k < fromtoNumberArr.length; k++) { |
|
4203 |
+ |
|
4204 |
+ var displayNamesarr = []; |
|
4205 |
+ var convData = []; |
|
4206 |
+ |
|
4207 |
+ for (var n = 0; n < noDupMsgData.length; n++) { |
|
4208 |
+ |
|
4209 |
+ if (noDupMsgData[n]['from'] == fromtoNumberArr[k] && noDupMsgData[n]['table'] == 'sent') { |
|
4210 |
+ |
|
4211 |
+ convData.push({ |
|
4212 |
+ 'author_displayname': noDupMsgData[n]['author_displayname'], |
|
4213 |
+ 'message': noDupMsgData[n]['message'], |
|
4214 |
+ 'from': noDupMsgData[n]['from'], |
|
4215 |
+ 'to': noDupMsgData[n]['to'], |
|
4216 |
+ 'date': noDupMsgData[n]['date'], |
|
4217 |
+ 'direction': 'sent_from', |
|
4218 |
+ 'status': noDupMsgData[n]['status'], |
|
4219 |
+ 'table': noDupMsgData[n]['table'] |
|
4220 |
+ }); |
|
4221 |
+ |
|
4222 |
+ } else if (noDupMsgData[n]['to'] == fromtoNumberArr[k] && noDupMsgData[n]['table'] == 'sent') { |
|
4223 |
+ |
|
4224 |
+ convData.push({ |
|
4225 |
+ 'author_displayname': noDupMsgData[n]['author_displayname'], |
|
4226 |
+ 'message': noDupMsgData[n]['message'], |
|
4227 |
+ 'from': noDupMsgData[n]['from'], |
|
4228 |
+ 'to': noDupMsgData[n]['to'], |
|
4229 |
+ 'date': noDupMsgData[n]['date'], |
|
4230 |
+ 'direction': 'sent_to', |
|
4231 |
+ 'status': noDupMsgData[n]['status'], |
|
4232 |
+ 'table': noDupMsgData[n]['table'] |
|
4233 |
+ }); |
|
4234 |
+ |
|
4235 |
+ |
|
4236 |
+ } else if (noDupMsgData[n]['from'] == fromtoNumberArr[k] && noDupMsgData[n]['table'] == 'received') { |
|
4237 |
+ |
|
4238 |
+ convData.push({ |
|
4239 |
+ 'author_displayname': noDupMsgData[n]['author_displayname'], |
|
4240 |
+ 'message': noDupMsgData[n]['message'], |
|
4241 |
+ 'from': noDupMsgData[n]['from'], |
|
4242 |
+ 'to': noDupMsgData[n]['to'], |
|
4243 |
+ 'date': noDupMsgData[n]['date'], |
|
4244 |
+ 'direction': 'received_from', |
|
4245 |
+ 'status': noDupMsgData[n]['status'], |
|
4246 |
+ 'table': noDupMsgData[n]['table'] |
|
4247 |
+ }); |
|
4248 |
+ |
|
4249 |
+ } else if (noDupMsgData[n]['to'] == fromtoNumberArr[k] && noDupMsgData[n]['table'] == 'received') { |
|
4250 |
+ |
|
4251 |
+ convData.push({ |
|
4252 |
+ 'author_displayname': noDupMsgData[n]['author_displayname'], |
|
4253 |
+ 'message': noDupMsgData[n]['message'], |
|
4254 |
+ 'from': noDupMsgData[n]['from'], |
|
4255 |
+ 'to': noDupMsgData[n]['to'], |
|
4256 |
+ 'date': noDupMsgData[n]['date'], |
|
4257 |
+ 'direction': 'received_on', |
|
4258 |
+ 'status': noDupMsgData[n]['status'], |
|
4259 |
+ 'table': noDupMsgData[n]['table'] |
|
4260 |
+ }); |
|
4261 |
+ } |
|
4262 |
+ } |
|
4263 |
+ |
|
4264 |
+ // Sort messages by date |
|
4265 |
+ convData.sort(function(a, b) { |
|
4266 |
+ var c = new Date(a.date); |
|
4267 |
+ var d = new Date(b.date); |
|
4268 |
+ return c-d; |
|
4269 |
+ }); |
|
4270 |
+ |
|
4271 |
+ // Collect the display names of the users that sent messages from the current number |
|
4272 |
+ var selectedNames = []; |
|
4273 |
+ var displayNames = ''; |
|
4274 |
+ for (var v = 0; v < convData.length; v++) { |
|
4275 |
+ if (selectedNames.indexOf(convData[v]['author_displayname']) == -1) { |
|
4276 |
+ selectedNames.push(convData[v]['author_displayname']); |
|
4277 |
+ displayNames += "<div id='diplNm_"+ fromtoNumberArr[k] +"_"+ v +"' class='dispNameList' name='"+ convData[v]['author_displayname'] +"'>"+ convData[v]['author_displayname'] +"</div>"; |
|
4278 |
+ } |
|
4279 |
+ } |
|
4280 |
+ |
|
4281 |
+ // Store the display names for the current number, to be able to see them later when selecting the number from the drop-down list |
|
4282 |
+ var ctPhNumber = fromtoNumberArr[k]; |
|
4283 |
+ msgsNamesPerNmbr[ctPhNumber] = displayNames; |
|
4284 |
+ |
|
4285 |
+ // Store the messages sent by each user, to be able to see them later when clicking on the user's name |
|
4286 |
+ for (var h = 0; h < selectedNames.length; h++) { |
|
4287 |
+ |
|
4288 |
+ var rowMessageArrpn = []; |
|
4289 |
+ for (var b = 0; b < convData.length; b++) { |
|
4290 |
+ |
|
4291 |
+ if (selectedNames[h] == convData[b]['author_displayname']) { |
|
4292 |
+ |
|
4293 |
+ if (convData[b]['direction'] == 'sent_from') { |
|
4294 |
+ if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1) { |
|
4295 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
4296 |
+ } else { |
|
4297 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
4298 |
+ } |
|
4299 |
+ rowMessageArrpn.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
4300 |
+ } else if (convData[b]['direction'] == 'sent_to') { |
|
4301 |
+ if (convData[b]['status'].indexOf("delivered") > -1 || convData[b]['status'].indexOf("delivery success") > -1) { |
|
4302 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
4303 |
+ } else { |
|
4304 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
4305 |
+ } |
|
4306 |
+ rowMessageArrpn.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
4307 |
+ } else if (convData[b]['direction'] == 'received_from') { |
|
4308 |
+ rowMessageArrpn.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div></div>"); |
|
4309 |
+ } else if (convData[b]['direction'] == 'received_on') { |
|
4310 |
+ rowMessageArrpn.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[b]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[b]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[b]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[b]['date'] +"</div></div>"); |
|
4311 |
+ } |
|
4312 |
+ } |
|
4313 |
+ } |
|
4314 |
+ var convDataPerNmbrpn = rowMessageArrpn.join("<br>"); |
|
4315 |
+ var crtNmber = fromtoNumberArr[k]; |
|
4316 |
+ var crtName = selectedNames[h]; |
|
4317 |
+ msgsNmbrsNames[crtNmber] = msgsNmbrsNames[crtNmber] || {}; |
|
4318 |
+ msgsNmbrsNames[crtNmber][crtName] = convDataPerNmbrpn; |
|
4319 |
+ } |
|
4320 |
+ |
|
4321 |
+ var rowMessageArr = []; |
|
4322 |
+ for (var m = 0; m < convData.length; m++) { |
|
4323 |
+ |
|
4324 |
+ if (convData[m]['direction'] == 'sent_from') { |
|
4325 |
+ |
|
4326 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
4327 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
4328 |
+ } else { |
|
4329 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
4330 |
+ } |
|
4331 |
+ rowMessageArr.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 6px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
4332 |
+ |
|
4333 |
+ } else if (convData[m]['direction'] == 'sent_to') { |
|
4334 |
+ |
|
4335 |
+ if (convData[m]['status'].indexOf("delivered") > -1 || convData[m]['status'].indexOf("delivery success") > -1) { |
|
4336 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/check.svg' title='`delivery success` received.'>"; |
|
4337 |
+ } else { |
|
4338 |
+ var sentMsgStatus = "<img src='/apps/sms_relentless/img/question.svg' title='This message did not receive a `delivery success` receipt. However, it is possible that it reached its destination.'>"; |
|
4339 |
+ } |
|
4340 |
+ rowMessageArr.push("<div class='groupedSentMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;color:#06866f;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/outgoing.svg' title='Message sent to current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:inline-block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div><div class='sentMssgStatus'>"+ sentMsgStatus +"</div></div>"); |
|
4341 |
+ |
|
4342 |
+ } else if (convData[m]['direction'] == 'received_from') { |
|
4343 |
+ |
|
4344 |
+ rowMessageArr.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received from current number.'></div><div style='display:inline-block;color:#06866f;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#353535;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
4345 |
+ |
|
4346 |
+ } else if (convData[m]['direction'] == 'received_on') { |
|
4347 |
+ |
|
4348 |
+ rowMessageArr.push("<div class='groupedRecMsg'><div style='display:block;margin:0px 0px 6px 0px;'><div style='display:inline-block;margin:0px 12px 0px 3px;'><img src='/apps/sms_relentless/img/incoming.svg' title='Message received on current number.'></div><div style='display:inline-block;color:#353535;'>From: "+ convData[m]['from'] +"</div><div style='display:inline-block;margin:0px 0px 0px 12px;color:#06866f;'>To: "+ convData[m]['to'] +"</div></div><div style='display:block;font-size:15px;color:#353535;font-weight:500;white-space:normal;'>"+ convData[m]['message'] +"</div><div style='display:block;margin:6px 0px 0px 4px;font-size:12.5px;color:#353535;'>"+ convData[m]['date'] +"</div></div>"); |
|
4349 |
+ } |
|
4350 |
+ } |
|
4351 |
+ |
|
4352 |
+ var convDataPerNmbr = rowMessageArr.join(""); |
|
4353 |
+ |
|
4354 |
+ var rowPhoneNumber = "<div id='nmbrow_"+ fromtoNumberArr[k] +"' class='phoneNmbrRow'>"+ fromtoNumberArr[k] +"</div>"; |
|
4355 |
+ |
|
4356 |
+ $("#groupedSmsTable").append("<tr id='singlerow_"+ k +"' class='groupedrowsbody'><td><div class='groupedLstNmbr fixedRowHeight'>"+ rowPhoneNumber +"</div></td><td><div class='groupedLstNames fixedRowHeight'>"+ displayNames +"</div></td><td style='width:100%'><div class='groupedLstMsgs fixedRowHeight'>"+ convDataPerNmbr +"</div></td></tr>"); |
|
4357 |
+ $("#groupedSmsTable").append("<tr id='expandRow_"+ k +"' class='groupedrowsexp'><td colspan='3'><div style='display:block;width:100%;height:14px;cursor:pointer;'><img class='expandGrpRow' src='/apps/sms_relentless/img/arrowDown.svg'></div><td></tr>"); |
|
4358 |
+ |
|
4359 |
+ // Store the messages for the current number, to be able to see them later, when clicking on the number |
|
4360 |
+ var ctNmbr = fromtoNumberArr[k]; |
|
4361 |
+ messagesPerNmbr[ctNmbr] = convDataPerNmbr; |
|
4362 |
+ } |
|
4363 |
+ |
|
4364 |
+ |
|
4365 |
+ // Add the 'filter by number' drop-down list |
|
4366 |
+ var nmbrslst = "<option value='title'>Filter messages by number</option>"; |
|
4367 |
+ for (var p = 0; p < fromtoNumberArr.length; p++) { |
|
4368 |
+ nmbrslst += "<option value='"+ fromtoNumberArr[p] +"'>"+ fromtoNumberArr[p] +"</option>"; |
|
4369 |
+ } |
|
4370 |
+ $("#filterByNumber").append("<select id='selectListedNmbrs'>"+ nmbrslst +"</select>"); |
|
4371 |
+ |
|
4372 |
+ |
|
4373 |
+ $("#selectListedNmbrs").change(function() { |
|
4374 |
+ |
|
4375 |
+ var selectedNmbr = $(this).val(); |
|
4376 |
+ |
|
4377 |
+ if (selectedNmbr != "title") { |
|
4378 |
+ |
|
4379 |
+ $(".groupedrowsbody,.groupedrowsexp").each(function() { $(this).hide(); }); |
|
4380 |
+ $("#groupedSmsTable").append("<tr id='singlerowfl_"+ fromtoNumberArr.indexOf(selectedNmbr) +"' class='groupedrowsbody'><td><div class='groupedLstNmbr fixedRowHeight'><div id='nmbrow_"+ selectedNmbr +"' style='font-size:15px;font-weight:500;color:#06866f;cursor:pointer;'>"+ selectedNmbr +"</div></div></td><td><div class='groupedLstNames fixedRowHeight'>"+ msgsNamesPerNmbr[selectedNmbr] +"</div></td><td style='width:100%'><div class='groupedLstMsgs fixedRowHeight'>"+ messagesPerNmbr[selectedNmbr] +"</div></td></tr>"); |
|
4381 |
+ $("#groupedSmsTable").append("<tr id='expandRowfl_"+ fromtoNumberArr.indexOf(selectedNmbr) +"' class='groupedrowsexp'><td colspan='3'><div style='display:block;width:100%;height:14px;cursor:pointer;'><img class='expandGrpRow' src='/apps/sms_relentless/img/arrowDown.svg'></div><td></tr>"); |
|
4382 |
+ |
|
4383 |
+ |
|
4384 |
+ // Show the messages sent by each user whose name is listed for the phone number of the current row |
|
4385 |
+ $('[id*="diplNm_"]').click(function() { |
|
4386 |
+ |
|
4387 |
+ var crntNmbr = $(this).attr("id").split("_")[1]; |
|
4388 |
+ var crntDisName = $(this).attr("name"); |
|
4389 |
+ var clsmsgcell = $(this).closest(".groupedrowsbody").find(".groupedLstMsgs"); |
|
4390 |
+ clsmsgcell.empty(); |
|
4391 |
+ clsmsgcell.html(msgsNmbrsNames[crntNmbr][crntDisName]); |
|
4392 |
+ |
|
4393 |
+ $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); |
|
4394 |
+ $(this).css("color", "#1483f0"); |
|
4395 |
+ $("#nmbrow_"+ selectedNmbr).css("color", "#06866f"); |
|
4396 |
+ $(".groupedLstNmbr").each(function () { $(this).css("color", "#06866f"); }); |
|
4397 |
+ }); |
|
4398 |
+ |
|
4399 |
+ |
|
4400 |
+ // Show all the messages sent to/from the clicked number |
|
4401 |
+ $('[id*="nmbrow_"]').click(function() { |
|
4402 |
+ var rwNmbr = $(this).attr("id").replace("nmbrow_", ""); |
|
4403 |
+ var rowmsgcell = $(this).closest(".groupedrowsbody").find(".groupedLstMsgs"); |
|
4404 |
+ rowmsgcell.empty(); |
|
4405 |
+ rowmsgcell.html(messagesPerNmbr[rwNmbr]); |
|
4406 |
+ |
|
4407 |
+ $(".phoneNmbrRow").each(function() { $(this).css("color", "#06866f"); }); |
|
4408 |
+ $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); |
|
4409 |
+ $(this).css("color", "#08b899"); |
|
4410 |
+ }); |
|
4411 |
+ |
|
4412 |
+ |
|
4413 |
+ // Expand the rows to see all the messages |
|
4414 |
+ $('[id^="expandRowfl_"]').click(function() { |
|
4415 |
+ var idnumbrfl = $(this).attr("id").replace("expandRowfl_", ""); |
|
4416 |
+ var crntExpandfl = $(this).find(".expandGrpRow"); |
|
4417 |
+ |
|
4418 |
+ if (crntExpandfl.attr('src') == '/apps/sms_relentless/img/arrowDown.svg') { |
|
4419 |
+ $("#singlerowfl_"+ idnumbrfl).find(".fixedRowHeight").removeClass("fixedRowHeight"); |
|
4420 |
+ crntExpandfl.attr('src', '/apps/sms_relentless/img/arrowUp.svg'); |
|
4421 |
+ } else { |
|
4422 |
+ $("#singlerowfl_"+ idnumbrfl).find(".groupedLstNmbr,.groupedLstNames,.groupedLstMsgs").addClass("fixedRowHeight"); |
|
4423 |
+ crntExpandfl.attr('src', '/apps/sms_relentless/img/arrowDown.svg'); |
|
4424 |
+ } |
|
4425 |
+ }); |
|
4426 |
+ |
|
4427 |
+ $('#totalgrpmessages').remove(); |
|
4428 |
+ $('#smstables').append("<div id='totalgrpmessages'>Total displayed phone numbers: 1</div>"); |
|
4429 |
+ } |
|
4430 |
+ }); |
|
4431 |
+ |
|
4432 |
+ // Clear the 'filter by number' filter |
|
4433 |
+ $("#cleargrpfilter").click(function() { |
|
4434 |
+ $('[id^="singlerowfl_"]').remove(); |
|
4435 |
+ $('[id^="expandRowfl_"]').remove(); |
|
4436 |
+ $(".groupedrowsbody,.groupedrowsexp").each(function() { $(this).show(); }); |
|
4437 |
+ $("#selectListedNmbrs").val("title"); |
|
4438 |
+ $('#totalgrpmessages').remove(); |
|
4439 |
+ $('#smstables').append("<div id='totalgrpmessages'>Total displayed phone numbers: "+ totalPhNmbrs +"</div>"); |
|
4440 |
+ }); |
|
4441 |
+ |
|
4442 |
+ // Show the messages sent by each user whose name is listed for the phone number on the current row |
|
4443 |
+ $('[id*="diplNm_"]').click(function() { |
|
4444 |
+ |
|
4445 |
+ var crntNmbr = $(this).attr("id").split("_")[1]; |
|
4446 |
+ var crntDisName = $(this).attr("name"); |
|
4447 |
+ var clsmsgcell = $(this).closest(".groupedrowsbody").find(".groupedLstMsgs"); |
|
4448 |
+ clsmsgcell.empty(); |
|
4449 |
+ clsmsgcell.html(msgsNmbrsNames[crntNmbr][crntDisName]); |
|
4450 |
+ |
|
4451 |
+ $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); |
|
4452 |
+ $(this).css("color", "#1483f0"); |
|
4453 |
+ }); |
|
4454 |
+ |
|
4455 |
+ // Show all the messages sent to/from the clicked number |
|
4456 |
+ $('[id*="nmbrow_"]').click(function() { |
|
4457 |
+ var rwNmbr = $(this).attr("id").replace("nmbrow_", ""); |
|
4458 |
+ var rowmsgcell = $(this).closest(".groupedrowsbody").find(".groupedLstMsgs"); |
|
4459 |
+ rowmsgcell.empty(); |
|
4460 |
+ rowmsgcell.html(messagesPerNmbr[rwNmbr]); |
|
4461 |
+ |
|
4462 |
+ $(".phoneNmbrRow").each(function() { $(this).css("color", "#06866f"); }); |
|
4463 |
+ $(".dispNameList").each(function() { $(this).css("color", "#0a559e"); }); |
|
4464 |
+ $(this).css("color", "#08b899"); |
|
4465 |
+ }); |
|
4466 |
+ |
|
4467 |
+ |
|
4468 |
+ $('#smstables').removeClass('icon-loading'); |
|
4469 |
+ $('#recarrow').removeClass('arrowUpCl'); |
|
4470 |
+ $('#recarrow').addClass('arrowDownCl'); |
|
4471 |
+ |
|
4472 |
+ // Expand the rows to see all the messages |
|
4473 |
+ $('[id^="expandRow_"]').click(function() { |
|
4474 |
+ var idnumbr = $(this).attr("id").replace("expandRow_", ""); |
|
4475 |
+ var crntExpand = $(this).find(".expandGrpRow"); |
|
4476 |
+ |
|
4477 |
+ if (crntExpand.attr('src') == '/apps/sms_relentless/img/arrowDown.svg') { |
|
4478 |
+ $("#singlerow_"+ idnumbr).find(".fixedRowHeight").removeClass("fixedRowHeight"); |
|
4479 |
+ crntExpand.attr('src', '/apps/sms_relentless/img/arrowUp.svg'); |
|
4480 |
+ } else { |
|
4481 |
+ $("#singlerow_"+ idnumbr).find(".groupedLstNmbr,.groupedLstNames,.groupedLstMsgs").addClass("fixedRowHeight"); |
|
4482 |
+ crntExpand.attr('src', '/apps/sms_relentless/img/arrowDown.svg'); |
|
4483 |
+ } |
|
4484 |
+ }); |
|
4485 |
+ |
|
4486 |
+ |
|
4487 |
+ // Add pagination |
|
4488 |
+ var rowsShowngrp = messagesperpage; |
|
4489 |
+ var rowsTotalgrp = $("#groupedSmsTable tr").length; |
|
4490 |
+ |
|
4491 |
+ var numPagesgrp = ((rowsTotalgrp - 2) / rowsShowngrp) / 2; |
|
4492 |
+ |
|
4493 |
+ for (i = 0; i < numPagesgrp; i++) { |
|
4494 |
+ var pageNumgrp = i + 1; |
|
4495 |
+ $('#paginationgrp').append('<a href="#" rel="' + i + '" class="pagenumbersgrp">' + pageNumgrp + '</a> '); |
|
4496 |
+ } |
|
4497 |
+ |
|
4498 |
+ $('#paginationgrp').children(":first").addClass('active'); |
|
4499 |
+ |
|
4500 |
+ $(".groupedrowsbody,.groupedrowsexp").hide(); |
|
4501 |
+ |
|
4502 |
+ $('#paginationgrp a:first').addClass('active'); |
|
4503 |
+ |
|
4504 |
+ // Show table page when clicking a page number |
|
4505 |
+ $('.grppages a').bind('click', function() { |
|
4506 |
+ |
|
4507 |
+ $('#paginationgrp').children().removeClass('active'); |
|
4508 |
+ |
|
4509 |
+ $(this).addClass('active'); |
|
4510 |
+ |
|
4511 |
+ var currentPageNogrp = $(this).text(); |
|
4512 |
+ |
|
4513 |
+ $('#paginationgrp a').each(function() { |
|
4514 |
+ if ($(this).text() == currentPageNogrp) { |
|
4515 |
+ $(this).addClass('active'); |
|
4516 |
+ } |
|
4517 |
+ }); |
|
4518 |
+ |
|
4519 |
+ var currPagegrp = $(this).attr('rel'); |
|
4520 |
+ var startItemgrp = currPagegrp * rowsShowngrp; |
|
4521 |
+ var endItemgrp = startItemgrp + rowsShowngrp; |
|
4522 |
+ |
|
4523 |
+ $(".groupedrowsbody").hide().slice(startItemgrp, endItemgrp).css('display', 'table-row'); |
|
4524 |
+ $(".groupedrowsexp").hide().slice(startItemgrp, endItemgrp).css('display', 'table-row'); |
|
4525 |
+ |
|
4526 |
+ $('#totalgrpmessages').remove(); |
|
4527 |
+ $('#smstables').append("<div id='totalgrpmessages'>Total displayed phone numbers: " + totalPhNmbrs + "</div>"); |
|
4528 |
+ }); |
|
4529 |
+ |
|
4530 |
+ $('#paginationgrp').children(":last").trigger('click'); |
|
4531 |
+ |
|
4532 |
+ |
|
4533 |
+ // Show/Hide filter row |
|
4534 |
+ $('#recarrow').on('click', function() { |
|
4535 |
+ if ($('#grpfiltersrow').is(':visible')) { |
|
4536 |
+ $('#grpfiltersrow').hide(); |
|
4537 |
+ $('#grpheaderrow').css('top', '0px'); |
|
4538 |
+ $(this).removeClass('arrowUpCl'); |
|
4539 |
+ $(this).addClass('arrowDownCl'); |
|
4540 |
+ } else { |
|
4541 |
+ $('#grpfiltersrow').show(); |
|
4542 |
+ $('#grpheaderrow').css('top', '158px'); |
|
4543 |
+ $(this).removeClass('arrowDownCl'); |
|
4544 |
+ $(this).addClass('arrowUpCl'); |
|
4545 |
+ } |
|
4546 |
+ }); |
|
4547 |
+ |
|
4548 |
+ }, |
|
4549 |
+ error: function() { |
|
4550 |
+ |
|
4551 |
+ showAlert("Error while attempting to get the messages from the database."); |
|
4552 |
+ $('#smstables').removeClass('icon-loading'); |
|
4553 |
+ } |
|
4554 |
+ }); |
|
4555 |
+ }); |
|
4556 |
+ |
|
4557 |
+ |
|
4558 |
+ function showAlert(alertText) { |
|
4559 |
+ |
|
4560 |
+ let alertwnd = "<div id='alertMessage'>"; |
|
4561 |
+ alertwnd += "<a id='closeAlertWnd' title='Close this window'></a>"; |
|
4562 |
+ alertwnd += "<div id='alertTextWrap'>"+ alertText +"</div>"; |
|
4563 |
+ alertwnd += "<input type='submit' id='alertOk' value='OK'>"; |
|
4564 |
+ alertwnd += "</div>"; |
|
4565 |
+ |
|
4566 |
+ $("#content").append("<div id='alertMsgOverlay'></div>"); |
|
4567 |
+ $("#content").append(alertwnd); |
|
4568 |
+ |
|
4569 |
+ let topDist = parseInt((window.innerHeight / 2).toFixed(2) - 152) +"px"; |
|
4570 |
+ let leftDist = parseInt((window.innerWidth / 2).toFixed(2) - 150) +"px"; |
|
4571 |
+ $("#alertMessage").css({ "top" : topDist, "left" : leftDist }); |
|
4572 |
+ |
|
4573 |
+ $("#closeAlertWnd").click(function() { $("#alertMsgOverlay").remove(); $("#alertMessage").remove(); }); |
|
4574 |
+ $("#alertMsgOverlay").click(function() { $("#alertMsgOverlay").remove(); $("#alertMessage").remove(); }); |
|
4575 |
+ $("#alertOk").click(function() { $("#alertMsgOverlay").remove(); $("#alertMessage").remove(); }); |
|
4576 |
+ } |
|
4577 |
+ |
|
4578 |
+ function confirmAlert(alertText) { |
|
4579 |
+ |
|
4580 |
+ let alertwndcf = "<div id='alertConfMessage'>"; |
|
4581 |
+ alertwndcf += "<a id='closeAlertWndcf' title='Close this window'></a>"; |
|
4582 |
+ alertwndcf += "<div id='alertTextWrap'>"+ alertText +"</div>"; |
|
4583 |
+ alertwndcf += "<div id='cancelOkWrap'><input type='submit' id='confirmCancel' value='Cancel'>"; |
|
4584 |
+ alertwndcf += "<input type='submit' id='confirmOk' value='OK'></div>"; |
|
4585 |
+ alertwndcf += "</div>"; |
|
4586 |
+ |
|
4587 |
+ $("#content").append("<div id='alertMsgOverlay'></div>"); |
|
4588 |
+ $("#content").append(alertwndcf); |
|
4589 |
+ |
|
4590 |
+ let topDist = parseInt((window.innerHeight / 2).toFixed(2) - 152) +"px"; |
|
4591 |
+ let leftDist = parseInt((window.innerWidth / 2).toFixed(2) - 150) +"px"; |
|
4592 |
+ $("#alertConfMessage").css({ "top" : topDist, "left" : leftDist }); |
|
4593 |
+ |
|
4594 |
+ $("#closeAlertWndcf").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); }); |
|
4595 |
+ $("#alertMsgOverlay").click(function() { $("#alertMsgOverlay").remove(); $("#alertConfMessage").remove(); }); |
|
4596 |
+ } |
|
4597 |
+ |
|
4598 |
+}); |
0 | 4599 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,510 @@ |
1 |
+<?php |
|
2 |
+/** |
|
3 |
+ * @copyright 2021 Double Bastion LLC <www.doublebastion.com> |
|
4 |
+ * |
|
5 |
+ * @author Double Bastion LLC |
|
6 |
+ * |
|
7 |
+ * @license GNU AGPL version 3 or any later version |
|
8 |
+ * |
|
9 |
+ * This program is free software; you can redistribute it and/or |
|
10 |
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE |
|
11 |
+ * License as published by the Free Software Foundation; either |
|
12 |
+ * version 3 of the License, or any later version. |
|
13 |
+ * |
|
14 |
+ * This program is distributed in the hope that it will be useful, |
|
15 |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
16 |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
17 |
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details. |
|
18 |
+ * |
|
19 |
+ * You should have received a copy of the GNU Affero General Public |
|
20 |
+ * License along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
21 |
+ * |
|
22 |
+ */ |
|
23 |
+ |
|
24 |
+declare(strict_types=1); |
|
25 |
+ |
|
26 |
+namespace OCA\SMSRelentless\Migration; |
|
27 |
+ |
|
28 |
+use Closure; |
|
29 |
+use OCP\DB\Types; |
|
30 |
+use OCP\DB\ISchemaWrapper; |
|
31 |
+use OCP\IDBConnection; |
|
32 |
+use OCP\Migration\IOutput; |
|
33 |
+use OCP\Migration\SimpleMigrationStep; |
|
34 |
+ |
|
35 |
+ |
|
36 |
+class Version116Date20230508212745 extends SimpleMigrationStep { |
|
37 |
+ |
|
38 |
+ /** @var IDBConnection */ |
|
39 |
+ private $connection; |
|
40 |
+ |
|
41 |
+ /** |
|
42 |
+ * @param IDBConnection $connection |
|
43 |
+ */ |
|
44 |
+ public function __construct(IDBConnection $connection) { |
|
45 |
+ $this->connection = $connection; |
|
46 |
+ } |
|
47 |
+ |
|
48 |
+ /** |
|
49 |
+ * @param IOutput $output |
|
50 |
+ * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` |
|
51 |
+ * @param array $options |
|
52 |
+ * @return null|ISchemaWrapper |
|
53 |
+ */ |
|
54 |
+ public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { |
|
55 |
+ /** @var ISchemaWrapper $schema */ |
|
56 |
+ $schema = $schemaClosure(); |
|
57 |
+ |
|
58 |
+ if (!$schema->hasTable('sms_relent_settings')) { |
|
59 |
+ $table = $schema->createTable('sms_relent_settings'); |
|
60 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
61 |
+ 'autoincrement' => true, |
|
62 |
+ 'notnull' => true, |
|
63 |
+ 'length' => 11, |
|
64 |
+ 'unsigned' => true, |
|
65 |
+ ]); |
|
66 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
67 |
+ 'notnull' => true, |
|
68 |
+ 'length' => 128, |
|
69 |
+ ]); |
|
70 |
+ $table->addColumn('telapi_key', Types::STRING, [ |
|
71 |
+ 'notnull' => true, |
|
72 |
+ 'length' => 512, |
|
73 |
+ ]); |
|
74 |
+ $table->addColumn('tel_pub_key', Types::STRING, [ |
|
75 |
+ 'notnull' => true, |
|
76 |
+ 'length' => 512, |
|
77 |
+ ]); |
|
78 |
+ $table->addColumn('telapi_url_rec', Types::STRING, [ |
|
79 |
+ 'notnull' => true, |
|
80 |
+ 'length' => 512, |
|
81 |
+ ]); |
|
82 |
+ $table->addColumn('telapi_url', Types::STRING, [ |
|
83 |
+ 'notnull' => true, |
|
84 |
+ 'length' => 512, |
|
85 |
+ ]); |
|
86 |
+ $table->addColumn('messaging_profile_id', Types::STRING, [ |
|
87 |
+ 'notnull' => true, |
|
88 |
+ 'length' => 512, |
|
89 |
+ ]); |
|
90 |
+ $table->addColumn('nexapi_key', Types::STRING, [ |
|
91 |
+ 'notnull' => true, |
|
92 |
+ 'length' => 512, |
|
93 |
+ ]); |
|
94 |
+ $table->addColumn('nexapi_secret', Types::STRING, [ |
|
95 |
+ 'notnull' => true, |
|
96 |
+ 'length' => 512, |
|
97 |
+ ]); |
|
98 |
+ $table->addColumn('nexapi_url_rec', Types::STRING, [ |
|
99 |
+ 'notnull' => true, |
|
100 |
+ 'length' => 512, |
|
101 |
+ ]); |
|
102 |
+ $table->addColumn('nexapi_url', Types::STRING, [ |
|
103 |
+ 'notnull' => true, |
|
104 |
+ 'length' => 512, |
|
105 |
+ ]); |
|
106 |
+ $table->addColumn('twilapi_key', Types::STRING, [ |
|
107 |
+ 'notnull' => true, |
|
108 |
+ 'length' => 512, |
|
109 |
+ ]); |
|
110 |
+ $table->addColumn('twilapi_secret', Types::STRING, [ |
|
111 |
+ 'notnull' => true, |
|
112 |
+ 'length' => 512, |
|
113 |
+ ]); |
|
114 |
+ $table->addColumn('twilapi_url_rec', Types::STRING, [ |
|
115 |
+ 'notnull' => true, |
|
116 |
+ 'length' => 512, |
|
117 |
+ ]); |
|
118 |
+ $table->addColumn('twilapi_url', Types::STRING, [ |
|
119 |
+ 'notnull' => true, |
|
120 |
+ 'length' => 512, |
|
121 |
+ ]); |
|
122 |
+ $table->addColumn('flowapi_key', Types::STRING, [ |
|
123 |
+ 'notnull' => true, |
|
124 |
+ 'length' => 512, |
|
125 |
+ ]); |
|
126 |
+ $table->addColumn('flowapi_secret', Types::STRING, [ |
|
127 |
+ 'notnull' => true, |
|
128 |
+ 'length' => 512, |
|
129 |
+ ]); |
|
130 |
+ $table->addColumn('flowapi_url_rec', Types::STRING, [ |
|
131 |
+ 'notnull' => true, |
|
132 |
+ 'length' => 512, |
|
133 |
+ ]); |
|
134 |
+ $table->addColumn('flowapi_url', Types::STRING, [ |
|
135 |
+ 'notnull' => true, |
|
136 |
+ 'length' => 512, |
|
137 |
+ ]); |
|
138 |
+ $table->addColumn('tel_sender_name', Types::STRING, [ |
|
139 |
+ 'notnull' => false, |
|
140 |
+ 'length' => 48, |
|
141 |
+ 'default' => '', |
|
142 |
+ ]); |
|
143 |
+ $table->addColumn('nex_sender_name', Types::STRING, [ |
|
144 |
+ 'notnull' => false, |
|
145 |
+ 'length' => 48, |
|
146 |
+ 'default' => '', |
|
147 |
+ ]); |
|
148 |
+ $table->addColumn('twil_sender_name', Types::STRING, [ |
|
149 |
+ 'notnull' => false, |
|
150 |
+ 'length' => 48, |
|
151 |
+ 'default' => '', |
|
152 |
+ ]); |
|
153 |
+ $table->addColumn('flow_sender_name', Types::STRING, [ |
|
154 |
+ 'notnull' => false, |
|
155 |
+ 'length' => 48, |
|
156 |
+ 'default' => '', |
|
157 |
+ ]); |
|
158 |
+ $table->addColumn('messagesperpage', Types::INTEGER, [ |
|
159 |
+ 'notnull' => false, |
|
160 |
+ 'length' => 11, |
|
161 |
+ 'unsigned' => true, |
|
162 |
+ ]); |
|
163 |
+ $table->addColumn('get_notify', Types::SMALLINT, [ |
|
164 |
+ 'notnull' => false, |
|
165 |
+ 'length' => 1, |
|
166 |
+ ]); |
|
167 |
+ $table->addColumn('notification_email', Types::STRING, [ |
|
168 |
+ 'notnull' => false, |
|
169 |
+ 'length' => 512, |
|
170 |
+ 'default' => '', |
|
171 |
+ ]); |
|
172 |
+ $table->addColumn('getsmsinemail', Types::SMALLINT, [ |
|
173 |
+ 'notnull' => false, |
|
174 |
+ 'length' => 1, |
|
175 |
+ ]); |
|
176 |
+ $table->addColumn('show_all_messages', Types::SMALLINT, [ |
|
177 |
+ 'notnull' => false, |
|
178 |
+ 'length' => 1, |
|
179 |
+ ]); |
|
180 |
+ $table->addColumn('show_display_names', Types::SMALLINT, [ |
|
181 |
+ 'notnull' => false, |
|
182 |
+ 'length' => 1, |
|
183 |
+ ]); |
|
184 |
+ $table->setPrimaryKey(['id']); |
|
185 |
+ $table->addUniqueIndex(['id']); |
|
186 |
+ |
|
187 |
+ } else { |
|
188 |
+ |
|
189 |
+ $table = $schema->getTable('sms_relent_settings'); |
|
190 |
+ |
|
191 |
+ $table->addColumn('show_all_messages', Types::SMALLINT, [ |
|
192 |
+ 'notnull' => false, |
|
193 |
+ 'length' => 1, |
|
194 |
+ ]); |
|
195 |
+ $table->addColumn('show_display_names', Types::SMALLINT, [ |
|
196 |
+ 'notnull' => false, |
|
197 |
+ 'length' => 1, |
|
198 |
+ ]); |
|
199 |
+ } |
|
200 |
+ |
|
201 |
+ |
|
202 |
+ if (!$schema->hasTable('sms_relent_received')) { |
|
203 |
+ $table = $schema->createTable('sms_relent_received'); |
|
204 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
205 |
+ 'autoincrement' => true, |
|
206 |
+ 'notnull' => true, |
|
207 |
+ 'length' => 11, |
|
208 |
+ 'unsigned' => true, |
|
209 |
+ ]); |
|
210 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
211 |
+ 'notnull' => true, |
|
212 |
+ 'length' => 64, |
|
213 |
+ ]); |
|
214 |
+ $table->addColumn('message_id', Types::STRING, [ |
|
215 |
+ 'notnull' => true, |
|
216 |
+ 'length' => 512, |
|
217 |
+ ]); |
|
218 |
+ $table->addColumn('date', Types::DATETIME, [ |
|
219 |
+ 'notnull' => true, |
|
220 |
+ ]); |
|
221 |
+ $table->addColumn('from', Types::STRING, [ |
|
222 |
+ 'notnull' => true, |
|
223 |
+ 'length' => 128, |
|
224 |
+ ]); |
|
225 |
+ $table->addColumn('to', Types::STRING, [ |
|
226 |
+ 'notnull' => true, |
|
227 |
+ 'length' => 128, |
|
228 |
+ ]); |
|
229 |
+ $table->addColumn('message', Types::TEXT, [ |
|
230 |
+ 'notnull' => false, |
|
231 |
+ 'default' => '', |
|
232 |
+ ]); |
|
233 |
+ $table->addColumn('author_displayname', Types::STRING, [ |
|
234 |
+ 'notnull' => true, |
|
235 |
+ 'length' => 255, |
|
236 |
+ ]); |
|
237 |
+ $table->addColumn('internal_sender', Types::SMALLINT, [ |
|
238 |
+ 'notnull' => false, |
|
239 |
+ 'length' => 1, |
|
240 |
+ ]); |
|
241 |
+ $table->setPrimaryKey(['id']); |
|
242 |
+ $table->addUniqueIndex(['id']); |
|
243 |
+ |
|
244 |
+ } else { |
|
245 |
+ |
|
246 |
+ $table = $schema->getTable('sms_relent_received'); |
|
247 |
+ |
|
248 |
+ $table->addColumn('author_displayname', Types::STRING, [ |
|
249 |
+ 'notnull' => true, |
|
250 |
+ 'length' => 255, |
|
251 |
+ ]); |
|
252 |
+ $table->addColumn('internal_sender', Types::SMALLINT, [ |
|
253 |
+ 'notnull' => false, |
|
254 |
+ 'length' => 1, |
|
255 |
+ ]); |
|
256 |
+ } |
|
257 |
+ |
|
258 |
+ |
|
259 |
+ if (!$schema->hasTable('sms_relent_sent')) { |
|
260 |
+ $table = $schema->createTable('sms_relent_sent'); |
|
261 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
262 |
+ 'autoincrement' => true, |
|
263 |
+ 'notnull' => true, |
|
264 |
+ 'length' => 11, |
|
265 |
+ 'unsigned' => true, |
|
266 |
+ ]); |
|
267 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
268 |
+ 'notnull' => true, |
|
269 |
+ 'length' => 64, |
|
270 |
+ ]); |
|
271 |
+ $table->addColumn('message_id', Types::STRING, [ |
|
272 |
+ 'notnull' => true, |
|
273 |
+ 'length' => 512, |
|
274 |
+ ]); |
|
275 |
+ $table->addColumn('date', Types::DATETIME, [ |
|
276 |
+ 'notnull' => true, |
|
277 |
+ ]); |
|
278 |
+ $table->addColumn('from', Types::STRING, [ |
|
279 |
+ 'notnull' => true, |
|
280 |
+ 'length' => 128, |
|
281 |
+ ]); |
|
282 |
+ $table->addColumn('to', Types::STRING, [ |
|
283 |
+ 'notnull' => true, |
|
284 |
+ 'length' => 128, |
|
285 |
+ ]); |
|
286 |
+ $table->addColumn('network ', Types::STRING, [ |
|
287 |
+ 'notnull' => false, |
|
288 |
+ 'length' => 64, |
|
289 |
+ 'default' => '', |
|
290 |
+ ]); |
|
291 |
+ $table->addColumn('price', Types::STRING, [ |
|
292 |
+ 'notnull' => false, |
|
293 |
+ 'length' => 64, |
|
294 |
+ 'default' => '', |
|
295 |
+ ]); |
|
296 |
+ $table->addColumn('status', Types::STRING, [ |
|
297 |
+ 'notnull' => false, |
|
298 |
+ 'length' => 512, |
|
299 |
+ 'default' => '', |
|
300 |
+ ]); |
|
301 |
+ $table->addColumn('deliveryreceipt', Types::STRING, [ |
|
302 |
+ 'notnull' => false, |
|
303 |
+ 'length' => 64, |
|
304 |
+ 'default' => '', |
|
305 |
+ ]); |
|
306 |
+ $table->addColumn('message', Types::TEXT, [ |
|
307 |
+ 'notnull' => false, |
|
308 |
+ 'default' => '', |
|
309 |
+ ]); |
|
310 |
+ $table->addColumn('author_displayname', Types::STRING, [ |
|
311 |
+ 'notnull' => true, |
|
312 |
+ 'length' => 255, |
|
313 |
+ ]); |
|
314 |
+ $table->setPrimaryKey(['id']); |
|
315 |
+ $table->addUniqueIndex(['id']); |
|
316 |
+ |
|
317 |
+ } else { |
|
318 |
+ |
|
319 |
+ $table = $schema->getTable('sms_relent_sent'); |
|
320 |
+ |
|
321 |
+ $table->addColumn('author_displayname', Types::STRING, [ |
|
322 |
+ 'notnull' => true, |
|
323 |
+ 'length' => 255, |
|
324 |
+ ]); |
|
325 |
+ } |
|
326 |
+ |
|
327 |
+ |
|
328 |
+ if (!$schema->hasTable('sms_relent_autorply')) { |
|
329 |
+ $table = $schema->createTable('sms_relent_autorply'); |
|
330 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
331 |
+ 'autoincrement' => true, |
|
332 |
+ 'notnull' => true, |
|
333 |
+ 'length' => 11, |
|
334 |
+ 'unsigned' => true, |
|
335 |
+ ]); |
|
336 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
337 |
+ 'notnull' => true, |
|
338 |
+ 'length' => 128, |
|
339 |
+ ]); |
|
340 |
+ $table->addColumn('saved_by_dsplname', Types::STRING, [ |
|
341 |
+ 'notnull' => true, |
|
342 |
+ 'length' => 255, |
|
343 |
+ ]); |
|
344 |
+ $table->addColumn('phone_number', Types::STRING, [ |
|
345 |
+ 'notnull' => true, |
|
346 |
+ 'length' => 128, |
|
347 |
+ ]); |
|
348 |
+ $table->addColumn('days_of_week', Types::STRING, [ |
|
349 |
+ 'notnull' => false, |
|
350 |
+ 'length' => 64, |
|
351 |
+ 'default' => '', |
|
352 |
+ ]); |
|
353 |
+ $table->addColumn('daily_start', Types::STRING, [ |
|
354 |
+ 'notnull' => false, |
|
355 |
+ 'length' => 8, |
|
356 |
+ 'default' => '', |
|
357 |
+ ]); |
|
358 |
+ $table->addColumn('daily_end', Types::STRING, [ |
|
359 |
+ 'notnull' => false, |
|
360 |
+ 'length' => 8, |
|
361 |
+ 'default' => '', |
|
362 |
+ ]); |
|
363 |
+ $table->addColumn('vacation_start', Types::DATETIME, [ |
|
364 |
+ 'notnull' => false, |
|
365 |
+ ]); |
|
366 |
+ $table->addColumn('vacation_end', Types::DATETIME, [ |
|
367 |
+ 'notnull' => false, |
|
368 |
+ ]); |
|
369 |
+ $table->addColumn('message_text', Types::TEXT, [ |
|
370 |
+ 'notnull' => false, |
|
371 |
+ 'default' => '', |
|
372 |
+ ]); |
|
373 |
+ $table->setPrimaryKey(['id']); |
|
374 |
+ $table->addUniqueIndex(['id']); |
|
375 |
+ |
|
376 |
+ } |
|
377 |
+ |
|
378 |
+ |
|
379 |
+ if (!$schema->hasTable('sms_relent_restrict')) { |
|
380 |
+ $table = $schema->createTable('sms_relent_restrict'); |
|
381 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
382 |
+ 'autoincrement' => true, |
|
383 |
+ 'notnull' => true, |
|
384 |
+ 'length' => 11, |
|
385 |
+ 'unsigned' => true, |
|
386 |
+ ]); |
|
387 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
388 |
+ 'notnull' => true, |
|
389 |
+ 'length' => 128, |
|
390 |
+ ]); |
|
391 |
+ $table->addColumn('saved_by_dsplname', Types::STRING, [ |
|
392 |
+ 'notnull' => true, |
|
393 |
+ 'length' => 255, |
|
394 |
+ ]); |
|
395 |
+ $table->addColumn('phone_number', Types::STRING, [ |
|
396 |
+ 'notnull' => true, |
|
397 |
+ 'length' => 128, |
|
398 |
+ ]); |
|
399 |
+ $table->addColumn('groups', Types::STRING, [ |
|
400 |
+ 'notnull' => true, |
|
401 |
+ 'length' => 2048, |
|
402 |
+ ]); |
|
403 |
+ $table->addColumn('users', Types::STRING, [ |
|
404 |
+ 'notnull' => true, |
|
405 |
+ 'length' => 2048, |
|
406 |
+ ]); |
|
407 |
+ $table->setPrimaryKey(['id']); |
|
408 |
+ $table->addUniqueIndex(['id']); |
|
409 |
+ |
|
410 |
+ } |
|
411 |
+ |
|
412 |
+ return $schema; |
|
413 |
+ } |
|
414 |
+ |
|
415 |
+ public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { |
|
416 |
+ |
|
417 |
+ // Enter the Nextcloud display name in the 'author_displayname' column of the 'sms_relent_sent' table, for messages that were sent before the upgrade |
|
418 |
+ $getrecfromnb = $this->connection->prepare('SELECT `id`, `user_id` FROM `*PREFIX*sms_relent_sent`'); |
|
419 |
+ $getrecfromnbres = $getrecfromnb->execute(); |
|
420 |
+ |
|
421 |
+ $recdatauids = []; |
|
422 |
+ $idsent = []; |
|
423 |
+ while ($rowfetched = $getrecfromnbres->fetch()) { |
|
424 |
+ $recdatauids[] = $rowfetched['user_id']; |
|
425 |
+ $idsent[] = $rowfetched['id']; |
|
426 |
+ } |
|
427 |
+ $getrecfromnbres->closeCursor(); |
|
428 |
+ |
|
429 |
+ if ($recdatauids) { |
|
430 |
+ |
|
431 |
+ $recuids = array_values(array_unique($recdatauids)); |
|
432 |
+ $acdatausrdn = []; |
|
433 |
+ |
|
434 |
+ foreach ($recuids as $dnkey => $dnvalue) { |
|
435 |
+ $getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?'); |
|
436 |
+ $getacdatadnres = $getacdatadn->execute([$dnvalue, 'displayname']); |
|
437 |
+ |
|
438 |
+ while ($acusrdnfetched = $getacdatadnres->fetch()) { |
|
439 |
+ $acdatausrdn[$dnvalue] = $acusrdnfetched['value']; |
|
440 |
+ } |
|
441 |
+ $getacdatadnres->closeCursor(); |
|
442 |
+ } |
|
443 |
+ |
|
444 |
+ foreach ($recdatauids as $pdpkey => $pdpvalue) { |
|
445 |
+ |
|
446 |
+ $updaterecms = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_sent` SET `author_displayname` = ? WHERE `user_id` = ? AND `id` = ?'); |
|
447 |
+ $updaterecmsres = $updaterecms->execute([$acdatausrdn[$pdpvalue], $pdpvalue, $idsent[$pdpkey]]); |
|
448 |
+ $updaterecmsres->closeCursor(); |
|
449 |
+ } |
|
450 |
+ } |
|
451 |
+ |
|
452 |
+ |
|
453 |
+ // Enter the Nextcloud display name in the 'author_displayname' column of the 'sms_relent_received' table, for messages that were received before the upgrade |
|
454 |
+ $getrecfromnb = $this->connection->prepare('SELECT `id`, `date`, `from` FROM `*PREFIX*sms_relent_received`'); |
|
455 |
+ $getrecfromnbres = $getrecfromnb->execute(); |
|
456 |
+ |
|
457 |
+ $recdatanmbrs = []; |
|
458 |
+ $idsrc = []; |
|
459 |
+ $daterec = []; |
|
460 |
+ while ($rowfetched = $getrecfromnbres->fetch()) { |
|
461 |
+ $recdatanmbrs[] = $rowfetched['from']; |
|
462 |
+ $idsrc[] = $rowfetched['id']; |
|
463 |
+ $daterecarr = explode(":", $rowfetched['date']); |
|
464 |
+ $daterec[] = $daterecarr[0]; |
|
465 |
+ } |
|
466 |
+ $getrecfromnbres->closeCursor(); |
|
467 |
+ |
|
468 |
+ if ($recdatanmbrs) { |
|
469 |
+ |
|
470 |
+ foreach ($recdatanmbrs as $rckey => $rcvalue) { |
|
471 |
+ |
|
472 |
+ // Search for the associated Display Name in the previous messages sent from the same phone number, in the 'sms_relent_sent' table |
|
473 |
+ $recmsgfromprc = '%' . $rcvalue; |
|
474 |
+ $recdataprc = $daterec[$rckey] . '%'; |
|
475 |
+ $getdspnmst = $this->connection->prepare('SELECT `date`, `from`, `author_displayname` FROM `*PREFIX*sms_relent_sent` WHERE `from` LIKE ? AND `date` LIKE ?'); |
|
476 |
+ $getdspnmstres = $getdspnmst->execute([$recmsgfromprc, $recdataprc]); |
|
477 |
+ |
|
478 |
+ $dispnamearr = []; |
|
479 |
+ while ($dspnmstfetched = $getdspnmstres->fetch()) { |
|
480 |
+ $dispnamearr[] = $dspnmstfetched['author_displayname']; |
|
481 |
+ } |
|
482 |
+ $getdspnmstres->closeCursor(); |
|
483 |
+ |
|
484 |
+ if ($dispnamearr) { |
|
485 |
+ $descdspnmarr = array_reverse($dispnamearr); |
|
486 |
+ $authorDisplayNm = $descdspnmarr[0]; |
|
487 |
+ $internalSender = 1; |
|
488 |
+ |
|
489 |
+ } else { |
|
490 |
+ |
|
491 |
+ $authorDisplayNm = ''; |
|
492 |
+ |
|
493 |
+ $getfrom = $this->connection->prepare('SELECT `from` FROM `*PREFIX*sms_relent_sent` WHERE `from` LIKE ? LIMIT 1'); |
|
494 |
+ $getfromres = $getfrom->execute([$recmsgfromprc]); |
|
495 |
+ $fromfetched = $getfromres->fetch(); |
|
496 |
+ |
|
497 |
+ if ($fromfetched) { $internalSender = 1; } else { $internalSender = 0; } |
|
498 |
+ } |
|
499 |
+ |
|
500 |
+ $updaterecms = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_received` SET `author_displayname` = ?, `internal_sender` = ? |
|
501 |
+ WHERE `from` LIKE ? AND `id` = ?'); |
|
502 |
+ $updaterecmsres = $updaterecms->execute([$authorDisplayNm, $internalSender, $recmsgfromprc, $idsrc[$rckey]]); |
|
503 |
+ $updaterecmsres->closeCursor(); |
|
504 |
+ } |
|
505 |
+ } |
|
506 |
+ |
|
507 |
+ return null; |
|
508 |
+ } |
|
509 |
+ |
|
510 |
+} |
0 | 511 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,496 @@ |
1 |
+<?php |
|
2 |
+/** |
|
3 |
+ * @copyright 2021 Double Bastion LLC <www.doublebastion.com> |
|
4 |
+ * |
|
5 |
+ * @author Double Bastion LLC |
|
6 |
+ * |
|
7 |
+ * @license GNU AGPL version 3 or any later version |
|
8 |
+ * |
|
9 |
+ * This program is free software; you can redistribute it and/or |
|
10 |
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE |
|
11 |
+ * License as published by the Free Software Foundation; either |
|
12 |
+ * version 3 of the License, or any later version. |
|
13 |
+ * |
|
14 |
+ * This program is distributed in the hope that it will be useful, |
|
15 |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
16 |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
17 |
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details. |
|
18 |
+ * |
|
19 |
+ * You should have received a copy of the GNU Affero General Public |
|
20 |
+ * License along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
21 |
+ * |
|
22 |
+ */ |
|
23 |
+ |
|
24 |
+declare(strict_types=1); |
|
25 |
+ |
|
26 |
+namespace OCA\SMSRelentless\Migration; |
|
27 |
+ |
|
28 |
+use Closure; |
|
29 |
+use OCP\DB\Types; |
|
30 |
+use OCP\DB\ISchemaWrapper; |
|
31 |
+use OCP\IDBConnection; |
|
32 |
+use OCP\Migration\IOutput; |
|
33 |
+use OCP\Migration\SimpleMigrationStep; |
|
34 |
+ |
|
35 |
+ |
|
36 |
+class Version117Date20230509183517 extends SimpleMigrationStep { |
|
37 |
+ |
|
38 |
+ /** @var IDBConnection */ |
|
39 |
+ private $connection; |
|
40 |
+ |
|
41 |
+ /** |
|
42 |
+ * @param IDBConnection $connection |
|
43 |
+ */ |
|
44 |
+ public function __construct(IDBConnection $connection) { |
|
45 |
+ $this->connection = $connection; |
|
46 |
+ } |
|
47 |
+ |
|
48 |
+ /** |
|
49 |
+ * @param IOutput $output |
|
50 |
+ * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` |
|
51 |
+ * @param array $options |
|
52 |
+ * @return null|ISchemaWrapper |
|
53 |
+ */ |
|
54 |
+ public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { |
|
55 |
+ /** @var ISchemaWrapper $schema */ |
|
56 |
+ $schema = $schemaClosure(); |
|
57 |
+ |
|
58 |
+ if (!$schema->hasTable('sms_relent_settings')) { |
|
59 |
+ $table = $schema->createTable('sms_relent_settings'); |
|
60 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
61 |
+ 'autoincrement' => true, |
|
62 |
+ 'notnull' => true, |
|
63 |
+ 'length' => 11, |
|
64 |
+ 'unsigned' => true, |
|
65 |
+ ]); |
|
66 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
67 |
+ 'notnull' => true, |
|
68 |
+ 'length' => 128, |
|
69 |
+ ]); |
|
70 |
+ $table->addColumn('telapi_key', Types::STRING, [ |
|
71 |
+ 'notnull' => true, |
|
72 |
+ 'length' => 512, |
|
73 |
+ ]); |
|
74 |
+ $table->addColumn('tel_pub_key', Types::STRING, [ |
|
75 |
+ 'notnull' => true, |
|
76 |
+ 'length' => 512, |
|
77 |
+ ]); |
|
78 |
+ $table->addColumn('telapi_url_rec', Types::STRING, [ |
|
79 |
+ 'notnull' => true, |
|
80 |
+ 'length' => 512, |
|
81 |
+ ]); |
|
82 |
+ $table->addColumn('telapi_url', Types::STRING, [ |
|
83 |
+ 'notnull' => true, |
|
84 |
+ 'length' => 512, |
|
85 |
+ ]); |
|
86 |
+ $table->addColumn('messaging_profile_id', Types::STRING, [ |
|
87 |
+ 'notnull' => true, |
|
88 |
+ 'length' => 512, |
|
89 |
+ ]); |
|
90 |
+ $table->addColumn('nexapi_key', Types::STRING, [ |
|
91 |
+ 'notnull' => true, |
|
92 |
+ 'length' => 512, |
|
93 |
+ ]); |
|
94 |
+ $table->addColumn('nexapi_secret', Types::STRING, [ |
|
95 |
+ 'notnull' => true, |
|
96 |
+ 'length' => 512, |
|
97 |
+ ]); |
|
98 |
+ $table->addColumn('nexapi_url_rec', Types::STRING, [ |
|
99 |
+ 'notnull' => true, |
|
100 |
+ 'length' => 512, |
|
101 |
+ ]); |
|
102 |
+ $table->addColumn('nexapi_url', Types::STRING, [ |
|
103 |
+ 'notnull' => true, |
|
104 |
+ 'length' => 512, |
|
105 |
+ ]); |
|
106 |
+ $table->addColumn('twilapi_key', Types::STRING, [ |
|
107 |
+ 'notnull' => true, |
|
108 |
+ 'length' => 512, |
|
109 |
+ ]); |
|
110 |
+ $table->addColumn('twilapi_secret', Types::STRING, [ |
|
111 |
+ 'notnull' => true, |
|
112 |
+ 'length' => 512, |
|
113 |
+ ]); |
|
114 |
+ $table->addColumn('twilapi_url_rec', Types::STRING, [ |
|
115 |
+ 'notnull' => true, |
|
116 |
+ 'length' => 512, |
|
117 |
+ ]); |
|
118 |
+ $table->addColumn('twilapi_url', Types::STRING, [ |
|
119 |
+ 'notnull' => true, |
|
120 |
+ 'length' => 512, |
|
121 |
+ ]); |
|
122 |
+ $table->addColumn('flowapi_key', Types::STRING, [ |
|
123 |
+ 'notnull' => true, |
|
124 |
+ 'length' => 512, |
|
125 |
+ ]); |
|
126 |
+ $table->addColumn('flowapi_secret', Types::STRING, [ |
|
127 |
+ 'notnull' => true, |
|
128 |
+ 'length' => 512, |
|
129 |
+ ]); |
|
130 |
+ $table->addColumn('flowapi_url_rec', Types::STRING, [ |
|
131 |
+ 'notnull' => true, |
|
132 |
+ 'length' => 512, |
|
133 |
+ ]); |
|
134 |
+ $table->addColumn('flowapi_url', Types::STRING, [ |
|
135 |
+ 'notnull' => true, |
|
136 |
+ 'length' => 512, |
|
137 |
+ ]); |
|
138 |
+ $table->addColumn('tel_sender_name', Types::STRING, [ |
|
139 |
+ 'notnull' => false, |
|
140 |
+ 'length' => 48, |
|
141 |
+ 'default' => '', |
|
142 |
+ ]); |
|
143 |
+ $table->addColumn('nex_sender_name', Types::STRING, [ |
|
144 |
+ 'notnull' => false, |
|
145 |
+ 'length' => 48, |
|
146 |
+ 'default' => '', |
|
147 |
+ ]); |
|
148 |
+ $table->addColumn('twil_sender_name', Types::STRING, [ |
|
149 |
+ 'notnull' => false, |
|
150 |
+ 'length' => 48, |
|
151 |
+ 'default' => '', |
|
152 |
+ ]); |
|
153 |
+ $table->addColumn('flow_sender_name', Types::STRING, [ |
|
154 |
+ 'notnull' => false, |
|
155 |
+ 'length' => 48, |
|
156 |
+ 'default' => '', |
|
157 |
+ ]); |
|
158 |
+ $table->addColumn('messagesperpage', Types::INTEGER, [ |
|
159 |
+ 'notnull' => false, |
|
160 |
+ 'length' => 11, |
|
161 |
+ 'unsigned' => true, |
|
162 |
+ ]); |
|
163 |
+ $table->addColumn('get_notify', Types::SMALLINT, [ |
|
164 |
+ 'notnull' => false, |
|
165 |
+ 'length' => 1, |
|
166 |
+ ]); |
|
167 |
+ $table->addColumn('notification_email', Types::STRING, [ |
|
168 |
+ 'notnull' => false, |
|
169 |
+ 'length' => 512, |
|
170 |
+ 'default' => '', |
|
171 |
+ ]); |
|
172 |
+ $table->addColumn('getsmsinemail', Types::SMALLINT, [ |
|
173 |
+ 'notnull' => false, |
|
174 |
+ 'length' => 1, |
|
175 |
+ ]); |
|
176 |
+ $table->addColumn('show_all_messages', Types::SMALLINT, [ |
|
177 |
+ 'notnull' => false, |
|
178 |
+ 'length' => 1, |
|
179 |
+ ]); |
|
180 |
+ $table->addColumn('show_display_names', Types::SMALLINT, [ |
|
181 |
+ 'notnull' => false, |
|
182 |
+ 'length' => 1, |
|
183 |
+ ]); |
|
184 |
+ $table->setPrimaryKey(['id']); |
|
185 |
+ $table->addUniqueIndex(['id']); |
|
186 |
+ |
|
187 |
+ } |
|
188 |
+ |
|
189 |
+ |
|
190 |
+ if (!$schema->hasTable('sms_relent_received')) { |
|
191 |
+ $table = $schema->createTable('sms_relent_received'); |
|
192 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
193 |
+ 'autoincrement' => true, |
|
194 |
+ 'notnull' => true, |
|
195 |
+ 'length' => 11, |
|
196 |
+ 'unsigned' => true, |
|
197 |
+ ]); |
|
198 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
199 |
+ 'notnull' => true, |
|
200 |
+ 'length' => 64, |
|
201 |
+ ]); |
|
202 |
+ $table->addColumn('message_id', Types::STRING, [ |
|
203 |
+ 'notnull' => true, |
|
204 |
+ 'length' => 512, |
|
205 |
+ ]); |
|
206 |
+ $table->addColumn('date', Types::DATETIME, [ |
|
207 |
+ 'notnull' => true, |
|
208 |
+ ]); |
|
209 |
+ $table->addColumn('from', Types::STRING, [ |
|
210 |
+ 'notnull' => true, |
|
211 |
+ 'length' => 128, |
|
212 |
+ ]); |
|
213 |
+ $table->addColumn('to', Types::STRING, [ |
|
214 |
+ 'notnull' => true, |
|
215 |
+ 'length' => 128, |
|
216 |
+ ]); |
|
217 |
+ $table->addColumn('message', Types::TEXT, [ |
|
218 |
+ 'notnull' => false, |
|
219 |
+ 'default' => '', |
|
220 |
+ ]); |
|
221 |
+ $table->addColumn('author_displayname', Types::STRING, [ |
|
222 |
+ 'notnull' => true, |
|
223 |
+ 'length' => 255, |
|
224 |
+ ]); |
|
225 |
+ $table->addColumn('internal_sender', Types::SMALLINT, [ |
|
226 |
+ 'notnull' => false, |
|
227 |
+ 'length' => 1, |
|
228 |
+ ]); |
|
229 |
+ $table->setPrimaryKey(['id']); |
|
230 |
+ $table->addUniqueIndex(['id']); |
|
231 |
+ |
|
232 |
+ } |
|
233 |
+ |
|
234 |
+ |
|
235 |
+ if (!$schema->hasTable('sms_relent_sent')) { |
|
236 |
+ $table = $schema->createTable('sms_relent_sent'); |
|
237 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
238 |
+ 'autoincrement' => true, |
|
239 |
+ 'notnull' => true, |
|
240 |
+ 'length' => 11, |
|
241 |
+ 'unsigned' => true, |
|
242 |
+ ]); |
|
243 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
244 |
+ 'notnull' => true, |
|
245 |
+ 'length' => 64, |
|
246 |
+ ]); |
|
247 |
+ $table->addColumn('message_id', Types::STRING, [ |
|
248 |
+ 'notnull' => true, |
|
249 |
+ 'length' => 512, |
|
250 |
+ ]); |
|
251 |
+ $table->addColumn('date', Types::DATETIME, [ |
|
252 |
+ 'notnull' => true, |
|
253 |
+ ]); |
|
254 |
+ $table->addColumn('from', Types::STRING, [ |
|
255 |
+ 'notnull' => true, |
|
256 |
+ 'length' => 128, |
|
257 |
+ ]); |
|
258 |
+ $table->addColumn('to', Types::STRING, [ |
|
259 |
+ 'notnull' => true, |
|
260 |
+ 'length' => 128, |
|
261 |
+ ]); |
|
262 |
+ $table->addColumn('network ', Types::STRING, [ |
|
263 |
+ 'notnull' => false, |
|
264 |
+ 'length' => 64, |
|
265 |
+ 'default' => '', |
|
266 |
+ ]); |
|
267 |
+ $table->addColumn('price', Types::STRING, [ |
|
268 |
+ 'notnull' => false, |
|
269 |
+ 'length' => 64, |
|
270 |
+ 'default' => '', |
|
271 |
+ ]); |
|
272 |
+ $table->addColumn('status', Types::STRING, [ |
|
273 |
+ 'notnull' => false, |
|
274 |
+ 'length' => 512, |
|
275 |
+ 'default' => '', |
|
276 |
+ ]); |
|
277 |
+ $table->addColumn('deliveryreceipt', Types::STRING, [ |
|
278 |
+ 'notnull' => false, |
|
279 |
+ 'length' => 64, |
|
280 |
+ 'default' => '', |
|
281 |
+ ]); |
|
282 |
+ $table->addColumn('message', Types::TEXT, [ |
|
283 |
+ 'notnull' => false, |
|
284 |
+ 'default' => '', |
|
285 |
+ ]); |
|
286 |
+ $table->addColumn('author_displayname', Types::STRING, [ |
|
287 |
+ 'notnull' => true, |
|
288 |
+ 'length' => 255, |
|
289 |
+ ]); |
|
290 |
+ $table->setPrimaryKey(['id']); |
|
291 |
+ $table->addUniqueIndex(['id']); |
|
292 |
+ |
|
293 |
+ } |
|
294 |
+ |
|
295 |
+ |
|
296 |
+ if (!$schema->hasTable('sms_relent_autorply')) { |
|
297 |
+ $table = $schema->createTable('sms_relent_autorply'); |
|
298 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
299 |
+ 'autoincrement' => true, |
|
300 |
+ 'notnull' => true, |
|
301 |
+ 'length' => 11, |
|
302 |
+ 'unsigned' => true, |
|
303 |
+ ]); |
|
304 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
305 |
+ 'notnull' => true, |
|
306 |
+ 'length' => 128, |
|
307 |
+ ]); |
|
308 |
+ $table->addColumn('saved_by_dsplname', Types::STRING, [ |
|
309 |
+ 'notnull' => true, |
|
310 |
+ 'length' => 255, |
|
311 |
+ ]); |
|
312 |
+ $table->addColumn('phone_number', Types::STRING, [ |
|
313 |
+ 'notnull' => true, |
|
314 |
+ 'length' => 128, |
|
315 |
+ ]); |
|
316 |
+ $table->addColumn('days_of_week', Types::STRING, [ |
|
317 |
+ 'notnull' => false, |
|
318 |
+ 'length' => 64, |
|
319 |
+ 'default' => '', |
|
320 |
+ ]); |
|
321 |
+ $table->addColumn('daily_start', Types::STRING, [ |
|
322 |
+ 'notnull' => false, |
|
323 |
+ 'length' => 8, |
|
324 |
+ 'default' => '', |
|
325 |
+ ]); |
|
326 |
+ $table->addColumn('daily_end', Types::STRING, [ |
|
327 |
+ 'notnull' => false, |
|
328 |
+ 'length' => 8, |
|
329 |
+ 'default' => '', |
|
330 |
+ ]); |
|
331 |
+ $table->addColumn('vacation_start', Types::DATETIME, [ |
|
332 |
+ 'notnull' => false, |
|
333 |
+ ]); |
|
334 |
+ $table->addColumn('vacation_end', Types::DATETIME, [ |
|
335 |
+ 'notnull' => false, |
|
336 |
+ ]); |
|
337 |
+ $table->addColumn('message_text', Types::TEXT, [ |
|
338 |
+ 'notnull' => false, |
|
339 |
+ 'default' => '', |
|
340 |
+ ]); |
|
341 |
+ $table->setPrimaryKey(['id']); |
|
342 |
+ $table->addUniqueIndex(['id']); |
|
343 |
+ |
|
344 |
+ } |
|
345 |
+ |
|
346 |
+ |
|
347 |
+ if (!$schema->hasTable('sms_relent_restrict')) { |
|
348 |
+ $table = $schema->createTable('sms_relent_restrict'); |
|
349 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
350 |
+ 'autoincrement' => true, |
|
351 |
+ 'notnull' => true, |
|
352 |
+ 'length' => 11, |
|
353 |
+ 'unsigned' => true, |
|
354 |
+ ]); |
|
355 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
356 |
+ 'notnull' => true, |
|
357 |
+ 'length' => 128, |
|
358 |
+ ]); |
|
359 |
+ $table->addColumn('saved_by_dsplname', Types::STRING, [ |
|
360 |
+ 'notnull' => true, |
|
361 |
+ 'length' => 255, |
|
362 |
+ ]); |
|
363 |
+ $table->addColumn('phone_number', Types::STRING, [ |
|
364 |
+ 'notnull' => true, |
|
365 |
+ 'length' => 128, |
|
366 |
+ ]); |
|
367 |
+ $table->addColumn('groups', Types::STRING, [ |
|
368 |
+ 'notnull' => true, |
|
369 |
+ 'length' => 2048, |
|
370 |
+ ]); |
|
371 |
+ $table->addColumn('users', Types::STRING, [ |
|
372 |
+ 'notnull' => true, |
|
373 |
+ 'length' => 2048, |
|
374 |
+ ]); |
|
375 |
+ $table->setPrimaryKey(['id']); |
|
376 |
+ $table->addUniqueIndex(['id']); |
|
377 |
+ |
|
378 |
+ } |
|
379 |
+ |
|
380 |
+ return $schema; |
|
381 |
+ } |
|
382 |
+ |
|
383 |
+ public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { |
|
384 |
+ |
|
385 |
+ // Enter the Nextcloud display name in the 'author_displayname' column of the 'sms_relent_sent' table, for messages that were sent before the upgrade |
|
386 |
+ $getrecfromnb = $this->connection->prepare('SELECT `id`, `user_id` FROM `*PREFIX*sms_relent_sent`'); |
|
387 |
+ $getrecfromnbres = $getrecfromnb->execute(); |
|
388 |
+ |
|
389 |
+ $recdatauids = []; |
|
390 |
+ $idsent = []; |
|
391 |
+ while ($rowfetched = $getrecfromnbres->fetch()) { |
|
392 |
+ $recdatauids[] = $rowfetched['user_id']; |
|
393 |
+ $idsent[] = $rowfetched['id']; |
|
394 |
+ } |
|
395 |
+ $getrecfromnbres->closeCursor(); |
|
396 |
+ |
|
397 |
+ if ($recdatauids) { |
|
398 |
+ |
|
399 |
+ $recuids = array_values(array_unique($recdatauids)); |
|
400 |
+ $acdatausrdn = []; |
|
401 |
+ |
|
402 |
+ foreach ($recuids as $dnkey => $dnvalue) { |
|
403 |
+ $getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?'); |
|
404 |
+ $getacdatadnres = $getacdatadn->execute([$dnvalue, 'displayname']); |
|
405 |
+ |
|
406 |
+ while ($acusrdnfetched = $getacdatadnres->fetch()) { |
|
407 |
+ $acdatausrdn[$dnvalue] = $acusrdnfetched['value']; |
|
408 |
+ } |
|
409 |
+ $getacdatadnres->closeCursor(); |
|
410 |
+ } |
|
411 |
+ |
|
412 |
+ foreach ($recdatauids as $pdpkey => $pdpvalue) { |
|
413 |
+ |
|
414 |
+ $updaterecms = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_sent` SET `author_displayname` = ? WHERE `user_id` = ? AND `id` = ?'); |
|
415 |
+ $updaterecmsres = $updaterecms->execute([$acdatausrdn[$pdpvalue], $pdpvalue, $idsent[$pdpkey]]); |
|
416 |
+ $updaterecmsres->closeCursor(); |
|
417 |
+ } |
|
418 |
+ } |
|
419 |
+ |
|
420 |
+ |
|
421 |
+ // Enter the Nextcloud display name in the 'author_displayname' column of the 'sms_relent_received' table, for messages that were received before the upgrade |
|
422 |
+ $getrecfromnb = $this->connection->prepare('SELECT `id`, `date`, `from` FROM `*PREFIX*sms_relent_received`'); |
|
423 |
+ $getrecfromnbres = $getrecfromnb->execute(); |
|
424 |
+ |
|
425 |
+ $recdatanmbrs = []; |
|
426 |
+ $idsrc = []; |
|
427 |
+ $daterec = []; |
|
428 |
+ while ($rowfetched = $getrecfromnbres->fetch()) { |
|
429 |
+ $recdatanmbrs[] = $rowfetched['from']; |
|
430 |
+ $idsrc[] = $rowfetched['id']; |
|
431 |
+ $daterecarr = explode(":", $rowfetched['date']); |
|
432 |
+ $daterec[] = $daterecarr[0]; |
|
433 |
+ } |
|
434 |
+ $getrecfromnbres->closeCursor(); |
|
435 |
+ |
|
436 |
+ if ($recdatanmbrs) { |
|
437 |
+ |
|
438 |
+ foreach ($recdatanmbrs as $rckey => $rcvalue) { |
|
439 |
+ |
|
440 |
+ // Search for the associated Display Name in the previous messages sent from the same phone number, in the 'sms_relent_sent' table |
|
441 |
+ $recmsgfromprc = '%' . $rcvalue; |
|
442 |
+ $recdataprc = $daterec[$rckey] . '%'; |
|
443 |
+ $getdspnmst = $this->connection->prepare('SELECT `date`, `from`, `author_displayname` FROM `*PREFIX*sms_relent_sent` WHERE `from` LIKE ? AND `date` LIKE ?'); |
|
444 |
+ $getdspnmstres = $getdspnmst->execute([$recmsgfromprc, $recdataprc]); |
|
445 |
+ |
|
446 |
+ $dispnamearr = []; |
|
447 |
+ while ($dspnmstfetched = $getdspnmstres->fetch()) { |
|
448 |
+ $dispnamearr[] = $dspnmstfetched['author_displayname']; |
|
449 |
+ } |
|
450 |
+ $getdspnmstres->closeCursor(); |
|
451 |
+ |
|
452 |
+ if ($dispnamearr) { |
|
453 |
+ $descdspnmarr = array_reverse($dispnamearr); |
|
454 |
+ $authorDisplayNm = $descdspnmarr[0]; |
|
455 |
+ $internalSender = 1; |
|
456 |
+ |
|
457 |
+ } else { |
|
458 |
+ |
|
459 |
+ $authorDisplayNm = ''; |
|
460 |
+ |
|
461 |
+ $getfrom = $this->connection->prepare('SELECT `from` FROM `*PREFIX*sms_relent_sent` WHERE `from` LIKE ? LIMIT 1'); |
|
462 |
+ $getfromres = $getfrom->execute([$recmsgfromprc]); |
|
463 |
+ $fromfetched = $getfromres->fetch(); |
|
464 |
+ |
|
465 |
+ if ($fromfetched) { $internalSender = 1; } else { $internalSender = 0; } |
|
466 |
+ |
|
467 |
+ |
|
468 |
+ // Search for the associated Display Name in the previous messages coming from the same phone number, in the 'sms_relent_received' table |
|
469 |
+ $getdspnm = $this->connection->prepare('SELECT `from`, `author_displayname` FROM `*PREFIX*sms_relent_received` WHERE `from` = ?'); |
|
470 |
+ $getdspnmres = $getdspnm->execute([$rcvalue]); |
|
471 |
+ |
|
472 |
+ $dspnmearr = []; |
|
473 |
+ while ($dspnmfetched = $getdspnmres->fetch()) { |
|
474 |
+ if ($dspnmfetched['author_displayname']) { |
|
475 |
+ $dspnmearr[] = $dspnmfetched['author_displayname']; |
|
476 |
+ } |
|
477 |
+ } |
|
478 |
+ $getdspnmres->closeCursor(); |
|
479 |
+ |
|
480 |
+ if ($dspnmearr) { |
|
481 |
+ $descdisplaynmarr = array_reverse($dspnmearr); |
|
482 |
+ $authorDisplayNm = $descdisplaynmarr[0]; |
|
483 |
+ } else { $authorDisplayNm = ''; } |
|
484 |
+ } |
|
485 |
+ |
|
486 |
+ $updaterecms = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_received` SET `author_displayname` = ?, `internal_sender` = ? |
|
487 |
+ WHERE `from` LIKE ? AND `id` = ?'); |
|
488 |
+ $updaterecmsres = $updaterecms->execute([$authorDisplayNm, $internalSender, $recmsgfromprc, $idsrc[$rckey]]); |
|
489 |
+ $updaterecmsres->closeCursor(); |
|
490 |
+ } |
|
491 |
+ } |
|
492 |
+ |
|
493 |
+ return null; |
|
494 |
+ } |
|
495 |
+ |
|
496 |
+} |
0 | 497 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,496 @@ |
1 |
+<?php |
|
2 |
+/** |
|
3 |
+ * @copyright 2021 Double Bastion LLC <www.doublebastion.com> |
|
4 |
+ * |
|
5 |
+ * @author Double Bastion LLC |
|
6 |
+ * |
|
7 |
+ * @license GNU AGPL version 3 or any later version |
|
8 |
+ * |
|
9 |
+ * This program is free software; you can redistribute it and/or |
|
10 |
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE |
|
11 |
+ * License as published by the Free Software Foundation; either |
|
12 |
+ * version 3 of the License, or any later version. |
|
13 |
+ * |
|
14 |
+ * This program is distributed in the hope that it will be useful, |
|
15 |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
16 |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
17 |
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details. |
|
18 |
+ * |
|
19 |
+ * You should have received a copy of the GNU Affero General Public |
|
20 |
+ * License along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
21 |
+ * |
|
22 |
+ */ |
|
23 |
+ |
|
24 |
+declare(strict_types=1); |
|
25 |
+ |
|
26 |
+namespace OCA\SMSRelentless\Migration; |
|
27 |
+ |
|
28 |
+use Closure; |
|
29 |
+use OCP\DB\Types; |
|
30 |
+use OCP\DB\ISchemaWrapper; |
|
31 |
+use OCP\IDBConnection; |
|
32 |
+use OCP\Migration\IOutput; |
|
33 |
+use OCP\Migration\SimpleMigrationStep; |
|
34 |
+ |
|
35 |
+ |
|
36 |
+class Version118Date20230509194216 extends SimpleMigrationStep { |
|
37 |
+ |
|
38 |
+ /** @var IDBConnection */ |
|
39 |
+ private $connection; |
|
40 |
+ |
|
41 |
+ /** |
|
42 |
+ * @param IDBConnection $connection |
|
43 |
+ */ |
|
44 |
+ public function __construct(IDBConnection $connection) { |
|
45 |
+ $this->connection = $connection; |
|
46 |
+ } |
|
47 |
+ |
|
48 |
+ /** |
|
49 |
+ * @param IOutput $output |
|
50 |
+ * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` |
|
51 |
+ * @param array $options |
|
52 |
+ * @return null|ISchemaWrapper |
|
53 |
+ */ |
|
54 |
+ public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { |
|
55 |
+ /** @var ISchemaWrapper $schema */ |
|
56 |
+ $schema = $schemaClosure(); |
|
57 |
+ |
|
58 |
+ if (!$schema->hasTable('sms_relent_settings')) { |
|
59 |
+ $table = $schema->createTable('sms_relent_settings'); |
|
60 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
61 |
+ 'autoincrement' => true, |
|
62 |
+ 'notnull' => true, |
|
63 |
+ 'length' => 11, |
|
64 |
+ 'unsigned' => true, |
|
65 |
+ ]); |
|
66 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
67 |
+ 'notnull' => true, |
|
68 |
+ 'length' => 128, |
|
69 |
+ ]); |
|
70 |
+ $table->addColumn('telapi_key', Types::STRING, [ |
|
71 |
+ 'notnull' => true, |
|
72 |
+ 'length' => 512, |
|
73 |
+ ]); |
|
74 |
+ $table->addColumn('tel_pub_key', Types::STRING, [ |
|
75 |
+ 'notnull' => true, |
|
76 |
+ 'length' => 512, |
|
77 |
+ ]); |
|
78 |
+ $table->addColumn('telapi_url_rec', Types::STRING, [ |
|
79 |
+ 'notnull' => true, |
|
80 |
+ 'length' => 512, |
|
81 |
+ ]); |
|
82 |
+ $table->addColumn('telapi_url', Types::STRING, [ |
|
83 |
+ 'notnull' => true, |
|
84 |
+ 'length' => 512, |
|
85 |
+ ]); |
|
86 |
+ $table->addColumn('messaging_profile_id', Types::STRING, [ |
|
87 |
+ 'notnull' => true, |
|
88 |
+ 'length' => 512, |
|
89 |
+ ]); |
|
90 |
+ $table->addColumn('nexapi_key', Types::STRING, [ |
|
91 |
+ 'notnull' => true, |
|
92 |
+ 'length' => 512, |
|
93 |
+ ]); |
|
94 |
+ $table->addColumn('nexapi_secret', Types::STRING, [ |
|
95 |
+ 'notnull' => true, |
|
96 |
+ 'length' => 512, |
|
97 |
+ ]); |
|
98 |
+ $table->addColumn('nexapi_url_rec', Types::STRING, [ |
|
99 |
+ 'notnull' => true, |
|
100 |
+ 'length' => 512, |
|
101 |
+ ]); |
|
102 |
+ $table->addColumn('nexapi_url', Types::STRING, [ |
|
103 |
+ 'notnull' => true, |
|
104 |
+ 'length' => 512, |
|
105 |
+ ]); |
|
106 |
+ $table->addColumn('twilapi_key', Types::STRING, [ |
|
107 |
+ 'notnull' => true, |
|
108 |
+ 'length' => 512, |
|
109 |
+ ]); |
|
110 |
+ $table->addColumn('twilapi_secret', Types::STRING, [ |
|
111 |
+ 'notnull' => true, |
|
112 |
+ 'length' => 512, |
|
113 |
+ ]); |
|
114 |
+ $table->addColumn('twilapi_url_rec', Types::STRING, [ |
|
115 |
+ 'notnull' => true, |
|
116 |
+ 'length' => 512, |
|
117 |
+ ]); |
|
118 |
+ $table->addColumn('twilapi_url', Types::STRING, [ |
|
119 |
+ 'notnull' => true, |
|
120 |
+ 'length' => 512, |
|
121 |
+ ]); |
|
122 |
+ $table->addColumn('flowapi_key', Types::STRING, [ |
|
123 |
+ 'notnull' => true, |
|
124 |
+ 'length' => 512, |
|
125 |
+ ]); |
|
126 |
+ $table->addColumn('flowapi_secret', Types::STRING, [ |
|
127 |
+ 'notnull' => true, |
|
128 |
+ 'length' => 512, |
|
129 |
+ ]); |
|
130 |
+ $table->addColumn('flowapi_url_rec', Types::STRING, [ |
|
131 |
+ 'notnull' => true, |
|
132 |
+ 'length' => 512, |
|
133 |
+ ]); |
|
134 |
+ $table->addColumn('flowapi_url', Types::STRING, [ |
|
135 |
+ 'notnull' => true, |
|
136 |
+ 'length' => 512, |
|
137 |
+ ]); |
|
138 |
+ $table->addColumn('tel_sender_name', Types::STRING, [ |
|
139 |
+ 'notnull' => false, |
|
140 |
+ 'length' => 48, |
|
141 |
+ 'default' => '', |
|
142 |
+ ]); |
|
143 |
+ $table->addColumn('nex_sender_name', Types::STRING, [ |
|
144 |
+ 'notnull' => false, |
|
145 |
+ 'length' => 48, |
|
146 |
+ 'default' => '', |
|
147 |
+ ]); |
|
148 |
+ $table->addColumn('twil_sender_name', Types::STRING, [ |
|
149 |
+ 'notnull' => false, |
|
150 |
+ 'length' => 48, |
|
151 |
+ 'default' => '', |
|
152 |
+ ]); |
|
153 |
+ $table->addColumn('flow_sender_name', Types::STRING, [ |
|
154 |
+ 'notnull' => false, |
|
155 |
+ 'length' => 48, |
|
156 |
+ 'default' => '', |
|
157 |
+ ]); |
|
158 |
+ $table->addColumn('messagesperpage', Types::INTEGER, [ |
|
159 |
+ 'notnull' => false, |
|
160 |
+ 'length' => 11, |
|
161 |
+ 'unsigned' => true, |
|
162 |
+ ]); |
|
163 |
+ $table->addColumn('get_notify', Types::SMALLINT, [ |
|
164 |
+ 'notnull' => false, |
|
165 |
+ 'length' => 1, |
|
166 |
+ ]); |
|
167 |
+ $table->addColumn('notification_email', Types::STRING, [ |
|
168 |
+ 'notnull' => false, |
|
169 |
+ 'length' => 512, |
|
170 |
+ 'default' => '', |
|
171 |
+ ]); |
|
172 |
+ $table->addColumn('getsmsinemail', Types::SMALLINT, [ |
|
173 |
+ 'notnull' => false, |
|
174 |
+ 'length' => 1, |
|
175 |
+ ]); |
|
176 |
+ $table->addColumn('show_all_messages', Types::SMALLINT, [ |
|
177 |
+ 'notnull' => false, |
|
178 |
+ 'length' => 1, |
|
179 |
+ ]); |
|
180 |
+ $table->addColumn('show_display_names', Types::SMALLINT, [ |
|
181 |
+ 'notnull' => false, |
|
182 |
+ 'length' => 1, |
|
183 |
+ ]); |
|
184 |
+ $table->setPrimaryKey(['id']); |
|
185 |
+ $table->addUniqueIndex(['id']); |
|
186 |
+ |
|
187 |
+ } |
|
188 |
+ |
|
189 |
+ |
|
190 |
+ if (!$schema->hasTable('sms_relent_received')) { |
|
191 |
+ $table = $schema->createTable('sms_relent_received'); |
|
192 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
193 |
+ 'autoincrement' => true, |
|
194 |
+ 'notnull' => true, |
|
195 |
+ 'length' => 11, |
|
196 |
+ 'unsigned' => true, |
|
197 |
+ ]); |
|
198 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
199 |
+ 'notnull' => true, |
|
200 |
+ 'length' => 64, |
|
201 |
+ ]); |
|
202 |
+ $table->addColumn('message_id', Types::STRING, [ |
|
203 |
+ 'notnull' => true, |
|
204 |
+ 'length' => 512, |
|
205 |
+ ]); |
|
206 |
+ $table->addColumn('date', Types::DATETIME, [ |
|
207 |
+ 'notnull' => true, |
|
208 |
+ ]); |
|
209 |
+ $table->addColumn('from', Types::STRING, [ |
|
210 |
+ 'notnull' => true, |
|
211 |
+ 'length' => 128, |
|
212 |
+ ]); |
|
213 |
+ $table->addColumn('to', Types::STRING, [ |
|
214 |
+ 'notnull' => true, |
|
215 |
+ 'length' => 128, |
|
216 |
+ ]); |
|
217 |
+ $table->addColumn('message', Types::TEXT, [ |
|
218 |
+ 'notnull' => false, |
|
219 |
+ 'default' => '', |
|
220 |
+ ]); |
|
221 |
+ $table->addColumn('author_displayname', Types::STRING, [ |
|
222 |
+ 'notnull' => true, |
|
223 |
+ 'length' => 255, |
|
224 |
+ ]); |
|
225 |
+ $table->addColumn('internal_sender', Types::SMALLINT, [ |
|
226 |
+ 'notnull' => false, |
|
227 |
+ 'length' => 1, |
|
228 |
+ ]); |
|
229 |
+ $table->setPrimaryKey(['id']); |
|
230 |
+ $table->addUniqueIndex(['id']); |
|
231 |
+ |
|
232 |
+ } |
|
233 |
+ |
|
234 |
+ |
|
235 |
+ if (!$schema->hasTable('sms_relent_sent')) { |
|
236 |
+ $table = $schema->createTable('sms_relent_sent'); |
|
237 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
238 |
+ 'autoincrement' => true, |
|
239 |
+ 'notnull' => true, |
|
240 |
+ 'length' => 11, |
|
241 |
+ 'unsigned' => true, |
|
242 |
+ ]); |
|
243 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
244 |
+ 'notnull' => true, |
|
245 |
+ 'length' => 64, |
|
246 |
+ ]); |
|
247 |
+ $table->addColumn('message_id', Types::STRING, [ |
|
248 |
+ 'notnull' => true, |
|
249 |
+ 'length' => 512, |
|
250 |
+ ]); |
|
251 |
+ $table->addColumn('date', Types::DATETIME, [ |
|
252 |
+ 'notnull' => true, |
|
253 |
+ ]); |
|
254 |
+ $table->addColumn('from', Types::STRING, [ |
|
255 |
+ 'notnull' => true, |
|
256 |
+ 'length' => 128, |
|
257 |
+ ]); |
|
258 |
+ $table->addColumn('to', Types::STRING, [ |
|
259 |
+ 'notnull' => true, |
|
260 |
+ 'length' => 128, |
|
261 |
+ ]); |
|
262 |
+ $table->addColumn('network ', Types::STRING, [ |
|
263 |
+ 'notnull' => false, |
|
264 |
+ 'length' => 64, |
|
265 |
+ 'default' => '', |
|
266 |
+ ]); |
|
267 |
+ $table->addColumn('price', Types::STRING, [ |
|
268 |
+ 'notnull' => false, |
|
269 |
+ 'length' => 64, |
|
270 |
+ 'default' => '', |
|
271 |
+ ]); |
|
272 |
+ $table->addColumn('status', Types::STRING, [ |
|
273 |
+ 'notnull' => false, |
|
274 |
+ 'length' => 512, |
|
275 |
+ 'default' => '', |
|
276 |
+ ]); |
|
277 |
+ $table->addColumn('deliveryreceipt', Types::STRING, [ |
|
278 |
+ 'notnull' => false, |
|
279 |
+ 'length' => 64, |
|
280 |
+ 'default' => '', |
|
281 |
+ ]); |
|
282 |
+ $table->addColumn('message', Types::TEXT, [ |
|
283 |
+ 'notnull' => false, |
|
284 |
+ 'default' => '', |
|
285 |
+ ]); |
|
286 |
+ $table->addColumn('author_displayname', Types::STRING, [ |
|
287 |
+ 'notnull' => true, |
|
288 |
+ 'length' => 255, |
|
289 |
+ ]); |
|
290 |
+ $table->setPrimaryKey(['id']); |
|
291 |
+ $table->addUniqueIndex(['id']); |
|
292 |
+ |
|
293 |
+ } |
|
294 |
+ |
|
295 |
+ |
|
296 |
+ if (!$schema->hasTable('sms_relent_autorply')) { |
|
297 |
+ $table = $schema->createTable('sms_relent_autorply'); |
|
298 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
299 |
+ 'autoincrement' => true, |
|
300 |
+ 'notnull' => true, |
|
301 |
+ 'length' => 11, |
|
302 |
+ 'unsigned' => true, |
|
303 |
+ ]); |
|
304 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
305 |
+ 'notnull' => true, |
|
306 |
+ 'length' => 128, |
|
307 |
+ ]); |
|
308 |
+ $table->addColumn('saved_by_dsplname', Types::STRING, [ |
|
309 |
+ 'notnull' => true, |
|
310 |
+ 'length' => 255, |
|
311 |
+ ]); |
|
312 |
+ $table->addColumn('phone_number', Types::STRING, [ |
|
313 |
+ 'notnull' => true, |
|
314 |
+ 'length' => 128, |
|
315 |
+ ]); |
|
316 |
+ $table->addColumn('days_of_week', Types::STRING, [ |
|
317 |
+ 'notnull' => false, |
|
318 |
+ 'length' => 64, |
|
319 |
+ 'default' => '', |
|
320 |
+ ]); |
|
321 |
+ $table->addColumn('daily_start', Types::STRING, [ |
|
322 |
+ 'notnull' => false, |
|
323 |
+ 'length' => 8, |
|
324 |
+ 'default' => '', |
|
325 |
+ ]); |
|
326 |
+ $table->addColumn('daily_end', Types::STRING, [ |
|
327 |
+ 'notnull' => false, |
|
328 |
+ 'length' => 8, |
|
329 |
+ 'default' => '', |
|
330 |
+ ]); |
|
331 |
+ $table->addColumn('vacation_start', Types::DATETIME, [ |
|
332 |
+ 'notnull' => false, |
|
333 |
+ ]); |
|
334 |
+ $table->addColumn('vacation_end', Types::DATETIME, [ |
|
335 |
+ 'notnull' => false, |
|
336 |
+ ]); |
|
337 |
+ $table->addColumn('message_text', Types::TEXT, [ |
|
338 |
+ 'notnull' => false, |
|
339 |
+ 'default' => '', |
|
340 |
+ ]); |
|
341 |
+ $table->setPrimaryKey(['id']); |
|
342 |
+ $table->addUniqueIndex(['id']); |
|
343 |
+ |
|
344 |
+ } |
|
345 |
+ |
|
346 |
+ |
|
347 |
+ if (!$schema->hasTable('sms_relent_restrict')) { |
|
348 |
+ $table = $schema->createTable('sms_relent_restrict'); |
|
349 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
350 |
+ 'autoincrement' => true, |
|
351 |
+ 'notnull' => true, |
|
352 |
+ 'length' => 11, |
|
353 |
+ 'unsigned' => true, |
|
354 |
+ ]); |
|
355 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
356 |
+ 'notnull' => true, |
|
357 |
+ 'length' => 128, |
|
358 |
+ ]); |
|
359 |
+ $table->addColumn('saved_by_dsplname', Types::STRING, [ |
|
360 |
+ 'notnull' => true, |
|
361 |
+ 'length' => 255, |
|
362 |
+ ]); |
|
363 |
+ $table->addColumn('phone_number', Types::STRING, [ |
|
364 |
+ 'notnull' => true, |
|
365 |
+ 'length' => 128, |
|
366 |
+ ]); |
|
367 |
+ $table->addColumn('groups', Types::STRING, [ |
|
368 |
+ 'notnull' => true, |
|
369 |
+ 'length' => 2048, |
|
370 |
+ ]); |
|
371 |
+ $table->addColumn('users', Types::STRING, [ |
|
372 |
+ 'notnull' => true, |
|
373 |
+ 'length' => 2048, |
|
374 |
+ ]); |
|
375 |
+ $table->setPrimaryKey(['id']); |
|
376 |
+ $table->addUniqueIndex(['id']); |
|
377 |
+ |
|
378 |
+ } |
|
379 |
+ |
|
380 |
+ return $schema; |
|
381 |
+ } |
|
382 |
+ |
|
383 |
+ public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { |
|
384 |
+ |
|
385 |
+ // Enter the Nextcloud display name in the 'author_displayname' column of the 'sms_relent_sent' table, for messages that were sent before the upgrade |
|
386 |
+ $getrecfromnb = $this->connection->prepare('SELECT `id`, `user_id` FROM `*PREFIX*sms_relent_sent`'); |
|
387 |
+ $getrecfromnbres = $getrecfromnb->execute(); |
|
388 |
+ |
|
389 |
+ $recdatauids = []; |
|
390 |
+ $idsent = []; |
|
391 |
+ while ($rowfetched = $getrecfromnbres->fetch()) { |
|
392 |
+ $recdatauids[] = $rowfetched['user_id']; |
|
393 |
+ $idsent[] = $rowfetched['id']; |
|
394 |
+ } |
|
395 |
+ $getrecfromnbres->closeCursor(); |
|
396 |
+ |
|
397 |
+ if ($recdatauids) { |
|
398 |
+ |
|
399 |
+ $recuids = array_values(array_unique($recdatauids)); |
|
400 |
+ $acdatausrdn = []; |
|
401 |
+ |
|
402 |
+ foreach ($recuids as $dnkey => $dnvalue) { |
|
403 |
+ $getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?'); |
|
404 |
+ $getacdatadnres = $getacdatadn->execute([$dnvalue, 'displayname']); |
|
405 |
+ |
|
406 |
+ while ($acusrdnfetched = $getacdatadnres->fetch()) { |
|
407 |
+ $acdatausrdn[$dnvalue] = $acusrdnfetched['value']; |
|
408 |
+ } |
|
409 |
+ $getacdatadnres->closeCursor(); |
|
410 |
+ } |
|
411 |
+ |
|
412 |
+ foreach ($recdatauids as $pdpkey => $pdpvalue) { |
|
413 |
+ |
|
414 |
+ $updaterecms = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_sent` SET `author_displayname` = ? WHERE `user_id` = ? AND `id` = ?'); |
|
415 |
+ $updaterecmsres = $updaterecms->execute([$acdatausrdn[$pdpvalue], $pdpvalue, $idsent[$pdpkey]]); |
|
416 |
+ $updaterecmsres->closeCursor(); |
|
417 |
+ } |
|
418 |
+ } |
|
419 |
+ |
|
420 |
+ |
|
421 |
+ // Enter the Nextcloud display name in the 'author_displayname' column of the 'sms_relent_received' table, for messages that were received before the upgrade |
|
422 |
+ $getrecfromnb = $this->connection->prepare('SELECT `id`, `date`, `from` FROM `*PREFIX*sms_relent_received`'); |
|
423 |
+ $getrecfromnbres = $getrecfromnb->execute(); |
|
424 |
+ |
|
425 |
+ $recdatanmbrs = []; |
|
426 |
+ $idsrc = []; |
|
427 |
+ $daterec = []; |
|
428 |
+ while ($rowfetched = $getrecfromnbres->fetch()) { |
|
429 |
+ $recdatanmbrs[] = $rowfetched['from']; |
|
430 |
+ $idsrc[] = $rowfetched['id']; |
|
431 |
+ $daterecarr = explode(":", $rowfetched['date']); |
|
432 |
+ $daterec[] = $daterecarr[0]; |
|
433 |
+ } |
|
434 |
+ $getrecfromnbres->closeCursor(); |
|
435 |
+ |
|
436 |
+ if ($recdatanmbrs) { |
|
437 |
+ |
|
438 |
+ foreach ($recdatanmbrs as $rckey => $rcvalue) { |
|
439 |
+ |
|
440 |
+ // Search for the associated Display Name in the previous messages sent from the same phone number, in the 'sms_relent_sent' table |
|
441 |
+ $recmsgfromprc = '%' . $rcvalue; |
|
442 |
+ $recdataprc = $daterec[$rckey] . '%'; |
|
443 |
+ $getdspnmst = $this->connection->prepare('SELECT `date`, `from`, `author_displayname` FROM `*PREFIX*sms_relent_sent` WHERE `from` LIKE ? AND `date` LIKE ?'); |
|
444 |
+ $getdspnmstres = $getdspnmst->execute([$recmsgfromprc, $recdataprc]); |
|
445 |
+ |
|
446 |
+ $dispnamearr = []; |
|
447 |
+ while ($dspnmstfetched = $getdspnmstres->fetch()) { |
|
448 |
+ $dispnamearr[] = $dspnmstfetched['author_displayname']; |
|
449 |
+ } |
|
450 |
+ $getdspnmstres->closeCursor(); |
|
451 |
+ |
|
452 |
+ if ($dispnamearr) { |
|
453 |
+ $descdspnmarr = array_reverse($dispnamearr); |
|
454 |
+ $authorDisplayNm = $descdspnmarr[0]; |
|
455 |
+ $internalSender = 1; |
|
456 |
+ |
|
457 |
+ } else { |
|
458 |
+ |
|
459 |
+ $authorDisplayNm = ''; |
|
460 |
+ |
|
461 |
+ $getfrom = $this->connection->prepare('SELECT `from` FROM `*PREFIX*sms_relent_sent` WHERE `from` LIKE ? LIMIT 1'); |
|
462 |
+ $getfromres = $getfrom->execute([$recmsgfromprc]); |
|
463 |
+ $fromfetched = $getfromres->fetch(); |
|
464 |
+ |
|
465 |
+ if ($fromfetched) { $internalSender = 1; } else { $internalSender = 0; } |
|
466 |
+ |
|
467 |
+ |
|
468 |
+ // Search for the associated Display Name in the previous messages coming from the same phone number, in the 'sms_relent_received' table |
|
469 |
+ $getdspnm = $this->connection->prepare('SELECT `from`, `author_displayname` FROM `*PREFIX*sms_relent_received` WHERE `from` = ?'); |
|
470 |
+ $getdspnmres = $getdspnm->execute([$rcvalue]); |
|
471 |
+ |
|
472 |
+ $dspnmearr = []; |
|
473 |
+ while ($dspnmfetched = $getdspnmres->fetch()) { |
|
474 |
+ if ($dspnmfetched['author_displayname']) { |
|
475 |
+ $dspnmearr[] = $dspnmfetched['author_displayname']; |
|
476 |
+ } |
|
477 |
+ } |
|
478 |
+ $getdspnmres->closeCursor(); |
|
479 |
+ |
|
480 |
+ if ($dspnmearr) { |
|
481 |
+ $descdisplaynmarr = array_reverse($dspnmearr); |
|
482 |
+ $authorDisplayNm = $descdisplaynmarr[0]; |
|
483 |
+ } else { $authorDisplayNm = ''; } |
|
484 |
+ } |
|
485 |
+ |
|
486 |
+ $updaterecms = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_received` SET `author_displayname` = ?, `internal_sender` = ? |
|
487 |
+ WHERE `from` LIKE ? AND `id` = ?'); |
|
488 |
+ $updaterecmsres = $updaterecms->execute([$authorDisplayNm, $internalSender, $recmsgfromprc, $idsrc[$rckey]]); |
|
489 |
+ $updaterecmsres->closeCursor(); |
|
490 |
+ } |
|
491 |
+ } |
|
492 |
+ |
|
493 |
+ return null; |
|
494 |
+ } |
|
495 |
+ |
|
496 |
+} |
0 | 497 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,545 @@ |
1 |
+<?php |
|
2 |
+/** |
|
3 |
+ * @copyright 2021 Double Bastion LLC <www.doublebastion.com> |
|
4 |
+ * |
|
5 |
+ * @author Double Bastion LLC |
|
6 |
+ * |
|
7 |
+ * @license GNU AGPL version 3 or any later version |
|
8 |
+ * |
|
9 |
+ * This program is free software; you can redistribute it and/or |
|
10 |
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE |
|
11 |
+ * License as published by the Free Software Foundation; either |
|
12 |
+ * version 3 of the License, or any later version. |
|
13 |
+ * |
|
14 |
+ * This program is distributed in the hope that it will be useful, |
|
15 |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
16 |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
17 |
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details. |
|
18 |
+ * |
|
19 |
+ * You should have received a copy of the GNU Affero General Public |
|
20 |
+ * License along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
21 |
+ * |
|
22 |
+ */ |
|
23 |
+ |
|
24 |
+declare(strict_types=1); |
|
25 |
+ |
|
26 |
+namespace OCA\SMSRelentless\Migration; |
|
27 |
+ |
|
28 |
+use Closure; |
|
29 |
+use OCP\DB\Types; |
|
30 |
+use OCP\DB\ISchemaWrapper; |
|
31 |
+use OCP\IDBConnection; |
|
32 |
+use OCP\Migration\IOutput; |
|
33 |
+use OCP\Migration\SimpleMigrationStep; |
|
34 |
+ |
|
35 |
+ |
|
36 |
+class Version120Date20230520072431 extends SimpleMigrationStep { |
|
37 |
+ |
|
38 |
+ /** @var IDBConnection */ |
|
39 |
+ private $connection; |
|
40 |
+ |
|
41 |
+ /** |
|
42 |
+ * @param IDBConnection $connection |
|
43 |
+ */ |
|
44 |
+ public function __construct(IDBConnection $connection) { |
|
45 |
+ $this->connection = $connection; |
|
46 |
+ } |
|
47 |
+ |
|
48 |
+ /** |
|
49 |
+ * @param IOutput $output |
|
50 |
+ * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` |
|
51 |
+ * @param array $options |
|
52 |
+ * @return null|ISchemaWrapper |
|
53 |
+ */ |
|
54 |
+ public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { |
|
55 |
+ /** @var ISchemaWrapper $schema */ |
|
56 |
+ $schema = $schemaClosure(); |
|
57 |
+ |
|
58 |
+ if (!$schema->hasTable('sms_relent_settings')) { |
|
59 |
+ $table = $schema->createTable('sms_relent_settings'); |
|
60 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
61 |
+ 'autoincrement' => true, |
|
62 |
+ 'notnull' => true, |
|
63 |
+ 'length' => 11, |
|
64 |
+ 'unsigned' => true, |
|
65 |
+ ]); |
|
66 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
67 |
+ 'notnull' => true, |
|
68 |
+ 'length' => 128, |
|
69 |
+ ]); |
|
70 |
+ $table->addColumn('telapi_key', Types::STRING, [ |
|
71 |
+ 'notnull' => true, |
|
72 |
+ 'length' => 512, |
|
73 |
+ ]); |
|
74 |
+ $table->addColumn('tel_pub_key', Types::STRING, [ |
|
75 |
+ 'notnull' => true, |
|
76 |
+ 'length' => 512, |
|
77 |
+ ]); |
|
78 |
+ $table->addColumn('telapi_url_rec', Types::STRING, [ |
|
79 |
+ 'notnull' => true, |
|
80 |
+ 'length' => 512, |
|
81 |
+ ]); |
|
82 |
+ $table->addColumn('telapi_url', Types::STRING, [ |
|
83 |
+ 'notnull' => true, |
|
84 |
+ 'length' => 512, |
|
85 |
+ ]); |
|
86 |
+ $table->addColumn('messaging_profile_id', Types::STRING, [ |
|
87 |
+ 'notnull' => true, |
|
88 |
+ 'length' => 512, |
|
89 |
+ ]); |
|
90 |
+ $table->addColumn('nexapi_key', Types::STRING, [ |
|
91 |
+ 'notnull' => true, |
|
92 |
+ 'length' => 512, |
|
93 |
+ ]); |
|
94 |
+ $table->addColumn('nexapi_secret', Types::STRING, [ |
|
95 |
+ 'notnull' => true, |
|
96 |
+ 'length' => 512, |
|
97 |
+ ]); |
|
98 |
+ $table->addColumn('nexapi_url_rec', Types::STRING, [ |
|
99 |
+ 'notnull' => true, |
|
100 |
+ 'length' => 512, |
|
101 |
+ ]); |
|
102 |
+ $table->addColumn('nexapi_url', Types::STRING, [ |
|
103 |
+ 'notnull' => true, |
|
104 |
+ 'length' => 512, |
|
105 |
+ ]); |
|
106 |
+ $table->addColumn('twilapi_key', Types::STRING, [ |
|
107 |
+ 'notnull' => true, |
|
108 |
+ 'length' => 512, |
|
109 |
+ ]); |
|
110 |
+ $table->addColumn('twilapi_secret', Types::STRING, [ |
|
111 |
+ 'notnull' => true, |
|
112 |
+ 'length' => 512, |
|
113 |
+ ]); |
|
114 |
+ $table->addColumn('twilapi_url_rec', Types::STRING, [ |
|
115 |
+ 'notnull' => true, |
|
116 |
+ 'length' => 512, |
|
117 |
+ ]); |
|
118 |
+ $table->addColumn('twilapi_url', Types::STRING, [ |
|
119 |
+ 'notnull' => true, |
|
120 |
+ 'length' => 512, |
|
121 |
+ ]); |
|
122 |
+ $table->addColumn('flowapi_key', Types::STRING, [ |
|
123 |
+ 'notnull' => true, |
|
124 |
+ 'length' => 512, |
|
125 |
+ ]); |
|
126 |
+ $table->addColumn('flowapi_secret', Types::STRING, [ |
|
127 |
+ 'notnull' => true, |
|
128 |
+ 'length' => 512, |
|
129 |
+ ]); |
|
130 |
+ $table->addColumn('flowapi_url_rec', Types::STRING, [ |
|
131 |
+ 'notnull' => true, |
|
132 |
+ 'length' => 512, |
|
133 |
+ ]); |
|
134 |
+ $table->addColumn('flowapi_url', Types::STRING, [ |
|
135 |
+ 'notnull' => true, |
|
136 |
+ 'length' => 512, |
|
137 |
+ ]); |
|
138 |
+ $table->addColumn('tel_sender_name', Types::STRING, [ |
|
139 |
+ 'notnull' => false, |
|
140 |
+ 'length' => 48, |
|
141 |
+ 'default' => '', |
|
142 |
+ ]); |
|
143 |
+ $table->addColumn('nex_sender_name', Types::STRING, [ |
|
144 |
+ 'notnull' => false, |
|
145 |
+ 'length' => 48, |
|
146 |
+ 'default' => '', |
|
147 |
+ ]); |
|
148 |
+ $table->addColumn('twil_sender_name', Types::STRING, [ |
|
149 |
+ 'notnull' => false, |
|
150 |
+ 'length' => 48, |
|
151 |
+ 'default' => '', |
|
152 |
+ ]); |
|
153 |
+ $table->addColumn('flow_sender_name', Types::STRING, [ |
|
154 |
+ 'notnull' => false, |
|
155 |
+ 'length' => 48, |
|
156 |
+ 'default' => '', |
|
157 |
+ ]); |
|
158 |
+ $table->addColumn('messagesperpage', Types::INTEGER, [ |
|
159 |
+ 'notnull' => false, |
|
160 |
+ 'length' => 11, |
|
161 |
+ 'unsigned' => true, |
|
162 |
+ ]); |
|
163 |
+ $table->addColumn('get_notify', Types::SMALLINT, [ |
|
164 |
+ 'notnull' => false, |
|
165 |
+ 'length' => 1, |
|
166 |
+ ]); |
|
167 |
+ $table->addColumn('notification_email', Types::STRING, [ |
|
168 |
+ 'notnull' => false, |
|
169 |
+ 'length' => 512, |
|
170 |
+ 'default' => '', |
|
171 |
+ ]); |
|
172 |
+ $table->addColumn('getsmsinemail', Types::SMALLINT, [ |
|
173 |
+ 'notnull' => false, |
|
174 |
+ 'length' => 1, |
|
175 |
+ ]); |
|
176 |
+ $table->addColumn('show_all_messages', Types::SMALLINT, [ |
|
177 |
+ 'notnull' => false, |
|
178 |
+ 'length' => 1, |
|
179 |
+ ]); |
|
180 |
+ $table->addColumn('show_display_names', Types::SMALLINT, [ |
|
181 |
+ 'notnull' => false, |
|
182 |
+ 'length' => 1, |
|
183 |
+ ]); |
|
184 |
+ $table->setPrimaryKey(['id']); |
|
185 |
+ $table->addUniqueIndex(['id']); |
|
186 |
+ |
|
187 |
+ } |
|
188 |
+ |
|
189 |
+ |
|
190 |
+ if (!$schema->hasTable('sms_relent_received')) { |
|
191 |
+ $table = $schema->createTable('sms_relent_received'); |
|
192 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
193 |
+ 'autoincrement' => true, |
|
194 |
+ 'notnull' => true, |
|
195 |
+ 'length' => 11, |
|
196 |
+ 'unsigned' => true, |
|
197 |
+ ]); |
|
198 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
199 |
+ 'notnull' => true, |
|
200 |
+ 'length' => 64, |
|
201 |
+ ]); |
|
202 |
+ $table->addColumn('message_id', Types::STRING, [ |
|
203 |
+ 'notnull' => true, |
|
204 |
+ 'length' => 512, |
|
205 |
+ ]); |
|
206 |
+ $table->addColumn('date', Types::DATETIME, [ |
|
207 |
+ 'notnull' => true, |
|
208 |
+ ]); |
|
209 |
+ $table->addColumn('from', Types::STRING, [ |
|
210 |
+ 'notnull' => true, |
|
211 |
+ 'length' => 128, |
|
212 |
+ ]); |
|
213 |
+ $table->addColumn('to', Types::STRING, [ |
|
214 |
+ 'notnull' => true, |
|
215 |
+ 'length' => 128, |
|
216 |
+ ]); |
|
217 |
+ $table->addColumn('message', Types::TEXT, [ |
|
218 |
+ 'notnull' => false, |
|
219 |
+ 'default' => '', |
|
220 |
+ ]); |
|
221 |
+ $table->addColumn('author_displayname', Types::STRING, [ |
|
222 |
+ 'notnull' => true, |
|
223 |
+ 'length' => 255, |
|
224 |
+ ]); |
|
225 |
+ $table->addColumn('internal_sender', Types::SMALLINT, [ |
|
226 |
+ 'notnull' => false, |
|
227 |
+ 'length' => 1, |
|
228 |
+ ]); |
|
229 |
+ $table->setPrimaryKey(['id']); |
|
230 |
+ $table->addUniqueIndex(['id']); |
|
231 |
+ |
|
232 |
+ } |
|
233 |
+ |
|
234 |
+ |
|
235 |
+ if (!$schema->hasTable('sms_relent_sent')) { |
|
236 |
+ $table = $schema->createTable('sms_relent_sent'); |
|
237 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
238 |
+ 'autoincrement' => true, |
|
239 |
+ 'notnull' => true, |
|
240 |
+ 'length' => 11, |
|
241 |
+ 'unsigned' => true, |
|
242 |
+ ]); |
|
243 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
244 |
+ 'notnull' => true, |
|
245 |
+ 'length' => 64, |
|
246 |
+ ]); |
|
247 |
+ $table->addColumn('message_id', Types::STRING, [ |
|
248 |
+ 'notnull' => true, |
|
249 |
+ 'length' => 512, |
|
250 |
+ ]); |
|
251 |
+ $table->addColumn('date', Types::DATETIME, [ |
|
252 |
+ 'notnull' => true, |
|
253 |
+ ]); |
|
254 |
+ $table->addColumn('from', Types::STRING, [ |
|
255 |
+ 'notnull' => true, |
|
256 |
+ 'length' => 128, |
|
257 |
+ ]); |
|
258 |
+ $table->addColumn('to', Types::STRING, [ |
|
259 |
+ 'notnull' => true, |
|
260 |
+ 'length' => 128, |
|
261 |
+ ]); |
|
262 |
+ $table->addColumn('network ', Types::STRING, [ |
|
263 |
+ 'notnull' => false, |
|
264 |
+ 'length' => 64, |
|
265 |
+ 'default' => '', |
|
266 |
+ ]); |
|
267 |
+ $table->addColumn('price', Types::STRING, [ |
|
268 |
+ 'notnull' => false, |
|
269 |
+ 'length' => 64, |
|
270 |
+ 'default' => '', |
|
271 |
+ ]); |
|
272 |
+ $table->addColumn('status', Types::STRING, [ |
|
273 |
+ 'notnull' => false, |
|
274 |
+ 'length' => 512, |
|
275 |
+ 'default' => '', |
|
276 |
+ ]); |
|
277 |
+ $table->addColumn('deliveryreceipt', Types::STRING, [ |
|
278 |
+ 'notnull' => false, |
|
279 |
+ 'length' => 64, |
|
280 |
+ 'default' => '', |
|
281 |
+ ]); |
|
282 |
+ $table->addColumn('message', Types::TEXT, [ |
|
283 |
+ 'notnull' => false, |
|
284 |
+ 'default' => '', |
|
285 |
+ ]); |
|
286 |
+ $table->addColumn('author_displayname', Types::STRING, [ |
|
287 |
+ 'notnull' => true, |
|
288 |
+ 'length' => 255, |
|
289 |
+ ]); |
|
290 |
+ $table->setPrimaryKey(['id']); |
|
291 |
+ $table->addUniqueIndex(['id']); |
|
292 |
+ |
|
293 |
+ } |
|
294 |
+ |
|
295 |
+ |
|
296 |
+ if (!$schema->hasTable('sms_relent_autorply')) { |
|
297 |
+ $table = $schema->createTable('sms_relent_autorply'); |
|
298 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
299 |
+ 'autoincrement' => true, |
|
300 |
+ 'notnull' => true, |
|
301 |
+ 'length' => 11, |
|
302 |
+ 'unsigned' => true, |
|
303 |
+ ]); |
|
304 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
305 |
+ 'notnull' => true, |
|
306 |
+ 'length' => 128, |
|
307 |
+ ]); |
|
308 |
+ $table->addColumn('saved_by_dsplname', Types::STRING, [ |
|
309 |
+ 'notnull' => true, |
|
310 |
+ 'length' => 255, |
|
311 |
+ ]); |
|
312 |
+ $table->addColumn('phone_number', Types::STRING, [ |
|
313 |
+ 'notnull' => true, |
|
314 |
+ 'length' => 128, |
|
315 |
+ ]); |
|
316 |
+ $table->addColumn('days_of_week', Types::STRING, [ |
|
317 |
+ 'notnull' => false, |
|
318 |
+ 'length' => 64, |
|
319 |
+ 'default' => '', |
|
320 |
+ ]); |
|
321 |
+ $table->addColumn('daily_start', Types::STRING, [ |
|
322 |
+ 'notnull' => false, |
|
323 |
+ 'length' => 8, |
|
324 |
+ 'default' => '', |
|
325 |
+ ]); |
|
326 |
+ $table->addColumn('daily_end', Types::STRING, [ |
|
327 |
+ 'notnull' => false, |
|
328 |
+ 'length' => 8, |
|
329 |
+ 'default' => '', |
|
330 |
+ ]); |
|
331 |
+ $table->addColumn('vacation_start', Types::DATETIME, [ |
|
332 |
+ 'notnull' => false, |
|
333 |
+ ]); |
|
334 |
+ $table->addColumn('vacation_end', Types::DATETIME, [ |
|
335 |
+ 'notnull' => false, |
|
336 |
+ ]); |
|
337 |
+ $table->addColumn('message_text', Types::TEXT, [ |
|
338 |
+ 'notnull' => false, |
|
339 |
+ 'default' => '', |
|
340 |
+ ]); |
|
341 |
+ $table->setPrimaryKey(['id']); |
|
342 |
+ $table->addUniqueIndex(['id']); |
|
343 |
+ |
|
344 |
+ } |
|
345 |
+ |
|
346 |
+ |
|
347 |
+ if (!$schema->hasTable('sms_relent_restrict')) { |
|
348 |
+ $table = $schema->createTable('sms_relent_restrict'); |
|
349 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
350 |
+ 'autoincrement' => true, |
|
351 |
+ 'notnull' => true, |
|
352 |
+ 'length' => 11, |
|
353 |
+ 'unsigned' => true, |
|
354 |
+ ]); |
|
355 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
356 |
+ 'notnull' => true, |
|
357 |
+ 'length' => 128, |
|
358 |
+ ]); |
|
359 |
+ $table->addColumn('saved_by_dsplname', Types::STRING, [ |
|
360 |
+ 'notnull' => true, |
|
361 |
+ 'length' => 255, |
|
362 |
+ ]); |
|
363 |
+ $table->addColumn('phone_number', Types::STRING, [ |
|
364 |
+ 'notnull' => true, |
|
365 |
+ 'length' => 128, |
|
366 |
+ ]); |
|
367 |
+ $table->addColumn('groups', Types::STRING, [ |
|
368 |
+ 'notnull' => true, |
|
369 |
+ 'length' => 2048, |
|
370 |
+ ]); |
|
371 |
+ $table->addColumn('users', Types::STRING, [ |
|
372 |
+ 'notnull' => true, |
|
373 |
+ 'length' => 2048, |
|
374 |
+ ]); |
|
375 |
+ $table->setPrimaryKey(['id']); |
|
376 |
+ $table->addUniqueIndex(['id']); |
|
377 |
+ |
|
378 |
+ } |
|
379 |
+ |
|
380 |
+ if (!$schema->hasTable('sms_relent_subac')) { |
|
381 |
+ $table = $schema->createTable('sms_relent_subac'); |
|
382 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
383 |
+ 'autoincrement' => true, |
|
384 |
+ 'notnull' => true, |
|
385 |
+ 'length' => 11, |
|
386 |
+ 'unsigned' => true, |
|
387 |
+ ]); |
|
388 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
389 |
+ 'notnull' => true, |
|
390 |
+ 'length' => 128, |
|
391 |
+ ]); |
|
392 |
+ $table->addColumn('tnx_groups_allowed', Types::TEXT, [ |
|
393 |
+ 'notnull' => false, |
|
394 |
+ 'default' => '', |
|
395 |
+ ]); |
|
396 |
+ $table->addColumn('tnx_users_allowed', Types::TEXT, [ |
|
397 |
+ 'notnull' => false, |
|
398 |
+ 'default' => '', |
|
399 |
+ ]); |
|
400 |
+ $table->addColumn('plv_groups_allowed', Types::TEXT, [ |
|
401 |
+ 'notnull' => false, |
|
402 |
+ 'default' => '', |
|
403 |
+ ]); |
|
404 |
+ $table->addColumn('plv_users_allowed', Types::TEXT, [ |
|
405 |
+ 'notnull' => false, |
|
406 |
+ 'default' => '', |
|
407 |
+ ]); |
|
408 |
+ $table->addColumn('twl_groups_allowed', Types::TEXT, [ |
|
409 |
+ 'notnull' => false, |
|
410 |
+ 'default' => '', |
|
411 |
+ ]); |
|
412 |
+ $table->addColumn('twl_users_allowed', Types::TEXT, [ |
|
413 |
+ 'notnull' => false, |
|
414 |
+ 'default' => '', |
|
415 |
+ ]); |
|
416 |
+ $table->addColumn('flr_groups_allowed', Types::TEXT, [ |
|
417 |
+ 'notnull' => false, |
|
418 |
+ 'default' => '', |
|
419 |
+ ]); |
|
420 |
+ $table->addColumn('flr_users_allowed', Types::TEXT, [ |
|
421 |
+ 'notnull' => false, |
|
422 |
+ 'default' => '', |
|
423 |
+ ]); |
|
424 |
+ $table->setPrimaryKey(['id']); |
|
425 |
+ $table->addUniqueIndex(['id']); |
|
426 |
+ } |
|
427 |
+ |
|
428 |
+ |
|
429 |
+ return $schema; |
|
430 |
+ } |
|
431 |
+ |
|
432 |
+ public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { |
|
433 |
+ |
|
434 |
+ // Enter the Nextcloud display name in the 'author_displayname' column of the 'sms_relent_sent' table, for messages that were sent before the upgrade |
|
435 |
+ $getrecfromnb = $this->connection->prepare('SELECT `id`, `user_id` FROM `*PREFIX*sms_relent_sent`'); |
|
436 |
+ $getrecfromnbres = $getrecfromnb->execute(); |
|
437 |
+ |
|
438 |
+ $recdatauids = []; |
|
439 |
+ $idsent = []; |
|
440 |
+ while ($rowfetched = $getrecfromnbres->fetch()) { |
|
441 |
+ $recdatauids[] = $rowfetched['user_id']; |
|
442 |
+ $idsent[] = $rowfetched['id']; |
|
443 |
+ } |
|
444 |
+ $getrecfromnbres->closeCursor(); |
|
445 |
+ |
|
446 |
+ if ($recdatauids) { |
|
447 |
+ |
|
448 |
+ $recuids = array_values(array_unique($recdatauids)); |
|
449 |
+ $acdatausrdn = []; |
|
450 |
+ |
|
451 |
+ foreach ($recuids as $dnkey => $dnvalue) { |
|
452 |
+ $getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?'); |
|
453 |
+ $getacdatadnres = $getacdatadn->execute([$dnvalue, 'displayname']); |
|
454 |
+ |
|
455 |
+ while ($acusrdnfetched = $getacdatadnres->fetch()) { |
|
456 |
+ $acdatausrdn[$dnvalue] = $acusrdnfetched['value']; |
|
457 |
+ } |
|
458 |
+ $getacdatadnres->closeCursor(); |
|
459 |
+ } |
|
460 |
+ |
|
461 |
+ foreach ($recdatauids as $pdpkey => $pdpvalue) { |
|
462 |
+ |
|
463 |
+ $updaterecms = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_sent` SET `author_displayname` = ? WHERE `user_id` = ? AND `id` = ?'); |
|
464 |
+ $updaterecmsres = $updaterecms->execute([$acdatausrdn[$pdpvalue], $pdpvalue, $idsent[$pdpkey]]); |
|
465 |
+ $updaterecmsres->closeCursor(); |
|
466 |
+ } |
|
467 |
+ } |
|
468 |
+ |
|
469 |
+ |
|
470 |
+ // Enter the Nextcloud display name in the 'author_displayname' column of the 'sms_relent_received' table, for messages that were received before the upgrade |
|
471 |
+ $getrecfromnb = $this->connection->prepare('SELECT `id`, `date`, `from` FROM `*PREFIX*sms_relent_received`'); |
|
472 |
+ $getrecfromnbres = $getrecfromnb->execute(); |
|
473 |
+ |
|
474 |
+ $recdatanmbrs = []; |
|
475 |
+ $idsrc = []; |
|
476 |
+ $daterec = []; |
|
477 |
+ while ($rowfetched = $getrecfromnbres->fetch()) { |
|
478 |
+ $recdatanmbrs[] = $rowfetched['from']; |
|
479 |
+ $idsrc[] = $rowfetched['id']; |
|
480 |
+ $daterecarr = explode(":", $rowfetched['date']); |
|
481 |
+ $daterec[] = $daterecarr[0]; |
|
482 |
+ } |
|
483 |
+ $getrecfromnbres->closeCursor(); |
|
484 |
+ |
|
485 |
+ if ($recdatanmbrs) { |
|
486 |
+ |
|
487 |
+ foreach ($recdatanmbrs as $rckey => $rcvalue) { |
|
488 |
+ |
|
489 |
+ // Search for the associated Display Name in the previous messages sent from the same phone number, in the 'sms_relent_sent' table |
|
490 |
+ $recmsgfromprc = '%' . $rcvalue; |
|
491 |
+ $recdataprc = $daterec[$rckey] . '%'; |
|
492 |
+ $getdspnmst = $this->connection->prepare('SELECT `date`, `from`, `author_displayname` FROM `*PREFIX*sms_relent_sent` WHERE `from` LIKE ? AND `date` LIKE ?'); |
|
493 |
+ $getdspnmstres = $getdspnmst->execute([$recmsgfromprc, $recdataprc]); |
|
494 |
+ |
|
495 |
+ $dispnamearr = []; |
|
496 |
+ while ($dspnmstfetched = $getdspnmstres->fetch()) { |
|
497 |
+ $dispnamearr[] = $dspnmstfetched['author_displayname']; |
|
498 |
+ } |
|
499 |
+ $getdspnmstres->closeCursor(); |
|
500 |
+ |
|
501 |
+ if ($dispnamearr) { |
|
502 |
+ $descdspnmarr = array_reverse($dispnamearr); |
|
503 |
+ $authorDisplayNm = $descdspnmarr[0]; |
|
504 |
+ $internalSender = 1; |
|
505 |
+ |
|
506 |
+ } else { |
|
507 |
+ |
|
508 |
+ $authorDisplayNm = ''; |
|
509 |
+ |
|
510 |
+ $getfrom = $this->connection->prepare('SELECT `from` FROM `*PREFIX*sms_relent_sent` WHERE `from` LIKE ? LIMIT 1'); |
|
511 |
+ $getfromres = $getfrom->execute([$recmsgfromprc]); |
|
512 |
+ $fromfetched = $getfromres->fetch(); |
|
513 |
+ |
|
514 |
+ if ($fromfetched) { $internalSender = 1; } else { $internalSender = 0; } |
|
515 |
+ |
|
516 |
+ |
|
517 |
+ // Search for the associated Display Name in the previous messages coming from the same phone number, in the 'sms_relent_received' table |
|
518 |
+ $getdspnm = $this->connection->prepare('SELECT `from`, `author_displayname` FROM `*PREFIX*sms_relent_received` WHERE `from` = ?'); |
|
519 |
+ $getdspnmres = $getdspnm->execute([$rcvalue]); |
|
520 |
+ |
|
521 |
+ $dspnmearr = []; |
|
522 |
+ while ($dspnmfetched = $getdspnmres->fetch()) { |
|
523 |
+ if ($dspnmfetched['author_displayname']) { |
|
524 |
+ $dspnmearr[] = $dspnmfetched['author_displayname']; |
|
525 |
+ } |
|
526 |
+ } |
|
527 |
+ $getdspnmres->closeCursor(); |
|
528 |
+ |
|
529 |
+ if ($dspnmearr) { |
|
530 |
+ $descdisplaynmarr = array_reverse($dspnmearr); |
|
531 |
+ $authorDisplayNm = $descdisplaynmarr[0]; |
|
532 |
+ } else { $authorDisplayNm = ''; } |
|
533 |
+ } |
|
534 |
+ |
|
535 |
+ $updaterecms = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_received` SET `author_displayname` = ?, `internal_sender` = ? |
|
536 |
+ WHERE `from` LIKE ? AND `id` = ?'); |
|
537 |
+ $updaterecmsres = $updaterecms->execute([$authorDisplayNm, $internalSender, $recmsgfromprc, $idsrc[$rckey]]); |
|
538 |
+ $updaterecmsres->closeCursor(); |
|
539 |
+ } |
|
540 |
+ } |
|
541 |
+ |
|
542 |
+ return null; |
|
543 |
+ } |
|
544 |
+ |
|
545 |
+} |
0 | 546 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,546 @@ |
1 |
+<?php |
|
2 |
+/** |
|
3 |
+ * @copyright 2021 Double Bastion LLC <www.doublebastion.com> |
|
4 |
+ * |
|
5 |
+ * @author Double Bastion LLC |
|
6 |
+ * |
|
7 |
+ * @license GNU AGPL version 3 or any later version |
|
8 |
+ * |
|
9 |
+ * This program is free software; you can redistribute it and/or |
|
10 |
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE |
|
11 |
+ * License as published by the Free Software Foundation; either |
|
12 |
+ * version 3 of the License, or any later version. |
|
13 |
+ * |
|
14 |
+ * This program is distributed in the hope that it will be useful, |
|
15 |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
16 |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
17 |
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details. |
|
18 |
+ * |
|
19 |
+ * You should have received a copy of the GNU Affero General Public |
|
20 |
+ * License along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
21 |
+ * |
|
22 |
+ */ |
|
23 |
+ |
|
24 |
+declare(strict_types=1); |
|
25 |
+ |
|
26 |
+namespace OCA\SMSRelentless\Migration; |
|
27 |
+ |
|
28 |
+use Closure; |
|
29 |
+use OCP\DB\Types; |
|
30 |
+use OCP\DB\ISchemaWrapper; |
|
31 |
+use OCP\IDBConnection; |
|
32 |
+use OCP\Migration\IOutput; |
|
33 |
+use OCP\Migration\SimpleMigrationStep; |
|
34 |
+ |
|
35 |
+ |
|
36 |
+class Version121Date20230523201743 extends SimpleMigrationStep { |
|
37 |
+ |
|
38 |
+ /** @var IDBConnection */ |
|
39 |
+ private $connection; |
|
40 |
+ |
|
41 |
+ /** |
|
42 |
+ * @param IDBConnection $connection |
|
43 |
+ */ |
|
44 |
+ public function __construct(IDBConnection $connection) { |
|
45 |
+ $this->connection = $connection; |
|
46 |
+ } |
|
47 |
+ |
|
48 |
+ /** |
|
49 |
+ * @param IOutput $output |
|
50 |
+ * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` |
|
51 |
+ * @param array $options |
|
52 |
+ * @return null|ISchemaWrapper |
|
53 |
+ */ |
|
54 |
+ public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { |
|
55 |
+ /** @var ISchemaWrapper $schema */ |
|
56 |
+ $schema = $schemaClosure(); |
|
57 |
+ |
|
58 |
+ if (!$schema->hasTable('sms_relent_settings')) { |
|
59 |
+ $table = $schema->createTable('sms_relent_settings'); |
|
60 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
61 |
+ 'autoincrement' => true, |
|
62 |
+ 'notnull' => true, |
|
63 |
+ 'length' => 11, |
|
64 |
+ 'unsigned' => true, |
|
65 |
+ ]); |
|
66 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
67 |
+ 'notnull' => true, |
|
68 |
+ 'length' => 128, |
|
69 |
+ ]); |
|
70 |
+ $table->addColumn('telapi_key', Types::STRING, [ |
|
71 |
+ 'notnull' => true, |
|
72 |
+ 'length' => 512, |
|
73 |
+ ]); |
|
74 |
+ $table->addColumn('tel_pub_key', Types::STRING, [ |
|
75 |
+ 'notnull' => true, |
|
76 |
+ 'length' => 512, |
|
77 |
+ ]); |
|
78 |
+ $table->addColumn('telapi_url_rec', Types::STRING, [ |
|
79 |
+ 'notnull' => true, |
|
80 |
+ 'length' => 512, |
|
81 |
+ ]); |
|
82 |
+ $table->addColumn('telapi_url', Types::STRING, [ |
|
83 |
+ 'notnull' => true, |
|
84 |
+ 'length' => 512, |
|
85 |
+ ]); |
|
86 |
+ $table->addColumn('messaging_profile_id', Types::STRING, [ |
|
87 |
+ 'notnull' => true, |
|
88 |
+ 'length' => 512, |
|
89 |
+ ]); |
|
90 |
+ $table->addColumn('nexapi_key', Types::STRING, [ |
|
91 |
+ 'notnull' => true, |
|
92 |
+ 'length' => 512, |
|
93 |
+ ]); |
|
94 |
+ $table->addColumn('nexapi_secret', Types::STRING, [ |
|
95 |
+ 'notnull' => true, |
|
96 |
+ 'length' => 512, |
|
97 |
+ ]); |
|
98 |
+ $table->addColumn('nexapi_url_rec', Types::STRING, [ |
|
99 |
+ 'notnull' => true, |
|
100 |
+ 'length' => 512, |
|
101 |
+ ]); |
|
102 |
+ $table->addColumn('nexapi_url', Types::STRING, [ |
|
103 |
+ 'notnull' => true, |
|
104 |
+ 'length' => 512, |
|
105 |
+ ]); |
|
106 |
+ $table->addColumn('twilapi_key', Types::STRING, [ |
|
107 |
+ 'notnull' => true, |
|
108 |
+ 'length' => 512, |
|
109 |
+ ]); |
|
110 |
+ $table->addColumn('twilapi_secret', Types::STRING, [ |
|
111 |
+ 'notnull' => true, |
|
112 |
+ 'length' => 512, |
|
113 |
+ ]); |
|
114 |
+ $table->addColumn('twilapi_url_rec', Types::STRING, [ |
|
115 |
+ 'notnull' => true, |
|
116 |
+ 'length' => 512, |
|
117 |
+ ]); |
|
118 |
+ $table->addColumn('twilapi_url', Types::STRING, [ |
|
119 |
+ 'notnull' => true, |
|
120 |
+ 'length' => 512, |
|
121 |
+ ]); |
|
122 |
+ $table->addColumn('flowapi_key', Types::STRING, [ |
|
123 |
+ 'notnull' => true, |
|
124 |
+ 'length' => 512, |
|
125 |
+ ]); |
|
126 |
+ $table->addColumn('flowapi_secret', Types::STRING, [ |
|
127 |
+ 'notnull' => true, |
|
128 |
+ 'length' => 512, |
|
129 |
+ ]); |
|
130 |
+ $table->addColumn('flowapi_url_rec', Types::STRING, [ |
|
131 |
+ 'notnull' => true, |
|
132 |
+ 'length' => 512, |
|
133 |
+ ]); |
|
134 |
+ $table->addColumn('flowapi_url', Types::STRING, [ |
|
135 |
+ 'notnull' => true, |
|
136 |
+ 'length' => 512, |
|
137 |
+ ]); |
|
138 |
+ $table->addColumn('tel_sender_name', Types::STRING, [ |
|
139 |
+ 'notnull' => false, |
|
140 |
+ 'length' => 48, |
|
141 |
+ 'default' => '', |
|
142 |
+ ]); |
|
143 |
+ $table->addColumn('nex_sender_name', Types::STRING, [ |
|
144 |
+ 'notnull' => false, |
|
145 |
+ 'length' => 48, |
|
146 |
+ 'default' => '', |
|
147 |
+ ]); |
|
148 |
+ $table->addColumn('twil_sender_name', Types::STRING, [ |
|
149 |
+ 'notnull' => false, |
|
150 |
+ 'length' => 48, |
|
151 |
+ 'default' => '', |
|
152 |
+ ]); |
|
153 |
+ $table->addColumn('flow_sender_name', Types::STRING, [ |
|
154 |
+ 'notnull' => false, |
|
155 |
+ 'length' => 48, |
|
156 |
+ 'default' => '', |
|
157 |
+ ]); |
|
158 |
+ $table->addColumn('messagesperpage', Types::INTEGER, [ |
|
159 |
+ 'notnull' => false, |
|
160 |
+ 'length' => 11, |
|
161 |
+ 'unsigned' => true, |
|
162 |
+ ]); |
|
163 |
+ $table->addColumn('get_notify', Types::SMALLINT, [ |
|
164 |
+ 'notnull' => false, |
|
165 |
+ 'length' => 1, |
|
166 |
+ ]); |
|
167 |
+ $table->addColumn('notification_email', Types::STRING, [ |
|
168 |
+ 'notnull' => false, |
|
169 |
+ 'length' => 512, |
|
170 |
+ 'default' => '', |
|
171 |
+ ]); |
|
172 |
+ $table->addColumn('getsmsinemail', Types::SMALLINT, [ |
|
173 |
+ 'notnull' => false, |
|
174 |
+ 'length' => 1, |
|
175 |
+ ]); |
|
176 |
+ $table->addColumn('show_all_messages', Types::SMALLINT, [ |
|
177 |
+ 'notnull' => false, |
|
178 |
+ 'length' => 1, |
|
179 |
+ ]); |
|
180 |
+ $table->addColumn('show_display_names', Types::SMALLINT, [ |
|
181 |
+ 'notnull' => false, |
|
182 |
+ 'length' => 1, |
|
183 |
+ ]); |
|
184 |
+ $table->setPrimaryKey(['id']); |
|
185 |
+ $table->addUniqueIndex(['id']); |
|
186 |
+ |
|
187 |
+ } |
|
188 |
+ |
|
189 |
+ |
|
190 |
+ if (!$schema->hasTable('sms_relent_received')) { |
|
191 |
+ $table = $schema->createTable('sms_relent_received'); |
|
192 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
193 |
+ 'autoincrement' => true, |
|
194 |
+ 'notnull' => true, |
|
195 |
+ 'length' => 11, |
|
196 |
+ 'unsigned' => true, |
|
197 |
+ ]); |
|
198 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
199 |
+ 'notnull' => true, |
|
200 |
+ 'length' => 64, |
|
201 |
+ ]); |
|
202 |
+ $table->addColumn('message_id', Types::STRING, [ |
|
203 |
+ 'notnull' => true, |
|
204 |
+ 'length' => 512, |
|
205 |
+ ]); |
|
206 |
+ $table->addColumn('date', Types::DATETIME, [ |
|
207 |
+ 'notnull' => true, |
|
208 |
+ ]); |
|
209 |
+ $table->addColumn('from', Types::STRING, [ |
|
210 |
+ 'notnull' => true, |
|
211 |
+ 'length' => 128, |
|
212 |
+ ]); |
|
213 |
+ $table->addColumn('to', Types::STRING, [ |
|
214 |
+ 'notnull' => true, |
|
215 |
+ 'length' => 128, |
|
216 |
+ ]); |
|
217 |
+ $table->addColumn('message', Types::TEXT, [ |
|
218 |
+ 'notnull' => false, |
|
219 |
+ 'default' => '', |
|
220 |
+ ]); |
|
221 |
+ $table->addColumn('author_displayname', Types::STRING, [ |
|
222 |
+ 'notnull' => true, |
|
223 |
+ 'length' => 255, |
|
224 |
+ ]); |
|
225 |
+ $table->addColumn('internal_sender', Types::SMALLINT, [ |
|
226 |
+ 'notnull' => false, |
|
227 |
+ 'length' => 1, |
|
228 |
+ ]); |
|
229 |
+ $table->setPrimaryKey(['id']); |
|
230 |
+ $table->addUniqueIndex(['id']); |
|
231 |
+ |
|
232 |
+ } |
|
233 |
+ |
|
234 |
+ |
|
235 |
+ if (!$schema->hasTable('sms_relent_sent')) { |
|
236 |
+ $table = $schema->createTable('sms_relent_sent'); |
|
237 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
238 |
+ 'autoincrement' => true, |
|
239 |
+ 'notnull' => true, |
|
240 |
+ 'length' => 11, |
|
241 |
+ 'unsigned' => true, |
|
242 |
+ ]); |
|
243 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
244 |
+ 'notnull' => true, |
|
245 |
+ 'length' => 64, |
|
246 |
+ ]); |
|
247 |
+ $table->addColumn('message_id', Types::STRING, [ |
|
248 |
+ 'notnull' => true, |
|
249 |
+ 'length' => 512, |
|
250 |
+ ]); |
|
251 |
+ $table->addColumn('date', Types::DATETIME, [ |
|
252 |
+ 'notnull' => true, |
|
253 |
+ ]); |
|
254 |
+ $table->addColumn('from', Types::STRING, [ |
|
255 |
+ 'notnull' => true, |
|
256 |
+ 'length' => 128, |
|
257 |
+ ]); |
|
258 |
+ $table->addColumn('to', Types::STRING, [ |
|
259 |
+ 'notnull' => true, |
|
260 |
+ 'length' => 128, |
|
261 |
+ ]); |
|
262 |
+ $table->addColumn('network ', Types::STRING, [ |
|
263 |
+ 'notnull' => false, |
|
264 |
+ 'length' => 64, |
|
265 |
+ 'default' => '', |
|
266 |
+ ]); |
|
267 |
+ $table->addColumn('price', Types::STRING, [ |
|
268 |
+ 'notnull' => false, |
|
269 |
+ 'length' => 64, |
|
270 |
+ 'default' => '', |
|
271 |
+ ]); |
|
272 |
+ $table->addColumn('status', Types::STRING, [ |
|
273 |
+ 'notnull' => false, |
|
274 |
+ 'length' => 512, |
|
275 |
+ 'default' => '', |
|
276 |
+ ]); |
|
277 |
+ $table->addColumn('deliveryreceipt', Types::STRING, [ |
|
278 |
+ 'notnull' => false, |
|
279 |
+ 'length' => 64, |
|
280 |
+ 'default' => '', |
|
281 |
+ ]); |
|
282 |
+ $table->addColumn('message', Types::TEXT, [ |
|
283 |
+ 'notnull' => false, |
|
284 |
+ 'default' => '', |
|
285 |
+ ]); |
|
286 |
+ $table->addColumn('author_displayname', Types::STRING, [ |
|
287 |
+ 'notnull' => true, |
|
288 |
+ 'length' => 255, |
|
289 |
+ ]); |
|
290 |
+ $table->setPrimaryKey(['id']); |
|
291 |
+ $table->addUniqueIndex(['id']); |
|
292 |
+ |
|
293 |
+ } |
|
294 |
+ |
|
295 |
+ |
|
296 |
+ if (!$schema->hasTable('sms_relent_autorply')) { |
|
297 |
+ $table = $schema->createTable('sms_relent_autorply'); |
|
298 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
299 |
+ 'autoincrement' => true, |
|
300 |
+ 'notnull' => true, |
|
301 |
+ 'length' => 11, |
|
302 |
+ 'unsigned' => true, |
|
303 |
+ ]); |
|
304 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
305 |
+ 'notnull' => true, |
|
306 |
+ 'length' => 128, |
|
307 |
+ ]); |
|
308 |
+ $table->addColumn('saved_by_dsplname', Types::STRING, [ |
|
309 |
+ 'notnull' => true, |
|
310 |
+ 'length' => 255, |
|
311 |
+ ]); |
|
312 |
+ $table->addColumn('phone_number', Types::STRING, [ |
|
313 |
+ 'notnull' => true, |
|
314 |
+ 'length' => 128, |
|
315 |
+ ]); |
|
316 |
+ $table->addColumn('days_of_week', Types::STRING, [ |
|
317 |
+ 'notnull' => false, |
|
318 |
+ 'length' => 64, |
|
319 |
+ 'default' => '', |
|
320 |
+ ]); |
|
321 |
+ $table->addColumn('daily_start', Types::STRING, [ |
|
322 |
+ 'notnull' => false, |
|
323 |
+ 'length' => 8, |
|
324 |
+ 'default' => '', |
|
325 |
+ ]); |
|
326 |
+ $table->addColumn('daily_end', Types::STRING, [ |
|
327 |
+ 'notnull' => false, |
|
328 |
+ 'length' => 8, |
|
329 |
+ 'default' => '', |
|
330 |
+ ]); |
|
331 |
+ $table->addColumn('vacation_start', Types::DATETIME, [ |
|
332 |
+ 'notnull' => false, |
|
333 |
+ ]); |
|
334 |
+ $table->addColumn('vacation_end', Types::DATETIME, [ |
|
335 |
+ 'notnull' => false, |
|
336 |
+ ]); |
|
337 |
+ $table->addColumn('message_text', Types::TEXT, [ |
|
338 |
+ 'notnull' => false, |
|
339 |
+ 'default' => '', |
|
340 |
+ ]); |
|
341 |
+ $table->setPrimaryKey(['id']); |
|
342 |
+ $table->addUniqueIndex(['id']); |
|
343 |
+ |
|
344 |
+ } |
|
345 |
+ |
|
346 |
+ |
|
347 |
+ if (!$schema->hasTable('sms_relent_restrict')) { |
|
348 |
+ $table = $schema->createTable('sms_relent_restrict'); |
|
349 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
350 |
+ 'autoincrement' => true, |
|
351 |
+ 'notnull' => true, |
|
352 |
+ 'length' => 11, |
|
353 |
+ 'unsigned' => true, |
|
354 |
+ ]); |
|
355 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
356 |
+ 'notnull' => true, |
|
357 |
+ 'length' => 128, |
|
358 |
+ ]); |
|
359 |
+ $table->addColumn('saved_by_dsplname', Types::STRING, [ |
|
360 |
+ 'notnull' => true, |
|
361 |
+ 'length' => 255, |
|
362 |
+ ]); |
|
363 |
+ $table->addColumn('phone_number', Types::STRING, [ |
|
364 |
+ 'notnull' => true, |
|
365 |
+ 'length' => 128, |
|
366 |
+ ]); |
|
367 |
+ $table->addColumn('groups', Types::STRING, [ |
|
368 |
+ 'notnull' => true, |
|
369 |
+ 'length' => 2048, |
|
370 |
+ ]); |
|
371 |
+ $table->addColumn('users', Types::STRING, [ |
|
372 |
+ 'notnull' => true, |
|
373 |
+ 'length' => 2048, |
|
374 |
+ ]); |
|
375 |
+ $table->setPrimaryKey(['id']); |
|
376 |
+ $table->addUniqueIndex(['id']); |
|
377 |
+ |
|
378 |
+ } |
|
379 |
+ |
|
380 |
+ if (!$schema->hasTable('sms_relent_subac')) { |
|
381 |
+ $table = $schema->createTable('sms_relent_subac'); |
|
382 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
383 |
+ 'autoincrement' => true, |
|
384 |
+ 'notnull' => true, |
|
385 |
+ 'length' => 11, |
|
386 |
+ 'unsigned' => true, |
|
387 |
+ ]); |
|
388 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
389 |
+ 'notnull' => true, |
|
390 |
+ 'length' => 128, |
|
391 |
+ ]); |
|
392 |
+ $table->addColumn('tnx_groups_allowed', Types::TEXT, [ |
|
393 |
+ 'notnull' => false, |
|
394 |
+ 'default' => '', |
|
395 |
+ ]); |
|
396 |
+ $table->addColumn('tnx_users_allowed', Types::TEXT, [ |
|
397 |
+ 'notnull' => false, |
|
398 |
+ 'default' => '', |
|
399 |
+ ]); |
|
400 |
+ $table->addColumn('plv_groups_allowed', Types::TEXT, [ |
|
401 |
+ 'notnull' => false, |
|
402 |
+ 'default' => '', |
|
403 |
+ ]); |
|
404 |
+ $table->addColumn('plv_users_allowed', Types::TEXT, [ |
|
405 |
+ 'notnull' => false, |
|
406 |
+ 'default' => '', |
|
407 |
+ ]); |
|
408 |
+ $table->addColumn('twl_groups_allowed', Types::TEXT, [ |
|
409 |
+ 'notnull' => false, |
|
410 |
+ 'default' => '', |
|
411 |
+ ]); |
|
412 |
+ $table->addColumn('twl_users_allowed', Types::TEXT, [ |
|
413 |
+ 'notnull' => false, |
|
414 |
+ 'default' => '', |
|
415 |
+ ]); |
|
416 |
+ $table->addColumn('flr_groups_allowed', Types::TEXT, [ |
|
417 |
+ 'notnull' => false, |
|
418 |
+ 'default' => '', |
|
419 |
+ ]); |
|
420 |
+ $table->addColumn('flr_users_allowed', Types::TEXT, [ |
|
421 |
+ 'notnull' => false, |
|
422 |
+ 'default' => '', |
|
423 |
+ ]); |
|
424 |
+ $table->setPrimaryKey(['id']); |
|
425 |
+ $table->addUniqueIndex(['id']); |
|
426 |
+ } |
|
427 |
+ |
|
428 |
+ |
|
429 |
+ return $schema; |
|
430 |
+ } |
|
431 |
+ |
|
432 |
+ public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { |
|
433 |
+ |
|
434 |
+ |
|
435 |
+ // Enter the Nextcloud display name in the 'author_displayname' column of the 'sms_relent_sent' table, for messages that were sent before the upgrade |
|
436 |
+ $getrecfromnb = $this->connection->prepare('SELECT `id`, `user_id` FROM `*PREFIX*sms_relent_sent`'); |
|
437 |
+ $getrecfromnbres = $getrecfromnb->execute(); |
|
438 |
+ |
|
439 |
+ $recdatauids = []; |
|
440 |
+ $idsent = []; |
|
441 |
+ while ($rowfetched = $getrecfromnbres->fetch()) { |
|
442 |
+ $recdatauids[] = $rowfetched['user_id']; |
|
443 |
+ $idsent[] = $rowfetched['id']; |
|
444 |
+ } |
|
445 |
+ $getrecfromnbres->closeCursor(); |
|
446 |
+ |
|
447 |
+ if ($recdatauids) { |
|
448 |
+ |
|
449 |
+ $recuids = array_values(array_unique($recdatauids)); |
|
450 |
+ $acdatausrdn = []; |
|
451 |
+ |
|
452 |
+ foreach ($recuids as $dnkey => $dnvalue) { |
|
453 |
+ $getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?'); |
|
454 |
+ $getacdatadnres = $getacdatadn->execute([$dnvalue, 'displayname']); |
|
455 |
+ |
|
456 |
+ while ($acusrdnfetched = $getacdatadnres->fetch()) { |
|
457 |
+ $acdatausrdn[$dnvalue] = $acusrdnfetched['value']; |
|
458 |
+ } |
|
459 |
+ $getacdatadnres->closeCursor(); |
|
460 |
+ } |
|
461 |
+ |
|
462 |
+ foreach ($recdatauids as $pdpkey => $pdpvalue) { |
|
463 |
+ |
|
464 |
+ $updaterecms = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_sent` SET `author_displayname` = ? WHERE `user_id` = ? AND `id` = ?'); |
|
465 |
+ $updaterecmsres = $updaterecms->execute([$acdatausrdn[$pdpvalue], $pdpvalue, $idsent[$pdpkey]]); |
|
466 |
+ $updaterecmsres->closeCursor(); |
|
467 |
+ } |
|
468 |
+ } |
|
469 |
+ |
|
470 |
+ |
|
471 |
+ // Enter the Nextcloud display name in the 'author_displayname' column of the 'sms_relent_received' table, for messages that were received before the upgrade |
|
472 |
+ $getrecfromnb = $this->connection->prepare('SELECT `id`, `date`, `from` FROM `*PREFIX*sms_relent_received`'); |
|
473 |
+ $getrecfromnbres = $getrecfromnb->execute(); |
|
474 |
+ |
|
475 |
+ $recdatanmbrs = []; |
|
476 |
+ $idsrc = []; |
|
477 |
+ $daterec = []; |
|
478 |
+ while ($rowfetched = $getrecfromnbres->fetch()) { |
|
479 |
+ $recdatanmbrs[] = $rowfetched['from']; |
|
480 |
+ $idsrc[] = $rowfetched['id']; |
|
481 |
+ $daterecarr = explode(":", $rowfetched['date']); |
|
482 |
+ $daterec[] = $daterecarr[0]; |
|
483 |
+ } |
|
484 |
+ $getrecfromnbres->closeCursor(); |
|
485 |
+ |
|
486 |
+ if ($recdatanmbrs) { |
|
487 |
+ |
|
488 |
+ foreach ($recdatanmbrs as $rckey => $rcvalue) { |
|
489 |
+ |
|
490 |
+ // Search for the associated Display Name in the previous messages sent from the same phone number, in the 'sms_relent_sent' table |
|
491 |
+ $recmsgfromprc = '%' . $rcvalue; |
|
492 |
+ $recdataprc = $daterec[$rckey] . '%'; |
|
493 |
+ $getdspnmst = $this->connection->prepare('SELECT `date`, `from`, `author_displayname` FROM `*PREFIX*sms_relent_sent` WHERE `from` LIKE ? AND `date` LIKE ?'); |
|
494 |
+ $getdspnmstres = $getdspnmst->execute([$recmsgfromprc, $recdataprc]); |
|
495 |
+ |
|
496 |
+ $dispnamearr = []; |
|
497 |
+ while ($dspnmstfetched = $getdspnmstres->fetch()) { |
|
498 |
+ $dispnamearr[] = $dspnmstfetched['author_displayname']; |
|
499 |
+ } |
|
500 |
+ $getdspnmstres->closeCursor(); |
|
501 |
+ |
|
502 |
+ if ($dispnamearr) { |
|
503 |
+ $descdspnmarr = array_reverse($dispnamearr); |
|
504 |
+ $authorDisplayNm = $descdspnmarr[0]; |
|
505 |
+ $internalSender = 1; |
|
506 |
+ |
|
507 |
+ } else { |
|
508 |
+ |
|
509 |
+ $authorDisplayNm = ''; |
|
510 |
+ |
|
511 |
+ $getfrom = $this->connection->prepare('SELECT `from` FROM `*PREFIX*sms_relent_sent` WHERE `from` LIKE ? LIMIT 1'); |
|
512 |
+ $getfromres = $getfrom->execute([$recmsgfromprc]); |
|
513 |
+ $fromfetched = $getfromres->fetch(); |
|
514 |
+ |
|
515 |
+ if ($fromfetched) { $internalSender = 1; } else { $internalSender = 0; } |
|
516 |
+ |
|
517 |
+ |
|
518 |
+ // Search for the associated Display Name in the previous messages coming from the same phone number, in the 'sms_relent_received' table |
|
519 |
+ $getdspnm = $this->connection->prepare('SELECT `from`, `author_displayname` FROM `*PREFIX*sms_relent_received` WHERE `from` = ?'); |
|
520 |
+ $getdspnmres = $getdspnm->execute([$rcvalue]); |
|
521 |
+ |
|
522 |
+ $dspnmearr = []; |
|
523 |
+ while ($dspnmfetched = $getdspnmres->fetch()) { |
|
524 |
+ if ($dspnmfetched['author_displayname']) { |
|
525 |
+ $dspnmearr[] = $dspnmfetched['author_displayname']; |
|
526 |
+ } |
|
527 |
+ } |
|
528 |
+ $getdspnmres->closeCursor(); |
|
529 |
+ |
|
530 |
+ if ($dspnmearr) { |
|
531 |
+ $descdisplaynmarr = array_reverse($dspnmearr); |
|
532 |
+ $authorDisplayNm = $descdisplaynmarr[0]; |
|
533 |
+ } else { $authorDisplayNm = ''; } |
|
534 |
+ } |
|
535 |
+ |
|
536 |
+ $updaterecms = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_received` SET `author_displayname` = ?, `internal_sender` = ? |
|
537 |
+ WHERE `from` LIKE ? AND `id` = ?'); |
|
538 |
+ $updaterecmsres = $updaterecms->execute([$authorDisplayNm, $internalSender, $recmsgfromprc, $idsrc[$rckey]]); |
|
539 |
+ $updaterecmsres->closeCursor(); |
|
540 |
+ } |
|
541 |
+ } |
|
542 |
+ |
|
543 |
+ return null; |
|
544 |
+ } |
|
545 |
+ |
|
546 |
+} |
0 | 547 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,546 @@ |
1 |
+<?php |
|
2 |
+/** |
|
3 |
+ * @copyright 2021 Double Bastion LLC <www.doublebastion.com> |
|
4 |
+ * |
|
5 |
+ * @author Double Bastion LLC |
|
6 |
+ * |
|
7 |
+ * @license GNU AGPL version 3 or any later version |
|
8 |
+ * |
|
9 |
+ * This program is free software; you can redistribute it and/or |
|
10 |
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE |
|
11 |
+ * License as published by the Free Software Foundation; either |
|
12 |
+ * version 3 of the License, or any later version. |
|
13 |
+ * |
|
14 |
+ * This program is distributed in the hope that it will be useful, |
|
15 |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
16 |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
17 |
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details. |
|
18 |
+ * |
|
19 |
+ * You should have received a copy of the GNU Affero General Public |
|
20 |
+ * License along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
21 |
+ * |
|
22 |
+ */ |
|
23 |
+ |
|
24 |
+declare(strict_types=1); |
|
25 |
+ |
|
26 |
+namespace OCA\SMSRelentless\Migration; |
|
27 |
+ |
|
28 |
+use Closure; |
|
29 |
+use OCP\DB\Types; |
|
30 |
+use OCP\DB\ISchemaWrapper; |
|
31 |
+use OCP\IDBConnection; |
|
32 |
+use OCP\Migration\IOutput; |
|
33 |
+use OCP\Migration\SimpleMigrationStep; |
|
34 |
+ |
|
35 |
+ |
|
36 |
+class Version123Date20230524182156 extends SimpleMigrationStep { |
|
37 |
+ |
|
38 |
+ /** @var IDBConnection */ |
|
39 |
+ private $connection; |
|
40 |
+ |
|
41 |
+ /** |
|
42 |
+ * @param IDBConnection $connection |
|
43 |
+ */ |
|
44 |
+ public function __construct(IDBConnection $connection) { |
|
45 |
+ $this->connection = $connection; |
|
46 |
+ } |
|
47 |
+ |
|
48 |
+ /** |
|
49 |
+ * @param IOutput $output |
|
50 |
+ * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` |
|
51 |
+ * @param array $options |
|
52 |
+ * @return null|ISchemaWrapper |
|
53 |
+ */ |
|
54 |
+ public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { |
|
55 |
+ /** @var ISchemaWrapper $schema */ |
|
56 |
+ $schema = $schemaClosure(); |
|
57 |
+ |
|
58 |
+ if (!$schema->hasTable('sms_relent_settings')) { |
|
59 |
+ $table = $schema->createTable('sms_relent_settings'); |
|
60 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
61 |
+ 'autoincrement' => true, |
|
62 |
+ 'notnull' => true, |
|
63 |
+ 'length' => 11, |
|
64 |
+ 'unsigned' => true, |
|
65 |
+ ]); |
|
66 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
67 |
+ 'notnull' => true, |
|
68 |
+ 'length' => 128, |
|
69 |
+ ]); |
|
70 |
+ $table->addColumn('telapi_key', Types::STRING, [ |
|
71 |
+ 'notnull' => true, |
|
72 |
+ 'length' => 512, |
|
73 |
+ ]); |
|
74 |
+ $table->addColumn('tel_pub_key', Types::STRING, [ |
|
75 |
+ 'notnull' => true, |
|
76 |
+ 'length' => 512, |
|
77 |
+ ]); |
|
78 |
+ $table->addColumn('telapi_url_rec', Types::STRING, [ |
|
79 |
+ 'notnull' => true, |
|
80 |
+ 'length' => 512, |
|
81 |
+ ]); |
|
82 |
+ $table->addColumn('telapi_url', Types::STRING, [ |
|
83 |
+ 'notnull' => true, |
|
84 |
+ 'length' => 512, |
|
85 |
+ ]); |
|
86 |
+ $table->addColumn('messaging_profile_id', Types::STRING, [ |
|
87 |
+ 'notnull' => true, |
|
88 |
+ 'length' => 512, |
|
89 |
+ ]); |
|
90 |
+ $table->addColumn('nexapi_key', Types::STRING, [ |
|
91 |
+ 'notnull' => true, |
|
92 |
+ 'length' => 512, |
|
93 |
+ ]); |
|
94 |
+ $table->addColumn('nexapi_secret', Types::STRING, [ |
|
95 |
+ 'notnull' => true, |
|
96 |
+ 'length' => 512, |
|
97 |
+ ]); |
|
98 |
+ $table->addColumn('nexapi_url_rec', Types::STRING, [ |
|
99 |
+ 'notnull' => true, |
|
100 |
+ 'length' => 512, |
|
101 |
+ ]); |
|
102 |
+ $table->addColumn('nexapi_url', Types::STRING, [ |
|
103 |
+ 'notnull' => true, |
|
104 |
+ 'length' => 512, |
|
105 |
+ ]); |
|
106 |
+ $table->addColumn('twilapi_key', Types::STRING, [ |
|
107 |
+ 'notnull' => true, |
|
108 |
+ 'length' => 512, |
|
109 |
+ ]); |
|
110 |
+ $table->addColumn('twilapi_secret', Types::STRING, [ |
|
111 |
+ 'notnull' => true, |
|
112 |
+ 'length' => 512, |
|
113 |
+ ]); |
|
114 |
+ $table->addColumn('twilapi_url_rec', Types::STRING, [ |
|
115 |
+ 'notnull' => true, |
|
116 |
+ 'length' => 512, |
|
117 |
+ ]); |
|
118 |
+ $table->addColumn('twilapi_url', Types::STRING, [ |
|
119 |
+ 'notnull' => true, |
|
120 |
+ 'length' => 512, |
|
121 |
+ ]); |
|
122 |
+ $table->addColumn('flowapi_key', Types::STRING, [ |
|
123 |
+ 'notnull' => true, |
|
124 |
+ 'length' => 512, |
|
125 |
+ ]); |
|
126 |
+ $table->addColumn('flowapi_secret', Types::STRING, [ |
|
127 |
+ 'notnull' => true, |
|
128 |
+ 'length' => 512, |
|
129 |
+ ]); |
|
130 |
+ $table->addColumn('flowapi_url_rec', Types::STRING, [ |
|
131 |
+ 'notnull' => true, |
|
132 |
+ 'length' => 512, |
|
133 |
+ ]); |
|
134 |
+ $table->addColumn('flowapi_url', Types::STRING, [ |
|
135 |
+ 'notnull' => true, |
|
136 |
+ 'length' => 512, |
|
137 |
+ ]); |
|
138 |
+ $table->addColumn('tel_sender_name', Types::STRING, [ |
|
139 |
+ 'notnull' => false, |
|
140 |
+ 'length' => 48, |
|
141 |
+ 'default' => '', |
|
142 |
+ ]); |
|
143 |
+ $table->addColumn('nex_sender_name', Types::STRING, [ |
|
144 |
+ 'notnull' => false, |
|
145 |
+ 'length' => 48, |
|
146 |
+ 'default' => '', |
|
147 |
+ ]); |
|
148 |
+ $table->addColumn('twil_sender_name', Types::STRING, [ |
|
149 |
+ 'notnull' => false, |
|
150 |
+ 'length' => 48, |
|
151 |
+ 'default' => '', |
|
152 |
+ ]); |
|
153 |
+ $table->addColumn('flow_sender_name', Types::STRING, [ |
|
154 |
+ 'notnull' => false, |
|
155 |
+ 'length' => 48, |
|
156 |
+ 'default' => '', |
|
157 |
+ ]); |
|
158 |
+ $table->addColumn('messagesperpage', Types::INTEGER, [ |
|
159 |
+ 'notnull' => false, |
|
160 |
+ 'length' => 11, |
|
161 |
+ 'unsigned' => true, |
|
162 |
+ ]); |
|
163 |
+ $table->addColumn('get_notify', Types::SMALLINT, [ |
|
164 |
+ 'notnull' => false, |
|
165 |
+ 'length' => 1, |
|
166 |
+ ]); |
|
167 |
+ $table->addColumn('notification_email', Types::STRING, [ |
|
168 |
+ 'notnull' => false, |
|
169 |
+ 'length' => 512, |
|
170 |
+ 'default' => '', |
|
171 |
+ ]); |
|
172 |
+ $table->addColumn('getsmsinemail', Types::SMALLINT, [ |
|
173 |
+ 'notnull' => false, |
|
174 |
+ 'length' => 1, |
|
175 |
+ ]); |
|
176 |
+ $table->addColumn('show_all_messages', Types::SMALLINT, [ |
|
177 |
+ 'notnull' => false, |
|
178 |
+ 'length' => 1, |
|
179 |
+ ]); |
|
180 |
+ $table->addColumn('show_display_names', Types::SMALLINT, [ |
|
181 |
+ 'notnull' => false, |
|
182 |
+ 'length' => 1, |
|
183 |
+ ]); |
|
184 |
+ $table->setPrimaryKey(['id']); |
|
185 |
+ $table->addUniqueIndex(['id']); |
|
186 |
+ |
|
187 |
+ } |
|
188 |
+ |
|
189 |
+ |
|
190 |
+ if (!$schema->hasTable('sms_relent_received')) { |
|
191 |
+ $table = $schema->createTable('sms_relent_received'); |
|
192 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
193 |
+ 'autoincrement' => true, |
|
194 |
+ 'notnull' => true, |
|
195 |
+ 'length' => 11, |
|
196 |
+ 'unsigned' => true, |
|
197 |
+ ]); |
|
198 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
199 |
+ 'notnull' => true, |
|
200 |
+ 'length' => 64, |
|
201 |
+ ]); |
|
202 |
+ $table->addColumn('message_id', Types::STRING, [ |
|
203 |
+ 'notnull' => true, |
|
204 |
+ 'length' => 512, |
|
205 |
+ ]); |
|
206 |
+ $table->addColumn('date', Types::DATETIME, [ |
|
207 |
+ 'notnull' => true, |
|
208 |
+ ]); |
|
209 |
+ $table->addColumn('from', Types::STRING, [ |
|
210 |
+ 'notnull' => true, |
|
211 |
+ 'length' => 128, |
|
212 |
+ ]); |
|
213 |
+ $table->addColumn('to', Types::STRING, [ |
|
214 |
+ 'notnull' => true, |
|
215 |
+ 'length' => 128, |
|
216 |
+ ]); |
|
217 |
+ $table->addColumn('message', Types::TEXT, [ |
|
218 |
+ 'notnull' => false, |
|
219 |
+ 'default' => '', |
|
220 |
+ ]); |
|
221 |
+ $table->addColumn('author_displayname', Types::STRING, [ |
|
222 |
+ 'notnull' => true, |
|
223 |
+ 'length' => 255, |
|
224 |
+ ]); |
|
225 |
+ $table->addColumn('internal_sender', Types::SMALLINT, [ |
|
226 |
+ 'notnull' => false, |
|
227 |
+ 'length' => 1, |
|
228 |
+ ]); |
|
229 |
+ $table->setPrimaryKey(['id']); |
|
230 |
+ $table->addUniqueIndex(['id']); |
|
231 |
+ |
|
232 |
+ } |
|
233 |
+ |
|
234 |
+ |
|
235 |
+ if (!$schema->hasTable('sms_relent_sent')) { |
|
236 |
+ $table = $schema->createTable('sms_relent_sent'); |
|
237 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
238 |
+ 'autoincrement' => true, |
|
239 |
+ 'notnull' => true, |
|
240 |
+ 'length' => 11, |
|
241 |
+ 'unsigned' => true, |
|
242 |
+ ]); |
|
243 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
244 |
+ 'notnull' => true, |
|
245 |
+ 'length' => 64, |
|
246 |
+ ]); |
|
247 |
+ $table->addColumn('message_id', Types::STRING, [ |
|
248 |
+ 'notnull' => true, |
|
249 |
+ 'length' => 512, |
|
250 |
+ ]); |
|
251 |
+ $table->addColumn('date', Types::DATETIME, [ |
|
252 |
+ 'notnull' => true, |
|
253 |
+ ]); |
|
254 |
+ $table->addColumn('from', Types::STRING, [ |
|
255 |
+ 'notnull' => true, |
|
256 |
+ 'length' => 128, |
|
257 |
+ ]); |
|
258 |
+ $table->addColumn('to', Types::STRING, [ |
|
259 |
+ 'notnull' => true, |
|
260 |
+ 'length' => 128, |
|
261 |
+ ]); |
|
262 |
+ $table->addColumn('network ', Types::STRING, [ |
|
263 |
+ 'notnull' => false, |
|
264 |
+ 'length' => 64, |
|
265 |
+ 'default' => '', |
|
266 |
+ ]); |
|
267 |
+ $table->addColumn('price', Types::STRING, [ |
|
268 |
+ 'notnull' => false, |
|
269 |
+ 'length' => 64, |
|
270 |
+ 'default' => '', |
|
271 |
+ ]); |
|
272 |
+ $table->addColumn('status', Types::STRING, [ |
|
273 |
+ 'notnull' => false, |
|
274 |
+ 'length' => 512, |
|
275 |
+ 'default' => '', |
|
276 |
+ ]); |
|
277 |
+ $table->addColumn('deliveryreceipt', Types::STRING, [ |
|
278 |
+ 'notnull' => false, |
|
279 |
+ 'length' => 64, |
|
280 |
+ 'default' => '', |
|
281 |
+ ]); |
|
282 |
+ $table->addColumn('message', Types::TEXT, [ |
|
283 |
+ 'notnull' => false, |
|
284 |
+ 'default' => '', |
|
285 |
+ ]); |
|
286 |
+ $table->addColumn('author_displayname', Types::STRING, [ |
|
287 |
+ 'notnull' => true, |
|
288 |
+ 'length' => 255, |
|
289 |
+ ]); |
|
290 |
+ $table->setPrimaryKey(['id']); |
|
291 |
+ $table->addUniqueIndex(['id']); |
|
292 |
+ |
|
293 |
+ } |
|
294 |
+ |
|
295 |
+ |
|
296 |
+ if (!$schema->hasTable('sms_relent_autorply')) { |
|
297 |
+ $table = $schema->createTable('sms_relent_autorply'); |
|
298 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
299 |
+ 'autoincrement' => true, |
|
300 |
+ 'notnull' => true, |
|
301 |
+ 'length' => 11, |
|
302 |
+ 'unsigned' => true, |
|
303 |
+ ]); |
|
304 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
305 |
+ 'notnull' => true, |
|
306 |
+ 'length' => 128, |
|
307 |
+ ]); |
|
308 |
+ $table->addColumn('saved_by_dsplname', Types::STRING, [ |
|
309 |
+ 'notnull' => true, |
|
310 |
+ 'length' => 255, |
|
311 |
+ ]); |
|
312 |
+ $table->addColumn('phone_number', Types::STRING, [ |
|
313 |
+ 'notnull' => true, |
|
314 |
+ 'length' => 128, |
|
315 |
+ ]); |
|
316 |
+ $table->addColumn('days_of_week', Types::STRING, [ |
|
317 |
+ 'notnull' => false, |
|
318 |
+ 'length' => 64, |
|
319 |
+ 'default' => '', |
|
320 |
+ ]); |
|
321 |
+ $table->addColumn('daily_start', Types::STRING, [ |
|
322 |
+ 'notnull' => false, |
|
323 |
+ 'length' => 8, |
|
324 |
+ 'default' => '', |
|
325 |
+ ]); |
|
326 |
+ $table->addColumn('daily_end', Types::STRING, [ |
|
327 |
+ 'notnull' => false, |
|
328 |
+ 'length' => 8, |
|
329 |
+ 'default' => '', |
|
330 |
+ ]); |
|
331 |
+ $table->addColumn('vacation_start', Types::DATETIME, [ |
|
332 |
+ 'notnull' => false, |
|
333 |
+ ]); |
|
334 |
+ $table->addColumn('vacation_end', Types::DATETIME, [ |
|
335 |
+ 'notnull' => false, |
|
336 |
+ ]); |
|
337 |
+ $table->addColumn('message_text', Types::TEXT, [ |
|
338 |
+ 'notnull' => false, |
|
339 |
+ 'default' => '', |
|
340 |
+ ]); |
|
341 |
+ $table->setPrimaryKey(['id']); |
|
342 |
+ $table->addUniqueIndex(['id']); |
|
343 |
+ |
|
344 |
+ } |
|
345 |
+ |
|
346 |
+ |
|
347 |
+ if (!$schema->hasTable('sms_relent_restrict')) { |
|
348 |
+ $table = $schema->createTable('sms_relent_restrict'); |
|
349 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
350 |
+ 'autoincrement' => true, |
|
351 |
+ 'notnull' => true, |
|
352 |
+ 'length' => 11, |
|
353 |
+ 'unsigned' => true, |
|
354 |
+ ]); |
|
355 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
356 |
+ 'notnull' => true, |
|
357 |
+ 'length' => 128, |
|
358 |
+ ]); |
|
359 |
+ $table->addColumn('saved_by_dsplname', Types::STRING, [ |
|
360 |
+ 'notnull' => true, |
|
361 |
+ 'length' => 255, |
|
362 |
+ ]); |
|
363 |
+ $table->addColumn('phone_number', Types::STRING, [ |
|
364 |
+ 'notnull' => true, |
|
365 |
+ 'length' => 128, |
|
366 |
+ ]); |
|
367 |
+ $table->addColumn('groups', Types::STRING, [ |
|
368 |
+ 'notnull' => true, |
|
369 |
+ 'length' => 2048, |
|
370 |
+ ]); |
|
371 |
+ $table->addColumn('users', Types::STRING, [ |
|
372 |
+ 'notnull' => true, |
|
373 |
+ 'length' => 2048, |
|
374 |
+ ]); |
|
375 |
+ $table->setPrimaryKey(['id']); |
|
376 |
+ $table->addUniqueIndex(['id']); |
|
377 |
+ |
|
378 |
+ } |
|
379 |
+ |
|
380 |
+ if (!$schema->hasTable('sms_relent_subac')) { |
|
381 |
+ $table = $schema->createTable('sms_relent_subac'); |
|
382 |
+ $table->addColumn('id', Types::BIGINT, [ |
|
383 |
+ 'autoincrement' => true, |
|
384 |
+ 'notnull' => true, |
|
385 |
+ 'length' => 11, |
|
386 |
+ 'unsigned' => true, |
|
387 |
+ ]); |
|
388 |
+ $table->addColumn('user_id', Types::STRING, [ |
|
389 |
+ 'notnull' => true, |
|
390 |
+ 'length' => 128, |
|
391 |
+ ]); |
|
392 |
+ $table->addColumn('tnx_groups_allowed', Types::TEXT, [ |
|
393 |
+ 'notnull' => false, |
|
394 |
+ 'default' => '', |
|
395 |
+ ]); |
|
396 |
+ $table->addColumn('tnx_users_allowed', Types::TEXT, [ |
|
397 |
+ 'notnull' => false, |
|
398 |
+ 'default' => '', |
|
399 |
+ ]); |
|
400 |
+ $table->addColumn('plv_groups_allowed', Types::TEXT, [ |
|
401 |
+ 'notnull' => false, |
|
402 |
+ 'default' => '', |
|
403 |
+ ]); |
|
404 |
+ $table->addColumn('plv_users_allowed', Types::TEXT, [ |
|
405 |
+ 'notnull' => false, |
|
406 |
+ 'default' => '', |
|
407 |
+ ]); |
|
408 |
+ $table->addColumn('twl_groups_allowed', Types::TEXT, [ |
|
409 |
+ 'notnull' => false, |
|
410 |
+ 'default' => '', |
|
411 |
+ ]); |
|
412 |
+ $table->addColumn('twl_users_allowed', Types::TEXT, [ |
|
413 |
+ 'notnull' => false, |
|
414 |
+ 'default' => '', |
|
415 |
+ ]); |
|
416 |
+ $table->addColumn('flr_groups_allowed', Types::TEXT, [ |
|
417 |
+ 'notnull' => false, |
|
418 |
+ 'default' => '', |
|
419 |
+ ]); |
|
420 |
+ $table->addColumn('flr_users_allowed', Types::TEXT, [ |
|
421 |
+ 'notnull' => false, |
|
422 |
+ 'default' => '', |
|
423 |
+ ]); |
|
424 |
+ $table->setPrimaryKey(['id']); |
|
425 |
+ $table->addUniqueIndex(['id']); |
|
426 |
+ } |
|
427 |
+ |
|
428 |
+ |
|
429 |
+ return $schema; |
|
430 |
+ } |
|
431 |
+ |
|
432 |
+ public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { |
|
433 |
+ |
|
434 |
+ |
|
435 |
+ // Enter the Nextcloud display name in the 'author_displayname' column of the 'sms_relent_sent' table, for messages that were sent before the upgrade |
|
436 |
+ $getrecfromnb = $this->connection->prepare('SELECT `id`, `user_id` FROM `*PREFIX*sms_relent_sent`'); |
|
437 |
+ $getrecfromnbres = $getrecfromnb->execute(); |
|
438 |
+ |
|
439 |
+ $recdatauids = []; |
|
440 |
+ $idsent = []; |
|
441 |
+ while ($rowfetched = $getrecfromnbres->fetch()) { |
|
442 |
+ $recdatauids[] = $rowfetched['user_id']; |
|
443 |
+ $idsent[] = $rowfetched['id']; |
|
444 |
+ } |
|
445 |
+ $getrecfromnbres->closeCursor(); |
|
446 |
+ |
|
447 |
+ if ($recdatauids) { |
|
448 |
+ |
|
449 |
+ $recuids = array_values(array_unique($recdatauids)); |
|
450 |
+ $acdatausrdn = []; |
|
451 |
+ |
|
452 |
+ foreach ($recuids as $dnkey => $dnvalue) { |
|
453 |
+ $getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?'); |
|
454 |
+ $getacdatadnres = $getacdatadn->execute([$dnvalue, 'displayname']); |
|
455 |
+ |
|
456 |
+ while ($acusrdnfetched = $getacdatadnres->fetch()) { |
|
457 |
+ $acdatausrdn[$dnvalue] = $acusrdnfetched['value']; |
|
458 |
+ } |
|
459 |
+ $getacdatadnres->closeCursor(); |
|
460 |
+ } |
|
461 |
+ |
|
462 |
+ foreach ($recdatauids as $pdpkey => $pdpvalue) { |
|
463 |
+ |
|
464 |
+ $updaterecms = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_sent` SET `author_displayname` = ? WHERE `user_id` = ? AND `id` = ?'); |
|
465 |
+ $updaterecmsres = $updaterecms->execute([$acdatausrdn[$pdpvalue], $pdpvalue, $idsent[$pdpkey]]); |
|
466 |
+ $updaterecmsres->closeCursor(); |
|
467 |
+ } |
|
468 |
+ } |
|
469 |
+ |
|
470 |
+ |
|
471 |
+ // Enter the Nextcloud display name in the 'author_displayname' column of the 'sms_relent_received' table, for messages that were received before the upgrade |
|
472 |
+ $getrecfromnb = $this->connection->prepare('SELECT `id`, `date`, `from` FROM `*PREFIX*sms_relent_received`'); |
|
473 |
+ $getrecfromnbres = $getrecfromnb->execute(); |
|
474 |
+ |
|
475 |
+ $recdatanmbrs = []; |
|
476 |
+ $idsrc = []; |
|
477 |
+ $daterec = []; |
|
478 |
+ while ($rowfetched = $getrecfromnbres->fetch()) { |
|
479 |
+ $recdatanmbrs[] = $rowfetched['from']; |
|
480 |
+ $idsrc[] = $rowfetched['id']; |
|
481 |
+ $daterecarr = explode(":", $rowfetched['date']); |
|
482 |
+ $daterec[] = $daterecarr[0]; |
|
483 |
+ } |
|
484 |
+ $getrecfromnbres->closeCursor(); |
|
485 |
+ |
|
486 |
+ if ($recdatanmbrs) { |
|
487 |
+ |
|
488 |
+ foreach ($recdatanmbrs as $rckey => $rcvalue) { |
|
489 |
+ |
|
490 |
+ // Search for the associated Display Name in the previous messages sent from the same phone number, in the 'sms_relent_sent' table |
|
491 |
+ $recmsgfromprc = '%' . $rcvalue; |
|
492 |
+ $recdataprc = $daterec[$rckey] . '%'; |
|
493 |
+ $getdspnmst = $this->connection->prepare('SELECT `date`, `from`, `author_displayname` FROM `*PREFIX*sms_relent_sent` WHERE `from` LIKE ? AND `date` LIKE ?'); |
|
494 |
+ $getdspnmstres = $getdspnmst->execute([$recmsgfromprc, $recdataprc]); |
|
495 |
+ |
|
496 |
+ $dispnamearr = []; |
|
497 |
+ while ($dspnmstfetched = $getdspnmstres->fetch()) { |
|
498 |
+ $dispnamearr[] = $dspnmstfetched['author_displayname']; |
|
499 |
+ } |
|
500 |
+ $getdspnmstres->closeCursor(); |
|
501 |
+ |
|
502 |
+ if ($dispnamearr) { |
|
503 |
+ $descdspnmarr = array_reverse($dispnamearr); |
|
504 |
+ $authorDisplayNm = $descdspnmarr[0]; |
|
505 |
+ $internalSender = 1; |
|
506 |
+ |
|
507 |
+ } else { |
|
508 |
+ |
|
509 |
+ $authorDisplayNm = ''; |
|
510 |
+ |
|
511 |
+ $getfrom = $this->connection->prepare('SELECT `from` FROM `*PREFIX*sms_relent_sent` WHERE `from` LIKE ? LIMIT 1'); |
|
512 |
+ $getfromres = $getfrom->execute([$recmsgfromprc]); |
|
513 |
+ $fromfetched = $getfromres->fetch(); |
|
514 |
+ |
|
515 |
+ if ($fromfetched) { $internalSender = 1; } else { $internalSender = 0; } |
|
516 |
+ |
|
517 |
+ |
|
518 |
+ // Search for the associated Display Name in the previous messages coming from the same phone number, in the 'sms_relent_received' table |
|
519 |
+ $getdspnm = $this->connection->prepare('SELECT `from`, `author_displayname` FROM `*PREFIX*sms_relent_received` WHERE `from` = ?'); |
|
520 |
+ $getdspnmres = $getdspnm->execute([$rcvalue]); |
|
521 |
+ |
|
522 |
+ $dspnmearr = []; |
|
523 |
+ while ($dspnmfetched = $getdspnmres->fetch()) { |
|
524 |
+ if ($dspnmfetched['author_displayname']) { |
|
525 |
+ $dspnmearr[] = $dspnmfetched['author_displayname']; |
|
526 |
+ } |
|
527 |
+ } |
|
528 |
+ $getdspnmres->closeCursor(); |
|
529 |
+ |
|
530 |
+ if ($dspnmearr) { |
|
531 |
+ $descdisplaynmarr = array_reverse($dspnmearr); |
|
532 |
+ $authorDisplayNm = $descdisplaynmarr[0]; |
|
533 |
+ } else { $authorDisplayNm = ''; } |
|
534 |
+ } |
|
535 |
+ |
|
536 |
+ $updaterecms = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_received` SET `author_displayname` = ?, `internal_sender` = ? |
|
537 |
+ WHERE `from` LIKE ? AND `id` = ?'); |
|
538 |
+ $updaterecmsres = $updaterecms->execute([$authorDisplayNm, $internalSender, $recmsgfromprc, $idsrc[$rckey]]); |
|
539 |
+ $updaterecmsres->closeCursor(); |
|
540 |
+ } |
|
541 |
+ } |
|
542 |
+ |
|
543 |
+ return null; |
|
544 |
+ } |
|
545 |
+ |
|
546 |
+} |